Este documento apresenta conceitos básicos de programação lógica em Prolog, incluindo termos, fatos, regras, perguntas, variáveis e procedimentos. O foco é explicar como a lógica pode ser usada como linguagem de programação, permitindo que o programador defina conhecimento sobre um problema em termos de axiomas ao invés de instruções procedimentais.
3. Conceitos Básicos
Princı́pios da Programação Lógica
I Programação Axiomática
I Uso da lógica como linguagem de programação
I O programador deve dizer ao computador o que fazer e não
como fazer
I O conhecimento sobre o problema é definido em um conjunto
de axiomas
I usa como base a unificaçao, resolução e encadeamento pra
trás.
3/26
6. Termos
Blocos de construção para a representação de dados. Podem ser
variáveis, inteiros, números reais, átomos e listas.
6/26
7. Átomos
Usados para identificar dados, programas, arquivos, etc. Quatro
tipos:
I Alfanumérico: banana, c3, banana split
I Cadeias: ”Banana-split é para a sobremesa”
I Simbólicos: #, &, =
I Especiais: !, ; , [, ], $
7/26
8. Fatos
Forma mais simples de comando/declaração é um fato. Ex.
pai(abraão,isaque).
soma(0,1,1)
soma(1,1,2)
8/26
10. 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”.
10/26
11. Perguntas (Queries)
Uma pergunta é uma forma de extrair informação de programas
lógicos. É um predicado interrogativo. Uma pergunta pode conter
uma ou mais metas.
Ex.
pai(abraão,isaque)?
soma(0,1,1)?
soma(1,1,2)?
Uma pergunta é consequência lógica de um fato idêntico.
11/26
12. 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.
12/26
13. Substituição
Conjunto finito (Possivelmente vazio) de pares na forma Xi = ti
onde Xi é uma variável e ti é um termo e Xi 6= Xj ∀i 6= j e Xi não
ocorre em tj para qualquer 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)
13/26
15. 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?”
15/26
16. 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.
filho(X, Y ) : −pai(Y , X), homem(X).
filha(X, Y ) : −pai(Y , X), mulher(X).
Observe que a vı́rgula substitui a conjunção ∧
16/26
18. Fatos Universais
Todos os fatos com variáveis são universalmente quantificados.
Todos gostam de caju.
gosta(X, caju)
Qualquer número multiplicado por zero resulta zero.
vezes(0, X, 0)
18/26
19. 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
19/26
20. 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?
pai(abraao, X), pai(X, Y )
Uma pergunta conjuntiva é consequência lógica de um programa
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.
20/26
22. 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.
22/26
23. Procedimento/Procedure
Um conjunto de regras com o mesmo predicado na cabeça.
Ex.
avo(X, Y ) ← pai(X, Z), pai(Z, Y ).
avo(X, Y ) ← pai(X, Z), mae(Z, Y ).
avoh(X, Y ) ← mae(X, Z), pai(Z, Y ).
avoh(X, Y ) ← mae(X, Z), mae(Z, Y ).
23/26
24. 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.
24/26
25. 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 é subconjunto do
significado do programa M(P)
25/26