Está en la página 1de 13

4

Este captulo introduce el mecanismo de inferencia utilizado por la mayora de los sistemas 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 denitivos, dando lugar a la resolucin-SLD [13]. Este principio constituye el fundamento de la semntica operacional de los programas denitivos. La resolucin-SLD se demostrar correcta con respecto a la teora del modelo descrita en la clase anterior.

PRINCIPIO DE RESOLUCIN

La programacin lgica concierne el uso de la lgica (restringida a clusulas) para representar y resolver problemas. Este uso es ampliamente aceptado en Inteligencia Articial (IA), donde la idea se resume como sigue: Un problema o sujeto de investigacin puede describirse mediante un conjunto de frmulas bien formadas (fbf), de preferencia en forma de clusulas. Si tal descripcin es lo sucientemente 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 gustara 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 nito, 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 innita 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 |= fbf, y es una fbf arbitraria, es indecidible. , cuando es un conjunto nito arbitrario de

Observen que el problema es indecidible para conjuntos arbitrarios de fbf y para una fbf arbitraria. No existe un algoritmo que en un nmero nito 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 vericarlo en un nmero nito 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 nito 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 programacin lgica: el principio de resolucin propuesto por Robinson [21]. Si bien este procedimiento est orientado a un lenguaje ms expresivo, nosotros nos concentraremos en una versin del principio que aplica a programas denidos y se conoce como resolucin-SLD [13] (resolucin lineal con funcin de seleccin para clusulas denitivas).

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) 2. Derivar r(b) a partir de q(b) y r(b) p(a). 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

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 ejemplica que obtener completitud es sencillo, pero obtener completitud y correctez, no lo es.

41

Recordemos que los enunciados en los programas lgicos tienen la estructura general de la implicacin lgica: 1 , . . . , n (n > 0)

donde 0 , . . . , n son fbfs atmicas y 0 puede estar ausente (para representar clusulas meta). Consideren el siguiente programa denitivo 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) padre(X, Y) papa(juan, marta). recien_nacido(marta).

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

Observen que el programa describe nicamente conocimiento positivo, es decir, no especica quin no est orgulloso. Tampoco que signica para alguien no ser padre. Supongamos que deseamos contestar la pregunta Quin est orgulloso? Esta pregunta concierne al mundo descrito por nuestro programa, esto es, concierne al modelo previsto para . La respuesta que esperamos es, por supuesto, juan. Ahora, recuerden 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 denitiva 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 cuanticador 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 identicaremos como G1 . Un paso en nuestro razonamiento resulta en remplazar 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, vericamos 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))

por lo que G1 se reduce a:

43

papa(Z, Y), recien_nacido(Y). que identicaremos 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 existencia de algo, suponer lo contrario y usar modus ponens y la regla de eliminacin del cuanticador universal, para encontrar un contra ejemplo al supuesto. Observen que la meta denitiva 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 clusula 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 unicador. 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 denitivos. Como mencionamos, el procedimiento combina modus ponens, eliminacin del cuanticador universal y en el paso nal un reductio ad absurdum. Cada paso de razonamiento produce una substitucin, si se prueba en k pasos que la meta denida 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 uniquen con el tomo seleccionado. Otra fuente de indeterminismo es la existencia de unicadores alternativos para dos tomos. Esto sugiere que es posible construir muchas soluciones (algunas veces, una cantidad innita de ellas). Por otra parte, es posible tambin que el atomo seleccionado no unique con ninguna clusula en el programa. Esto indica que no es posible construir un contra ejemplo para la meta denida 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 cuanticadas universalmente, 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 cualquier 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)) Denicin 26 (Substitucin) Una substitucin es un conjunto nito 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 substituye 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 identidad 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 restriccin de la segunda substitucin sobre {X, Z} es {X/a, Z/f(a)}. Denicin 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 signica que las variables en las expresiones sern remplazadas de acuerdo a la substitucin. Denicin 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 nito de expresiones, entonces denota {1 , . . . , n }.

Ejemplo 9 Sea la expresin p(Y, f(X)) y sea la substitucin {X/a, Y/g(g(X))}. La ocurrencia de por es = p(g(g(X)), f(a). Observen que X e Y son simultneamente remplazados 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. Denicin 29 (Composicin) Sean = {X1 /s1 , . . . , Xm /sm } y dos substituciones. Consideren la secuencia: = {Y1 /t1 , . . . Yn /tn }

45

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 ligaduras 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 = . Denicin 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 , se cumplen: 1. = = 2. () = ( ) 3. ) = ( ) y substituciones. Las siguientes relaciones =

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 unicacin y posee una solucin algortmica. Denicin 31 (Unicador) Sean y trminos. Una substitucin tal que y idnticos ( = ) es llamada unicador 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} Denicin 32 (Generalidad entre substituciones) Una substitucin se dice ms general que una substitucin , si y slo si existe una substitucin tal que = . Denicin 33 (MGU) Un unicador se dice el unicador ms general (MGU) de dos trminos, si y slo si es ms general que cualquier otro unicador entre esos trminos. Denicin 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 unicador 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. Denicin 35 (Equivalencia en conjuntos de ecuaciones) Dos conjuntos de ecuaciones E1 y E2 se dicen equivalentes, si tienen el mismo conjunto de unicadores. La denicin 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: sean

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

