Resolução e PROLOG - DAINF

Propaganda
Lógica para Computação
Prof. Celso Antônio Alves Kaestner, Dr. Eng.
celsokaestner (at) utfpr (dot) edu (dot) br
Lógica para Computação (IF61B)
Resolução e PROLOG
Passos para obter a forma clausal de uma fbf:
1.
Obter a forma normal prenex da fbf:
(Forma normal prenex: Q1x1Q2x2...Qnxn (A) , onde
Q1x1Q2x2...Qnxn é o prefixo e (A) é a matriz da fbf);
A.
Eliminar os conectivos  e →;
B.
Colocar as negações () ao lado dos átomos;
C.
Distinguir as variáveis, se necessário;
D.
Deslocar os quantificadores para o início da fbf.
2
Prof. Celso A A Kaestner
29/07/2014
Lógica para Computação (IF61B)
Resolução e PROLOG
Eliminar os quantificadores existenciais
(skolemização):
2.
A.
x((x)) é substituído por então ([x:=f(y1,y2...ym)]) onde
f é a função de Skolem e y1,y2...ym são as variáveis
quantificadas universalmente () que antecedem x;
B.
Se não houverem tais variáveis x((x)) é substituído por
(a), onde a é a constante de Skolem.
3.
Eliminar o prefixo da fbf (todos os quantificadores
universais);
4.
Passar a forma normal conjuntiva, reordenando os
conectivos  e  de forma conveniente.
3
Prof. Celso A A Kaestner
29/07/2014
Lógica para Computação (IF61B)
Resolução e PROLOG
Relação entre um conjunto de fbf e a forma
clausal correspondente:
Se F = {A1, A2,...,Ap} é um conjunto de fbf e se
C = {C1, C2,...,Cm} é a forma clausal
correspondente, então
F é inconsistente se e só se C é inconsistente.
4
Prof. Celso A A Kaestner
29/07/2014
Lógica para Computação (IF61B)
Resolução e PROLOG
O princípio da resolução:
1.
Para fórmulas concretas (sem variáveis)
Dadas as cláusulas A1  A2 ... Ap  C e
B1  B2 ... Bm  C então pode-se deduzir a
cláusula resolvente A1  A2 ...Ap B1  B2 ...
Bm
(este caso é similar ao da lógica proposicional).
5
Prof. Celso A A Kaestner
29/07/2014
Lógica para Computação (IF61B)
Resolução e PROLOG
O princípio da resolução:
2.
Para fórmulas em geral:
Dadas as cláusulas A1  A2 ... Ap  C e
B1  B2 ... Bm  D tais que C e D são
unificáveis pela substituição mgu [s] (isto é, se C[s]
= D[s]) então pode-se deduzir a cláusula
resolvente
(A1  A2 ...Ap)[s]  (B1  B2 ... Bm)[s].
6
Prof. Celso A A Kaestner
29/07/2014
Lógica para Computação (IF61B)
Resolução e PROLOG
Propriedades do princípio da resolução:
1.
É uma regra de inferência correta, isto é, a
cláusula resolvente é conseqüência lógica das
cláusulas iniciais;
2.
É completo por refutação, isto é, se C é um
conjunto inicial de cláusulas, e se C1,C2,...Cn é
uma seqüência de cláusulas distintas tais que Cn é
a cláusula vazia e se para i de 1 até n-1 a cláusula
Ci pertence a C ou é resolvente de cláusulas
anteriores na seqüência, então o conjunto inicial C
é inconsistente.
7
Prof. Celso A A Kaestner
29/07/2014
Lógica para Computação (IF61B)
Resolução e PROLOG
Sistemas de refutação por resolução:
Para provar a dedução A1,A2...,An |- B procede-se da
seguinte forma:
1.
Monta-se o conjunto {A1,A2...,An , B};
2.
Obtém-se sua forma clausal C;
3.
Se C é inconsistente, a dedução é válida.
8
Prof. Celso A A Kaestner
29/07/2014
Lógica para Computação (IF61B)
A linguagem PROLOG
Prolog é uma linguagem de programação que se
enquadra no paradigma de Programação em Lógica
Matemática. É uma linguagem de uso geral que é
especialmente associada com a Inteligência
Artificial e com a Linguística Computacional.
Consiste numa linguagem puramente lógica, que
pode ser chamada de Prolog puro, e numa
linguagem concreta, a qual acrescenta o Prolog
puro com componentes extra-lógicos.
9
Prof. Celso A A Kaestner
29/07/2014
Lógica para Computação (IF61B)
A linguagem PROLOG

