Está en la página 1de 25

Lógica para las

Ciencias Informáticas
Procedimiento de Refutación:
Principios útiles y Refinamientos –
Resolución SLD – Negación por falla

Licenciatura en Sistemas
Dr. Carlos E. Alvez
caralv@fcad.uner.edu.ar
Adaptación de: Simari - 2006 - UNS

Resolución (repaso)

Definición: Una derivación por resolución de una cláusula


C a partir de un conjunto de cláusulas S
(denominadas cláusulas input) es una secuencia de
cláusulas C1, C2, ..., Cn tal que:
1. Cn es C
2. Para cada i, 1  i  n, Ci es o bien
a. un elemento de S, o bien
b. una resolvente entre Cm y Ck, donde m, k < i
La derivación es finita o infinita de acuerdo a la
longitud de la secuencia.
2

1
Procedimiento de Refutación (Repaso)

 Nuevamente, como en el Cálculo Proposicional, a


partir del teorema anterior podríamos generar la
secuencia:
S  0(S), (S), 2(S), ..., n(S), ...
y verificar si i(S) contiene  para algún i.
 La diferencia aquí es que no es posible asegurar que
la sucesión creciente i(S) tenga una cota superior y
por lo tanto no se puede demostrar que exista un
punto fijo para la aplicación de este operador.

Procedimiento de Refutación (repaso)

p(a) q(a) r(f(a))


p(x)  q(x) r(f(a)) q(a) 
p(x)  r(f(x)) p(a)  r(f(a)) p(a)
q(a)  r(f(a)) p(a)  q(a) r(f(a))

2
Procedimiento de Refutación

 A medida que se calculan los i(S) se producen


muchas cláusulas irrelevantes.
 En el ejemplo anterior se muestra gráficamente el
procedimiento general, y luego se muestra una
refutación particular del mismo conjunto con la
generación de un número mínimo de cláusulas.
 El problema es descubrir cuales son las cláusulas
eliminables para reducir el espacio de búsqueda.
 Existen ciertos principios de búsqueda que se
incorporan al procedimiento de refutación.
 Describiremos algunos de estos principios.
5

Principios
Útiles

3
Principio de Pureza

Def: Sea S un conjunto finito de cláusulas. Un literal L


que aparece en una cláusula C en S se dice puro si
no existe una cláusula D en S que pueda utilizarse
junto con C para calcular una resolvente eliminando al
literal L.

Pureza:
Sea S un conjunto finito de cláusulas y sea C una
cláusula que contiene un literal puro. Entonces la
cláusula C puede eliminarse de S sin afectar su
satisfabilidad. Es decir, S es satisfacible si y solo si
S – { C } es satisfacible.
7

Principio de Subsumisión

Def: Sea S un conjunto finito de cláusulas. Una cláusula C


en S se dice que subsume a otra cláusula D de S, o que
D es subsumida por C, si existe una substitución  tal
que todos los literales que aparecen en C también
aparecen en D. Por ejemplo:
C = q(x) subsume a D = q(a)  p(c) (con  = [ a / x ] )
Sea S un conjunto finito de cláusulas y sea D una cláusula
que es subsumida por otra en S – { D }. Entonces la
cláusula D puede eliminarse de S sin afectar su
satisfabilidad. Es decir, S es satisfacible si y solo si
S – { D } es satisfacible.

4
Principio de Reemplazo

 Def: Supongamos que C y D son dos cláusulas y


sea R una resolvente de C y D que subsume a
alguna de ellas (C o D). Entonces al agregar R se
puede eliminar al mismo tiempo aquella que sea
subsumida R.
Ejemplo: C = q(x)  p(x)  r(x) y D = r(z)  p(z)
Una resolvente es R = q(x)  r(x) y subsume a C.
Luego C puede ser eliminada al agregar R.

Tautologías

Sea S un conjunto finito de cláusulas y sea C una cláusula


que es una tautología. Entonces la cláusula C puede
eliminarse de S sin afectar su satisfabilidad.
Es decir, S es satisfacible si y solo si S – { C } es
satisfacible.
Ejemplo:
{ p(a)  p(a)  q(b), q(a), q(a)  p(c), r(a)  p(b),
q(a)  s(a)  r(b), s(b)  p(b), s(b) }
se transforma en
{ q(a), q(a)  p(c), q(a)  p(c), r(a)  p(b),
q(a)  s(a)  r(b), s(b)  p(b), s(b) }
10

