lógica de predicados

Post on 05-Jan-2016

26 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

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

TRANSCRIPT

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 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!

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 {}

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

Rastro da resolução

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

[Q] [P, R] [Q]

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

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)]}

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

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ê???

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)!

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?”

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

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

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

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??

Solução para “Cap. West”

Solução por resolução linear

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

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]}

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

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??

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

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????

?- 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

Conclusões

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

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

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)

top related