uma breve introdução á programação lógica inteligência artificial wladimir araújo tavares
TRANSCRIPT
![Page 1: Uma Breve Introdução á programação lógica Inteligência Artificial Wladimir Araújo Tavares](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc142497959413d8dfb39/html5/thumbnails/1.jpg)
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
![Page 2: Uma Breve Introdução á programação lógica Inteligência Artificial Wladimir Araújo Tavares](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc142497959413d8dfb39/html5/thumbnails/2.jpg)
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.
![Page 3: Uma Breve Introdução á programação lógica Inteligência Artificial Wladimir Araújo Tavares](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc142497959413d8dfb39/html5/thumbnails/3.jpg)
ExemplosExemplos
Sócrates é homem.Sócrates é homem. Todo homem é mortal.Todo homem é mortal.
![Page 4: Uma Breve Introdução á programação lógica Inteligência Artificial Wladimir Araújo Tavares](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc142497959413d8dfb39/html5/thumbnails/4.jpg)
ProgramaPrograma
homem(socrates)homem(socrates)
mortal(X) :- homem(X)mortal(X) :- homem(X)
?- mortal(socrates).?- mortal(socrates).
yesyes
![Page 5: Uma Breve Introdução á programação lógica Inteligência Artificial Wladimir Araújo Tavares](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc142497959413d8dfb39/html5/thumbnails/5.jpg)
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.
![Page 6: Uma Breve Introdução á programação lógica Inteligência Artificial Wladimir Araújo Tavares](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc142497959413d8dfb39/html5/thumbnails/6.jpg)
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.
![Page 7: Uma Breve Introdução á programação lógica Inteligência Artificial Wladimir Araújo Tavares](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc142497959413d8dfb39/html5/thumbnails/7.jpg)
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.
![Page 8: Uma Breve Introdução á programação lógica Inteligência Artificial Wladimir Araújo Tavares](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc142497959413d8dfb39/html5/thumbnails/8.jpg)
Exemplo EstruturaExemplo Estrutura
livro(gabriela,autor(amado,jorge))cidade(sao-paulo, pais(brasil))
![Page 9: Uma Breve Introdução á programação lógica Inteligência Artificial Wladimir Araújo Tavares](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc142497959413d8dfb39/html5/thumbnails/9.jpg)
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 */
![Page 10: Uma Breve Introdução á programação lógica Inteligência Artificial Wladimir Araújo Tavares](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc142497959413d8dfb39/html5/thumbnails/10.jpg)
?-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.
![Page 11: Uma Breve Introdução á programação lógica Inteligência Artificial Wladimir Araújo Tavares](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc142497959413d8dfb39/html5/thumbnails/11.jpg)
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
![Page 12: Uma Breve Introdução á programação lógica Inteligência Artificial Wladimir Araújo Tavares](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc142497959413d8dfb39/html5/thumbnails/12.jpg)
Recursividade á esquerdaRecursividade á esquerda
amigo(X,Y):-amigo(Y,X). amigo(antonio,andre). amigo(andre,juliana). amigo(antonio,maria). amigo(juliana,jose). ?-?-?-amigo(X,Y)
![Page 13: Uma Breve Introdução á programação lógica Inteligência Artificial Wladimir Araújo Tavares](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc142497959413d8dfb39/html5/thumbnails/13.jpg)
fat(0,1). fat(N,F) :- N1 is N-1, fat(N1,F1), F is
N*F1.
![Page 14: Uma Breve Introdução á programação lógica Inteligência Artificial Wladimir Araújo Tavares](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc142497959413d8dfb39/html5/thumbnails/14.jpg)
ListaLista
Uma lista é um termo estruturado que éoperado como um conjunto ordenado
deelementos. Os elementos podem ser
átomosou termos estruturados, inclusive listas.
![Page 15: Uma Breve Introdução á programação lógica Inteligência Artificial Wladimir Araújo Tavares](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc142497959413d8dfb39/html5/thumbnails/15.jpg)
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.
![Page 16: Uma Breve Introdução á programação lógica Inteligência Artificial Wladimir Araújo Tavares](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc142497959413d8dfb39/html5/thumbnails/16.jpg)
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).
![Page 17: Uma Breve Introdução á programação lógica Inteligência Artificial Wladimir Araújo Tavares](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc142497959413d8dfb39/html5/thumbnails/17.jpg)
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).
![Page 18: Uma Breve Introdução á programação lógica Inteligência Artificial Wladimir Araújo Tavares](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc142497959413d8dfb39/html5/thumbnails/18.jpg)
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
![Page 19: Uma Breve Introdução á programação lógica Inteligência Artificial Wladimir Araújo Tavares](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc142497959413d8dfb39/html5/thumbnails/19.jpg)
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).
![Page 20: Uma Breve Introdução á programação lógica Inteligência Artificial Wladimir Araújo Tavares](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc142497959413d8dfb39/html5/thumbnails/20.jpg)
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].
![Page 21: Uma Breve Introdução á programação lógica Inteligência Artificial Wladimir Araújo Tavares](https://reader036.vdocuments.net/reader036/viewer/2022062418/552fc142497959413d8dfb39/html5/thumbnails/21.jpg)
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).