Semantik von Programmiersprachen II

Werbung
Naturwissenschaftlich-Technische Fakultät
Compilerbau und Softwareanalyse
Kurt Sieber
Philipp Reh
Semantik von Programmiersprachen II
Wintersemester 2013/2014
Übungsblatt 5
Aufgabe 1
Überprüfen Sie, ob die folgenden Typgleichheiten gelten.
a. µt. t → t ∼ µt. (t → t) → t
b. µt. t list ∼ µt. t list list
Aufgabe 2
Sei N+ = N \ {0} und sei N∗+ die Menge aller Wörter (d.h. aller endlichen
Folgen) über N+ . Wenn κ ∈ N∗+ und i ∈ N+ , so schreiben wir κ.i für das
Wort, das aus κ durch Anhängen von i entsteht.
Ein (möglicherweise unendlicher) geordneter Baum ist definiert als eine partielle Funktion t : N∗+ ,→ L so, dass für alle κ ∈ N∗+ und alle i ∈ N+ gilt:
• κ.i ∈ dom(t) ⇒ κ ∈ dom(t)
• κ.(i + 1) ∈ dom(t) ⇒ κ.i ∈ dom(t)
Die Elemente κ ∈ dom(t) heißen Knoten von t und t(κ) ∈ L heißt Markierung
von κ.
a. Definieren Sie für jeden Typ τ den (in der Vorlesung nur intuitiv beschriebenen) zugehörigen Baum tree(τ ). Benutzen Sie dazu die in der
Vorlesung definierten Funktionen root und child .
b. Zeigen Sie, dass τ ∼ τ 0 genau dann gilt, wenn tree(τ ) = tree(τ 0 ).
Aufgabe 3
Überprüfen Sie jeweils, ob die folgenden Paare von Typen in der SubtypRelation stehen.
a. movable point = µ mp. {x : int; move : int → mp} und
movable colored point = µ mcp. {x : int; move : int → mcp; color : int}
b. τ1 = µt. t → (µs. s → t) und τ2 = µt. (µs. t → s) → t
Aufgabe 4
Für jeden Typ τ sei der Typ τ stream definiert durch
τ stream = µs. τ ∗ (unit → s)
Zeigen Sie, dass aus τ1 <: τ2 stets τ1 stream <: τ2 stream folgt.
Herunterladen