Está en la página 1de 11

Clausulas de Horn.

Resolucion SLD

1 / 114

Refinando 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 resoluci on
y en la seleccion de los literales a utilizar en la resoluci
on
Desde el punto de vista computacional es muy ineficiente.

Desde el punto de vista practico puede sacrificarse algo de


expresividad y obtener un mecanismo mas eficiente 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 resoluci on especfico 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 notaci
on de Kowalski
tendra una de estas cuatro formas:
1 Hecho: p
2 Regla: p q1 , . . . , qn
|{z} | {z }
cabeza cuerpo
3 Objetivo: q1 , . . . , qn
4
Exito:
Los hechos y las reglas se denominan clausulas definidas:
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

N otese 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 definido por el conjunto de cla usulas
(hechos y reglas) cuyas cabezas tienen ese smbolo de
predicado. As pues la definici
on de un predicado en general
tendra el aspecto:
p(t1 , . . . , tn )
p(s1 , . . . , sn )
...
p(u1 , . . . , un ) q1 (. . .), . . . , qm (. . .)
p(u1 , . . . , un ) r1 (. . .), . . . , rk (. . .)
...
(puede haber solo hechos, solo reglas o ambos tipos).
Un programa logico es un conjunto de definiciones de
predicados (es decir, un conjunto de cla
usulas definidas:
hechos y reglas).
5 / 114

Un ejemplo

Representacion de un grafo mediante hechos:

a b
arco(a, b)
arco(a, c)
arco(b, d)
c 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 resoluci
on) en cada caso?
8 / 114
Variables logicas en las clausulas
Todas las variables logicas en de una cla
usula estan cuantificadas
universalmente de forma implcita. Por ejemplo, en la clausula:
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 l
ogicamente 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 clausula


estan localmente afectadas de una cuantificaci on 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 definir 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 Definite clauses

Es un caso particular de la resoluci


on general, donde:
Los resolventes son siempre objetivos (clausulas sin cabeza).
Los programas son conjuntos de cla
usulas (de Horn) definidas,
i.e., hechos y reglas.
Hay una funcion de seleccion que selecciona un atomo del
resolvente a quien aplicar resoluci
on.

11 / 114

SLD-resolucion (cont.)

Formalmente:
Sea un programa logico P, un par de objetivos G y G 0 , y una
on de G a G 0 con
funcion de seleccion fs . Una derivaci
SLD-resolucion (P {G } `SLD G 0 ) es una secuencia de
objetivos G0 , G1 , . . . , Gk tal que:
G0 = G
Gk = G 0
para todo i {0, ..., k 1}, Gi+1 de obtiene a partir de Gi
resolviendo (en el sentido de la resoluci
on general) el literal
L = fs (Gi ) con una variante de una regla de P.

Si G 0 , entonces tenemos una SLD-refutaci


on 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 fs


selecciona el primer objetivo por la izquierda).
suma(s(c), s(c), s(s(c))) suma(s(X1 ), Y1 , s(Z1 )) suma(X1 , Y1 , Z1 )

1 = [X1 /c, Y1 /s(c), Z1 /s(c)]

suma(c, s(c), s(c)) suma(c, Y2 , Y2 )

2 = [Y2 /s(c)]

13 / 114

Respuestas correctas

Dado un programa P y un objetivo G q1 , . . . , qn , diremos que


una sustitucion es una respuesta correcta para P {G } si
unicamente act ua sobre las variables de G y
P |= X1 . . . . .Xm (q1 . . . qn ), siendo {X1 , . . . , Xn } el
conjunto de variables de G (notaci on: P |= [(q1 . . . qn )] )

Por ejemplo, consideremos la siguiente refutaci


on:

G suma(c, s(A), B) suma(c, Y1 , Y1 )

1 = [Y1 /s(A), B/s(A)]


La sustituci on obtenida, 1 , restringida a las variables del objetivo original G es


1 |var (G ) = [B/s(A)] (la variable Y1 no aparece en en G ).
= [B/s(A)] es una respuesta correcta para G ... por qu
e?

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 sustituci
on
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 sumaH = {(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, fs una funci on de selecci
on y G un objetivo.
Tenemos:
Correccion: Si P {G } `SLD en n pasos y = 1 . . . n es
la composicion de la secuencia de unificadores usados en la
SLD-refutacion, entonces:
0 = |var (G ) es una respuesta correcta para P {G }

Completitud: Sea una respuesta correcta para P {G },


entonces existe una SLD-refutaci on de G a partir de P con
una secuencia de unificadores 1 , . . . , n tal que
= (1 . . . n ) |var (G ) .

Notese que la funcion de selecci


on concreta que se utilice no es
relevante para los resultados de correcci
on 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 funci


on de selecci
on la que
toma el primer literal por la izquierda):

camino(X , e) camino(X1 , Y1 ) arco(X1 , Z1 ), camino(Z1 , Y1 )

1 = [X1 /X , Y1 /e]

arco(X , Z1 ), camino(Z1 , e) arco(a, c)

2 = [X /a, Z1 /c]

camino(c, e)

18 / 114
Ejemplo (cont.)

camino(c, e) camino(X3 , Y3 ) arco(X3 , Z3 ), camino(Z3 , Y3 )

3 = [X3 /c, Y3 /e]

arco(c, Z3 ), camino(Z3 , e) arco(c, e)

4 = [Z3 /e]

camino(e, e) camino(X4 , X4 )

5 = [X4 /e]

19 / 114

Ejemplo (cont.)

La composicion de sustituciones obtenidas es:

= 1 . . . 5 = [X /a, X1 /a, Y1 /e, Z1 /c, X3 /c, Y3 /e, Z3 /e, X4 /e]

Si consideramos la restricci
on a las variables del objetivo original,
es decir, a X tenemos:
0 = |{X } = [X /a]

Por el teorema de correccion 0 = [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]... c
omo se
construiran las SLD-refutaciones para encontrar estas
respuestas?

20 / 114
Hacia Prolog

La resolucion SLD esta mucho mas pr


oxima a una
implementacion realista de la programaci
on l
ogica porque ha
acotado notablemente el indeterminismo con respecto a la
resolucion general.
Las clausulas de Horn son lo suficientemente expresivas para
utilizarlas como lenguaje de programacion.
Quedan dos cuestiones por resolver:
Que funcion de selecci
on utilizamos? (esto, segun hemos visto
no afecta a la correcci
on 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

También podría gustarte