Algoritmo 1 Unica(E)
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19:

47

function Unifica(E) . E es un conjunto de ecuaciones repeat (s = t) seleccionar(E) if f(s1 , . . . , sn ) = f(t1 , . . . , tn ) (n > 0) then remplazar (s = t) por s1 = t1 , . . . , sn = tn else if f(s1 , . . . , sm ) = g(t1 , . . . , tn ) (f/m 6= g/n) then return(fallo) else if X = X then remover la X = X else if t = X then remplazar t = X por X = t else if X = t then if subtermino(X,t) then return(fallo) else remplazar todo X por t end if end if until No hay accion posible para E 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 embargo, el computar subtermino(X, t) (vericacin de ocurrencia) hace que el algoritmo sea altamente ineciente. Los sistemas Prolog resuelven este problema hacindo caso omiso de la vericacin de ocurrencia. El standard ISO Prolog (1995) declara que el

48

resultado de la unicacin es no decidible. Al eliminar la vericacin 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 substitucin {X/f(1)}. Si bien esto parece resolver el problema de eciencia, generaliza el concepto de trmino, substitucin y unicacin al caso del innito, 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 ^^ 8(1 ^ ^ i-1 ^ 1 ^ ^ n ^ i+1 ^ ^ m )
n)

o, de manera equivalente, usando la notacin de los programas denitivos: 1 , . . . , i-1 , i , i+1 , . . . , m 0 1, . . . , (1 , . . . , i-1 , 1 , . . . , n , . . . , m ) donde: 1. 1 , . . . , m son fbf atmicas. 2.
0 1, . . . , 0) n n

es una clusula denitiva en el programa

(n > 0).

3. MGU(i ,

= .

La regla tiene dos premisas: una meta y una clusula denitivas. Observen que cada una de ellas est cuanticada universalmente, por lo que el alcance de los cuanticadores es disjunto. Por otra parte, solo hay un cuanticador 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 cuanticadas, es siempre posible renombrar las variables de la clusula denitiva para cumplir con esta condicin. La meta denida puede incluir muchas fbf atmicas que unican con la cabeza de alguna clusula en el programa. En este caso, es deseable contar con un mecanismo determinista para seleccionar un tomo i a unicar. Se asume una funcin que selecciona una submeta de la meta denida (funcin de seleccin). La regla de inferencia presentada es la nica necesaria para procesar programas denitivos. Esta regla es una versin de la regla de inferencia conocida como principio de resolucin, introducido por J.A. Robinson en 1965. El principio de resolucin aplica a clusulas. Puesto que las clusulas denitivas son ms restringidas que las clusulas, la forma de resolucin presentada se conoce como resolucin-SLD (resolucin lineal para clusulas denitivas con funcin de seleccin). El punto de partida de la aplicacin de esta regla de inferencia es una meta denida G0 : 1 , . . . , m (m > 0)

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 unica con i , resultando en 1 . G1 tiene la forma: (1 , . . . , i-1 ,
1, . . . , n , . . . , m )1

. -

49

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 unicable con la cabeza de una clusula del programa). 2. cuando Gi = (meta vaca = f). Denicin 36 (Derivacin-SLD) Sea G0 una meta denitiva, un programa denitivo y R una funcin de seleccin. Una derivacin SLD de G0 (usando y R) es una secuencia nita o innita 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 composicin 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 denida clase anterior. orgulloso(Z) y el programa discutido en la

G0 =

orgulloso(Z). padre(X0 , Y0 ), recien_nacido(Y0 ).

0 = orgulloso(X0 )

La unicacin de orgulloso(Z) y orgulloso(X0 ) nos da el MGU 1 = {X0 /Z}. Asumamos 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 ). papa(X1 , Y1 ).

1 = padre(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 = G3 = 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). Denicin 37 (Refutacin SLD) Una derivacin SLD nita: G0
0

papa(Z, Y0 ), recien_nacido(Y0 ). recien_nacido(marta).

2 = papa(juan, marta). 3 = recien_nacido(marta).

G1 . . . Gn-1

n-1

Gn

donde Gn = , se llama refutacin SLD de G0 . Denicin 38 (Derivacin fallida) Una derivacin de la meta denitiva G0 cuyo ltimo elemento no es la meta vaca y no puede resolverse con ninguna clusula del programa, es llamada derivacin fallida. Denicin 39 (Arbol-SLD) Sea un programa denitivo, G0 una meta denitiva, y R una funcin de seleccin. El rbol-SLD de G0 (usando y R) es un rbol etiquetado, posiblemente innito, 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 ) recien_nacido(marta) mama(Z, Y0 ), recien_nacido(Y0 )

Denicin 40 (Consistencia) Sea un programa denitivo, 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 . Denicin 41 (Complecin) Sea un programa denitivo, R una funcin de seleccin y 1 , . . . , m una meta denitiva. 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 ).

. -

51