Вы находитесь на странице: 1из 13

4 PRINCIPIO DE RESOLUCIN

Este captulo introduce el mecanismo de inferencia utilizado por la mayora de los sis-
temas de programacin lgica. Si seguimos considerando Prolog desde la perspectiva
de los sistemas formales, hemos descrito ya su lenguaje y su teora de modelo; ahora
describiremos su teora de prueba. El mecanismo en cuestin es un caso particular de
la regla de inferencia llamada principio de resolucin [21]. La idea es acotar el uso
de este principio a programas definitivos, dando lugar a la resolucin-SLD [13]. Este
principio constituye el fundamento de la semntica operacional de los programas defi-
nitivos. La resolucin-SLD se demostrar correcta con respecto a la teora del modelo
descrita en la clase anterior.

.
La programacin lgica concierne el uso de la lgica (restringida a clusulas) para
representar y resolver problemas. Este uso es ampliamente aceptado en Inteligencia
Artificial (IA), donde la idea se resume como sigue: Un problema o sujeto de investi-
gacin puede describirse mediante un conjunto de frmulas bien formadas (fbf), de
preferencia en forma de clusulas. Si tal descripcin es lo suficientemente precisa, la
solucin al problema o la respuesta a la pregunta planteada en la investigacin, es
una consecuencia lgica del conjunto de fbf que describen el problema. Por lo tanto,
encontrar que fbf son consecuencia lgica de un conjunto de fbf , es crucial para
muchas reas de la IA, incluyendo la programacin lgica. De forma que nos gusta-
ra tener un procedimiento, algortmico, que nos permita establecer si |= es el
caso, o no. Este es el tema del presente captulo: un mtodo decidible conocido como
principio de resolucin [21].
En el caso de la lgica proposicional, la implicacin lgica es decidible, es decir,
existe un algoritmo que puede resolver el problema (contestar si no para cada caso
particular |= ). Si n es el nmero de tomos distintos que ocurren en estas fbf,
el nmero de interpretaciones posibles es finito, de hecho es 2n . Un algoritmo para
computar |= simplemente busca si es verdadero en todos los modelos de .
Qu sucede en el contexto de la lgica de primer orden?
La intuicin nos dice que el procedimiento de decisin de la lgica proposicional no
es adecuado en primer orden, pues en este caso podemos tener una cantidad infinita
de dominios e interpretaciones diferentes. Lo que es peor, el teorema de Church [5, 26],
muestra que la lgica de primer orden es indecidible:

Teorema 4 (Church) El problema de si |= , cuando es un conjunto finito arbitrario de


fbf, y es una fbf arbitraria, es indecidible.

Observen que el problema es indecidible para conjuntos arbitrarios de fbf y para


una fbf arbitraria. No existe un algoritmo que en un nmero finito de pasos, de la
respuesta correcta a la pregunta Es una consecuencia lgica de ?

39
40

Existen, sin embargo, procedimientos conocidos como procedimientos de prueba


que pueden ser de gran ayuda para computar este problema. La idea es que cuando
es el caso que |= , existen procedimientos que pueden verificarlo en un nmero
finito de pasos. Por ello suele decirse que la lgica de primer orden es semi-decidible.
Aunque parecera trivial, siendo que |= , preguntar |= ?, en realidad tal
trivialidad es aparente. Podemos hacer la pregunta al procedimiento sin que nosotros
sepamos que ese es el caso, y obtendremos una respuesta en un nmero finito de
pasos. Pero si es el caso que 6|= obtendremos la respuesta no (en el mejor de
los casos) o el procedimiento no terminar nunca. Esto es infortunado y, peor an,
inevitable.
Esta sesin introduce el procedimiento de prueba utilizado ampliamente en la pro-
gramacin lgica: el principio de resolucin propuesto por Robinson [21]. Si bien este
procedimiento est orientado a un lenguaje ms expresivo, nosotros nos concentra-
remos en una versin del principio que aplica a programas definidos y se conoce
como resolucin-SLD [13] (resolucin lineal con funcin de seleccin para clusulas
definitivas).

