Prolog - Introducao

60
Inteligência Artificial Introdução à Programação Prolog (Tutorial) Esta aula introduz conceitos básicos da linguagem de programação lógica Prolog Os conceitos são introduzidos atravs de um tutorial sobre relaç!es "amiliares #aiores detal$es sobre terminologia e notação serão vistos nas pró%imas aulas

description

prolog

Transcript of Prolog - Introducao

Page 1: Prolog - Introducao

7/21/2019 Prolog - Introducao

http://slidepdf.com/reader/full/prolog-introducao 1/60

Inteligência Artificial

Introdução à Programação

Prolog (Tutorial) Esta aula introduz conceitosbásicos da linguagem deprogramação lógica Prolog

Os conceitos são introduzidosatravs de um tutorial sobrerelaç!es "amiliares

#aiores detal$es sobreterminologia e notação serão

vistos nas pró%imas aulas

Page 2: Prolog - Introducao

7/21/2019 Prolog - Introducao

http://slidepdf.com/reader/full/prolog-introducao 2/60

&

Introdução

Prolog ' Programming in ogic inguagem de programação utilizada para

resolver problemas envolvendo objetos erelações entre obetos

*onceitos básicos+ "atos, perguntas,variáveis, conunç!es e regras

*onceitos avançados+ listas e recursão

Page 3: Prolog - Introducao

7/21/2019 Prolog - Introducao

http://slidepdf.com/reader/full/prolog-introducao 3/60

-

Programação ógica

Programação Procedural (procedimental)+ Programa ' .lgoritmo / Estruturas de 0ados

Programação ógica .lgoritmo ' ógica / *ontrole Programa ' ógica / *ontrole / Estruturas de

0ados

Em P, programa1se de "orma declarativa, ousea, especi"icando o que deve ser computadoao invs de como deve ser computado

Page 4: Prolog - Introducao

7/21/2019 Prolog - Introducao

http://slidepdf.com/reader/full/prolog-introducao 4/60

2

Programação em Prolog

Programar em Prolog envolve+ declarar alguns fatos a respeito de obetos

e seus relacionamentos de"inir algumas regras sobre os obetos e

seus relacionamentos e "azer perguntas sobre os obetos e seus

relacionamentos

Page 5: Prolog - Introducao

7/21/2019 Prolog - Introducao

http://slidepdf.com/reader/full/prolog-introducao 5/60

3

Obetos de dados e Prolog

Átomos

Objetos

Objetos Simples Estruturas

Constantes Variáveis

 Números

Page 6: Prolog - Introducao

7/21/2019 Prolog - Introducao

http://slidepdf.com/reader/full/prolog-introducao 6/60

4

 5tomos

Átomos

Objetos

Objetos Simples Estruturas

Constantes Variáveis

 Números

6ão cadeias compostas pelosseguintes caracteres+

letras mai7sculas+ ., 8, 999,:

• letras min7sculas+ a, 999, z

• d;gitos+ <, &, 999, =

• caracters especiais, taiscomo+ >, /, ?, @, ', +, 9, A9

Page 7: Prolog - Introducao

7/21/2019 Prolog - Introducao

http://slidepdf.com/reader/full/prolog-introducao 7/60B

 5tomos (cont)

Átomos

Objetos

Objetos Simples Estruturas

Constantes Variáveis

 Números

Podem ser constru;dos detrCs maneiras+

cadeias de letras,d;gitos e o caractere @,começando com umaletra min7scula9

cadeias de caracteresespeciais

• cadeias de caracteresentre apóstro"os

Page 8: Prolog - Introducao

7/21/2019 Prolog - Introducao

http://slidepdf.com/reader/full/prolog-introducao 8/60D

7meros

Átomos

Objetos

Objetos Simples Estruturas

Constantes Variáveis

 Números

Incluem n7meros inteiros en7meros reais9

Page 9: Prolog - Introducao

7/21/2019 Prolog - Introducao

http://slidepdf.com/reader/full/prolog-introducao 9/60=

Fariáveis

Átomos

Objetos

Objetos Simples Estruturas

Constantes   Variáveis

 Números

6ão cadeias de letras,d;gitos e caracteres @,sempre começando com

letra mai7scula ou com ocaractere @9

Page 10: Prolog - Introducao

7/21/2019 Prolog - Introducao

http://slidepdf.com/reader/full/prolog-introducao 10/60<G

Estruturas

Átomos

Objetos

Objetos Simples   Estruturas

Constantes Variáveis

 Números

6ão obetos de dados HuetCm vários componentes,podendo cada um deles,

por sua vez, ser umaestrutura9

Page 11: Prolog - Introducao

7/21/2019 Prolog - Introducao

http://slidepdf.com/reader/full/prolog-introducao 11/60<<

0e"inindo elaç!es por Jatos

 . "igura ao lado mostra ume%emplo da relação família

