Lógica Computacional
Nota 11. Algoritmos de unificación. Regla de resolución y precedimiento de resolución general11Esta nota se base en el libro de Ben-Ari M., Mathematical Logic for Computer Science

Noé Salomón Hernández S

1 Introducción

La diferencia entre resolución en lógica de predicados y resolución en lógica proposicional es la unificación. En lógica proposicional, se aplicaba la regla de resolución a dos cláusulas si contenían literales complementarias, i.e., la literal positiva era idéntica a la literal negativa, omitiendo el símbolo de negación. La misma idea subyace en la resolución en lógica de predicados, excepto que el criterio para clasificar literales complementarias es más relajado. La literal positiva no tiene que ser idéntica a la literal negativa, omitiendo el símbolo de negación; es suficiente con que las dos literales puedan se idénticas al sustituir sus variables.

La unificación es el proceso por el que se determina si dos expresiones pueden ser unificadas, i.e., si pueden ser idénticas al sustituir apropiadamente sus variables. Determinar esto es una parte esencial de la resolución en lógica de predicados.

1.1 Ideas previas

Definición 1.1.

Considere los siguientes conceptos:

  • Un cláusula es un conjunto de literales.

  • Un cláusula es considerada implícitamente como una disyunción de sus literales.

  • Una cláusula unitaria consiste exactamente de una única literal.

  • El conjunto vacío de literales es la cláusula vacía, denotada como .

  • Una fórmula en forma clausular es un conjunto de cláusulas.

  • Una fórmula en forma clausular es considerada implícitamente como una conjunción de sus cláusulas.

  • La fórmula que es el conjunto vacío de cláusulas se denota como .

Definición 1.2.

Sean:

θ=[x1:=t1,,xn:=tn]σ=[y1:=s1,,yk:=sk]

dos sustituciones efectuadas simultáneamente, y sean X={x1,,xn} y Y={y1,,yk} los conjuntos de las variables que son sustituidas por θ y σ, respectivamente. Así θσ, la composición de θ y σ, es la sustitución:

θσ=[xi:=tiσ,yj:=sj]con xiXxitiσyjY y yjX
Ejemplo 1.3.

Sea

E=P(u,v,x,y,z),θ=[x:=f(y),y:=f(a),z:=u],σ=[y:=g(a),u:=z,v:=f(f(a))].

Entonces,

θσ=[x:=f(g(a)),y:=f(a),u:=z,v:=f(f(a))].

A partir de esta composición se puede obtener la sustitución E(θσ) como:

E(θσ)=P(z,f(f(a)),f(g(a)),f(a),z).

Bien se pudo haber realizado la sustitución en dos partes:

Eθ=P(u,v,f(y),f(a),u),(Eθ)σ=P(z,f(f(a)),f(g(a)),f(a),z).

2 Unificación

Ejemplo 2.1.

Las dos literales P(f(x),g(y)) y ¬P(f(f(a)),g(z)) no colisionan. Sin embargo, al aplicarles la sustitución

θ1=[x:=f(a),y:=f(g(a)),z:=f(g(a))]

obtenemos literales cerradas que colisionan: P(f(f(a)),g(f(g(a)))) y ¬P(f(f(a)),g(f(g(a)))).

La siguiente sustitución es más sencilla:

θ2=[x:=f(a),y:=a,z:=a]

al aplicarse también genera un par de literales que colisionan: P(f(f(a)),g(a)) y ¬P(f(f(a)),g(a)).

Considere ahora la siguiente sustitución:

μ=[x:=f(a),z:=y]

las literales que resultan son: P(f(f(a)),g(y)) y ¬P(f(f(a)),g(y)). Cualquier sustitución de y por un término cerrado aplicada a estas dos literales producirá literales cerradas que colisionan.

Al encontrar la sustitución más sencilla que ocasione que dos literales colisionen, el resolvente será el resultado más general obtenido por la regla de resolución y será más propenso a colisionar con otra cláusula después de una sustitución apropiada.

Definición 2.2.

Sea U={A1,,An} un conjunto de átomos. Un unificador θ es una sustitución tal que:

A1θ==Anθ.

Un unificador más general (umg) para U es un unificador μ tal que cualquier unificador θ de U puede ser expresado como:

θ=μλ

para alguna sustitución λ.

3 Algoritmo de unificación por Martelli y Montanari