. ?
Hasta este momento, hemos abordado informalmente el concepto de procedimiento
de prueba como la manera de generar la prueba de que una fbf es consecuencia
lgica de un conjunto de fbf . Las fbf en se conocen como premisas y es la
conclusin de la prueba.
La prueba suele consistir de un pequeo nmero de transformaciones en los cuales
nuevas fbf son derivadas de las premisas y de fbf previamente derivadas. Derivar
una fbf implica construirla a partir de las premisas y otras fbf derivadas, siguiendo
alguna regla de inferencia. Toda regla de inferencia formaliza alguna forma natural
de razonamiento. Por ejemplo, el modus ponens es usado comnmente en matemticas,
su expresin es:

, !

donde la lnea superior expresa las premisas y la lnea inferior la conclusin.


Es posible ligar varias aplicaciones del modus ponens para construir una prueba.
Por ejemplo, si tenemos el programa lgico = {p(a), q(b) p(a), r(b) q(b)} es
posible derivar la fbf r(b) como sigue:

1. Derivar q(b) a partir de p(a) y q(b) p(a).

2. Derivar r(b) a partir de q(b) y r(b) q(b).

La secuencia anterior es una prueba de que r(b) puede ser derivada de .


Es evidente que si usamos modus ponens, la conclusin es una consecuencia lgica
de las premisas: { , ! } |= . A esta propiedad del modus ponens se le conoce
como consistencia (soundness). En general un procedimiento de prueba es consistente
si todas las fbf que pueden ser derivadas de algn conjunto de fbfs usando el
procedimiento, son consecuencias lgicas de . En otras palabras, un procedimiento
. 41

de prueba es consistente si y slo si slo permite derivar consecuencias lgicas de las


premisas.
Una segunda propiedad deseable de los procedimientos de prueba es su completez.
Un procedimiento de prueba es completo si toda fbf que es una consecuencia lgica
de las premisas , puede ser derivada usando el procedimiento en cuestin. El modus
ponens por si mismo, no es completo. Por ejemplo, no existe secuencia alguna de
aplicaciones del modus ponens que deriven la fbf p(a) de = {p(a) ^ p(b)}, cuando es
evidente que |= p(a).
La regla es completa, pero no vlida. !Nos permite extraer cualquier conclusin,
a partir de cualquier premisa! Esto ejemplifica que obtener completitud es sencillo,
pero obtener completitud y correctez, no lo es.

.
Recordemos que los enunciados en los programas lgicos tienen la estructura general
de la implicacin lgica:

0 1 , . . . , n (n > 0)

donde 0 , . . . , n son fbfs atmicas y 0 puede estar ausente (para representar clu-
sulas meta). Consideren el siguiente programa definitivo que describe un mundo
donde los padres de un recin nacido estn orgullosos, Juan es el padre de Marta y
Marta es una recin nacida:

orgulloso(X) padre(X, Y), recien_nacido(Y).


padre(X, Y) papa(X, Y).
padre(X, Y) mama(X, Y).
papa(juan, marta).
recien_nacido(marta).

Observen que el programa describe nicamente conocimiento positivo, es decir, no


especifica quin no est orgulloso. Tampoco que significa para alguien no ser padre.
Supongamos que deseamos contestar la pregunta Quin est orgulloso? Esta pre-
gunta concierne al mundo descrito por nuestro programa, esto es, concierne al modelo
previsto para . La respuesta que esperamos es, por supuesto, juan. Ahora, recuer-
den que la lgica de primer orden no nos permite expresar enunciados interrogativos,
por lo que nuestra pregunta debe formalizarse como una clusula meta (enunciado
declarativo):

orgulloso(Z).

que es una abreviatura de 8Zorgulloso(Z) (una clusula definitiva sin cabeza), que
a su vez es equivalente de:
42

9Z orgulloso(Z).