Wikipedia: http://pt.wikipedia.org/wiki/Prolog

Programming in Prolog – William F. Clocksin &
Christopher S. Mellish, Springer Verlag, ISBN: 978-3540-15011-4 (Print) 978-3-642-96873-0 (Online)

Programação em Lógica e a Linguagem Prolog Marco A. Casanova, Fernando A.C. Giorno, Antonio L.
Furtado, http://www.inf.pucrio.br/~casanova/Publications/Books/1987-PL.pdf

Resumo de Sheila McIlraith em
http://www.cs.toronto.edu/~sheila/324/w07/slides
/csc324w07-prolog1-21_4up.pdf
10
Prof. Celso A A Kaestner
29/07/2014
Lógica para Computação (IF61B)
A linguagem PROLOG

Obtendo o Prolog: http://www.swi-prolog.org/

Tutoriais no mesmo site;

Prolog NÃO é procedural nem funcional;

Separa lógica e controle:

O programador declara quais fatos e relações são
verdadeiros;

O sistema determina como usar estes fatos para resolver
problemas – ou provar consultas;

O sistema também instancia variáveis para resolver os
problemas.
11
Prof. Celso A A Kaestner
29/07/2014
Lógica para Computação (IF61B)
A linguagem PROLOG

O “programa” – ou base de dados- é constituído de
fatos e regras:

Fatos: basicamente predicados definidos sobre
constantes; exemplos: gato(tom). rato(jerry).

Regras: cláusulas de Horn (um único literal positivo),
na forma h:-t1,t2...,tn indicando a inferência
(t1^t2...^tn -> h), onde os ti e h são fórmulas
atômicas; exemplos: não_gosta(X,Y):-gato(X),rato(Y).

“:-” corresponde a uma implicação no sentido inverso,
e “,” corresponde a uma conjunção.
12
Prof. Celso A A Kaestner
29/07/2014
Lógica para Computação (IF61B)
A linguagem PROLOG

Após se carregar - ou consultar – uma base de dados
o interpretador Prolog está apto a “responder
consultas”, indicando se um fato é o não
consequência lógica dos elementos indicados no
programa;

O interpretador utiliza prova por unificação,
resolução, refutação e backtracking;

A negação é tratado apenas por falha finita, o que é
um limitante da linguagem.
13
Prof. Celso A A Kaestner
29/07/2014
Lógica para Computação (IF61B)
A linguagem PROLOG
male(albert).
? male(albert).
female(alice).
Yes
male(edward).
? female(Person).
female(victoria).
Person=alice ;
parent(albert,edward).
Person=victoria;
parent(victoria,edward).
No
parent(albert,alice).
? parent(Person,edward).
parent(victoria,alice).
Person=albert;
Person=victoria;
No
14
Prof. Celso A A Kaestner
29/07/2014
Lógica para Computação (IF61B)
A linguagem PROLOG
? parent(Person,edward),female(Person).
Person=victoria;
No
Acrescentando-se: sibling(X,Y):-parent(Z,X),parent(Z,Y).
? sibling(albert,victoria).
No
? sibling(edward,S).
S=edward;
S=alice;
S=edward,
S=alice;
... No
15
Prof. Celso A A Kaestner
29/07/2014
Lógica para Computação (IF61B)
A linguagem PROLOG
... To be continued !
16
Prof. Celso A A Kaestner
29/07/2014
Download