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.
terminiert das Programm (nach Satz 4.4.9 <strong>und</strong> Satz 4.3.4). Ansonsten kann man keine<br />
Aussage über die Terminierung von R treffen.<br />
Dieses Verfahren ist deutlich stärker als die Verwendung der Einbettungsordnung. Der<br />
Gr<strong>und</strong> ist, dass jede lexikographische Pfadordnung eine Simplifikationsordnung ist <strong>und</strong><br />
daher die Einbettungsordnung in jeder lexikographischen Pfadordnung enthalten ist.<br />
In Def. 4.4.6 findet der lexikographische Vergleich der Argumente immer von links nach<br />
rechts statt, d.h., wenn s = f(s 1 ,...,s i ,...,s n ), t = f(t 1 ,...,t i ,...,t n ) <strong>und</strong> s i ≻ lpo t i ist,<br />
so verlangen wir s j = t j für 1 ≤ j < i <strong>und</strong> s ≻ lpo t j für i < j ≤ n. Selbstverständlich könnte<br />
man stattdessen auch einen lexikographischen Vergleich von rechts nach links verwenden.<br />
Die dritte Bedingung in der Definition der lexikographischen Pfadordnung müsste dann wie<br />
folgt geändert werden:<br />
• s = f(s 1 ,...,s i−1 ,s i ,s i+1 ,...,s n ), t = f(t 1 ,...,t i−1 ,t i ,s i+1 ,...,s n ), s i ≻ lpo t i <strong>und</strong><br />
s = f(s 1 ,...,s i−1 ,s i ,s i+1 ,...,s n ) ≻ lpo t j für alle j ∈ {1,...,i−1}.<br />
Diese Variante der lexikographischen Pfadordnung ist z.B. nötig, wenn man die Terminierung<br />
des folgenden TES nachweisen will.<br />
pred(O) → O<br />
pred(succ(x)) → x<br />
minus(x,O) → x<br />
minus(x,succ(y)) → minus(pred(x),y)<br />
Die Ungleichungen, die aus den ersten drei Regeln entstehen, werden bereits von der Einbettungsordnung<br />
erfüllt. Für die letzte Regel müssen wir jedoch<br />
minus(x,succ(y)) ≻ lpo minus(pred(x),y)<br />
nachweisen. Wenn man die Argumente lexikographisch von links nach rechts vergleicht, ist<br />
dies nicht möglich, da x ⋡ lpo pred(x) gilt. Bei der Variante der lexikographischen Pfadordnung,<br />
die von rechts nach links vergleicht, gelingt dieser Beweis jedoch bei der Präzedenz<br />
minus ❂ pred, da wir dann succ(y) ≻ lpo y <strong>und</strong> minus(x,succ(y)) ≻ lpo pred(x) haben. Das<br />
obige Programm terminiert daher.<br />
Neben dem lexikographischen Vergleich von links nach rechts <strong>und</strong> von rechts nach links<br />
sind natürlich auch alle anderen Permutationen der Argumente möglich. Um auch die Terminierung<br />
von Programmen nachzuweisen, die sowohl einen Algorithmus wie sum (für den<br />
man die Argumente von links nach rechts vergleichen muss) als auch einen Algorithmus<br />
wie minus enthalten (für den man von rechts nach links vorgehen muss), kann man jedes<br />
Funktionssymbol mit einem sogenannten Status versehen, der angibt, auf welche Weise die<br />
Argumente dieses Funktionssymbols verglichen werden sollen. Der Status von sum wäre<br />
dann die Permutation 〈1,2〉 (da die Argumente in dieser Reihenfolge verglichen werden)<br />
<strong>und</strong> der Status von minus wäre 〈2,1〉.<br />
Es gibt jedoch auch TESe, bei denen es keine Permutation der Argumente gibt, so dass<br />
der lexikographische Vergleich erfolgreich ist.