A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Elsa Carvalho 262 Universidade da Madeira Departamento de Matemática Programação em Lógica e Funcional (2000/01) (Actualizado em 2004/05) Negação Com os.

Apresentações semelhantes


Apresentação em tema: "Elsa Carvalho 262 Universidade da Madeira Departamento de Matemática Programação em Lógica e Funcional (2000/01) (Actualizado em 2004/05) Negação Com os."— Transcrição da apresentação:

1 Elsa Carvalho 262 Universidade da Madeira Departamento de Matemática Programação em Lógica e Funcional (2000/01) (Actualizado em 2004/05) Negação Com os mecanismos que estudámos até agora não é possível derivar informação negativa de um programa: dada uma fórmula atómica chã p e um programa P, P  {p} admite sempre um modelo (e.g. a base de Herbrand de P) e, portanto,  p não é consequência lógica de P. Qual o interesse de derivar conclusões negativas?

2 Elsa Carvalho 263 Universidade da Madeira Departamento de Matemática Programação em Lógica e Funcional (2000/01) (Actualizado em 2004/05) Negação Considere-se o programa rei(joaoII)  rei(afonsoV)  rei(duarte)  pai(joaoII, afonsoV)  pai(afonsoV, duarte)  Suponhamos que queríamos estabelecer que o rei D. Duarte não é pai do rei D. João II. A fórmula  pai(joaoII, duarte) não é consequência lógica do programa. No entanto, pai(joaoII, duarte) também não é!

3 Elsa Carvalho 264 Universidade da Madeira Departamento de Matemática Programação em Lógica e Funcional (2000/01) (Actualizado em 2004/05) Negação Hipótese (regra) do mundo fechado (closed world assumption) Dado um programa P e uma fórmula atómica chã p, se p não é consequência lógica de P, podemos inferir  p. Trata-se de uma regra particularmente intuitiva no contexto de bases de dados (colecção de factos), ou seja, assume-se que toda a informação que não está explicitamente presente na base de dados é falsa.

4 Elsa Carvalho 265 Universidade da Madeira Departamento de Matemática Programação em Lógica e Funcional (2000/01) (Actualizado em 2004/05) Negação A adequação ou não desta regra tem de ser determinada para cada aplicação. Por exemplo, aplicando a regra podemos inferir tanto  rei(mario) como  rei(joaoI). A HMF assume que o programa possui conhecimento completo sobre o domínio. Trata-se de uma regra não monotónica, ou seja, por adição de novos axiomas (por exemplo rei(joaoI)), deixamos de poder derivar certas conclusões.

5 Elsa Carvalho 266 Universidade da Madeira Departamento de Matemática Programação em Lógica e Funcional (2000/01) (Actualizado em 2004/05) Negação Questão Como aplicar esta regra no caso geral? O problema de determinar se p é consequência de P não é decidível, isto é, não existe algoritmo que tome um p arbitrário como entrada e responda em tempo finito. Se p não for consequência de P, podemos entrar num ciclo infinito. Regra da Falha Finita Dado um programa P e uma fórmula atómica chã p se a árvore SLD para P e  p é finita e só contém derivações falhadas (ramos que terminam com ) então podemos inferir  p.

6 Elsa Carvalho 267 Universidade da Madeira Departamento de Matemática Programação em Lógica e Funcional (2000/01) (Actualizado em 2004/05) Negação Um objectivo normal é uma colecção de literais (fórmulas atómicas ou negação de fórmulas atómicas). Se p é uma fórmula atómica chã, a chamada a (  p) falha se a chamada a p é bem sucedida, e é bem sucedida se a chamada a p falha em tempo finito. Vamos mostrar a árvore de execução do objectivo normal  rei(X),  pai(afonsoV, X) sobre o programa anterior

7 Elsa Carvalho 268 Universidade da Madeira Departamento de Matemática Programação em Lógica e Funcional (2000/01) (Actualizado em 2004/05) Exemplo  rei(X),  pai(afonsoV, X)   pai(afonsoV, joaoII)  pai(afonsoV, joaoII)   pai(afonsoV, afonsoV)  pai(afonsoV, joaoII) X/joaoII X/afonsoV   pai(afonsoV, duarte)  pai(afonsoV, duarte)

