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.