Semantik von Programmiersprachen Serie 5 - Christian

Werbung
Christian-Albrechts-Universität zu Kiel
Institut für Informatik
R. Berghammer, N. Danilenko
Semantik von Programmiersprachen
Wintersemester 2012/13
Für Mittwoch, den 28.11.12
Serie 5
Aufgabe 1 (Berechnung der Semantik)
Bestimmen Sie die Semantik des folgenden Terms der Sprache LA :
fun G = (n : nat) : nat;
if n > 0 then n − 1
else G(G(n + 2)) fi
Wie ändert sich die Semantik dieser Rechenvorschrift, wenn man die Sorte nat durch die Sorte int ersetzt?
Aufgabe 2 (Semantische Gleichwertigkeit)
Wir betrachten die folgende Rechenvorschrift der Sprache LA :
fun F = (x : nat) : nat;
if x = 0 then 1
else F (F (x − 1) − 1) + 1 fi
Zeigen Sie, dass die Semantik dieses Terms der Semantik J(x : nat) : nat; x + 1K entspricht, indem Sie
diese Aussage punktweise für alle Zuordnungen a ∈ EN V verifizieren.
Aufgabe 3 (Definition eines Operators)
In dieser Aufgabe bezeichnen wir mit x → y die Funktionssorte mit der Interpretation (X → Y ), wobei
Y eine Interpretation der Sorte y und X eine solche der Sorte x sei. Wir betrachten den folgenden Term
in der Sprache LA :
fun M = (f : s → s) : s;
f (M (f ))
(a) Bestimmen Sie das durch diesen Term bestimmte Funktional bezüglich der call-by-name-Semantik.
(b) Was ist der kleinste Fixpunkt dieses Funktionals? Hinweis: Sie müssen hier nicht rechnen.
(c) Geben Sie eine Haskell-Definition der obigen Berechnungsvorschrift an.
(d) Wir betrachten die folgende Haskell-Funktion
f unctional :: (Int → Int) → (Int → Int)
f unctional g n = if n ≤ 0 then 1
else n ∗ g(n − 1)
Was wird durch die Terme m f unctional 0, m f unctional 3, m f unctional 5 berechnet? Wir gehen
für diese Aufgabe von der Prämisse aus, dass die Semantik der obigen Ausdrücke in Haskell jener
entspricht, welche durch “direkte” Übersetzung in die Sprache LA entsteht.
Aufgabe 4 (Regeln für bedingte Ausdrücke)
Seien b, t1 , t2 und r Terme passenden Typs in der Sprache LA . Geben Sie Bedingungen an, unter welchen
für jede Zuordnung a ∈ EN V die folgenden semantischen Gleichwertigkeiten gelten:
(a) Jr(if b then t1 else t2 fi)K(a) = Jif b then r(t1 ) else r(t2 ) fi)K(a)
(b) Jif b then t1 else t1 fiK(a) = Jt1 K(a)
(c) Jif b then t1 else t2 fiK(a) = Jif not(b) then t2 else t1 fiK(a)
Zeigen Sie anhand von Gegenbeispielen, dass auf diese Bedingungen nicht verzichtet werden kann.
Herunterladen