einführung in das l-kalkül€¦ · definition (redex) redexe sind teilausdrücke mit folgender...

36
1 3.11.2017 Max Wagner - Einführung in das λ-Kalkül IPD IPD Snelting Einführung in das λ-Kalkül Max Wagner KIT – Die Forschungsuniversität in der Helmholtz-Gemeinschaft www.kit.edu

Upload: others

Post on 18-Oct-2020

2 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Einführung in das l-Kalkül€¦ · Definition (Redex) Redexe sind Teilausdrücke mit folgender Form: Applikationen, deren linke Seite eine Abstraktion ist ( V: T E) T e Definition

1 3.11.2017 Max Wagner - Einführung in das λ-Kalkül IPD

KIT

IPD Snelting

Einführung in das λ-KalkülMax Wagner

KIT – Die Forschungsuniversität in der Helmholtz-Gemeinschaft www.kit.edu

Page 2: Einführung in das l-Kalkül€¦ · Definition (Redex) Redexe sind Teilausdrücke mit folgender Form: Applikationen, deren linke Seite eine Abstraktion ist ( V: T E) T e Definition

Syntax

2 3.11.2017 Max Wagner - Einführung in das λ-Kalkül IPD

KIT

Abstrakte Syntax:<term> : := <abs> | <app> | <var><abs> : := λ <var >. <term><app> : := <term> <term><var> : := ”a” | ”b” | ” c ” | . . .

Klammerung ist wichtig!App implizit linksgeklammert, Abs “greedy”.

λx. x (λy. y)

λx. x λy. y

λx. x λs. λz. s z λs. λz. s (s z) λs. λz. s s z

λx. x λs. λz. s z λs. λz. s s z λs. λz. s s z

Page 3: Einführung in das l-Kalkül€¦ · Definition (Redex) Redexe sind Teilausdrücke mit folgender Form: Applikationen, deren linke Seite eine Abstraktion ist ( V: T E) T e Definition

Syntax

2 3.11.2017 Max Wagner - Einführung in das λ-Kalkül IPD

KIT

Abstrakte Syntax:<term> : := <abs> | <app> | <var><abs> : := λ <var >. <term><app> : := <term> <term><var> : := ”a” | ”b” | ” c ” | . . .

Klammerung ist wichtig!App implizit linksgeklammert, Abs “greedy”.

λx. x (λy. y)λx. x λy. y

λx. x λs. λz. s z λs. λz. s (s z) λs. λz. s s z

λx. x λs. λz. s z λs. λz. s s z λs. λz. s s z

Page 4: Einführung in das l-Kalkül€¦ · Definition (Redex) Redexe sind Teilausdrücke mit folgender Form: Applikationen, deren linke Seite eine Abstraktion ist ( V: T E) T e Definition

Syntax

2 3.11.2017 Max Wagner - Einführung in das λ-Kalkül IPD

KIT

Abstrakte Syntax:<term> : := <abs> | <app> | <var><abs> : := λ <var >. <term><app> : := <term> <term><var> : := ”a” | ”b” | ” c ” | . . .

Klammerung ist wichtig!App implizit linksgeklammert, Abs “greedy”.

λx. x (λy. y)λx. x λy. y

λx. x λs. λz. s z λs. λz. s (s z) λs. λz. s s z

λx. x λs. λz. s z λs. λz. s s z λs. λz. s s z

Page 5: Einführung in das l-Kalkül€¦ · Definition (Redex) Redexe sind Teilausdrücke mit folgender Form: Applikationen, deren linke Seite eine Abstraktion ist ( V: T E) T e Definition

Variablenbindung

3 3.11.2017 Max Wagner - Einführung in das λ-Kalkül IPD

KIT

Unterscheide freie und gebundene Variablen.

λs. λz. s (s z) λx. x (λx. x) λx. x z

Page 6: Einführung in das l-Kalkül€¦ · Definition (Redex) Redexe sind Teilausdrücke mit folgender Form: Applikationen, deren linke Seite eine Abstraktion ist ( V: T E) T e Definition

β-Reduktion

4 3.11.2017 Max Wagner - Einführung in das λ-Kalkül IPD

