1. Resolución en lógica proposicional 1.1. Introducción 1.1.1. Pseudo-motivación ¿Si tengo una fórmula de proposicional, puedo probar con fuerza bruta todas las valuaciones a ver si es satisfactible? Si ¿Se conocen métodos mas eficientes? No ¿Por qué aprender resolución en lógica proposicional? Da un método efectivo que no requiere probar todas las posibilidades siempre, aunque en peor caso asi sea. Ayuda a desarrollar/entender resolución para primer órden. Sirve para resolver ejercicios de la práctica y de los parciales. 1.1.2. Recapitulando Para ver si A es tautologı́a: 1. Calculamos la forma normal conjuntiva de ¬A. 2. Aplicamos el método de resolución. 3. Si hallamos una refutación: ¬A es insatisfactible, Y, por lo tanto, A es una tautologı́a. 4. Si no hallamos ninguna refutación: ¬A es satisfactible, Y, por lo tanto, A no es una tautologı́a. *Esta pantalla no es un robo, es una cita, hay una gran diferencia. 1.2. Forma normal conjuntiva 1.2.1. Forma normal conjuntiva (FNC) Toda fórmula de lógica proposicional puede escribirse en forma normal conjuntiva. Un literal es una variable (x) o la negación de una variable (¬x). Una fórmula está en FNC si es una conjunción de disyunciones de literales: (L11 ∨ L12 ∨ ... ∨ L1k1 ) ∧ (L21 ∨ ... ∨ L2k2 ) ∧ ... ∧ (Ln1 ∨ ... ∨ Lnkn ) 1 1.2.2. Pasar una fórmula a FNC Ejemplo: X ⇒ (¬(Y ∨ ¬X) ∧ ¬X) 1. Eliminar los operadores ⇒, utilizando la equivalencia: P ⇒ Q ≡ ¬P ∨ Q. 2. “Meter para adentro” los ¬ hasta que queden al lado de un literal, utilizando las equivalencias: ¬¬P ≡ P ¬(P ∧ Q) ≡ ¬P ∨ ¬Q ¬(P ∨ Q) ≡ ¬P ∧ ¬Q 3. Distribuir las disyunciones (∨) que tengan conjunciones (∧) dentro. 1.2.3. Notación de conjuntos Ejemplo: (¬X ∨ ¬Y ) ∧ (¬X ∨ X) ∧ (¬X ∨ ¬Y ) Como conjuntos: {{¬X, Y }, {¬X, X}, {¬X, Y }} {{¬X, Y }, {¬X, X}} 1.3. 1.3.1. Regla de resolución Regla de resolución {A1 , ..., Am , Q} {B1 , ..., Bn , ¬Q} {A1 , ..., Am , B1 , ..., Bn } {A1 , ..., Am , B1 , ..., Bn } es el resolvente de {A1 , ..., Am , Q} y {B1 , ..., Bn , ¬Q}. 1.3.2. Resolviendo el ejemplo {A1 , ..., Am , Q} {B1 , ..., Bn , ¬Q} {A1 , ..., Am , B1 , ..., Bn } 2 {{¬X, Y }, {¬X, X}} Aplicando la regla con: n = m = 1 A1 = Y B1 = ¬X Q = X. Resolvente: {Y, ¬X}. Como el resolvente ya está en el conjunto, no se agrega nada. Es la única pareja de cláusulas con las que se puede usar la regla y es la única forma de utilizarla, ergo, no hay forma de avanzar hasta la cláusula vacı́a. 1.3.3. ¿Qué demostramos con esto? {{¬X, Y }, {¬X, X}} Si no hallamos ninguna refutación: ¬A es satisfactible, y, por lo tanto, A no es una tautologı́a. ¡¡¡Como demostramos que X ⇒ (¬(Y ∨ ¬X) ∧ ¬X) es satisfactible, el que no es tautologı́a es ¬(X ⇒ (¬(Y ∨ ¬X) ∧ ¬X))!!! 1.4. Ejemplo completo 1.4.1. Ejercicio 2, segundo parcial, 1er cuatrimestre de 2006 Demostrar que ¬r se deduce del siguiente conjunto de fórmulas proposicionales utilizando el método de resolución para la lógica proposicional. r ⇒ (p ∨ q ∨ s) q ⇒ ¬r s⇒p p ⇒ ¬r 1.4.2. Interpretación del enunciado Demostrar que: ((r ⇒ (p ∨ q ∨ s)) ∧ (q ⇒ ¬r) ∧ (s ⇒ p) ∧ (p ⇒ ¬r)) ⇒ ¬r es tautologı́a. 1.4.3. Solución del ejercicio Paso 1: Pasar la negación de la fórmula a FNC. ¬(((r ⇒ (p ∨ q ∨ s)) ∧ (q ⇒ ¬r) ∧ (s ⇒ p) ∧ (p ⇒ ¬r)) ⇒ ¬r) ¬(¬((¬r ∨ (p ∨ q ∨ s)) ∧ (¬q ∨ ¬r) ∧ (¬s ∨ p) ∧ (¬p ∨ ¬r)) ∨ ¬r) ¬¬((¬r ∨ p ∨ q ∨ s) ∧ (¬q ∨ ¬r) ∧ (¬s ∨ p) ∧ (¬p ∨ ¬r)) ∧ ¬¬r (¬r ∨ p ∨ q ∨ s) ∧ (¬q ∨ ¬r) ∧ (¬s ∨ p) ∧ (¬p ∨ ¬r) ∧ r 3 1.4.4. Solución del ejercicio Paso 1b: Notación de conjuntos. (¬r ∨ p ∨ q ∨ s) ∧ (¬q ∨ ¬r) ∧ (¬s ∨ p) ∧ (¬p ∨ ¬r) ∧ r {{¬r, p, q, s}, {¬q, ¬r}, {¬s, p}, {¬p, ¬r}, {r}} 1.4.5. Solución del ejercicio Paso 2: Aplicar sucesivamente regla de resolución. 1. {¬r, p, q, s} 2. {¬q, ¬r} 3. {¬s, p} 4. {¬p, ¬r} 5. {r} 6. De (1) y (2) (Q = q): {¬r, p, s} 7. De (3) y (6) (Q = s): {¬r, p} 8. De (4) y (7) (Q = p): {¬r} 9. De (5) y (8) (Q = r): {} 2. 2.1. 2.1.1. Resolución en lógica de primer orden Introducción Motivación Teorema de Church: No existe un algoritmo que permita decidir si una fórmula de lógica de primer orden es lógicamente válida o no. Premio consuelo: El procedimiento de resolución general. Sirve para testear si una fórmula de primer orden es válida, pero si no lo es se puede colgar. Problema: Si lo tenemos corriendo hace 20 años, puede ser que la fórmula no sea válida, pero también es posible que lo sea y el algoritmo aún no encontró la demostración. 4 2.1.2. Método para testear la validez de A Para ver si una fórmula A es lógicamente válida debemos: 1. Obtener ¬A 2. Testear si ¬A es insatisfactible a) Calcular la forma clausal B de ¬A. b) Testear B usando la regla de resolución. 2.2. 2.2.1. Forma clausal Pasar una fórmula a forma clausal Ejemplo: G(H, H) ∧ ∀x(F (x) ⇒ ¬((∀y¬G(x, y)) ∧ G(H, x)) ) Pasaremos por las siguientes etapas: 1. Forma normal negada (NNF) 2. Forma normal prenexa 3. Forma normal de Skolem 2.2.2. Forma normal negada (NNF) Toda fórmula de primer orden tiene una fórmula equivalente que está en NNF. La forma normal negada no tiene operadores de implicación (⇒) y el operador de negación (¬) solo aparece aplicado a fórmulas atómicas. Para pasar una fórmula cualquiera a NNF usaremos las mismas identidades que vimos en proposicional para pasar a FNC, agregando otras que sirvan para manejar la interacción de la negación con los operadores ∃ y ∀. 2.2.3. Pasar una fórmula a NNF Ejemplo: G(H, H) ∧ ∀x(F (x) ⇒ ¬((∀y¬G(x, y)) ∧ G(H, x)) ) 1. Eliminar los operadores ⇒, utilizando la equivalencia: P ⇒ Q ≡ ¬P ∨ Q. 2. “Meter para adentro” los ¬ hasta que queden al lado de una fórmula atómica, utilizando las equivalencias: ¬¬P ≡ P ¬(P ∧ Q) ≡ ¬P ∨ ¬Q ¬(P ∨ Q) ≡ ¬P ∧ ¬Q ¬∃x(P ) ≡ ∀x(¬P ) ¬∀x(P ) ≡ ∃x(¬P ) 5 2.2.4. Forma normal prenexa Toda fórmula en proposicional es lógicamente válida a una fórmula en forma normal prenexa. Si la fórmula está en NNF, lo único que se debe hacer es renombrar las variables ligadas para que tengan nombres disjuntos y luego “mover” los operadores. ¡Cuidado! Se debe preservar el orden original de los operadores. Visto el árbol de parsing de la expresión lógica como orden parcial, el orden de los operadores “movidos” debe respetar ese orden parcial: No es lo mismo ∀x∃yP (x, y) que ∃y∀xP (x, y). 2.2.5. Pasar a forma normal prenexa en el ejemplo Luego de pasar a NNF: G(H, H) ∧ ∀x(¬F (x) ∨ ∃yG(x, y) ∨ ¬G(H, x) ) En forma normal prenexa: ∀x∃y(G(H, H) ∧ (¬F (x) ∨ G(x, y) ∨ ¬G(H, x)) ) 2.2.6. Forma normal de Skolem No toda fórmula de primer orden se puede escribir como una fórmula equivalente en forma normal de Skolem. Toda fórmula de primer orden tiene una fórmula correspondiente en forma normal de Skolem tal que ambas son satisfactibles o ninguna de las dos lo es. Una fórmula está en forma normal de Skolem si está en forma normal prenexa y no tiene cuantificadores existenciales. Llamamos Skolemización al proceso de tomar una fórmula en forma normal prenexa y conseguirnos otra en forma normal de Skolem que tiene la propiedad de preservar satisfactibilidad como fue mencionada mas arriba. 2.2.7. Pasar a forma normal de Skolem (Skolemización) Por cada cuantificador existencial ∃x: 1. Encontrar el conjunto C de variables ligadas a un cuantificador universal (∀) que afectan el existencial en cuestión (en forma prenexa, esto es “los ∀ que aparecen más atrás”). 2. Introducir un nuevo sı́mbolo de función n-ario F al lenguaje, donde n = #C (notar que n puede ser 0, en cuyo caso lo introducido es una constante). 3. Eliminar el cuantificador 6 4. Reemplazar toda aparición de x en la fórmula por F (y1 , ...yn ) donde {y1 , ..., yn } = C. Los yi se pueden numerar en cualquier orden pero en todos los reemplazos el mismo. 2.2.8. Skolemizar el ejemplo En forma normal prenexa: ∀x∃y(G(H, H) ∧ (¬F (x) ∨ G(x, y) ∨ ¬G(H, x) )) Para skolemizar solo se debe tratar el existencial ∃y. 1. C = {x} 2. n = 1 por lo cual se introduce una función unaria U al lenguaje. 3. ∀x(G(H, H) ∧ (¬F (x) ∨ G(x, y) ∨ ¬G(H, x)) ) 4. ∀x(G(H, H) ∧ (¬F (x) ∨ G(x, U (x)) ∨ ¬G(H, x)) ) 2.2.9. Forma clausal (¡al fin!) Una vez que se tiene la fórmula en forma normal de Skolem: ∀x(G(H, H) ∧ (¬F (x) ∨ G(x, U (x)) ∨ ¬G(H, x)) ) Se eliminan los ∀ y se pasa a FNC como si fuera proposicional (en este caso ya está en FNC): G(H, H) ∧ (¬F (x) ∨ G(x, U (x)) ∨ ¬G(H, x)) y luego se escribe como conjuntos: {{G(H, H)}, {¬F (x), G(x, U (x)), ¬G(H, x)}} 2.3. 2.3.1. Regla de resolución Regla de resolución {A1 , ..., Am , P1 , ..., Pk } {B1 , ..., Bn , ¬Q1 , ..., ¬Ql } σ({A1 , ..., Am , B1 , ..., Bn }) donde σ es el MGU de {P1 , ..., Pk , Q1 , ..., Ql }. Si las cláusulas {A1 , ..., Am , P1 , ..., Pk } y {B1 , ..., Bn , ¬Q1 , ..., ¬Ql } tienen variables en común debe efectuarse un renombre previamente. σ({A1 , ..., Am , B1 , ..., Bn }) es el resolvente de {A1 , ..., Am , P1 , ..., Pk } y {B1 , ..., Bn , ¬Q1 , ..., ¬Ql }. 7 2.3.2. Resolviendo el ejemplo {{G(H, H)}, {¬F (x), G(x, U (x)), ¬G(H, x)}} Solo se puede utilizar la regla poniendo P1 = G(H, H) y Q1 = G(H, x) ya que ¬G(H, x) es el único átomo negativo que unifica con un átomo de otra cláusula. Esto hace que σ = {x ← H} y el resolvente es σ({F (x), G(x, U (x))}) = F (H), G(H, U (H)). {{G(H, H)}, {¬F (x), G(x, U (x)), ¬G(H, x)}, {¬F (H), G(H, U (H))}} 2.3.3. Resolviendo el ejemplo {{G(H, H)}, {¬F (x), G(x, U (x)), ¬G(H, x)}, {¬F (H), G(H, U (H))}} Con las dos ultimas cláusulas: Q1 = G(H, x) y P1 = G(H, U (H)), σ = {x ← U (H)}. Resolvente: {¬F (U (H)), ¬F (H), G(U (H), U (U (H)))} {{G(H, H)}, {¬F (x), G(x, U (x)), ¬G(H, x)}, {¬F (H), G(H, U (H))}, {¬F (U (H)), ¬F (H), G(U (H), U (U (H)))}} ¿Qué pasa si continuamos? 2.4. 2.4.1. Ejemplo completo (cortito) Pseudo-identidad Intentemos demostrar: ∀x∃y(P (x) ⇒ P (y)). Negación de la fórmula: ¬(∀x∃y(P (x) ⇒ P (y))). Forma normal negada: ∃x∀y(P (x) ∧ ¬P (y)). Forma normal prenexa: ∃x∀y(P (x) ∧ ¬P (y)). Forma normal de Skolem: ∀y(P (U ) ∧ ¬P (y)). FNC, notación de conjuntos: {{P (U )}, {¬P (y)}}. 8