Академический Документы
Профессиональный Документы
Культура Документы
Edelmira Pasarella
1
Índice
1. Definiciones básicas 3
3. Resolución SLD 6
4. Búsqueda y backtracking 9
2
1. Definiciones básicas
Definición 1 Sean A1 . . . An , B1 . . . Bm átomos y x1 . . . xs las variables que
ocurren en esos átomos.
∀x1 . . . ∀xs A
6. Una cláusula definida es una cláusula cuya forma clausal viene dada
por una secuencia de literales. Es decir, el orden en el cual ocurren los
literales en la cláusula es importante.
3
Notación Para simplificar, en el resto de este documento cuando hablamos
de cláusulas y programas nos referimos a cláusulas y programas definidos,
respectivamente. Además, utilizaremos la siguiente notación:
2. Reglas:A←B1 , . . . , Bm
A se llama la cabeza y B1 , . . . , Bm la cola de la regla (cláusula), re-
spectivamente.
3. Objetivos: ←A1 . . . , Ak
4
Ejemplo La base de Herbrand de L es:
BL = {nat(0), nat(suc(0)), . . . , nat(suci (0)), . . .}.
3. Una estructura A para L es una estructura de Herbrand si su
dominio es HL y, para cada sı́mbolo de función f de L y elementos
t1 . . . , tn de A, f A (t1 , . . . , tn ) = f (t1 , . . . , tn ). Para cada constante c en
L, cA = c.
p(a)←
p(b)←
q(a)←
r(f (x))←p(x), q(x)
BP = {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
Semántica declarativa. Desde el punto de vista lógico, un programa P
puede verse como una teorı́a lógica formada por las cláusulas 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 , BP , es un
modelo de P .
3. Resolución SLD
La semántica operacional estándar de los programas lógicos está dada
por un procedimiento de refutación basado en la regla de resolución, llama-
do resolución SLD [2], definido originalmente por Kowalski [3]. Resolución
SLD significa “Linear resolution with Selection function for Definite claus-
es”.
6
Definición 4 Sea P un programa, G = ←A1 , ..., Aj , ..., An (n ≥ 1) y R una
regla de computación.
1. Supongamos que R(G) = Aj y C = A←B1 , ..., Bk es una cláusula
de programa con las variables renombradas. Si A y Aj son unifica-
bles con unificador más general (umg) θ, entonces el objetivo G0 =
←(A1 , ..., Aj−1 , B1 , ..., Bk , Aj+1 , ..., An )θ es derivado de G y C vı́a
R usando θ. También podemos decir que G0 es SLD-derivado de G
en P vı́a R usando θ. Es decir, G0 es un resolvente de las cláusulas G
y C.
2. Una SLD-derivación de G con respecto a P vı́a R es una secuencia
(posiblemente infinita) hG0 , θ0 i, hG1 , θ1 i, ..., donde G = G0 , θ0 es la
sustitución identidad y Gi+1 se deriva de Gi y alguna cláusula en P
vı́a R usando θi+1 . En general, llamamos SLD-derivación a una SLD-
derivación vı́a una regla de computación. Una SLD-derivación puede
tener éxito o fallar.
3. Una SLD-derivación con éxito es una SLD-derivación finita que
finaliza con la cláusula vacı́a. En este caso la SLD-derivación se llama
una SLD-refutación. Una SLD-derivación con fallo es una SLD-
derivación finita que finaliza con un objetivo diferente a la cláusula
vacı́a en el cual el átomo seleccionado por la regla de computación
utilizada no unifica con la cabeza de ninguna de las cláusulas del pro-
grama.
4. Sea hG0 , θ0 i, ..., hGn , θn i una SLD-refutación de G con respecto a P
donde G = G0 . La SLD-respuesta calculada de G con respecto
a P se define como θ = θ1 ...θn |var(G) 1 . Esto es, θ es la composición
de los umg’s utilizados en la SLD-refutación considerada, restringida
a las variables que ocurren libres en G.
7
Ejemplo
Corrección y completitud
Sea G =← B1 , ..., Bm un objetivo. Desde el punto de vista lógico, una res-
puesta de G con respecto a un programa lógico P es una sustitución para
var(G). Sea θ una respuesta de G con respecto
Vm a P , ∀θ es una respuesta co-
∀
rrecta de G con respecto a P si P |= (( i=1 Bi )θ) . Su contrapartida des-
de el punto de vista procedimental es la noción de SLD-respuesta calculada.
Clark estableció la corrección y la completitud de la SLD-resolución rela-
cionando las respuestas correctas (salida declarativa) y las SLD-respuestas
calculadas (salida procedural). Abajo presentamos los correspondientes teo-
remas.
8
Teorema 2 (Teorema de Completitud) Sea P un programa y G un obje-
tivo. Para cada respuesta correcta θ de G con respecto a P , hay una SLD-
respuesta calculada θ1 de G con respecto a P y una sustitución σ tal que
θ = θ1 σ.
4. Búsqueda y backtracking
A continuación presentamos conceptos relacionados con los procedimien-
tos que implementan la SLD-resolución. Lo primero que hay que decir es que
el espacio de búsqueda para SLD-refutaciones viene dado por una estruc-
tura de árbol conocido como SLD-árbol. Para ampliar detalles remitimos al
lector a [5, 6].
9
(1) p(a)←
(2) p(b)←
(3) q(a)←
(4) r(f (x))←p(x), q(x)
(5) r(x)←q(x)
←r(x)
{f (y)/x}{a/y}
Note que cada camino del árbol SLD corresponde a una derivación SLD.
A continuación presentamos las derivaciones del árbol de arriba:
I II III
10
Las derivaciones I y III son refutaciones mientras que II es una derivación
con fallo.
Cuál cláusula del programa utilizar2 para resolver con el literal selec-
cionado. En las implementaciones de Prolog, las cláusulas se escogen
siguiendo el orden en el cual aparecen listadas en el programs.
(1) p(b)←
(2) p(a)←
(3) q(x)←r(x)
(4) r(b)←
11
Ejemplo Consideremos el SLD-árbol de ←p(x), q(x) con respecto al
programa P2 :
←p(x), q(x)
←q(x){b/x} ←q(x){a/x}
r(u){b/u} r(u){a/u}
(1) p(a)←
(2) p(b)←
(3) q(x)←r(x)
(4) r(b)←
←q(x){a/x} ←q(x){b/x}
r(u){a/u} r(u){b/u}
12
tal nodo, se reintenta por esta rama tomando siempre el camino más a la
izquierda. Prolog realiza backtracking hasta encontrar un camino con éxito,
si lo hay. Nótese que en la medida que Prolog hace backtracking las susti-
tuciones que se habı́an obtenido por el camino que falló se van deshaciendo
también para reconstruirlas en el nuevo intento. Veamos esto en el árbol de
←p(x), q(x) con respecto a P3 obteniendo la sustitución {b/x}.
En los SLD-trees pueden ocurrir ramas infinitas. Para ver esto basta
considerar el SLD-árbol del objetivo ←p con respecto al programa {p←p}.
El estudio de este tópico está fuera del alcance de este documento por lo
que remitimos al lector a [4]. Para terminar esta sección presentamos un
intérprete abstracto para programas lógicos [6]:
13
Ejercicios
(1) q(a)←
(2) r(b)←
(3) p(x)←r(x)
14
6. Considere el siguiente programa en Prolog:
15
Referencias
[1] K. R. Apt. Logic programming. In J.van Leeuwen., editor, Handbook of
Theoretical Computer Science, pages 493–574. Elsevier Science Publish-
ers 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.
[5] Anil Nerode and Shore Richard A. Logic for applications. Springer-
Verlag, 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