Programmierparadigmen Tutorium 1 & 5 - 6. Tutorium am...

29
LEHRSTUHL PROGRAMMIERPARADIGMEN Programmierparadigmen Tutorium 1 & 5 6. Tutorium am 27.11.2017 Roman Langrehr | 27.11.2017 KIT – Universität des Landes Baden-Württemberg und nationales Forschungszentrum in der Helmholtz-Gemeinschaft www.kit.edu

Transcript of Programmierparadigmen Tutorium 1 & 5 - 6. Tutorium am...

Page 1: Programmierparadigmen Tutorium 1 & 5 - 6. Tutorium am 27.11kit.romanlangrehr.bplaced.de/propa1718/Folien06.pdf · -Reduktion: Term entsteht durch Ausführung eines Redex (( x:t1)

LEHRSTUHL PROGRAMMIERPARADIGMEN

Programmierparadigmen Tutorium 1 & 56. Tutorium am 27.11.2017

Roman Langrehr | 27.11.2017

KIT – Universität des Landes Baden-Württemberg und nationales Forschungszentrum in der Helmholtz-Gemeinschaft

www.kit.edu

Page 2: Programmierparadigmen Tutorium 1 & 5 - 6. Tutorium am 27.11kit.romanlangrehr.bplaced.de/propa1718/Folien06.pdf · -Reduktion: Term entsteht durch Ausführung eines Redex (( x:t1)

λ-KalkülSyntax

Variablen x sind λ-Ausdrücke

Wenn t ein λ-Ausdruck und x eine Variable ist, ist λx . t einλ-Ausdruck (Abstraktion)

Wenn t1 und t2 λ-Ausdrücke sind, ist t1 t2 auch einer (Applikation)

Notation:

Applikation bindet stärker als Abstraktion.

Applikation ist linksassoziativ.

Für t1 := λx.x und t2 := y ist t1 t2 = (λx.x) y, nicht λx.xy

Roman Langrehr – Programmierparadigmen Tutorium 1 & 5 27.11.2017 2

Page 3: Programmierparadigmen Tutorium 1 & 5 - 6. Tutorium am 27.11kit.romanlangrehr.bplaced.de/propa1718/Folien06.pdf · -Reduktion: Term entsteht durch Ausführung eines Redex (( x:t1)

λ-KalkülÄquivalenzbegriffe

α-Äquivalenz: Gleich bis auf Variablenumbennung gebundenerVariablen

η-Äquivalenz: Extensionalitätsprinzipβ-Reduktion: Term entsteht durch Ausführung eines Redex((λx . t1) t2 ⇒ t1 [x 7→ t2])

Nur wenn Substitution [x 7→ t2] kollisionsfrei ist.

Roman Langrehr – Programmierparadigmen Tutorium 1 & 5 27.11.2017 3

Page 4: Programmierparadigmen Tutorium 1 & 5 - 6. Tutorium am 27.11kit.romanlangrehr.bplaced.de/propa1718/Folien06.pdf · -Reduktion: Term entsteht durch Ausführung eines Redex (( x:t1)

Übungsblatt - Aufgabe 1.4

Wohin kann

(λa.a)(λb.b) ((λc.c) ((λd .d)(λe.e)(λf .f ))) (λg.g) ((λh.h)(λi.i))

auswerten

(λb.b) ((λc.c) ((λd .d)(λe.e)(λf .f ))) (λg.g) ((λh.h)(λi.i))

Ja, (λa.a) . . . ist ein Redex.

(λa.a) ((λc.c) ((λd .d)(λe.e)(λf .f ))) (λg.g) ((λh.h)(λi.i))

Nein, (λb.b) . . . ist kein RedexImplizite Linksklammerung: ((λa.a)(λb.b)) . . .

Roman Langrehr – Programmierparadigmen Tutorium 1 & 5 27.11.2017 4

Page 5: Programmierparadigmen Tutorium 1 & 5 - 6. Tutorium am 27.11kit.romanlangrehr.bplaced.de/propa1718/Folien06.pdf · -Reduktion: Term entsteht durch Ausführung eines Redex (( x:t1)

Übungsblatt - Aufgabe 1.4

Wohin kann

(λa.a)(λb.b) ((λc.c) ((λd .d)(λe.e)(λf .f ))) (λg.g) ((λh.h)(λi.i))

auswerten

(λb.b) ((λc.c) ((λd .d)(λe.e)(λf .f ))) (λg.g) ((λh.h)(λi.i))

Ja, (λa.a) . . . ist ein Redex.

(λa.a) ((λc.c) ((λd .d)(λe.e)(λf .f ))) (λg.g) ((λh.h)(λi.i))

Nein, (λb.b) . . . ist kein RedexImplizite Linksklammerung: ((λa.a)(λb.b)) . . .

Roman Langrehr – Programmierparadigmen Tutorium 1 & 5 27.11.2017 4

Page 6: Programmierparadigmen Tutorium 1 & 5 - 6. Tutorium am 27.11kit.romanlangrehr.bplaced.de/propa1718/Folien06.pdf · -Reduktion: Term entsteht durch Ausführung eines Redex (( x:t1)

Übungsblatt - Aufgabe 1.4

Wohin kann

(λa.a)(λb.b) ((λc.c) ((λd .d)(λe.e)(λf .f ))) (λg.g) ((λh.h)(λi.i))

auswerten

(λb.b) ((λc.c) ((λd .d)(λe.e)(λf .f ))) (λg.g) ((λh.h)(λi.i))

Ja, (λa.a) . . . ist ein Redex.

(λa.a) ((λc.c) ((λd .d)(λe.e)(λf .f ))) (λg.g) ((λh.h)(λi.i))

Nein, (λb.b) . . . ist kein RedexImplizite Linksklammerung: ((λa.a)(λb.b)) . . .

Roman Langrehr – Programmierparadigmen Tutorium 1 & 5 27.11.2017 4

Page 7: Programmierparadigmen Tutorium 1 & 5 - 6. Tutorium am 27.11kit.romanlangrehr.bplaced.de/propa1718/Folien06.pdf · -Reduktion: Term entsteht durch Ausführung eines Redex (( x:t1)

Auswertungsstrategien

Normalreihenfolge: Immer linkester RedexWertet Terme vollständig aus.

Call-by-name: Immer linkester Redex, aber nur falls nicht von einemλ umgeben.

≈Lazy EvaluationEine Call-by-name Auswertung ist immer auch eine NormalreihenfolgeAuswertung.Wertet Terme nicht unbedingt vollständig aus

Call-by-value: Immer linkester Redex, der nicht von einem λumgeben ist und dessen Argument ein Wert (Abstraktion) ist.

≈Strikt EvaluationWertet Terme nicht unbedingt vollständig aus

Roman Langrehr – Programmierparadigmen Tutorium 1 & 5 27.11.2017 5

Page 8: Programmierparadigmen Tutorium 1 & 5 - 6. Tutorium am 27.11kit.romanlangrehr.bplaced.de/propa1718/Folien06.pdf · -Reduktion: Term entsteht durch Ausführung eines Redex (( x:t1)

Auswertungsstrategien

Normalreihenfolge: Immer linkester RedexWertet Terme vollständig aus.

Call-by-name: Immer linkester Redex, aber nur falls nicht von einemλ umgeben.

≈Lazy EvaluationEine Call-by-name Auswertung ist immer auch eine NormalreihenfolgeAuswertung.Wertet Terme nicht unbedingt vollständig aus

Call-by-value: Immer linkester Redex, der nicht von einem λumgeben ist und dessen Argument ein Wert (Abstraktion) ist.

≈Strikt EvaluationWertet Terme nicht unbedingt vollständig aus

Roman Langrehr – Programmierparadigmen Tutorium 1 & 5 27.11.2017 5

Page 9: Programmierparadigmen Tutorium 1 & 5 - 6. Tutorium am 27.11kit.romanlangrehr.bplaced.de/propa1718/Folien06.pdf · -Reduktion: Term entsteht durch Ausführung eines Redex (( x:t1)

Auswertungsstrategien

Normalreihenfolge: Immer linkester RedexWertet Terme vollständig aus.

Call-by-name: Immer linkester Redex, aber nur falls nicht von einemλ umgeben.

≈Lazy EvaluationEine Call-by-name Auswertung ist immer auch eine NormalreihenfolgeAuswertung.Wertet Terme nicht unbedingt vollständig aus

Call-by-value: Immer linkester Redex, der nicht von einem λumgeben ist und dessen Argument ein Wert (Abstraktion) ist.

≈Strikt EvaluationWertet Terme nicht unbedingt vollständig aus

Roman Langrehr – Programmierparadigmen Tutorium 1 & 5 27.11.2017 5

Page 10: Programmierparadigmen Tutorium 1 & 5 - 6. Tutorium am 27.11kit.romanlangrehr.bplaced.de/propa1718/Folien06.pdf · -Reduktion: Term entsteht durch Ausführung eines Redex (( x:t1)

Auswertungsstrategien

Gibt es einen λ-Term, mit folgenden Redexen?

Nein, ein Redex ist ein Teilbaum, daher können die nicht überlappen!Was ist die Call-by-name/Call-by-Value Auswertung von folgendem Term?

λx. xxxxxxxxxxxxxxxxxxxxx

Beide werten den Term nicht weiter aus.

Roman Langrehr – Programmierparadigmen Tutorium 1 & 5 27.11.2017 6

Page 11: Programmierparadigmen Tutorium 1 & 5 - 6. Tutorium am 27.11kit.romanlangrehr.bplaced.de/propa1718/Folien06.pdf · -Reduktion: Term entsteht durch Ausführung eines Redex (( x:t1)

Auswertungsstrategien

Gibt es einen λ-Term, mit folgenden Redexen?

Nein, ein Redex ist ein Teilbaum, daher können die nicht überlappen!

Was ist die Call-by-name/Call-by-Value Auswertung von folgendem Term?

λx. xxxxxxxxxxxxxxxxxxxxx

Beide werten den Term nicht weiter aus.

Roman Langrehr – Programmierparadigmen Tutorium 1 & 5 27.11.2017 6

Page 12: Programmierparadigmen Tutorium 1 & 5 - 6. Tutorium am 27.11kit.romanlangrehr.bplaced.de/propa1718/Folien06.pdf · -Reduktion: Term entsteht durch Ausführung eines Redex (( x:t1)

Auswertungsstrategien

Gibt es einen λ-Term, mit folgenden Redexen?

Nein, ein Redex ist ein Teilbaum, daher können die nicht überlappen!Was ist die Call-by-name/Call-by-Value Auswertung von folgendem Term?

λx. xxxxxxxxxxxxxxxxxxxxx

Beide werten den Term nicht weiter aus.

Roman Langrehr – Programmierparadigmen Tutorium 1 & 5 27.11.2017 6

Page 13: Programmierparadigmen Tutorium 1 & 5 - 6. Tutorium am 27.11kit.romanlangrehr.bplaced.de/propa1718/Folien06.pdf · -Reduktion: Term entsteht durch Ausführung eines Redex (( x:t1)

Auswertungsstrategien

Gibt es einen λ-Term, mit folgenden Redexen?

Nein, ein Redex ist ein Teilbaum, daher können die nicht überlappen!Was ist die Call-by-name/Call-by-Value Auswertung von folgendem Term?

λx. xxxxxxxxxxxxxxxxxxxxx

Beide werten den Term nicht weiter aus.

Roman Langrehr – Programmierparadigmen Tutorium 1 & 5 27.11.2017 6

Page 14: Programmierparadigmen Tutorium 1 & 5 - 6. Tutorium am 27.11kit.romanlangrehr.bplaced.de/propa1718/Folien06.pdf · -Reduktion: Term entsteht durch Ausführung eines Redex (( x:t1)

Konstrukte im λ-Kalkül

Chruch-Zahlen: cn := λs. λz.s (. . . (sz))︸ ︷︷ ︸n mal

Churcht-Booleans:ctrue := λt. λf.tcfalse := λt. λf.f

Church-Tupel (a, b): λf.f a bKonstruktor: pair := λa. λb. λf.fabDestruktor: fst := λp.p (λa. λb.a)Destruktor: snd := λp.p (λa. λb.b)

Church-Listen:Leere Liste: [] λc. λn.nNicht-leere Liste: [a, b, c] λc.λn.c a (c b (c c n))

Roman Langrehr – Programmierparadigmen Tutorium 1 & 5 27.11.2017 7

Page 15: Programmierparadigmen Tutorium 1 & 5 - 6. Tutorium am 27.11kit.romanlangrehr.bplaced.de/propa1718/Folien06.pdf · -Reduktion: Term entsteht durch Ausführung eines Redex (( x:t1)

Konstrukte im λ-Kalkül

Chruch-Zahlen: cn := λs. λz.s (. . . (sz))︸ ︷︷ ︸n mal

Churcht-Booleans:ctrue := λt. λf.tcfalse := λt. λf.f

Church-Tupel (a, b): λf.f a bKonstruktor: pair := λa. λb. λf.fabDestruktor: fst := λp.p (λa. λb.a)Destruktor: snd := λp.p (λa. λb.b)

Church-Listen:Leere Liste: [] λc. λn.nNicht-leere Liste: [a, b, c] λc.λn.c a (c b (c c n))

Roman Langrehr – Programmierparadigmen Tutorium 1 & 5 27.11.2017 7

Page 16: Programmierparadigmen Tutorium 1 & 5 - 6. Tutorium am 27.11kit.romanlangrehr.bplaced.de/propa1718/Folien06.pdf · -Reduktion: Term entsteht durch Ausführung eines Redex (( x:t1)

Konstrukte im λ-Kalkül

Chruch-Zahlen: cn := λs. λz.s (. . . (sz))︸ ︷︷ ︸n mal

Churcht-Booleans:ctrue := λt. λf.tcfalse := λt. λf.f

Church-Tupel (a, b): λf.f a bKonstruktor: pair := λa. λb. λf.fabDestruktor: fst := λp.p (λa. λb.a)Destruktor: snd := λp.p (λa. λb.b)

Church-Listen:Leere Liste: [] λc. λn.nNicht-leere Liste: [a, b, c] λc.λn.c a (c b (c c n))

Roman Langrehr – Programmierparadigmen Tutorium 1 & 5 27.11.2017 7

Page 17: Programmierparadigmen Tutorium 1 & 5 - 6. Tutorium am 27.11kit.romanlangrehr.bplaced.de/propa1718/Folien06.pdf · -Reduktion: Term entsteht durch Ausführung eines Redex (( x:t1)

Konstrukte im λ-Kalkül

Chruch-Zahlen: cn := λs. λz.s (. . . (sz))︸ ︷︷ ︸n mal

Churcht-Booleans:ctrue := λt. λf.tcfalse := λt. λf.f

Church-Tupel (a, b): λf.f a bKonstruktor: pair := λa. λb. λf.fabDestruktor: fst := λp.p (λa. λb.a)Destruktor: snd := λp.p (λa. λb.b)

Church-Listen:Leere Liste: [] λc. λn.nNicht-leere Liste: [a, b, c] λc.λn.c a (c b (c c n))

Roman Langrehr – Programmierparadigmen Tutorium 1 & 5 27.11.2017 7

Page 18: Programmierparadigmen Tutorium 1 & 5 - 6. Tutorium am 27.11kit.romanlangrehr.bplaced.de/propa1718/Folien06.pdf · -Reduktion: Term entsteht durch Ausführung eines Redex (( x:t1)

Fixpunkte im λ-KalkülY := λf. (λx.f (xx)) (λx.f (xx))

Erfüllt: ∃t : Y f ⇒∗ t ⇐∗ f (Y f )

Nächstes Übungsblatt: Θ mit Θ f ⇒∗ f (Θ f )

Schleifen:

while b do c

while True doif not b then

breakelse

c

f := 〈If not b then break else c; f 〉 – Wir haben eine Rekursion

F := λf . 〈If not b then break else c; f 〉 unsere Schleife ist damit: Y F

Roman Langrehr – Programmierparadigmen Tutorium 1 & 5 27.11.2017 8

Page 19: Programmierparadigmen Tutorium 1 & 5 - 6. Tutorium am 27.11kit.romanlangrehr.bplaced.de/propa1718/Folien06.pdf · -Reduktion: Term entsteht durch Ausführung eines Redex (( x:t1)

Fixpunkte im λ-KalkülY := λf. (λx.f (xx)) (λx.f (xx))

Erfüllt: ∃t : Y f ⇒∗ t ⇐∗ f (Y f )

Nächstes Übungsblatt: Θ mit Θ f ⇒∗ f (Θ f )

Schleifen:

while b do c

while True doif not b then

breakelse

c

f := 〈If not b then break else c; f 〉 – Wir haben eine Rekursion

F := λf . 〈If not b then break else c; f 〉 unsere Schleife ist damit: Y F

Roman Langrehr – Programmierparadigmen Tutorium 1 & 5 27.11.2017 8

Page 20: Programmierparadigmen Tutorium 1 & 5 - 6. Tutorium am 27.11kit.romanlangrehr.bplaced.de/propa1718/Folien06.pdf · -Reduktion: Term entsteht durch Ausführung eines Redex (( x:t1)

Fixpunkte im λ-KalkülY := λf. (λx.f (xx)) (λx.f (xx))

Erfüllt: ∃t : Y f ⇒∗ t ⇐∗ f (Y f )

Nächstes Übungsblatt: Θ mit Θ f ⇒∗ f (Θ f )

Schleifen:

while b do c

while True doif not b then

breakelse

c

f := 〈If not b then break else c; f 〉 – Wir haben eine Rekursion

F := λf . 〈If not b then break else c; f 〉 unsere Schleife ist damit: Y F

Roman Langrehr – Programmierparadigmen Tutorium 1 & 5 27.11.2017 8

Page 21: Programmierparadigmen Tutorium 1 & 5 - 6. Tutorium am 27.11kit.romanlangrehr.bplaced.de/propa1718/Folien06.pdf · -Reduktion: Term entsteht durch Ausführung eines Redex (( x:t1)

Fixpunkte im λ-KalkülY := λf. (λx.f (xx)) (λx.f (xx))

Erfüllt: ∃t : Y f ⇒∗ t ⇐∗ f (Y f )

Nächstes Übungsblatt: Θ mit Θ f ⇒∗ f (Θ f )

Schleifen:

while b do c

while True doif not b then

breakelse

c

f := 〈If not b then break else c; f 〉 – Wir haben eine Rekursion

F := λf . 〈If not b then break else c; f 〉 unsere Schleife ist damit: Y F

Roman Langrehr – Programmierparadigmen Tutorium 1 & 5 27.11.2017 8

Page 22: Programmierparadigmen Tutorium 1 & 5 - 6. Tutorium am 27.11kit.romanlangrehr.bplaced.de/propa1718/Folien06.pdf · -Reduktion: Term entsteht durch Ausführung eines Redex (( x:t1)

Fixpunkte im λ-KalkülY := λf. (λx.f (xx)) (λx.f (xx))

Erfüllt: ∃t : Y f ⇒∗ t ⇐∗ f (Y f )

Nächstes Übungsblatt: Θ mit Θ f ⇒∗ f (Θ f )

Schleifen:

while b do c

while True doif not b then

breakelse

c

f := 〈If not b then break else c; f 〉 – Wir haben eine Rekursion

F := λf . 〈If not b then break else c; f 〉 unsere Schleife ist damit: Y FRoman Langrehr – Programmierparadigmen Tutorium 1 & 5 27.11.2017 8

Page 23: Programmierparadigmen Tutorium 1 & 5 - 6. Tutorium am 27.11kit.romanlangrehr.bplaced.de/propa1718/Folien06.pdf · -Reduktion: Term entsteht durch Ausführung eines Redex (( x:t1)

Übungsaufgaben

Church-Listen:Leere Liste: [] λc. λn.nNicht-leere Liste: [a, b, c] λc. λn.c a (c b (c c n))

Definiere für Church-Listen

null

head

length

append

tail

Roman Langrehr – Programmierparadigmen Tutorium 1 & 5 27.11.2017 9

Page 24: Programmierparadigmen Tutorium 1 & 5 - 6. Tutorium am 27.11kit.romanlangrehr.bplaced.de/propa1718/Folien06.pdf · -Reduktion: Term entsteht durch Ausführung eines Redex (( x:t1)

Typsystem

Definiert über Regelsystem (= Induktives Prädikat)

Dem λ-Kalkül werden jetzt Konstanten (true, false, N,...) hinzugefügt.Typsystem: Dreistelliges Prädikat Γ ` t : τ

Roman Langrehr – Programmierparadigmen Tutorium 1 & 5 27.11.2017 10

Page 25: Programmierparadigmen Tutorium 1 & 5 - 6. Tutorium am 27.11kit.romanlangrehr.bplaced.de/propa1718/Folien06.pdf · -Reduktion: Term entsteht durch Ausführung eines Redex (( x:t1)

Typsystem

Definiert über Regelsystem (= Induktives Prädikat)Dem λ-Kalkül werden jetzt Konstanten (true, false, N,...) hinzugefügt.

Typsystem: Dreistelliges Prädikat Γ ` t : τ

Roman Langrehr – Programmierparadigmen Tutorium 1 & 5 27.11.2017 10

Page 26: Programmierparadigmen Tutorium 1 & 5 - 6. Tutorium am 27.11kit.romanlangrehr.bplaced.de/propa1718/Folien06.pdf · -Reduktion: Term entsteht durch Ausführung eines Redex (( x:t1)

Typsystem

Definiert über Regelsystem (= Induktives Prädikat)Dem λ-Kalkül werden jetzt Konstanten (true, false, N,...) hinzugefügt.Typsystem: Dreistelliges Prädikat Γ ` t : τ

Roman Langrehr – Programmierparadigmen Tutorium 1 & 5 27.11.2017 10

Page 27: Programmierparadigmen Tutorium 1 & 5 - 6. Tutorium am 27.11kit.romanlangrehr.bplaced.de/propa1718/Folien06.pdf · -Reduktion: Term entsteht durch Ausführung eines Redex (( x:t1)

Typsystem

Definiert über Regelsystem (= Induktives Prädikat)Dem λ-Kalkül werden jetzt Konstanten (true, false, N,...) hinzugefügt.Typsystem: Dreistelliges Prädikat Γ ` t : τ

Roman Langrehr – Programmierparadigmen Tutorium 1 & 5 27.11.2017 10

Page 28: Programmierparadigmen Tutorium 1 & 5 - 6. Tutorium am 27.11kit.romanlangrehr.bplaced.de/propa1718/Folien06.pdf · -Reduktion: Term entsteht durch Ausführung eines Redex (( x:t1)

Polymorphie

Problem: Geht nicht in unserem Typsystem.Lösung: let-Konstrukt hinzufügen

let x = t1 in t2

Regel für let:

Zwei der anderen Regeln müssen angepasst werden:

Roman Langrehr – Programmierparadigmen Tutorium 1 & 5 27.11.2017 11

Page 29: Programmierparadigmen Tutorium 1 & 5 - 6. Tutorium am 27.11kit.romanlangrehr.bplaced.de/propa1718/Folien06.pdf · -Reduktion: Term entsteht durch Ausführung eines Redex (( x:t1)

Polymorphie

Problem: Geht nicht in unserem Typsystem.Lösung: let-Konstrukt hinzufügen

let x = t1 in t2

Regel für let:

Zwei der anderen Regeln müssen angepasst werden:

Roman Langrehr – Programmierparadigmen Tutorium 1 & 5 27.11.2017 11