13 - Universidade da Madeira

Propaganda
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?
Universidade da Madeira
Departamento de Matemática
Elsa Carvalho
262
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 é!
Universidade da Madeira
Departamento de Matemática
Elsa Carvalho
263
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.
Universidade da Madeira
Departamento de Matemática
Elsa Carvalho
264
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.
Universidade da Madeira
Departamento de Matemática
Elsa Carvalho
265
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.
Universidade da Madeira
Departamento de Matemática
Elsa Carvalho
266
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
Universidade da Madeira
Departamento de Matemática
Elsa Carvalho
267
Programação em Lógica e Funcional (2000/01)
(Actualizado em 2004/05)
Exemplo
rei(X), pai(afonsoV, X)
 pai(afonsoV, joaoII)
 pai(afonsoV, duarte)
 pai(afonsoV, joaoII)
 pai(afonsoV, duarte)
X/joaoII
 pai(afonsoV, afonsoV)
 pai(afonsoV, joaoII)
X/afonsoV
Universidade da Madeira
Departamento de Matemática
Elsa Carvalho
268
Programação em Lógica e Funcional (2000/01)
(Actualizado em 2004/05)
Negação
Uma cláusula normal é um par
p  q1, ..., qn
onde q1, ..., qn 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.
Universidade da Madeira
Departamento de Matemática
Elsa Carvalho
269
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  q1, ..., qk, ..., qn um nó e suponha-se que é qk é seleccionado
por S.
se qk é um literal positivo, então o nó tem um descendente para
cada um dos objectivos deriváveis (possivelmente nenhum)
se qk é um literal negativo chão pk e existe uma árvore SLDNF
finita falhada (sem ramos bem sucedidos) para P e  pk, então o
único descendente é  q1, ..., qk-1, qk+1,..., qn
se qk é um literal negativo chão pk e existe uma refutação
SLDNF para P e  pk, então o nó não tem descendentes
o nó vazio não tem descendentes
Universidade da Madeira
Departamento de Matemática
Elsa Carvalho
270
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çãoSLDNF, 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.
Universidade da Madeira
Departamento de Matemática
Elsa Carvalho
271
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?
Universidade da Madeira
Departamento de Matemática
Elsa Carvalho
272
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)
Universidade da Madeira
Departamento de Matemática
Elsa Carvalho
273
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)
Universidade da Madeira
Departamento de Matemática
Elsa Carvalho
274
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.
Universidade da Madeira
Departamento de Matemática
Elsa Carvalho
275
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.
Universidade da Madeira
Departamento de Matemática
Elsa Carvalho
276
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.
Universidade da Madeira
Departamento de Matemática
Elsa Carvalho
277
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
Universidade da Madeira
Departamento de Matemática
Elsa Carvalho
278
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).
Universidade da Madeira
Departamento de Matemática
Elsa Carvalho
279
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.
Universidade da Madeira
Departamento de Matemática
Elsa Carvalho
280
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))
Universidade da Madeira
Departamento de Matemática
Elsa Carvalho
281
Programação em Lógica e Funcional (2000/01)
(Actualizado em 2004/05)
Download