08.10.2013 Aufrufe

Download (1405Kb)

Download (1405Kb)

Download (1405Kb)

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.

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.

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!