rafael de f. ferreira (@rafaeldff)
lambda calculus
David Hilbert
2
“Wir müssen wissen. Wir werden wissen.”
We must know.We will know.
3
Alonzo Church
Syntax
4
t ::= x λx. t t t
terms: variable
abstraction application
Example expressions
5
x x y λx. x λx. y
(λx. x) y (λx. x x) z (λx. x x) (λx. x x) (λf. (λx. f (λy. x x y)) (λx. f (λy. x x y)))
Example expressions
6
(λx. x) yvariable
abstraction
variable
application
Substitution
7
[y↦z](λx. (λx. y x)) y=
(λx. (λx. z x)) z
Semantics
8
(λx. t1) t2 ⟶ [x↦t2]t1 beta reduction
redex
Semantics - examples
9
(λx. x) y ⟶ y
Semantics - examples
10
(λx. x) (λy. y y) ⟶ (λy. y y)
Semantics - examples
11
(λx.(λz.x z)) y ⟶ (λz.y z)
12
Church Booleans
booleans
13
(λt. (λf. t))
(λt. (λf. f))
(λb. (λt. (λf. b t f))
true
false
if
booleans - example
14
if false (λx. x) (λz. z)(λb. (λt. (λf. b t f)) false (λx. x) (λz. z) (λt. (λf. false t f)) (λx. x) (λz. z) (λf. false (λx. x) f) (λz. z) false (λx. x) (λz. z)
=
⟶
⟶
⟶
booleans - example
15
false (λx. x) (λz. z)(λt. (λf. f)) (λx. x) (λz. z)(λf. f) (λz. z) (λz. z)
=
⟶
⟶
⟶
booleans - example
16
if false (λx. x) (λz. z) ⟶* (λz. z)
17
Church Numerals
numerals
18
λs. λz. z
λs. λz. s z
λs. λz. s (s z)
λs. λz. s (s (s z))
…
c0
c1
c2
c3
…
numerals
19
succ = λn. λs. λz. s (n s z)
numerals
20
succ c1(λn. λs. λz. s (n s z)) c1
λs. λz. s ((λs. λz. s z) s z) λs. λz. s ((λz. s z) z) λs. λz. s (s z) = c2 …
=
=
⟶
⟶
⟶
numerals
21
plus = λm. λn. λs. λz. m s (n s z)
booleans - example
22
plus c0 c1 ⟶* c1
plus c1 c1 ⟶* c2
plus c2 c2 ⟶* c4
23
Recursion
recursion
24
ω = (λx. x x) (λx. x x)
recursion
25
ω = (λx. x x) (λx. x x) (λx. x x) (λx. x x) (λx. x x) (λx. x x) (λx. x x) (λx. x x) …
⟶
⟶
⟶
⟶
⟶
recursion
26
Y = λf. (λx. f (λy. x x y)) (λx. f (λy. x x y))
recursion
27
Y = λf. (λx. f (λy. x x y)) (λx. f (λy. x x y))
Y f = f (Y f) for all f
recursion
28
g = λfct. λn if (eq n c0) c1 (times n (fct (pred n)))factorial = Y g
Y f = f (Y f) for all f
Propositions as TypesPhilip Wadler
Introduction to Lambda Calculus
Barendregt, Barendsen
Top Related