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

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

Embed Size (px)

Citation preview

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