cuya lectura es Nadie est orgulloso, esto es, la respuesta negativa a la consulta
original Quin est orgulloso? La meta ahora es probar que este enunciado es falso
en todo modelo del programa y en particular, es falso en el modelo previsto para ,
puesto que esto es una forma de probar que |= 9Z orgulloso(Z). En general para
todo conjunto de fbf cerradas y una fbf cerrada , tenemos que |= si [ { }
es no satisfacerle (no tiene modelo).
Por lo tanto, nuestro objetivo es encontrar una substitucin tal que el conjunto [
{orgulloso(Z)} sea no satisfacerle, o de manera equivalente, |= 9Z orgulloso(Z).
El punto inicial de nuestro razonamiento es asumir la meta G0 Para cualquier Z,
Z no est orgulloso. La inspeccin del programa revela que una regla describe una
condicin para que alguien est orgulloso:

orgulloso(X) padre(X, Y), recien_nacido(Y).

lo cual es lgicamente equivalente a:

8(orgulloso(X) ) (padre(X, Y) ^ recien_nacido(Y)))

Al renombrar X por Z, eliminar el cuantificador universal y usar modus ponens con


respecto a G0 , obtenemos:

(padre(Z, Y) ^ recien_nacido(Y))

o su equivalente:

padre(Z, Y), recien_nacido(Y).

al que identificaremos como G1 . Un paso en nuestro razonamiento resulta en rempla-


zar la meta G0 por la meta G1 que es verdadera en todo modelo [ {G0 }. Ahora solo
queda probar que [ {G1 } es no satisfacible. Observen que G1 es equivalente a la fbf:

8Z8Y(padre(Z, Y) _ recien_nacido(Y))

Por lo tanto, puede probarse que la meta G1 es no satisfacible para , si en todo


modelo de hay una persona que es padre de un recin nacido. Entonces, verificamos
primero si hay padres con estas condiciones. El programa contiene la clusula:

padre(X, Y) papa(X, Y).

que es equivalente a:

8(padre(X, Y) ) papa(X, Y))


. 43

por lo que G1 se reduce a:

papa(Z, Y), recien_nacido(Y).

que identificaremos como G2 . Se puede mostrar que no es posible satisfacer la nueva


meta G2 con el programa , si en todo modelo de hay una persona que es pap de
un recin nacido. El programa declara que juan es padre de marta:

papa(juan, marta).

as que slo resta probar que marta no es una recin nacida no se puede satisfacer
junto con :

recien_nacido(marta).

pero el programa contiene el hecho:

recien_nacido(marta).

equivalente a recien_nacido(marta) ) f lo que conduce a una refutacin.


Este razonamiento puede resumirse de la siguiente manera: para probar la existen-
cia de algo, suponer lo contrario y usar modus ponens y la regla de eliminacin del
cuantificador universal, para encontrar un contra ejemplo al supuesto.
Observen que la meta definitiva fue convertida en un conjunto de tomos a ser
probados. Para ello, se seleccion una fbf atmica de la meta p(s1 , . . . , sn ) y una clu-
sula de la forma p(t1 , . . . , tn ) A1 , . . . An para encontrar una instancia comn de
p(s1 , . . . , sn ) y p(t1 , . . . , tn ), es decir, una substitucin que hace que p(s1 , . . . , sn )
y p(t1 , . . . , tn ) sean idnticos. Tal substitucin se conoce como unificador. La nueva
meta se construye remplazando el tomo seleccionado en la meta original, por los
tomos de la clusula seleccionada, aplicando a todos los tomos obtenidos de esta
manera.
El paso de computacin bsico de nuestro ejemplo, puede verse como una regla
de inferencia puesto que transforma frmulas lgicas. Lo llamaremos principio de
resolucin SLD para programas definitivos. Como mencionamos, el procedimiento
combina modus ponens, eliminacin del cuantificador universal y en el paso final un reduc-
tio ad absurdum.
Cada paso de razonamiento produce una substitucin, si se prueba en k pasos que
la meta definida en cuestin no puede satisfacerse, probamos que:

(A1 , . . . Am )1 . . . k

es una instancia que no puede satisfacerse. De manera equivalente, que:

|= (A1 ^ ^ Am )1 . . . k
44

Observen que generalmente, la computacin de estos pasos de razonamiento no


es determinista: cualquier tomo de la meta puede ser seleccionado y pueden haber
varias clusulas del programa que unifiquen con el tomo seleccionado. Otra fuente
de indeterminismo es la existencia de unificadores alternativos para dos tomos. Es-
to sugiere que es posible construir muchas soluciones (algunas veces, una cantidad
infinita de ellas).
Por otra parte, es posible tambin que el atomo seleccionado no unifique con ningu-
na clusula en el programa. Esto indica que no es posible construir un contra ejemplo
para la meta definida inicial. Finalmente, la computacin puede caer en un ciclo y de
esta manera no producir solucin alguna.

.
Una substitucin remplaza variables por trminos, por ejemplo, podemos remplazar
la variable X por el trmino f(a) en la clusula p(X) _ q(X), y as obtener la nueva
clusula p(f(a)) _ q(f(a)). Si asumimos que las clusulas estn cuantificadas univer-
salmente, decimos que est substitucin hace a la clusula original, menos general.
Mientras que la clusula original dice que V(p(X)) = t y que V(q(X)) = t para cual-
quier X en el dominio, la segunda clusula dice que esto slo es cierto cuando cuando
V(X) = f(a). Observen que la segunda clusula es consecuencia lgia de la primera:
p(X) _ q(X) |= p(f(a)) _ q(f(a))

Definicin 26 (Substitucin) Una substitucin es un conjunto finito de la forma:

{X1 /t1 , . . . , Xn /tn }, (n > 0)

donde las Xi son variables, distintas entre si, y los ti son trminos. Decimos que ti substi-
tuye a Xi . La forma Xi /ti se conoce como ligadura de Xi . La substitucin se dice se dice de
base (grounded) si cada trmino ti es un trmino base (no incluye variables)..

La substitucin dada por el conjunto vaco, se conoce como substitucin de identi-


dad o substitucin vaca y se denota por . La restriccin de sobre un conjunto de
variables Var es la substitucion {X/t 2 | X 2 Var}.

Ejemplo 8 {Y/X, X/g(X, Y)} y {X/a, Y/f(Z), Z/(f(a), X1 /b} son substituciones. La restric-
cin de la segunda substitucin sobre {X, Z} es {X/a, Z/f(a)}.

Definicin 27 (Expresin) Una expresin es un trmino, una literal, o una conjuncin o


disyuncin de literales. Una expresin simple es un trmino o una literal.

Observen que una clusula es una expresin. Las substituciones pueden aplicarse a
las expresiones, lo que significa que las variables en las expresiones sern remplazadas
de acuerdo a la substitucin.

Definicin 28 Sea = {X1 /t1 , . . . , Xn /tn } una substitucin y una expresin. Entonces
, la ocurrencia (instance) de por , es la expresin obtenida al substituir simultneamente
Xi por ti para 1 6 i 6 n. Si es una expresin de base, se dice que es una ocurrencia base
y se dice que es una substitucin de base para . Si = {1 , . . . , n } es un conjunto finito
de expresiones, entonces denota {1 , . . . , n }.
. 45

Ejemplo 9 Sea la expresin p(Y, f(X)) y sea la substitucin {X/a, Y/g(g(X))}. La ocu-
rrencia de por es = p(g(g(X)), f(a). Observen que X e Y son simultneamente rem-
plazados por sus respectivos trminos, lo que implica que X en g(g(X)) no es afectada por
X/a.

Si es una expresin cerrada que no es un trmino, por ejemplo, una literal, o una
conjuncin o disyuncin de literales, y es una substitucin, lo siguiente se cumple:

|=

por ejemplo: p(X) _ q(Y) |= p(a) _ q(Y) donde hemos usado la substitucin {X/a}.
Podemos aplicar una substitucin y luego aplicar una substitucin , a lo cual se
llama composicin de las substituciones y . Si ese es el caso, primero se aplica y
luego . Las composiciones pueden verse como mapeos del conjunto de variables en
el lenguaje, al conjunto de trminos.

Definicin 29 (Composicin) Sean = {X1 /s1 , . . . , Xm /sm } y = {Y1 /t1 , . . . Yn /tn }


dos substituciones. Consideren la secuencia:

X1 /(s1 ), . . . , Xm /(sm ), Y1 /t1 , . . . , Yn /tn

Si se borran de esta sencuencia las ligaduras Xi /si cuando Xi = si y cualquier ligadura


Yj /tj donde Yj 2 {X1 , . . . , Xm }. La substitucin consistente en las ligaduras de la secuencia
resultante es llamada composicin de y , se denota por .

Ejemplo 10 Sea = {X/f(Y), Z/U} y = {Y/b, U/Z}. Construimos la secuencia de liga-


duras X/(f(Y) ), Z/(u) , Y/b, U/Z lo cual es X/f(b), Z/Z, Y/b, U/Z. Al borrar la ligadura
Z/Z obtenemos la secuencia X/f(b), Y/b, U/Z = .

Definicin 30 (Ocurrencia) Sean y dos substituciones. Se dice que es una ocurrencia


de , si existe una substitucin , tal que = .

Ejemplo 11 La substitucin = {X/f(b), Y/a} es una ocurrencia de la substitucin =


{X/f(X), Y/a}, puesto que {X/b} = .

Algunas propiedades sobre las substituciones incluyen:

Proposicin 3 Sea una expresin, y sea , y substituciones. Las siguientes relaciones


se cumplen:

1. = =

2. () = ( )

3. ) = ( )
46

.
Uno de los pasos principales en el ejemplo de la seccin 4.3, consisti en hacer que
dos fbf atmicas se vuelvan sintcticamente equivalentes. Este proceso se conoce como
unificacin y posee una solucin algortmica.

Definicin 31 (Unificador) Sean y trminos. Una substitucin tal que y sean


idnticos ( = ) es llamada unificador de y .

Ejemplo 12

unifica(conoce(juan, X), conoce(juan, maria)) = {X/maria}

unifica(conoce(juan, X), conoce(Y, Z)) = {Y/juan, X/Z}

= {Y/juan, X/Z, W/pedro}

= {Y/juan, X/juan, Z/juan}

Definicin 32 (Generalidad entre substituciones) Una substitucin se dice ms gene-


ral que una substitucin , si y slo si existe una substitucin tal que = .

Definicin 33 (MGU) Un unificador se dice el unificador ms general (MGU) de dos


trminos, si y slo si es ms general que cualquier otro unificador entre esos trminos.

Definicin 34 (Forma resuelta) Un conjunto de ecuaciones {X1 = t1 , . . . , Xn = tn } est


en forma resuelta, si y slo si X1 , . . . , Xn son variables distintas que no ocurren en t1 , . . . , tn .

Existe una relacin cercana entre un conjunto de ecuaciones en forma resuelta y el


unificador ms general de ese conjunto: Sea {X1 = t1 , . . . , Xn = tn } un conjunto de
ecuaciones en forma resuelta. Entonces {X1 /t1 , . . . , Xn /tn } es un MGU idempotente
de la forma resuelta.

Definicin 35 (Equivalencia en conjuntos de ecuaciones) Dos conjuntos de ecuaciones


E1 y E2 se dicen equivalentes, si tienen el mismo conjunto de unificadores.

La definicin puede usarse como sigue: para computar el MGU de dos trminos y
, primero intente transformar la ecuacin { = } en una forma resuelta equivalente.
Si esto falla, entonces mgu(, ) = fallo. Sin embargo, si una forma resuelta {X1 =
t1 , . . . , Xn = tn } existe, entonces mgu(, ) = {X1 /t1 , . . . , Xn /tn }. Un algoritmo para
encontrar la forma resuelta de un conjunto de ecuaciones es como sigue:

Ejemplo 13 El conjunto {f(X, g(Y)) = f(g(Z), Z)} tiene una forma resuelta, puesto que:

) {X = g(Z), g(Y) = Z}

) {X = g(Z), Z = g(Y)}

) {X = g(g(Y)), Z = g(Y)}
. 47