8 Elsa Carvalho 269 Universidade da Madeira Departamento de Matemática Programação em Lógica e Funcional (2000/01) (Actualizado em 2004/05) Negação Uma cláusula normal é um par p  q 1,..., q n onde q 1,..., q n são literais (fórmulas atómicas ou negações de fórmulas atómicas). Um programa normal é um conjunto de cláusulas normais. diferentes(X, Y)  membro(Z, X),  membro(Z, Y) diferentes(X, Y)  membro(Z, Y),  membro(Z, X) Uma regra de computação diz-se segura quando nunca selecciona um literal negativo que não seja chão.

9 Elsa Carvalho 270 Universidade da Madeira Departamento de Matemática Programação em Lógica e Funcional (2000/01) (Actualizado em 2004/05) Resolução SLDNF Define-se do seguinte modo a árvore (SLD)NF para um programa P e um objectivo G normais via uma regra de computação segura S: a raiz é G seja  q 1,..., q k,..., q n um nó e suponha-se que é q k é seleccionado por S. se q k é um literal positivo, então o nó tem um descendente para cada um dos objectivos deriváveis (possivelmente nenhum) se q k é um literal negativo chão  p k e existe uma árvore SLDNF finita falhada (sem ramos bem sucedidos) para P e  p k, então o único descendente é  q 1,..., q k-1, q k+1,..., q n se q k é um literal negativo chão  p k e existe uma refutação SLDNF para P e  p k, então o nó não tem descendentes o nó vazio não tem descendentes

10 Elsa Carvalho 271 Universidade da Madeira Departamento de Matemática Programação em Lógica e Funcional (2000/01) (Actualizado em 2004/05) Resolução SLDNF A resolução SLDNF é a extensão da resolução SLD com a regra da falha finita (SLD + Negation by Failure) Definem-se ainda por generalização os conceitos de derivação- SLDNF, refutação-SDLNF e resposta derivada por uma refutação-SLDNF. Ramos que terminam por se ter atingido um nó que contém apenas literais negativos dos quais nenhum é chão não correspondem a derivações (a regra de computação não é aplicável), correspondem a computações atoladas.

11 Elsa Carvalho 272 Universidade da Madeira Departamento de Matemática Programação em Lógica e Funcional (2000/01) (Actualizado em 2004/05) Exemplo Qual a importância de restringir a selecção de literais negativos aos que são chãos? Suponhamos que enriquecíamos o programa da dinastia com: pai_de_todos(X)   pai_normal(X) pai_normal(X)   pai(Y,X) (está-se a ler o predicado pai como X é pai de Y) Qual será o comportamento do programa face ao objectivo  pai_de_todos(afonsoV) se a restrição de segurança for levantada?

12 Elsa Carvalho 273 Universidade da Madeira Departamento de Matemática Programação em Lógica e Funcional (2000/01) (Actualizado em 2004/05) Exemplo (cont.)  pai_de_todos(afonsoV)   pai_normal(afonsoV)  pai_normal(afonsoV)   pai(Y, afonsoV)  pai(Y, afonsoV)

13 Elsa Carvalho 274 Universidade da Madeira Departamento de Matemática Programação em Lógica e Funcional (2000/01) (Actualizado em 2004/05) Resolução SLDNF A resposta obtida é manifestamente incorrecta: existe alguém de quem afonsoV não é pai, i.e., existe um Y tal que pai(Y, afonsoV) falha, nomeadamente Y = duarte, o que faz de afonsoV um pai_ normal e não pai_de_todos ! De facto a leitura intuitiva da chamada  pai(Y,afonsoV) é, à semelhança da leitura para literais positivos, “encontrar um Y tal que  pai(Y,afonsoV)”. Assim, a cláusula pai_normal(X)   pai(Y,X) corresponde à fórmula pai_normal(X)  (  Y)  pai(Y,X)

14 Elsa Carvalho 275 Universidade da Madeira Departamento de Matemática Programação em Lógica e Funcional (2000/01) (Actualizado em 2004/05) Resolução SLDNF Ora, a semântica procedimental é totalmente diferente. Esta chamada falha porque a chamada pai(Y, afonsoV) é bem sucedida. Quer dizer, a cláusula pai_normal(X)   pai(Y,X) está a ser interpretada como correspondendo a pai_normal(X)   (  Y)pai(Y,X) Logo, as chamadas negativas não chãs não são coerentes com a semântica declarativa, e podem gerar respostas incorrectas.

