Repaso de la clase pasada Unificación Resolución general Resolución general en lógica de primer orden Eduardo Bonelli Departamento de Computación FCEyN UBA 4 de octubre de 2005 Eduardo Bonelli Resolución general en lógica de primer orden Repaso de la clase pasada Unificación Resolución general Teorema de Skolem-Herbrand-Gödel Cláusulas ground y resolución ground Procedimiento para testear validez La clase pasada Repasamos lógica de primer orden Introdujimos un procedimiento para probar la validez de una sentencia que se basa en el siguiente teorema Teorema de Skolem-Herbrand-Gödel Sea L un lenguaje de primer orden y A una sentencia. Si B es la forma de Skolem de A, entonces: A es insatisfactible sii alguna instancia compuesta de B es insatisfactible. Procedimiento para testear validez de una sentencia A: 1 2 3 tomamos su negación ¬A obtenemos la forma de Skolem B de ¬A checkeamos, para cada instancia compuesta de B, si es insatisfactible Eduardo Bonelli Resolución general en lógica de primer orden Repaso de la clase pasada Unificación Resolución general Teorema de Skolem-Herbrand-Gödel Cláusulas ground y resolución ground Procedimiento para testear validez Resolución ground Procedimiento para testear validez de una sentencia A: 1 2 3 tomamos su negación ¬A obtenemos la forma de Skolem B de ¬A checkeamos, para cada instancia compuesta de B, si es insatisfactible Para el paso 3 usamos el método de resolución ground El método de resolución ground consiste en aplicar la regla de resolución de la lógica proposicional a cláusulas ground Recordemos la definición de cláusula ground (para ello primero debemos recordar la definición de forma cláusal) Eduardo Bonelli Resolución general en lógica de primer orden Repaso de la clase pasada Unificación Resolución general Teorema de Skolem-Herbrand-Gödel Cláusulas ground y resolución ground Procedimiento para testear validez Cláusulas Forma clausal Conjunción de sentencias prenexas de la forma ∀x1 . . . ∀xm C donde 1 C es una disyunción de literales y 2 los conjuntos {x1 , . . . , xm } de variables ligadas son disjuntos para todo par distinto de cláusulas. Cada ∀x1 . . . ∀xm C se llama cláusula La forma clausal ∀x11 . . . ∀x1m1 C1 ∧ . . . ∧ ∀xk1 . . . ∀xkmk Ck se escribe {C10 , . . . , Ck0 } donde Ci0 resulta de reemplazar la disyunción de literales Ci por el conjunto de literales asociado Eduardo Bonelli Resolución general en lógica de primer orden Repaso de la clase pasada Unificación Resolución general Teorema de Skolem-Herbrand-Gödel Cláusulas ground y resolución ground Procedimiento para testear validez Cláusulas ground Cláusulas ground Es una cláusula que no tiene cuantificadores ni variables Volvamos al procedimiento: Procedimiento para testear validez de una sentencia A: 1 2 3 tomamos su negación ¬A obtenemos la forma de Skolem B de ¬A checkeamos, para cada instancia compuesta de B, si es insatisfactible Dijimos que para el paso 3 usamos el método de resolución ground Vamos a modificar el procedimiento para reflejar esto... Eduardo Bonelli Resolución general en lógica de primer orden Repaso de la clase pasada Unificación Resolución general Teorema de Skolem-Herbrand-Gödel Cláusulas ground y resolución ground Procedimiento para testear validez Validez a través de resolución ground Procedimiento para testear la validez de A 1 tomamos su negación ¬A 2 obtenemos la forma de Skolem B de ¬A 3 pasamos B a forma clausual B 0 4 checkeamos cada instancia compuesta de B 0 (cada una de las cuales es una cláusula ground) para ver si es insatisfactible usando resolución ground Este procedimiento es correcto y completo No es un algoritmo: si B 0 es satisfactible puede que el procedimiento no se detenga Es de esperarse en función al Teorema de Church (indecidibilidad de validez en lógica de primer orden) El cuello de botella: generación de las instancias compuestas Eduardo Bonelli Resolución general en lógica de primer orden Repaso de la clase pasada Unificación Resolución general Teorema de Skolem-Herbrand-Gödel Cláusulas ground y resolución ground Procedimiento para testear validez Validez a través de resolución ground Procedimiento para testear la validez de A 1 tomamos su negación ¬A 2 obtenemos la forma de Skolem B de ¬A 3 pasamos B a forma clausual B 0 4 checkeamos cada instancia compuesta de B 0 (cada una de las cuales es una cláusula ground) para ver si es insatisfactible usando resolución ground Este procedimiento es correcto y completo No es un algoritmo: si B 0 es satisfactible puede que el procedimiento no se detenga Es de esperarse en función al Teorema de Church (indecidibilidad de validez en lógica de primer orden) El cuello de botella: generación de las instancias compuestas Eduardo Bonelli Resolución general en lógica de primer orden Repaso de la clase pasada Unificación Resolución general Teorema de Skolem-Herbrand-Gödel Cláusulas ground y resolución ground Procedimiento para testear validez Validez a través de resolución ground Procedimiento para testear la validez de A 1 tomamos su negación ¬A 2 obtenemos la forma de Skolem B de ¬A 3 pasamos B a forma clausual B 0 4 checkeamos cada instancia compuesta de B 0 (cada una de las cuales es una cláusula ground) para ver si es insatisfactible usando resolución ground Este procedimiento es correcto y completo No es un algoritmo: si B 0 es satisfactible puede que el procedimiento no se detenga Es de esperarse en función al Teorema de Church (indecidibilidad de validez en lógica de primer orden) El cuello de botella: generación de las instancias compuestas Eduardo Bonelli Resolución general en lógica de primer orden Repaso de la clase pasada Unificación Resolución general Teorema de Skolem-Herbrand-Gödel Cláusulas ground y resolución ground Procedimiento para testear validez Validez a través de resolución ground Procedimiento para testear la validez de A 1 tomamos su negación ¬A 2 obtenemos la forma de Skolem B de ¬A 3 pasamos B a forma clausual B 0 4 checkeamos cada instancia compuesta de B 0 (cada una de las cuales es una cláusula ground) para ver si es insatisfactible usando resolución ground Este procedimiento es correcto y completo No es un algoritmo: si B 0 es satisfactible puede que el procedimiento no se detenga Es de esperarse en función al Teorema de Church (indecidibilidad de validez en lógica de primer orden) El cuello de botella: generación de las instancias compuestas Eduardo Bonelli Resolución general en lógica de primer orden Repaso de la clase pasada Unificación Resolución general Teorema de Skolem-Herbrand-Gödel Cláusulas ground y resolución ground Procedimiento para testear validez Clase de hoy Versión del procedimiento anterior en el que, grosso modo, las cláusulas ground se generan en simultáneo con la aplicación de la regla de resolución En el método de resolución ground, primero hay que disponer de las cláusulas ground antes de dispararlo El método de resolución general se dispara directamente sobre la forma clausal (que no necesariamente son ground) Veamos cómo quedarı́a el procedimiento que apela al método de resolución general... Eduardo Bonelli Resolución general en lógica de primer orden Repaso de la clase pasada Unificación Resolución general Teorema de Skolem-Herbrand-Gödel Cláusulas ground y resolución ground Procedimiento para testear validez Clase de hoy Procedimiento anterior para testear la validez de A 1 tomamos su negación ¬A 2 obtenemos la forma de Skolem B de ¬A 3 pasamos B a forma clausual B 0 4 checkeamos cada instancia compuesta de B 0 (que ahora es una cláusula ground) para ver si es insatisfactible usando resolución ground Eduardo Bonelli Resolución general en lógica de primer orden Repaso de la clase pasada Unificación Resolución general Teorema de Skolem-Herbrand-Gödel Cláusulas ground y resolución ground Procedimiento para testear validez Clase de hoy Procedimiento nuevo para testear la validez de A 1 tomamos su negación ¬A 2 obtenemos la forma de Skolem B de ¬A 3 pasamos B a forma clausual B 0 4 5 checkeamos cada instancia compuesta de B 0 (que ahora es una cláusula ground) para ver si es insatisfactible usando resolución ground checkeamos B 0 para ver si es insatisfactible usando resolución general Eduardo Bonelli Resolución general en lógica de primer orden Repaso de la clase pasada Unificación Resolución general Motivación Sustitución Algoritmo de unificación Motivación Dadas las cláusulas C1 = {¬P(z1 , a), ¬P(z1 , x), ¬P(x, z1 )} C2 = {P(z2 , f (z2 )), P(z2 , a)} Si sustituı́mos a por z1 , a por x y a por z2 , podemos generar dos cláusulas ground G1 = {¬P(a, a)} G2 = {P(a, f (a)), P(a, a)} cuyo resolvente es {P(a, f (a))} Eduardo Bonelli Resolución general en lógica de primer orden Repaso de la clase pasada Unificación Resolución general Motivación Sustitución Algoritmo de unificación Motivación Dadas las cláusulas C1 = {¬P(z1 , a), ¬P(z1 , x), ¬P(x, z1 )} C2 = {P(z2 , f (z2 )), P(z2 , a)} La sustitución antedicha resulta de intentar “igualar” P(z1 , a) con P(z1 , a). El algoritmo que se encarga de intentar igualar fórmulas atómicas se llama unificación El resultado de ejecutar el algoritmo de unificación sobre un conjunto de fórmulas atómicas {A1 , . . . , An } puede ser una sustitución σ tal que σ(A1 ) = . . . = σ(An ) falla, si no existe tal σ Eduardo Bonelli Resolución general en lógica de primer orden Repaso de la clase pasada Unificación Resolución general Motivación Sustitución Algoritmo de unificación Sustitución Sustitución Sea V un conjunto de variables y L un lenguaje de primer orden. Una sustitución σ es una función de L en el conjunto de L-términos tal que {x | σ(x) 6= x} es finito. El conjunto {x | σ(x) 6= x} se llama soporte de σ El soporte representa las variables que σ “afecta” Usamos la notación {t1 /x1 , . . . , tn /xn } para la sustitución con soporte {x1 , . . . , xn } definida de la manera obvia La sustitución cuyo soporte es ∅ es la sustitución identidad (Id) Eduardo Bonelli Resolución general en lógica de primer orden Repaso de la clase pasada Unificación Resolución general Motivación Sustitución Algoritmo de unificación Aplicación de sustitución a átomos y términos Toda sustitución σ se extiende (de manera única) a una función que sustituye dentro de términos, átomos y cláusulas, que satisface: σ(c) σ(x) σ(f (t1 , . . . , tn )) = c = σ(x) = f (σ(t1 ), . . . , σ(tn ) σ(P(t1 , . . . , tn )) = P(σ(t1 ), . . . , σ(tn )) σ({L1 , . . . , Ln }) = {σ(L1 ), . . . , σ(Ln )} NB: por abuso de notación usamos σ en lugar de σ Eduardo Bonelli Resolución general en lógica de primer orden Repaso de la clase pasada Unificación Resolución general Motivación Sustitución Algoritmo de unificación Composición de sustituciones Composición de sustituciones Si ρ y σ son sustituciones, entonces su composición, denotada ρ ◦ σ, es la sustitución que se comporta como sigue: (ρ ◦ σ)(t) = ρ(σ(t)) Ejemplo Sea σ = {j(x)/u, 0/y } y ρ = {h(z)/x, 0/y }, entonces ρ ◦ σ = {j(h(z))/u, h(z)/x, 0/y } Decimos que σ = τ si tienen el mismo soporte y σ(x) = τ (x) para todo x en el soporte de σ σ ◦ Id = Id ◦ σ = σ σ ◦ (ρ ◦ τ ) = (σ ◦ ρ) ◦ τ Eduardo Bonelli Resolución general en lógica de primer orden Repaso de la clase pasada Unificación Resolución general Motivación Sustitución Algoritmo de unificación Preorden sobre sustituciones Preorden sobre sustituciones Una sustitución σ es más general que ρ si existe τ tal que ρ = τ ◦ σ. La idea es que σ es más general que ρ porque ρ se obtiene instanciando σ. Eduardo Bonelli Resolución general en lógica de primer orden Repaso de la clase pasada Unificación Resolución general Motivación Sustitución Algoritmo de unificación Unificador Unificador Una sustitución σ es un unificador un conjunto de términos {t1 , . . . , tn } si σ(t1 ) = . . . = σ(tn ) La sust. {3/x, g (3)/y } unifica {g (g (x)), g (y )} {f (u)/x, g (f (u))/y } también! {g (x)/y } también! {f (x), g (y )} no son unificables {f (x), x} no son unificables Eduardo Bonelli Resolución general en lógica de primer orden Repaso de la clase pasada Unificación Resolución general Motivación Sustitución Algoritmo de unificación Unificador más general Unificador más general (MGU) Una sustitución σ es un MGU de un conjunto de términos {t1 , . . . , tn } si 1 σ es un unificador de {t1 , . . . , tn } 2 σ es más general que cualquier otro unificador de {t1 , . . . , tn } Ejemplos La sust. {3/x, g (3)/y } unifica {g (g (x)), g (y )} pero no es un MGU pues es instancia de el unificador {g (x)/y } {g (x)/y } es un MGU Si {t1 , . . . , tn } es unificable, existe un MGU y además es único salvo renombre de variables Eduardo Bonelli Resolución general en lógica de primer orden Repaso de la clase pasada Unificación Resolución general Motivación Sustitución Algoritmo de unificación Algoritmo de unificación Algoritmo de unificación Entrada: Par ordenado de términos ht1 , t2 i Salida: 1 2 MGU σ de ht1 , t2 i, si ht1 , t2 i es unificable falla, en caso contrario Si vemos a los sı́mbolos de predicado como sı́mbolos de función basta tomar términos como entrada Para unificar {t1 , . . . , tn } con n > 2, 1 2 3 obtener MGU σ de (t1 , t2 ) luego computar recursivamente el MGU τ de {σ(t2 ), . . . , σ(tn )} El MGU de {t1 , . . . , tn } es τ ◦ σ Eduardo Bonelli Resolución general en lógica de primer orden Repaso de la clase pasada Unificación Resolución general Motivación Sustitución Algoritmo de unificación Algoritmo de Martelli-Montanari Vamos a presentar un algoritmo no-determinı́stico Consiste en reglas de simplificación que simplifican conjuntos de pares de términos a unificar (goals) G0 7→ G1 7→ . . . 7→ Gn Las secuencias que terminan en el goal vacı́o son exitosas; aquellas que terminan en falla son fallidas Algunas pasos de simplificación llevan un sustitución que representa una solución parcial al problema G0 7→ G1 7→σ1 G2 7→ . . . 7→σk Gn Si la secuencia es exitosa el MGU es σk ◦ . . . ◦ σ1 Eduardo Bonelli Resolución general en lógica de primer orden Repaso de la clase pasada Unificación Resolución general Motivación Sustitución Algoritmo de unificación Reglas del algoritmo de Martelli-Montanari 1 Descomposicion {hf (s1 , . . . , sn ), f (t1 , . . . , tn )i}∪G 7→ {hs1 , t1 i, . . . , hsn , tn i}∪G 2 Eliminación de par trivial {hx, xi} ∪ G 7→ G 3 Swap: si t no es una variable {ht, xi} ∪ G 7→ {hx, ti} ∪ G 4 Eliminación de variable: si x ∈ / FV (t) {hx, ti} ∪ G 7→t/x G [t/x] 5 Falla: si f 6= g {hf (s1 , . . . , sn ), g (t1 , . . . , tm )i} ∪ G 7→ falla 6 Occur check: si x 6= t y x ∈ FV (t) {hx, ti} ∪ G 7→ falla Eduardo Bonelli Resolución general en lógica de primer orden Repaso de la clase pasada Unificación Resolución general Motivación Sustitución Algoritmo de unificación Ejemplos Ejemplo de secuencia exitosa 7→1 7→3 7→4g (x)/z 7→1 7→4f (y ,y )/x 7→4g (f (y ,y ))/u {hf (g (x), h(x, u)), f (z, h(f (y , y ), z))i} {hg (x), zi, hh(x, u), h(f (y , y ), z)i} {hz, g (x)i, hh(x, u), h(f (y , y ), z)i} {hh(x, u), h(f (y , y ), g (x))i} {hx, f (y , y )i, hu, g (x)i} {hu, g (f (y , y ))i} ∅ El MGU es {g (f (y , y ))/u} ◦ {f (y , y )/x} ◦ {g (x)/z} = {g (f (y , y ))/z, f (y , y )/x, g (f (y , y ))/u} Eduardo Bonelli Resolución general en lógica de primer orden Repaso de la clase pasada Unificación Resolución general Motivación Sustitución Algoritmo de unificación Ejemplos Ejemplo de secuencia fallida 7 1 → 7→4y /x 7→6 {hf (x, y , x), f (y , g (x), x)i} {hx, y i, hy , g (x)i, hx, xi} {hy , g (y )i, hy , y i} falla El MGU es {g (f (y , y ))/u} ◦ {f (y , y )/x} ◦ {g (x)/z} = {g (f (y , y ))/z, f (y , y )/x, g (f (y , y ))/u} Eduardo Bonelli Resolución general en lógica de primer orden Repaso de la clase pasada Unificación Resolución general Motivación Sustitución Algoritmo de unificación Propiedades del algoritmo Teorema El algoritmo de Martelli-Montanari siempre termina Sea G un conjunto de pares G si G tiene un unificador, el algoritmo termina exitosamente y retorna un MGU si G no tiene unificador, el algoritmo termina con falla Eduardo Bonelli Resolución general en lógica de primer orden Repaso de la clase pasada Unificación Resolución general Método de resolución general Método de resolución general Dado un conjunto de cláusulas S, se aplica repetidamente la regla de resolución general Cada aplicación de la regla de resolución da lugar a un paso de resolución general El objetivo es obtener una refutación (conjunto de cláusulas que contengan a la cláusula vacı́a) a partir de S a través de pasos de resolución (en cuyo caso decimos que “S tiene una refutación por resolución general”) Cada paso de resolución general preserva insatisfactibilidad + las refutaciones son trivialmente insatisfactibles = refutación por resolución general de S implica que S es insatisfactible Eduardo Bonelli Resolución general en lógica de primer orden Repaso de la clase pasada Unificación Resolución general Método de resolución general Regla de resolución (general) Regla de resolución (general) {B1 , . . . , Bk , A1 , . . . , Am } {¬D1 , . . . , ¬Dl , C1 , . . . , Cn } σ({A1 , . . . , Am , C1 , . . . , Cn }) donde σ es el MGU de {B1 , . . . , Bk , D1 , . . . , Dl }. Asumimos que las cláusulas {B1 , . . . , Bk , A1 , . . . , Am } y {¬D1 , . . . , ¬Dl , C1 , . . . , Cn } no tienen variables en común; en caso contrario se renombran las variables Observar que σ(B1 ) = . . . = σ(Bk ) = σ(D1 ) = . . . = σ(Dl ) La cláusula σ({A1 , . . . , Am , C1 , . . . , Cn }) se llama resolvente (de {B1 , . . . , Bk , A1 , . . . , Am } y {¬D1 , . . . , ¬Dl , C1 , . . . , Cn }) Eduardo Bonelli Resolución general en lógica de primer orden Repaso de la clase pasada Unificación Resolución general Método de resolución general C1 = {¬P(z1 , a), ¬P(z1 , x), ¬P(x, z1 )} C2 = {P(z2 , f (z2 )), P(z2 , a)} C3 = {P(f (z3 ), z3 ), P(z3 , a)} Eduardo Bonelli Resolución general en lógica de primer orden Repaso de la clase pasada Unificación Resolución general Método de resolución general Presentación alternativa Binary resolution+factoring Eduardo Bonelli Resolución general en lógica de primer orden Repaso de la clase pasada Unificación Resolución general Método de resolución general Correctitud y completitud de resolución general Teorema (Correctitud) Si un conjunto de cláusulas S tiene una refutación por resolución general, entonces S es insatisfactible Teorema (Completitud) Si un conjunto finito de cláusulas S es insatisfactible, tiene una refutación por resolución general Eduardo Bonelli Resolución general en lógica de primer orden