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

Cla usulas de Horn.

Resolucion SLD
1 / 114
Renando la resolucion
La resolucion general es un mecanismo muy potente de
demostracion...
pero tiene un alto grado de indeterminismo:
en la seleccion de las clausulas con las que hacer resolucion
y en la seleccion de los literales a utilizar en la resolucion
Desde el punto de vista computacional es muy ineciente.
Desde el punto de vista practico puede sacricarse algo de
expresividad y obtener un mecanismo mas eciente que sustente
un lenguaje de programacion mas realista:
restringimos la forma de las clausulas de modo que a lo sumo
tengan un literal positivo. En notacion de Kowalski esto quiere
decir que a lo sumo tienen un atomo en el lado izquierdo de
estudiaremos un metodo de resolucion especco para este
tipo de clausulas.
2 / 114
Clausulas de Horn
Una clausula de Horn es una secuencia de literales que contiene a
lo sumo un literal positivo. Al escribirla en notacion de Kowalski
tendra una de estas cuatro formas:
1
Hecho: p
2
Regla: p

cabeza
q
1
, . . . , q
n

cuerpo
3
Objetivo: q
1
, . . . , q
n
4

Exito:
Los hechos y las reglas se denominan clausulas denidas:
los hechos representan hechos acerca de los objetos (de
nuestro universo de discurso), relaciones elementales entre
estos objetos
las reglas expresan relaciones condicionales entre los objetos,
dependencias.
3 / 114
Clausulas de Horn (cont.)
Las reglas engloban todos los casos en el siguiente sentido:
un hecho es una regla con cuerpo vaco
un objetivo es una regla con cabeza vaca
y el exito es una regla con cabeza y cuerpo vacos
Notese que en las clausulas de Horn trabajamos con secuencias de
literales en vez de conjuntos (como venamos haciendo con las
clausulas generales). Esto implica dos cosas:
los literales pueden aparecer repetidos en el cuerpo
hay un orden en los literales del cuerpo (podemos hablar del
primer literal, segundo literal, etc).
4 / 114
Predicados y programas logicos
Un predicado p queda denido por el conjunto de cla usulas
(hechos y reglas) cuyas cabezas tienen ese smbolo de
predicado. As pues la denicion de un predicado en general
tendra el aspecto:
p(t
1
, . . . , t
n
)
p(s
1
, . . . , s
n
)
. . .
p(u
1
, . . . , u
n
) q
1
(. . .), . . . , q
m
(. . .)
p(u
1
, . . . , u
n
) r
1
(. . .), . . . , r
k
(. . .)
. . .
(puede haber solo hechos, solo reglas o ambos tipos).
Un programa logico es un conjunto de deniciones de
predicados (es decir, un conjunto de cla usulas denidas:
hechos y reglas).
5 / 114
Un ejemplo
Representacion de un grafo mediante hechos:
a
b
c d
e
arco(a, b)
arco(a, c)
arco(b, d)
arco(c, d)
arco(c, e)
arco(d, e)
6 / 114
Ejemplo (cont.)
La relacion de conexion entre nodos (caminos) puede expresarse
mediante reglas:
camino(X, Y) X = Y
camino(X, Y) arco(X, Z), camino(Z, Y)
(la primera regla, tambien se podra haber escrito como un hecho:
camino(X, X) )
La lectura de estas dos resglas es:
hay un camino de un nodo a otro, si son el mismo
hay un camino de un nodo X a otro Y si existe un nodo Z tal
que hay arco entre X y Z, y hay camino entre Z e Y
7 / 114
Ejemplo (cont.)
Ahora, se podra plantear un objetivo, i.e., entendiendo los hechos
y las reglas que hemos escrito como premisas podramos plantear
una conclusion y tratar de mostrar la validez de la argumentacion.
Por ejemplo, podemos plantear los objetivos (o preguntas):
arco(b, d)
camino(a, d)
camino(a, X)
camino(e, Y)
camino(X, Y)
camino(X, b), camino(X, d)
los dos primeros son objetivos cerrados porque no contienen
variables, mientras que los restantes son objetivos abiertos.
... que deberamos obtener (por resolucion) en cada caso?
8 / 114
Variables logicas en las clausulas
Todas las variables logicas en de una cla usula estan cuanticadas
universalmente de forma implcita. Por ejemplo, en la cla usula:
camino(X, Y) arco(X, Z), camino(Z, Y)
implcitamente tenemos:
X.Y.Z.(camino(X, Y) arco(X, Z), camino(Z, Y))
Ahora bien, esta sentencia es logicamente equivalente a:
X.Y.(camino(X, Y) Z.(arco(X, Z), camino(Z, Y)))
Es decir, las variables que solo aparecen a la derecha de la cla usula
estan localmente afectadas de una cuanticacion existencial. Se
dice que son variables existenciales o extra o locales. Interpretarlas
existencialemente facilita la lectura de la clausula:
Para todo X y todo Y, hay un camino entre X e Y si existe Z tal
que hay arco de X a Z y hay camino entre Z e Y
9 / 114
Otro ejemplo
Podemos denir la suma de naturales (representados como c y s)
mediante un hecho y una regla:
suma(c, X, X)
suma(s(X), Y, s(Z)) suma(X, Y, Z)
y plantear distintos objetivos:
suma(s(c), s(s(c)), s(s(s(c))))
suma(X, s(c), s(s(c)))
suma(s(c), Y, Z)
suma(X, Y, Z)
suma(X, X, Z), suma(Z, Z, H)
10 / 114
SLD-Resolucion
Selection-rule driven Linear resolution for Denite clauses
Es un caso particular de la resolucion general, donde:
Los resolventes son siempre objetivos (clausulas sin cabeza).
Los programas son conjuntos de cla usulas (de Horn) denidas,
i.e., hechos y reglas.
Hay una funcion de seleccion que selecciona un atomo del
resolvente a quien aplicar resolucion.
11 / 114
SLD-resolucion (cont.)
Formalmente:
Sea un programa logico P, un par de objetivos G y G

