• No se han encontrado resultados

Resolución SLD

In document Logica Computacional UNED (página 138-141)

Parte II. FORMALISMOS PARA PROGRAMACIÓN

3.3 Resolución SLD

es válida en el sistema de axiomas considerado.

En resumen, los sistema de programación lógica ideales usan únicamente la regla de resolución como regla de inferencia. La prueba de que una fórmula B = ∃(B1∧ ... ∧ Bn) es una consecuencia

lógica de un programa P (es decir, si P ² B) se lleva a cabo negando la fórmula y añadiéndola al conjunto de axiomas que constituyen el programa, para averiguar si el sistema de fórmulas extendido es insatisfacible (contradictorio). Si éste es el caso se irá derivando una serie de objetivos sucesivos hasta llegarse a la cláusula vacía. Esta prueba es pues equivalente a la prueba de que existe una respuesta correctaθpara la cláusula objetivo G = ¬ (B1∧ ... ∧ Bn). Baste ver que: ∀G = ∀ ¬(B1

... ∧ Bn) = ¬∃(B1∧ ... ∧ Bn) = ¬B. Encontrar una respuesta correcta para una cláusula objetivo G es

encontrar una sustitución de variables que conduce a la refutación de G en el sistema de axiomas. Si esta sustitución se encuentra, se habrá probado la validez de la fórmula ¬G.

3.3

Resolución SLD

En esta sección exponemos el método de resolución SLD, debido a Kowalski, que constituye un procedimiento de deducción coherente y completo cuando se aplica en sistemas de cláusulas de Horn. La denominanción SLD significa ”Selección Lineal de programas Definidos”, haciendo así referencia a la esencia del método, que radica en la selección sucesiva de cláusulas y literales para resolver de acuerdo a criterios especificados por reglas de computación y búsqueda. Al término de la sección se investiga cómo la eficiencia del método se ve condicionada por las reglas elegidas.

Definición 3.17 Derivación por resolución SLD: Sea P un conjunto de cláusulas de programa, R

una regla de computación y G una cláusula objetivo. Una derivación por resolución SLD de P ∪ {G} se define como una secuencia de etapas de resolución entre clásulas objetivo y cláusulas de programa. La primera cláusula objetivo es G0= G. Asumiendo que se ha derivado Gi, Gi+1se define

seleccionando un literal Ai∈ Gi de acuerdo a la regla de computación R, escogiendo una cláusula

Ci∈ P tal que la cabeza de Ci pueda unificarse con Aimediante una sustitución MGU (Unificador de

Máxima generalidad)θiy resolviendo:

Gi= ← A1, ..., Ai−1, Ai, Ai+1, ..., An

Ci= A ← B1, ..., Bk

Aiθi= Aθi

