Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
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:
39
40
. ?
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:
, !
.
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(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:
(padre(Z, Y) ^ recien_nacido(Y))
o su equivalente:
8Z8Y(padre(Z, Y) _ recien_nacido(Y))
que es equivalente a:
papa(juan, marta).
as que slo resta probar que marta no es una recin nacida no se puede satisfacer
junto con :
recien_nacido(marta).
recien_nacido(marta).
(A1 , . . . Am )1 . . . k
|= (A1 ^ ^ Am )1 . . . k
44
.
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))
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)..
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)}.
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.
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.
Ejemplo 12
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
. -
El mtodo de razonamiento descrito informalmente al inicio de esta sesin, puede
resumirse con la siguiente regla de inferencia:
1 , . . . , i-1 , i , i+1 , . . . , m 0 1, . . . , n
(1 , . . . , i-1 , 1 , . . . , n , . . . , m )
donde:
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
0 n-1
G0 G1 . . . Gn-1 Gn
1 2 . . . n si n > 0
=
si n = 0
G0 = orgulloso(Z).
G1 = padre(Z, Y0 ), recien_nacido(Y0 ).
1 = padre(X1 , Y1 ) papa(X1 , Y1 ).
50
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:
padre(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 .