Chapter 2: Lambda Calculus - PowerPoint PPT Presentation

About This Presentation
Title:

Chapter 2: Lambda Calculus

Description:

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

Number of Views:59
Avg rating:3.0/5.0
Slides: 29
Provided by: Rich2151
Learn more at: http://wcl.cs.rpi.edu
Category:

less

Transcript and Presenter's Notes

Title: Chapter 2: Lambda Calculus


1
Chapter 2 Lambda Calculus
  • Programming Distributed Computing Systems A
    Foundational Approach
  • Carlos Varela
  • Rensselaer Polytechnic Institute

2
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
3
Function Composition
Given the mathematical functions f(x) x2 ,
g(x) x1 f ?g is the composition of f and
g f ?g (x) f(g(x)) f ? g (x) f(g(x))
f(x1) (x1)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)
4
Lambda Calculus (Church and Kleene 1930s)
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
5
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) ?
EM/x where we alpha-rename the lambda
abstraction E if necessary to avoid capturing
free variables in M.
6
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) xy 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) xy For
example, h(2) g, where g(y) 2y We say
that h is the curried version of h.
7
Function Composition in Lambda Calculus
S ?x.x2 (Square) I ?x.x1 (Increment) C
?f.?g.?x.(f (g x)) (Function
Composition) ((C S) I) ((?f.?g.?x.(f (g x))
?x.x2) ?x.x1) ? (?g.?x.(?x.x2 (g x)) ?x.x1) ?
?x.(?x.x2 (?x.x1 x)) ? ?x.(?x.x2 x1) ? ?x.x12
Recall semantics rule (?x.E M) ? EM/x
8
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))
Free Variables
Bound Variables
9
?-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.?y.(x y) (y w))
  • ? (?x.?z.(x z) (y w))
  • ? ?z.((y w) z)
  • where y remains free.

10
Order of Evaluation in the Lambda Calculus
Does the order of evaluation change the final
result? Consider ?x.(?x.x2 (?x.x1 x)) There
are two possible evaluation orders ?x.(?x.x2
(?x.x1 x)) ? ?x.(?x.x2 x1) ? ?x.x12 and ?x.(?x
.x2 (?x.x1 x)) ? ?x.(?x.x1 x)2 ? ?x.x12 Is
the final result always the same?
Recall semantics rule (?x.E M) ? EM/x
Applicative Order
Normal Order
11
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.
12
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))) ? (?x.y (?x.(x x) ?x.(x
x))) and (?x.y (?x.(x x) ?x.(x x))) ? y In
this example, normal order terminates whereas
applicative order does not.
Recall semantics rule (?x.E M) ? EM/x
Applicative Order
Normal Order
13
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.
14
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)
15
Currying Combinator in Oz
The currying combinator can be written in Oz as
follows fun F fun X fun Y
F X Y end end end It takes a function
of two arguments, F, and returns its curried
version, e.g., Curry Plus 2 3 ? 5
16
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))) ? (?x.y (?x.(x x) ?x.(x
x))) and (?x.y (?x.(x x) ?x.(x x))) ? y In
this example, normal order terminates whereas
applicative order does not.
Recall semantics rule (?x.E M) ? EM/x
Applicative Order
Normal Order
17
?-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.

a?
18
b-reduction
b?
  • (?x.E M) EM/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.

a?
b?
19
h-conversion
h?
  • ?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)

a?
b?
h?
20
Recursion Combinator (Y or rec)
Suppose we want to express a factorial function
in the l calculus. 1 n0 f(n) n!
n(n-1)! ngt0 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.
21
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?
22
Recursion Combinator (Y or rec)
f (Z ? Z) ? (Z ? Z) (f f) is not
well-typed. (f I) corresponds to 1 n0
f(n) n(n-1) ngt0 We need to solve
the fixpoint equation (f X) X
23
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) 1
( n (g (- n 1)))) ly.((x x) y)))
24
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
25
Natural Numbers in Lambda Calculus
0 ?x.x (Zero) 1 ?x.?x.x (One) n1
?x.n (N1) s ln.lx.n (Successor) (s
0) (?n.?x.n ?x.x) ? ?x.?x.x
Recall semantics rule (?x.E M) ? EM/x
26
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) ? EM/x
27
Exercises
  • PDCS Exercise 2.11.1 (page 31).
  • PDCS Exercise 2.11.2 (page 31).
  • PDCS Exercise 2.11.5 (page 31).
  • PDCS Exercise 2.11.6 (page 31).

28
Exercises
  • PDCS Exercise 2.11.7 (page 31).
  • PDCS Exercise 2.11.9 (page 31).
  • PDCS Exercise 2.11.10 (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).
Write a Comment
User Comments (0)
About PowerShow.com