Introdução à Modelagem Conceitual 3. Prolog

24
Introdução à Modelagem Conceitual 3. Prolog Luiz A M Palazzo Abril, 2011 Universidade Católica de Pelotas Universidade Católica de Pelotas Centro Politécnico Centro Politécnico Laboratório de Modelagem Computacional Laboratório de Modelagem Computacional

description

Universidade Católica de Pelotas Centro Politécnico Laboratório de Modelagem Computacional. Introdução à Modelagem Conceitual 3. Prolog. Luiz A M Palazzo Abril, 2011. O que é PROLOG ?. PROgrammation en LOGique Alain Colmerauer Univ. Aix-Marseille, 1972 Robert Kowalski - PowerPoint PPT Presentation

Transcript of Introdução à Modelagem Conceitual 3. Prolog

Page 1: Introdução à Modelagem Conceitual 3. Prolog

Introdução à Modelagem Conceitual3. Prolog

Luiz A M PalazzoAbril, 2011

Universidade Católica de PelotasUniversidade Católica de Pelotas

Centro PolitécnicoCentro Politécnico

Laboratório de Modelagem ComputacionalLaboratório de Modelagem Computacional

Page 2: Introdução à Modelagem Conceitual 3. Prolog

Introdução à Modelagem Conceitual - 03 PROLOG 2

O que é PROLOG ?

  PROgrammation en LOGique

  Alain Colmerauer  Univ. Aix-Marseille, 1972

  Robert Kowalski  Univ. Edimburgo, 1974

Page 3: Introdução à Modelagem Conceitual 3. Prolog

Introdução à Modelagem Conceitual - 03 PROLOG 3

Programação em Lógica

Sócrates é homem.Todo homem é

mortal.

Quem é mortal?

Sócrates é mortal.

homem(sócrates).mortal(X)

homem(X).

?- mortal(Z).

Z = sócrates.

Page 4: Introdução à Modelagem Conceitual 3. Prolog

Introdução à Modelagem Conceitual - 03 PROLOG 4

Fatos, Regras e Consultas

Fatos, Regras e Consultas

  A programação em lógica baseia-se em estruturas lógicas denominadas Cláusulas de HornCláusulas de Horn,, que se apresentam em quatro formas distintas:

FatosFatos a RegrasRegras a bConsultasConsultas bVaziaVazia

Page 5: Introdução à Modelagem Conceitual 3. Prolog

Introdução à Modelagem Conceitual - 03 PROLOG 5

Fatos, Regras e Consultas

• Fatos: São verdades incondicionais:

pai(josé, joão).pai(joão, júlio).pai(júlio, jorge).

Page 6: Introdução à Modelagem Conceitual 3. Prolog

Introdução à Modelagem Conceitual - 03 PROLOG 6

Fatos, Fatos, Regras e Regras e ConsultasConsultas

Fatos, Fatos, Regras e Regras e ConsultasConsultas

• Fatos: São verdades incondicionais:

pai(josé, joão).pai(joão, júlio).pai(júlio, jorge).

• Regras: Podem ser verdadeiras ou não:

filho(X, Y) pai(Y, X).avô(X, Y) pai(X, Z), pai(Z, Y).

Page 7: Introdução à Modelagem Conceitual 3. Prolog

Introdução à Modelagem Conceitual - 03 PROLOG 7

Fatos, Fatos, Regras e Regras e ConsultasConsultas

Fatos, Fatos, Regras e Regras e ConsultasConsultas

• Fatos: São verdades incondicionais:

pai(josé, joão).pai(joão, júlio).pai(júlio, jorge).

• Regras:

Podem ser verdadeiras ou não:

filho(X, Y) pai(Y, X).avô(X, Y) pai(X, Z), pai(Z, Y).

• Consultas: Provocam a execução do programa:

?- filho(júlio, X). X=joão?- avô(X, jorge). X=joão

Page 8: Introdução à Modelagem Conceitual 3. Prolog

Aplicações Avançadas em Prolog

• Sistemas Especialistas,• Engenharia de Software,• Simulação,• Educação,• Suporte à Decisão,• Programação Científica,• Processamento da Linguagem,• Bases de Dados Dedutivas,• Programação da Web.

Page 9: Introdução à Modelagem Conceitual 3. Prolog

Introdução à Modelagem Conceitual - 03 PROLOG 9

A Cláusula Prolog

a :- b1, b2 ... bi ; bj ... bn.

Cabeça

Condição

“se” “e” “ou”

Corpo