Si dos átomos son unificables, entonces comparten el mismo símbolo de predicado con la misma paridad. La unificación de átomos se entiende como la unificación de sus argumentos, es decir, la unificación de un conjunto de términos. El conjunto de términos a ser unificados será escrito como un conjunto de ecuaciones de términos.

Ejemplo 3.1

La unificación de {P(f(x),g(y)),P(f(f(a)),g(z))} se expresa como un conjunto de ecuaciones de términos:

f(x)=f(f(a))g(y)=g(z)
Definición 3.1.

Un conjunto de ecuaciones de términos está en forma de solución syss:

  • Todas las ecuaciones son de la forma xi=ti donde xi es una variable.

  • Si la variable xi figura en el lado izquierdo de una ecuación, no figura en alguna otra ecuación.

Un conjunto de ecuaciones en forma de solución define la sustitución:

[x1:=t1,,xn:=tn]

Algoritmo (Algoritmo de unificación de Martelli y Montanari)

Input: Un conjunto de ecuaciones de términos.

Output: Un conjunto de ecuaciones en forma de solución o reportar no unificable.

Ejecutar las siguientes transformaciones sobre el conjunto de ecuaciones mientras alguna de ellas sea aplicable:

  1. 1.

    Transformar t=x, donde t no es una variable, en x=t.

  2. 2.

    Eliminar la ecuación x=x.

  3. 3.

    Sea t=s una ecuación donde t,s no son variables,

    • Si el símbolo de función más externo de t y s no es el mismo, el algoritmo termina reportando no unificable.

    • Si el símbolo de función más externo de t y s sí es el mismo, pero difiere en aridad, el algoritmo termina reportando no unificable.

    • De otro modo, reemplazar la ecuación f(t1,,tk)=f(s1,,sk) por las k ecuaciones t1=s1,,tk=sk.

  4. 4.

    Sea x=t una ecuación tal que x figura en otro lugar dentro del conjunto.

    • Si x figura en t, y el término t no es la variable x misma, el algoritmo termina reportando no unificable.

    • De otro modo, transformar el conjunto al reemplazar todas las presencias de x por t en las otras ecuaciones donde x figura.

Los algoritmos de unificación pueden ser bastante ineficientes por la verificación de la condición descrita en la regla 4, llamada verificación de presencias.

En la aplicación de la unificación en la programación lógica, la verificación de presencias se ignora y se toma el riesgo de una sustitución ilegal.

Ejemplo 3.2.

Considere el siguiente conjunto con dos ecuaciones de términos:

g(y)=x,f(x,h(x),y)=f(g(z),w,z).

Aplicamos la regla 1 a la primera ecuación y la regla 3 a la segunda ecuación:

x=g(y),x=g(z),h(x)=w,y=z.

Aplicamos la regla 4 a la segunda ecuación reemplazando la presencias de x por g(z) en las demás ecuaciones:

g(z)=g(y),x=g(z),h(g(z))=w,y=z.

Aplicamos la regla 3 a la primer ecuación:

z=y,x=g(z),h(g(z))=w,y=z.

Aplicamos la regla 4 a la última ecuación reemplazando y por z en la primera ecuación; esto resulta en la ecuación z=z la cual eliminamos usando la regla 2:

x=g(z),h(g(z))=w,y=z.

Finalmente, transformamos la segunda ecuación mediante la regla 1:

x=g(z),w=h(g(z)),y=z.

Así terminamos exitosamente el algoritmo, y afirmamos que

μ=[x:=g(z),w:=h(g(z)),y:=z]

es un unificador más general del conjunto original de ecuaciones. Podemos verificar también que el unificador:

θ=[x:=g(h(b)),w:=h(g(h(b))),y:=h(b),z:=h(b)]

puede expresarse como θ=μ[z:=h(b)].

Ejercicios 3.3.
  1. 1.

    Ejecute el algoritmo de unificación de Martelli y Montanari para encontrar el umg, si es que existe, de los siguientes pares de átomos:

    • P(x,x) y P(f(y),z).

    • P(x,x) y P(f(y),y).

    • P(f(x,y),g(z,z)) y P(f(f(w,z),v),w).

    • P(x,y) y P(f(z),x).

  2. 2.

    Resolver el conjunto de ecuaciones de término siguiente mediante el algoritmo de Martelli y Montanari.

    x=g(y),x=g(z),h(x)=w,y=z.

4 Algoritmo de unificación de Robinson

Definición 4.1.

