Universit¨ at Siegen
Lehrstuhl Theoretische Informatik Carl Philipp Reh
Funktionales Programmieren SS 2020
Ubungsblatt 11 ¨
Aufgabe 1. Bestimmen Sie f¨ ur die folgenden Haskell-Programme jeweils die Semantik. Welche Funktionen m¨ ussen bereits in der Umgebung eingetragen sein? Welche Data-Deklarationen muss es im Programm geben?
(a)
let a = \ x -> x == 42 in a 3
L¨ osung. Zun¨ achst fordern wir, dass wir die ¨ ubliche Definition von Bool haben. Dann fordern wir, dass in jeder Umgebung η gilt, dass
η((==)) : Dom → Dom → Dom,
η((==))(x)(y) =
True falls x = y und x, y ∈ Z , False falls x 6= y und x, y ∈ Z ,
⊥ sonst.
Als Semantik ergibt sich dann
J let a = \x −> x == 42 in a 3 K η = J a 3 K η 4 [a/µf] , wobei f : Dom → Dom definiert ist als
f (d) = J \x −> x == 42 K η 4 [a/d] .
Man beachte, dass a hier keine Rolle spielt, weil die Definition nicht rekursiv ist. Deshalb gilt
µf = J \x −> x == 42 K η = f 0 , wobei f 0 : Dom → Dom die Funktion ist mit
f 0 (d) = J x == 42 K η 4 [x/d]
= J (==) K η 4 [x/d] ( J x K η 4 [x/d] )( J 42 K η 4 [x/d] )
=
True falls d = 42,
False falls d 6= 42 und d ∈ Z ,
⊥ sonst.
Damit erhalten wir J a 3 K η 4 [a/µf] = f 0 (3) = False.
1
(b)
let s = \ x -> case x <= 0 of { True -> 0
; F a l s e -> x + s ( x - 1) } in s 10
L¨ osung. Wir ben¨ otigen wieder die ¨ ubliche Definition von Bool . Dann fordern wir, dass in jeder Umgebung η gilt, dass
η((<=)) : Dom → Dom → Dom,
η((<=))(x)(y) =
True falls x ≤ y und x, y ∈ Z , False falls x > y und x, y ∈ Z ,
⊥ sonst.
Außerdem soll f¨ ur η((−)) gelten, dass
η((−)) : Dom → Dom → Dom, η((−))(x)(y) =
( x − y falls x, y ∈ Z ,
⊥ sonst.
In der Vorlesung haben wir bereits gefordert, dass η((+)) die Addition ist. Als Semantik ergibt sich dann
J let s = \x −> case x <= 0 of {True −> 0
; False −> x + s (x − 1)} K η
= J s 10 K η 4 [s/µf] , wobei f : Dom → Dom definiert ist als
f(d) = J \x −> case x <= 0 of {True −> 0
; False −> x + s (x − 1)} K η 4 [s/d] . Es gilt f (d) = f d 0 , wobei f d 0 : Dom → Dom definiert ist als
f d 0 (d 0 ) = J case x <= 0 of {True −> 0
; False −> x + s (x − 1)} K η 4 [s/d,x/d
0] .
2
Zun¨ achst stellen wir fest, dass f¨ ur d, d 0 ∈ Dom gilt, dass
J x <= 0 K η 4 [s/d,x/d
0] =
True falls d 0 ≤ 0, False falls d 0 > 0,
⊥ sonst.
Dann l¨ asst sich f d 0 umformen zu
f d 0 (d 0 ) =
J 0 K η 4 [s/d,x/d
0] falls d 0 ≤ 0, J x + s (x − 1) K η 4 [s/d,x/d
0] falls d 0 > 0,
⊥ sonst.
F¨ ur den zweiten Fall erhalten wir f¨ ur d, d 0 ∈ Dom, dass
J x + s (x − 1) K η 4 [s/d,x/d
0] = J (((+) x) (s (((−) x) 1))) K η 4 [s/d,x/d
0]
=
( d 0 + d(d 0 − 1) falls d, d 0 6= ⊥,
⊥ sonst.
Damit ergibt sich, dass
f d 0 (d 0 ) =
0 falls d 0 ≤ 0,
d 0 + d(d 0 − 1) falls d 0 > 0 und d 6= ⊥,
⊥ sonst.
Wir m¨ ussen nun bestimmen, was µf ist. Dazu verwenden wir den Fix- punktsatz, also m¨ ussen wir tλi.f i (⊥) bestimmen. Sei d 0 : Dom → Dom mit d 0 (x) = ⊥ und sei f¨ ur i ∈ N die Funktion d i+1 : Dom → Dom defi- niert als
d i+1 (x) =
0 falls x ≤ 0, P x
j=1 j falls 0 < x ≤ i,
⊥ sonst.
Dann erhalten wir f 0 (⊥) = d 0 und f(d i ) = d i+1 f¨ ur alle i ∈ N , weil
f d 0
i