KIT

Entspricht schrittweiser Funktionsauswertung.Nur auf sog. Reducible Expressions (Redexe) andwendbar.

Definition (Redex)Redexe sind Teilausdrücke mit folgender Form:Applikationen, deren linke Seite eine Abstraktion ist

(λV. T1) T2

Definition (β-Reduktion)β-Reduktion ersetzt einen Redex mit einer modifizierten Form von T1, wobeialle in T1 freien1 Vorkommnisse von V mit T2 ersetzt werden.(λV. T1) T2

β=⇒ T1[T2/V ]

1Achtung: “frei” nicht im Redex, sondern wenn T1 alleinstehender Ausdruck wäre

Page 7: Einführung in das l-Kalkül€¦ · Definition (Redex) Redexe sind Teilausdrücke mit folgender Form: Applikationen, deren linke Seite eine Abstraktion ist ( V: T E) T e Definition

Beispiele

5 3.11.2017 Max Wagner - Einführung in das λ-Kalkül IPD

KIT

(λV. T1) T2β=⇒ T1[T2/V ]

(λx. x x) (λy. y)

(λx. x) z

z (λx. (λy. y) x)

(λy. λx. y x) x

Page 8: Einführung in das l-Kalkül€¦ · Definition (Redex) Redexe sind Teilausdrücke mit folgender Form: Applikationen, deren linke Seite eine Abstraktion ist ( V: T E) T e Definition

Beispiele

5 3.11.2017 Max Wagner - Einführung in das λ-Kalkül IPD

KIT

(λV. T1) T2β=⇒ T1[T2/V ]

(λx. x x) (λy. y)β=⇒ (λy. y) (λy. y)

β=⇒ λy. y

(λx. x) zβ=⇒ z

z (λx. (λy. y) x)β=⇒ z (λx. x)

(λy. λx. y x) xβ=⇒ E

Page 9: Einführung in das l-Kalkül€¦ · Definition (Redex) Redexe sind Teilausdrücke mit folgender Form: Applikationen, deren linke Seite eine Abstraktion ist ( V: T E) T e Definition

Capture Avoidance und α-Konversion

6 3.11.2017 Max Wagner - Einführung in das λ-Kalkül IPD

KIT

β-Reduktion nicht korrekt anwendbar, wenn dadurch “aus Versehen” freieVariablen gebunden werden.

Definition (α-Konversion)Entspricht intuitiver Variablenumbenennung, anwendbar aufAbstraktions-Teilausdrücke.λx. T

α=⇒ λy. T [y/x]

(λy. λx. y x) xα=⇒ (λy. λz. y z) x

β=⇒ λz. x z

Wird bei der Reduktion von (λv. T1) T2 benötigt gdw. in T1 an einer Stelleein (freies) v steht, an der der Name einer freien Variable aus T2 gebundenist.Unschön. =⇒ De-Bruijn-Indizes

Page 10: Einführung in das l-Kalkül€¦ · Definition (Redex) Redexe sind Teilausdrücke mit folgender Form: Applikationen, deren linke Seite eine Abstraktion ist ( V: T E) T e Definition

Capture Avoidance und α-Konversion

6 3.11.2017 Max Wagner - Einführung in das λ-Kalkül IPD

KIT

β-Reduktion nicht korrekt anwendbar, wenn dadurch “aus Versehen” freieVariablen gebunden werden.

Definition (α-Konversion)Entspricht intuitiver Variablenumbenennung, anwendbar aufAbstraktions-Teilausdrücke.λx. T

α=⇒ λy. T [y/x]

(λy. λx. y x) xα=⇒ (λy. λz. y z) x

β=⇒ λz. x z

Wird bei der Reduktion von (λv. T1) T2 benötigt gdw. in T1 an einer Stelleein (freies) v steht, an der der Name einer freien Variable aus T2 gebundenist.

Unschön. =⇒ De-Bruijn-Indizes

Page 11: Einführung in das l-Kalkül€¦ · Definition (Redex) Redexe sind Teilausdrücke mit folgender Form: Applikationen, deren linke Seite eine Abstraktion ist ( V: T E) T e Definition

