27
Lógica de Predicados Implementação de Resolução

Lógica de Predicados

  • Upload
    helki

  • View
    26

  • Download
    0

Embed Size (px)

DESCRIPTION

Lógica de Predicados. Implementação de Resolução. Em Lógica de 1ª. Ordem. Resolução não é uma simples extensão da Resolução da Lógica Proposicional O processo é mais longo e cuidadoso: Transformar a(s) fórmula(s) para a forma normal Prenex Skolemizá-la(s) Transformá-las para CNF - PowerPoint PPT Presentation

Citation preview

Page 1: Lógica de Predicados

Lógica de Predicados

Implementação de Resolução

Page 2: Lógica de Predicados

Em Lógica de 1ª. Ordem Resolução não é uma simples extensão

da Resolução da Lógica Proposicional O processo é mais longo e cuidadoso:

Transformar a(s) fórmula(s) para a forma normal Prenex

Skolemizá-la(s) Transformá-las para CNF Transformá-las para a forma clausal Unificá-las durante a resolução

Por outro lado, ao usar a unificação, a resolução torna-se bem mais rápida do que os métodos de Gilmore e Davis-Putnam!

Page 3: Lógica de Predicados

Resolução eficiente Idealmente todas as expansões

possíveis devem ser efetuadas Mas isso é caro computacionalmente!

Então organizemos os passos destas expansões num algoritmo e escolhamos melhor as expansões Devemos evitar gerar o que já existe, para

torná-lo eficiente Tentar ir o mais rápido possível para {}

Page 4: Lógica de Predicados

Exemplo {[P],[P,Q],[Q, R],[R]} 1. [P]2. [P,Q]3. [Q, R]4. [R]5. [Q] 1,26. [P, R] 2,37. [Q] 3,48. [R] 3,59. [R] 1,610. [P] 4,611. [P] 2,712. {} 5,7

{[P],[P,Q],[Q, R],[R]}

1. [P]2. [P,Q]3. [Q, R]4. [R]5. [Q] 1,26. [Q] 3,47. {} 5,6

Page 5: Lógica de Predicados

Rastro da resolução

[P] [P,Q] [Q, R] [R]

[Q] [P, R] [Q]

[R] [R] {} [P] [P]

Page 6: Lógica de Predicados

Usos da resolução - decisões Exemplo genitor(X,Y) :- pai(X,Y). pai(adam,bill). pai(bill,carl). Para provar que adam é genitor de bill {[genitor(X,Y),pai(X,Y)],[pai(adam,bill)],

[pai(bill,carl)], [genitor(adam,bill)]}

Page 7: Lógica de Predicados

Usos da resolução - decisões

1. [genitor(X,Y),pai(X,Y)]2. [pai(adam,bill)]3. [pai(bill,carl)]4. [genitor(adam,bill)]5. [genitor(adam,bill)] 1,26. [genitor(bill,carl)] 1,37. [pai(adam,bill)] 1,48. {} 4,59. {} 2,7

Page 8: Lógica de Predicados

Usos da resolução - perguntas

Ou Consultas Quem é o genitor de Bill?? genitor(X,bill). X??? Incluir a seguinte cláusula na Base

[genitor(X,bill), Resp(X)] Por quê???

Page 9: Lógica de Predicados

Usos da resolução - consultas1. [genitor(X,Y),pai(X,Y)]2. [pai(adam,bill)]3. [pai(bill,carl)]4. [genitor(X,bill),Resp(X)]5. [genitor(adam,bill)] 1,26. [genitor(bill,carl)] 1,37. [pai(X,bill),Resp(X)] 1,48. [Resp(adam)] 4,59. [Resp(adam)] 2,7

Pára quando achamos a(s) resposta(s)!

Page 10: Lógica de Predicados

Sobre consultas

Pode resultar em mais de uma resposta

Se eu disser que mae(anne,bill) e pai (adam,bill) E perguntar “quem é genitor de bill?”

Page 11: Lógica de Predicados

Usos da resolução - decisões1. [genitor(X,Y),pai(X,Y)]2. [genitor(X,Y),mae(X,Y)]3. [pai(adam,bill)]4. [mae(anne,bill)]5. [genitor(X,bill),Resp(X)]6. [genitor(adam,bill)] 1,37. [genitor(anne,bill)] 2,48. [pai(X,bill),Resp(X)] 1,59. [mae(X,bill),Resp(X)] 2,510. [Resp(adam)] 3,811. [Resp(anne)] 4,9

Page 12: Lógica de Predicados

Consultas – informação incompleta Se eu disser que adam ou tom é pai

de bill e perguntar quem é pai de bill, o que acontecerá???

A resposta é adam ou tom:

1. [pai(adam,bill), pai(tom,bill)]2. [pai(X,bill),Resp(X)]3. [pai(tom,bill),Resp(adam)] 1,24. [Resp(adam),Resp(tom)] 2,3

