You are on page 1of 19

Notas de Aulas

Inteligncia Artificial I

PROLOG

Linguagem PROLOG

Linguagens Funcionais x Linguagens Lgicas


Funcional Programao orientada para funes Diz como fazer para atingir um objetivo Mais voltada para algoritmos que exploram o conhecimento Preocupa-se com aspectos relacionados com a construo de listas, tipos, padro de comparao, estruturas de dados, etc. Camada mais baixa de suporte para as aplicaes Lgica Programao orientada para objetos (goal) Diz o que fazer para atingir um objetivo Mais voltada para o conhecimento Mais declarativa do que procedural

Nvel mais elevado de abstrao na soluo dos problemas

Concluso

Tanto as linguagens Funcionais como Lgicas so importantes e empregadas principalmente em Inteligncia Artificial (IA) e Robtica.

Histrico
Criado por Alain Colmerauer por volta de 1970 na Universidade de Marselha, Frana. Seu objetivo inicial era servir de apoio a sistemas de Linguagem Natural. Algol 60

Algol 68
Prolog

Programao Prolog
Para executar um programa em prolog: 1. Deve-se criar um arquivo com a extenso correspondente do interpretador ( .ari, .pl, etc); 2. Execute no interpretador correspondente; 3. Em seu menu acione a opo File e Consult para carregar o programa no interpretador; 4. Se houver algum erro no programa, este ser mostrado na tela; 5. Seno o programa est pronto para ser executado (interpretado).

A programao Prolog consiste fundamentalmente em: Declarar fatos ou assertivas; Estabelecer regras ou procedimentos; e Fazer perguntas. Os fatos e as regras so fornecidos e a linguagem usa deduo para obter respostas para as questes.

Fatos, Regras e Controle de Corte Fatos Um Fato denota uma verdade incondicional. Uma relao pode ser especificada por um fato. Sintaxe : predicado(arg1[,arg2,...,arg n]).

Argumentos (arg1...arg n) so objetos quaisquer e


Predicado a relao que une esses objetos.
pam tom

bob

liz

ann

pat

jim

rvore genealgica

pais(pam,bob). pais(tom,bob). pais(tom,liz). pais(bob,ann). pais(bob,pat). pais(pat,jim).

%pam um dos pais de bob


%tom um dos pais de liz

Em Prolog usam-se maisculas para variveis e minsculas para tomos. Questes: tomo ?-pais(bob,pat). yes ?-pais(liz,pat). no varivel ?-pais(X,Y). X=pam , Y=bob ; X=tom , Y=bob ; X=tom , Y=liz ; X=bob , Y=pat ; X=bob , Y=ann ; X=pat , Y=jim ;

?-pais(X,liz). X=tom ; no ?-pais(bob,X). X=ann X=pat

Regras

As regras definem as condies que devem ser satisfeitas para que uma certa declarao seja considerada verdadeira.
Sintaxe : pred(arg/Var,arg/Var) :- pred(arg/Var,arg/Var).

cabea (concluso)

se

corpo

(condio)

Onde o smbolo :- indica uma condio (se) e separa a regra em concluso ou cabea da regra e condio ou corpo da regra.

Frases Compostas robo(peter). capaz_de_fazer(peter,armas). machuca(armas,pedro). homem(pedro). proibido_fazer(R,B):robo(R),capaz_de_fazer(R,B), machuca(B,H),homem(H). Questo ? - proibido_fazer(R,B). R = peter , B = armas Significa: R est proibido de fazer um ato B se R for um rob e R for capaz de fazer B e B machuca H e H for homem. Para todo R e B proibido_fazer(R,B) se existe H tal que robo(R) e capaz_de_fazer(R,B) e machuca(B,H) e homem(H).

Conjuno e Disjuno
Em prolog o operador de conjuno e ( , ) implica na necessidade de aceitao de todas as condies, enquanto o operador de disjuno ou ( ; ) permite a aceitao de uma ou outra condio. Estes operadores permitem a composio de fatos.
Exemplos: amiga(X):-(X = maria; X = joana).

disjuno ou
Questes:Quem amiga? amiga(X). X=maria; X=joana. Definio de uma regra avos: avos(X,Z):-pais(X,Y) , pais(Y,Z).
Pam (X)
Bob (Y) av

conjuno e
Pat (Z) Questes: O Av de Jim o Bob? ?-avos(bob,jim). Quem so os netos de Pam? yes ?-avos(pam,X). O av de Jim Liz? X=ann ; ?-avos(liz,jim). X=pat ; no

Definio de uma regra filho: filho(Y,X):-pais(X,Y).

Questo: ?-filho(jim,pat). yes