Capture Avoidance und α-Konversion

6 3.11.2017 Max Wagner - Einführung in das λ-Kalkül IPD

KIT

β-Reduktion nicht korrekt anwendbar, wenn dadurch “aus Versehen” freieVariablen gebunden werden.

Definition (α-Konversion)Entspricht intuitiver Variablenumbenennung, anwendbar aufAbstraktions-Teilausdrücke.λx. T

α=⇒ λy. T [y/x]

(λy. λx. y x) xα=⇒ (λy. λz. y z) x

β=⇒ λz. x z

Wird bei der Reduktion von (λv. T1) T2 benötigt gdw. in T1 an einer Stelleein (freies) v steht, an der der Name einer freien Variable aus T2 gebundenist.Unschön. =⇒ De-Bruijn-Indizes

Page 12: Einführung in das l-Kalkül€¦ · Definition (Redex) Redexe sind Teilausdrücke mit folgender Form: Applikationen, deren linke Seite eine Abstraktion ist ( V: T E) T e Definition

Auswertungsstrategien

7 3.11.2017 Max Wagner - Einführung in das λ-Kalkül IPD

KIT

Manchmal gibt es mehrere Redexe. Was tun?

((λx. x) z) ((λa. a a) z)

Beispiele für Auswertungsstrategien:Normalreihenfolge: zuerst linkesten RedexCall-by-Name: zuerst linkesten Redex, der nicht in einer AbstraktionliegtCall-by-Value: zuerst linkesten Redex, der nicht in einer Abstraktion liegt,u. dessen Argument vollst. reduziert ist.

Page 13: Einführung in das l-Kalkül€¦ · Definition (Redex) Redexe sind Teilausdrücke mit folgender Form: Applikationen, deren linke Seite eine Abstraktion ist ( V: T E) T e Definition

Auswertungsstrategien

7 3.11.2017 Max Wagner - Einführung in das λ-Kalkül IPD

KIT

Manchmal gibt es mehrere Redexe. Was tun?

((λx. x) z) ((λa. a a) z)

z ((λa. a a) z) ((λx. x) z) (z z)

z (z z)

=⇒

=⇒

=⇒

=⇒

Beispiele für Auswertungsstrategien:Normalreihenfolge: zuerst linkesten RedexCall-by-Name: zuerst linkesten Redex, der nicht in einer AbstraktionliegtCall-by-Value: zuerst linkesten Redex, der nicht in einer Abstraktion liegt,u. dessen Argument vollst. reduziert ist.

Page 14: Einführung in das l-Kalkül€¦ · Definition (Redex) Redexe sind Teilausdrücke mit folgender Form: Applikationen, deren linke Seite eine Abstraktion ist ( V: T E) T e Definition

Termination und Divergenz

8 3.11.2017 Max Wagner - Einführung in das λ-Kalkül IPD

KIT

Reminder: λ-Kalkül ist Turingmächtig.Das bedeutet aber insbesondere, dass es auch nicht “terminierende”Ausdrücke geben muss.

(λx. x x) (λx. x x) β=⇒ (λx. x x) (λx. x x) β

=⇒ . . .

(λx. x x x) (λx. x x x) β=⇒ (λx. x x x) (λx. x x x) (λx. x x x) β

=⇒ . . .

Es gibt Ausdrücke, die nur mit bestimmten Auswertungsstrategienterminieren. Beispiel:

(λt. λf. t) (λx. x) T

…Mit nicht terminierendem Ausdruck T

Page 15: Einführung in das l-Kalkül€¦ · Definition (Redex) Redexe sind Teilausdrücke mit folgender Form: Applikationen, deren linke Seite eine Abstraktion ist ( V: T E) T e Definition

Termination und Divergenz

8 3.11.2017 Max Wagner - Einführung in das λ-Kalkül IPD

KIT

Reminder: λ-Kalkül ist Turingmächtig.Das bedeutet aber insbesondere, dass es auch nicht “terminierende”Ausdrücke geben muss.

(λx. x x) (λx. x x) β=⇒ (λx. x x) (λx. x x) β

=⇒ . . .

(λx. x x x) (λx. x x x) β=⇒ (λx. x x x) (λx. x x x) (λx. x x x) β

