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.
Kapitel 7<br />
Sequentialität<br />
In diesem Kapitel beschäftigen wir uns mit der Ausdrucks- bzw. Berechnungsstärke unserer Programmiersprachen,<br />
d. h. der Programme mit Pattern und der Programme mit Hilfsfunktionen zusammen<br />
mit den ς-Semantiken.<br />
Zuerst werfen wir in 7.1 einen Blick auf die verschiedenen Vergleichsmöglichkeiten.<br />
Eine von diesen untersuchen wir dann in 7.2 genauer: In Anbetracht der Tatsache, daß wir einerseits<br />
Programme mit Pattern und andererseits Programme mit Hilfsfunktionen definiert haben, stellt sich<br />
die Frage, ob beide Programmarten in Verbindung mit den ς-Semantiken gleich ausdrucksstark sind,<br />
und ob sich Programme der einen Art in Programme der anderen Art effektiv semantikerhaltend<br />
übersetzen lassen. Dabei stellen wir fest, daß Programme mit Pattern echt ausdrucksstärker als<br />
Programme mit Hilfsfunktionen sind.<br />
In 7.3 beweisen wir diese Aussage formal mit Hilfe der semantischen Eigenschaft der Sequentialität.<br />
Da die Sequentialität eine fundamentale Eigenschaft im Bereich funktionaler Programmiersprachen<br />
und dem Kalkül der Termersetzungssysteme ist, betrachten wir sie in 7.4 noch näher. Sie stellt<br />
exakt das Scheidekriterium zwischen den Ausdrucksstärken der Programme mit Pattern und der<br />
mit Hilfsfunktionen dar. Auch liefert sie Anregungen für effiziente ς-Reduktionsstrategien.<br />
7.1 Berechnungsstärke unserer Programmiersprachen<br />
Da, wie wir schon in der Einleitung anmerkten, alle in einer funktionalen Programmiersprache<br />
spezifizierbaren Abbildungen auch berechenbar sind (mit gewissen Einschränkungen bezüglich der<br />
partiellen und der unendlichen Konstruktorterme), sind die Begriffe Ausdruckstärke und Berechnungsstärke<br />
in diesem Rahmen austauschbar.<br />
Wollen wir die absolute Berechungsstärke unserer Programmiersprachen bestimmen, so müssen wir<br />
feststellen, daß diesbezüglich durchaus unterschiedliche Definitionen existieren.<br />
In der klassischen Berechenbarkeitstheorie werden nur berechenbare (rekursive) Abbildungen<br />
über den natürlichen Zahlen und über der Halbgruppe der Wörter (Zeichenketten) betrachtet<br />
([Hermes78]). Wenn wir die natürlichen Zahlen durch die Konstruktorsymbole Zero und Succ<br />
aufbauen, so können wir alle berechenbaren Abbildungen über den natürlichen Zahlen spezifizieren,<br />
denn in unseren Programmiersprachen sind Nachfolgerbildung(SuccDP,ς), Projektion (Pattern<br />
oder Selektion sel DP,ς<br />
G,i ), Konstantenbildung, primitive Rekursion und Minimalisierung spezifizierbar.<br />
Ebenso lassen sich offensichtlich alle berechenbaren Abbildungen über Wörtern spezifizieren (vgl.<br />
[Dau89]).