Download (1405Kb)
Download (1405Kb)
Download (1405Kb)
Erfolgreiche ePaper selbst erstellen
Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.
4.2. DIE CBV-SEMANTIK 53<br />
Beispiel 4.3 Verzweigung und innermost Redexstellen<br />
add(x,y) → condSucc(y, Succ(add(x, selSucc,1(y))), x)<br />
Bei Verwendung der leftmost-innermost ∗ Reduktion ergibt sich<br />
add(Zero,Zero) −−→<br />
P,li ∗<br />
−−→<br />
P,li ∗<br />
−−→<br />
P,li ∗<br />
condSucc(Zero, Succ(add(Zero, selSucc,1(Zero))), Zero)<br />
condSucc(Zero, Succ(<br />
eine unendliche Reduktionsfolge. Demnach wäre<br />
condSucc(selSucc,1(Zero),<br />
Succ(add(Zero, selSucc,1(selSucc,1(Zero)))), Zero)<br />
,Zero)<br />
...<br />
[[add(Zero,Zero)]] li∗<br />
P = ⊥.<br />
Erst bei Verwendung der li-Reduktion erhält man mit<br />
add(Zero,Zero) −−→<br />
P,li cond Succ(Zero,Succ(add(Zero, selSucc,1(Zero))),Zero) −−→<br />
P,li Zero<br />
das gewünschte Ergebnis. ✷<br />
Da in Funktionsschemata Funktionen immer vollständig spezifiziert sind — zu jedem Funktionssymbol<br />
existiert genau eine Regel — , kommt unsere erste Abweichung dort gar nicht zum Tragen. Weil<br />
in Funktionsschemata unsere Verzweigungen überlicherweise zum Basisdatentyp gehören würden,<br />
für den keine ” normalen“ Reduktionsregeln existieren, fällt auch der zweite Punkt erst bei Betrachtung<br />
unserer Programme mit Hilfsfunktionen auf. Nur [Cou90] definiert auch eine Verzweigung<br />
if-then-else-fi mit fester Bedeutung und verwendet daher eine ähnliche Definition wie wir.<br />
Bemerkung 4.1: Innermost Redexe und Redexstellen<br />
Wir haben (leftmost-)innermost Redexstellen, jedoch keine (leftmost-)innermost Redexe eines<br />
Terms definiert. Wir haben auf die Definition der letzteren verzichtet, da sich der intendierte<br />
leftmost-innermost Redex gar nicht korrekt definieren läßt. Bezeichnen wir nämlich den an der<br />
leftmost-innermost Redexstelle in einem Term t befindlichen Redex ˆ l als leftmost-innermost Redex,<br />
so entsteht folgendes Problem: genau der gleiche Redex kann noch an anderen Stellen in t<br />
auftauchen. Dort soll er aber kein li-Redex sein.<br />
In einem Term t = f(g(A),g(A)) soll beispielsweise der Teilterm t/1 = g(A) ein li-Redex sein, nicht<br />
jedoch der Teilterm t/2.<br />
Das gleiche Problem taucht auch beim outermost Redex auf, der an einer anderen Stelle auch<br />
Teilterm eines Redexes sein kann; ebenso beim lo-Redex. Daher werden wir in 4.3.2 auch nur<br />
(leftmost-)outermost Redexstellen definieren.<br />
Nur ein innermost Redex ließe sich tatsächlich sinnvoll definieren, da diese Eigenschaft nur von<br />
dem Redex selber und nicht von seiner Stellung in einem Term abhängt. ✷<br />
Wir wollen uns nun noch einmal das Programm aus Beispiel 3.6, S. 45, anschauen, dessentwegen<br />
wir die Normalformsemantik zurückgewiesen haben.