04.11.2014 Aufrufe

Grundlagen der Logik und Logikprogrammierung

Grundlagen der Logik und Logikprogrammierung

Grundlagen der Logik und Logikprogrammierung

MEHR ANZEIGEN
WENIGER ANZEIGEN

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

2.4.1. Unifikationsalgorithmus von Robinson<br />

1<br />

2<br />

3<br />

4<br />

5<br />

6<br />

7<br />

8<br />

9<br />

10<br />

11<br />

12<br />

13<br />

14<br />

15<br />

16<br />

17<br />

18<br />

19<br />

mgu(S) = {<br />

.<br />

Stack := S // pS “ pE_1 “ D_1, . . . , E_n “ . D_nq q<br />

σ – rs<br />

while S not empty, do<br />

pop (E, D)<br />

if E = X(Var.) then E – σpXq<br />

if D = X(Var.) then D – σpXq<br />

case<br />

E “ fpE_1, . . . , E_kq, D “ gpD_1, . . . , D_lq // E, F Terme<br />

if f ‰ g then fail<br />

.<br />

.<br />

else (* k = l *) push (1) E_1 “ D_1, . . . , E_k “ D_l<br />

| E = X ñ // E Variable<br />

if X P V arspDσq then (if Dσ “ X then skip (2) else fail)<br />

else σ – σrX ÞÑ Dσs (3)<br />

| D = X // D Variable<br />

analog<br />

return σ<br />

}<br />

Beweis: Korrektheit des Robinson-Algorithmus<br />

Korrektheit heißt, dass<br />

(i) sofern ein mgu gef<strong>und</strong>en wird, dieser Korrekt ist<br />

(ii) sofern keine mgu gef<strong>und</strong>en wird, dieser nicht existiert<br />

Der Beweis wird geführt, indem gezeigt wird, dass eine Schleifeninvariante nach jedem Schleifendurchlauf<br />

gilt, <strong>und</strong> dass diese Invariante die Korrektheit impliziert.<br />

Invariante:<br />

UnifpSq “ σUnifpStack σq (1)<br />

p “ tστ|τ P UnifpStack σquq<br />

^ Dom σ Y VarspStack σq “ H (2)<br />

Invariante gilt nach Initialisierung<br />

Zu Beginn ist σ <strong>und</strong> damit Dom σ leer, also Dom σ Y VarspStack σq “ H erfüllt <strong>und</strong> UnifpSq “ σ<br />

UnifpStack σq vereinfacht sich zu UnifpSq “ UnifpStackq, was durch die Initialisierung gegeben ist.<br />

Invariante gilt nach einem Schleifendurchlauf<br />

Zu zeigen ist, dass die drei mit (1), (2) <strong>und</strong> (3) markierten Stellen im Algorithmus die Schleifeninvariante<br />

erhalten.<br />

(1) Es wird eine Gleichung vom Stack genommen <strong>und</strong> dafür k Gleichungen mit dem selben Unifikator<br />

wie <strong>der</strong> <strong>der</strong> ersten Gleichung auf den Stack gelegt. Dadurch än<strong>der</strong>t sich <strong>der</strong> Unifikator des<br />

Gesamtstacks nicht – UnifpStackq, σ bleiben gleich.<br />

(2) Es wird eine Gleichung vom Stack genommen, die von <strong>der</strong> Form X “ X ist: man kommt nur in<br />

den Fall (2), wenn Dσ “ X “ E ist. Das trägt offensichtlich zum Unifikator nichts bei. σ <strong>und</strong><br />

21

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!