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
Univ. Edimburgo, 1974
Introdução à Modelagem Conceitual - 03 PROLOG
2
Programação em Lógica
Sócrates é homem.
Todo homem é mortal.
Quem é mortal?
Sócrates é mortal.
Introdução à Modelagem Conceitual - 03 PROLOG
homem(sócrates).
mortal(X)  homem(X).

?- mortal(Z).
Z = sócrates.
3
Fatos,
Regras e
Consultas
A programação em lógica
baseia-se em estruturas lógicas
denominadas Cláusulas de Horn,
que se apresentam em quatro
formas distintas:
Fatos
Regras
Consultas
Vazia
Introdução à Modelagem Conceitual - 03 PROLOG
a
ab
b

4
Fatos,
Regras e
Consultas
Introdução à Modelagem Conceitual - 03 PROLOG
• Fatos:
São verdades incondicionais:
pai(josé, joão).
pai(joão, júlio).
pai(júlio, jorge).
5
Fatos,
Regras e
Consultas
• 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).
Introdução à Modelagem Conceitual - 03 PROLOG
6
Fatos,
Regras e
Consultas
• 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).
?- avô(X, jorge).
Introdução à Modelagem Conceitual - 03 PROLOG
X=joão
X=joão
7
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.
A Cláusula Prolog
“se”
“e”
“ou”
a :- b1, b2 ... bi ; bj ... bn.
Condição
Cabeça
Corpo
Introdução à Modelagem Conceitual - 03 PROLOG
9
Operadores Prolog
Linguagem
Natural
E
OU
SE
NÃO
Introdução à Modelagem Conceitual - 03 PROLOG
Cálculo de
Predicados

Programas
Prolog
,



;
:not
10
Fatos
Seja a árvore genealógica
mostrada abaixo...
Maria
que pode ser representada pelo
seguinte programa Prolog:
João
José
Júlia
Ana
Íris
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.
Jorge
Introdução à Modelagem Conceitual - 03 PROLOG
11
Consultas
O 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...
Introdução à Modelagem Conceitual - 03 PROLOG
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
12
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.
Introdução à Modelagem Conceitual - 03 PROLOG
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).
13
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.
Introdução à Modelagem Conceitual - 03 PROLOG
Em Prolog:
pai(X,Y) :progenitor(X,Y),
masculino(X).
mãe(X,Y) :progenitor(X,Y),
feminino(X).
14
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 ...
Introdução à Modelagem Conceitual - 03 PROLOG
Em Prolog:
irmão(X,Y) :progenitor(Z,X),
progenitor(Z,Y),
masculino(X).
irmã(X,Y) :- ...
mas, esta regra tem um
problema. (qual?)
15
Exercício
Acrescentar ao programa da árvore
genealógica as seguintes relações
(em 10 minutos):
avô/2
tia/2
prima/2
Introdução à Modelagem Conceitual - 03 PROLOG
16
Representação Textual
Considere o seguinte texto:
nasceu(joão,pelotas).
nasceu(jean,paris).
“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ê.”
fica(paris,frança).
fica(pelotas,rs).
Ao lado a codificação em
Prolog:
?- gaúcho(X).
X=joão;
false
Introdução à Modelagem Conceitual - 03 PROLOG
gaúcho(X):nasceu(X,Y),
fica(Y,rs).
17
Predicados Recursivos
Seja, por exemplo, a relação
antepassado/2:
Uma tentativa de codificar
esta relação em Prolog seria:
antepassado(X,Y) :progenitor(X,Y).
Maria
progenitor
João
progenitor
Júlia
(a)
Íris
progenitor
antepassado(X,Y) :progenitor(X,Z),
progenitor(Z,Y).
... (indefinidamente).
antepassado direto
Jorge
(b)
Claramente, uma má solução.
(Por que?)
antepassado indireto
Introdução à Modelagem Conceitual - 03 PROLOG
18
Predicados Recursivos
Uma representação mais
geral:
João
antepassado(X,Y) :progenitor(X,Y).
progenitor
Íris
antepassado
antepassado
...
Uma codificação recursiva
para antepassado/2:
antepassado(X,Y) :progenitor(X,Z),
antepassado(Z,Y).
... (só!).
Y
Introdução à Modelagem Conceitual - 03 PROLOG
Por que esta solução é
melhor que a anterior?
19
Caminhos em Grafos
Seja o grafo direcionado abaixo:
B
2
1
3
E
2
D
4
A
F
4
5
5
C
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:
Introdução à Modelagem Conceitual - 03 PROLOG
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
20
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.
Introdução à Modelagem Conceitual - 03 PROLOG
21
Programa Prolog
Consulta:
?-pai(joão, X).
Teorema a
ser provado
Sistema
PROLOG
Dedução SLD
É executado a
partir de uma
consulta ou
cláusula
objetivo
( A)
Cada
predicado
denota uma
relação
Programa
PROLOG
Conjunto de
Predicados
Conjunto de
axiomas
Predicados são
conjuntos de
cláusulas com
o mesmo nome
e aridade
Resultado:
Instanciações
das variáveis
da consulta
que permitem
prová-la
verdadeira.
Introdução à Modelagem Conceitual - 03 PROLOG
Um predicado é
verdadeiro se pelo
menos uma das
suas cláusulas é
verdadeira
Problema
do
Mundo Real
O domínio do
problema é
representado
como um
conjunto de
relações
A é verdadeiro
Fatos:
Verdades
incondicionais
Regras:
Verdades
condicionais
A
pai(joão, josé).
A  B, C, D ...
pai(X, Y) :masculino(X),
progenitor(X, Y).
A é verdadeiro
se B, C, D ...
são todos
verdadeiros
Variáveis
começam com
maiúsculas e
constantes com
minúsculas
22
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.
Introdução à Modelagem Conceitual - 03 PROLOG
23
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
Introdução à Modelagem Conceitual - 03 PROLOG
24
Download

Programação em Lógica