5
Un Literal
 Sea S un conjunto finito de cláusulas y sea L una cláusula
unitaria. Se construye S1 a partir de S de la siguiente manera:
a) Se borran todas las cláusulas de S que contienen a L, y luego
b) Se reemplaza cada cláusula C del resto de S por una cláusula
obtenida de C removiendo todas las apariciones del
complemento de L (si existiera alguna).
Entonces S1 es satisfacible si y solo si S es satisfacible.
Ejemplo:
{ q(a), q(a)  p(c), q(a)  p(c), r(a)  p(b), q(a)  s(a) 
r(b), s(b)  p(b), s(b) }
se transforma en
{ r(a)  p(b), s(a)  r(b), s(b)  p(b), s(b) }
11

Separación
Sea S = {C1  A, …, Cm  A, D1  A, …, Dn  A, E1 , …, Ep },
un conjunto finito de cláusulas donde A es un átomo y los
Ci, Dj, Ek no contienen ni A ni a A.
Sean
S1 = { C1, …, Cm, E1 , …, Ep } y
S2 = { D1, …, Dn, E1 , …, Ep }
Entonces, S es insatisfacible si y solo si tanto S1 como S2 son
insatisfacibles.
Ejemplo:
S = {s(b), s(b)  p(b) }
será insatisfacible si y solo si S1 = {  }, S2 = {p(b) }
son insatisfacibles. 12

6
Ejemplo
1. S = { p(a)  p(a)  q(b), q(a), q(a)  p(c), r(a)  p(b),
q(a)  s(a)  r(b), s(b)  p(b), s(b) }
2. {q(a), q(a)  p(c), q(a)  p(c), r(a)  p(b),
q(a)  s(a)  r(b), s(b)  p(b), s(b) } (tautología)
3. {r(a)  p(b), s(a)  r(b), s(b)  p(b), s(b) } (un literal)
4. {s(a)  r(b), s(b)  p(b), s(b) } (literal puro)
5. {s(b)  p(b), s(b) } (literal puro)
6. S1 = {  } (separación)
S2 = {p(b) }
7. S1 = {  } (un literal)
S2 = { }
Luego el conjunto S original es satisfacible. 13

Resolución

 El uso de estos principios permite eliminar algunas


cláusulas redundantes e irrelevantes que son
generadas durante el procedimiento de refutación.

 Sin embargo, los ejemplos muestran que todavía


muchas cláusulas inútiles se incluirán al aplicar el
procedimiento, y estas no pueden ser eliminadas.

 Luego, resulta necesario refinar el procedimiento


para lograr más eficiencia.

14

7
Refinamientos

Resolución (terminología)

Cláusulas “madre”

q(x)  p(x) r(y)  p(a)

q(a)  r(y)

16

8
Deducción por Resolución (terminología)

1. p(x,e,x) Cláusulas
Input
2. p(y, z, v)  p(y,v,w)  p(e,z,w)
3. p(a,f(u,v),e)
------------------------------------------------------
4. p(x, z, e)  p(e,z,x) [ Cláusulas madre: 1, 2]
5. p(e, f(u, v), a) [ Cláusulas madre: 3, 4]

17

Resolución Input

 Definición: Sea S un conjunto de cláusulas. Las


cláusulas en S se denominan cláusulas input.
 Definición: Una resolución input requiere que en
cada operación de resolución al menos una de las
cláusulas madre debe ser una cláusula input.
 Definición: Una derivación input es una derivación
por resolución en la que cada resolución es una
resolución input.
 Definición: Una refutación input es una derivación
input de .
18

9
Resolución Input

 Definición: Un método de resolución es completo si


dado un conjunto es refutable el método encuentra la
refutación.
 Ejemplo: El método de resolución input es incompleto.
 Sea S = { p(x)  q(x), p(x)  q(x),
p(x)  q(x), p(x)  q(x) }
A partir de estas cláusulas es posible hacer
derivaciones input de p(x), p(x), q(x), q(x) pero
no es posible construir una refutación input.

19

Refutación Input (incompletitud)


Cláusulas Input

1. p(x)  q(x) 2. p(x)  q(x) 3. p(x)  q(x) 4. p(x)  q(x)

q(x) p(x) p(x) q(x)

Pero no es posible derivar 

20

