Forma normal conjuntiva - Conjunctive normal form

Na lógica booleana , uma fórmula está na forma normal conjuntiva ( CNF ) ou na forma normal oracional se for uma conjunção de uma ou mais cláusulas , onde uma cláusula é uma disjunção de literais ; dito de outra forma, é um produto de somas ou um AND de ORs . Como uma forma normal canônica , é útil na prova automatizada de teoremas e na teoria dos circuitos .

Todas as conjunções de literais e todas as disjunções de literais estão em CNF, pois podem ser vistas como conjunções de cláusulas de um literal e conjunções de uma única cláusula, respectivamente. Como na forma normal disjuntiva (DNF), os únicos conectivos proposicionais que uma fórmula em CNF pode conter são e , ou , e não . O operador not só pode ser usado como parte de um literal, o que significa que só pode preceder uma variável proposicional ou um símbolo predicado .

Na prova automatizada de teoremas, a noção de " forma normal oracional " é freqüentemente usada em um sentido mais restrito, significando uma representação particular de uma fórmula CNF como um conjunto de conjuntos de literais.

Exemplos e não exemplos

Todas as fórmulas a seguir nas variáveis e estão na forma normal conjuntiva:

Para maior clareza, as cláusulas disjuntivas são escritas entre parênteses acima. Na forma normal disjuntiva com orações conjuntivas entre parênteses, o último caso é o mesmo, mas o penúltimo é . As constantes true e false são denotadas pelo conjunto vazio e por uma cláusula que consiste no disjunto vazio, mas normalmente são escritas explicitamente.

As seguintes fórmulas não estão na forma normal conjuntiva:

  • , uma vez que um OR está aninhado em um NOT
  • , uma vez que um AND está aninhado em um OR

Cada fórmula pode ser escrita de forma equivalente como uma fórmula na forma normal conjuntiva. Os três não exemplos em CNF são:

Conversão em CNF

Cada fórmula proposicional pode ser convertida em uma fórmula equivalente que está no CNF. Essa transformação é baseada em regras sobre equivalências lógicas : eliminação da dupla negação , leis de De Morgan e a lei distributiva .

Uma vez que todas as fórmulas proposicionais podem ser convertidas em uma fórmula equivalente na forma normal conjuntiva, as provas são freqüentemente baseadas na suposição de que todas as fórmulas são CNF. No entanto, em alguns casos, essa conversão para CNF pode levar a uma explosão exponencial da fórmula. Por exemplo, traduzir a seguinte fórmula não CNF em CNF produz uma fórmula com cláusulas:

Em particular, a fórmula gerada é:

Esta fórmula contém cláusulas; cada cláusula contém um ou para cada um .

Existem transformações em CNF que evitam um aumento exponencial no tamanho, preservando a satisfatibilidade ao invés da equivalência . Essas transformações têm a garantia de aumentar apenas linearmente o tamanho da fórmula, mas introduzir novas variáveis. Por exemplo, a fórmula acima pode ser transformada em CNF adicionando variáveis ​​da seguinte maneira:

Uma interpretação satisfaz esta fórmula apenas se pelo menos uma das novas variáveis ​​for verdadeira. Se essa variável for , então e também são verdadeiros. Isso significa que todo modelo que satisfaz esta fórmula também satisfaz o original. Por outro lado, apenas alguns dos modelos da fórmula original satisfazem este: uma vez que os não são mencionados na fórmula original, seus valores são irrelevantes para sua satisfação, o que não é o caso na última fórmula. Isso significa que a fórmula original e o resultado da tradução são equivocáveis, mas não equivalentes .

Uma tradução alternativa, a transformação Tseitin , inclui também as cláusulas . Com essas cláusulas, a fórmula implica ; esta fórmula é frequentemente considerada como "definir" um nome para .

Lógica de primeira ordem

Na lógica de primeira ordem, a forma normal conjuntiva pode ser levada adiante para produzir a forma oracional normal de uma fórmula lógica, que pode então ser usada para realizar a resolução de primeira ordem . Na prova automatizada de teoremas baseada em resolução, uma fórmula CNF

, com literais, é comumente representado como um conjunto de conjuntos
.

Veja abaixo um exemplo.

Complexidade computacional

