Top Banner
Lambda Calculus CSE 340 – Principles of Programming Languages Fall 2015 Adam Doupé Arizona State University http://adamdoupe.com
56

Lambda Calculus CSE 340 – Principles of Programming Languages Fall 2015 Adam Doupé Arizona State University .

Jan 18, 2016

Download

Documents

Preston Perry
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Lambda Calculus CSE 340 – Principles of Programming Languages Fall 2015 Adam Doupé Arizona State University .

Lambda Calculus

CSE 340 – Principles of Programming Languages

Fall 2015

Adam Doupé

Arizona State University

http://adamdoupe.com

Page 2: Lambda Calculus CSE 340 – Principles of Programming Languages Fall 2015 Adam Doupé Arizona State University .

2Adam Doupé, Principles of Programming Languages

Lambda Calculus

• Language to express function application– Ability to define anonymous functions– Ability to "apply" functions

• Functional programming derives from lambda calculus– ML– Haskell– F#– Clojure

Page 3: Lambda Calculus CSE 340 – Principles of Programming Languages Fall 2015 Adam Doupé Arizona State University .

3Adam Doupé, Principles of Programming Languages

History

• Frege in 1893 studied the use of functions in logic• Schönfinkel, in the 1920s, studied how combinators, a

specific type of function, could be applied to formal logic

• Church introduced lambda calculus in the 1930s• Original system was shown to be logically inconsistent

in 1935 by Kleene and Rosser• In 1936, Church published the lambda calculus that is

relevant to computation• Refined further

– Type systems, …Adapted from Jesse Alama:http://plato.stanford.edu/entries/lambda-calculus/#BriHisLCal

Page 4: Lambda Calculus CSE 340 – Principles of Programming Languages Fall 2015 Adam Doupé Arizona State University .

4Adam Doupé, Principles of Programming Languages

Syntax

• Everything in lambda calculus is an expression (E)

E → ID

E → λ ID . E

E → E E

E → (E)

Page 5: Lambda Calculus CSE 340 – Principles of Programming Languages Fall 2015 Adam Doupé Arizona State University .

5Adam Doupé, Principles of Programming Languages

Examples

E → ID

E → λ ID . E

E → E E

E → (E)

x

λ x . x

x y

λ λ x . y

λ x . y z

foo λ bar . (foo (bar baz))

Page 6: Lambda Calculus CSE 340 – Principles of Programming Languages Fall 2015 Adam Doupé Arizona State University .

6Adam Doupé, Principles of Programming Languages

Ambiguous Syntax

• How to parse

x y z

Exp

Exp z

x y

Exp

Expx

zy

Page 7: Lambda Calculus CSE 340 – Principles of Programming Languages Fall 2015 Adam Doupé Arizona State University .

7Adam Doupé, Principles of Programming Languages

Ambiguous Syntax

• How to parse

λ x . x y

Exp

Expx

y

λ

Exp

x

Exp

Exp

Expx

x

λ

Exp

Exp

y

Page 8: Lambda Calculus CSE 340 – Principles of Programming Languages Fall 2015 Adam Doupé Arizona State University .

8Adam Doupé, Principles of Programming Languages

Disambiguation Rules

• E → E E is left associative– x y z is

• (x y) z

– w x y z is • ((w x) y) z

• λ ID . E extends as far to the right as possible, starting with the λ ID . – λ x . x y is

• λ x . (x y)

– λ x . λ x . x is • λ x. ( λ x . x)

Page 9: Lambda Calculus CSE 340 – Principles of Programming Languages Fall 2015 Adam Doupé Arizona State University .

9Adam Doupé, Principles of Programming Languages

Examples

• (λ x . y) x is the same as λ x . y x– No!– (λ x . y) x

• λ x . (x) y is the same as– λ x . ((x) y)

• λ a . λ b . λ c . a b c– λ a . (λ b . (λ c . ((a b) c)))