Sean A y A dos átomos con el mismo símbolo de predicado y misma aridad, considere a cada uno como una secuencia de símbolos. Sea k la posición más a la izquierda en la que las secuencias difieren. El par de términos {t,t}, que comienzan en la posición k de A y A, es el conjunto de desacuerdo de los dos átomos.

Algoritmo (Algoritmo de unificación de Robinson)

Input: Dos átomos A y A con el mismo símbolo de predicado y misma aridad.

Output: Un unificador más general para A y A o reportar no unificable.

Inicializar el algoritmo al definir A0=A y A0=A. Ejecutar sucesivamente la siguiente acción:

  • Sea {t,t} el conjunto de desacuerdo de Ai y Ai. Si un término es una variable xi+1 y el otro es un término ti+1 tal que xi+1 no figura en ti+1, entonces definimos σi+1=[xi+1:=ti+1], y generamos los átomos Ai+1=Aiσi+1 y Ai+1=Aiσi+1 para una nueva iteración del algoritmo.

Si no es posible ejecutar esta acción (debido a que ambos elementos t y t no son variables; o debido a que un término, digamos t, es una variable y ésta figura en el otro término, t), los átomos no son unificables. Si después de ejecutar esta acción An=An, entonces A,A son unificables y el umg es μ=σ1σn.

Ejemplo 4.2.

Considere el par de átomos:

A=P(g(y),f(x,h(x),y)),A=P(x,f(g(z),w,z)).

Comenzamos definiendo A0=A y A0=A. El conjunto de desacuerdo inicial es {x,g(y)}. Un término es la variable x que no está presente en el otro término, así σ1=[x:=g(y)], y:

A0σ1=A1=P(g(y),f(g(y),h(g(y)),y)),A0σ1=A1=P(g(y),f(g(z),w,z)).

El conjunto de desacuerdo de A1 y A1 es {y,z} así σ2=[y:=z], y:

A1σ2=A2=P(g(z),f(g(z),h(g(z)),z)),A1σ2=A2=P(g(z),f(g(z),w,z)).

El conjunto de desacuerdo de A2 y A2 es {w,h(g(z))} así σ3=[w:=h(g(z))], y:

A2σ3=A3=P(g(z),f(g(z),h(g(z)),z)),A2σ3=A3=P(g(z),f(g(z),h(g(z)),z)).

Como A3=A3, los átomos son unificables y un umg es:

μ=σ1σ2σ3=[x:=g(z),y:=z,w:=h(g(z))].
Ejercicios 4.3.

Ejecute el algoritmo de unificación de Robinson para encontrar el umg, si es que existe, de los siguientes conjuntos de literales:

  • {P(a,x,f(g(y))),P(z,f(z),f(u))}.

  • {P(a,x,h(g(z))),P(z,h(y),h(y))}.

  • {Q(a,x,f(x)),Q(a,y,y)}.

  • {Q(x,y,z),Q(u,h(v,v),u)}.

  • {Q(f(x,g(x,a)),z),Q(y,h(x)),Q(f(b,w),z)}.

5 Resolución general

Definición 5.1.

Sea L={l1,,ln} un conjunto de literales. Entonces Lc={l1c,,lnc}, es decir, Lc es el conjunto de literales complementarias de las que están en L.

Definición 5.2.

(Regla de resolución general) Sean C1 y C2 cláusulas sin variables en común. Sean L1={l11,,ln11}C1 y L2={l12,,ln22}C2 dos subconjuntos de literales tales que L1 y L2c se unifican por un umg σ. C1 y C2 se conocen como cláusulas de colisión y colisionan en el conjunto de literales L1 y L2. C, el resolvente de C1 y C2, es la cláusula:

Res(C1,C2)=(C1σL1σ)(C2σL2σ).
Ejemplo 5.3.

Sean C1={P(f(x),g(y)),Q(x,y)} y C2={¬P(f(f(a)),g(z)),Q(f(a),z)} dos cláusulas, un umg para L1={P(f(x),g(y))} y L2c={P(f(f(a)),g(z))} es [x:=f(a),y:=z]. El resolvente para las cláusulas C1 y C2 es

{Q(f(a),z),Q(f(a),z)}={Q(f(a),z)}

Las cláusulas son conjuntos de literales, así que cuando tomamos la unión de las cláusulas en la regla de resolución, literales idénticas se colapsarán; esto se llama factorización.

