Lehrstuhl für Programmierparadigmen
Joachim Breitner Denis Lohner breitner@kit.edu denis.lohner@kit.edu
Semantik von Programmiersprachen – SS 2015
http://pp.ipd.kit.edu/lehre/SS2015/semantik
Blatt 9: Denotationale Semantik mit Fixpunktiteration Besprechung: 08.06.2015
1. Welche der folgenden Aussagen sind richtig, welche falsch? (H)
(a) Die folgende Rekursionsgleichung definiert die Funktionf ::N⇒Neindeutig:
f(n) =
(2·f n2
fallsngerade f(n+ 1)−1 fallsnungerade
(b) Die folgende Rekursionsgleichung definiert die Funktiong::N⇒Neindeutig:
g(n) =
( g n22
fallsngerade g(n−1) fallsnungerade (c) Das FunktionalF :: (Σ*Σ)⇒(Σ*Σ) mit
F(f) =λσ.
((f(σ[x7→42]))[y7→23] fallsσ(z)≤17
σ[z7→0] sonst
gehört zur Rekursionsgleichung Q(σ) =
((Q(σ[x7→42]))[y7→23] fallsσ(z)≤17
σ[z7→0] sonst
(d) Für das FunktionalF :: (Σ*Σ)⇒(Σ*Σ) mit
F(f) =λσ.
(f(σ[y7→12]) fallsσ(x) = 13 σ[x7→10] sonst
gilt
F42(⊥)(σ) =
(⊥ fallsσ(x) = 13 σ[x7→10] sonst
(e) DJc1; (c2; c3)K=DJ(c2; c1); c3K
(f) DJ(if (x <= y) then z := x else z := y); skipKσ=σ[z7→min(σ(x), σ(y))]
2. Fixpunktiteration (H)
Gegeben sei folgendes ProgrammP:
x := 0; i := n; while (1 <= i) do (x := x + 2 * i; i := i - 1)
(a) Geben Sie das FunktionalF an, das in der denotationellen Semantik zur Schleife gehört.
(b) Berechnen SieF0(⊥),F1(⊥),F2(⊥) und F3(⊥).
(c) Geben SieFn(⊥) und FIX (F) an (ohne Beweis).
(d) Geben SieDJPKan.
3. Lokale Variablen in Blöcken (Ü)
In Kap. 5.3 haben wir dieWhile-Sprache um Blöcke mit lokalen Variablen erweitert und operationale Semantiken dafür angegeben. Erweitern Sie in diesem Abschnitt die denotationale Semantik entsprechend.
(a) Definieren SieDJ_Kfür das neue Sprachkonstrukt{ var x = a; c }. Bleibt dadurchDJ_K kompositional?
(b) Zeigen oder widerlegen Sie:
DJ{ var z = x; x := y; y := z }K=DJx := x + y; y := x - y; x := x - yK
Semantik von Programmiersprachen – Blatt 9 2