Carregar apresentação
A apresentação está carregando. Por favor, espere
PublicouEdison Amaro de Sá Alterado mais de 9 anos atrás
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))
Apresentações semelhantes
© 2024 SlidePlayer.com.br Inc.
All rights reserved.