O "ato Hue .braão umprogenitor de IsaHue pode

ser escrito em Prolog como+ progenitor(abraão,isaHue)9

este caso de"iniu1seprogenitor  como o nome

de uma relaçãoK abraão eisaque são seusargumentos

 .braão6ara

IsaHue Ismael

Esa7 Lacó

Los

Page 12: Prolog - Introducao

7/21/2019 Prolog - Introducao

http://slidepdf.com/reader/full/prolog-introducao 12/60<&

0e"inindo elaç!es por Jatos

 . árvore "amiliar completaem Prolog + progenitor(sara,isaHue)9 progenitor(abraão,isaHue)9

progenitor(abraão,ismael)9 progenitor(isaHue,esa7)9 progenitor(isaHue,acó)9 progenitor(acó,os)9

Este programa consiste deseis cláusulas

*ada uma dessas cláusulasdeclara um "ato sobre arelação progenitor 

 .braão6ara

IsaHue Ismael

Esa7 Lacó

Los

Page 13: Prolog - Introducao

7/21/2019 Prolog - Introducao

http://slidepdf.com/reader/full/prolog-introducao 13/60<-

0e"inindo elaç!es por Jatos

Por e%emplo progenitor(abraão,isaHue)9

uma instância particularda relação progenitor 

Esta instMncia tambmc$amada derelacionamento

Em geral, uma relação 

de"inida como o conunto detodas suas instMncias

 .braão6ara

IsaHue Ismael

Esa7 Lacó

Los

Page 14: Prolog - Introducao

7/21/2019 Prolog - Introducao

http://slidepdf.com/reader/full/prolog-introducao 14/60<2

0e"inindo elaç!es por Jatos

 . ordem dos argumentos em uma relação de"inida arbitrariamente, mas deve serseguida e usada de "orma consistente

progenitor(abraão,isaHue) signi"ica Hue N.braão progenitor de IsaHue

progenitor(isaHue,abraão)

signi"ica Hue NIsaHue progenitor de .braãoote Hue progenitor(abraão,isaHue) não

tem o mesmo signi"icado Hueprogenitor(isaHue,abraão)

Page 15: Prolog - Introducao

7/21/2019 Prolog - Introducao

http://slidepdf.com/reader/full/prolog-introducao 15/60<3

0e"inindo elaç!es por Jatos

Os nomes das relaç!es e seus argumentos sãoarbitrários, ou sea+ progenitor(abraão,isaHue)

a(b,c) são semanticamente eHuivalentes desde Hue Na signi"iHue Nprogenitor Nb signi"iHue Nabraão e

Nc signi"iHue NisaHue ormalmente, o programador escol$e nomes

signi"icativos

Page 16: Prolog - Introducao

7/21/2019 Prolog - Introducao

http://slidepdf.com/reader/full/prolog-introducao 16/60<4

0e"inindo elaç!es por Jatos

uando o programa interpretadoQcompilado, pode1seHuestionar Prolog sobre a relaçãoprogenitor, por e%emplo+ IsaHue o pai de LacóR

Esta pergunta pode sercomunicada à Prolog digitando+

?- progenitor(isaque,jacó).

*omo Prolog encontra essapergunta como um "ato inseridoem sua base, Prolog responde+

yes

 .braão6ara

IsaHue Ismael

Esa7 Lacó

Los

progenitor(sara,isaHue)9

progenitor(abraão,isaHue)9

progenitor(abraão,ismael)9

progenitor(isaHue,esa7)9

progenitor(isaHue,acó)9

progenitor(acó,os)9

Page 17: Prolog - Introducao

7/21/2019 Prolog - Introducao

http://slidepdf.com/reader/full/prolog-introducao 17/60<B

0e"inindo elaç!es por Jatos

Sma outra pergunta pode ser ?- progenitor(ismael,jacó).

Prolog responde+

no

porHue o programa não mencionanada sobre Ismael como sendo oprogenitor de Lacó

Prolog tambm responde no àpergunta+

?- progenitor(jacó,moisés).no

 .braão6ara

IsaHue Ismael

Esa7 Lacó

Los

progenitor(sara,isaHue)9

progenitor(abraão,isaHue)9

progenitor(abraão,ismael)9

progenitor(isaHue,esa7)9

progenitor(isaHue,acó)9

progenitor(acó,os)9

Page 18: Prolog - Introducao

7/21/2019 Prolog - Introducao

http://slidepdf.com/reader/full/prolog-introducao 18/60<D

0e"inindo elaç!es por Jatos

Perguntas mais interessantestambm podem ser e"etuadas+uem o progenitor de IsmaelR

?- progenitor(X,ismael).

este caso, Prolog não vairesponder apenas yes ou no9Prolog "ornecerá o valor de talHue a pergunta acima seaverdadeira

 .ssim a resposta +