=⇒ . . .

Es gibt Ausdrücke, die nur mit bestimmten Auswertungsstrategienterminieren. Beispiel:

(λt. λf. t) (λx. x) T

…Mit nicht terminierendem Ausdruck T

Page 16: Einführung in das l-Kalkül€¦ · Definition (Redex) Redexe sind Teilausdrücke mit folgender Form: Applikationen, deren linke Seite eine Abstraktion ist ( V: T E) T e Definition

How to Turingmächtigkeit

9 3.11.2017 Max Wagner - Einführung in das λ-Kalkül IPD

KIT

Man nehme…Kodierung von Daten

Möglich, z.B. Natürliche Zahlen via “Church-Zahlen”0: λs. λz. z1: λs. λz. s z4: λs. λz. s (s (s (s z)))

Kodierung boolscher Werte

True: λt. λf. tFalse: λt. λf. f

Ein Schema für Fallunterscheidung

Boolsche Werte sind Fallunterscheidungs-Funktionen!if A then B else C : A B C

Rekursion

???

Page 17: Einführung in das l-Kalkül€¦ · Definition (Redex) Redexe sind Teilausdrücke mit folgender Form: Applikationen, deren linke Seite eine Abstraktion ist ( V: T E) T e Definition

How to Turingmächtigkeit

9 3.11.2017 Max Wagner - Einführung in das λ-Kalkül IPD

KIT

Man nehme…Kodierung von DatenMöglich, z.B. Natürliche Zahlen via “Church-Zahlen”

0: λs. λz. z1: λs. λz. s z4: λs. λz. s (s (s (s z)))

Kodierung boolscher Werte

True: λt. λf. tFalse: λt. λf. f

Ein Schema für Fallunterscheidung

Boolsche Werte sind Fallunterscheidungs-Funktionen!if A then B else C : A B C

Rekursion

???

Page 18: Einführung in das l-Kalkül€¦ · Definition (Redex) Redexe sind Teilausdrücke mit folgender Form: Applikationen, deren linke Seite eine Abstraktion ist ( V: T E) T e Definition

How to Turingmächtigkeit

9 3.11.2017 Max Wagner - Einführung in das λ-Kalkül IPD

KIT

Man nehme…Kodierung von DatenMöglich, z.B. Natürliche Zahlen via “Church-Zahlen”

0: λs. λz. z1: λs. λz. s z4: λs. λz. s (s (s (s z)))

Kodierung boolscher WerteTrue: λt. λf. tFalse: λt. λf. f

Ein Schema für Fallunterscheidung

Boolsche Werte sind Fallunterscheidungs-Funktionen!if A then B else C : A B C

Rekursion

???

Page 19: Einführung in das l-Kalkül€¦ · Definition (Redex) Redexe sind Teilausdrücke mit folgender Form: Applikationen, deren linke Seite eine Abstraktion ist ( V: T E) T e Definition

How to Turingmächtigkeit

9 3.11.2017 Max Wagner - Einführung in das λ-Kalkül IPD

KIT

Man nehme…Kodierung von DatenMöglich, z.B. Natürliche Zahlen via “Church-Zahlen”

0: λs. λz. z1: λs. λz. s z4: λs. λz. s (s (s (s z)))

Kodierung boolscher WerteTrue: λt. λf. tFalse: λt. λf. f

Ein Schema für FallunterscheidungBoolsche Werte sind Fallunterscheidungs-Funktionen!

if A then B else C : A B CRekursion

???

Page 20: Einführung in das l-Kalkül€¦ · Definition (Redex) Redexe sind Teilausdrücke mit folgender Form: Applikationen, deren linke Seite eine Abstraktion ist ( V: T E) T e Definition

How to Turingmächtigkeit

9 3.11.2017 Max Wagner - Einführung in das λ-Kalkül IPD

KIT

Man nehme…Kodierung von DatenMöglich, z.B. Natürliche Zahlen via “Church-Zahlen”

0: λs. λz. z1: λs. λz. s z4: λs. λz. s (s (s (s z)))

Kodierung boolscher WerteTrue: λt. λf. tFalse: λt. λf. f