Page 10: Lambda Calculus CSE 340 – Principles of Programming Languages Fall 2015 Adam Doupé Arizona State University .

10Adam Doupé, Principles of Programming Languages

Semantics

• Every ID that we see in lambda calculus is called a variable

• E → λ ID . E is called an abstraction– The ID is the variable of the abstraction (also

metavariable)– E is called the body of the abstraction

• E → E E– This is called an application

Page 11: Lambda Calculus CSE 340 – Principles of Programming Languages Fall 2015 Adam Doupé Arizona State University .

11Adam Doupé, Principles of Programming Languages

Semantics

• λ ID . E defines a new anonymous function– This is the reason why anonymous functions

are called "Lambda Expressions" in Java 8 (and other languages)

– ID is the formal parameter of the function– Body is the body of the function

• E → E1 E2, function application, is similar to calling function E1 and setting its formal parameter to be E2

Page 12: Lambda Calculus CSE 340 – Principles of Programming Languages Fall 2015 Adam Doupé Arizona State University .

12Adam Doupé, Principles of Programming Languages

Example

• Assume that we have the function + defined and the constant 1

• λ x . + x 1– Represents a function that adds one to its argument

• (λ x . + x 1) 2– Represents calling the original function by supplying 2

for x and it would "reduce" to (+ 2 1) = 3

• How can + function be defined if abstractions only accept 1 parameter?

Page 13: Lambda Calculus CSE 340 – Principles of Programming Languages Fall 2015 Adam Doupé Arizona State University .

13Adam Doupé, Principles of Programming Languages

Currying

• Technique to translate the evaluation of a function that takes multiple arguments into a sequence of functions that each take a single argument

• Define adding two parameters together with functions that only take one parameter:– λ x . λ y . ((+ x) y)– (λ x . λ y . ((+ x) y)) 1

• λ y . ((+ 1) y)

– (λ x . λ y . ((+ x) y)) 10 20• (λ y . ((+ 10) y)) 20• ((+ 10) 20) = 30

Page 14: Lambda Calculus CSE 340 – Principles of Programming Languages Fall 2015 Adam Doupé Arizona State University .

14Adam Doupé, Principles of Programming Languages

Free Variables

• A variable is free if it does not appear within the body of an abstraction with a metavariable of the same name

• x free in λ x . x y z?• y free in λ x . x y z?• x free in (λ x . (+ x 1)) x?• z free in λ x . λ y . λ z . z y x?• x free in (λ x . z foo) (λ y . y x)?

Page 15: Lambda Calculus CSE 340 – Principles of Programming Languages Fall 2015 Adam Doupé Arizona State University .

15Adam Doupé, Principles of Programming Languages

Free Variables

• x is free in E if:– E = x

– E = λ y . E1, where y != x and x is free in E1

– E = E1 E2, where x is free in E1

– E = E1 E2, where x is free in E2 and every occurrence of

Page 16: Lambda Calculus CSE 340 – Principles of Programming Languages Fall 2015 Adam Doupé Arizona State University .

16Adam Doupé, Principles of Programming Languages

Examples

• x free in x λ x . x ?• x free in (λ x . x y) x ?• x free in λ x . y x ?

Page 17: Lambda Calculus CSE 340 – Principles of Programming Languages Fall 2015 Adam Doupé Arizona State University .

17Adam Doupé, Principles of Programming Languages

Combinators

• An expression is a combinator if it does not have any free variables

• λ x . λ y . x y x combinator?• λ x . x combinator?• λ z . λ x . x y z combinator?

Page 18: Lambda Calculus CSE 340 – Principles of Programming Languages Fall 2015 Adam Doupé Arizona State University .

18Adam Doupé, Principles of Programming Languages

Bound Variables

• If a variable is not free, it is bound• Bound by what abstraction?

– What is the scope of a metavariable?

Page 19: Lambda Calculus CSE 340 – Principles of Programming Languages Fall 2015 Adam Doupé Arizona State University .

19Adam Doupé, Principles of Programming Languages

