• Keine Ergebnisse gefunden

x) 1 : Int Γ4[x/Int

N/A
N/A
Protected

Academic year: 2021

Aktie "x) 1 : Int Γ4[x/Int"

Copied!
4
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Universit¨at Siegen

Lehrstuhl Theoretische Informatik Carl Philipp Reh

Funktionales Programmieren SS 2020

Ubungsblatt 12¨

Aufgabe 1. Zeigen Sie, dass die folgenden Haskell-Ausdr¨ucke wohlgetypt sind, indem Sie jeweils Typherleitungen angeben.

(a) \ x -> ((+) x ) 1 osung.

Γ` \x−>((+) x) 1 : IntInt Γ4[x/Int]`((+) x) 1 : Int

Γ4[x/Int]`(+) x: IntInt

Γ4[x/Int]`(+) : IntIntInt Γ4[x/Int]`x: Int

Γ4[x/Int]`1 : Int

(b) let x = \ y -> x y in x True

osung. Sei τ ein beliebiger Typ, z.B.τ = Bool. Wir erhalten dann Γ`letx=\y−> x yinxTrue : τ

Γ4[x/Boolτ]` \y−> x y : Boolτ Γ4[x/Boolτ, y/Bool]`x y :τ

Γ4[x/Boolτ, y/Bool]`x: Boolτ Γ4[x/Boolτ, y/Bool]`y: Bool Γ4[x/Boolτ]`x True : τ

Γ4[x/Boolτ]`x: Bool τ Γ4[x/Boolτ]`True : Bool

(c) Wir definieren zun¨achst

data I n t P a i r = M k P a i r Int Int

1

(2)

und betrachten dann

case ( M k P a i r 0) 1 of { M k P a i r x y -> x }

osung.

Γ`case (MkPair 0) 1of {MkPair x y −> x}: Int Γ`(MkPair 0) 1 : IntPair

Γ`(MkPair 0) : IntIntPair

Γ`MkPair : IntIntIntPair Γ`0 : Int

Γ`1 : Int

Γ`MkPair : IntInt IntPair Γ4[x/Int, y/Int]`x: Int

Aufgabe 2. Wir betrachten wieder Ausdr¨ucke der Formif e1thene2elsee3. (a) Geben Sie eine geeignete Typregel daf¨ur an.

osung.

Γ`e1 : Bool Γ`e2 :τ Γ`e3 :τ Γ`if e1thene2elsee3 :τ

(b) Wie im letzten ¨Ubungsblatt ¨ubersetzen wir den Ausdruck wie folgt in Basissyntax:

casee1of {True−> e2; False−> e3}

Geben Sie so weit wie m¨oglich eine Typherleitung f¨ur diesen Ausdruck an. Erreichen Sie dabei dieselben Annahmen wie bei Ihrer Regel f¨ur If- Then-Else?

osung.

Γ`case e1of {True−> e2; False−> e3}:τ Γ`e1 : Bool

Γ`True : Bool Γ`e2 :τ

Γ`False : Bool Γ`e3 :τ

2

(3)

Γ ` True : Bool und Γ ` False : Bool gelten immer, also erreichen wir dieselben Annahmen.

Aufgabe 3. uhren Sie jeweils Typinferenz f¨ur die folgenden Ausdr¨ucke durch. Notieren Sie das Typgleichungssystem, das Sie am Ende erhalten. Sie ussen dieses nicht l¨osen.

(a) \ x -> ((+) x ) 1 osung.

Γ` \x−>((+) x) 1 : α

Γ4[x/α1]`((+) x) 1 :α2 =α1 α2} Γ4[x/α1]`(+) x:α3 α2

Γ4[x/α1]`(+) :α4 α3 α2 4 α3 α2 = IntIntInt}

Γ4[x/α1]`x:α4 4 =α1} Γ4[x/α1]`1 :α3 3 = Int}

Das Typgleichungssystem ist

=α1 α2,

α4 α3 α2 = IntIntInt, α4 =α1,

α3 = Int}.

(b) case Nil of { Nil -> 0 ; Cons x y -> x } Hier nehmen wir an, dass

Nil :: List Int

Cons :: Int -> List Int -> List Int osung.

3

(4)

Γ`case Nilof {Nil−>0 ; Cons x y−> x}:α Γ`Nil :α1 1 = List(Int)}

Γ`Nil :α1 1 = List(Int)}

Γ`0 :α = Int}

Γ`Cons :α2 α3 α1

2 α3 α1 = IntList(Int)List(Int)}

Γ4[x/α2, y/α3]`x:α =α2} Das Gleichungssystem ist

1 = List(Int), α = Int,

α2 α3 α1 = IntList(Int)List(Int), α =α2}.

Gleichungen wie α1 = List(Int), die mehrmals auftreten, kann man in Mengenschreibweise nat¨urlich zu einer zusammenfassen.

4

Referenzen

ÄHNLICHE DOKUMENTE

Lehrstuhl Theoretische Informatik Carl Philipp Reh.. Funktionales Programmieren

Lehrstuhl Theoretische Informatik Carl Philipp Reh.. Funktionales Programmieren

[r]

[r]

Ubungsaufgaben zur Vorlesung Mathematik II f¨ ¨ ur Ingenieure Serie 1 (Funktionen, Inverse Funktionen, Stetigkeit, Ableitungen) 1.. Welche der folgenden Funktionen sind

Bestimme oben genannte Gr¨ oßen f¨ ur die neue Einbettung mit Hilfe von µ und den entsprechenden Gr¨ oßen f¨ ur X.

Du kannst die Gleichungen der Tangente und der Normalen an einer Stelle x be- stimmen und daran ankn¨ upfende Aufgaben l¨ osen3. Du kannst mit Hilfe der Ableitungsfunktion

[r]