Lecture 6: Lambda Calculus

32
Lecture 6: Lambda Calculus David Evans http://www.cs.virginia.edu/ ~evans CS655: Programming Languages University of Virginia Computer Science God created the integers – all else is the result of man. Leopold Kronecker God created application – all else is the result of man. Alonzo Church (not really)

description

Lecture 6: Lambda Calculus. God created the integers – all else is the result of man. Leopold Kronecker God created application – all else is the result of man. Alonzo Church (not really). CS655: Programming Languages University of Virginia Computer Science. David Evans - PowerPoint PPT Presentation

Transcript of Lecture 6: Lambda Calculus

Page 1: Lecture 6:  Lambda Calculus

Lecture 6: Lambda Calculus

David Evanshttp://www.cs.virginia.edu/~evans

CS655: Programming LanguagesUniversity of VirginiaComputer Science

God created the integers – all else is the result of man.Leopold Kronecker

God created application – all else is the result of man.Alonzo Church (not really)

Page 2: Lecture 6:  Lambda Calculus

6 Feb 2001 CS 655: Lecture 6 2

Language Complexity and Brain Cell Decay

Years Spent in School

Lang

uage

Com

plex

ity

(Num

ber

of M

orph

emes

)

0 5 10 15 20 25

English(OED: 500,000 words)

C++(680 pages)

Scheme (50 pages)

??? (.5 page)

Page 3: Lecture 6:  Lambda Calculus

6 Feb 2001 CS 655: Lecture 6 3

Complexity in Scheme• Special Forms

– if, cond, define, etc.

• Primitives– Numbers (infinitely many)– Booleans: #t, #f– Functions (+, -, and, or, etc.)

• Evaluation Complexity– Environments (more than ½ of our interpreter)

Can we get rid of all this and still have a useful language?

If we have lazy evaluation,(and don’t care about abstraction) we don’t need these.

Hard to get rid of?

Page 4: Lecture 6:  Lambda Calculus

6 Feb 2001 CS 655: Lecture 6 4

-calculus

Alonzo Church, 1940(LISP was developed from -calculus, not the other way round.)

term = variable

| term term

| (term)

| variable . term

Page 5: Lecture 6:  Lambda Calculus

6 Feb 2001 CS 655: Lecture 6 5

Mystery Function (Teaser)

p xy. pca.pca (x.x xy.x) x) y (p ((x.x xy.y) x) (x. z.z (xy.y) y)

m xy. pca.pca (x.x xy.x) x) x.x (p y (m ((x.x xy.y) x) y))f x. pca.pca ((x.x xy.x) x) (z.z (xy.y) (x.x)) (m x (f ((x.x xy.y) x)))

if x = 0

1

x * f (x – 1)

Page 6: Lecture 6:  Lambda Calculus

6 Feb 2001 CS 655: Lecture 6 6

Evaluation Rules

-reduction (renaming)

y. M v. (M [y v])

where v does not occur in M.

-reduction (substitution)

(x. M)N M [ x N ]

Page 7: Lecture 6:  Lambda Calculus

6 Feb 2001 CS 655: Lecture 6 7

Identity ()

x y if x and y are same name

M1 M2 N1 N2 if M1 N1 M2 N2

(M) (N) if M N

x. M y. N if x y M N

Page 8: Lecture 6:  Lambda Calculus

6 Feb 2001 CS 655: Lecture 6 8

Defining Substitution ( )

x [x N] N

y [x N] y where x y

M1 M2 [x N] M1 [x N] M2 [x N]

(x. M) [x N] x. M

Page 9: Lecture 6:  Lambda Calculus

6 Feb 2001 CS 655: Lecture 6 9

Defining Substitution ( )

(y. M) [x N] y. (M [x N])

where x y and y does not appear free in N or x does not appear free in M.

(y. M) [x N] z. (M [y z]) [x N]

where x y, z x and z y and z does not appear in M or N, x does occur free in M and y does occur free in N.

Page 10: Lecture 6:  Lambda Calculus

6 Feb 2001 CS 655: Lecture 6 10

Reduction (Uninteresting Rules)

y. M v. (M [y v])

where v does not occur in M.

M M

M N PM PN

M N MP NP

M N x. M x. N

M N and N P M P

Page 11: Lecture 6:  Lambda Calculus

6 Feb 2001 CS 655: Lecture 6 11

-Reduction (the source of all computation)

(x. M)N M [ x N ]

Page 12: Lecture 6:  Lambda Calculus

6 Feb 2001 CS 655: Lecture 6 12

Recall Apply in Scheme

“To apply a procedure to a list of arguments, evaluate the procedure in a new environment that binds the formal parameters of the procedure to the arguments it is applied to.”

• We’ve replaced environments with substitution.

• We’ve replaced eval with reduction.

Page 13: Lecture 6:  Lambda Calculus

6 Feb 2001 CS 655: Lecture 6 13

Some Simple FunctionsI x.x

C xy.yx

Abbreviation for x.(y. yx)

CII = (x.(y. yx)) (x.x) (x.x)

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

x.x (x.x)

x.x

= I

Page 14: Lecture 6:  Lambda Calculus

6 Feb 2001 CS 655: Lecture 6 14

Evaluating Lambda Expressions

• redex: Term of the form (x. M)N

Something that can be -reduced

• An expression is in normal form if it contains no redexes (redices).

• To evaluate a lambda expression, keep doing reductions until you get to normal form.

Page 15: Lecture 6:  Lambda Calculus

6 Feb 2001 CS 655: Lecture 6 15

