Skript (Fassung vom 4.4.2011) - Lehr- und Forschungsgebiet ...
Skript (Fassung vom 4.4.2011) - Lehr- und Forschungsgebiet ...
Skript (Fassung vom 4.4.2011) - Lehr- und Forschungsgebiet ...
Erfolgreiche ePaper selbst erstellen
Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.
(b) Wir zeigen U(S) = U(S ′ ) falls S ′ aus S mit Hilfe der Regel “Variablenreduktion”<br />
entsteht, da die Aussage für alle anderen Regeln offensichtlich ist. Da {x = t} in<br />
gelöster Form ist, ist σ = {x/t} nach Lemma 5.1.6 allgemeinster Unifikator dieses<br />
Unifikationsproblems. Für alle Substitutionen θ mit xθ = tθ gilt nach dem Lemma<br />
demnach θ = σθ. Damit erhält man:<br />
θ ∈ U(S ⊎{x = t}) gdw. xθ = tθ <strong>und</strong> θ ∈ U(S)<br />
gdw. xθ = tθ <strong>und</strong> σθ ∈ U(S)<br />
gdw. xθ = tθ <strong>und</strong> uσθ = vσθ für alle u = v ∈ S<br />
gdw. xθ = tθ <strong>und</strong> θ ∈ U({uσ = vσ | u = v ∈ S})<br />
gdw. θ ∈ U({uσ = vσ | u = v ∈ S}∪{x = t})<br />
(c) Wenn S lösbar ist, kann es keine Gleichungen f(...) = g(...) mit f ≠ g enthalten,<br />
da diese Gleichungen dem Clash Failure entsprechen würden. S kann auch keine<br />
Gleichungen f(...) = f(...) enthalten, da sonst die “Termreduktion”-Regel anwendbar<br />
wäre. Aus s = t ∈ S folgt daher s ∈ V oder t ∈ V. Falls s ∉ V, so wäre die<br />
“Vertauschen”-Regel anwendbar. Somit haben alle Gleichungen in S die Form x = t.<br />
Hierbei gilt x ∉ V(t). Der Gr<strong>und</strong> ist, dass t = x nicht möglich ist, da sonst die<br />
“Löschen”-Regel anwendbar wäre <strong>und</strong> x ∈ V(t) bei t ≠ x würde dem Occur Failure<br />
entsprechen. Die Variable x kommt darüber hinaus in keiner anderen Gleichung aus<br />
S vor, da sonst die “Variablenreduktion” anwendbar wäre. Somit ist S in gelöster<br />
Form.<br />
(d) Die Terminierung von UNIFY folgt direkt aus Teil (a). Somit berechnet UNIFY(S)<br />
also eine Normalform von S, d.h., ein Unifikationsproblem S ′ mit S =⇒ ∗ S ′ , das in<br />
Normalform bezüglich =⇒ ist. Durch Induktion über die Länge der Transformation<br />
kann man mit Hilfe von Teil (b) zeigen, dass U(S) = U(S ′ ) ist. Falls S lösbar ist, ist<br />
U(S) = U(S ′ ) ≠ ∅ <strong>und</strong> somit ist auch S ′ lösbar. Nach Teil (c) ist daher S ′ in gelöster<br />
Form <strong>und</strong> σ S ′ ist nach Lemma 5.1.6 allgemeinster Unifikator von S ′ <strong>und</strong> daher auch<br />
von S. Falls S nicht lösbar ist, ist U(S) = U(S ′ ) = ∅. Somit kann S ′ nicht in gelöster<br />
Form sein <strong>und</strong> der Algorithmus gibt “False” aus.<br />
✷<br />
Aus diesem Satz erhält man sofort den bekannten Unifikationssatz, der sich daraus<br />
ergibt, dass UNIFY zu jedem lösbaren Unifikationsproblem einen allgemeinsten Unifikator<br />
berechnet.<br />
Korollar 5.1.10 (Unifikationssatz) Wenn ein Unifikationsproblem lösbar ist, dann hat<br />
es einen allgemeinsten Unifikator.<br />
Die Effizienz des Algorithmus UNIFY lässt sich natürlich noch verbessern, indem man<br />
sofort mit “False” abbricht, sobald ein Occur oder Clash Failure bemerkt wird. Durch<br />
weitere Verbesserungen (insbesondere durch die Repräsentation der Terme als Graphen)<br />
lässt sich sogar ein Unifikationsalgorithmus mit linearem Aufwand gewinnen.