Um importante conjunto de problemas na complexidade computacional envolve encontrar atribuições às variáveis ​​de uma fórmula booleana expressa na forma normal conjuntiva, de forma que a fórmula seja verdadeira. O problema k -SAT é o problema de encontrar uma atribuição satisfatória para uma fórmula booleana expressa em CNF em que cada disjunção contém no máximo k variáveis. 3-SAT é NP-completo (como qualquer outro k problema -SAT com k > 2), enquanto que 2-SAT é conhecido por ter soluções em tempo polinomial . Como consequência, a tarefa de converter uma fórmula em DNF , preservando a satisfatibilidade, é NP-difícil ; duplamente , converter em CNF, preservando a validade , também é NP-difícil; portanto, a conversão que preserva a equivalência em DNF ou CNF é novamente NP-difícil.

Os problemas típicos neste caso envolvem fórmulas em "3CNF": forma normal conjuntiva com não mais do que três variáveis ​​por conjunto. Os exemplos dessas fórmulas encontradas na prática podem ser muito grandes, por exemplo, com 100.000 variáveis ​​e 1.000.000 conjuntos.

Uma fórmula em CNF pode ser convertida em uma fórmula equisatisfatória em " k CNF" (para k ≥3) substituindo cada conjunto com mais de k variáveis por dois conjuntos e com Z uma nova variável, e repetindo quantas vezes for necessário.

Conversão da lógica de primeira ordem

Para converter lógica de primeira ordem em CNF:

  1. Converta para a forma normal de negação .
    1. Elimine implicações e equivalências: substitua repetidamente por ; substitua por . Eventualmente, isso eliminará todas as ocorrências de e .
    2. Mova as NOTs para dentro aplicando repetidamente a Lei de De Morgan . Especificamente, substitua por ; substitua por ; e substitua por ; substitua por ; com . Depois disso, a pode ocorrer apenas imediatamente antes de um símbolo de predicado.
  2. Padronizar variáveis
    1. Para frases como essas que usam o mesmo nome de variável duas vezes, altere o nome de uma das variáveis. Isso evita confusão posteriormente ao descartar quantificadores. Por exemplo, foi renomeado para .
  3. Skolemize a declaração
    1. Mova quantificadores para fora: substitua repetidamente por ; substitua por ; substitua por ; substitua por . Essas substituições preservam a equivalência, pois a etapa anterior de padronização de variáveis ​​garantiu que isso não ocorresse em . Após estas substituições, um quantificador pode ocorrer apenas no prefixo inicial da fórmula, mas não dentro de uma , ou .
    2. Substitua repetidamente por , onde está um novo símbolo de função -ary, uma chamada " função Skolem ". Esta é a única etapa que preserva apenas a satisfatibilidade ao invés da equivalência. Elimina todos os quantificadores existenciais.
  4. Abandone todos os quantificadores universais.
  5. Distribuir ORs para dentro sobre ANDs: substitua repetidamente por .

Como exemplo, a fórmula que diz "Qualquer um que ama todos os animais, por sua vez é amado por alguém" é convertida em CNF (e, posteriormente, na forma de cláusula na última linha) da seguinte forma (destacando os redexes da regra de substituição em ):

por 1,1
por 1,1
por 1,2
por 1,2
por 1,2
por 2
por 3,1
por 3,1
por 3,2
por 4
por 5
( representação de cláusula )

Informalmente, a função Skolem pode ser considerada como submissa à pessoa por quem é amada, enquanto cede o animal (se houver) que não ama. A 3ª última linha abaixo diz " não ama o animal , ou então é amado por " .

A 2ª última linha acima ,, é o CNF.

Notas

  1. ^ Peter B. Andrews, Uma Introdução à Lógica Matemática e Teoria dos Tipos , 2013, ISBN  9401599343 , p. 48
  2. ^ a b Inteligência Artificial: Uma Abordagem Moderna Arquivada 31/08/2017 na máquina de Wayback [1995 ...] Russell e Norvig
  3. ^ Tseitin (1968)
  4. ^ Jackson e Sheridan (2004)
  5. ^ visto que uma maneira de verificar a satisfatibilidade de um CNF é convertê-lo em um DNF , cuja satisfatibilidade pode ser verificada em tempo linear

Veja também

Referências

links externos