Algoritmo 1 Unifica(E)
1: function Unifica(E) . E es un conjunto de ecuaciones
2: repeat
3: (s = t) seleccionar(E)
4: if f(s1 , . . . , sn ) = f(t1 , . . . , tn ) (n > 0) then
5: remplazar (s = t) por s1 = t1 , . . . , sn = tn
6: else if f(s1 , . . . , sm ) = g(t1 , . . . , tn ) (f/m 6= g/n) then
7: return(fallo)
8: else if X = X then
9: remover la X = X
10: else if t = X then
11: remplazar t = X por X = t
12: else if X = t then
13: if subtermino(X,t) then
14: return(fallo)
15: else remplazar todo X por t
16: end if
17: end if
18: until No hay accion posible para E
19: end function

Ejemplo 14 El conjunto {f(X, g(X), b) = f(a, g(Z), Z)} no tiene forma resuelta, puesto que:

) {X = a, g(X) = g(Z), b = Z}

) {X = a, g(a) = g(Z), b = Z}
) {X = a, a = Z, b = Z}
) {X = a, Z = a, b = Z}
) {X = a, Z = a, b = a}
) fallo

Ejemplo 15 El conjunto {f(X, g(X)) = f(Z, Z)} no tiene forma resuelta, puesto que:

) {X = Z, g(X) = Z}

) {X = Z, g(Z) = Z}
) {X = Z, Z = g(Z)}
) fallo