Page 10: Introdução à Modelagem Conceitual 3. Prolog

Operadores Prolog

Linguagem Natural

Cálculo de Predicados

ProgramasProlog

E ,OU ;SE :-

NÃO not

Introdução à Modelagem Conceitual - 03 PROLOG 10

Page 11: Introdução à Modelagem Conceitual 3. Prolog

Introdução à Modelagem Conceitual - 03 PROLOG 11

Fatos Seja a árvore genealógica

mostrada abaixo...

Maria João

José Ana

Júlia Íris

Jorge

que pode ser representada pelo seguinte programa Prolog:

progenitor(maria, josé).progenitor(joão, josé).progenitor(joão, ana).progenitor(josé, júlia).progenitor(josé, íris).progenitor(íris, jorge).

Este programa representa a relação progenitor/2, na forma de um predicado, que contém 6 cláusulas, que são todas fatos.

Page 12: Introdução à Modelagem Conceitual 3. Prolog

Introdução à Modelagem Conceitual - 03 PROLOG 12

ConsultasO programa pode ser pensado como uma tabela em uma BD.

progenitor(maria, josé).progenitor(joão, josé).progenitor(joão, ana).progenitor(josé, júlia).progenitor(josé, íris).progenitor(íris, jorge).

No caso de um programa constituído unicamente de fatos, a semântica é exatamente a mesma de uma BD relacional...

que pode ser consultada de várias maneiras:

?- progenitor(joão, ana).true

?- progenitor(joão, jorge).false

?- progenitor(joão, X).X=josé;X=ana;false

?- progenitor(X,Y).X=maria, Y=josé;X=joão, Y=josé;...X=íris, Y=jorge;false

Page 13: Introdução à Modelagem Conceitual 3. Prolog

Introdução à Modelagem Conceitual - 03 PROLOG 13

Ampliando a Base de Fatos

O programa pode ser ampliado acrescentando-se novos fatos que inclusive podem estabelecer novas relações.

No exemplo ao lado acrescentou-se ao programa original as relações masculino/1 e feminino/1.

Estas relações, que possuem aridade 1 (um só argumento), podem ser pensadas como sendo atributos dos objetos a que se aplicam.

progenitor(maria, josé).progenitor(joão, josé).progenitor(joão, ana).progenitor(josé, júlia).progenitor(josé, íris).progenitor(íris, jorge).

masculino(joão).masculino(josé).masculino(jorge).

feminino(maria).feminino(ana).feminino(júlia).feminino(íris).

Page 14: Introdução à Modelagem Conceitual 3. Prolog

Introdução à Modelagem Conceitual - 03 PROLOG 14

Regras

As relações pai/2 e mãe/2 podem agora ser definidas da seguinte maneira:

X é pai de Y se X é progenitor de Y e X é masculino.

X é mãe de Y se X é progenitor de Y e X é feminino.

Em Prolog:

pai(X,Y) :-

progenitor(X,Y), masculino(X).

mãe(X,Y) :-

progenitor(X,Y), feminino(X).

Page 15: Introdução à Modelagem Conceitual 3. Prolog

Introdução à Modelagem Conceitual - 03 PROLOG 15

Mais Regras

As relações irmão/2 e irmã/2 podem agora ser definidas da seguinte maneira:

X é irmão de Y se Z é progenitor de X e Z é progenitor de Y e X é masculino.

X é irmã de Y se ...

Em Prolog:

irmão(X,Y) :- progenitor(Z,X), progenitor(Z,Y), masculino(X).

irmã(X,Y) :- ...

mas, esta regra tem um problema. (qual?)

Page 16: Introdução à Modelagem Conceitual 3. Prolog

Introdução à Modelagem Conceitual - 03 PROLOG 16

Exercício

Acrescentar ao programa da árvore genealógica as seguintes relações (em 10 minutos):

avô/2

tia/2

prima/2

Page 17: Introdução à Modelagem Conceitual 3. Prolog

Introdução à Modelagem Conceitual - 03 PROLOG 17

Representação Textual

Considere o seguinte texto:

“João nasceu em Pelotas e Jean nasceu em Paris. Paris fica na França, enquanto que Pelotas fica no Rio Grande do Sul. Agora, só é gaúcho quem nasceu no Rio Grande do Sul, tchê.”

Ao lado a codificação em Prolog:

nasceu(joão,pelotas).nasceu(jean,paris).

fica(paris,frança).fica(pelotas,rs).

gaúcho(X):-nasceu(X,Y),fica(Y,rs).

