Download (1405Kb)
Download (1405Kb)
Download (1405Kb)
Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.
YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.
3.2. DIE REDUKTIONSRELATIONEN 43<br />
Reduktionsregeln fest definiert und nicht durch den Programmierer veränderbar. Somit können diese<br />
in Implementationen direkt effizient, ohne ein explizites Patternmatching, codiert werden (vgl.<br />
mit Stackcode für die Verzweigung in rekursiven Funktionsdefinitionen in [Ind93]).<br />
Das assoziierte Termersetzungssystem eines Programms dient nun als Grundlage operationeller<br />
Semantiken. Es hat die folgende entscheidende Eigenschaft:<br />
Lemma 3.1 Beinahe Orthogonalität assoziierter Termersetzungssysteme<br />
Das assoziierte Termersetzungssystem jedes Programms (mit Pattern oder mit Hilfsfunktionen) ist<br />
beinahe orthogonal.<br />
Beweis:<br />
Assoziierte Termersetzungssysteme sind linkslinear, und die Erfüllung der Eindeutigkeitsbedingung<br />
beinahe orthogonaler Termersetzungssysteme folgt direkt aus der eingeschränkten Form linker Regelseiten<br />
und der Eindeutigkeitsbedingung der Programme mit Pattern bzw. mit Hilfsfunktionen.<br />
Auch die Reduktionsregeln der Hilfssymbole sind linkslinear und erfüllen die Eindeutigkeitsbedingung<br />
der Programme mit Pattern. ✷<br />
Somit gelten alle Eigenschaften beinahe orthogonaler Termersetzungssysteme auch für Programme<br />
bzw. deren assoziierte Termersetzungssysteme. Insbesondere ist die Reduktionsrelation −−→<br />
ˆP<br />
eines assoziierten Termersetzungssystems ˆ P konfluent; eine entscheidende Voraussetzung für die<br />
Wohldefiniertheit operationeller Semantiken, wie wir noch feststellen werden.<br />
In Anbetracht der Tatsache, daß wir die Reduktionsrelationen eines Termersetzungssystems nur auf<br />
Grundtermen definiert haben, wird hier nicht deutlich, daß die Reduktionsrelation −−→ eines bei-<br />
R<br />
nahe orthogonalen Termersetzungssystems R auch über der Menge aller Terme TΣ(X) konfluent ist.<br />
Wir benötigen jedoch nur Grundkonfluenz. Die Menge der grundkonfluenten Termersetzungssysteme<br />
ist echt größer als die Menge der konfluenten Termersetzungssysteme. Da jedoch Grundkonfluenz<br />
eine weitaus schwieriger zu verifizierende Eigenschaft als Konfluenz ist ([KNO90]), verzichten wir<br />
auf die Untersuchung diesbezüglich eventuell möglicher größerer Freiheitsgrade der Syntax unserer<br />
Programme.<br />
Die Bedeutung der Eindeutigkeitsbedingung der Programme und der Forderung der Linkslinearität<br />
ist somit klar. Freilich mag es scheinen, daß in Anbetracht der übrigen syntaktischen Einschränkungen<br />
die Linkslinearität überflüssig wäre. Das folgende Beispiel demonstriert jedoch, daß dann die<br />
Konfluenz verloren ginge.<br />
Beispiel 3.5 Fehlende Konfluenz bei fehlender Linkslinearität (S.174 in [Klop87])<br />
d(x,x) → E<br />
c(x) → d(x,c(x))<br />
a → c(a)<br />
Für den Term c(a) gibt es die zwei Reduktionsketten<br />
c(a) −−→ d(a,c(a)) −−→ d(c(a),c(a)) −−→ E<br />
c(a) −−→ c(c(a)) −−→ c(d(a,c(a))) −−→ c(d(c(a),c(a))) −−→ c(E)<br />
Die beiden Terme E und c(E) lassen sich jedoch nicht zu einem gemeinsamen Term reduzieren. E<br />
ist bereits in Normalform und c(E) läßt sich nicht zu E reduzieren. c(E) besitzt überhaupt keine<br />
Normalform. ✷