Bound Variable Rules

• If an occurrence of x is free in E, then it is bound by λ x . in λ x . E

• If an occurrence of x is bound by a particular λ x . in E, then x is bound by the same λ x . in λ z . E– Even if z == x– λ x . λ x . x

• Which lambda expression binds x?

• If an occurrence of x is bound by a particular λ x . in E1, then that occurrence in E1 is tied by the same abstraction λ x . in E1 E2 and E2 E1

Page 20: Lambda Calculus CSE 340 – Principles of Programming Languages Fall 2015 Adam Doupé Arizona State University .

20Adam Doupé, Principles of Programming Languages

Examples

• (λ x . x (λ y . x y z y) x) x y– (λ x . x (λ y . x y z y) x) x y

• (λ x . λ y . x y) (λ z . x z)– (λ x . λ y . x y) (λ z . x z)

• (λ x . x λ x . z x)– (λ x . x λ x . z x)

Page 21: Lambda Calculus CSE 340 – Principles of Programming Languages Fall 2015 Adam Doupé Arizona State University .

21Adam Doupé, Principles of Programming Languages

Equivalence

• What does it mean for two functions to be equivalent?– λ y . y = λ x . x ?– λ x . x y = λ y . y x ?– λ x . x = λ x . x ?

Page 22: Lambda Calculus CSE 340 – Principles of Programming Languages Fall 2015 Adam Doupé Arizona State University .

22Adam Doupé, Principles of Programming Languages

α-equivalence

• α-equivalence is when two functions vary only by the names of the bound variables

• E1 =α E2

• We need a way to rename variables in an expression– Simple find and replace?– λ x . x λ y . x y z

• Can we rename x to foo?• Can we rename y to bar?• Can we rename y to x?• Can we rename x to z?

Page 23: Lambda Calculus CSE 340 – Principles of Programming Languages Fall 2015 Adam Doupé Arizona State University .

23Adam Doupé, Principles of Programming Languages

Renaming Operation

• E {y/x}– x {y/x} = y– z {y/x} = z, if x ≠ z

– (E1 E2) {y/x} = (E1 {y/x}) (E2 {y/x})

– (λ x . E) {y/x} = (λ y . E {y/x}) – (λ z . E) {y/x} = (λ z . E {y/x}), if x ≠ z

Material courtesy of Peter Selingerhttp://www.mathstat.dal.ca/~selinger/papers/lambdanotes.pdf

Page 24: Lambda Calculus CSE 340 – Principles of Programming Languages Fall 2015 Adam Doupé Arizona State University .

24Adam Doupé, Principles of Programming Languages

Examples

• (λ x . x) {foo/x}• (λ foo . (x) {foo/x})• (λ foo . (foo))

– ((λ x . x (λ y . x y z y) x) x y) {bar/x}• (λ x . x (λ y . x y z y) x) {bar/x} (x) {bar/x} (y) {bar/x}• (λ x . x (λ y . x y z y) x) {bar/x} (x) {bar/x} y• (λ x . x (λ y . x y z y) x) {bar/x} bar y• (λ bar . (x (λ y . x y z y) x) {bar/x}) bar y• (λ bar . (bar (λ y . x y z y) {bar/x} bar)) bar y• (λ bar . (bar (λ y . (x y z y) {bar/x} ) bar)) bar y• (λ bar . (bar (λ y . (bar y z y)) bar)) bar y

Page 25: Lambda Calculus CSE 340 – Principles of Programming Languages Fall 2015 Adam Doupé Arizona State University .

25Adam Doupé, Principles of Programming Languages

α-equivalence

• For all expressions E and all variables y that do not occur in E– λ x . E =α λ y . (E {y/x})

• λ y . y = λ x . x ?

• ((λ x . x (λ y . x y z y) x) x y) = ((λ y . y (λ z . y z w z) y) y x) ?

Page 26: Lambda Calculus CSE 340 – Principles of Programming Languages Fall 2015 Adam Doupé Arizona State University .

