Saltar al contenido
Topos Uranos

Resumen

La semántica prometió métodos para decidir la insatisfacibilidad que no recorrieran la tabla de verdad; esta clase entrega el principal de ellos. Se escribe un conjunto de fórmulas como un conjunto de cláusulas, cada una un conjunto finito de literales, por la forma normal conjuntiva o, para evitar su crecimiento exponencial, por cláusulas de definición con variables nuevas, que conservan la satisfacibilidad. Sobre las cláusulas actúa una sola regla, la de resolución: de una cláusula que contiene un literal y otra que contiene su opuesto se infiere la unión de ambas sin ese par. Una refutación es una derivación que llega a la cláusula vacía. Se demuestra la corrección (si hay refutación, el conjunto es insatisfacible), por inducción sobre la longitud de la derivación, y la completitud refutacional (si un conjunto finito es insatisfacible, hay refutación), por inducción sobre el número de variables, eliminándolas una a una; con el teorema de compacidad, la completitud se extiende a conjuntos infinitos. De ello resulta un método para decidir consecuencias, que se compara con las tablas, y una presentación del problema de la satisfacibilidad, con dos casos que se deciden deprisa: las cláusulas de Horn y las de dos literales.

Objetivos de aprendizaje

  1. Representar un conjunto de fórmulas como un conjunto de cláusulas, por la forma normal conjuntiva o por cláusulas de definición con variables nuevas, y justificar que la representación conserva la satisfacibilidad y la consecuencia.
  2. Construir refutaciones por resolución y decidir con ellas consecuencias e insatisfacibilidad, sin incurrir en los errores típicos, como eliminar dos pares complementarios en un solo paso.
  3. Demostrar la corrección de la resolución por inducción sobre la longitud de las derivaciones y su completitud refutacional por eliminación de variables, y extenderla a conjuntos infinitos con el teorema de compacidad.
  4. Explicar el problema de la satisfacibilidad, su costo conocido y los casos que se deciden con rapidez (cláusulas de Horn y de dos literales), y comparar la resolución con las tablas de verdad.

La clase sobre la semántica de la lógica proposicional mostró que la validez y la satisfacibilidad son decidibles por la tabla de verdad, a un costo que se duplica con cada variable, y anunció métodos que no exigieran recorrerla. La clase sobre consecuencia y equivalencia semántica redujo toda consecuencia a una insatisfacibilidad: Γ⊨φ\Gamma \models \varphi si y solo si Γ∪{¬φ}\Gamma \cup \{\neg\varphi\} es insatisfacible. Las clases sobre las formas normales y sobre su algoritmo dieron a toda fórmula una forma conjuntiva, cuya validez se ve a simple vista, pero cuya satisfacibilidad no se ve. Si esto es así, falta un procedimiento que decida la insatisfacibilidad de una conjunción de cláusulas operando sobre las cláusulas mismas. Ese procedimiento es la resolución, propuesta por John Alan Robinson en 1965 sobre ideas de Martin Davis y Hilary Putnam (1960); es el núcleo de los programas que hoy deciden la satisfacibilidad de fórmulas con millones de variables. A diferencia del sistema de la unidad de deducción, cuyas relaciones con la semántica estudian las clases sobre la corrección y la completitud y sobre el teorema de compacidad, la resolución no deduce conclusiones: refuta conjuntos. Esta clase demuestra que lo hace de modo correcto y completo.

Como en las clases anteriores, pp, qq, rr, ss y tt nombran las variables v1v_1 a v5v_5; la letra vv sin subíndice, y también ww, designan valoraciones; y V(φ)V(\varphi) es el conjunto de las variables de φ\varphi.

Cláusulas y conjuntos de cláusulas

Recuérdese de la clase sobre las formas normales que un literal es una variable o la negación de una variable, y que el opuesto de un literal ℓ\ell, escrito ℓ∗\ell^{*}, es el literal de la misma variable y del otro signo; dos literales opuestos forman un par complementario. Por el lema de la negación de un literal, v(ℓ∗)=1−v(ℓ)v(\ell^{*}) = 1 - v(\ell) para toda valoración vv. Allí una cláusula era una disyunción de literales; aquí conviene olvidar el orden y las repeticiones, que no alteran el valor, y quedarse con el conjunto.

Una cláusula es un conjunto finito de literales. La cláusula sin literales se llama cláusula vacía y se escribe □\Box. Una valoración vv satisface una cláusula CC, y se escribe v⊨Cv \models C, si algún literal de CC vale 11 en vv; en caso contrario, vv la refuta. Una cláusula de un solo literal se llama unitaria. Las variables de una cláusula forman el conjunto V(C)V(C); las de un conjunto SS de cláusulas, el conjunto V(S)V(S), unión de los anteriores. Una valoración satisface un conjunto SS de cláusulas, v⊨Sv \models S, si satisface cada una de sus cláusulas; SS es satisfacible si alguna valoración lo satisface, e insatisfacible en caso contrario. Por último, si SS es un conjunto de cláusulas y CC una cláusula, S⊨CS \models C significa que toda valoración que satisface SS satisface CC.

