08.10.2013 Aufrufe

Download (1405Kb)

Download (1405Kb)

Download (1405Kb)

MEHR ANZEIGEN
WENIGER ANZEIGEN

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

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!