X = abraão

 .braão6ara

IsaHue Ismael

Esa7 Lacó

Los

progenitor(sara,isaHue)9

progenitor(abraão,isaHue)9

progenitor(abraão,ismael)9

progenitor(isaHue,esa7)9

progenitor(isaHue,acó)9

progenitor(acó,os)9

Page 19: Prolog - Introducao

7/21/2019 Prolog - Introducao

http://slidepdf.com/reader/full/prolog-introducao 19/60<=

0e"inindo elaç!es por Jatos

 . pergunta Nuais os "il$os deIsaHueR pode ser escrita como+

?- progenitor(isaque,X).

este caso, $á mais de umaresposta poss;velK Prolog primeiroresponde com uma solução+

X = esaú

Pode1se reHuisitar uma outra solução(digitando ;) e Prolog encontra+

X = jacó 6e mais soluç!es "orem reHuisitadas,

Prolog responde no pois todas assoluç!es "oram e%auridas (no ' semmais soluç!es)

 .braão6ara

IsaHue Ismael

Esa7 Lacó

Los

progenitor(sara,isaHue)9

progenitor(abraão,isaHue)9

progenitor(abraão,ismael)9

progenitor(isaHue,esa7)9

progenitor(isaHue,acó)9

progenitor(acó,os)9

Page 20: Prolog - Introducao

7/21/2019 Prolog - Introducao

http://slidepdf.com/reader/full/prolog-introducao 20/60&G

0e"inindo elaç!es por Jatos

uest!es mais amplas podem sere"etuadas+ uem o progenitor deHuemR

e"ormulando+ encontre e U taisHue o progenitor de U

?- progenitor(X,Y). Prolog encontra todos os pares

progenitor1"il$o um após o outro  .s soluç!es são mostradas uma de

cada vez+X = sara Y = isaque;

X = abraãoY = isaque; 

X = abraãoY = ismael;

...

 .s soluç!es podem ser interrompidasdigitando [enter] ao invs de ;

 .braão6ara

IsaHue Ismael

Esa7 Lacó

Los

progenitor(sara,isaHue)9

progenitor(abraão,isaHue)9

progenitor(abraão,ismael)9

progenitor(isaHue,esa7)9

progenitor(isaHue,acó)9

progenitor(acó,os)9

Page 21: Prolog - Introducao

7/21/2019 Prolog - Introducao

http://slidepdf.com/reader/full/prolog-introducao 21/60&<

0e"inindo elaç!es por Jatos

Perguntas mais comple%as tambm podem sere"etuadas, tais como+ uem o avV de LosR

*omo nosso programa não con$ecediretamente a relação avV, esta pergunta deveser desmembrada em dois passos(<) uem o progenitor de LosR .ssuma Hue um

U

(&) uem o progenitor de UR .ssuma Hue um Esta pergunta composta pode ser escrita em

Prolog como+

?-progenitor(Y,josé),progenitor(X,Y).

X = isaque

Y = jacó

U

Los

progenitor 

progenitor 

avV

Page 22: Prolog - Introducao

7/21/2019 Prolog - Introducao

http://slidepdf.com/reader/full/prolog-introducao 22/60&&

0e"inindo elaç!es por Jatos

 . pergunta composta?- progenitor(Y,josé), progenitor(X,Y).

Pode ser lida como+ Encontre e U tais Hue satis"açam os seguintes reHuisitos

progenitor(Y,josé) e progenitor(X,Y)  0e maneira similar, podemos perguntar+ uem são os

netos de .braãoR?- progenitor(abraão,X), progenitor(X,Y).

X = isaque

Y = esaú;

X = isaque

Y = jacó

Page 23: Prolog - Introducao

7/21/2019 Prolog - Introducao

http://slidepdf.com/reader/full/prolog-introducao 23/60&-

0e"inindo elaç!es por Jatos

Outro tipo de pergunta pode ser e"etuado+Esa7 e Lácó tCm um progenitor emcomumR

Isso pode ser e%presso em duas etapas+ uem o progenitor, , de Esa7R W (este mesmo) um progenitor de LacóR

 . pergunta correspondente em Prolog +?- progenitor(X,esaú), progenitor(X,jacó).

X = isaque

Page 24: Prolog - Introducao

7/21/2019 Prolog - Introducao

http://slidepdf.com/reader/full/prolog-introducao 24/60&2

Pontos Importantes

O nome de uma relação deve começar com umaletra min7scula

 . relação escrita primeiro e os seus

argumentos são separados por v;rgulas ecolocados entre parCnteses O ponto "inal N9 deve seguir o "inal do "ato W "ácil de"inir uma relação em Prolog, por

e%emplo a relação progenitor , escrevendo n1tuplas de obetos Hue satis"azem a relação O usuário pode perguntar ao sistema Prolog

sobre relaç!es de"inidas no programa