Definio de uma regra me: mae(X,Y):-pais(X,Y),mulher(X). Para isto definir que pat seja mulher (mulher(pat). ?-mae(bob,ann). no Questes: ?-mae(pat,jim). yes Definio de uma regra irm: irma(X,Y):-pais(Z,X),pais(Z,Y),mulher(X). Z pais pais

mulher Questes: ?-irma(ann,pat). yes

X
irm

Y
?-irma(X,pat). X=ann ; no

Definio de uma regra tia: tia(X,Y):-pais(Z,Y),irma(X,Z).

Questo: ?-tia(liz,X). X=ann ; X=pat ; no

Definio de uma regra predecessor(pai, me ou avos): predecessor(X,Z):-pais(X,Z). %regra para os pais predecessor(X,Z):-pais(X,Y),predecessor(Y,Z). %regra para os avs ?-predecessor(X,pat). Questes: X=bob ; ?-predecessor(X,liz). X=pam ; X=tom ; X=tom ; no No ?-predecessor(X,jim). X=pat ; X=pam ; X=tom ; X=bob ; No Predecessor Indireto

Predecessor Direto

Exerccio: Submetendo ao sistema Prolog


Maria Jos Joo Ana rvore genealgica

Jlia

ris

Jorge Dada a rvore genealgica resolver:

Jos progenitor de ris ? Ana progenitor de Jorge? Quem progenitor de ris ? Quem so os filhos de jos ? Quem progenitor de quem ? Quem so os avs jorge ? E o neto de Joo ? Jos e Ana possuem algum progenitor em comum Quem so os pais de Jorge e da Ana?

Controle de Corte
H ocasies em que, por um ou outro motivo, desejamos controlar a execuo do programa. Para isso, utilizamos o mecanismo de corte. Operador Cut

utilizado quando uma determinada regra a ltima a ser analisada e haveria problemas na continuidade da verificao das demais regras.
Simbolizado

pela exclamao (!).

Exemplos: Exemplo do operador Cut: amigo(joana,ana). amigo(maria,ana). amigo(pedro,jose). amigo(pedro,ana). um_unico_amigo(X,Y):-amigo(X,Y),!. Questes: ?- um_unico_amigo(X,ana). ?- um_unico_amigo(pedro,X). X = jose X = joana

Operadores
Operadores Aritmticos
+ * / mod is Adio Subtrao Multiplicao Diviso Mdulo, o resto inteiro da diviso Atribuio

Operadores de Comparao
X>Y X<Y X maior que Y X menor que Y

X >= Y X maior ou igual a Y X =< Y X menor ou igual a Y X =:= Y Os valores de X e Y so iguais X \== Y Os valores de X e Y so diferentes

Exemplo: Clculo de um nmero elevado ao quadrado: ao_quadrado(X,Y):-Y is X*X.

Questo: ?- ao_quadrado(6,X). X=36


Definio das regras par e impar:

par(X):-X mod 2 =:=0 % o mod de 2 igual a 0 impar(X) :- X mod 2 =:=1.


Questes:

?-par(6).
yes

?-impar(3). yes ?-impar(6). no

?-par(3).
no

Definio de uma regra para exemplificar o not: Fruta(laranja). Fruta(maa). Fruta(abacaxi).


Questes: ?-not(fruta(laranja)). no ?-not(fruta(arroz)). yes

Definio das regras positivo e negativo: positivo(X):-X>=0. %X maior ou igual a 0 negativo(X):-X<0. %X menor que 0 Questes: ?-positivo(7). yes ?-positivo(-3). no Mximo entre 2 nmeros: max(X,Y,X):-X>=Y. max(X,Y,Y):-X<Y.

?-negativo(-10). yes

?-negativo(10). no

?- max(10,3,Max). Max = 10

Mnimo entre dois nmeros: minimo(X,Y,X):-X =< Y, !. minimo(X,Y,Y):-X > Y, !.

Questes: ?- minimo(10,3,Min). Min = 3

?- minimo(12,56,Min). Min = 12

Lembre-se:
Em Prolog existem clusulas de trs tipos: fatos,

regras e questes.

O Prolog usa um conceito de mundo fechado: tudo o que no est explicitado na base de conhecimento (ou que dela pode ser deduzido por aplicao de regras) considerado falso.

Exerccios
1. Para o seguinte programa, quais sero as respostas Prolog para as perguntas abaixo? p(a,c). p(a,b). p(d,a). p(d,b). a) ?-p(a,b). b) ?-p(a,d). c) ?-p(a,X). d) ?-p(X,b). e) ?-p(X,Y). f) ?-p(X,b),p(d,X). g) ?-p(X,Y),p(Z,X). h) ?-p(X,Y),p(Z,Y).

2. Dada a rvore genealgica:


ana casado s rui

descendent es

manuela

casado s

miguel

joana

casado s

pedro

descendent es

rita

joo

jose

a) Declare atravs de fatos as relaes: homem mulher casados descendente direto. b) Defina as regras necessrias para estabelecer os parentescos: pai e me filho e filha av e av neto e neta irmo e irm tio e tia sobrinho e sobrinha cunhado e cunhada.