04.11.2014 Aufrufe

Grundlagen der Logik und Logikprogrammierung

Grundlagen der Logik und Logikprogrammierung

Grundlagen der Logik und Logikprogrammierung

MEHR ANZEIGEN
WENIGER ANZEIGEN

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

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!