Ein Schema für FallunterscheidungBoolsche Werte sind Fallunterscheidungs-Funktionen!

if A then B else C : A B CRekursion

???

Page 21: Einführung in das l-Kalkül€¦ · Definition (Redex) Redexe sind Teilausdrücke mit folgender Form: Applikationen, deren linke Seite eine Abstraktion ist ( V: T E) T e Definition

Rekursion

10 3.11.2017 Max Wagner - Einführung in das λ-Kalkül IPD

KIT

Problem: brauche Namensbindung für selbstreferenziellen Aufruf.

f = λn. f n

λf. λn. f n(λf. λn. f n) (λf. λn. f n) β

=⇒ λn. (λf. λn. f n) n(λf. λn. f n) ((λf. λn. f n) (λf. λn. f n)) β

=⇒ λn. (λn. (λf. λn. f n) n) n

Trick: Finde besonderen λ-Ausdruck, der solche rekursiven Terme “richtigbedient”.

Y = λf. (λx. f (x x)) (λx. f (x x))

Formal: Y ist Fixpunktkombinator, denn ∀f : Y f β=⇒ ∗ f (Y f)

Schema: für rekursive Funktion f mit Rumpf T benutze Y (λf. T) alsFunktionsdefinition.

Page 22: Einführung in das l-Kalkül€¦ · Definition (Redex) Redexe sind Teilausdrücke mit folgender Form: Applikationen, deren linke Seite eine Abstraktion ist ( V: T E) T e Definition

Rekursion

10 3.11.2017 Max Wagner - Einführung in das λ-Kalkül IPD

KIT

Problem: brauche Namensbindung für selbstreferenziellen Aufruf.

λf. λn. f n

(λf. λn. f n) (λf. λn. f n) β=⇒ λn. (λf. λn. f n) n

(λf. λn. f n) ((λf. λn. f n) (λf. λn. f n)) β=⇒ λn. (λn. (λf. λn. f n) n) n

Trick: Finde besonderen λ-Ausdruck, der solche rekursiven Terme “richtigbedient”.

Y = λf. (λx. f (x x)) (λx. f (x x))

Formal: Y ist Fixpunktkombinator, denn ∀f : Y f β=⇒ ∗ f (Y f)

Schema: für rekursive Funktion f mit Rumpf T benutze Y (λf. T) alsFunktionsdefinition.

Page 23: Einführung in das l-Kalkül€¦ · Definition (Redex) Redexe sind Teilausdrücke mit folgender Form: Applikationen, deren linke Seite eine Abstraktion ist ( V: T E) T e Definition

Rekursion

10 3.11.2017 Max Wagner - Einführung in das λ-Kalkül IPD

KIT

Problem: brauche Namensbindung für selbstreferenziellen Aufruf.

λf. λn. f n(λf. λn. f n) (λf. λn. f n) β

=⇒ λn. (λf. λn. f n) n

(λf. λn. f n) ((λf. λn. f n) (λf. λn. f n)) β=⇒ λn. (λn. (λf. λn. f n) n) n

Trick: Finde besonderen λ-Ausdruck, der solche rekursiven Terme “richtigbedient”.

Y = λf. (λx. f (x x)) (λx. f (x x))

Formal: Y ist Fixpunktkombinator, denn ∀f : Y f β=⇒ ∗ f (Y f)

Schema: für rekursive Funktion f mit Rumpf T benutze Y (λf. T) alsFunktionsdefinition.

Page 24: Einführung in das l-Kalkül€¦ · Definition (Redex) Redexe sind Teilausdrücke mit folgender Form: Applikationen, deren linke Seite eine Abstraktion ist ( V: T E) T e Definition

Rekursion

10 3.11.2017 Max Wagner - Einführung in das λ-Kalkül IPD

KIT

Problem: brauche Namensbindung für selbstreferenziellen Aufruf.

λf. λn. f n(λf. λn. f n) (λf. λn. f n) β

=⇒ λn. (λf. λn. f n) n(λf. λn. f n) ((λf. λn. f n) (λf. λn. f n)) β

=⇒ λn. (λn. (λf. λn. f n) n) n