10
Resolución Unitaria

 Definición: Sea C una cláusula. Supongamos que un


subconjunto de los literales en C tienen el mismo
signo (todos positivos o todos negativos) y que
pueden unificarse con unificador más general .
Entonces C se dice que es un factor de C. Si C es
una cláusula unitaria (un solo literal) entonces se lo
llama factor unitario de C.

 Ejemplo: Si C = p(x, a)  p(f(y), z)  p(f(b), a)


entonces con  = [ f(b)/x, b/y, a/z ], C = p(f(b), a)
es un factor unitario de C.

21

Resolución Unitaria
 Definición: Una resolución unitaria requiere que al menos
una de las cláusulas madre en cada operación de
resolución debe ser una cláusula unitaria, o un factor
unitario de una cláusula madre.
 Una derivación unitaria es una derivación por resolución
en la que cada resolución es una resolución unitaria.
 Una refutación unitaria es una derivación unitaria de .
 Obs: Resolución input y resolución unitaria son
equivalentes en el sentido de que existirá una refutación
input de un conjunto insatisfacible S si y solo si existe una
refutación unitaria de S. Luego resolución unitaria es
también incompleta. Es posible demostrar que ambas
son completas sobre conjuntos de cláusulas Horn.
22

11
Conjunto de Soporte

 Una de las aplicaciones de resolución es la


demostración automática de teoremas.

 Para probar un teorema C a partir de un conjunto


de axiomas C1, C2, ...,Cn se muestra que C1  C2 
...  Cn  C es un conjunto insatisfacible.

 Resulta razonable suponer que el conjunto de


axiomas { C1, C2, ..., Cn } es satisfacible, de otra
forma se trivializa el problema.
23

Conjunto de Soporte

 Como el conjunto de axiomas (formado por


cláusulas axioma) es satisfacible, si se agregan
resolventes calculándolas solo a partir de ellas el
conjunto resultante también es satisfacible.

 Por lo tanto, no es posible generar una refutación


usando solo el conjunto de axiomas.

 La estrategia de Conjunto de Soporte usa este


hecho evitando utilizar sólo cláusulas axioma.

24

12
Conjunto de Soporte

 Definición: Un subconjunto S1 de un conjunto S de


cláusulas se denomina un Conjunto de Soporte si y solo
si S – S1 es satisfacible.
 Definición: Una Resolución por Conjunto de Soporte es
una resolución en la que dos cláusulas se utilizan en
una operación de resolución solo si alguna de ellas no
está en S – S1.
 Definición: Una Derivación por Conjunto de Soporte es
una derivación en la que cada resolución es por
conjunto de soporte.
 Definición: Una Refutación por Conjunto de Soporte es
una derivación por conjunto de soporte de .
25

Conjunto de Soporte

 Obs: Sea S un conjunto de cláusulas


insatisfacible.

La resolución por conjunto de soporte es


completa en el siguiente sentido: si S1 es un
subconjunto de S, tal que S – S1 es satisfacible,
entonces existe una deducción por conjunto de
soporte de  a partir de S en la que S1 es el
conjunto de soporte.

26

13
Conjunto de Soporte
Ejemplo:
 Sea S = { p(x, y)  q(x),
p(x, y)  q(x),
q ( a) }
 y sea S1 = {p(x, y)  q(x) } el conjunto de soporte.
Claramente, S es insatisfacible y S – S1 es satisfacible.
La siguiente es una resolución por conjunto de soporte.
1.  p (x , y )   q (x ) en S (y S1)
2. p (x , y )   q (x ) en S
3. q (a) en S
4.  p ( a, y ) 1y3
5. q(a) 2y4
6.  3y5 27

Resolución Lineal

 La Resolución Lineal es una extensión de la


Resolución Input.
 En la construcción de la deducción por
resolución lineal al menos una de las cláusulas
madre en cada operación de resolución debe
ser:
 Una cláusula input, o bien
 Un cláusula ancestral de una de las
cláusulas madre.
28

14
Resolución Lineal

 Definición: Sea S un conjunto de cláusulas y sea C una cláusula en