Este algoritmo termina y regresa una forma resuelta equivalente al conjunto de


ecuaciones de su entrada; o bien regresa fallo si la forma resuelta no existe. Sin embar-
go, el computar subtermino(X, t) (verificacin de ocurrencia) hace que el algoritmo
sea altamente ineficiente. Los sistemas Prolog resuelven este problema hacindo caso
omiso de la verificacin de ocurrencia. El standard ISO Prolog (1995) declara que el
48

resultado de la unificacin es no decidible. Al eliminar la verificacin de ocurrencia es


posible que al intentar resolver X = f(X) obtengamos X = f(f(X)) = f(f(f . . . )). En
la practica los sistemas Prolog no caen en este ciclo, pero realizan la siguiente substi-
tucin {X/f(1)}. Si bien esto parece resolver el problema de eficiencia, generaliza el
concepto de trmino, substitucin y unificacin al caso del infinito, no considerado
en la lgica de primer orden, introducindo a su vez inconsistencia.

. -
El mtodo de razonamiento descrito informalmente al inicio de esta sesin, puede
resumirse con la siguiente regla de inferencia:

8(1 ^ ^ i-1 ^ i ^ i+1 ^ ^ m ) 8( 0 1 ^^ n)


8(1 ^ ^ i-1 ^ 1 ^ ^ n ^ i+1 ^ ^ m )
o, de manera equivalente, usando la notacin de los programas definitivos:

1 , . . . , i-1 , i , i+1 , . . . , m 0 1, . . . , n
(1 , . . . , i-1 , 1 , . . . , n , . . . , m )
donde:

1. 1 , . . . , m son fbf atmicas.


2. 0 1, . . . , n es una clusula definitiva en el programa (n > 0).
3. MGU(i , 0) = .

La regla tiene dos premisas: una meta y una clusula definitivas. Observen que
cada una de ellas est cuantificada universalmente, por lo que el alcance de los cuan-
tificadores es disjunto. Por otra parte, solo hay un cuantificador universal para la
conclusin, por lo que se requiere que el conjunto de variables en las premisas sea
disjunto. Puesto que todas las variables en las premisas estn cuantificadas, es siem-
pre posible renombrar las variables de la clusula definitiva para cumplir con esta
condicin.
La meta definida puede incluir muchas fbf atmicas que unifican con la cabeza
de alguna clusula en el programa. En este caso, es deseable contar con un mecanis-
mo determinista para seleccionar un tomo i a unificar. Se asume una funcin que
selecciona una submeta de la meta definida (funcin de seleccin).
La regla de inferencia presentada es la nica necesaria para procesar programas
definitivos. Esta regla es una versin de la regla de inferencia conocida como princi-
pio de resolucin, introducido por J.A. Robinson en 1965. El principio de resolucin
aplica a clusulas. Puesto que las clusulas definitivas son ms restringidas que las
clusulas, la forma de resolucin presentada se conoce como resolucin-SLD (resolu-
cin lineal para clusulas definitivas con funcin de seleccin).
El punto de partida de la aplicacin de esta regla de inferencia es una meta definida
G0 :

1 , . . . , m (m > 0)
. - 49

De esta meta, una submeta i ser seleccionada, de preferencia por una funcin de
seleccin. Una nueva meta G1 se construye al seleccionar una clusula del programa
0 1 , . . . , n (n > 0) cuya cabeza 0 unifica con i , resultando en 1 . G1 tiene la
forma:

(1 , . . . , i-1 , 1, . . . , n , . . . , m )1

Ahora es posible aplicar el principio de resolucin a G1 para obtener G2 , y as


sucesivamente. El proceso puede terminar o no. Hay dos situaciones donde no es
posible obtener Gi+1 a partir de Gi :

