Download - Lambda Calculus

Transcript
Page 1: Lambda Calculus

rafael de f. ferreira (@rafaeldff)

lambda calculus

Page 2: Lambda Calculus

David Hilbert

2

“Wir müssen wissen. Wir werden wissen.”

We must know.We will know.

Page 3: Lambda Calculus

3

Alonzo Church

Page 4: Lambda Calculus

Syntax

4

t ::= x λx. t t t

terms: variable

abstraction application

Page 5: Lambda Calculus

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)))

Page 6: Lambda Calculus

Example expressions

6

(λx. x) yvariable

abstraction

variable

application

Page 7: Lambda Calculus

Substitution

7

[y↦z](λx. (λx. y x)) y=

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

Page 8: Lambda Calculus

Semantics

8

(λx. t1) t2 ⟶ [x↦t2]t1 beta reduction

redex

Page 9: Lambda Calculus

Semantics - examples

9

(λx. x) y ⟶ y

Page 10: Lambda Calculus

Semantics - examples

10

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

Page 11: Lambda Calculus

Semantics - examples

11

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

Page 12: Lambda Calculus

12

Church Booleans

Page 13: Lambda Calculus

booleans

13

(λt. (λf. t))

(λt. (λf. f))

(λb. (λt. (λf. b t f))

true

false

if

Page 14: Lambda Calculus

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)

=

Page 15: Lambda Calculus

booleans - example

15

false (λx. x) (λz. z)(λt. (λf. f)) (λx. x) (λz. z)(λf. f) (λz. z) (λz. z)

=

Page 16: Lambda Calculus

booleans - example

16

if false (λx. x) (λz. z) ⟶* (λz. z)

Page 17: Lambda Calculus

17

Church Numerals

Page 18: Lambda Calculus

numerals

18

λs. λz. z

λs. λz. s z

λs. λz. s (s z)

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

c0

c1

c2

c3

Page 19: Lambda Calculus

numerals

19

succ = λn. λs. λz. s (n s z)

Page 20: Lambda Calculus

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 …

=

=

Page 21: Lambda Calculus

numerals

21

plus = λm. λn. λs. λz. m s (n s z)

Page 22: Lambda Calculus

booleans - example

22

plus c0 c1 ⟶* c1

plus c1 c1 ⟶* c2

plus c2 c2 ⟶* c4

Page 23: Lambda Calculus

23

Recursion

Page 24: Lambda Calculus

recursion

24

ω = (λx. x x) (λx. x x)

Page 25: Lambda Calculus

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) …

Page 26: Lambda Calculus

recursion

26

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

Page 27: Lambda Calculus

recursion

27

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

Y f = f (Y f) for all f

Page 28: Lambda Calculus

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

Page 29: Lambda Calculus

Propositions as TypesPhilip Wadler

Introduction to Lambda Calculus

Barendregt, Barendsen