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.
Kapitel 4<br />
Die Standardsemantiken<br />
Nachdem wir nun die Syntax unserer Programme und die Grundlagen ihrer Semantik festgelegt<br />
haben, zeigen wir in 4.1 einige Beziehungen zwischen unseren Programmen und den wohlbekannten<br />
Kalkülen der Funktionsschemata, der Termersetzungssysteme und algebraischer Spezifikationen<br />
auf. Daraufhin betrachten wir die in funktionalen Programmiersprachen eingesetzten und insbesondere<br />
im Rahmen der Funktionsschemata untersuchten zwei Auswertungsmechanismen call-by-value<br />
(cbv) und call-by-name (cbn). Diese wollen wir als Grundlage (invarianter) Grundtermsemantiken<br />
verwenden.<br />
Zuerst stellen wir in 4.2 die cbv-Semantik vor. In 4.2.1 definieren wir diese operationell durch<br />
eine Reduktionssemantik und in 4.2.2 auf denotationelle Weise. Die denotationelle Definition erfolgt<br />
mit einer auf ω-vollständigen Halbordnungen und dem Fixpunktsatz von Tarski beruhenden<br />
Fixpunktsemantik. In 4.2.3 zeigen wir dann die Übereinstimmung dieser beiden Definitionen.<br />
Entsprechend definieren wir in 4.3 die cbn-Semantik. In 4.3.1 geben wir hierzu eine Fixpunktsemantik<br />
an und in 4.3.2 eine Reduktionssemantik. Den Beweis der Übereinstimmung der beiden<br />
Definitionen werden wir erst in Kapitel 5 führen.<br />
4.1 Call-by-value und call-by-name<br />
Funktionsschemata bilden die theoretische Grundlage funktionaler Programmiersprachen erster<br />
Ordnung. [Cou90] stellt hierzu eine Übersicht dar. Sie ähneln sehr unseren Programmen mit<br />
Hilfsfunktionen; insbesondere, da sie ebenfalls kein Patternmatching verwenden. Allerdings werden<br />
Funktionsschemata stets unabhängig von einem konkreten Basisdatentyp betrachtet. Dagegen<br />
sollen unsere Programme einen festen, aber doch sehr allgemeinen, auf Konstruktoren beruhenden<br />
Basisdatentyp besitzen. Hierzu gehören auch die unabhängig von einem konkreten Programm<br />
definierten Operationen der Hilfssymbole. Somit sind unsere Programm mit Hilfsfunktionen Funktionsschemata<br />
mit speziellen Basisdatentypen (Interpretationen in der Terminologie der Funktionsschemata).<br />
Wir können nun bekannte semantische Konzepte der Funktionsschemata für unsere<br />
Programme verwenden. Die insbesondere in [Gue81] betrachteten algebraischen Semantiken — nicht<br />
zu verwechseln mit unserer algebraischen Termsemantik — werden wir dabei nicht verwenden, da<br />
diese nur bei Betrachtung beliebiger Basisdatentypen vorteilhaft sind. Jedoch werden wir sowohl<br />
die bekannten, auf dem call-by-value und dem call-by-name Auswertungsmechanismus beruhenden<br />
Reduktionssemantiken, auf die wir gleich wieder zurückkommen werden, als auch die entsprechenden<br />
Fixpunktsemantiken auf Programme übertragen. Leider betrachten die Fixpunktsemantiken<br />
von Funktionsschemata meistens nur Basisdatentypen über flachen Halbordnungen, während wir<br />
schon in 4.3.1 andere ω-vollständige Halbordnungen verwenden müssen. Diese Semantiken und ihre