inteligência artificial: a linguagem prolog (parte 2) prof. elaini simoni angelotti...
TRANSCRIPT
Inteligência Artificial: A Linguagem Prolog
(parte 2)
Prof. Elaini Simoni Angelotti
2
A Linguagem Prolog LÓGICA E PROLOG
Observe que a regraObserve que a regra
presa(X) :- come(Y,X), animal(X)presa(X) :- come(Y,X), animal(X)
Em lógica corresponde a:Em lógica corresponde a:xxy(come(Y,X) ^ animal(X)) -> y(come(Y,X) ^ animal(X)) ->
presa(X)presa(X)
Aplicando as Leis de Equivalência temos:Aplicando as Leis de Equivalência temos:~(come(X,Y) ^ animal(X)) v presa(X) ~(come(X,Y) ^ animal(X)) v presa(X) ~come(X,Y) v ~animal(X) v presa(X)~come(X,Y) v ~animal(X) v presa(X)
3
A Linguagem Prolog REGRA DE INFERÊNCIA: RESOLUÇÃO
Outro exemplo: acrescentando à BC a regra: “x é caçado se é
presa”caçado(X) :- presa(X).
a regra na forma simbólica é:
presa(X) -> caçado(X)
a cláusula correspondente é:
~(presa(X)) v caçado(X)
4
A Linguagem PrologEXEMPLO DE PROGRAMA E CONSULTAS
come (urso, peixe).come (peixe,peixinho).come (peixinho,alga).come (quati,peixe).come(urso,quati).come (urso, raposa).come(raposa,coelho).come (coelho, mato).come(urso,cavalo).come(cavalo,mato).come(gato-selvagem,cavalo).
animal(urso).animal(peixe).animal(peixinho).
animal(quati).animal(raposa).animal(coelho).animal(cavalo).animal(gato-selvagem).
planta(mato).planta(alga).
presa(X) :- come(Y,X), Animal(X).presa(X) :- come(Y,X), Animal(X).
caçado(X) :- presa(X).caçado(X) :- presa(X).
5
A Linguagem PrologEXEMPLO DE PROGRAMA E CONSULTAS
Consultas e respostas:
?- animal(coelho).yes
?- come(gato_selvagem,mato).no
?- come(X,peixe).urso;
quati.
?- come(X,Y),planta(Y).peixinho alga;coelho mato;cavalo mato.
6
A Linguagem Prolog RETROCESSO (BACKTRACKING)
O PROLOG tenta responder a uma questão comparando a questão com os fatos na BC.
O Prolog tenta encontrar os predicados que se unificam. Se uma procura falha, o backtracking permite que se volte ao
último momento onde se instanciou uma variável, procurando se existe outra possibilidade de instanciação.
Exemplo: gosta(maria, comida). gosta(maria, vinho). gosta(joão, vinho). gosta(joão, maria).
?- gosta(maria, X), gosta(joão, X).
7
A Linguagem Prolog RETROCESSO (BACKTRACKING)
gosta(maria, X), gosta(joão, X).
gosta(maria, comida).
gosta(maria, vinho).
gosta(joão, vinho).
gosta(joão, maria).
X = comida
Será procurado: gosta(joão, comida). A procura falha!! O valor instanciado na variável X (neste caso, comida) é
esquecido e o Prolog procura um outro valor para a X.
1º sub_objetivo 2º sub_objetivo
8
A Linguagem Prolog RETROCESSO (BACKTRACKING)
gosta(maria, X), gosta(joão, X).
gosta(maria, comida).
gosta(maria, vinho).
gosta(joão, vinho).
gosta(joão, maria).
X = vinho
1º sub_objetivo 2º sub_objetivo
9
As regras em Prolog são implicações lógicas Podem depender de fatos:
presa(X) :- come(X,Y),animal(X)
Podem depender de outras regras:caçado(X) :- presa(X)
Podem depender da própria regra: com definição recursiva
Uma das principais características herdadas da lógica pela linguagem Prolog é o uso da RECURSÃO.
A Linguagem PrologRECURSÃO
10
A Linguagem PrologRECURSÃO
Exemplo: usar a BC ecológica para definir a relação na_cadeia_alimentar(X,Y)
com o significado: ”Y está na cadeia alimentar de X”
que por sua vez pode significar duas coisas:
1. X come Y diretamente.2. X come algum animal que come algum
animal que come algum animal ... que come Y.
11
A Linguagem PrologRECURSÃO
O caso 2. pode ser reescrito como:
2’.2’. “X come Z e Y está na cadeia alimentar de Z” O caso 1.1. é o ponto de parada da regra
recursiva.
A regra incorpora os casos 11 e 2’2’:na_cadeia_alimentar(X,Y) :- come(X,Y).
na_cadeia_alimentar(X,Y) :- come(X,Z), na_cadeia_alimentar(Z,Y).
12
A Linguagem PrologRECURSÃO
?- na_cadeia_alimentar(urso,Y).
resposta:1. peixe2. quati3. raposa4. cavalo5. peixinho6. alga7. peixe8. peixinho9. alga10. coelho11. mato12. mato
13
A Linguagem PrologRECURSÃO
antepassado(X,Z):-progenitor(X,Z).
antepassado(X,Z):-progenitor(X,Y), antepassado(Y,Z).
14
A Linguagem PrologLISTAS
São estruturas simples de dados, largamente empregadas em computação não-numérica. Uma lista é uma seqüência de qualquer número de intens. Ex:
[brasil, paraguai, uruguai, argentina]
Para representar listas em Prolog, dois casos devem ser considerados: a lista vazia, representada por [ ]. A lista não-vazia. Ex: [maria, jorge, bete]
15
A Linguagem PrologLISTAS
A lista não-vazia possui dois componentes: CABEÇA e CAUDA.
[brasil, paraguai, uruguai]CABEÇA = brasilCAUDA = [paraguai, uruguai]
A cabeça de uma lista pode ser separada de sua cauda com o uso “ | “.
Usando-se a lista [Cabeça|Cauda] e unificando essa lista com outra lista qualquer, a cabeça ficará com o 1º elemento da lista e a cauda ficará com o resto da lista.
16
A Linguagem PrologLISTAS
Lista 1 Lista 2 Unificação
[a, b, c] [X|Y] X = a Y = [b, c]
[casa, pata] [X|Y] X = casa Y = pata
[a, b, c] [X,Y] Não unifica
[data(7,Z,W),hoje] [X|Y] X = data(7,Z,W) Y = hoje
[a, b, c, d] [X,Y|Z] X = a Y = b Z = [c, d]
[elaini] [X|Y] X = elaini Y = [ ]
17
A Linguagem PrologEXERCÍCIO: UNIFIQUE AS LISTAS ABAIXO
LISTA 1 LISTA2 UNIFICAÇÃO
[[a,b]|Y] [H|T]
[a,b] [X,Y|Z]
[[a,b],[c,d]] [X,Y]
[a] [X|Y]
[[Ana,Y]|Z] [[X,foi],[ao_cinema]]
[data(7,W,1993), hoje] [data(7,X,Y),Z]
[a,b,c,d] [X,Y,Z]
[X|[Y|Z]] [a,b,c,d]
18
A Linguagem PrologEXEMPLO USANDO LISTA E RECURSÃO
Um programa em Prolog que retorna o último elemento de uma lista:
ultimo([A],A).
ultimo([Z|B],A):- ultimo(B,A).
19
A Linguagem PrologDECLARAÇÃO IS
Para realizar cálculos aritméticos em Prolog, usamos a declaração IS.
Essa declaração deve ser colocada entre dois objetos: o 1º é uma variável e o segundo uma expressão aritmética.
Exemplo: X is 2 + 5 * 9 / 4 A parte decimal do número é separada da parte
inteira por um ponto (.) e não por uma vírgula (,). Ex: 13.23