Forma normal conjuntiva

ImprimirCitar

En lógica booleana, una fórmula está en forma normal conjuntiva (CNF) o forma normal de cláusula si es una conjunción de uno o más cláusulas, donde una cláusula es una disyunción de literales; dicho de otro modo, es un producto de sumas o un AND de ORs. Como forma normal canónica, es útil en la demostración automatizada de teoremas y la teoría de circuitos.

Todas las conjunciones de literales y todas las disyunciones de literales están en CNF, ya que pueden verse como conjunciones de cláusulas de un literal y conjunciones de una sola cláusula, respectivamente. Como en la forma normal disyuntiva (DNF), los únicos conectores proposicionales que puede contener una fórmula en CNF son and, or y not. El operador not solo se puede usar como parte de un literal, lo que significa que solo puede preceder a una variable proposicional o un símbolo de predicado.

En la demostración automática de teoremas, la noción "forma normal de cláusula" a menudo se usa en un sentido más estricto, lo que significa una representación particular de una fórmula CNF como un conjunto de conjuntos de literales.

Ejemplos y no ejemplos

Todas las siguientes fórmulas en las variables , y están en forma normal conjuntiva:

Para la claridad, las cláusulas disyuntivas están escritas dentro de paréntesis arriba. En forma disyuntiva normal con cláusulas conjuntivas paréntesis, el último caso es el mismo, pero el siguiente al último es . Las constantes verdadero y falso son denotados por el conjunto vacío y una cláusula que consiste en el disyunto vacío, pero normalmente están escritos explícitamente.

Las siguientes fórmulas no están en forma normal conjuntiva:

  • , ya que un OR está anidado dentro de un NO
  • , ya que un Y está anidado dentro de un OR

Cada fórmula se puede escribir de manera equivalente como una fórmula en forma normal conjuntiva. Los tres no-ejemplos en CNF son:

Conversión a CNF

Cada fórmula proposicional se puede convertir en una fórmula equivalente que está en CNF. Esta transformación se basa en reglas sobre equivalencias lógicas: eliminación de doble negación, leyes de De Morgan y la ley distributiva.

Dado que todas las fórmulas proposiciones pueden convertirse en una fórmula equivalente en forma conjuntiva normal, las pruebas se basan a menudo en la suposición de que todas las fórmulas son CNF. Sin embargo, en algunos casos esta conversión al CNF puede llevar a una explosión exponencial de la fórmula. Por ejemplo, la traducción de la siguiente fórmula no-FNC en el FNC produce una fórmula con cláusulas:

En particular, la fórmula generada es:

Esta fórmula contiene cláusulas; cada cláusula contiene cualquiera o para cada uno .

Existen transformaciones en la CNF que evitan un aumento exponencial del tamaño preservando la satisfiabilidad en lugar de la equivalencia. Estas transformaciones están garantizadas sólo para aumentar linealmente el tamaño de la fórmula, pero introducir nuevas variables. Por ejemplo, la fórmula anterior puede transformarse en CNF añadiendo variables como sigue:

Una interpretación satisface esta fórmula sólo si al menos una de las nuevas variables es verdadera. Si esta variable es , entonces ambos y son verdaderos también. Esto significa que cada modelo que satisface esta fórmula también satisface al original. Por otro lado, sólo algunos de los modelos de la fórmula original satisfacen esta: no se mencionan en la fórmula original, sus valores son irrelevantes para la satisfacción de ella, que no es el caso en la última fórmula. Esto significa que la fórmula original y el resultado de la traducción son equitativas pero no equivalentes.

Una traducción alternativa, la transformación de Tseitin, incluye también las cláusulas . Con estas cláusulas, la fórmula implica ; esta fórmula se considera a menudo para "definir" para ser un nombre .

Lógica de primer orden

En la lógica de primer orden, la forma normal conjuntiva se puede llevar más allá para producir la forma normal de cláusula de una fórmula lógica, que luego se puede usar para realizar una resolución de primer orden. En la demostración de teoremas automatizada basada en resolución, una fórmula CNF

, con literales, es comúnmente representado como un conjunto de conjuntos
.

Vea a continuación un ejemplo.

Complejidad computacional