S. Una derivación lineal de Cn a partir de S con cláusula top C es
una secuencia finita de cláusulas C0 = C, C1, ..., Cn tal que para
cada i = 0, 1, ..., n-1:
Cada Ci+1 es una resolvente de Ci (llamada cláusula central o
cláusula maternal cercana), y otra cláusula Bi (llamada cláusula
lateral), y
Cada cláusula lateral Bi es
a. un miembro de S y en tal caso Bi es la cláusula input
maternal de Ci+1
b. o es un ancestro de algún Ck ( 0  k  i ) y en ese caso
Bi es la cláusula maternal lejana de Ci+1
Cada cláusula Ci+1 se dice que fue obtenida por resolución lineal.
 Definición: Una refutación lineal es una derivación lineal de .
29

Ejemplo de Resolución Lineal


 Sea S = { p(x), p(x)  q(x), p(x)  r(x), q(a)  r(a) } y
consideremos la siguiente derivación con p(x) como cláusula
top.
C0: p(x) B0: p(x)  q(x)

C1: q(x) B1: q(a)  r(a)

C2: r(a) B2: p(x)  r(x)

C3: p(a) B3: p(x) (C0)

C4:  30

15
Ejemplo de Resolución Lineal
 Sea S = { p(x), p(x)  q(x), p(x)  r(x), q(a)  r(a) } y
consideremos la siguiente derivación con q(a)  r(a) como
cláusula top.

C0: q(a)  r(a) B0: p(x)  q(x)

C1: r(a)  p(a) B1: p(x)  r(x)

C2: p(a) B2: p(x)

C 3: 

31

Resolución Lineal

 La derivación lineal esta restringida por el


hecho de que cada cláusula se deriva
siempre de la cláusula precedente en la
deducción y de otra que aparece antes en la
deducción.

 Esto es lo que guía la derivación.

 Puede demostrarse que la Resolución Lineal


es completa.

32

16
Resolución Lineal

 Def: Sea S un conjunto de cláusulas y sea C una


cláusula de S. Un árbol de búsqueda  se define
como sigue:

1) La raíz de  está etiquetada con C (top).

2) Supongamos que N es un nodo en  y que todos


los nodos desde la raíz hasta N están etiquetados
C1 = C, C2, ..., Cn. Entonces para cada derivación
lineal C1, C2, ..., Cn, Cn+1 cada nodo etiquetado con
Cn+1 es un descendiente inmediato de N.

33

Ejemplo: { p  q, p, q  r, q  r  s, p  s } con p  q


como cláusula top, produce el siguiente árbol de búsqueda (parcial):
pq

q pr p  r  s
r r  s r p  q  s

q  s

ps s p  q

s p p q p p

p   p   
34
 

17
Resolución SLD
“Selección Lineal de
Programas Definidos”

Resolución SLD
“Selección Lineal de Programas Definidos”

 DEFINICION - RESOLUCION-SLD: Sea G la meta


A1,...,Am,...,Ak y C la cláusula A B1,...,Bq . Entonces
G' se derivará de G y C usando el MGU  si se verifica:
 Am es un átomo, llamado átomo seleccionado en G.
  es un MGU de Am y A.
 G' es la meta  (A1, ..., Am-1, B1,...,Bq, Am+1, ..., Ak)  .

En la terminología de resolución G’ es llamado


resolvente de G y C.

36

18
Resolución SLD
“Selección Lineal de Programas Definidos”

Sea P un programa definido y G una meta definida.


 Derivación por resolución-SLD de P{G} consiste en
una secuencia finita o infinita G0, G1, G2, ... de metas
(donde G0 = G), una secuencia C1, C2, ... de variantes
de cláusulas de programas de P y una secuencia 1,
2,..., n de MGUs, tal que cada Gi+1 es derivada de Gi y
Ci+1 usando i+1.

 Refutación-SLD de P{G} es una Derivación-SLD


finita de P{G} la cual tiene la cláusula vacía “□” como
último objetivo en la derivación. Si Gn = “□” decimos
que la longitud de refutación es n.
37

Resolución SLD
“Selección Lineal de Programas Definidos”

G0=G (objetivo) C11




G1 C22


G2


.
.
.
Gn-1 Cnn


Gn = “□” 38

19
Árbol SLD

 Sea P un programa definido, R una regla de


computación y G una meta definida. Todas las posibles
derivaciones SLD pueden representarse en una
estructura de tipo árbol denominada árbol SLD.

 La raíz se etiqueta con la meta definida G. Dado un


nodo n etiquetado por la meta definida Gn, se crea un
nodo ni para cada nueva meta definida Gni que puede
obtenerse resolviendo el literal escogido por R con la
cabeza de una cláusula en P.

