uma breve introdução á programação lógica inteligência artificial wladimir araújo tavares
TRANSCRIPT
Uma Breve Introdução á Uma Breve Introdução á programação lógicaprogramação lógica
Inteligência ArtificialInteligência Artificial
Wladimir Araújo TavaresWladimir Araújo Tavares
PrologProlog
É uma linguagem simples baseada É uma linguagem simples baseada na lógica simbólicana lógica simbólica
Prolog é uma linguagem interativa Prolog é uma linguagem interativa projetada para manipulação de projetada para manipulação de dados simbólicosdados simbólicos
Prolog é baseado em um provador de Prolog é baseado em um provador de teoremas para cláusulas Horn.teoremas para cláusulas Horn.
ExemplosExemplos
Sócrates é homem.Sócrates é homem. Todo homem é mortal.Todo homem é mortal.
ProgramaPrograma
homem(socrates)homem(socrates)
mortal(X) :- homem(X)mortal(X) :- homem(X)
?- mortal(socrates).?- mortal(socrates).
yesyes
Objetos manipulados pelo Objetos manipulados pelo PrologProlog
Os objetos manipulados pelo prolog Os objetos manipulados pelo prolog são os termos.são os termos.
Os termos podem ser átomos ou Os termos podem ser átomos ou estruturas.estruturas.
Os átomos podem ser constantes ou Os átomos podem ser constantes ou variáveis.variáveis.
VariáveisVariáveis
Nas linguagem convencionais as variáveis Nas linguagem convencionais as variáveis representa um célula de memória.representa um célula de memória.
Em PROLOG uma variável é associada a um objeto.
A vantagem da ligação sobre a atribuição estáno fato de que qualquer tipo de objetopode ser ligado a uma mesma variável; não setem restrições às ligações, pois uma variável nãopossui estrutura interna.
EstruturaEstrutura
Uma estrutura é um objeto que possui organização interna.
Em PROLOG estruturas são representadas por símbolo funcional(lista de argumentos)onde símbolo funcional é um identificador elista de argumentos é uma lista de termos
quepode ser vazia; isto é, um átomo é um casoparticular de estrutura.
Exemplo EstruturaExemplo Estrutura
livro(gabriela,autor(amado,jorge))cidade(sao-paulo, pais(brasil))
Programa PrologPrograma Prolog
mae(antonio, maria). /* fato1 */mae(pedro, maria). /* fato2 */mae(jose, ana). /* fato 3 */pai(antonio,carlos). /* fato 4 */pai(pedro,jose). /* fato5 */pai(paulo,jose). /* fato6 */irmao(X,Y):-pai(X,Z), pai(Y,Z), X\==Y. /*
regra1 */irmao(X,Y):-mae(X,Z), mae(Y,Z), X\==Y. /*
regra2 */
?-irmao(antonio,I)irmao(antonio,I):-pai(antonio,Z),
pai(I,Z), antonio \== I.irmao(antonio,I):-
pai(antonio,carlos),pai(I,carlos),antonio\==I.
irmao(antonio,I):-pai(antonio,carlos),pai(antonio,carlos),antonio\==antonio.
irmao(antonio,I):-mae(antonio,Z),mae(I,Z),antonio\==I.
amigo(antonio,andre). amigo(andre,juliana). amigo(antonio,maria). amigo(juliana,jose). amigo(X,Y):-amigo(Y,X). ?- amigo(X,Y) X=antonio Y=andre
Recursividade á esquerdaRecursividade á esquerda
amigo(X,Y):-amigo(Y,X). amigo(antonio,andre). amigo(andre,juliana). amigo(antonio,maria). amigo(juliana,jose). ?-?-?-amigo(X,Y)
fat(0,1). fat(N,F) :- N1 is N-1, fat(N1,F1), F is
N*F1.
ListaLista
Uma lista é um termo estruturado que éoperado como um conjunto ordenado
deelementos. Os elementos podem ser
átomosou termos estruturados, inclusive listas.
Uma operação comum sobre uma lista é
dividi-la em sua cabeça e cauda. Há uma
notação especial para representar “a lista
com cabeça X e cauda Y”: X|Y.
membro(X,[X|_]). membro(X,[_|Y]):-membro(X,Y).
add_to_set(X,[],[X]). add_to_set(X,Y,Y) :- member(X,Y). add_to_set(X,Y,[X|Y]).
escreve_lista([]). escreve_lista([X|Y]) :-
write(':'),write(X),escreve_lista(Y).
binario(1) :- write('1').binario(1) :- write('1').
binario(X) :- Z is X // 2,binario(Z),N binario(X) :- Z is X // 2,binario(Z),N is X mod 2,write(N).is X mod 2,write(N).
Processamento de linguagem Processamento de linguagem NaturalNatural
frase :- sujeito predicado sujeito :- artigo substantivo predicado :- verbo artigo substantivo artigo :- o substantivo :- gato j rato verbo :- caçou
frase(L1,L3) :-frase(L1,L3) :- sintagma_nominal(L1,L2), sintagma_nominal(L1,L2),
sintagma_verbal(L2,L3).sintagma_verbal(L2,L3). sintagma_nominal(L1,L3) :-sintagma_nominal(L1,L3) :- determinante(L1,L2), nome(L2,L3).determinante(L1,L2), nome(L2,L3). sintagma_verbal(L1,L3) :-sintagma_verbal(L1,L3) :- verbo(L1,L2), sintagma_nominal(L2,L3).verbo(L1,L2), sintagma_nominal(L2,L3). determinante([o|R],R).determinante([o|R],R). nome([homem|R],R).nome([homem|R],R). nome([disco|R],R).nome([disco|R],R). verbo([vira|R],R).verbo([vira|R],R).
frase --> sujeito, predicado. sujeito --> artigo(G), substantivo(G). predicado --> verbo, artigo(G),
substantivo(G). artigo(m) --> [o]. artigo(f) --> [a]. substantivo(m) --> [gato] | [rato]. substantivo(f) --> [gata] | [rata]. verbo --> [caçou].
frase(L1,L3) :-frase(L1,L3) :- sintagma_nominal(L1,L2), sintagma_nominal(L1,L2),
sintagma_verbal(L2,L3).sintagma_verbal(L2,L3). sintagma_nominal(L1,L3) :-sintagma_nominal(L1,L3) :- artigo_masculino(L1,L2), nome_masculino(L2,L3).artigo_masculino(L1,L2), nome_masculino(L2,L3). sintagma_nominal(L1,L3) :-sintagma_nominal(L1,L3) :- artigo_feminino(L1,L2), nome_feminino(L2,L3).artigo_feminino(L1,L2), nome_feminino(L2,L3). sintagma_verbal(L1,L3) :-sintagma_verbal(L1,L3) :- verbo(L1,L2), sintagma_nominal(L2,L3).verbo(L1,L2), sintagma_nominal(L2,L3). artigo_masculino([o|R],R).artigo_masculino([o|R],R). artigo_feminino([a|R],R).artigo_feminino([a|R],R). nome_masculino([homem|R],R).nome_masculino([homem|R],R). nome_feminino([mulher|R],R).nome_feminino([mulher|R],R). nome([disco|R],R).nome([disco|R],R). verbo([vira|R],R).verbo([vira|R],R).