?- gaúcho(X).X=joão;false

Page 18: Introdução à Modelagem Conceitual 3. Prolog

Introdução à Modelagem Conceitual - 03 PROLOG 18

Predicados RecursivosSeja, por exemplo, a relação antepassado/2:

Uma tentativa de codificar esta relação em Prolog seria:

antepassado(X,Y) :- progenitor(X,Y).

antepassado(X,Y) :- progenitor(X,Z), progenitor(Z,Y).

... (indefinidamente).

Claramente, uma má solução. (Por que?)

Maria João

Júlia Íris

Jorge

progenitor progenitor

progenitor(a)

(b)

antepassado direto

antepassado indireto

Page 19: Introdução à Modelagem Conceitual 3. Prolog

Introdução à Modelagem Conceitual - 03 PROLOG 19

Predicados RecursivosUma representação mais geral:

Uma codificação recursiva para antepassado/2:

antepassado(X,Y) :- progenitor(X,Y).

antepassado(X,Y) :- progenitor(X,Z), antepassado(Z,Y).

... (só!).

Por que esta solução é melhor que a anterior?

Y

João

Íris

antepassado

antepassado

progenitor

...

Page 20: Introdução à Modelagem Conceitual 3. Prolog

Introdução à Modelagem Conceitual - 03 PROLOG 20

Caminhos em GrafosSeja o grafo direcionado abaixo:

conecta(a,b,3).conecta(a,c,4)....conecta(e,f,2).

caminho(X,Y,K):-conecta(X,Y,K).

caminho(X,Y,K):-conecta(X,Z,K1),

caminho(Z,Y,K2),K is K1+K2.

?- caminho(X,Y,K).X=a, Y=b, K=3;...false

A

B

C

D

E

F

34

2

45

1

2

E as relações conecta(X,Y,K) e caminho(X,Y,K), onde X e Y são nodos e K é o custo entre eles. Ao lado, em Prolog:

5

Page 21: Introdução à Modelagem Conceitual 3. Prolog

Introdução à Modelagem Conceitual - 03 PROLOG 21

Predicados Recursivos• Referenciam a si próprios.

• Possuem, no mínimo, duas cláusulas, uma recursiva e a outra não.

• A cláusula não-recursiva denomina-se cláusula básica.

• As cláusulas básicas podem ser regras ou fatos.

• As cláusulas recursivas são sempre regras.

• O predicado recursivo somente é bem sucedido na cláusula básica.

• A cláusula recursiva nunca é bem sucedida.

Page 22: Introdução à Modelagem Conceitual 3. Prolog

Introdução à Modelagem Conceitual - 03 PROLOG 22

Programa Prolog

Predicados são conjuntos de cláusulas com o mesmo nome e aridade

Programa PROLOG

Cada predicado denota uma relação

Conjunto de Predicados

Fatos: Verdades incondicionais

Regras: Verdades condicionais

A

A B, C, D ...

A é verdadeiro

A é verdadeiro se B, C, D ... são todos verdadeiros

pai(joão, josé).

pai(X, Y) :- masculino(X), progenitor(X, Y).

É executado a partir de uma consulta ou cláusula objetivo

( A)

Conjunto de axiomas

Teorema a ser provado

Consulta:?-pai(joão,

X).

Sistema PROLOG

Dedução SLD

Resultado: Instanciações das variáveis da consulta que permitem prová-la verdadeira.

O domínio do problema é representado como um conjunto de relações

Um predicado é verdadeiro se pelo menos uma das suas cláusulas é verdadeira

Variáveis começam com maiúsculas e constantes com minúsculas

Problemado

Mundo Real

Page 23: Introdução à Modelagem Conceitual 3. Prolog

Introdução à Modelagem Conceitual - 03 PROLOG 23

Exercício

Criar a base de fatos da sua árvore genealógica (inicialmente só com as relações progenitor/2, masculino/1 e feminino/1).

Enriquecer com outras relações de parentesco além das apresentadas (por exemplo: bisavó/2, cunhado/2, ... etc).

Testar! (por exemplo: quem é tio de X?)

Sugestão: Pedir a ajuda das pessoas mais velhas da família.

Page 24: Introdução à Modelagem Conceitual 3. Prolog

Introdução à Modelagem Conceitual - 03 PROLOG 24

Ponteiros

• Prolog na Wikipedia http://pt.wikipedia.org/wiki/Prolog

• Programação em Lógica http://vl.fmnet.info/logic-prog/

• SWI Prolog http://www.swi-prolog.org