39

Árbol SLD
G = q(y, b)

40

20
Árbol SLD
 Definición. Rama de éxito de un árbol SLD: Rama que
conduce a una refutación.
 Definición. 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. Rama infinita de un árbol SLD: Rama
correspondiente a una derivación no terminante.
 Definición. Regla de búsqueda en un árbol SLD:
Procedimiento de búsqueda de una refutación en un árbol
SLD.
 Definición. Procedimiento de refutación SLD: Algoritmo
de refutación SLD junto con la especificación de una regla
de computación y una regla de búsqueda.
41

Árbol SLD

 Del teorema de completitud se deduce que la resolución


SLD es un procedimiento completo independientemente 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.
 Búsqueda a lo ancho en un árbol SLD: garantiza que
se encontrará la rama de éxito siempre que exista.
 Búsqueda en profundidad en un árbol SLD: existe la
posibilidad de explorar una rama no terminante.

42

21
Regla de Búsqueda en Prolog

 Prolog utiliza una búsqueda en profundidad en el árbol SLD.


 Con esta estrategia, en tiempo de ejecución basta con guardar:
a) la cláusula objetivo actual, con un puntero al subobjetivo
actual,
b) un puntero a la cláusula del procedimiento cuya cabeza se
puede unificar con el citado subobjetivo y
c) el conjunto de sustituciones de variables realizadas hasta el
momento.
 Además, se registran en una lista los nodos previos del árbol
SLD donde aún quedan ramas por explorar (denominados
puntos de retroceso “backtracking”).
 De este modo, en caso de ocurrir un fallo, se puede retroceder
directamente hasta el nodo más cercano cuyos subárboles
puedan proporcionar soluciones adicionales. 43

Lógica y Prolog
 En la lógica, un conjunto de cláusulas puede ser verdadera o
falsa independiente del orden.

 En PROLOG el programador se ve obligado a pensar en


términos del control de ejecución de sus programas
ordenando cuidadosamente las cláusulas y literales con el fin
de evitar ejecuciones no terminantes.
 Las cláusulas se seleccionan de arriba abajo y los átomos de
las metas de izquierda a derecha.
 Otra diferencia de PROLOG y la lógica son predicados de E/S,
aritméticos y de corte (cut), que recorta el árbol SLD.
 Este último realmente afecta la estrategia de evaluación en los
programas PROLOG, y su uso pone en cuestión el carácter
auténticamente declarativo del lenguaje.
44

22
CUT

 El operador de corte (cut) es un predicado


predefinido, notado !, que si bien tiene una definición
operacional muy simple, su caracterización
declarativa tiene múltiples implicancias.

 La meta es satisfecha y compromete al intérprete


en todas las decisiones tomadas desde que la
meta antecesora fue unificada con la cabeza de la
regla que contiene el cut.

45

CUT

1. El cut poda todas las cláusulas por debajo de él.


p:- q, !, r.
p:-s, t.  se recorta

2. El cut poda las soluciones alternativas de la meta


conjuntiva a la izquierda del mismo.
p:- q, r, !, s, t.

3. El cut permite soluciones alternativas en la meta


conjuntiva a la derecha del mismo.
p:- q, r, !, s, t.

46

23
CUT - Ejemplo

47

Cortes rojos y verdes

 El operador de corte puede podar potenciales


respuestas a la consulta realizada.

 Terminología:

 Denominaremos cuts rojos a los que poden


nuevas soluciones.

 Denominaremos cuts verdes a los que no poden,


o sólo poden soluciones ya conocidas.

48

24
La negación como falla

 La negación por falla se define en términos del


operador de corte:

negf(X):- X, !, fail.
negf(X).

 Interpretación: Si la meta X se satisface, se dispara


la poda y falla. Caso contrario, si la meta X falla, el
cut no se ejecuta y negf(X) se satisface.

49

Bibliografía

 Capítulo 3: Lógica Computacional de José Luis


Ferreyra Vindel, Ángeles Manjarrés Riesco y
Francisco Javier Díez Vegas, UNED, 2003.

 Sección 3.4 en adelante de Truth, Deduction, and


Computation: Logic and Semantics for Computer
Science R. Davis Computer Science Press.

 Capítulos 2 y 3 de Logic, Programming and Prolog


(2ed). Ulf Nilsson and Jan Maluszynski.

50

25

También podría gustarte