Este documento resume os principais conceitos da programação lógica em Prolog, incluindo:
1) Fatos, regras, variáveis e predicados para representar dados e relações;
2) Queries para extrair informação através da dedução lógica;
3) Exemplos simples usando uma família bíblica para ilustrar os conceitos.
2. PARTE 2 - PARADIGMA DECLARATIVO
PROLOG
PROGRAMMING IN LOGICS
Ronaldo F. Ramos (Instituto Federal do Ceará) Paradigmas de Programação 15 de outubro de 2023 2 / 48
3. Interpretadores Disponíveis
SWI - PROLOG
https://www.swi-prolog.org/
SWISH
https://swish.swi-prolog.org/
Gnu PROLOG
http://www.gprolog.org/
Em Python
https://pypi.org/project/pyswip/0.2.2/
Ronaldo F. Ramos (Instituto Federal do Ceará) Paradigmas de Programação 15 de outubro de 2023 3 / 48
4. Roteiro
Conceitos Iniciais
Definição de Programa, Computação, Termos, Átomos, Fatos, Regras e Queries
Definição de Metas, Meaning, Procedures, etc
Exemplos iniciais
Ronaldo F. Ramos (Instituto Federal do Ceará) Paradigmas de Programação 15 de outubro de 2023 4 / 48
6. Computação
Prova construtiva de uma meta a partir de um programa.
Ronaldo F. Ramos (Instituto Federal do Ceará) Paradigmas de Programação 15 de outubro de 2023 6 / 48
7. Termos
Blocos de construção para a representação de dados. Podem ser variáveis, inteiros, números
reais, átomos e listas.
Ronaldo F. Ramos (Instituto Federal do Ceará) Paradigmas de Programação 15 de outubro de 2023 7 / 48
8. Átomos
Alfanumérico: banana, c3, banana_split
Cadeias: ’Banana-split é para a sobremesa?’
Simbólicos: #, &, =
Especiais: $, !, ; , [, ],
Ronaldo F. Ramos (Instituto Federal do Ceará) Paradigmas de Programação 15 de outubro de 2023 8 / 48
9. Fatos
Forma mais simples de comando/declaração é um fato.
1 pai(abraão,isaque).
2 soma (0,1,1).
3 soma (1,1,2).
Ronaldo F. Ramos (Instituto Federal do Ceará) Paradigmas de Programação 15 de outubro de 2023 9 / 48
10. Uma Família Bíblica em Fatos 1/2
1 pai(terá,abraão).
2 pai(terá,naor).
3 pai(terá,arão).
4 pai(abraão,isaque).
5 pai(arão,ló).
6 pai(arão,milca).
7 pai(arão,iscá).
8 homem(terá).
9 homem(abraão).
10 homem(naor).
Ronaldo F. Ramos (Instituto Federal do Ceará) Paradigmas de Programação 15 de outubro de 2023 10 / 48
11. Uma Família Bíblica em Fatos 2/2
1 homem(arão).
2 homem(isaque).
3 homem(ló).
4 mulher(sara).
5 mulher(milca).
6 mulher(iscá).
7 mãe(sara,isaque).
Ronaldo F. Ramos (Instituto Federal do Ceará) Paradigmas de Programação 15 de outubro de 2023 11 / 48
12. Predicados
Um predicado é um nome dado a uma relação entre termos. Predicados definidos pelo usuário
e próprios da linguagem. O número de argumentos de um predicado é a sua Aridade.
Ronaldo F. Ramos (Instituto Federal do Ceará) Paradigmas de Programação 15 de outubro de 2023 12 / 48
13. Queries (Perguntas)
Uma pergunta é uma forma de extrair informação de programas lógicos. É um predicado
interrogativo. Uma pergunta pode conter uma ou mais metas.
Ex.
1 ?-pai(abraão,isaque).
2 ?-soma (0,1,1).
3 ?-soma (1,1,2).
Uma pergunta é consequência lógica de um fato idêntico.
Ronaldo F. Ramos (Instituto Federal do Ceará) Paradigmas de Programação 15 de outubro de 2023 13 / 48
14. Variáveis
Uma variável é uma representação de um dado que pode mudar ao longo do tempo. Não
representa uma posição de memória, mas um conceito abstrato.
Ex. X, _tape_number, Age
Sempre começam com letras maiúsculas ou caractere de sublinha (underscore).
Ronaldo F. Ramos (Instituto Federal do Ceará) Paradigmas de Programação 15 de outubro de 2023 14 / 48
15. Substituição
Conjunto finito (Possivelmente vazio) de pares na forma Xi = tj onde Xi é uma variável e ti é
um termo e Xi ̸= Xj ∀i ̸= j e Xi não ocorre em tj ∀i, j.
Ex. {X = isaque, Y = abraao}
O resultado de aplicação de uma substituição θ a um termo A é denotado por Aθ. Seja o
termo A = pai(abraao, X) e a substituição θ = {X = isaque} então Aθ = pai(abraao, isaque)
Ronaldo F. Ramos (Instituto Federal do Ceará) Paradigmas de Programação 15 de outubro de 2023 15 / 48
16. Instância
A é instância de B se existe uma substituição tal que A = Bθ
Ronaldo F. Ramos (Instituto Federal do Ceará) Paradigmas de Programação 15 de outubro de 2023 16 / 48
17. Perguntas Existenciais
Toda pergunta com variáveis se transforma em uma pergunta existencial.
Ex. pai(abraao, X) significa : "Existe alguém de quem abraão é pai?"
Ronaldo F. Ramos (Instituto Federal do Ceará) Paradigmas de Programação 15 de outubro de 2023 17 / 48
18. Regras
Expressões na forma de horn invertida.
< Consequente >: − < antecedente1, .., antecedenten > equivale a dizer Consequente se
antecedente1 e atencedente2 e... etc ou ainda para satisfazer o Consequente faça o
antecedente1, ... etc
Ex.
1 filho(X,Y) :- pai(Y,X), homem(X).
2 filha(X,Y) :- pai(Y,X), mulher(X).
Observe que a vírgula substitui a conjunção ∧
Ronaldo F. Ramos (Instituto Federal do Ceará) Paradigmas de Programação 15 de outubro de 2023 18 / 48
19. Cláusulas
Fatos ou regras são cláusulas. Finalizadas por um ponto.
Ronaldo F. Ramos (Instituto Federal do Ceará) Paradigmas de Programação 15 de outubro de 2023 19 / 48
20. Fatos Universais
Todos os fatos com variáveis são universalmente quantificados.
Todos gostam de caju.
1 gosta(X,caju).
Qualquer número multiplicado por zero resulta zero.
1 vezes (0,X,0).
Ronaldo F. Ramos (Instituto Federal do Ceará) Paradigmas de Programação 15 de outubro de 2023 20 / 48
21. Instância Comum
C é uma instância comum de A e B se é uma instância de A e uma instância de B, ou seja,
existem substituições θ1 e θ2 tais que C = Aθ1 = Bθ2
Ronaldo F. Ramos (Instituto Federal do Ceará) Paradigmas de Programação 15 de outubro de 2023 21 / 48
22. Perguntas Conjuntivas
Conjunção de metas colocadas como uma pergunta. As variáveis com mesmo nome criam
relação de dependência.
Ex.
Abraão é pai de alguém que por sua vez é pai de outra pessoa?
1 pai(abraao,X),pai(X,Y).
Uma pergunta conjuntiva é consequência lógica de um programa(P) se todas as metas na
conjunção são consequências de P e as variáveis compartilhadas são instanciadas com os
mesmos valores nas diferentes metas.
Ronaldo F. Ramos (Instituto Federal do Ceará) Paradigmas de Programação 15 de outubro de 2023 22 / 48
23. Programa
Um programa é um conjunto finito de regras.
Ronaldo F. Ramos (Instituto Federal do Ceará) Paradigmas de Programação 15 de outubro de 2023 23 / 48
24. Meta Quantificada Existencialmente
Uma meta quantificada existencialmente (G) é uma consequência lógica de um programa (P)
se existe uma instância ground A ← B1, B2, ..., Bnn > 0 tal que B1, B2, ..., Bn sejam
consequência lógica de P e A seja uma instância de G.
Ronaldo F. Ramos (Instituto Federal do Ceará) Paradigmas de Programação 15 de outubro de 2023 24 / 48
25. Procedimento - Procedure
Um conjunto de regras com o mesmo predicado na cabeça.
1 avo(X,Y) :- pai(X,Z), pai(Z,Y).
2 avo(X,Y) :- pai(X,Z), mae(Z,Y).
3 avoh(X,Y) :- mae(X,Z), pai(Z,Y).
4 avoh(X,Y) :- mae(X,Z), mae(Z,Y).
Ronaldo F. Ramos (Instituto Federal do Ceará) Paradigmas de Programação 15 de outubro de 2023 25 / 48
26. Redução
A redução de uma meta (G) por um programa (P) é a substituição de G pelo corpo de uma
instância de uma cláusula em P cuja cabeça é idêntica a G. Trata-se de um passo
computacional básico em programação lógica.
Ronaldo F. Ramos (Instituto Federal do Ceará) Paradigmas de Programação 15 de outubro de 2023 26 / 48
27. Redução
A redução de uma meta (G) por um programa (P) é a substituição de G pelo corpo de uma
instância de uma cláusula em P cuja cabeça é idêntica a G. Trata-se de um passo
computacional básico em programação lógica.
Ronaldo F. Ramos (Instituto Federal do Ceará) Paradigmas de Programação 15 de outubro de 2023 27 / 48
28. Meaning - Significado
O significado de um programa lógico é o conjunto de metas ground dedutíveis dele. Dizemos
que um programa é correto com relação a um significado desejado (M) se M(P) é subconjunto
de M
Ronaldo F. Ramos (Instituto Federal do Ceará) Paradigmas de Programação 15 de outubro de 2023 28 / 48
29. Comandos Iniciais Úteis do Interpretador
assert(<predicado ou regra>). - Adiciona um fato ou regra a base de conhecimento
halt. - Sai do interpretador
consult(<endereço do arquivo>). ou [<endereço do arquivo>] - Carrega programa
(base de conhecimento) para a memória.
trace. - Liga o modo de rastrabilidade para debug.
notrace. - Desliga o trace.
Ronaldo F. Ramos (Instituto Federal do Ceará) Paradigmas de Programação 15 de outubro de 2023 29 / 48
30. Programa 001 - Familia Bíblica
Use o interpretador ou o swish para carregar os predicados abaixo.
1 % base de dados biblicos
2 masculino(tera).
3 masculino(abraao).
4 masculino(naor).
5 masculino(haran).
6 masculino(isaque).
7 masculino(lo).
8 feminino(sara).
9 feminino(milca).
10 feminino(iscah).
11 ...
Ronaldo F. Ramos (Instituto Federal do Ceará) Paradigmas de Programação 15 de outubro de 2023 30 / 48
31. Programa 001 - Familia Bíblica
Use o interpretador ou o swish para carregar os predicados abaixo.
1 pai(tera,abraao).
2 pai(tera,naor).
3 pai(tera,haran).
4 pai(abraao,isaque).
5 pai(haran,lo).
6 pai(haran,milca).
7 pai(haran,iscah).
8 mae(sara,isaque).
Ronaldo F. Ramos (Instituto Federal do Ceará) Paradigmas de Programação 15 de outubro de 2023 31 / 48
32. Metas Existenciais
Vamos testar as metas:
1 ? :- pai(tera,naor).
2 ? :- pai(tera,jose).
3 ? :- pai(X,lo).
4 ? :- pai(X,Y).
5 ? :- masculino(Alguem).
6 ? :- feminino(Mulher).
Ronaldo F. Ramos (Instituto Federal do Ceará) Paradigmas de Programação 15 de outubro de 2023 32 / 48
33. Acrescentando Regras
Vamos acrescentar regras a estes predicados
Um avô é um pai de um pai ou pai de uma mãe.
(Desconsiderando o sexo do neto por enquanto)
1 avo(Avo,Neto) :- pai(Avo,Filho),pai(Filho,Neto).
2 avo(Avo,Neto) :- pai(Avo,Filha),mae(Filha,Neto).
Agora podemos fazer novas perguntas:
1 avo(tera,X).
2 avo(X,Y).
Ronaldo F. Ramos (Instituto Federal do Ceará) Paradigmas de Programação 15 de outubro de 2023 33 / 48
34. Definindo Irmão
Irmão são filhos do mesmo pai ou da mesma mãe.
1 irmao(X,Y) :- pai(Z,X),pai(Z,Y).
2 irmao(X,Y) :- mae(Z,X),mae(Z,Y).
Há algo errado com a definição acima? Alguém é irmão de si mesmo? Experimente.
Ronaldo F. Ramos (Instituto Federal do Ceará) Paradigmas de Programação 15 de outubro de 2023 34 / 48
35. Definindo Irmão - Correção
Ninguém é irmão de si mesmo.
1 irmao(X,Y) :- pai(Z,X),pai(Z,Y), X = Y.
2 irmao(X,Y) :- mae(Z,X),mae(Z,Y), X = Y.
Ronaldo F. Ramos (Instituto Federal do Ceará) Paradigmas de Programação 15 de outubro de 2023 35 / 48
36. Definindo Homem e Mulher
Podemos usar homem e mulher como sinônimos de masculino e feminino ou substituí-los
1 homem(H) :- masculino(H).
2 mulher(M) :- feminino(M).
Ronaldo F. Ramos (Instituto Federal do Ceará) Paradigmas de Programação 15 de outubro de 2023 36 / 48
37. Definindo Filho e Filha
Podemos usar homem e mulher como sinônimos de masculino e feminino ou substituí-los
1 filho(X,Y) :- pai(Y,X),homem(X).
2 filho(X,Y) :- mae(Y,X),homem(X).
3 filha(X,Y) :- pai(Y,X),mulher(X).
4 filha(X,Y) :- mae(Y,X),mulher(X).
Ronaldo F. Ramos (Instituto Federal do Ceará) Paradigmas de Programação 15 de outubro de 2023 37 / 48
38. Definindo Progenitor (sem sexo)
Podemos usar homem e mulher como sinônimos de masculino e feminino ou substituí-los
1 progenitor(X,Y) :- pai(X,Y).
2 progenitor(X,Y) :- mae(X,Y).
Agora podemos definir irmão em função de progenitor. Experimente.
Ronaldo F. Ramos (Instituto Federal do Ceará) Paradigmas de Programação 15 de outubro de 2023 38 / 48
39. Exercício
Agora defina os seguintes predicados: tio, tia, avô, avó, bisavô, bisavó, trisavô, trisavó,
tetraavô, tetraavó, primo, familiar (faz parte da família), tio avô, tia avó, primo em segundo
grau, primo em terceiro grau, ancestral e descendente.
Ronaldo F. Ramos (Instituto Federal do Ceará) Paradigmas de Programação 15 de outubro de 2023 39 / 48
40. Pausa
Tente
Ronaldo F. Ramos (Instituto Federal do Ceará) Paradigmas de Programação 15 de outubro de 2023 40 / 48
41. Regras Recursivas
Definir uma coisa em termos dela própria (kkkk). Vejamos a definição de ancestral.
Observemos as relações recursivas.
avô(Ancestral,Descendente) :- pai1(Ancestral, Pessoa), pai(Pessoa, Descendente)
bisavô(Ancestral,Descendente) :- pai(Ancestral, Pessoa), avô(Pessoa, Descendente)
trisavô(Ancestral,Descendente) :- pai(Ancestral, Pessoa), bisavô(Pessoa, Descendente)
Isto nos leva ao padrão:
ancestral(Ancestral,Descendente) :-pai(Ancestral,Pessoa),ancestral(Pessoa,Descendente)
Não leva a um loop infinito??
1
Vamos abstrair das mães por enquanto
Ronaldo F. Ramos (Instituto Federal do Ceará) Paradigmas de Programação 15 de outubro de 2023 41 / 48
42. Caso Base
Em algum momento a recursão deve ser obrigada a parar.
ancestral(Ancestral, Descendente) :- pai(Ancestral,Descendente).
Ronaldo F. Ramos (Instituto Federal do Ceará) Paradigmas de Programação 15 de outubro de 2023 42 / 48
43. Programa Ancestral
% Casos Base
ancestral(Ancestral,Descendente) :- pai(Ancestral,Descendente).
ancestral(Ancestral,Descendente) :- mãe(Ancestral,Descendente).
% Definição
ancestral(Ancestral,Descendente) :- pai(Ancestral,Pessoa), ancestral(Pessoa,Descendente).
ancestral(Ancestral,Descendente) :- mãe(Ancestral,Pessoa), ancestral(Pessoa,Descendente).
Ronaldo F. Ramos (Instituto Federal do Ceará) Paradigmas de Programação 15 de outubro de 2023 43 / 48
44. Fechamento Transitivo
É dito que a relação ancestral é um fechamento transitivo da relação de parentesco e
portanto facilmente realizada através de uma regra recursiva.
Ronaldo F. Ramos (Instituto Federal do Ceará) Paradigmas de Programação 15 de outubro de 2023 44 / 48
45. Recursão Linear
Um programa é recursivo linear se possui apenas uma meta recursiva no corpo da cláusula.
Ex de definição de ancestral não linear:
ancestral(Ancestral,Descendente) :- ancestral(Ancestral,Pessoa),
ancestral(Pessoa,Descendente).
Ronaldo F. Ramos (Instituto Federal do Ceará) Paradigmas de Programação 15 de outubro de 2023 45 / 48
46. Grafo Direcionado Simples
Vejamos um outro exemplo de fecho transitivo
Ronaldo F. Ramos (Instituto Federal do Ceará) Paradigmas de Programação 15 de outubro de 2023 46 / 48
47. Descrevendo o grafo
% fatos
eixo(a,b). eixo(a,c). eixo(b,d).
eixo(c,d). eixo(d,e). eixo(f,g).
% caso base
conectado(nó,nó).
% regra recursiva
conectado(nó1,nó2) :- eixo(nó1,Link), conectado(Link,nó2).
Ronaldo F. Ramos (Instituto Federal do Ceará) Paradigmas de Programação 15 de outubro de 2023 47 / 48
48. CONTINUA
Ronaldo F. Ramos (Instituto Federal do Ceará) Paradigmas de Programação 15 de outubro de 2023 48 / 48