, y una
funcion de seleccion f
s
. Una derivacion de G a G

con
SLD-resolucion (P {G}
SLD
G

) es una secuencia de
objetivos G
0
, G
1
, . . . , G
k
tal que:
G
0
= G
G
k
= G

para todo i {0, ..., k 1}, G


i +1
de obtiene a partir de G
i
resolviendo (en el sentido de la resolucion general) el literal
L = f
s
(G
i
) con una variante de una regla de P.
Si G

, entonces tenemos una SLD-refutacion de G a


partir de P.
12 / 114
Ejemplo
Supongamos el programa (c representa cero y s sucesor):
suma(c, Y, Y)
suma(s(X), Y, s(Z)) suma(X, Y, Z)
y el objetivo suma(s(c), s(c), s(s(c))) (asumimos que f
s
selecciona el primer objetivo por la izquierda).
suma(s(c), s(c), s(s(c))) suma(s(X
1
), Y
1
, s(Z
1
)) suma(X
1
, Y
1
, Z
1
)
suma(c, s(c), s(c))

1
= [X
1
/c, Y
1
/s(c), Z
1
/s(c)]
suma(c, Y
2
, Y
2
)

2
= [Y
2
/s(c)]
13 / 114
Respuestas correctas
Dado un programa P y un objetivo G q
1
, . . . , q
n
, diremos que
una sustitucion es una respuesta correcta para P {G} si
unicamente act ua sobre las variables de G y
P |= X
1
. . . . .X
m
(q
1
. . . q
n
), siendo {X
1
, . . . , X
n
} el
conjunto de variables de G (notacion: P |= [(q
1
. . . q
n
)]

)
Por ejemplo, consideremos la siguiente refutacion:
G suma(c, s(A), B) suma(c, Y
1
, Y
1
)

1
= [Y
1
/s(A), B/s(A)]
La sustitucion obtenida,
1
, restringida a las variables del objetivo original G es

