Chapter 2: Lambda Calculus

Slides:



Advertisements
Similar presentations
Elements of Lambda Calculus Functional Programming Academic Year Alessandro Cimatti
Advertisements

Lambda Calculus and Lisp PZ03J. Lambda Calculus The lambda calculus is a model for functional programming like Turing machines are models for imperative.
INF 212 ANALYSIS OF PROG. LANGS LAMBDA CALCULUS Instructors: Crista Lopes Copyright © Instructors.
Foundations of Programming Languages: Introduction to Lambda Calculus
6. Introduction to the Lambda Calculus. © O. Nierstrasz PS — Introduction to the Lambda Calculus 6.2 Roadmap  What is Computability? — Church’s Thesis.
School of Computing and Mathematics, University of Huddersfield CAS810: WEEK 3 LECTURE: LAMBDA CALCULUS PRACTICAL/TUTORIAL: (i) Do exercises given out.
Denotational Semantics Syntax-directed approach, generalization of attribute grammars: –Define context-free abstract syntax –Specify syntactic categories.
C. Varela; Adapted w/permission from S. Haridi and P. Van Roy1 Declarative Computation Model Kernel language semantics Carlos Varela RPI Adapted with permission.
Copyright © 2006 The McGraw-Hill Companies, Inc. Programming Languages 2nd edition Tucker and Noonan Chapter 14 Functional Programming It is better to.
Chair of Software Engineering 1 Concurrent Object-Oriented Programming Arnaud Bailly, Bertrand Meyer and Volkan Arslan.
C. Varela1 Programming Languages (CSCI 4430/6969) Lambda Calculus Carlos Varela Rennselaer Polytechnic Institute September 17, 2007.
C. Varela1 Lambda Calculus alpha-renaming, beta reduction, applicative and normal evaluation orders, Church-Rosser theorem, combinators Carlos Varela Rennselaer.
CSE S. Tanimoto Lambda Calculus 1 Lambda Calculus What is the simplest functional language that is still Turing complete? Where do functional languages.
Lambda Calculus History and Syntax. History The lambda calculus is a formal system designed to investigate function definition, function application and.
© Kenneth C. Louden, Chapter 11 - Functional Programming, Part III: Theory Programming Languages: Principles and Practice, 2nd Ed. Kenneth C. Louden.
1 ML fun x -> e e 1 e 2 0, 1, 2,..., +, -,... true, false, if e then e else e patterns datatypes exceptions structures functors let f x = e variables These.
© Kenneth C. Louden, Chapter 11 - Functional Programming, Part III: Theory Programming Languages: Principles and Practice, 2nd Ed. Kenneth C. Louden.
Universidad Nacional de ColombiaUniversidad Nacional de Colombia Facultad de IngenieríaFacultad de Ingeniería Departamento de Sistemas- 2002Departamento.
C. Varela1 Programming Languages (CSCI 4430/6430) History, Syntax, Semantics, Essentials, Paradigms Carlos Varela Rennselaer Polytechnic Institute September.
CSE 230 The -Calculus. Background Developed in 1930’s by Alonzo Church Studied in logic and computer science Test bed for procedural and functional PLs.
Types and Programming Languages Lecture 6 Simon Gay Department of Computing Science University of Glasgow 2006/07.
CSE-321 Programming Languages -Calculus (II) POSTECH March 27, 2006 박성우.
1 COSC3306: Programming Paradigms Lecture 10: Applicative Programming Specifications Haibin Zhu, Ph.D. Computer Science Nipissing University (C) 2003.
-Calculus Kangwon National University 임현승 Programming Languages These slides are based on the slides by Prof. Sungwoo Park at POSTECH.
Lambda Calculus CSE 340 – Principles of Programming Languages Fall 2015 Adam Doupé Arizona State University
CSE-321 Programming Languages -Calculus (II) POSTECH March 26, 2007 박성우.
CSE 425: Functional Programming I Programs as Functions Some programs act like mathematical functions –Associate a set of input values from the function’s.
C H A P T E R E I G H T Functional Programming Programming Languages – Principles and Paradigms by Allen Tucker, Robert Noonan.
6/21/20161 Programming Languages and Compilers (CS 421) Reza Zamani Based in part on slides by Mattox Beckman,
Arvind Computer Science and Artificial Intelligence Laboratory M.I.T. L03-1 September 14, 2006http:// -calculus: A Basis for.
A LISP interepreter for the Lambda Calculus Functional Programming
Lesson 10 Type Reconstruction
CS5205: Foundation in Programming Languages Type Reconstruction
Functional Programming
CS5205: Foundations in Programming Languages
Conditional Expressions
CS 550 Programming Languages Jeremy Johnson
Unit – 3 :LAMBDA CALCULUS AND FUNCTIONAL PROGRAMMING
Lambda Calculus CSE 340 – Principles of Programming Languages
Carlos Varela Rennselaer Polytechnic Institute September 27, 2016
Carlos Varela Rennselaer Polytechnic Institute September 5, 2017
Carlos Varela Rennselaer Polytechnic Institute September 1, 2017
More on Lambda Calculus
CS 611: Lecture 9 More Lambda Calculus: Recursion, Scope, and Substitution September 17, 1999 Cornell University Computer Science Department Andrew Myers.
September 4, 1997 Programming Languages (CS 550) Lecture 6 Summary Operational Semantics of Scheme using Substitution Jeremy R. Johnson TexPoint fonts.
Declarative Computation Model Kernel language semantics (Non-)Suspendable statements (VRH ) Carlos Varela RPI October 11, 2007 Adapted with.
Typed Arithmetic Expressions
Carlos Varela Rennselaer Polytechnic Institute September 6, 2016
Lesson2 Lambda Calculus Basics
Carlos Varela Rennselaer Polytechnic Institute September 4, 2015
Programming Languages and Compilers (CS 421)
Programming Languages and Compilers (CS 421)
Programming Languages and Compilers (CS 421)
CSE341: Programming Languages Lecture 12 Equivalence
Announcements Quiz 6 HW7 due Tuesday, October 30
Carlos Varela Rennselaer Polytechnic Institute September 8, 2017
PROGRAMMING IN HASKELL
CSCE 314: Programming Languages Dr. Dylan Shell
CS 611: Lecture 10 More Lambda Calculus September 20, 1999
Announcements Exam 2 on Friday, November 2nd Topics
L Calculus.
Programming Languages and Compilers (CS 421)
Programming Languages and Compilers (CS 421)
CSE S. Tanimoto Lambda Calculus
CS 611: Lecture 10 More Lambda Calculus September 20, 1999
Programming Languages
CSE341: Programming Languages Lecture 12 Equivalence
Carlos Varela Rennselaer Polytechnic Institute September 8, 2015
Carlos Varela Rennselaer Polytechnic Institute September 6, 2019
Carlos Varela Rennselaer Polytechnic Institute September 10, 2019
Presentation transcript:

Chapter 2: Lambda Calculus Programming Distributed Computing Systems: A Foundational Approach Carlos Varela Rensselaer Polytechnic Institute C. Varela

Mathematical Functions Take the mathematical function: f(x) = x2 f is a function that maps integers to integers: f: Z  Z We apply the function f to numbers in its domain to obtain a number in its range, e.g.: f(-2) = 4 Function Range Domain C. Varela

Function Composition Given the mathematical functions: f(x) = x2 , g(x) = x+1 f g is the composition of f and g: f g (x) = f(g(x)) f  g (x) = f(g(x)) = f(x+1) = (x+1)2 = x2 + 2x + 1 g  f (x) = g(f(x)) = g(x2) = x2 + 1 Function composition is therefore not commutative. Function composition can be regarded as a (higher-order) function with the following type:  : (Z  Z) x (Z  Z)  (Z  Z) C. Varela

Lambda Calculus (Church and Kleene 1930’s) A unified language to manipulate and reason about functions. Given f(x) = x2 x. x2 represents the same f function, except it is anonymous. To represent the function evaluation f(2) = 4, we use the following -calculus syntax: (x. x2 2)  22  4 C. Varela

Lambda Calculus Syntax and Semantics The syntax of a -calculus expression is as follows: e ::= v variable | v.e functional abstraction | (e e) function application The semantics of a -calculus expression is as follows: (x.E M)  E{M/x} where we alpha-rename the lambda abstraction E if necessary to avoid capturing free variables in M. C. Varela