Trick: Finde besonderen λ-Ausdruck, der solche rekursiven Terme “richtigbedient”.

Y = λf. (λx. f (x x)) (λx. f (x x))

Formal: Y ist Fixpunktkombinator, denn ∀f : Y f β=⇒ ∗ f (Y f)

Schema: für rekursive Funktion f mit Rumpf T benutze Y (λf. T) alsFunktionsdefinition.

Page 25: Einführung in das l-Kalkül€¦ · Definition (Redex) Redexe sind Teilausdrücke mit folgender Form: Applikationen, deren linke Seite eine Abstraktion ist ( V: T E) T e Definition

Rekursion

10 3.11.2017 Max Wagner - Einführung in das λ-Kalkül IPD

KIT

Problem: brauche Namensbindung für selbstreferenziellen Aufruf.

λf. λn. f n(λf. λn. f n) (λf. λn. f n) β

=⇒ λn. (λf. λn. f n) n(λf. λn. f n) ((λf. λn. f n) (λf. λn. f n)) β

=⇒ λn. (λn. (λf. λn. f n) n) n

Trick: Finde besonderen λ-Ausdruck, der solche rekursiven Terme “richtigbedient”.

Y = λf. (λx. f (x x)) (λx. f (x x))

Formal: Y ist Fixpunktkombinator, denn ∀f : Y f β=⇒ ∗ f (Y f)

Schema: für rekursive Funktion f mit Rumpf T benutze Y (λf. T) alsFunktionsdefinition.

Page 26: Einführung in das l-Kalkül€¦ · Definition (Redex) Redexe sind Teilausdrücke mit folgender Form: Applikationen, deren linke Seite eine Abstraktion ist ( V: T E) T e Definition

Rekursion

10 3.11.2017 Max Wagner - Einführung in das λ-Kalkül IPD

KIT

Problem: brauche Namensbindung für selbstreferenziellen Aufruf.

λf. λn. f n(λf. λn. f n) (λf. λn. f n) β

=⇒ λn. (λf. λn. f n) n(λf. λn. f n) ((λf. λn. f n) (λf. λn. f n)) β

=⇒ λn. (λn. (λf. λn. f n) n) n

Trick: Finde besonderen λ-Ausdruck, der solche rekursiven Terme “richtigbedient”.

Y = λf. (λx. f (x x)) (λx. f (x x))

Formal: Y ist Fixpunktkombinator, denn ∀f : Y f β=⇒ ∗ f (Y f)

Schema: für rekursive Funktion f mit Rumpf T benutze Y (λf. T) alsFunktionsdefinition.

Page 27: Einführung in das l-Kalkül€¦ · Definition (Redex) Redexe sind Teilausdrücke mit folgender Form: Applikationen, deren linke Seite eine Abstraktion ist ( V: T E) T e Definition

Beispiel: Teilbarkeit von Zahlen überprüfen

11 3.11.2017 Max Wagner - Einführung in das λ-Kalkül IPD

KIT

Gegeben:natürliche Zahlen, minus, isZeroboolsche Werte ctrue, cfalse

def less(a, b):if a - b == 0:

return not b - a == 0return False

Page 28: Einführung in das l-Kalkül€¦ · Definition (Redex) Redexe sind Teilausdrücke mit folgender Form: Applikationen, deren linke Seite eine Abstraktion ist ( V: T E) T e Definition

Beispiel: Teilbarkeit von Zahlen überprüfen

11 3.11.2017 Max Wagner - Einführung in das λ-Kalkül IPD

KIT

Gegeben:natürliche Zahlen, minus, isZeroboolsche Werte ctrue, cfalse

def less(a, b):if isZero(minus(a, b)):

return not isZero(minus(b, a))return cfalse

Page 29: Einführung in das l-Kalkül€¦ · Definition (Redex) Redexe sind Teilausdrücke mit folgender Form: Applikationen, deren linke Seite eine Abstraktion ist ( V: T E) T e Definition

Beispiel: Teilbarkeit von Zahlen überprüfen

11 3.11.2017 Max Wagner - Einführung in das λ-Kalkül IPD

KIT

