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.