Page 13: Lógica de Predicados

Resolução eficiente na prática Escolher bem os resolventes a cada

passo (refinamentos) Diminuir o espaço de busca

(simplificação)

Todas as estratégias para melhorar o desempenho da resolução passam por atacar estes problemas

Page 14: Lógica de Predicados

Estratégias de refinamento

Resolução Linear Construir uma linha, ao invés de uma

árvore de expansões Usar sempre a cláusula gerada por

último

Se pensarmos neste problema como uma busca para um caminho que contém a solução, que tipo de busca é essa??

Page 15: Lógica de Predicados

Solução para “Cap. West”

Page 16: Lógica de Predicados

Solução por resolução linear

Page 17: Lógica de Predicados

Estratégias de refinamento

Estratégia Unitária Privilegiar cláusulas com um só literal Como pegamos cláusulas pequenas, há

garantia de chegarmos rápido a {} Porém, não é completa para qualquer

conjunto de cláusulas Mas é completa para cláusulas de Horn

A1 ^...An A

Page 18: Lógica de Predicados

Estratégias de Simplificação

Eliminação de literais puros Um literal é puro se não existe no conjunto

de prova a sua negação Ex: {[P],[Q],[P,L],[L,Q],[P,Q,R], ,[R]}

L é puro, pois nunca será eliminado por resolução

Então é melhor retirar as cláusulas que o contém do processo de busca da {}

Se é para chegar a {}, podemos partir de {[P],[Q],[P,Q,R], ,[R]}

Page 19: Lógica de Predicados

Estratégias de Simplificação

Descarte por englobamento (ou subsunção) Uma cláusula C1 engloba outra C2 sse existir

uma substituição O, tal que C1O C2 Se descartamos C2, não estamos perdendo a

insatisfatibilidade do conjunto, apenas apressando a chegada de {}

Ex1: P(x) P(y) v Q(z) Ex2: A v B v C, A v C, B v C

Resolvendo as 2 últimas, temos AvB, que engloba a 1ª.

Então o conjunto resultante seria A v B, A v C, B v C

Ajuda a resolução unitária

Page 20: Lógica de Predicados

E este exemplo por linear?

{[P,Q],[P,Q],[P,Q],[P,Q]} Claramente insatisfatível!!

Porém IMPOSSÍVEL por linear (e tb por unitária) !!

Qual a vantagem das cláusulas de Horn para casos como este??

Page 21: Lógica de Predicados

Resolução e Cláusulas de Horn É que sempre que aparece um

negado (o conseqüente), se ele existir em outra cláusula, ele não estará negado!

A1 ^...An A é {[A1],...[An],[A]} Então se existir prova, será fácil

encontrá-la Correto e completo e barato, se

existir prova

Page 22: Lógica de Predicados

Exemplo em Prologavo(X,Y) :- genitor(X,Z), genitor(Z,Y).

^genitor(X,Y) :- pai(X,Y).genitor(X,Y) :- mae(X,Y).

pai(adam,bill).pai(bill,carl).mae(anne,bill).

Quem é avó(ô) nessa história????

Page 23: Lógica de Predicados

?- true.Y=carl

?- gen(bill,Y).

X=adam

Árvore SLD?- avo(X,Y).

?- pai(bill,Y).?- m(bill,Y).

?- fail.

?- gen(X,Z),gen(Z,Y).

?- pai(X,Z),gen(Z,Y).

?- gen(carl,Y).

?- pai(carl,Y).?- m(carl,Y).

?- fail. ?- fail.

?- mae(X,Z),gen(Z,Y).

?- pai(bill,Y).?- mae(bill,Y).

?- true.Y=carl

?- fail.

?- pai(bill,Y).

X=anne

Page 24: Lógica de Predicados

Conclusões

Page 25: Lógica de Predicados

Paradigma de programação A ”função” membro, implementada como

relação: member(X,[X|Xs]). member(X,[Y|Ys]) :- member(X,Ys).

Vão-se gerando sentenças novas que precisam ser provadas até que uma é provada!

Pode entrar em loop, por falta do occur-check

Page 26: Lógica de Predicados

Negação por falha em Prolog Prolog tem várias extensões (ex:LIFE,

CHR,...), com diferentes melhorias Prolog tem comandos built-in para

controlar a busca na árvore Ex: evitar insistir em determinados ramos

Operador de negação por falha em premissas: not p(X) verificado sse p(X) falha Isso é MUITO DIFERENTE de p(X) SER

FALSO, mas quebra o galho muitas vezes

Page 27: Lógica de Predicados

Implementando resolução Prover boas estruturas de dados

Indexação e hashtables Boas ligações de pesquisa com BDs

BDs inteligentes ou dedutivos Estamos sempre recuperando literais para

tentar prová-los Bons algoritmos de unificação O problema reduz a busca em árvore

Obj: Reduzir o backtracking Ex: Residente(p,Itu)^Ocupacao(p,Presidente)