Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Sldthy PDF
Sldthy PDF
Resolución SLD
1 / 114
Refinando la resolución
4 / 114
Predicados y programas lógicos
Un predicado p queda definido por el conjunto de claúsulas
(hechos y reglas) cuyas cabezas tienen ese sı́mbolo de
predicado. Ası́ pues la definición de un predicado en general
tendrá 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 lógico es un conjunto de definiciones de
predicados (es decir, un conjunto de claúsulas definidas:
hechos y reglas).
5 / 114
Un ejemplo
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.)
camino(X , Y ) ← X = Y
camino(X , Y ) ← arco(X , Z ), camino(Z , Y )
(la primera regla, también se podrı́a 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 podrı́a plantear un objetivo, i.e., entendiendo los hechos
y las reglas que hemos escrito como premisas podrı́amos plantear
una conclusión y tratar de mostrar la validez de la argumentación.
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)
Otro ejemplo
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-Resolución
11 / 114
SLD-resolución (cont.)
Formalmente:
Sea un programa lógico P, un par de objetivos G y G 0 , y una
función de selección fs . Una derivación de G a G 0 con
SLD-resolución (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ón general) el literal
L = fs (Gi ) con una variante de una regla 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 )
θ2 = [Y2 /s(c)]
←
13 / 114
Respuestas correctas
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ón σ
tendremos que
P |= suma(c, s(A), s(A))σ
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.)
θ1 = [X1 /X , Y1 /e]
θ2 = [X /a, Z1 /c]
← camino(c, e)
18 / 114
Ejemplo (cont.)
θ4 = [Z3 /e]
← camino(e, e) ← camino(X4 , X4 )
θ5 = [X4 /e]
←
19 / 114
Ejemplo (cont.)
20 / 114
Hacia Prolog
21 / 114