1
|
var (G)
= [B/s(A)] (la variable Y
1
no aparece en en G).
= [B/s(A)] es una respuesta correcta para G... por que?
14 / 114
Respuestas correctas (cont.)
= [B/s(A)] es una respuesta correcta para P {G}:
por un lado, aplicando tenemos suma(c, s(A), s(A))
y ahora, si consideramos cualquier otra sustitucion
tendremos que
P |= suma(c, s(A), s(A))
o lo que es lo mismo (ver pag. 27):
P |= A.suma(c, s(A), s(A))
P |= [suma(c, s(A), s(A))]

Intuitivamente, si reemplazamos A por cualquier valor lo que


obtenemos pertenecera al modelo de la primera cla usula de P
y por tanto al modelo de P (recordemos que en la pagina 53
estudiamos un modelo de Herbrand para este programa en el
que
suma
H
= {(s
m
(c), s
n
(c), s
k
(c)) | m + n = k}
15 / 114
Coreccion y completitud de la SLD-resolucion
Teorema
Sea P un programa, f
s
una funcion de seleccion y G un objetivo.
Tenemos:
Correccion: Si P {G}
SLD
en n pasos y =
1
. . .
n
es
la composicion de la secuencia de unicadores usados en la
SLD-refutacion, entonces:

= |
var(G)
es una respuesta correcta para P {G}
Completitud: Sea una respuesta correcta para P {G},
entonces existe una SLD-refutacion de G a partir de P con
una secuencia de unicadores
1
, . . . ,
n
tal que
= (
1
. . .
n
) |
var (G)
.
Notese que la funcion de seleccion concreta que se utilice no es
relevante para los resultados de correccion y completitud.
16 / 114
Ejemplo
Consideremos el programa de los caminos en un grafo:
arco(a, b)
arco(a, c)
arco(b, d)
arco(c, d)
arco(c, e)
arco(d, e)
camino(X, X)
camino(X, Y) arco(X, Z), camino(Z, Y)
Y consideremos el objetivo camino(X, e)
17 / 114
Ejemplo (cont.)
Una posible refutacion (tomando como funcion de seleccion la que
toma el primer literal por la izquierda):
camino(X, e) camino(X
1
, Y
1
) arco(X
1
, Z
1
), camino(Z
1
, Y
1
)
arco(X, Z
1
), camino(Z
1
, e)

1
= [X
1
/X, Y
1
/e]
arco(a, c)
camino(c, e)

2
= [X/a, Z
1
/c]
18 / 114
Ejemplo (cont.)
camino(c, e) camino(X
3
, Y
3
) arco(X
3
, Z
3
), camino(Z
3
, Y
3
)
arco(c, Z
3
), camino(Z
3
, e)

3
= [X
3
/c, Y
3
/e]
arco(c, e)
camino(e, e)

4
= [Z
3
/e]
camino(X
4
, X
4
)

5
= [X
4
/e]
19 / 114
Ejemplo (cont.)
La composicion de sustituciones obtenidas es:
=
1
. . .
5
= [X/a, X
1
/a, Y
1
/e, Z
1
/c, X
3
/c, Y
3
/e, Z
3
/e, X
4
/e]
Si consideramos la restriccion a las variables del objetivo original,
es decir, a X tenemos:

= |
{X}
= [X/a]
Por el teorema de correccion

= [X/a] es una respuesta


correcta para el objetivo original.
Por el teorema de completitud, este mecanismo debe ser
capaz de encontrar ademas otras respuestas. Intuitivamente es
facil ver que seran [X/b], [X/c], [X/d], [X/e]... como se
construiran las SLD-refutaciones para encontrar estas
respuestas?
20 / 114
Hacia Prolog
La resolucion SLD esta mucho mas proxima a una
implementacion realista de la programacion logica porque ha
acotado notablemente el indeterminismo con respecto a la
resolucion general.
Las cla usulas de Horn son lo sucientemente expresivas para
utilizarlas como lenguaje de programacion.
Quedan dos cuestiones por resolver:
Que funcion de seleccion utilizamos? (esto, seg un hemos visto
no afecta a la correccion y la completitud).
Que criterio seguimos para seleccionar una de las reglas
aplicables para resolver un objetivo? (esto, esta relacionado
con la completitud).
En el ultimo ejemplo, utilizando uno u otro criterio se obtienen
distintas respuestas.
21 / 114