v⊨C  ⇔  (∃ℓ∈C)  v(ℓ)=1,v⊨S  ⇔  (∀C∈S)  v⊨Cv \models C \;\Leftrightarrow\; (\exists \ell \in C)\; v(\ell) = 1, \qquad v \models S \;\Leftrightarrow\; (\forall C \in S)\; v \models C

Dos casos extremos se siguen de la definición y conviene fijarlos. La cláusula vacía no tiene literales; por tanto, ningún literal suyo vale 11, y ninguna valoración la satisface: □\Box es insatisfacible, y todo conjunto que la contenga también. El conjunto vacío de cláusulas, en cambio, no tiene cláusulas que satisfacer, y toda valoración lo satisface. No deben confundirse: {□}\{\Box\} es insatisfacible y ∅\emptyset es satisfecho por todas las valoraciones.

LemaLa cláusula y su disyunción

Sea C={ℓ1,…,ℓk}C = \{\ell_1, \ldots, \ell_k\} una cláusula no vacía, con sus literales escritos en cualquier orden y sin repetir. Para toda valoración vv, v⊨Cv \models C si y solo si v(⋁j=1kℓj)=1v\left( \bigvee_{j=1}^{k} \ell_j \right) = 1. En particular, todas las disyunciones de los literales de CC, en cualquier orden y con repeticiones, son equivalentes entre sí. Además, CC es satisfecha por toda valoración si y solo si contiene un par complementario.

Demostración

  1. v(⋁j=1kℓj)=1  ⇔  (∃j≤k)  v(ℓj)=1v\left( \bigvee_{j=1}^{k} \ell_j \right) = 1 \;\Leftrightarrow\; (\exists j \leq k)\; v(\ell_j) = 1

    Por el lema del valor de las disyunciones de nn fórmulas, demostrado en la clase sobre las leyes generalizadas de De Morgan y de distribución, la disyunción vale 11 si y solo si alguno de sus términos vale 11.

  2. v(⋁j=1kℓj)=1  ⇔  v⊨Cv\left( \bigvee_{j=1}^{k} \ell_j \right) = 1 \;\Leftrightarrow\; \resaltar{v \models C}

    Que algún ℓj\ell_j valga 11 es que algún literal de CC valga 11, es decir, que vv satisfaga CC. La condición no depende del orden ni de las repeticiones, porque solo pregunta qué literales están.

  3. (∀v)  v⊨C  ⇔  (∃ℓ)  ℓ∈C,  ℓ∗∈C(\forall v)\; v \models C \;\Leftrightarrow\; (\exists \ell)\; \ell \in C, \; \ell^{*} \in C

    Por el lema de las conjunciones elementales y las cláusulas (clase sobre las formas normales), una disyunción de literales es válida si y solo si contiene un par complementario; por lo anterior, eso mismo vale para CC.

Una cláusula que contiene un par complementario se llama tautológica: no impone ninguna condición, y puede quitarse de cualquier conjunto sin alterar sus modelos. Escribir las cláusulas como conjuntos no es un capricho de notación. Si de (p∨q)(p \vee q) y (p∨¬q)(p \vee \neg q) se quiere obtener pp, la disyunción da (p∨p)(p \vee p), que equivale a pp pero no es la misma fórmula; con conjuntos, {p}∪{p}={p}\{p\} \cup \{p\} = \{p\}, y la fusión de los literales repetidos ocurre sola.

EjemploSatisfacer un conjunto de cláusulas

Sea S={{p,q},{¬p,r},{¬q}}S = \{ \{p, q\}, \{\neg p, r\}, \{\neg q\} \}. La cláusula {¬q}\{\neg q\} exige v(q)=0v(q) = 0; entonces {p,q}\{p, q\} exige v(p)=1v(p) = 1, y entonces {¬p,r}\{\neg p, r\} exige v(r)=1v(r) = 1. La valoración que da 11 a pp y a rr y 00 a las demás variables satisface SS, y es la única posibilidad en V(S)={p,q,r}V(S) = \{p, q, r\}. Si se añade la cláusula {¬r}\{\neg r\}, ninguna valoración satisface el conjunto ampliado: es insatisfacible, aunque no contenga □\Box.

v(q)=0  ⇒  v(p)=1  ⇒  v(r)=1v(q) = 0 \;\Rightarrow\; v(p) = 1 \;\Rightarrow\; v(r) = 1