26Adam Doupé, Principles of Programming Languages

Substitution

• Renaming allows us to replace one variable name with another

• However, our goal is to reduce (λ x . + x 1) 2 to (+ 1 2), which replaces x with the expression 2– Can we use renaming?

• We need another operator, called substitution, to replace a variable by a lambda expression– E[x→N], where E and N are lambda expressions

and x is a name

Page 27: Lambda Calculus CSE 340 – Principles of Programming Languages Fall 2015 Adam Doupé Arizona State University .

27Adam Doupé, Principles of Programming Languages

Substitution

• Seems simple, right?• (+ x 1) [x→2]

– (+ 2 1)

• (λ x . + x 1) [x→2]– (λ x . + x 1)

• (λ x . y x) [y→ λ z . x z]– (λ x . (λ z . x z) x)– (λ w . (λ z . x z) w)

Page 28: Lambda Calculus CSE 340 – Principles of Programming Languages Fall 2015 Adam Doupé Arizona State University .

28Adam Doupé, Principles of Programming Languages

Substitution Operation

• E [x→N]– x [x→N] = N– y [x→N] = y, if x ≠ y

– (E1 E2) [x→N] = (E1 [x→N]) (E2 [x→N])

– (λ x . E) [x→N] = (λ x . E) – (λ y . E) [x→N] = (λ y . E [x→N]) if x ≠ y and y is

not a free variable in N– (λ y . E) [x→N] = (λ y' . E {y'/y} [x→N]) if x ≠ y, y

is a free variable in N, and y' is a fresh variable name

Page 29: Lambda Calculus CSE 340 – Principles of Programming Languages Fall 2015 Adam Doupé Arizona State University .

29Adam Doupé, Principles of Programming Languages

Examples

• (λ x . x) [x→foo]• (λ x . x)

– (+ 1 x) [x→2]• (+[x→2] 1[x→2] x[x→2])• (+ 1 2)

