Lecture 6: Lambda Calculus
description
Transcript of 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)
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)
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?
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
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)
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 ]
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
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
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.
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
6 Feb 2001 CS 655: Lecture 6 11
-Reduction (the source of all computation)
(x. M)N M [ x N ]
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.
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
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.
6 Feb 2001 CS 655: Lecture 6 15
Example
f. (( x.f (xx)) ( x. f (xx)))
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))
...
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)
...
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!
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
6 Feb 2001 CS 655: Lecture 6 20
Who needs primitives?
T xy. x F xy. y if pca . pca
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
6 Feb 2001 CS 655: Lecture 6 22
Who needs primitives?
and xy. if x y F
or xy. if x T y
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
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?
6 Feb 2001 CS 655: Lecture 6 25
Primitives
What about all those pesky numbers?
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?
6 Feb 2001 CS 655: Lecture 6 27
Adding for Post-Docs
add xy.if (zero? x) y
(add (pred x) (succ y)
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]
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
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.
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 .
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