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.
4.2. DIE CBV-SEMANTIK 59<br />
Für den durch ein Programm spezifizierten Datentyp D ∈ IntΣ,cbv muß natürlich D = ΦP,cbv(D)<br />
gelten, d. h. D muß ein Fixpunkt der Transformation sein. Die Transformationen der meisten Programme<br />
besitzen allerdings viele Fixpunkte:<br />
undef → undef<br />
Da dieses Programm über den semantischen Wert von undef überhaupt nichts aussagt, ist es sinnvoll,<br />
undef den semantischen Wert für fehlende Information oder Undefiniertheit, ⊥, zuzuordnen.<br />
Entsprechend wählen wir von allen Fixpunkten der Transformation den kleinsten als Datentyp des<br />
Programms. Dieser kleinste Fixpunkt ist praktisch der kleinste gemeinsame Nenner aller Fixpunkte<br />
bezüglich des Informationsgehalts und besitzt somit nur die Eigenschaften, die durch das Programm<br />
eindeutig spezifiziert werden.<br />
Definition 4.5 cbv-Fixpunktdatentyp und cbv-Fixpunktsemantik<br />
Der cbv-Fixpunktdatentyp Dfix des Programms P ist definiert als der kleinste Fixpunkt der<br />
cbv-Transformation ΦP,cbv:<br />
P,cbv<br />
D fix<br />
P,cbv := Fix(ΦP,cbv) = <br />
i∈IN<br />
(ΦP,cbv) i (⊥cbv).<br />
Die cbv-Fixpunktsemantik [[t]] fix<br />
P,cbv des Grundterms t ∈ TΣ bezüglich P ist definiert als die<br />
algebraische Grundtermsemantik von t bezüglich des cbv-Fixpunktdatentyps:<br />
[[t]] fix<br />
P,cbv := [[t]] alg<br />
Dfix .<br />
P,cbv<br />
Hier wird die ω-Vollständigkeit der cbv-Interpretation benötigt. Aus ihr folgt die ω-Stetigkeit der<br />
cbv-Transformation (siehe Kapitel 5) und mit dem Fixpunktsatz von Tarski wissen wir, daß jede<br />
cbv-Transformation einen kleinsten Fixpunkt besitzt. Somit ordnet unsere Fixpunktsemantik<br />
wirklich jedem syntaktisch korrekten Programm genau eine Bedeutung, einen Datentyp zu.<br />
Der Fixpunktsatz gibt uns sogar gewissermaßen eine Methode zur Bestimmung des cbv-Fixpunktdatentyps.<br />
Beginnend mit der kleinsten Interpretation ⊥cbv können wir durch fortwährende Anwendung<br />
der Transformation unseren Datentyp erreichen. Freilich stellt dies kein effektives Verfahren<br />
zur Berechnung des Datentyps dar, da erstens die Iteration im allgemeinen bis ∞ geht, und wir<br />
zweitens Interpretationennicht direkt endlich darstellen können. Interpretationen lassen sich<br />
durch Programme darstellen, womit wir uns aber im Kreis drehen. Somit ist die Fixpunktsemantik<br />
wirklich keine operationelle Semantik, sondern eine denotationelle. Ein Programm denotiert einen<br />
Datentyp.<br />
Diese Methode der iterativen Anwendung der Transformation bildet übrigens die Grundlage der<br />
abstrakten Interpretation (Kapitel 20 in [Fie&Har88]). Damit lassen sich gewisse semantische<br />
Eigenschaften von Programmen — insbesondere für Optimierungszwecke — feststellen.<br />
Beispiel 4.5 Bestimmung eines cbv-Fixpunktdatentyps (siehe Bsp. 3.6, S. 45)<br />
liste1 → []:liste1<br />
liste2 → [[]]:liste2<br />
head(x:xs) → x<br />
✷