Grundlagen der Logik und Logikprogrammierung
Grundlagen der Logik und Logikprogrammierung
Grundlagen der Logik und Logikprogrammierung
Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.
YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.
UnifpStackq bleiben gleich, VarspStackq nimmt allenfalls ab, was aber die Invariante erhält.<br />
(3) Es wird eine Gleichung vom Stack genommen <strong>und</strong> σ um eine weitere Substitutionsklausel erweitert.<br />
Der zweite Teil <strong>der</strong> Invariante bleibt erhalten, da X R VarspDσq; zu Dom σ wird X hinzugefügt,<br />
aus Stack σ wird X entfernt.<br />
Der erste Teil <strong>der</strong> Invariante ist etwas aufwändiger: wir müssen zeigen, dass<br />
σUnifp<br />
pStack Y pX . “ Dqqσ<br />
loooooooooooomoooooooooooon<br />
“Stack σYpX . “Dσq,XRDompσq<br />
Die Verän<strong>der</strong>ungen bei diesem Schritt sind<br />
a) (X . “ D) lag vorher auf dem Stack, wurde entfernt<br />
b) σ wurde um rX ÞÑ Ds erweitert.<br />
q “ σrX ÞÑ DsUnifpStack σrX ÞÑ Dsq<br />
Wir können auf beiden Seiten das führende σ streichen. Dadurch wird die Bedingung etwas verschärft<br />
(die schon in σ vorhandenen Substitutionen werden nicht genutzt), aber wenn wir es ohne<br />
σ schaffen, die Gleichheit zu zeigen, gilt sie auch mit σ.<br />
σUnifp pStack 1 Y pX . “ Dqqσ<br />
looooooooooooomooooooooooooon<br />
“Stack 1 σYpX . “Dσq,da XRDompσq<br />
q “ σrX ÞÑ DσsUnifpStack 1 σrX ÞÑ Dσsq<br />
Dass `Stack 1 Y pX . “ Dq˘ σ “ Stack 1 σ Y pX . “ Dσq, also die bisherige Substitutionsmenge σ nicht<br />
auf X angewendet werden muss, liegt daran, dass X nicht in Dompσq vorkommen kann, da es<br />
falls es vom Stack genommen wird, in den zwei Zeilen nach pop() wegsubstituiert wird (O-Ton<br />
Schrö<strong>der</strong>: „on-the-fly“).<br />
Jetzt nehmen wir uns einen Hilfsunifikator τ, von <strong>der</strong> wir zeigen wollen, dass wenn τ Element <strong>der</strong><br />
linken Seite (LHS) ist, daraus folgt dass τ Element <strong>der</strong> rechten Seite ist, also effektiv die LHS<br />
gleich <strong>der</strong> RHS ist.<br />
τ P LHS<br />
ðñ τ P Unif(Stack 1 q σ ^ τpXq “ Dστ<br />
ðñ τ P Unif(Stack 1 σrX ÞÑ Dστsq ^ τpXq “ Dστ<br />
ðñ τ P RHS<br />
Da sich τ disjunkt in einen Teil mit (Effekt auf) X <strong>und</strong> einen Teil ohne zerlegen lässt, sind wir an<br />
<strong>der</strong> Stelle fertig. TODO: das hier in human-un<strong>der</strong>standable<br />
Terminierung<br />
Def.<br />
Terminierung bei Stack = [], also UnifpSq “ σ Unif [] ðñ σ “ mgu S, da Unif [] die Menge aller<br />
Substitutionen ist. Dass <strong>der</strong> Algorithmus terminiert, lässt sich argumentieren, indem je<strong>der</strong> Schritt<br />
offensichtlich entwe<strong>der</strong><br />
i) Ein Operationssymbol vom Stack nimmt, <strong>der</strong> dadurch kleiner wird, o<strong>der</strong><br />
ii) eine Variable vom Stack nimmt, evtl. <strong>der</strong> Substitution σ hinzufügt <strong>und</strong> dadurch den Stack ebenfalls<br />
verkleinert.<br />
Definition: Unifizierbarkeit<br />
22