Gi+1= ← (A1, ..., Ai−1, B1, ..., Bk, Ai+1, ..., Ani

Una refutación SLD de P ∪ {G} es una derivación SLD finita de P ∪ {G} que tiene la cláusula vacía, ¤, como último objetivo en la derivación. Si Gn es la cláusula vacía, decimos que la longitud

de refutación es n.

Definición 3.18 Respuesta computada: Sea P un conjunto de cláusulas de programa, R una regla

de computación y G una cláusula objetivo. Una respuesta computadaθpara P ∪ {G} es la sustitución obtenida por la composición θ1, ...,θn de todas las variables de G, donde θ1, ...,θn es la secuencia

de MGUs usados en una refutación SLD de P ∪ {G}. Se consideran incluidas sólo lasθque sean sustituciones de las variables del programa. El conjunto de respuestas computadas de un programa define su semántica operacional SO(P).

Ejemplo 3.19 Sea el programa P = {p(a), q(a, b)} y la cláusula objetivo: ← p(x), q(x, y)

1. Resolviendo p(x) con p(a), aplicando la sustitución θ1 = {x/a}, se obtiene como nuevo

2. Resolviendo q(a, y) con q(a, b), aplicando la sustituciónθ2= {y/b}, se obtiene ¤

La respuesta computada en la refutación de la cláusula objetivo en el programa P es {x/a, y/b}.

Ejercicio 3.20 Derive ¤ por resolución SLD aplicada a la cláusula objetivo ← q(y, b), q(b, z) en el

programa del ejemplo 3.16, y obtenga la respuesta computada. Observe que la derivación equivale a la refutación de la cláusula (¬q(y, b) ∨ ¬q(b, z)).

Puede demostrarse que el método de resolución SLD constituye un procedimiento de deducción coherente y completo cuando se aplica en sistemas de cláusulas de Horn. Este resultado se enuncia en los siguientes teoremas (cuya demostración no incluímos):

Teorema 3.21 Consistencia de la resolución SLD

Sea P un conjunto de cláusulas de programa, R una regla de computación y G una cláusula objeti- vo. Se supone la existencia de una refutación SLD de G. Seaθ=θ1...θnla secuencia de unificadores

usados en la refutación y seaσla restricción deθa las variables de G, es decir, la respuesta computada en la refutación. Entonces,σes una respuesta correcta para G. Como las respuestas computadas defi- nen la semántica operacional del programa, SO(P), y las respuestas correctas la semántica declarativa,

SD(P), se concluye que SO(P) ⊆ SD(P).

Teorema 3.22 Completitud de la resolución SLD aplicada a cláusulas de Horn

Sea P un conjunto de cláusulas de programa, R una regla de computación y G una cláusula ob- jetivo. Seaσuna respuesta correcta para G. Entonces existe una refutación SLD de G a partir de P tal queσes la restricción de la secuencia de unificadoresθ=θ1...θna las variables de G, es decir, la

respuesta computada en la refutación. Del mismo modo, ya que para cada respuesta correcta existe una respuesta computada, podemos afirmar que SD(P) ⊆ SO(P).

De los dos teoremas anteriores se deduce que SD(P) = SO(P), es decir, la semántica declarativa de

un programa lógico descrito en términos de cláusulas de Horn coincide con su semántica operacional cuando el control de ejecución consiste en la derivación SLD.

Ejemplo 3.23 Consideremos el programa

P = {p(a), q(x, y) ← p(x), q(a, b)}

donde el dominio de las variables x e y es {a, b}. La semántica declarativa1 de este programa está definida por el conjunto de términos básicos más sencillos que son consecuencia lógica del conjunto de cláusulas del programa (el modelo de Herbrand), es decir: SD(P) = {p(a), q(a, b)}. Para obtener la

semántica operacional debemos ver cuales son las respuestas más sencillas (es decir, pertenecientes a la base de Herbrand) que pueden computarse mediante la aplicación del procedimiento de resolución SLD, obteniéndose igualmente SO(P) = {p(a), q(a, b)}.

En la sección anterior señalábamos la necesidad de definir reglas de computación y reglas de bús- queda que permitiesen sistematizar los procedimientos de resolución conviertiéndolos en programas eficientes. Para visualizar la aplicación de tales reglas es útil representar las posibles derivaciones SLD de una cláusula objetivo, bajo una cierta regla de computación R, en forma de una estructura tipo árbol, denominada árbol SLD. Las reglas de búsqueda pueden verse como algoritmos de búsqueda en el árbol SLD. A continuación definimos una serie de conceptos útiles en este contexto.

1Nos referimos aquí a los conceptos rigurosos de semántica declarativa y semántica operacional, definidos en términos

de modelos de Herbrand . En el resto del capítulo se usan según sus acepciones informales (con frecuencia utilizadas en la literatura), haciendo referencia, respectivamente, al conjunto de todas las respuestas correctas y computadas; habida cuenta de que los modelos de Herbrand no son materia de estudio obligatorio en esta asignatura.

3.3. Resolución SLD 129

Definición 3.24 Arbol SLD. Sea P un conjunto de cláusulas de programa, R una regla de compu-

tación y G una cláusula objetivo. Todas las posibles derivaciones SLD pueden representarse en una estructura de tipo árbol denominada árbol SLD. La raíz se etiqueta con la cláusula objetivo G. Dado un nodo n etiquetado por la cláusula objetivo Gn, se crea un nodo nipara cada nueva cláusula objetivo

Gni que puede obtenerse resolviendo el literal escogido por R con la cabeza de una cláusula en P.

Definición 3.25 Rama de éxito de un árbol SLD: Rama que conduce a una refutación

Definición 3.26 Rama de fallo de un árbol SLD: Rama que conduce a una cláusula objetivo cuyo

literal seleccionado no pude unificarse con ninguna cláusula del programa.

Definición 3.27 Rama infinita de un árbol SLD: Rama correspondiente a una derivación no termi-

nante.

Definición 3.28 Regla de búsqueda en un árbol SLD: Procedimiento de búsqueda de una refutación

en un árbol SLD.

Definición 3.29 Procedimiento de refutación SLD: Algoritmo de refutación SLD junto con la es-

pecificación de una regla de computación y una regla de búsqueda.

Ejemplo 3.30 Sea el programa: P = {p(b), p(a), q(a, b)}

Los siguientes árboles SLD consisten en una única rama: ← p(b) rama de éxito

← p(a) rama de éxito ← q(a, a) rama de fallo ← q(a, b) rama de éxito ← q(b, a) rama de fallo ← q(b, b) rama de fallo

Ejemplo 3.31 En la figura 3.1 se muestra el árbol de derivación correspondiente a la cláusula objetivo

q(y, b), en el conjunto de cláusulas de programa del ejemplo 3.16, y donde la regla de computación consiste en escoger siempre el literal situado más a la izquierda de la cláusula objetivo. Los números que etiquetan las aristas señalan la cláusula del programa con que se aplica la resolución. Las ramas etiquetadas con 5, 6 y 7 conducen a la cláusula vacía.

Ejercicio 3.32 Construya los árboles de derivación de la cláusula objetivo ← p(y, b), q(b, z) cuando

la regla de computación consiste en seleccionar el último literal de la cláusula objetivo, y cuando consiste en seleccionar el primer literal de la cláusula objetivo.

Teorema 3.33 Sea P un programa y G una cláusula objetivo. Entonces, cada árbol SLD de P y G

bien tiene infinitas ramas de éxito o bien cada una de sus ramas tiene el mismo número finito de ramas de éxito.

Del teorema de completitud se deduce que la resolución SLD es un procedimiento completo inde- pendientemente de la elección de la regla de computación, pero sólo indica que existe una refutación. La elección de la regla de búsqueda determinará el que la refutación se encuentre o no. Surge de este modo un compromiso entre completitud y eficiencia. Una búsqueda ”en anchura” en un árbol SLD, donde se comprueban todos los nodos de cada nivel antes de adentrarse más en el árbol, garantiza que se encontrará la rama de éxito siempre que exista. Por el contrario, si se aplica una estrategia

q (y ,b ) p (y ,b ) (1 ) x (2 ) p (y ,z ), q (z ,b ) (5 ) (6 ) (7 ) (3 ) (1 0 ) q (a ,b ) (1 ) (2 ) q (h ,b ) (1 ) (2 ) q (a ,z ’), q (z ’,b ) p (a ,b ) p (h ,j) p (h ,z ’’), q (z ’’,j) x . . . . . .

Figura 3.1: Árbol SLD del objetivo q(y, b)

de búsqueda en profundidad, siempre existe la posibilidad de explorar una rama no terminante. La regla de búsqueda en anchura es completa en el sentido de que siempre encuentra la respuesta correc- ta cuando ésta existe. Sin embargo, el tamaño del árbol que requiere almacenar en una estructura de datos crece exponencialmente con la profundidad de la búsqueda, de modo que la aplicación pura de esta estrategia no resulta una regla práctica.

In document Logica Computacional UNED (página 138-141)