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.
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.