1. cuando la submeta seleccionada no puede ser resuelta (no es unificable con la


cabeza de una clusula del programa).

2. cuando Gi = (meta vaca = f).

Definicin 36 (Derivacin-SLD) Sea G0 una meta definitiva, un programa definitivo y


R una funcin de seleccin. Una derivacin SLD de G0 (usando y R) es una secuencia
finita o infinita de metas:

0 n-1
G0 G1 . . . Gn-1 Gn

Para manejar de manera consistente el renombrado de variables, las variables en


una clusula i sern renombradas ponindoles subndice i.
Cada derivacin SLD nos lleva a una secuencias de MGUs 1 , . . . , n . La composi-
cin

1 2 . . . n si n > 0
=
si n = 0

de MGUs se conoce como la substitucin computada de la derivacin.

Ejemplo 16 Consideren la meta definida orgulloso(Z) y el programa discutido en la


clase anterior.

G0 = orgulloso(Z).

0 = orgulloso(X0 ) padre(X0 , Y0 ), recien_nacido(Y0 ).


La unificacin de orgulloso(Z) y orgulloso(X0 ) nos da el MGU 1 = {X0 /Z}. Asuma-
mos que nuestra funcin de seleccin es tomar la submeta ms a la izquierda. El primer paso
de la derivacin nos conduce a:

G1 = padre(Z, Y0 ), recien_nacido(Y0 ).

1 = padre(X1 , Y1 ) papa(X1 , Y1 ).
50

En el segundo paso de la resolucin el MGU 2 = {X1 /Z, Y1 /Y0 } es obtenido. La derivacin


continua como sigue:

G2 = papa(Z, Y0 ), recien_nacido(Y0 ).
2 = papa(juan, marta).
G3 = recien_nacido(marta).
3 = recien_nacido(marta).
G4 =
la substitucin computada para esta derivacin es:

1 2 3 4 = {X0 /Z}{X1 /Z, Y1 /Y0 }{Z/juan, Y0 /marta}


= {X0 /juan, X1 /juan, Y1 /marta, Z/juan, Y0 /marta}
Las derivaciones SLD que terminan en la meta vaca () son de especial importancia
pues corresponden a refutaciones a la meta inicial (y proveen las respuestas a la meta).
Definicin 37 (Refutacin SLD) Una derivacin SLD finita:
0 n-1
G0 G1 . . . Gn-1 Gn
donde Gn = , se llama refutacin SLD de G0 .
Definicin 38 (Derivacin fallida) Una derivacin de la meta definitiva G0 cuyo ltimo
elemento no es la meta vaca y no puede resolverse con ninguna clusula del programa, es
llamada derivacin fallida.
Definicin 39 (Arbol-SLD) Sea un programa definitivo, G0 una meta definitiva, y R una
funcin de seleccin. El rbol-SLD de G0 (usando y R) es un rbol etiquetado, posiblemente
infinito, que cumple las siguientes condiciones:
La raz del rbol est etiquetada por G0 .
Si el rbol contiene un nodo etiquetado como Gi y existe una clusula renombrada
i 2 tal que Gi+1 es dervidada de Gi y i via R, entonces el nodo etiquetado como
Gi tiene un hijo etiquetado Gi+1 El arco que conecta ambos nodos est etiquetado como
i .
Por ejemplo:
orgulloso(Z)

padre(Z, Y0 ), recien_nacido(Y0 )

papa(Z, Y0 ), recien_nacido(Y0 ) mama(Z, Y0 ), recien_nacido(Y0 )

recien_nacido(marta)


. - 51

. -
Definicin 40 (Consistencia) Sea un programa definitivo, R una funcin de seleccin, y
una substitucin de respuesta computada a partir de y R para una meta 1 , . . . , m .
Entonces 8((1 ^ ^ m )) es una consecuencia lgica del programa .

Definicin 41 (Complecin) Sea un programa definitivo, R una funcin de seleccin


y 1 , . . . , m una meta definitiva. Si |= 8((1 ^ ^ m ) ), entonces existe una
refutacin de 1 , . . . , m va R con una substitucin de respuesta computada , tal que
(1 ^ ^ m ) es un caso de (1 ^ ^ m ).