Currying The lambda calculus can only represent functions of one variable. It turns out that one-variable functions are sufficient to represent multiple-variable functions, using a strategy called currying. E.g., given the mathematical function: h(x,y) = x+y of type h: Z x Z Z We can represent h as h’ of type: h’: Z Z Z Such that h(x,y) = h’(x)(y) = x+y For example, h’(2) = g, where g(y) = 2+y We say that h’ is the curried version of h. C. Varela

Function Composition in Lambda Calculus S: x.x2 (Square) I: x.x+1 (Increment) C: f.g.x.(f (g x)) (Function Composition) ((C S) I) ((f.g.x.(f (g x)) x.x2) x.x+1)  (g.x.(x.x2 (g x)) x.x+1)  x.(x.x2 (x.x+1 x))  x.(x.x2 x+1)  x.x+12 Recall semantics rule: (x.E M)  E{M/x} C. Varela

Free and Bound Variables The lambda functional abstraction is the only syntactic construct that binds variables. That is, in an expression of the form: v.e we say that free occurrences of variable v in expression e are bound. All other variable occurrences are said to be free. E.g., (x.y.(x y) (y w)) Bound Variables Free Variables C. Varela

This reduction erroneously captures the free occurrence of y. -renaming Alpha renaming is used to prevent capturing free occurrences of variables when reducing a lambda calculus expression, e.g., (x.y.(x y) (y w)) y.((y w) y) This reduction erroneously captures the free occurrence of y. A correct reduction first renames y to z, (or any other fresh variable) e.g.,  (x.z.(x z) (y w))  z.((y w) z) where y remains free. C. Varela

Order of Evaluation in the Lambda Calculus Does the order of evaluation change the final result? Consider: x.(x.x2 (x.x+1 x)) There are two possible evaluation orders:  x.(x.x2 x+1)  x.x+12 and:  x.(x.x+1 x)2 Is the final result always the same? Recall semantics rule: (x.E M)  E{M/x} Applicative Order Normal Order C. Varela

Church-Rosser Theorem If a lambda calculus expression can be evaluated in two different ways and both ways terminate, both ways will yield the same result. e e1 e2 e’ Also called the diamond or confluence property. Furthermore, if there is a way for an expression evaluation to terminate, using normal order will cause termination. C. Varela

Order of Evaluation and Termination Consider: (x.y (x.(x x) x.(x x))) There are two possible evaluation orders:  (x.y (x.(x x) x.(x x))) and:  y In this example, normal order terminates whereas applicative order does not. Recall semantics rule: (x.E M)  E{M/x} Applicative Order Normal Order C. Varela

Combinators A lambda calculus expression with no free variables is called a combinator. For example: I: x.x (Identity) App: f.x.(f x) (Application) C: f.g.x.(f (g x)) (Composition) L: (x.(x x) x.(x x)) (Loop) Cur: f.x.y.((f x) y) (Currying) Seq: x.y.(z.y x) (Sequencing--normal order) ASeq: x.y.(y x) (Sequencing--applicative order) where y denotes a thunk, i.e., a lambda abstraction wrapping the second expression to evaluate. The meaning of a combinator is always the same independently of its context. C. Varela

Combinators in Functional Programming Languages Most functional programming languages have a syntactic form for lambda abstractions. For example the identity combinator: x.x can be written in Oz as follows: fun {$ X} X end and it can be written in Scheme as follows: (lambda(x) x) C. Varela