Page 25: Prolog - Introducao

7/21/2019 Prolog - Introducao

http://slidepdf.com/reader/full/prolog-introducao 25/60&3

Pontos Importantes

Sm programa Prolog consiste de cláusulasK cadacláusula termina com um ponto "inal

Os argumentos das relaç!es podem (entre outrascoisas) ser+ obetos concretos ou constantes (tais

como abraão e isaque) ou obetos gerais taiscomo X  e Y 9 Obetos do primeiro tipo sãoc$amados átomosK obetos do segundo tipo sãoc$amados variáveis

 . aridade de uma relação o seu n7mero deargumentos e denotada como uma barraseguida pela aridade progenitorQ& signi"ica Hue a relação progenitor possui

& argumentos, ou Hue a relação progenitor tem aridade

&

Page 26: Prolog - Introducao

7/21/2019 Prolog - Introducao

http://slidepdf.com/reader/full/prolog-introducao 26/60

&4

Pontos Importantes

Perguntas consistem em uma ou mais cláusulas Sma seHXCncia de cláusulas, tal como+

progenitor(,esa7), progenitor(,acó) 6igni"ica a conunção das cláusulas

um progenitor de Esa7 e um progenitor de Lacó

 . resposta a uma pergunta pode ser  Positiva+ a pergunta satis"at;vel e teve sucesso (suceeded ) egativa+ a pergunta insatis"at;vel e "al$ou (failed )

6e várias respostas satis"azem uma pergunta, Prologencontra tantas Huantas poss;veis 6e o usuário estiver satis"eito com a resposta, basta digitar return

6e desear mais respostas, usa1se ponto1e1v;rgula N;

Page 27: Prolog - Introducao

7/21/2019 Prolog - Introducao

http://slidepdf.com/reader/full/prolog-introducao 27/60

&B

E%erc;cio

E%pressar em portuguCs+ valioso(ouro)9 "emea(ane)9 possui(oao,ouro)9 pai(oao,maria)9

da(oao,livro,maria)9

Page 28: Prolog - Introducao

7/21/2019 Prolog - Introducao

http://slidepdf.com/reader/full/prolog-introducao 28/60

&D

E%erc;cio

gosta(joao, peixe).

gosta(joao,maria).

gosta(maria,livro).

gosta(pedro,livro).

gosta(maria,lor).

gosta(maria,vin!o).

uais as respostas dadas porPrologR

?- gosta(maria,X).

?- gosta(X,livro).

?- gosta("uem,#que).

?- gosta(X,Y).

?- gosta(X,X).

?- gosta($a,$b).

?- gosta(%,peixe).

Page 29: Prolog - Introducao

7/21/2019 Prolog - Introducao

http://slidepdf.com/reader/full/prolog-introducao 29/60

&=

E%erc;cio

uais as respostas dadas por PrologR(a) ?- progenitor(josé,X).

(b) ?- progenitor(X,josé).

(c) ?- progenitor(sara,X),

  progenitor(X,jacó).() ?- progenitor(sara,X),

  progenitor(X,Y),

  progenitor(Y,josé).

 .braão6ara

IsaHue Ismael

Esa7 Lacó

Los

progenitor(sara,isaHue)9

progenitor(abraão,isaHue)9progenitor(abraão,ismael)9

progenitor(isaHue,esa7)9

progenitor(isaHue,acó)9

progenitor(acó,os)9

Page 30: Prolog - Introducao

7/21/2019 Prolog - Introducao

http://slidepdf.com/reader/full/prolog-introducao 30/60

-G

0e"inindo elaç!es por egras

osso programa sobre "am;liaspode ser estendido de várias"ormas

Famos adicionar a in"ormaçãosobre o se%o das pessoas

envolvidas na relação progenitor  Por e%emplo+

mul$er(sara)9 $omem(abraão)9 $omem(isaHue)9 $omem(ismael)9 $omem(esa7)9 $omem(acó)9 $omem(os)9

 .s relaç!es mulher  ehomem são relaç!esunárias

Sma relação binária,

como progenitor, de"ineum relacionamento entrepares de obetos

elaç!es unárias sãousadas para declarar

propriedades simplessimQnão dos obetos

 . primeira cláusula unáriapode ser lida como N6ara uma mul$er

Page 31: Prolog - Introducao

7/21/2019 Prolog - Introducao

http://slidepdf.com/reader/full/prolog-introducao 31/60

-<

0e"inindo elaç!es por egras

In"ormação sobre o se%odas pessoas envolvidasna relação progenitor + mul$er(sara)9 $omem(abraão)9

$omem(isaHue)9 $omem(ismael)9 $omem(esa7)9 $omem(acó)9 $omem(os)9

Podemos declarar amesma in"ormaçãousando uma relaçãobinária sexo+ se%o(sara,"eminino)9

