Documente Academic
Documente Profesional
Documente Cultură
Programare logică
Seminar 6
Rezoluţie SLD. Sisteme de rescriere.
unde Q ∨ ¬Q1 ∨ · · · ∨ ¬Qm este o clauză definită din T (ı̂n care toate variabilele au
fost redenumite) şi θ este c.g.u pentru Pi şi Q.
• Fie T o mulţime de clauze definite şi P1 ∧. . .∧Pm o ţintă, unde Pi sunt formule atomice.
O derivare din T prin rezoluţie SLD este o secvenţă G0 := ¬P1 ∨ . . . ∨ ¬Pm , G1 , . . .,
Gk , . . . ı̂n care Gi+1 se obţine din Gi prin regula SLD. Dacă există un k cu Gk =
(clauza vidă), atunci derivarea se numeşte SLD-respingere.
(ii) T P1 ∧ · · · ∧ Pm .
1
(S6.1) Găsiţi o SLD-respingere pentru următoarele programe Prolog şi ţinte:
(a) 1. r :- p,q. 5. t. ?- w.
2. s :- p,q. 6. q.
3. v :- t,u. 7. u.
4. w :- v,s. 8. p.
Demonstraţie:
(a)
G0 = ¬w
G1 = ¬v ∨ ¬s (4)
G2 = ¬t ∨ ¬u ∨ ¬s (3)
G3 = ¬u ∨ ¬s (5)
G4 = ¬s (7)
G5 = ¬p ∨ ¬q (2)
G6 = ¬q (8)
G7 = (6)
(b)
G0 = ¬q(f (Z), a)
G1 = ¬q(a, f (Z)) ∨ ¬q(a, f (f (a))) (1 cu θ(X) = f (Z) şi θ(Y ) = a)
G2 = ¬q(a, f (Z)) (2 cu θ(X) = a)
G3 = (2 cu θ(Z) = f (X))
(c)
G0 = ¬p(X) ∨ ¬q(Y, Z)
G1 = ¬r(X1 ) ∨ ¬q(Y, Z) (2 cu θ(X) = X1 )
G2 = ¬q(Y, Z) (5 cu θ(X1 ) = f (b))
G3 = ¬p(Z1 ) (3 cu θ(X) = Y1 şi θ(Y ) = Z1 )
G4 = ¬r(X) (2 cu θ(Z1 ) = X)
G5 = (5 cu θ(X) = f (b))
2
Teorie pentru S6.2:
Fie T o mulţime de clauze definite şi o ţintă G0 = ¬P1 ∨ . . . ∨ ¬Pm . Un arbore SLD este
definit astfel:
• Fiecare nod al arborelui este o ţintă (posibil vidă)
• Rădăcina este G0
• Dacă arborele are un nod Gi , iar Gi+1 se obţine din Gi folosind regula SLD folosind
o clauză Ci ∈ T , atunci nodul Gi are copilul Gi+1 . Muchia dintre Gi şi Gi+1 este
etichetată cu Ci .
Dacă un arbore SLD cu rădăcina G0 are o frunză (clauza vidă), atunci există o SLD-
respingere a lui G0 din T .
(S6.2) Desenaţi arborele SLD pentru programul Prolog de mai jos şi ţinta ?- p(X,X).
1. p(X,Y) :- q(X,Z), r(Z,Y). 7. s(X) :- t(X,a).
2. p(X,X) :- s(X). 8. s(X) :- t(X,b).
3. q(X,b). 9. s(X) :- t(X,X).
4. q(b,a). 10. t(a,b).
5. q(X,a) :- r(a,X). 11. t(b,a).
6. r(b,a).
Demonstraţie:
¬p(X, X)
1 2
3 4 5 6 7 8 9
(X = a) (X = a) (X = b) (X = a)
3
Teorie pentru S6.3:
rescrieţi termenii t1 = f (f (g(f (g(0))))) şi t2 = f (f (0)) până la o formă normală. Caracterizaţi
formele normale ale sistemului R.
Demonstraţie:
Forma normală a lui t1 este g(g(0)), deoarece
4
– noetherian: dacă nu există reduceri infinite t0 → t1 → t2 → . . ..
∗ ∗
– confluent: t1 ← t → t2 ⇒ t1 ↓ t2 .
– complet (convergent, canonic): confluent şi noetherian.
θ(l1 )
R R
θ(r1 ) θ(c)[z ← θ(r2 )]
Teorema 2 (Teorema Perechilor Critice). Dacă R este noetherian, atunci sunt echivalente:
(S6.4) Fie L un limbaj de ordinul I cu două simboluri de funcţie f şi g de aritate 1. Cercetaţi
dacă sistemul de rescriere de mai jos este confluent:
R = {f (f (x)) → g(x)}.
Demonstraţie:
Se observă că R este noetherian, deci putem aplica Teorema Perechilor Critice. Determinăm
perechile critice ale sistemului R. Redenumind variabilele, considerăm l1 → r1 , l2 → r2 ∈ R
ca fiind f (f (x)) → g(x) şi f (f (y)) → g(y), respectiv. Subtermenii lui l1 care nu sunt
variabile sunt f (x) şi f (f (x)). Investigăm fiecare caz:
• t := f (x). Observăm că l1 = c[z ← t] pentru contextul c = f (z). Mai mult, θ(x) = f (y)
este c.g.u. pentru t şi l2 . Obţinem perechea critică P1 = (g(f (y)), f (g(y))).
5
• t := f (f (x)). Observăm că l1 = c[z ← t] pentru contextul c = z. Mai mult, θ(x) = y
este c.g.u. pentru t şi l2 . Obţinem perechea critică P1 = (g(y), g(y)).
Evident g(y) ↓ g(y), dar g(f (y)) 6↓ f (g(y)) deoarece g(f (y)) şi f (g(y)) sunt deja ı̂n formă
normală. Din Teorema Perechilor Critice obţinem că R nu este confluent.
Demonstraţie:
Se observă că R nu se termină:
c →R g(c) →R g(g(c)) →R . . . .
În concluzie nu putem aplica Teorema perechilor critice pentru a stabili confluenţa. Se
observă că:
f (c, c)
a f (c, g(c))
Demonstraţie:
Printre cazurile posibile, se numără:
6
• Cazul l1 → r1 = f (x, x) → a şi l2 → r2 = f (y, y) → a. Considerăm subtermenii t ai lui
l1 care nu sunt variabile:
– t = f (x, x). Observăm că l1 = c[z ← t] pentru contextul c = z. Mai mult, θ(x) = y
este c.g.u. pentru t şi l2 . Obţinem perechea critică (a, a).
– t = g(x). Observăm că l1 = c[z ← t] pentru contextul c = f (x, z). Nu există c.g.u.
pentru t şi l2 .
– t = f (x, g(x)). Observăm că l1 = c[z ← t] pentru contextul c = z. Mai mult,
θ(x) = y este c.g.u. pentru t şi l2 . Obţinem perechea critică (b, b).
– t = g(x). Observăm că l1 = c[z ← t] pentru contextul c = f (x, z). Nu există c.g.u.
pentru t şi l2 .
– t = f (x, g(x)). Observăm că l1 = c[z ← t] pentru contextul c = z. Nu există c.g.u.
pentru t şi l2 .
În concluzie, perechile critice pentru R sunt (a, a), (b, b) şi (g(c), g(c)).