– (λ x . y x) [y→λ z . x z]• (λ w . (y x){w/x} [y→λ z . x z])• (λ w . (y w) [y→λ z . x z])• (λ w . (y [y→λ z . x z] w [y→λ z . x z])• (λ w . (λ z . x z) w)

Page 30: Lambda Calculus CSE 340 – Principles of Programming Languages Fall 2015 Adam Doupé Arizona State University .

30Adam Doupé, Principles of Programming Languages

Examples

• (x (λ y . x y)) [x→y z]– (x [x→y z] (λ y . x y) [x→y z])– ((y z) (λ y . x y) [x→y z])– (y z) (λ q . (x y){q/y}[x→y z])– (y z) (λ q . (x q)[x→y z])– (y z) (λ q . ((y z) q))

Page 31: Lambda Calculus CSE 340 – Principles of Programming Languages Fall 2015 Adam Doupé Arizona State University .

31Adam Doupé, Principles of Programming Languages

Execution

• Execution will be a sequence of terms, resulting from calling/invoking functions

• Each step in this sequence is called a β-reduction– We can only β-reduce a β-redux (expressions in the application

form)– (λ x . E) N

• β-reduction is defined as:– (λ x . E) N β-reduces to – E[x→N]

• β-normal form is an expression with no reduxes• Full β-reduction is reducing all reduxes regardless of

where they appear

Page 32: Lambda Calculus CSE 340 – Principles of Programming Languages Fall 2015 Adam Doupé Arizona State University .

32Adam Doupé, Principles of Programming Languages

Examples

• (λ x . x) y – x[x→y]– y

• (λ x . x (λ x . x)) (u r)– (x (λ x . x))[x→(u r)]– (u r) (λ x . x)

Page 33: Lambda Calculus CSE 340 – Principles of Programming Languages Fall 2015 Adam Doupé Arizona State University .

33Adam Doupé, Principles of Programming Languages

Examples

• (λ x . y) ((λ z . z z) (λ w . w))– (λ x . y) (z z)[z→(λ w . w)]– (λ x . y) ((λ w . w) (λ w . w))– (λ x . y) (w)[w→(λ w . w)]– (λ x . y) (λ w . w)– y[x→(λ w . w)]– y

Page 34: Lambda Calculus CSE 340 – Principles of Programming Languages Fall 2015 Adam Doupé Arizona State University .

34Adam Doupé, Principles of Programming Languages

Examples

• (λ 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)– …

Page 35: Lambda Calculus CSE 340 – Principles of Programming Languages Fall 2015 Adam Doupé Arizona State University .

35Adam Doupé, Principles of Programming Languages

Boolean Logic

• T = (λ x . λ y . x)• F = (λ x . λ y . y)• and = (λ a . λ b . a b F)• and T T

– (λ a . λ b . a b (λ x . λ y . y))

Page 36: Lambda Calculus CSE 340 – Principles of Programming Languages Fall 2015 Adam Doupé Arizona State University .

36Adam Doupé, Principles of Programming Languages

and T T

• (λ a . λ b . a b (λ x . λ y . y)) (λ x . λ y . x) (λ x . λ y . x)• (λ b . a b (λ x . λ y . y))[a →(λ x . λ y . x)] (λ x . λ y . x)• (λ b . (λ x . λ y . x) b (λ x . λ y . y)) (λ x . λ y . x)• ((λ x . λ y . x) b (λ x . λ y . y))[b→(λ x . λ y . x)]• (λ x . λ y . x) (λ x . λ y . x) (λ x . λ y . y)• (λ y . x)[x →(λ x . λ y . x)] (λ x . λ y . y)• (λ y . (λ x . λ y . x)) (λ x . λ y . y)• (λ x . λ y . x)[y→(λ x . λ y . y)]• (λ x . λ y . x)• T

Page 37: Lambda Calculus CSE 340 – Principles of Programming Languages Fall 2015 Adam Doupé Arizona State University .

37Adam Doupé, Principles of Programming Languages

and T F

• (λ a . λ b . a b F) T F• (λ b . a b F)[a→T] F• (λ b . T b F) F• (T b F)[b→F]• (T F F)• (λ x . λ y . x) F F• (λ y . x)[x→F] F• (λ y . F) F• F[y→F]• F

Page 38: Lambda Calculus CSE 340 – Principles of Programming Languages Fall 2015 Adam Doupé Arizona State University .

38Adam Doupé, Principles of Programming Languages

and F T

• (λ a . λ b . a b F) F T• F T F• F

Page 39: Lambda Calculus CSE 340 – Principles of Programming Languages Fall 2015 Adam Doupé Arizona State University .

39Adam Doupé, Principles of Programming Languages

and F F

• (λ a . λ b . a b F) F F• F F F• F

Page 40: Lambda Calculus CSE 340 – Principles of Programming Languages Fall 2015 Adam Doupé Arizona State University .

40Adam Doupé, Principles of Programming Languages

not

• not T = F• not F = T• not = (λ a . a F T)• not T

– (λ a . a F T) T– T F T– F

• not F– (λ a . a F T) F– F F T– T

Page 41: Lambda Calculus CSE 340 – Principles of Programming Languages Fall 2015 Adam Doupé Arizona State University .

41Adam Doupé, Principles of Programming Languages

If Branches

if c thena

elseb

• if c a b• if T a b = a• if F a b = b• if = (λ a . a)

Page 42: Lambda Calculus CSE 340 – Principles of Programming Languages Fall 2015 Adam Doupé Arizona State University .

42Adam Doupé, Principles of Programming Languages

Examples

• if T a b– (λ a . a) T a b– T a b– a

• if F a b– (λ a . a) F a b– F a b– b

Page 43: Lambda Calculus CSE 340 – Principles of Programming Languages Fall 2015 Adam Doupé Arizona State University .

43Adam Doupé, Principles of Programming Languages

Church's Numerals

• 0 = λ f . λ x . x• 1 = λ f . λ x . f x• 2 = λ f . λ x . f f x• 3 = λ f . λ x . f f f x• 4 = λ f . λ x . f f f f x

– λ f . λ x . (f (f (f (f x))))

• 4 a b– a a a a b

Page 44: Lambda Calculus CSE 340 – Principles of Programming Languages Fall 2015 Adam Doupé Arizona State University .

44Adam Doupé, Principles of Programming Languages

Successor Function

• succ = λ n . λ f . λ x . f (n f x)• 0 = λ f . λ x . x• succ 0

– (λ n . λ f . λ x . f (n f x)) 0– λ f . λ x . f (0 f x)– λ f . λ x . f ((λ f . λ x . x) f x)– λ f . λ x . f x

• 1 = λ f . λ x . f x• succ 0 = 1

Page 45: Lambda Calculus CSE 340 – Principles of Programming Languages Fall 2015 Adam Doupé Arizona State University .

45Adam Doupé, Principles of Programming Languages

Successor Function

• succ = λ n . λ f . λ x . f (n f x)• 1 = λ f . λ x . f x• succ 1

– (λ n . λ f . λ x . f (n f x)) 1– λ f . λ x . f (1 f x)– λ f . λ x . f ((λ f . λ x . f x) f x)– λ f . λ x . f f x

• 2 = λ f . λ x . f f x• succ 1 = 2• succ n = n + 1

Page 46: Lambda Calculus CSE 340 – Principles of Programming Languages Fall 2015 Adam Doupé Arizona State University .

46Adam Doupé, Principles of Programming Languages

Addition

• add 0 1 = 1• add 1 2 = 3• add = λ n . λ m . λ f . λ x . n f (m f x)• add 0 1

– (λ n . λ m . λ f . λ x . n f (m f x)) 0 1– (λ m . λ f . λ x . 0 f (m f x)) 1– λ f . λ x . 0 f (1 f x)– λ f . λ x . 0 f (f x)– λ f . λ x . f x

Page 47: Lambda Calculus CSE 340 – Principles of Programming Languages Fall 2015 Adam Doupé Arizona State University .

47Adam Doupé, Principles of Programming Languages

Addition

• add = λ n . λ m . λ f . λ x . n f (m f x)• add 1 2

– (λ n . λ m . λ f . λ x . n f (m f x)) 1 2– (λ m . λ f . λ x . 1 f (m f x)) 2– λ f . λ x . 1 f (2 f x)– λ f . λ x . 1 f (f f x)– λ f . λ x . (f f f x)– 3

Page 48: Lambda Calculus CSE 340 – Principles of Programming Languages Fall 2015 Adam Doupé Arizona State University .

48Adam Doupé, Principles of Programming Languages

Multiplication

• mult 0 1 = 0• mult 1 2 = 2• mult 2 5 = 10• mult = λ n . λ m . m (add n) 0• mult 0 1

– (λ n . λ m . m (add n) 0) 0 1– (λ m . m (add 0) 0) 1– 1 (add 0) 0– add 0 0– 0

Page 49: Lambda Calculus CSE 340 – Principles of Programming Languages Fall 2015 Adam Doupé Arizona State University .

49Adam Doupé, Principles of Programming Languages

Multiplication

• mult 1 2– (λ n . λ m . m (add n) 0) 1 2– (λ m . m (add 1) 0) 2– 2 (add 1) 0– (add 1) ((add 1) 0)– (add 1) (add 1 0)– (add 1) (1)– (add 1 1)– 2

Page 50: Lambda Calculus CSE 340 – Principles of Programming Languages Fall 2015 Adam Doupé Arizona State University .

50Adam Doupé, Principles of Programming Languages

Turing Complete?

• We have Boolean logic– Including true/false branches

• We have arithmetic• What does it mean for lambda calculus to

be Turing complete?

Page 51: Lambda Calculus CSE 340 – Principles of Programming Languages Fall 2015 Adam Doupé Arizona State University .

51Adam Doupé, Principles of Programming Languages

Factorial

• n!– fact(0) = 1– fact(n) = n * fact(n-1)

int fact(int n){ if (n == 0) { return 1; } return n * fact(n-1);}

Page 52: Lambda Calculus CSE 340 – Principles of Programming Languages Fall 2015 Adam Doupé Arizona State University .

52Adam Doupé, Principles of Programming Languages

Factorial

• (assuming that we have definitions of the iszero and pred functions)

• fact = (λ n . if (iszero n) (1) (mult n (fact (pred n)))

• However, we cannot write this function!

Page 53: Lambda Calculus CSE 340 – Principles of Programming Languages Fall 2015 Adam Doupé Arizona State University .

53Adam Doupé, Principles of Programming Languages

Y Combinator

• Y = (λ x . λ y . y (x x y)) (λ x . λ y . y (x x y))• Y foo

– (λ x . λ y . y (x x y)) (λ x . λ y . y (x x y)) foo– (λ y . y ((λ x . λ y . y (x x y)) (λ x . λ y . y (x x y)) y))

foo– foo ((λ x . λ y . y (x x y)) (λ x . λ y . y (x x y)) foo)– foo (Y foo)– foo (foo (Y foo))– foo (foo (foo (Y foo)))– …

Page 54: Lambda Calculus CSE 340 – Principles of Programming Languages Fall 2015 Adam Doupé Arizona State University .

54Adam Doupé, Principles of Programming Languages

Recursion• fact = (λ n . if (iszero n) (1) (mult n (fact (pred n)))• fact = Y (λ f . λ n . if (iszero n) (1) (mult n (f (pred n)))• fact 1

– Y (λ f . λ n . if (iszero n) (1) (mult n (f (pred n))) 1– (λ f . λ n . if (iszero n) (1) (mult n (f (pred n))) (Y (λ f . λ n . if (iszero n) (1) (mult n (f (pred

n))) 1– (λ n . if (iszero n) (1) (mult n ((Y (λ f . λ n . if (iszero n) (1) (mult n (f (pred n))) (pred n))) 1– if (iszero 1) (1) (mult 1 ((Y (λ f . λ n . if (iszero n) (1) (mult n (f (pred n))) (pred 1))– if F (1) (mult 1 ((Y (λ f . λ n . if (iszero n) (1) (mult n (f (pred n))) (pred 1))– mult 1 ((Y (λ f . λ n . if (iszero n) (1) (mult n (f (pred n))) (pred 1)– mult 1 (λ f . λ n . if (iszero n) (1) (mult n (f (pred n))) (Y (λ f . λ n . if (iszero n) (1) (mult n (f

(pred n))) (pred 1)– mult 1 (λ n . if (iszero n) (1) (mult n ((Y (λ f . λ n . if (iszero n) (1) (mult n (f (pred n))) (pred

n))) (pred 1)– mult 1 (λ n . if (iszero n) (1) (mult n ((Y (λ f . λ n . if (iszero n) (1) (mult n (f (pred n))) (pred

n))) 0– mult 1 (if (iszero 0) (1) (mult 0 ((Y (λ f . λ n . if (iszero n) (1) (mult n (f (pred n))) (pred 0)))– mult 1 if T (1) (mult 0 ((Y (λ f . λ n . if (iszero n) (1) (mult n (f (pred n))) (pred 0)))– mult 1 1– 1

Page 55: Lambda Calculus CSE 340 – Principles of Programming Languages Fall 2015 Adam Doupé Arizona State University .

55Adam Doupé, Principles of Programming Languages

Turing Complete

• Boolean Logic• Arithmetic• Loops

Page 56: Lambda Calculus CSE 340 – Principles of Programming Languages Fall 2015 Adam Doupé Arizona State University .

56

PRINCIPLES OF PROGRAMMING LANGUAGES

Fall 2015