Lecture 6: Lambda Calculus God created the integers – all else is the result of man. Leopold Kronecker God created application – all else.
Download ReportTranscript Lecture 6: Lambda Calculus God created the integers – all else is the result of man. Leopold Kronecker God created application – all else.
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 David Evans University of Virginia http://www.cs.virginia.edu/~evans Computer Science Language Complexity (Number of Morphemes) Language Complexity and Brain Cell Decay English (OED: 500,000 words) C++ (680 pages) Scheme (50 pages) ??? (.5 page) 0 6 Feb 2001 5 10 15 Years Spent in School CS 655: Lecture 6 20 25 2 Complexity in Scheme • Special Forms – if, cond, define, etc. • Primitives If we have lazy evaluation, (and don’t care about abstraction) we don’t need these. – Numbers (infinitely many) – Booleans: #t, #f Hard to get rid of? – 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? 6 Feb 2001 CS 655: Lecture 6 3 -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 4 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.xxxy.x) if = 0 x) (z.z (xy.y) 1 (x.x)) (m x (f x((x.x * f (x xy.y) – 1) x))) 6 Feb 2001 CS 655: Lecture 6 5 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 6 Identity () xy 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 7 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 8 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 9 Reduction (Uninteresting Rules) y. M v. (M [y v]) where v does not occur in M. MM 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 10 -Reduction (the source of all computation) (x. M)N M [ x N ] 6 Feb 2001 CS 655: Lecture 6 11 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 12 Some Simple Functions I 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 13 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 14 Example f. (( x.f (xx)) ( x. f (xx))) 6 Feb 2001 CS 655: Lecture 6 15 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 16 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 17 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 18 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 19 Who needs primitives? T xy. x F xy. y if pca . pca 6 Feb 2001 CS 655: Lecture 6 20 Evaluation T 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 21 Who needs primitives? and xy. if x y F or xy. if x T y 6 Feb 2001 CS 655: Lecture 6 22 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 23 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 24 Primitives What about all those pesky numbers? 6 Feb 2001 CS 655: Lecture 6 25 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 26 Adding for Post-Docs add xy.if (zero? x) y (add (pred x) (succ y) 6 Feb 2001 CS 655: Lecture 6 27 Counting 0I 1 [F, I] 2 [F, [F, I]] 3 [F, [F [F, I]] ... n + 1 [F, n] 6 Feb 2001 CS 655: Lecture 6 28 Arithmetic Zero? x.x T Zero? 0 = (x.x T) I = T Zero? 1 = (x.x T) [F, I] = F succ 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 29 Factorial mult 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 30 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 31 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 6 Feb 2001 CS 655: Lecture 6 32