Lesson 3 Formalizing and Implementing Pure Lambda Calculus - PowerPoint PPT Presentation

About This Presentation
Title:

Lesson 3 Formalizing and Implementing Pure Lambda Calculus

Description:

(1) only free occurrences should be repalced. (2) illustrates free variable capture. ... We can avoid name clashes by eliminating variable names. ... – PowerPoint PPT presentation

Number of Views:83
Avg rating:3.0/5.0
Slides: 16
Provided by: davema73
Category:

less

Transcript and Presenter's Notes

Title: Lesson 3 Formalizing and Implementing Pure Lambda Calculus


1
Lesson 3Formalizing and Implementing Pure
Lambda Calculus
  • 1/23/03
  • Chapters 5.3, 6, 7

2
Outline
  • Operational semantics of the lambda calculus
  • substitution
  • alpha-conversion, beta reduction
  • evaluation
  • Avoiding names -- deBruijn indices
  • substitution
  • evaluation
  • Implementation in ML

3
Abstract Syntax
  • V is a countable set of variables
  • T is the set of terms defined by
  • t x (x ? V)
  • ?x.t (x ? V)
  • t t

4
Free variables
The set of free variables of a term is defined
by FV(x) x FV(?x.t) FV(t) \ x
FV(t1 t2) FV(t1) ? FV(t2) E.g. FV(?x. y(?y.
xyu)) y,u
5
Substitution and free variable capture
Define substitution naively by x ? sx s
x ? sy y if y ? x x ? s(?y.t)
(?y.x ? st) x ? s(t1 t2) (x ? st1)
(x ? st2) Then (1) x ? y(?x.x) (?x.x ?
yx) (?x.y) wrong! (2) x ? y(?y.x)
(?y.x ? yx) (?y.y) wrong! (1) only free
occurrences should be repalced. (2) illustrates
free variable capture.
6
Renaming bound variables
The name of a bound variable does not matter.
We can change bound variable names, as long as we
avoid free variables in the body Thus ?x.x
? ?y.y but ?x.y ? ?y.y. Change of
bound variable names is called ?-conversion. To
avoid free variable capture during
substitution, we change bound variable names as
needed.
7
Substitution refined
Define substitution x ? sx s x ?
sy y if y ? x x ? s(?y.t) (?y.x ?
st) if y ? x and y ? FV(s) x ? s(t1 t2)
(x ? st1) (x ? st2) When applying the rule
for x ? s(?y.t), we change the bound variable y
if necessary so that the side conditions are
satisfied.
8
Substitution refined (2)
The rule x ? s(?y.t) (?y.x ? st) if
y ? x and y ? FV(s) could be replaced by
x ? s(?y.t) (?z.x ? sy ? zt) where z
? FV(t) and z ? FV(s) Note that (?x.t) contains
no free occurrences of x, so x ? s(?x.t)
?x.t
9
Operational semantics (call by value)
Syntax t Terms
x (x ? V) ?x.t (x ? V) t
t v ?x.t Values We could also
regard variables as values v x ?x.t
10
Operational semantics rules
(?x.t1) v2 ? x ? v2 t1
t1 ? t1
t1 t2 ? t1 t2
  • evaluate function before argument
  • evaluate argument before applying
  • function

t2 ? t2
v1 t2 ? v1 t2
11
Avoiding variables
Managing bound variable names to avoid free
variable capture is messy. We can avoid name
clashes by eliminating variable names. De Bruijn
indices are a device for replacing names with
addresses of variables. ?x.x becomes ?.0
?x.x(?y.xy) becomes ?.0(?.1 0) Index i refers
to the ith nearest enclosing binder.
12
Free variables
This explains how to replace bound variables.
What do we do with free variables? Assume an
ordered context listing all free variables that
can occur, and map free variables to their index
in this context (counting right to left)
Context a, b a ? 1, b ? 0 ?x.a ?
?.2, ?x.b ? ?.1, ?x.b(?y.a)
??.1(?.3) Imagine virtual ?-binders for a and b
around term.
13
Substitution
When substituting into a lambda term, the
indices have to be adjusted x ? z (?y.x)
in context x,y,z 1 ? 0 (?.2) (?.2 ? 1 2)
(?.1) shift(d,c) (k) k if k lt c
kd if k gt c shift(d,c) (?.t)
(?.shift(d,c1)(t)) shift(d,c) (t1 t2)
(shift(d,c) (t1)) (shift(d,c) (t2))
14
Substitution
j ? s k s if k j k
otherwise j ? s (?.t) ?.j1 ?
shift(1,0)s t j ? s (t1 t2) (j ? s
t1) (j ? s t2) Beta-reduction (?.t) v ?
shift(-1,0)(0 ? shift(1,0)(v) t)
15
Symbols
  • ? ? ?
  • ? ? ? ? ?
  • ? ? ? ? ? ? ? ?
  • ?
Write a Comment
User Comments (0)
About PowerShow.com