se%o(abraão,masculino)9 se%o(isaHue,masculino)9 se%o(ismael,masculino)9 se%o(esa7,masculino)9 se%o(acó,masculino)9

se%o(os,masculino)9

Page 32: Prolog - Introducao

7/21/2019 Prolog - Introducao

http://slidepdf.com/reader/full/prolog-introducao 32/60

-&

Escol$endo Obetos e elaç!es

*omo representar+ N6ara uma mul$er mul$er(sara)9

Permite responder+ Nuem mul$erR ão permite responder+ Nual o se%o de 6araR

se%o(sara,"eminino)9 Permite responder+ Nuem mul$erR Permite responder+ Nual o se%o de 6araR ão permite responder+ Nual a propriedade de 6ara Hue tem

o valor "emininoR propriedade(sara,se%o,"eminino)9

Permite responder todas as perguntas epresentação obeto1atributo1valor 

Page 33: Prolog - Introducao

7/21/2019 Prolog - Introducao

http://slidepdf.com/reader/full/prolog-introducao 33/60

--

0e"inindo elaç!es por egras

Famos estender o programa introduzindo arelação filho_geral  como o inverso da relação

 progenitor  Podemos de"inir filho_geral  de maneira similar à

relação progenitor , ou sea enumerando umalista de "atos sobre a relação filho_geral , pore%emplo "il$o@geral(isaHue,sara)9 "il$o@geral(isaHue,abraão)9 "il$o@geral(ismael,abraão)9 999

Page 34: Prolog - Introducao

7/21/2019 Prolog - Introducao

http://slidepdf.com/reader/full/prolog-introducao 34/60

-2

0e"inindo elaç!es por egras

Entretanto, a relação filho_geral  pode serde"inida de modo mais elegante+ Para todo e U,

  U um "il$o@geral de se

  um progenitor de U9 Em Prolog+ "il$o@geral(U,) +1

progenitor(,U)9

Esta cláusula tambm pode ser lida como+ Par todo e U,

  se um progenitor de U então  U um "il$o@geral de

Page 35: Prolog - Introducao

7/21/2019 Prolog - Introducao

http://slidepdf.com/reader/full/prolog-introducao 35/60

-3

0e"inindo elaç!es por egras

*láusulas Prolog como+ "il$o@geral(U,) +1

progenitor(,U)9

são c$amadas regras (rules)Yá uma di"erença importante entre "atos e

regras+ Sm "ato sempre verdadeiro (verdade

incondicional) egras especi"icam coisas Hue são

verdadeiras se alguma condição satis"eita

Page 36: Prolog - Introducao

7/21/2019 Prolog - Introducao

http://slidepdf.com/reader/full/prolog-introducao 36/60

-4

0e"inindo elaç!es por egras

"il$o@geral(U,) +1 progenitor(,U)9

*abeça ($ead) ou conclusão

da regra(lado esHuerdo da regra)

*orpo (bodZ) ou condição

da regra(lado direito da regra)

Page 37: Prolog - Introducao

7/21/2019 Prolog - Introducao

http://slidepdf.com/reader/full/prolog-introducao 37/60

-B

0e"inindo elaç!es por egras

Famos perguntar se Ismael "il$o@geral de .braão+ ?- il!o$geral(ismael,abraão).

*omo não $á "atos sobre a relação "il$o@geral, a 7nica "orma deProlog responder esta pergunta aplicando a regra sobre "il$o@geral "il$o@geral(U,) +1

progenitor(,U)9  . regra geral no sentido Hue aplicável a HuaisHuer obetos e UK

portanto ela pode tambm ser aplicada a obetos particulares taiscomo ismael e abraão

Para aplicar a regra a ismael e abraão, U tem Hue ser substitu;do porismael e por abraão

este caso, dizemos Hue as variáveis e U estão instanciadas a+ ' abraão e U ' ismael

0epois da instanciação, obtemos um caso especial da regra geral,Hue + "il$o@geral(ismael,abraão) +1

progenitor(abraão,ismael)9

Page 38: Prolog - Introducao

7/21/2019 Prolog - Introducao

http://slidepdf.com/reader/full/prolog-introducao 38/60

-D

0e"inindo elaç!es por egras

 . condição da regra com as variáveis instanciadas "il$o@geral(ismael,abraão) +1

progenitor(abraão,ismael)9 +

progenitor(abraão,ismael)9  .ssim, Prolog tenta provar Hue a condição verdadeira Para provar a condição, trivial por Prolog encontra um

"ato correspondente no programa Isso implica Hue a conclusão da regra tambm

verdadeira e Prolog responde a"irmativamente à pergunta+ ?- il!o$geral(ismael,abraão). yes

Page 39: Prolog - Introducao

7/21/2019 Prolog - Introducao

http://slidepdf.com/reader/full/prolog-introducao 39/60

-=