15 Elsa Carvalho 276 Universidade da Madeira Departamento de Matemática Programação em Lógica e Funcional (2000/01) (Actualizado em 2004/05) Resolução SLDNF Como implementar regras de computação seguras? A maneira mais simples de implementar a condição de segurança num sistema Prolog é adiar as chamadas negativas até que se encontrem instanciadas em termos chãos, e interromper a execução quando só for possível seleccionar literais negativos não chãos. Mas isto é caro pois implica aceder à estrutura das chamadas. A maioria dos sistemas não se dá a esse trabalho o que implica programas potencialmente incorrectos e nos quais tem que ser o programador a garantir que as chamadas negativas só são activadas quando chãs.

16 Elsa Carvalho 277 Universidade da Madeira Departamento de Matemática Programação em Lógica e Funcional (2000/01) (Actualizado em 2004/05) Resolução SLDNF É possível estabelecer condições sobre P e G de modo a garantir que nenhuma computação ficará atolada. Uma cláusula de programa C diz-se admissível se toda a variável que ocorre em C ocorre ou na cabeça ou num literal positivo do corpo de C. Por exemplo, a seguinte cláusula é admissível: diferentes(X, Y)  membro(Z, X),  membro(Z, Y) Uma cláusula de programa C diz-se permitida se toda a variável que ocorre em C ocorre em pelo menos um literal positivo do corpo de C. Por exemplo a cláusula anterior não é permitida.

17 Elsa Carvalho 278 Universidade da Madeira Departamento de Matemática Programação em Lógica e Funcional (2000/01) (Actualizado em 2004/05) Resolução SLDNF Um objectivo G diz-se permitido se toda a variável que ocorre em G ocorre em pelo menos um literal positivo de G. Dizemos que um programa P é permitido para um objectivo G sse toda a cláusula de P é admissível todas as cláusulas que fazem parte dos procedimentos que definem símbolos de predicado que ocorrem em literais positivos de G são permitidas todas as cláusulas que fazem parte dos procedimentos que definem símbolos de predicado que ocorrem em literais positivos no corpo de cláusulas de P são permitidas

18 Elsa Carvalho 279 Universidade da Madeira Departamento de Matemática Programação em Lógica e Funcional (2000/01) (Actualizado em 2004/05) Resolução SLDNF Se G é um objectivo permitido e P é um programa permitido para G, nenhuma computação para P e G fica atolada. O enriquecimento do programa dinastia com: pai_de_todos(X)   pai_normal(X) pai_normal(X)   pai(Y,X) não é permitido para o objectivo  pai_de_todos(afonsoV).

19 Elsa Carvalho 280 Universidade da Madeira Departamento de Matemática Programação em Lógica e Funcional (2000/01) (Actualizado em 2004/05) Resolução SLDNF Substituindo estas cláusulas por: pai_de_todos(X)  rei(X),  pai_normal(X) pai_normal(X)  rei(Y),  pai(Y,X) o programa fica permitido para o mesmo objectivo pois apesar de pai_normal(X)  rei(Y),  pai(Y,X) não ser permitida, o símbolo de predicado pai_normal não ocorre em literais positivos quer do objectivo quer do corpo das cláusulas. Logo, as cláusulas que o definem não precisam de ser permitidas, basta que sejam admissíveis.

20 Elsa Carvalho 281 Universidade da Madeira Departamento de Matemática Programação em Lógica e Funcional (2000/01) (Actualizado em 2004/05) Resolução SLDNF Note-se que a adição das chamadas a rei requer que se prove que as cláusulas que definem rei são permitidas! Neste caso, o comportamento procedimental é correcto face à leitura declarativa das cláusulas: pai_normal(X)  (  Y)(rei(Y)   pai(Y,X))


Carregar ppt "Elsa Carvalho 262 Universidade da Madeira Departamento de Matemática Programação em Lógica e Funcional (2000/01) (Actualizado em 2004/05) Negação Com os."

Apresentações semelhantes


Anúncios Google