Currying Combinator in Oz The currying combinator can be written in Oz as follows: fun {$ F} fun {$ X} fun {$ Y} {F X Y} end It takes a function of two arguments, F, and returns its curried version, e.g., {{{Curry Plus} 2} 3}  5 C. Varela

Normal vs Applicative Order of Evaluation and Termination Consider: (x.y (x.(x x) x.(x x))) There are two possible evaluation orders:  (x.y (x.(x x) x.(x x))) and:  y In this example, normal order terminates whereas applicative order does not. Recall semantics rule: (x.E M)  E{M/x} Applicative Order Normal Order C. Varela

-renaming Alpha renaming is used to prevent capturing free occurrences of variables when beta-reducing a lambda calculus expression. In the following, we rename x to z, (or any other fresh variable): (x.(y x) x) (z.(y z) x) Only bound variables can be renamed. No free variables can be captured (become bound) in the process. For example, we cannot alpha-rename x to y. α→ C. Varela

b-reduction (x.E M) E{M/x} Beta-reduction may require alpha renaming to prevent capturing free variable occurrences. For example: (x.y.(x y) (y w)) (x.z.(x z) (y w)) z.((y w) z) Where the free y remains free. α→ b→ C. Varela

h-conversion x.(E x) E if x is not free in E. For example: (x.y.(x y) (y w)) (x.z.(x z) (y w)) z.((y w) z) (y w) α→ b→ h→ C. Varela

Recursion Combinator (Y or rec) Suppose we want to express a factorial function in the l calculus. 1 n=0 f(n) = n! = n*(n-1)! n>0 We may try to write it as: f: n.(if (= n 0) 1 (* n (f (- n 1)))) But f is a free variable that should represent our factorial function. C. Varela

Recursion Combinator (Y or rec) We may try to pass f as an argument (g) as follows: f: g.n.(if (= n 0) 1 (* n (g (- n 1)))) The type of f is: f: (Z  Z)  (Z  Z) So, what argument g can we pass to f to get the factorial function? C. Varela

Recursion Combinator (Y or rec) f: (Z  Z)  (Z  Z) (f f) is not well-typed. (f I) corresponds to: 1 n=0 f(n) = n*(n-1) n>0 We need to solve the fixpoint equation: (f X) = X C. Varela

Recursion Combinator (Y or rec) (f X) = X The X that solves this equation is the following: X: (lx.(g.n.(if (= n 0) 1 (* n (g (- n 1)))) ly.((x x) y)) lx.(g.n.(if (= n 0) ly.((x x) y))) C. Varela

Recursion Combinator (Y or rec) X can be defined as (Y f), where Y is the recursion combinator. Y: lf.(lx.(f ly.((x x) y)) lx.(f ly.((x x) y))) Y: lf.(lx.(f (x x)) lx.(f (x x))) You get from the normal order to the applicative order recursion combinator by h-expansion (h-conversion from right to left). Applicative Order Normal Order C. Varela

Natural Numbers in Lambda Calculus |0|: x.x (Zero) |1|: x.x.x (One) … |n+1|: x.|n| (N+1) s: ln.lx.n (Successor) (s 0) (n.x.n x.x)  x.x.x Recall semantics rule: (x.E M)  E{M/x} C. Varela

Booleans and Branching (if) in l Calculus |true|: x.y.x (True) |false|: x.y.y (False) |if|: b.lt.le.((b t) e) (If) (((if true) a) b) (((b.t.e.((b t) e) x.y.x) a) b)  ((t.e.((x.y.x t) e) a) b)  (e.((x.ly.x a) e) b)  ((x.ly.x a) b) (y.a b) a Recall semantics rule: (x.E M)  E{M/x} C. Varela

Exercises PDCS Exercise 2.11.1 (page 31). C. Varela

Exercises PDCS Exercise 2.11.7 (page 31). Prove that your addition operation is correct using induction. PDCS Exercise 2.11.11 (page 31). PDCS Exercise 2.11.12 (page 31). C. Varela