0e"inindo elaç!es por egras

Famos incluir a especi"icação da relação mãe,com base no seguinte "undamento lógico+ Para todo e U,

  a mãe de U se

  um progenitor de U e  uma mul$er9 Traduzindo para Prolog+ mãe(,U) +1

  progenitor(,U),

  mul$er()9 Sma v;rgula entre duas condiç!es indica aconunção das condiç!es, signi"icando Hueambas condiç!es tCm Hue ser verdadeiras

Page 40: Prolog - Introducao

7/21/2019 Prolog - Introducao

http://slidepdf.com/reader/full/prolog-introducao 40/60

2G

0e"inindo elaç!es por egras

E%emplo+ de PortuguCs para Prolog Sma pessoa mãe se tiver algum "il$o e essa pessoa

"or mul$er  Sma pessoa mãe se "or progenitor de algum e essa

pessoa "or mul$er  Sma pessoa mãe de U se "or progenitor de U e

"or mul$er  mãe de U se progenitor de U e mul$er  mãe(X,Y) &'

  progenitor(X,Y),

  mul!er(X).

Page 41: Prolog - Introducao

7/21/2019 Prolog - Introducao

http://slidepdf.com/reader/full/prolog-introducao 41/60

2<

0e"inindo elaç!es por egras

Em Prolog, uma regra consiste de umacabeça e uma corpo

 . cabeça e o corpo são conectados pelo

s;mbolo :-, denominado neck , "ormado pordois pontos e $;"en

:-  pronunciado Nse

mãe(,U) :- progenitor(,U), mul$er()9

Page 42: Prolog - Introducao

7/21/2019 Prolog - Introducao

http://slidepdf.com/reader/full/prolog-introducao 42/60

2&

E%erc;cio

Identi"iHue a cabeça e cauda de cada regra9 E%pressar cada regra em PortuguCs+

gosta(joao,X) !-

gosta(X,vin!o),

gosta(X,comida).

gosta(joao,X) !-mul!er(X),

gosta(X,vin!o).

Page 43: Prolog - Introducao

7/21/2019 Prolog - Introducao

http://slidepdf.com/reader/full/prolog-introducao 43/60

2-

E%erc;cio

Ssando a base aolado, de"ina a regra+Sma pessoa pode

roubar algo se essapessoa um ladrão eela gosta de um obeto

ual a resposta dada

por Prolog a pergunta+Loão rouba o HuCR

ladrao(joao).

ladrao(pedro).

gosta(maria,lor).

gosta(maria,queijo).

gosta(maria,vin!o).

gosta(joao,rubi).

gosta(joao,X) &'

gosta(X,vin!o).

Page 44: Prolog - Introducao

7/21/2019 Prolog - Introducao

http://slidepdf.com/reader/full/prolog-introducao 44/60

22