La regla de resolución general requiere en general que las cláusulas de colisión no tengan variables en común. Esto se logra mediante un proceso que se conoce como estandarización por partes: renombramos todas las variables en una de las cláusulas antes de ser usada por la regla de resolución. Todas las variables en una cláusula están implícitamente cuantificadas universalmente así que el renombre no cambia su satisfacibilidad22Considérese también la equivalencia x(φψ)xφxψ, que muestra que en la forma clausular cada cláusula puede ser cuantificada universalmente de manera independiente. Finalmente, tome como ejemplo sencillo de “resolución” la situación en la que se satisface x(P(x)Q(x)) y x¬P(x), de lo cual se sigue que x′′Q(x′′)..

Ejemplo 5.4.

Sean C1={P(x),P(y)} y C2={¬P(x),¬P(y)} dos cláusulas. Aplicando estandarización por partes tenemos que C2={¬P(x),¬P(y)}. Sea L1={P(x),P(y)} y L2c={P(x),P(y)}; estos conjuntos tienen un umg σ=[y:=x,x:=x,y:=x]. La regla de resolución opera del siguiente modo:

Res(C1,C2)=(C1σL1σ)(C2σL2σ)=({P(x)}{P(x)})({¬P(x)}{¬P(x)})=

Algoritmo (Procedimiento de Resolución General)

Input: Un conjunto de cláusulas S.

Output: Si el algoritmo termina, reporta que el conjunto de cláusulas es satisfacible o insatisfacible.

Sea S0=S. Escoja dos cláusulas de colisión C1,C2Si y sea C=Res(C1,C2). Si C=, el algoritmo termina y reporta que S es insatisfacible. De otro modo, construir Si+1=Si{C}. Si Si+1=Si para todos los posibles pares de cláusulas de colisión, el algoritmo termina y reporta S es satisfacible.


Aunque un conjunto de cláusulas insatisfacible producirá eventualmente con una adecuada ejecución sistemática del procedimiento, la existencia de modelos infinitos significa que el procedimiento de resolución sobre un conjunto de cláusulas satisfacible puede nunca terminar, así que el procedimiento de resolución general no es un procedimiento de decisión.

Ejemplo 5.5.

Las líneas de la 1 a la 7 contienen un conjunto de cláusulas inicial. La refutación por resolución a partir de la línea 8 muestra que el conjunto de cláusulas inicial es insatisfacible. Cada linea contiene el resolvente, el unificador más general y los números con las cláusulas padre.

1.{¬P(x),Q(x),R(x,f(x))}premisa2.{¬P(x),Q(x),O(f(x))}premisa3.{M(a)}premisa4.{P(a)}premisa5.{¬R(a,y),M(y)}premisa6.{¬M(x),¬Q(x)}premisa7.{¬M(x),¬O(x)}premisa8.{¬Q(a)}[x:=a]Res 3,69.{Q(a),O(f(a))}[x:=a]Res 2,410.{O(f(a))}Res 8,911.{Q(a),R(a,f(a))}[x:=a]Res 1,412.{R(a,f(a))}Res 8,1113.{M(f(a))}[y:=f(a)]Res 5,1214.{¬O(f(a))}[x:=f(a)]Res 7,1315Res 10,14
Ejercicios 5.6.
  1. 1.

    Determine si los siguientes conjuntos de cláusulas son insatisfacibles.

    • {{P(a,b),Q(a,c)},{¬P(x,y),R(x)},{¬Q(x,y),R(x)},{¬R(z)}}.

    • {{¬C(x),P(f(x))},{¬C(x),A(x,f(x))},{C(a)},{¬P(w),¬A(a,w)}}.

    • {{¬P(x,y),P(y,x)},{¬P(x,y),¬P(y,z),P(x,z)},{P(x,f(x))},{¬P(x,x)}}.

    • {{¬P(x,y),Q(x,y,f(x,y))},{R(y,z),¬Q(a,y,z))},{P(x,g(x)),Q(x,g(x),z)},{¬R(x,y),¬Q(x,w,z)}}

  2. 2.

    Mediante resolución determine si el siguiente argumento es correcto o no.

    {¬x((V(x)P(x)¬M(x))),x(R(x)¬A(x)V(x)P(x))}x(R(x)¬A(x))yM(y)

6 El método de resolución general el correcto y completo

Teorema 6.1 (La resolución es correcta).

Sea S un conjunto de cláusulas. Si al aplicar el procedimiento de resolución se obtiene la cláusula vacía , entonces S es insatisfacible.

Teorema 6.2 (La resolución es completa).

Si un conjunto de cláusulas es insatisfacible, la cláusula vacía puede obtenerse mediante el procedimiento de resolución.