Example

f. (( x.f (xx)) ( x. f (xx)))

Page 16: Lecture 6:  Lambda Calculus

6 Feb 2001 CS 655: Lecture 6 16

Alyssa P. Hacker’s Answer

( f. (( x.f (xx)) ( x. f (xx)))) (z.z)

(x.(z.z)(xx)) ( x. (z.z)(xx))

(z.z) ( x.(z.z)(xx)) ( x.(z.z)(xx))

(x.(z.z)(xx)) ( x.(z.z)(xx))

(z.z) ( x.(z.z)(xx)) ( x.(z.z)(xx))

(x.(z.z)(xx)) ( x.(z.z)(xx))

...

Page 17: Lecture 6:  Lambda Calculus

6 Feb 2001 CS 655: Lecture 6 17

Ben Bitdiddle’s Answer

( f. (( x.f (xx)) ( x. f (xx)))) (z.z)

(x.(z.z)(xx)) ( x. (z.z)(xx))

(x.xx) (x.(z.z)(xx))

(x.xx) (x.xx)

(x.xx) (x.xx)

...

Page 18: Lecture 6:  Lambda Calculus

6 Feb 2001 CS 655: Lecture 6 18

Be Very Afraid!

• Some -calculus terms can be -reduced forever!

• The order in which you choose to do the reductions might change the result!

Page 19: Lecture 6:  Lambda Calculus

6 Feb 2001 CS 655: Lecture 6 19

Take on Faith (for now)• All ways of choosing reductions that reduce

a lambda expression to normal form will produce the same normal form (but some might never produce a normal form).

• If we always apply the outermost lambda first, we will find the normal form is there is one.– This is normal order reduction – corresponds to

normal order (lazy) evaluation

Page 20: Lecture 6:  Lambda Calculus

6 Feb 2001 CS 655: Lecture 6 20

Who needs primitives?

T xy. x F xy. y if pca . pca

Page 21: Lecture 6:  Lambda Calculus

6 Feb 2001 CS 655: Lecture 6 21

EvaluationT xy. x

F xy. y

if pca . pca

if T M N ((pca . pca) (xy. x)) M N

(ca . (x.(y. x)) ca)) M N

(x.(y. x)) M N

(y. M )) N M

Page 22: Lecture 6:  Lambda Calculus

6 Feb 2001 CS 655: Lecture 6 22

Who needs primitives?

and xy. if x y F

or xy. if x T y

Page 23: Lecture 6:  Lambda Calculus

6 Feb 2001 CS 655: Lecture 6 23

Coupling

[M, N] z.z M N

first p.p T

second p.p F

first [M, N]

= p.p T (z.z M N) (z.z M N) T

= (z.z M N) xy. x (xy. x) M N M

Page 24: Lecture 6:  Lambda Calculus

6 Feb 2001 CS 655: Lecture 6 24

Tupling

n-tuple: [M] = M

[M0,..., Mn-1, Mn] = [M0, [M1 ,..., [Mn-1, Mn ]... ]n-tuple direct:

[M0,..., Mn-1, Mn] = z.z M0,..., Mn-1, Mn

Pi,n = x.x Ui,n

Ui,n = x0... xn. xi

What is P1,2?

Page 25: Lecture 6:  Lambda Calculus

6 Feb 2001 CS 655: Lecture 6 25

Primitives

What about all those pesky numbers?

Page 26: Lecture 6:  Lambda Calculus

6 Feb 2001 CS 655: Lecture 6 26

What are numbers?

• We need three (?) functions:succ: n n + 1

pred: n n – 1

zero?: n (n = 0)

• Is that enough to define add?

Page 27: Lecture 6:  Lambda Calculus

6 Feb 2001 CS 655: Lecture 6 27

Adding for Post-Docs

add xy.if (zero? x) y

(add (pred x) (succ y)

Page 28: Lecture 6:  Lambda Calculus

6 Feb 2001 CS 655: Lecture 6 28

Counting

0 I

1 [F, I]

2 [F, [F, I]]

3 [F, [F [F, I]]

...

n + 1 [F, n]

Page 29: Lecture 6:  Lambda Calculus

6 Feb 2001 CS 655: Lecture 6 29

ArithmeticZero? x.x T

Zero? 0 = (x.x T) I = T Zero? 1 = (x.x T) [F, I] = Fsucc x.[F, x]pred x.x F

pred 1 = (x.x F) [F, I] = [F, I]F = I = 0 pred 0 = (x.x F) I = IF = F

Page 30: Lecture 6:  Lambda Calculus

6 Feb 2001 CS 655: Lecture 6 30

Factorialmult

xy. if (zero? x) 0

(add y (mult (pred x) y))

fact

x. if (zero? x) 1

(mult x (fact (pred x)))

Recursive definitions should make you uncomfortable.Need for definitions should also bother you.

Page 31: Lecture 6:  Lambda Calculus

6 Feb 2001 CS 655: Lecture 6 31

Summary• All you need is application and abstraction

and you can compute anything

• This is just one way of representing numbers, booleans, etc. – many others are possible

• Integers, booleans, if, while, +, *, =, <, subtyping, multiple inheritance, etc. are for wimps! Real programmers only use .

Page 32: Lecture 6:  Lambda Calculus

6 Feb 2001 CS 655: Lecture 6 32

Charge

• Problem Set 2 out today– Make a quantum scheme interpreter– Longer and harder than PS1– New teams assigned

• Read Prakash’s Notes• Be uncomfortable about recursive

definitions