Uma Breve Introdução á programação lógica Inteligência Artificial Wladimir Araújo Tavares.

21
Uma Breve Introdução á Uma Breve Introdução á programação lógica programação lógica Inteligência Artificial Inteligência Artificial Wladimir Araújo Tavares Wladimir Araújo Tavares

Transcript of Uma Breve Introdução á programação lógica Inteligência Artificial Wladimir Araújo Tavares.

Page 1: Uma Breve Introdução á programação lógica Inteligência Artificial Wladimir Araújo Tavares.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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