inteligência artificial: a linguagem prolog (parte 2) prof. elaini simoni angelotti...

19
Inteligência Artificial: A Linguagem Prolog (parte 2) Prof. Elaini Simoni Angelotti [email protected] om

Upload: internet

Post on 18-Apr-2015

105 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: Inteligência Artificial: A Linguagem Prolog (parte 2) Prof. Elaini Simoni Angelotti elaini.angelotti@gmail.com

Inteligência Artificial: A Linguagem Prolog

(parte 2)

Prof. Elaini Simoni Angelotti

[email protected]

Page 2: Inteligência Artificial: A Linguagem Prolog (parte 2) Prof. Elaini Simoni Angelotti elaini.angelotti@gmail.com

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)

Page 3: Inteligência Artificial: A Linguagem Prolog (parte 2) Prof. Elaini Simoni Angelotti elaini.angelotti@gmail.com

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)

Page 4: Inteligência Artificial: A Linguagem Prolog (parte 2) Prof. Elaini Simoni Angelotti elaini.angelotti@gmail.com

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).

Page 5: Inteligência Artificial: A Linguagem Prolog (parte 2) Prof. Elaini Simoni Angelotti elaini.angelotti@gmail.com

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.

Page 6: Inteligência Artificial: A Linguagem Prolog (parte 2) Prof. Elaini Simoni Angelotti elaini.angelotti@gmail.com

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).

Page 7: Inteligência Artificial: A Linguagem Prolog (parte 2) Prof. Elaini Simoni Angelotti elaini.angelotti@gmail.com

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

Page 8: Inteligência Artificial: A Linguagem Prolog (parte 2) Prof. Elaini Simoni Angelotti elaini.angelotti@gmail.com

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

Page 9: Inteligência Artificial: A Linguagem Prolog (parte 2) Prof. Elaini Simoni Angelotti elaini.angelotti@gmail.com

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

Page 10: Inteligência Artificial: A Linguagem Prolog (parte 2) Prof. Elaini Simoni Angelotti elaini.angelotti@gmail.com

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.

Page 11: Inteligência Artificial: A Linguagem Prolog (parte 2) Prof. Elaini Simoni Angelotti elaini.angelotti@gmail.com

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).

Page 12: Inteligência Artificial: A Linguagem Prolog (parte 2) Prof. Elaini Simoni Angelotti elaini.angelotti@gmail.com

12

A Linguagem PrologRECURSÃO

?- na_cadeia_alimentar(urso,Y).

resposta:1. peixe2. quati3. raposa4. cavalo5. peixinho6. alga7. peixe8. peixinho9. alga10. coelho11. mato12. mato

Page 13: Inteligência Artificial: A Linguagem Prolog (parte 2) Prof. Elaini Simoni Angelotti elaini.angelotti@gmail.com

13

A Linguagem PrologRECURSÃO

antepassado(X,Z):-progenitor(X,Z).

antepassado(X,Z):-progenitor(X,Y), antepassado(Y,Z).

Page 14: Inteligência Artificial: A Linguagem Prolog (parte 2) Prof. Elaini Simoni Angelotti elaini.angelotti@gmail.com

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]

Page 15: Inteligência Artificial: A Linguagem Prolog (parte 2) Prof. Elaini Simoni Angelotti elaini.angelotti@gmail.com

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.

Page 16: Inteligência Artificial: A Linguagem Prolog (parte 2) Prof. Elaini Simoni Angelotti elaini.angelotti@gmail.com

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 = [ ]

Page 17: Inteligência Artificial: A Linguagem Prolog (parte 2) Prof. Elaini Simoni Angelotti elaini.angelotti@gmail.com

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]

Page 18: Inteligência Artificial: A Linguagem Prolog (parte 2) Prof. Elaini Simoni Angelotti elaini.angelotti@gmail.com

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).

Page 19: Inteligência Artificial: A Linguagem Prolog (parte 2) Prof. Elaini Simoni Angelotti elaini.angelotti@gmail.com

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