Notas sobre programaci´ on on l´ ogica ogica Edelmira Pasarella Mayo del 2004
1
´ Indice 1. Definiciones b´ asicas
3
2. Sem´ antica de los programas l´ ogicos
4
3. Resoluci´ on SLD
6
4. B´ usqueda y backtracking
9
2
1.
Definiciones b´ asicas
atomos y x 1 . . . xs las variables que Definici´ on 1 S ean A 1 . . . An , B1 . . . Bm ´ ocurren en esos ´atomos. 1. Un literal es una f´ormula at´ omica o su negaci´on. Las f´ormulas at´ omicas son llamadas literales positivos y sus negaciones, literales negativos. 2. Una cl´ ormula de la forma ausula es una f´
∀x1 . . . ∀xs (A1 ∨ . . . ∨ An ∨ ¬B1 ∨ . . . ∨ ¬Bm ) 3. Una cl´ausula es una cl´ ausula de Horn si contiene a lo sumo un literal positivo. 4. Una cl´ ausula con exactamente un ausula de programa es una cl´ literal positivo. Si una cl´ausula de programa contiene al menos un literal negativo es una regla:
∀x1 . . . ∀xs (A ∨ ¬B1 ∨ . . . ∨ ¬Bm ) ≡ ∀x1 . . . ∀xs (A ← B1 ∧ . . . ∧ Bm ) De otro modo, es un hecho:
∀x1 . . . ∀xs A 5. Un objetivo es una cl´ausula que no tiene literales positivos. Es decir,
∀y1 . . . ∀ys (¬B1 ∨ . . . ∨ ¬Bm ) ≡ ¬∃y1 . . . ∃ys (B1 ∧ . . . ∧ Bm) 6. Una cl´ ausula cuya forma clausal viene dada ausula definida es una cl´ por una secuencia de literales. Es decir, el orden en el cual ocurren los literales en la cl´ausula es importante. 7. Un programa l´ ausulas ogico definido es un conjunto finito de cl´ definidas de programa.
3
Para simplificar, en el resto de este documento cuando hablamos de cl´ausulas y programas nos referimos a cl´ausulas y programas definidos, respectivamente. Adem´as, utilizaremos la siguiente notaci´ on: Notaci´ on
1. Hechos (o cl´ausulas unitarias): A ← 2. Reglas:A←B1 , . . . , Bm A se llama la cabeza y B1 , . . . , Bm la cola de la regla (cl´ausula), respectivamente. 3. Objetivos: ←A1 . . . , Ak
2.
Sem´ antica de los programas l´ ogicos
La sem´antica da significado a los programas y nos permite describir formalmente lo que calculan. Hay tres maneras bien conocidas de dar significado o sem´antica a los programas l´ogicos: la sem´antica declarativa, la sem´antica operacional y la sem´antica denotacional (com´ unmente llamada sem´antica de punto fijo). En esta secci´on presentamos algunas nociones y teoremas b´ asicos relacionados a la sem´antica de los programas l´ogicos definidos (para mayor detalle, ver [2, 1, 4, 5]). Donde sea posible seguiremos la terminolog´ıa de Lloyd [4]. Definici´ on 2 S ea L un lenguaje de primer orden.
1. El universo de Herbrand de L, denotado HL , es el conjunto de todos los t´erminos de base que pueden formarse a partir de las constantes y los s´ımbolos de funci´on que ocurren en L . Sea L = { 0,suc,nat} donde 0 es una constante, suc es un s´ımbolo de funci´on de aridad 1 y nat es un predicado de aridad 1. En los pr´oximos tres ejemplos nos referiremos a este lenguaje. El universo de Herbrand de L es: HL = { 0,suc(0),suc(suc(0), . . . , s u ci (0), . . .} Ejemplo
2. La base de Herbrand de L, denotada B L , es el conjunto de todos los ´atomos que pueden formarse a partir de los predicados que ocurren en L y los t´erminos en H L .
4
La base de Herbrand de L es: B L = { nat(0),nat(suc(0)), . . . , n a t(suci (0)), . . .}. Ejemplo
3. Una estructura A para L es una estructura de Herbrand si su dominio es HL y, para cada s´ımbolo de funci´ on f de L y elementos t1 . . . , tn de A, f A (t1 , . . . , tn ) = f (t1 , . . . , tn ). Para cada constante c en L, c A = c. Ejemplo
Una estructura de Herbrand para L es: donde 0A = 0 y sucA (t) = suc(t) para todo
HL , 0A ,sucA , B L ,
A = t ∈ HL .
4. Si Γ un conjunto de sentencias, un modelo de Herbrand de Γ es una estructura de Herbrand que es un modelo para Γ. Debido a que en los modelos de Herbrand la interpretaci´on de las constantes y los s´ımbolos de funci´on son fijas, es posible identificar un modelo de Herbrand con un subconjunto de la base de Herbrand.
Consideremos un programa l´ogico P . P induce un lenguaje de primer orden donde las constantes, los s´ımbolos de funci´on y los predicados son, respectivamente, las constantes, los s´ımbolos de funci´on y los predicados que ocurren en P . Entonces, podemos hablar del universo de Herbrand de P , denotado HP . Asimismo podemos hablar de la base de Herbrand de P , denotada B P . Ejemplo
Sea P el siguiente programa: p(a)← p(b)← q (a)← r(f (x))← p(x), q (x)
El universo y la base de Herbrand de P son, respectivamente:
HP = { a,b,,f (a), f (b), f (f (a)), f (f (b)), f (f (f (a))), . . .} B P = { p(a), p(b), q (a), q (b), p(f (a)), p(f (b)), q (f (a)), p(f (b)), p(f (f (a))), p(f (f (b))), q (f (f (a)), q (f (f (b)) . . .}
5
Desde el punto de vista l´ogico, un programa P puede verse como una teor´ıa l´ogica formada por las cl´ausulas del programa. Los modelos de Herbrand de esta teor´ıa son considerados los modelos del programa P . Por ejemplo, la base de Herbrand del programa P , B P , es un modelo de P . Sem´ antica declarativa.
Entre las estructuras de Herbrand que son modelos de P , se destaca el que contiene exactamente los ´atomos que son consecuencia l´ogica de P . Este modelo corresponde al significado “entendido” o “est´ andar” del programa y es llamado el modelo m´ınimo de P , M P . El modelo M P se define como sigue: M P = { A ∈ B P : P |= A } Ejemplo
El modelo m´ınimo del programa P es: M P = { p(a), p(b), q (a), r(f (a))}
a definida por el proceso de inferencia utiSem´ antica operacional. Est´ lizado para probar que un objetivo puede ser derivado del programa. En la pr´ oxima secci´on estudiaremos en detalle este punto. Esta sem´ antica asigna significado a un programa asoci´ andole un funci´ on sobre el dominio calculado por el programa. El significado viene dado entonces por el punto fijo de la funci´on, si existe. En este documento no entramos en detalle de este tema (remitimos al lector interesado a [7]). Sem´ antica denotacional.
3.
Resoluci´ on SLD
La sem´antica operacional est´ andar de los programas l´ogicos est´a dada por un procedimiento de refutaci´on basado en la regla de resoluci´on, llamado resoluci´ on SLD [2], definido originalmente por Kowalski [3]. Resoluci´on SLD significa “Linear resolution with Selection function for Definite clauses”. on de selecci´on, llamada regla de computaci´ Definici´ on 3 La funci´ on, es una funci´ on que va de un conjunto de objetivos a un conjunto de ´atomos de forma tal que el valor de la funci´on para un objetivo es un ´atomo, llamado el a ´tomo seleccionado en ese objetivo.
6
Definici´ on 4 S ea P un programa, G = ←A1 ,...,A j ,...,An (n ≥ 1) y R una
regla de computaci´on. 1. Supongamos que R(G) = A j y C = A←B1 ,...,Bk es una cl´ausula de programa con las variables renombradas. Si A y A j son unificables con unificador m´as general (umg) θ, entonces el objetivo G = ←(A1 ,...,A j −1 , B1 ,...,Bk , A j +1 ,...,An )θ es derivado de G y C v´ıa R usando θ. Tambi´en podemos decir que G es SLD-derivado de G en P v´ıa R usando θ. Es decir, G es un resolvente de las cl´ausulas G y C . 2. Una SLD-derivaci´ on de G con respecto a P v´ıa R es una secuencia (posiblemente infinita) G0 , θ0 , G1 , θ1 ,..., donde G = G0 , θ0 es la sustituci´ on identidad y Gi+1 se deriva de Gi y alguna cl´ausula en P v´ıa R usando θ i+1. En general, llamamos SLD-derivaci´ on a una SLDderivaci´on v´ıa una regla de computaci´ on. Una SLD-derivaci´on puede tener ´exito o fallar. 3. Una SLD-derivaci´ on con ´ exito es una SLD-derivaci´on finita que finaliza con la cl´ausula vac´ıa. En este caso la SLD-derivaci´on se llama una SLD-refutaci´ on. Una SLD-derivaci´ on con fallo es una SLDderivaci´on finita que finaliza con un objetivo diferente a la cl´ausula vac´ıa en el cual el ´atomo seleccionado por la regla de computaci´on utilizada no unifica con la cabeza de ninguna de las cl´ausulas del programa. 4. Sea G0 , θ0 , ..., Gn , θn una SLD-refutaci´o n de G con respecto a P donde G = G 0 . La SLD-respuesta calculada de G con respecto a P se define como θ = θ1 ...θn |var (G) 1 . Esto es, θ es la composici´on de los umg’s utilizados en la SLD-refutaci´on considerada, restringida a las variables que ocurren libres en G.
La resoluci´on SLD es independiente de la regla de computaci´on. Esto es, si P ∪ {G} es insatisfactible, encontraremos una refutaci´on utilizando cualquier regla de computaci´ on. En lo sucesivo, sin p´erdida de generalidad, suponemos que la regla de computaci´on selecciona el primer literal en el objetivo. Por convenci´on, en los ejemplos subrayamos el literal seleccionado por la regla de computaci´on en cada caso. 1
var (G) es el conjunto de variables que ocurren libres en G y la notaci´ on θ1 ...θ n |var (G) representa la restricci´ on de la sustituci´on resultante de la composici´on θ 1 ...θn a las variables que aparecen en var (G).
7
Ejemplo
1. Sea G = ← r(f (a)), la siguiente derivaci´on es una refutaci´on de G con respecto a P ,
←r(f (a)), , ← p(a), q (a), {a/x}, ←q (a), , , En esta refutaci´on la respuesta calculada es debido que la variable x no ocurre en el objetivo. 2. Sea G = ← r(f (x)), la siguiente derivaci´on es una refutaci´on de G con respecto a P .
←r(f (x)), , ←( p(y), q (y)), {y/x }, ←q (a), {a/y }, , con respuesta calculada θ = { y/x }{a/y}|{x} = { a/x} 3. Sea G = ←r(x), la siguiente derivaci´on es una refutaci´o n de G con respecto a P .
←r(x), , ←( p(y), q (y)), {f (y)/x}, ←q (a), {a/y }, , con respuesta calculada θ = { f (y)/x}{a/y }|{x} = { f (a)/x} Correcci´ on y completitud
Sea G = ← B1 ,...,Bm un objetivo. Desde el punto de vista l´ogico, una respuesta de G con respecto a un programa l´ogico P es una sustituci´on para var(G). Sea θ una respuesta de G con respecto una respuesta com a P , θ es ∀ ∀ rrecta de G con respecto a P si P |= (( i=1 Bi )θ) . Su contrapartida desde el punto de vista procedimental es la noci´on de SLD-respuesta calculada. Clark estableci´ o la correcci´on y la completitud de la SLD-resoluci´on relacionando las respuestas correctas (salida declarativa) y las SLD-respuestas calculadas (salida procedural). Abajo presentamos los correspondientes teoremas. de correcci´ on) Sea P un programa y G un objetivo. Entonces, cada SLD-respuesta calculada de G con respecto a P es una respuesta correcta de G con respecto a P . Teorema 1 (Teorema
8
de Completitud) Sea P un programa y G un objetivo. Para cada respuesta correcta θ de G con respecto a P , hay una SLDrespuesta calculada θ1 de G con respecto a P y una sustituci´on σ tal que θ = θ 1 σ. Teorema 2 (Teorema
El teorema de completitud nos dice que cada respuesta correcta de un objetivo G con respecto a un programa P es una instancia de una respuesta calculada de G con respecto a P . Para ilustrar esta propiedad consideremos el siguiente ejemplo. Sea P = { menor(0,suc(x))←}. Tenemos que P |= menor(0, y){suc(suc(0))/y}. Esto es, θ = { suc(suc(0))/y } es una respuesta correcta de ←menor(0, y) con respecto a P . Una SLDrespuesta calculada de ←menor(0, y) con respecto a P es {suc(x)/y} y tenemos entonces que θ = { suc(x)/y }{suc(0)/x}. Ejemplo
4.
B´ usqueda y backtracking
A continuaci´ on presentamos conceptos relacionados con los procedimientos que implementan la SLD-resoluci´on. Lo primero que hay que decir es que el espacio de b´usqueda para SLD-refutaciones viene dado por una estructura de ´arbol conocido como SLD-´arbol. Para ampliar detalles remitimos al lector a [5, 6]. arbol tal Definici´ on 5 U n SLD-´ arbol de G con respecto a P v´ıa R es un ´ que cada nodo es un objetivo (que podr´ıa ser la cl´ausula vac´ıa), cuya ra´ız es G. Sea ←A1 ,...,A j ,...,An (n ≥ 1) un nodo de un SLD-´arbol. Supongamos que R(←A1 ,...,A j ,...,An ) = A j . Entonces, para cada cl´ausula del programa P , A ← B 1 ,...,Bk tal que A j y A son unificables con umg θ, el nodo tiene un hijo ←(A1 ,...,Aj 1 , B1 ,...,Bk , Aj +1 , ..., An )θ. La cl´ausula vac´ıa, si ocurre en el ´arbol, no tiene hijos. −
Es importante destacar aqu´ı la independencia de la regla ya que permite reducir sustancialmente el espacio de b´usqueda al poder fijar una regla de computaci´ on a priori y usarla para construir el SLD-´arbol. Ejemplo
Consideremos el programa P 1 = P ∪ {r(x)←q (x)}, es decir,
9
(1) (2) (3) (4) (5)
p(a)← p(b)← q (a)← r(f (x))← p(x), q (x) r(x)←q (x)
y el objetivo G = ←r(x). El SLD-´arbol de G con respecto a P 1 es el siguiente: ←r(x)
←( p(y), q (y)){f (y)/x} ←(q (y)){a/y}
←q (y){y/x }
←(q (y)){b/y }
{y/x }{a/y }
{f (y)/x}{a/y }
Note que cada camino del ´arbol SLD corresponde a una derivaci´ on SLD. A continuaci´ on presentamos las derivaciones del ´arbol de arriba: I
II
III
←r(x)
←r(x)
←r(x)
| (4) | ←( p(y), q (y)){f (y)/x} | (1) | ←(q (y)){a/y} | (3) | {f (y)/x}{a/y }
| (4) | ←( p(y), q (y)){f (y)/x} | (2) | ←(q (y)){b/y }
| (5) | ←q (y){y/x } | (3) | {y/x }{a/y }
10
Las derivaciones I y III son refutaciones mientras que II es una derivaci´on con fallo. En la implementaci´on de la SLD-resoluci´on, adem´ as de la unificaci´on, hay dos problemas importantes a resolver: Definir la regla de computaci´on. En las implementaciones de Prolog, la regla de computaci´ on selecciona siempre el literal m´as a la izquierda del objetivo considerado. Cu´al cl´ausula del programa utilizar2 para resolver con el literal seleccionado. En las implementaciones de Prolog, las cl´ausulas se escogen siguiendo el orden en el cual aparecen listadas en el programs. Ejemplo
Sea programa P 2 : (1) (2) (3) (4)
p(b)← p(a)← q (x)←r(x) r(b)←
y el objetivo ← p(x), q (x). La regla de computaci´on selecciona el literal p(x) y comienza tratando de resolver con la cl´ausula (1). El esquema generado por la regla de computaci´on y la escogencia de la cl´ausula de programa para aplicar la regla de resoluci´on se traduce en un recorrido en profundidad del SLD-´arbol correspondiente. Esto es, la b´ usqueda de una refutaci´on de un objetivo G con respecto a un programa P , se inicia siempre por el camino m´as a la izquierda del SLD-´ arbol de G con respecto a P (asumiendo que este ´arbol refleja el orden en el que ocurren las cl´ausulas en el programa P ). 2
Recordemos que en realidad se utilizan variantes de las cl´ausulas de programa.
11
Consideremos el SLD-´arbol de ← p(x), q (x) con respecto al programa P 2 : Ejemplo
← p(x), q (x) ←q (x){b/x}
←q (x){a/x}
r(u){b/u}
r(u){a/u}
En este ´a rbol, el camino m´ a s a la izquierda es una refutaci´ o n de ← p(x), q (x) con respecto a P 2 . Veamos ahora qu´ e sucede si modificamos el orden de las cl´ausulas (1) y (2) del P 2 : (1) (2) (3) (4)
p(a)← p(b)← q (x)←r(x) r(b)←
Llamemos a este programa P 3 . El SLD-´arbol de ← p(x), q (x) con respecto a P 3 es: ← p(x), q (x) ←q (x){a/x}
←q (x){b/x}
r(u){a/u}
r(u){b/u}
En este ´arbol, a diferencia del anterior, la refutaci´on viene dada por el camino m´ as a la derecha. Prolog, intenta conseguirla probando por el camino m´ as a la izquierda y falla. Qu´e hace entonces para encontrar otro camino que le d´e una refutaci´on (si la hay)? En esta situaci´on de fallo, Prolog utiliza un mecanismo llamado bactracking que, en este caso, consiste en devolverse en el camino considerado hasta encontrar un nodo con una rama a la derecha. Si se encuentra 12
tal nodo, se reintenta por esta rama tomando siempre el camino m´a s a la izquierda. Prolog realiza backtracking hasta encontrar un camino con ´exito, si lo hay. N´otese que en la medida que Prolog hace backtracking las sustituciones que se hab´ıan obtenido por el camino que fall´o se van deshaciendo tambi´ en para reconstruirlas en el nuevo intento. Veamos esto en el ´arbol de on { b/x}. ← p(x), q (x) con respecto a P 3 obteniendo la sustituci´ Al llegar al nodo r(u){a/u} no hay ninguna cl´ausula cuya cabeza unifique con r(a), falla y se devuelve al nodo ← q (x){a/y} deshaciendo la sustituci´on. En este nodo no hay ramas a la derecha para explorar. Entonces, se devuelve otra vez y llega al nodo ra´ız, es decir, ← p(x), q (x). Reintenta nuevamente con otra cl´ausula cuya cabeza unifique con p(x) y encuentra la cl´ausula (2) y sigue ”‘bajando”’ por esta rama hasta llegar a la cl´ausula , con lo cual, finalmente encuentra una refutaci´on de ← p(x), q (x) con respecto a P 3 . En los SLD-trees pueden ocurrir ramas infinitas. Para ver esto basta considerar el SLD-´arbol del objetivo ← p con respecto al programa { p← p}. El estudio de este t´opico est´a fuera del alcance de este documento por lo que remitimos al lector a [4]. Para terminar esta secci´on presentamos un int´erprete abstracto para programas l´ogicos [6]:
Un objetivo G y un programa P Una instancia de G que es una consecuencia l´ogica de P , o no en caso contrario Algoritmo: Inicializa el resolvente con G mientras el resolvente no sea vac´ıo hacer escoger un literal A del resolvente escoger una variante de una cl´ausula A ←B1 , . . . , Bn de P tal que A y A unifiquen con umg θ (si no existe tal cl´ausula, salir del lazo mientras reemplazar A por B 1 , . . . , Bn en el resolvente aplicar θ al resolvente y a G fin-mientras si el resolvente es vac´ıo entonces dar como salida G sino dar como salida no Entrada: Salida:
13
Ejercicios
1. Sea P un programa. Demuestre que la estructura de Herbrand vac´ıa (∅ ⊂ B P ) es un modelo de P si, y s´olo si, cada regla en P tiene una cola no vac´ıa. Es decir, P no contiene hechos. 2. Demuestre que B P es un modelo de P para todo programa P . 3. Considere el siguiente programa: (1) q (a)← (2) r(b)← (3) p(x)←r(x) a ) D´e el lenguaje subyacente. b) D´ e el universo y la base de Herbrand correspondientes. c ) D´e el modelo m´ınimo. d ) D´e un modelo de Herbrand que sea diferente al modelo m´ınimo y a la base de Herbrand. 4. Considere el siguiente programa: (1) sum(x, 0, x)← (2) sum(x,suc(y),suc(z))←sum(x,y,z) a ) D´e el lenguaje subyacente. b) D´ e el universo y la base de Herbrand correspondientes. c ) D´ e un modelo de Herbrand que sea diferente a la base de Herbrand. 5. Considere el siguiente programa en Prolog: (1) pertenece(X, [X | ]). (2) pertenece(X, [ |L]) : − pertenece(X, L). D´e el SLD-´arbol de la consulta ? − pertenece(X, [a,b,c]). con respecto al programa de arriba. Simule la b´usqueda de la resoluci´on que har´ıa Prolog. Cu´ al es la sustituci´on resultante para X ? Hay otras? Si la respuesta es s´ı, c´omo podr´ıamos obtenerlas?
14
6. Considere el siguiente programa en Prolog: (1) conc([ ], L , L). (2) conc([X |L1], L2, [X |L3]) : − conc(L1, L2, L3). D´e el SLD-´arbol de la consulta ? − conc(L1, L2, [a,b,c]). con respecto al programa de arriba. Simule la b´usqueda de la resoluci´on que har´ıa Prolog. D´e todas las posibles respuestas calculadas. 7. Considere el universo y la base Herbrand para los programas de los ejercicios 5 y 6. D´ e ejemplos de respuestas correctas y de respuestas calculadas. Discuta al respecto y d´e conclusiones.
15
Referencias [1] K. R. Apt. Logic programming. In J.van Leeuwen., editor, Handbook of Theoretical Computer Science , pages 493–574. Elsevier Science Publishers B.V., 1990. [2] K. R. Apt and M.H. van Emden. Contributions to the theory of logic programming. The Journal of ACM , 29(3):841–862, 1982. [3] R.A. Kowalski. Predicate logic as a programming language. Information Processing Letters 74, pages 569–574, 1974. [4] J. W. Lloyd. Foundations of Logic Programming . Springer-Verlag, 2nd edition, 1987. [5] Anil Nerode and Shore Richard A. Logic for applications. SpringerVerlag, 1993. [6] L. Sterling and EG. Shapiro. The art of Prolog . The MIT Press, 1994. [7] van Emden, M.H. and R.A. Kowalski. The semantics of predicate logic as a programming language. Journal of ACM , 23(4):733–742, 1976.
16