Gegeben:natürliche Zahlen, minus, isZeroboolsche Werte ctrue, cfalse

less = λa. λb.(isZero(minus(a, b)))

(not isZero(minus(b, a)))(cfalse)

Page 30: Einführung in das l-Kalkül€¦ · Definition (Redex) Redexe sind Teilausdrücke mit folgender Form: Applikationen, deren linke Seite eine Abstraktion ist ( V: T E) T e Definition

Beispiel: Teilbarkeit von Zahlen überprüfen

11 3.11.2017 Max Wagner - Einführung in das λ-Kalkül IPD

KIT

Gegeben:natürliche Zahlen, minus, isZeroboolsche Werte ctrue, cfalse

less = λa. λb.(isZero (minus a b))

(isZero (minus b a) cfalse ctrue)cfalse

Page 31: Einführung in das l-Kalkül€¦ · Definition (Redex) Redexe sind Teilausdrücke mit folgender Form: Applikationen, deren linke Seite eine Abstraktion ist ( V: T E) T e Definition

Beispiel: Teilbarkeit von Zahlen überprüfen

11 3.11.2017 Max Wagner - Einführung in das λ-Kalkül IPD

KIT

Gegeben:natürliche Zahlen, minus, isZeroboolsche Werte ctrue, cfalse

def divides(a, b):if b == 0:

return Trueif b < a:

return Falsereturn divides(a, b - a)

Page 32: Einführung in das l-Kalkül€¦ · Definition (Redex) Redexe sind Teilausdrücke mit folgender Form: Applikationen, deren linke Seite eine Abstraktion ist ( V: T E) T e Definition

Beispiel: Teilbarkeit von Zahlen überprüfen

11 3.11.2017 Max Wagner - Einführung in das λ-Kalkül IPD

KIT

Gegeben:natürliche Zahlen, minus, isZeroboolsche Werte ctrue, cfalse

def divides(a, b):if isZero(b):

return ctrueif less(b, a):

return cfalsereturn divides(a, minus(b, a))

Page 33: Einführung in das l-Kalkül€¦ · Definition (Redex) Redexe sind Teilausdrücke mit folgender Form: Applikationen, deren linke Seite eine Abstraktion ist ( V: T E) T e Definition

Beispiel: Teilbarkeit von Zahlen überprüfen

11 3.11.2017 Max Wagner - Einführung in das λ-Kalkül IPD

KIT

Gegeben:natürliche Zahlen, minus, isZeroboolsche Werte ctrue, cfalse

def divides(a, b):isZero b

ctrue((less b a)

cfalsedivides(a, minus(b, a)))

Page 34: Einführung in das l-Kalkül€¦ · Definition (Redex) Redexe sind Teilausdrücke mit folgender Form: Applikationen, deren linke Seite eine Abstraktion ist ( V: T E) T e Definition

Beispiel: Teilbarkeit von Zahlen überprüfen

11 3.11.2017 Max Wagner - Einführung in das λ-Kalkül IPD

KIT

Gegeben:natürliche Zahlen, minus, isZeroboolsche Werte ctrue, cfalse

divides = λa. λb.isZero b

ctrue((less b a)

cfalse(divides a (minus b a))

Page 35: Einführung in das l-Kalkül€¦ · Definition (Redex) Redexe sind Teilausdrücke mit folgender Form: Applikationen, deren linke Seite eine Abstraktion ist ( V: T E) T e Definition

Beispiel: Teilbarkeit von Zahlen überprüfen

11 3.11.2017 Max Wagner - Einführung in das λ-Kalkül IPD

KIT

Gegeben:natürliche Zahlen, minus, isZeroboolsche Werte ctrue, cfalse

divides = Y (λdivides. λa. λb.isZero b

ctrue((less b a)

cfalse(divides a (minus b a)))

Page 36: Einführung in das l-Kalkül€¦ · Definition (Redex) Redexe sind Teilausdrücke mit folgender Form: Applikationen, deren linke Seite eine Abstraktion ist ( V: T E) T e Definition

10 Minuten Rechnen später…

12 3.11.2017 Max Wagner - Einführung in das λ-Kalkül IPD

KIT