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.

6.3. DER PARTIELLE CBV-DATENTYP VON PROGRAMMEN MIT PATTERN 151<br />

Mit der Monotonie von Π und Π −1 gemäß Lemma 6.12 folgt<br />

Π(DP,cbv) ⊑ Π(Π −1 ()) =.<br />

Dabeliebig ist, ist Π(DP,cbv) das kleinste partielle cbv-Interpretationsmodell von P, und somit<br />

ist gemäß Definition 6.14 des partiellen cbv-Datentyps<br />

D part<br />

P,cbv = Π(DP,cbv)<br />

Die zweite Gleichung folgt analog bzw. aus der Surjektivität von Π. ✷<br />

Hiermit haben wir die Berechtigung der Bezeichnung von D part<br />

P,cbv als partiellen cbv-Datentyp gezeigt,<br />

und außerdem dessen Wohldefiniertheit bewiesen. Die Existenz von DP,cbv ist aufgrund der<br />

Wohldefiniertheit der cbv-Fixpunktsemantik bekannt, und somit existiert auch D part<br />

P,cbv = Π(DP,cbv).<br />

Insgesamt stellen wir also fest, daß nicht nur die cbn-Semantik, sondern auch die cbv-Semantik deklarativ<br />

definierbar ist. Wie wir sehen, ist die Wahl der zugrundeliegenden mathematischen Struktur<br />

von entscheidender Bedeutung. Bei der cbn-Semantik sind es die geordneten totalen Algebren,<br />

während zu der cbv-Semantik die auch intuitiv natürlicheren partiellen Algebren am besten passen.<br />

Bemerkung 6.1: Verzweigungskontrollstrukturen<br />

Alle Aussagen dieses Abschnitts 6.3 betreffen nur Programme mit Pattern. Es ist aber durchaus<br />

möglich, für Programme, die ähnliche Verzweigungskontrollstrukturen wie die Verzweigungssymbole<br />

condG der Programme mit Hilfsfunktionen besitzen, eine cbv-Semantik auf der Grundlage partieller<br />

Algebren zu definieren. Hierbei dürfen die Verzweigungssymbole nur nicht mehr Teil der Signatur<br />

Σ sein, und ihre Semantik muß völlig getrennt von der Semantik der Signatursymbole betrachtet<br />

werden.<br />

Beispielsweise könnten sogenannte ” Guards“, wie sie in Miranda und Haskell existieren, definiert<br />

werden:<br />

f(p1, . . . , pn) → t1, ifG1 (s1)<br />

t2, ifG2 (s2)<br />

.<br />

tm, otherwise<br />

Nur t1, . . .,tm und s1, . . .,sm−1 sind Terme, während die gesamte rechte Seite ein semantisch getrennt<br />

von diesen zu betrachtendes Konstrukt ist.<br />

Diese ” Guards“ vereinfachen die Programmierung. Sie erhöhen keinesfalls die Berechnungsstärke der<br />

Programme, da sich Programme mit ” Guards“ leicht in Programme mit Pattern mit zusätzlichen<br />

Funktionssymbolen übersetzen ließen (vgl. 7.2).<br />

In [Broy&Wir83] werden partielle Algebren sogar für nicht-strikte Semantiken verwendet. Dies<br />

geschieht aber auch erst vermittels eines Umwegs über totale Algebren, die dann auf partielle<br />

Algebren abgebildet werden. ✷<br />

Bemerkung 6.2: Totale Homomorphismen und Definiertheitsprädikate<br />

Wir haben partielle cbv-Interpretationen zusammen mit einer kanonischen Halbordnung definiert,<br />

um mit deren Hilfe den partiellen cbv-Datentypen D part<br />

P,cbv festzulegen. Dies geschah so, um eine<br />

Analogie zu unserem Vorgehen bei totalen Algebren zu schaffen. Es entspricht jedoch nicht der<br />

üblichen, in Abschnitt 3.2.2 in [Wir90] beschriebenen Methode.

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!