Inteligncia Artificial I
PROLOG
Linguagem PROLOG
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]).
bob
liz
ann
pat
jim
rvore genealgica
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 ;
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 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
X
irm
Y
?-irma(X,pat). X=ann ; 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
Jlia
ris
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
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
?-par(6).
yes
?-par(3).
no
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
?- 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).
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.