Operações Relacionais em Prolog

Seleção, Projeção e Negação — como em SQL, mas com poder lógico

O modelo relacional de dados — popularizado por SQL — é baseado em operações como seleção
(filtrar linhas), projeção (escolher colunas) e junção.
Em Prolog, essas operações surgem naturalmente com regras, variáveis e unificação.
Vamos explorar cada uma delas usando uma base de filmes.

1. Base de dados: filmes

Considere a tabela filme(Título, Gênero, Ano, Duração), com os seguintes fatos:


 

2. Seleção — filtrar linhas (WHERE)

A seleção corresponde ao WHERE do SQL: escolhemos apenas as tuplas que
satisfazem uma condição. Em Prolog, criamos uma regra que inclui a condição como uma meta adicional.

Regra: classico(T, G, A, D) — filmes até 1985


 

Consultando:


 

3. Projeção — escolher colunas (SELECT)

A projeção seleciona apenas algumas colunas. Em Prolog, basta incluir apenas as variáveis
que nos interessam na cabeça da regra e usar _ para ignorar as demais.

Regra: classico(T, G) — apenas título e gênero


 

Consultando:


 

🔍 Variável anônima _: Usamos _ para ignorar o ano e a duração.
O Prolog não unifica _ com nenhum valor específico — ele simplesmente “joga fora” a informação.

Em SQL: SELECT titulo, genero FROM filme WHERE ano <= 1985;

4. Consultas com seleção e projeção

Podemos combinar as regras para fazer perguntas mais específicas:

🎯 “Quais são os títulos dos filmes clássicos de comédia?”

 

🎯 “Quais filmes clássicos têm duração maior que 120 minutos?”

 

5. Negação por Falha — not / \+

A negação por falha é uma forma de dizer “não existe prova” para uma determinada meta.
Internamente, o Prolog tenta satisfazer a meta; se falha, not sucede.

Exemplo: filmes que não são clássicos (lançados após 1985)


 

Consultando:


 

O Prolog tenta provar A =< 1985; como falha (pois 2001 > 1985), not sucede.

⚠️ Limitação da negação por falha: Ela não é a negação lógica completa.
Ela só funciona quando a meta está totalmente instanciada. Se houver variáveis livres,
o comportamento pode ser inesperado. Por isso, sempre coloque a geração das variáveis antes do not.

6. Comparação com SQL

Veja como as operações relacionais se traduzem entre SQL e Prolog:

Operação SQL Prolog
Seleção (linhas) WHERE ano <= 1985 A =< 1985 na regra
Projeção (colunas) SELECT titulo, genero Cabeça da regra com T, G
Ignorar coluna (não selecionar) Usar _ no lugar
Negacao (não clássico) WHERE NOT (ano <= 1985) not (A =< 1985)


7. Conclusão: Prolog como extensão do modelo relacional

O Prolog implementa de forma elegante as operações fundamentais da álgebra relacional:

  • Seleção → condições em regras.
  • Projeção → escolha de variáveis na cabeça da regra.
  • Junção → variáveis compartilhadas entre predicados.
  • Negacaonot / \+.

Além disso, o Prolog vai além, permitindo recursão, geração de hipóteses
e raciocínio lógico que não são possíveis no SQL puro. É uma ferramenta poderosa para quem
quer explorar o lado lógico dos dados.

Deixe um comentário