[ra"os 0e"inindo elaç!es

elaç!es como progenitor , filho_geral  e mãe podem ser ilustradaspor diagramas Hue seguem as seguintes convenç!es ós nos gra"os correspondem a obetos (argumentos das relaç!es)  .rcos entre nós correspondem a relaç!es binárias (& argumentos)  .rcos são orientados apontando do primeiro argumento da relação para o

segundo argumento

elaç!es unárias são indicadas nos diagramas simplesmente marcandoos obetos correspondentes com o nome da relação  .s relaç!es sendo de"inidas são representadas por arcos traceados

progenitor 

progenitor 

avV@geralU

:

progenitor  "il$o@geral

U

progenitor  mãe

U

mul$er 

Page 45: Prolog - Introducao

7/21/2019 Prolog - Introducao

http://slidepdf.com/reader/full/prolog-introducao 45/60

23

[ra"os 0e"inindo elaç!es

*ada diagrama deve ser interpretado da seguinte "orma+se as relaç!es mostradas pelos arcos sólidos sãoverdadeiras então a relação mostrada pelo arco traceadotambm verdadeira

 .ssim, a relação av_geral  pode ser imediatamente

escrita como+ avV@geral(,:) +1 progenitor(,U), progenitor(U,:)9

progenitor 

progenitor 

avV@geralU

:

progenitor  "il$o@geral

U

progenitor  mãe

U

mul$er 

Page 46: Prolog - Introducao

7/21/2019 Prolog - Introducao

http://slidepdf.com/reader/full/prolog-introducao 46/60

24

aZout de um Programa Prolog

Prolog "ornece liberdade na escrita do layout  doprograma

Entretanto, os programas devem ter um aspecto

compacto e, acima de tudo, "ácil de ler  .ssim, um padrão escrever a cabeça de uma

cláusula bem como cada condição em seu corpoem uma lin$a separada

 .lm disso, as condiç!es são deslocadas demodo a mel$or separar a cabeça do corpo deuma regra

Page 47: Prolog - Introducao

7/21/2019 Prolog - Introducao

http://slidepdf.com/reader/full/prolog-introducao 47/60

2B

aZout de um Programa Prolog

Por e%emplo, a relação avV@geral(,:) +1 progenitor(,U), progenitor(U,:)9

deve ser escrita da seguinte "orma+

avV@geral(,:) +1  progenitor(,U),  progenitor(U,:)9

Page 48: Prolog - Introducao

7/21/2019 Prolog - Introducao

http://slidepdf.com/reader/full/prolog-introducao 48/60

2D

0e"inindo elaç!es por egras

 . relação irmão pode ser de"inida como+ Para todo e U,

  irmão de U se  ambos e U tCm um progenitor em comum e  um $omem9

Em Prolog+ irmão(,U) +1  progenitor(:,),  progenitor(:,U),  $omem()9

ote a "orma de e%pressar Nambos e U tCm um

progenitor em comum+  .lgum : deve ser o progenitor de e este mesmo : deve ser oprogenitor de U

Sma "orma alternativa, mas menos elegante seria+ :< progenitor de e :& progenitor de U e :< igual a :&

:

progenitor progenitor 

irmão U$omem

Page 49: Prolog - Introducao

7/21/2019 Prolog - Introducao

http://slidepdf.com/reader/full/prolog-introducao 49/60

2=

0e"inindo elaç!es por egras

Podemos perguntar a Prolog+ ?- irmão(esaú,jacó). yes

Portanto, poder;amos concluir Hue a relação irmão, comode"inida, "unciona corretamente

Entretanto $á uma "al$a em nosso programa Hue revelada se perguntamos Nuem o irmão de LacóR ?- irmão(X,jacó).

Prolog "ornecerá duas respostas X = esaú ;

X = jacó  .ssim, Lacó irmão dele mesmoR Provavelmente isso

não era bem o Hue t;n$amos em mente Huando de"inimosa relação irmão

Entretanto, de acordo com nossa de"inição sobre irmãos,

a resposta de Prolog per"eitamente lógica

Page 50: Prolog - Introducao

7/21/2019 Prolog - Introducao

http://slidepdf.com/reader/full/prolog-introducao 50/60

3G

0e"inindo elaç!es por egras

ossa regra sobre irmãos não menciona Hue e U não devem ser amesma pessoa se deve ser irmão de U

*omo isso não "oi de"inido, Prolog (corretamente) assume Hue e Upodem ser a mesma pessoa e como conseHXCncia encontra Hue todo$omem Hue tem um progenitor irmão de si próprio

Para corrigir a regra sobre irmãos, devemos adicionar a restrição Hue

e U devem ser di"erentes Feremos nas pró%imas aulas como isso pode ser e"etuado de

diversas maneiras, mas para o momento, vamos assumir Hue arelação diferente á con$ecida de Prolog e Hue di"erente(,U) satis"eita se e somente se e U não são iguais

Isso nos leva à seguinte regra sobre irmãos+

irmão(,U) +1  progenitor(:,),  progenitor(:,U),  $omem(),  di"erente(,U)9

Page 51: Prolog - Introducao

7/21/2019 Prolog - Introducao

http://slidepdf.com/reader/full/prolog-introducao 51/60

3<

Pontos Importantes

Programas Prolog podem ser estendidos simplesmentepela adição de novas cláusulas

*láusulas Prolog são de trCs tipos+ fatos, regras e perguntas Fatos declaram coisas Hue são sempre (incondicionalmente)

verdadeiras Regras declaram coisas Hue são verdadeiras dependendo de

determinadas condiç!es  .travs de perguntas, o usuário pode Huestionar o programa

sobre Huais coisas são verdadeiras *láusulas Prolog consistem em uma cabeça e o corpoK o

corpo uma lista de condiç!es separadas por v;rgulas(Hue signi"icam conunç!es)

Jatos são cláusulas Hue tCm uma cabeça e o corpo vazioKperguntas tCm apenas o corpoK regras tCm uma cabeça eum corpo (não vazio)

Page 52: Prolog - Introducao

7/21/2019 Prolog - Introducao

http://slidepdf.com/reader/full/prolog-introducao 52/60

3&

Pontos Importantes

0urante a computação, uma variável pode ser substitu;dapor um obeto+ dizemos Hue a variável está instanciada

 .s variáveis são universalmente Huanti"icadas e são lidascomo NPara todo

Todavia, leituras alternativas são poss;veis para variáveisHue aparecem apenas no corpo

Por e%emplo+ tem"il$os() +1 progenitor(,U)9

Pode ser lida de duas "ormas+ Para todo  e U,

se um progenitor de U então tem "il$os Para todo ,

tem "il$os seexiste algum U tal Hue um progenitor de U

Page 53: Prolog - Introducao

7/21/2019 Prolog - Introducao

http://slidepdf.com/reader/full/prolog-introducao 53/60

3-

E%erc;cios

Traduza para Prolog+ Todo mundo Hue tem"il$o "eliz (de"ina a relação unária feli! )

0e"ina as relaç!es irmã e irmão_geral 

0e"ina a relação neto_geral usando arelação progenitor 

0e"ina a relação tio"X#Y$ em termos das

relaç!es progenitor e irmão

Page 54: Prolog - Introducao

7/21/2019 Prolog - Introducao

http://slidepdf.com/reader/full/prolog-introducao 54/60

32

egras ecursivas

Famos adicionar a relação ancestral 

Esta relação será de"inida por duas regras+a primeira será o caso base (não recursivo)

e a segunda será o caso recursivo Para todo e :,

um ancestral de : se

um progenitor de :9 ancestral(,:) +1

  progenitor(,:)9

progenitor  ancestral

:

Page 55: Prolog - Introducao

7/21/2019 Prolog - Introducao

http://slidepdf.com/reader/full/prolog-introducao 55/60

33

egras ecursivas

progenitor 

progenitor 

ancestralU

:

progenitor 

:

U<

U&

ancestralprogenitor 

progenitor 

progenitor 

ancestral

U-

:

U<

U&

progenitor 

progenitor 

progenitor 

ancestral(,:) +1  progenitor(,U),

  progenitor(U,:)9 ancestral(,:) +1  progenitor(,U<),

  progenitor(U<,U&),

  progenitor(U&,:)9

ancestral(,:) +1  progenitor(,U<),

  progenitor(U<,U&),

  progenitor(U&,U-),

  progenitor(U-,:)9

Page 56: Prolog - Introducao

7/21/2019 Prolog - Introducao

http://slidepdf.com/reader/full/prolog-introducao 56/60

34

egras ecursivas

Para todo e :, um ancestral de : se$á algum U tal Hue

um progenitor de U eU um ancestral de :9

ancestral(,:) +1

  progenitor(,U),  ancestral(U,:)9

progenitor 

ancestral

:

U

...ancestral

Page 57: Prolog - Introducao

7/21/2019 Prolog - Introducao

http://slidepdf.com/reader/full/prolog-introducao 57/60

3B

egras ecursivas

ancestral(,:) +1 \ caso base  progenitor(,:)9

ancestral(,:) +1 \ caso recursivo  progenitor(,U),

  ancestral(U,:)9 Podemos perguntar+ Huais os descendentes de

6araR ?- ancestral(sara,X). X = isaque;

X = esaú;

X = jacó;

X = jos"

Page 58: Prolog - Introducao

7/21/2019 Prolog - Introducao

http://slidepdf.com/reader/full/prolog-introducao 58/60

3D

Programa da Jam;lia 8;blica

progenitor(sara,isaque).progenitor(abraão,isaque).progenitor(abraão,ismael).progenitor(isaque,esaú).progenitor(isaque,jacó).progenitor(jacó,josé).

mul!er(sara).!omem(abraão).!omem(isaque).!omem(ismael).!omem(esaú).

!omem(jacó).!omem(josé).

il!o$geral(Y,X) &'progenitor(X,Y).

mãe(X,Y) &'  progenitor(X,Y),  mul!er(X).av$geral(X,) &'

  progenitor(X,Y),  progenitor(Y,).irmão(X,Y) &'progenitor(,X),

  progenitor(,Y),  !omem(X).

ancestral(X,) &'  progenitor(X,).ancestral(X,) &'  progenitor(X,Y),  ancestral(Y,).

E ; i

Page 59: Prolog - Introducao

7/21/2019 Prolog - Introducao

http://slidepdf.com/reader/full/prolog-introducao 59/60

3=

E%erc;cio

Fimos a seguinte de"inição darelação ancestral ancestral(,:) +1

  progenitor(,:)9 ancestral(,:) +1

  progenitor(,U),

  ancestral(U,:)9 *onsidere a seguinte de"iniçãoalternativa+ ancestral(,:) +1

  progenitor(,:)9 ancestral(,:) +1

  progenitor(U,:),

  ancestral(,U)9 Esta uma de"inição correta de

ancestraisR W poss;vel modi"icar o

diagrama de "orma acorresponder a esta nova

de"iniçãoR

progenitor 

ancestral

:

U

...ancestral

Page 60: Prolog - Introducao

7/21/2019 Prolog - Introducao

http://slidepdf.com/reader/full/prolog-introducao 60/60

6lides baseados nos livros+

8rat]o, I9K

Prolog Programming for Artificial Intelligence,

-rd Edition, Pearson Education, &GG<9

*loc]sin, ^9J9K #ellis$, *969K

Programming in Prolog ,

3t$ Edition, 6pringer1Ferlag, &GG-9

#aterial baseado em slides de

Los .ugusto 8aranaus]as

S6P1ibeirão Preto