Forma normal clausal

Fonte: testwiki
Revisão em 01h22min de 12 de novembro de 2019 por imported>Edu!
(dif) ← Revisão anterior | Revisão atual (dif) | Revisão seguinte → (dif)
Saltar para a navegação Saltar para a pesquisa

A forma normal clausal é usada em programação lógica e em muitos sistemas provadores de teoremas. O procedimento de conversão de uma fórmula para a forma clausal pode destruir a estrutura da fórmula e, além disso, traduções feitas de forma descuidada freqüentemente causam o crescimento exponencial no tamanho da fórmula resultante.

O procedimento começa com uma fórmula qualquer da lógica clássica de primeira ordem:

  1. Coloque a fórmula na forma normal prenex.
  2. Realize o fecho universal da fórmula.
  3. Skolemize - substitua as variáveis existenciais por constantes de Skolem ou funções de Skolem de variáveis universais, de fora para dentro. Faça as seguintes substituições:
    • x.P(x) torna-se P(c), onde c é novo.
    • x....y.P(y) torna-se x....P(fc(x)), onde fc é nova.
  4. Remova os quantificadores universais.
  5. Coloque a fórmula na forma normal conjuntiva.
  6. Coloque a sentença resultante na forma de um conjunto de cláusulas, substituindo C1...Cn por {C1,...,Cn}.

Freqüentemente, é suficiente gerar uma FNC eqüi-satisfatível (não uma equivalente) para uma fórmula. Nesse caso, o pior caso de crescimento exponencial pode ser evitado introduzindo definições e usando-as para renomear partes da fórmula.

Exemplos

Exemplo 1: x(z(¬P(x,z)yP(y,x))

Passo 1) A fórmula já está na forma normal prenex.

Passo 2) Skolemizar a fórmula:

xzy(¬P(x,z)P(y,x))

Substituindo z por f(x) e y por g(x):

x(¬P(x,f(x))P(g(x),x))

Passo 3) Remover o quantificador universal x:

¬P(x,f(x))P(g(x),x)

Passo 4) A fórmula já está na forma norma conjuntiva.

Passo 5) Olhando para isto como um conjunto de cláusulas:

{¬P(x,f(x))P(g(x),x)}

Exemplo 2: x(¬y(P(x,y)z¬R(y,z))y¬P(x,y))

Passo 1) Colocar a fórmula na forma normal da negação:

x(¬y(P(x,y)z¬R(y,z))y¬P(x,y))
x(y¬(P(x,y)z¬R(y,z))y¬P(x,y))
x(y(¬P(x,y)¬z¬R(y,z))y¬P(x,y))
x(y(¬P(x,y)zR(y,z))y¬P(x,y))

Passo 2) Skolemizar a fórmula:

xy1zy2((¬P(x,y1)R(y1,z))¬P(x,y2))

Substituindo y1 por f(x) e z por g(x):

xy2((¬P(x,f(x))R(f(x),g(x))¬P(x,y2))

Passo 3) Remover os quantificadores universais x e y2:

((¬P(x,f(x))R(f(x),g(x))¬P(x,y2))

Passo 4) A fórmula já está na forma normal conjuntiva.

Passo 5) Dispor na forma de um conjunto de cláusulas:

{¬P(x,f(x))R(f(x),g(x)),¬P(x,y2)}

Referências

Ver também

Predefinição:Wikilivros

Predefinição:Portal3