Un conjunto importante de problemas de complejidad computacional implica encontrar asignaciones a las variables de una fórmula booleana expresada en forma normal conjuntiva, de modo que la fórmula sea verdadera. El problema k-SAT es el problema de encontrar una asignación satisfactoria a una fórmula booleana expresada en CNF en la que cada disyunción contiene como máximo variables k. 3-SAT es NP-completo (como cualquier otro problema de k-SAT con k>2) mientras que se sabe que 2-SAT tiene soluciones en tiempo polinomial. Como consecuencia, la tarea de convertir una fórmula en un DNF, preservando la satisfacibilidad, es NP-difícil; dualmente, convertir en CNF, preservando la validez, también es NP-difícil; por lo tanto, la conversión que conserva la equivalencia en DNF o CNF es nuevamente NP-difícil.

Los problemas típicos en este caso involucran fórmulas en "3CNF": forma normal conjuntiva con no más de tres variables por conjunción. Los ejemplos de tales fórmulas que se encuentran en la práctica pueden ser muy grandes, por ejemplo, con 100 000 variables y 1 000 000 de conjunciones.

Una fórmula en el CNF se puede convertir en una fórmula equisatisfecha en "kCNF (para k≥3) reemplazando cada conjunto con más de k variables por dos conjuntos y con Z una nueva variable, y repetir tan a menudo como sea necesario.

Conversión desde lógica de primer orden

Para convertir lógica de primer orden a CNF:

  1. Convert to negation normal form.
    1. Eliminate implications and equivalences: repeatedly replace with ; replace with . Eventually, this will eliminate all occurrences of and .
    2. Move NOTs inwards by repeatedly applying De Morgan's law. Specifically, replace with ; replace with ; and replace with ; replace with ; with . After that, a may occur only immediately before a predicate symbol.
  2. Standardize variables
    1. For sentences like which use the same variable name twice, change the name of one of the variables. This avoids confusion later when dropping quantifiers. For example, is renamed to .
  3. Skolemize the statement
    1. Move quantifiers outwards: repeatedly replace with ; replace with ; replace with ; replace with . These replacements preserve equivalence, since the previous variable standardization step ensured that doesn't occur in . After these replacements, a quantifier may occur only in the initial prefix of the formula, but never inside a , , or .
    2. Repeatedly replace with , where is a new -ary function symbol, a so-called "Skolem function". This is the only step that preserves only satisfiability rather than equivalence. It eliminates all existential quantifiers.
  4. Drop all universal quantifiers.
  5. Distribute ORs inwards over ANDs: repeatedly replace with .

Como ejemplo, la fórmula que dice "Cualquiera que ama a todos los animales, a su vez es amado por alguien" se convierte en CNF (y posteriormente en forma de cláusula en la última línea) de la siguiente manera (la regla de sustitución de alto nivel redexes en ):

by 1.1
by 1.1
by 1.2
by 1.2
by 1.2
by 2
by 3.1
by 3.1
by 3.2
by 4
by 5
(clause representation)

Informalmente, la función Skolem puede ser pensado como ceder a la persona por quien es amado, mientras cede el animal (si hay) que no ama. La tercera última línea de abajo lee como " no ama al animal , o si no es amado ".

La segunda última línea de arriba, , es el CNF.

Notas

  1. ^ Peter B. Andrews, Introducción a la Teoría Lógica Matemática y Tipo, 2013, ISBN 9401599343, pág. 48
  2. ^ a b Inteligencia Artificial: Un enfoque moderno archivado 2017-08-31 en la máquina Wayback [1995...] Russell y Norvig
  3. ^ Tseitin (1968)
  4. ^ Jackson and Sheridan (2004)
  5. ^ ya que una manera de comprobar un CNF para la satisfiabilidad es convertirlo en un DNF, cuya satisfiabilidad se puede comprobar en tiempo lineal

Contenido relacionado

Continuidad de Lipschitz

Clase de conjugación

Hermann Lotze

Rudolf Hermann Lotze fue un filósofo y lógico alemán. También tenía un título de médico y estaba bien versado en biología. Argumentó que si el mundo...
Más resultados...
Tamaño del texto:
Copiar