introdução à modelagem conceitual 3. prolog luiz a m palazzo abril, 2011 universidade católica...
Post on 17-Apr-2015
108 Views
Preview:
TRANSCRIPT
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
Introdução à Modelagem Conceitual - 03 PROLOG 2
O que é PROLOG ?
PROgrammation en LOGique
Alain Colmerauer Univ. Aix-Marseille, 1972
Robert Kowalski Univ. Edimburgo, 1974
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.
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
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).
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).
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
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.
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
Operadores Prolog
Linguagem Natural
Cálculo de Predicados
ProgramasProlog
E ,OU ;SE :-
NÃO not
Introdução à Modelagem Conceitual - 03 PROLOG 10
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.
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
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).
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).
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?)
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
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
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
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
...
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
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.
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
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.
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
top related