Programming Languages and
Compilers (CS 421)
Elsa L Gunter
2112 SC, UIUC
http://courses.engr.illinois.edu/cs421
Based in part on slides by Mattox Beckman, as updated
by Vikram Adve and Gul Agha
7/31/2017
1
Example Evaluation
First step:
(if x > 5 then y:= 2 + 3 else y:=3 + 4 fi,
{x -> 7})
--> ?
7/31/2017
2
Example Evaluation
First step:
(x > 5, {x -> 7}) --> ?
(if x > 5 then y:= 2 + 3 else y:=3 + 4 fi,
{x -> 7})
--> ?
7/31/2017
3
Example Evaluation
First step:
(x,{x -> 7}) --> (7, {x -> 7})
(x > 5, {x -> 7}) --> ?
(if x > 5 then y:= 2 + 3 else y:=3 + 4 fi,
{x -> 7})
--> ?
7/31/2017
4
Example Evaluation
First step:
(x,{x -> 7}) --> (7, {x -> 7})
(x > 5, {x -> 7}) --> (7 > 5, {x -> 7})
(if x > 5 then y:= 2 + 3 else y:=3 + 4 fi,
{x -> 7})
--> ?
7/31/2017
5
Example Evaluation
First step:
(x,{x -> 7}) --> (7, {x -> 7})
(x > 5, {x -> 7}) --> (7 > 5, {x -> 7})
(if x > 5 then y:= 2 + 3 else y:=3 + 4 fi,
{x -> 7})
--> (if 7 > 5 then y:=2 + 3 else y:=3 + 4 fi,
{x -> 7})
7/31/2017
6
Example Evaluation
Second Step:
(7 > 5, {x -> 7}) --> (true, {x -> 7})
(if 7 > 5 then y:=2 + 3 else y:=3 + 4 fi,
{x -> 7})
--> (if true then y:=2 + 3 else y:=3 + 4 fi,
{x -> 7})
Third Step:
(if true then y:=2 + 3 else y:=3 + 4 fi, {x -> 7})
-->(y:=2+3, {x->7})
7/31/2017
7
Example Evaluation
•
Fourth Step:
(2+3, {x-> 7}) --> (5, {x -> 7})
(y:=2+3, {x->7}) --> (y:=5, {x->7})
Fifth Step:
(y:=5, {x->7}) --> {y -> 5, x -> 7}
7/31/2017
8
Example Evaluation
Bottom Line:
(if x > 5 then y:= 2 + 3 else y:=3 + 4 fi,
{x -> 7})
--> (if 7 > 5 then y:=2 + 3 else y:=3 + 4 fi,
{x -> 7})
-->(if true then y:=2 + 3 else y:=3 + 4 fi,
{x -> 7})
-->(y:=2+3, {x->7})
--> (y:=5, {x->7}) --> {y -> 5, x -> 7}
•
7/31/2017
9
Transition Semantics Evaluation
A sequence of steps with trees of
justification for each step
(C1,m1) --> (C2,m2) --> (C3,m3) --> … --> m
Let -->* be the transitive closure of -->
Ie, the smallest transitive relation
containing -->
7/31/2017
10
Church-Rosser Property
Church-Rosser Property: If E-->* E1
and E-->* E2, if there exists a value V
such that E1 -->* V, then E2 -->* V
Also called confluence or diamond
property
Example:
E= 2 + 3 + 4
E1 = 5 + 4
E2= 2 + 7
V =9
7/31/2017
11
Does It always Hold?
No. Languages with side-effects tend not be
Church-Rosser with the combination of call-byname and call-by-value
Alonzo Church and Barkley Rosser proved in 1936
the -calculus does have it
Benefit of Church-Rosser: can check equality of
terms by evaluating them (Given evaluation
strategy might not terminate, though)
7/31/2017
12
Lambda Calculus - Motivation
Aim is to capture the essence of
functions, function applications, and
evaluation
calculus is a theory of computation
“The Lambda Calculus: Its Syntax and
Semantics”. H. P. Barendregt. North
Holland, 1984
7/31/2017
13
Lambda Calculus - Motivation
All sequential programs may be viewed
as functions from input (initial state and
input values) to output (resulting state
and output values).
-calculus is a mathematical formalism
of functions and functional
computations
Two flavors: typed and untyped
7/31/2017
14
Untyped -Calculus
Only three kinds of
expressions:
Variables: x, y, z, w, …
Abstraction: x. e
(Function creation, think fun x -> e)
7/31/2017
Application: e1 e2
15
Untyped -Calculus Grammar
Formal BNF Grammar:
<expression> ::= <variable>
| <abstraction>
| <application>
| (<expression>)
<abstraction>
::= <variable>.<expression>
<application>
::= <expression> <expression>
7/31/2017
16
Untyped -Calculus Terminology
Occurrence: a location of a subterm in a
term
Variable binding: x. e is a binding of x in e
Bound occurrence: all occurrences of x in
x. e
Free occurrence: one that is not bound
Scope of binding: in x. e, all occurrences in
e not in a subterm of the form x. e’ (same
x)
Free variables: all variables having free
occurrences in a term
7/31/2017
17
Example
Label occurrences and scope:
( x. y y. y ( x. x y) x) x
1 2 3 4
567 8 9
7/31/2017
18
Example
Label occurrences and scope:
free
free
( x. y y. y ( x. x y) x) x
1 2 3 4
567 8 9
7/31/2017
19
Untyped -Calculus
How do you compute with the
-calculus?
Roughly speaking, by substitution:
( x. e1) e2 * e1 [e2 / x]
* Modulo all kinds of subtleties to avoid
free variable capture
7/31/2017
20
Transition Semantics for -Calculus
E --> E’’
E E’ --> E’’ E’
Application (version 1 - Lazy Evaluation)
( x . E) E’ --> E[E’/x]
Application (version 2 - Eager Evaluation)
E’ --> E’’
( x . E) E’ --> ( x . E) E’’
( x . E) V --> E[V/x]
V - variable or abstraction (value)
7/31/2017
21
How Powerful is the Untyped -Calculus?
The untyped -calculus is Turing
Complete
Can express any sequential computation
Problems:
7/31/2017
How to express basic data: booleans,
integers, etc?
How to express recursion?
Constants, if_then_else, etc, are
conveniences; can be added as syntactic
sugar
22
Typed vs Untyped -Calculus
The pure -calculus has no notion of
type: (f f) is a legal expression
Types restrict which applications are
valid
Types are not syntactic sugar! They
disallow some terms
Simply typed -calculus is less powerful
than the untyped -Calculus: NOT
Turing Complete (no recursion)
7/31/2017
23
Uses of -Calculus
Typed and untyped -calculus used for
theoretical study of sequential
programming languages
Sequential programming languages are
essentially the -calculus, extended
with predefined constructs, constants,
types, and syntactic sugar
Ocaml is close to the -Calculus:
fun x -> exp --> x. exp
let x = e1 in e2 --> ( x. e2)e1
7/31/2017
24
Conversion
-conversion:
x. exp ----> y. (exp [y/x])
Provided that
1. y is not free in exp
2. No free occurrence of x in exp
becomes bound in exp when
replaced by y
7/31/2017
25
Conversion Non-Examples
1. Error: y is not free in termsecond
x. x y ----> y. y y
2. Error: free occurrence of x becomes
bound in wrong way when replaced by y
x. y. x y ----> y. y. y y
exp
exp[y/x]
But x. ( y. y) x ----> y. ( y. y) y
And y. ( y. y) y ----> x. ( y. y) x
7/31/2017
26
Congruence
Let ~ be a relation on lambda
terms. ~ is a congruence if
it is an equivalence relation
If e1 ~ e2 then
(e e1) ~ (e e2) and (e1e) ~ (e2 e)
x. e1 ~ x. e2
7/31/2017
27
Equivalence
equivalence is the smallest
congruence containing
conversion
One usually treats -equivalent
terms as equal - i.e. use
equivalence classes of terms
7/31/2017
28
Example
Show: x. ( y. y x) x ~~ y. ( x. x y) y
x. ( y. y x) x ----> z. ( y. y z) z so
x. ( y. y x) x ~~ z. ( y. y z) z
( y. y
( y. y
z. (
z. (
z. (
z) ----> ( x. x z) so
z) ~~ ( x. x z) so
y. y z) z ~~ z. ( x. x z) z
x. x z) z ----> y. ( x. x y) y so
x. x z) z ~~ y. ( x. x y) y
x. ( y. y x) x ~~ y. ( x. x y) y
7/31/2017
29
Substitution
Defined on -equivalence classes of
terms
P [N / x] means replace every free
occurrence of x in P by N
P called redex; N called residue
Provided that no variable free in P
becomes bound in P [N / x]
Rename bound variables in P to avoid
capturing free variables of N
7/31/2017
30
Substitution
x [N / x] = N
y [N / x] = y if y x
(e1 e2) [N / x] = ((e1 [N / x] ) (e2 [N / x] ))
( x. e) [N / x] = ( x. e)
( y. e) [N / x] = y. (e [N / x] )
provided y x and y not free in N
7/31/2017
Rename y in redex if necessary
31
Example
( y. y z) [( x. x y) / z] = ?
Problems?
z in redex in scope of y binding
y free in the residue
( y. y z) [( x. x y) / z] ---->
( w.w z) [( x. x y) / z] =
w. w ( x. x y)
7/31/2017
32
Example
Only replace free occurrences
( y. y z ( z. z)) [( x. x) / z] =
y. y ( x. x) ( z. z)
Not
y. y ( x. x) ( z. ( x. x))
7/31/2017
33
reduction
Rule: ( x. P) N ----> P [N /x]
Essence of computation in the lambda
calculus
Usually defined on -equivalence
classes of terms
7/31/2017
34
Example
( z. ( x. x y) z) ( y. y z)
----> ( x. x y) ( y. y z)
----> ( y. y z) y ----> y z
( x. x x) ( x. x x)
----> ( x. x x) ( x. x x)
----> ( x. x x) ( x. x x) ----> ….
7/31/2017
35
Equivalence
equivalence is the smallest
congruence containing equivalence
and reduction
A term is in normal form if no subterm
is equivalent to a term that can be
reduced
Hard fact (Church-Rosser): if e1 and e2
are -equivalent and both are normal
forms, then they are equivalent
7/31/2017
36
Order of Evaluation
Not all terms reduce to normal forms
Not all reduction strategies will produce
a normal form if one exists
7/31/2017
37
Lazy evaluation:
Always reduce the left-most application
in a top-most series of applications (i.e.
Do not perform reduction inside an
abstraction)
Stop when term is not an application, or
left-most application is not an
application of an abstraction to a term
7/31/2017
38
Example 1
( z. ( x. x)) (( y. y y) ( y. y y))
Lazy evaluation:
Reduce the left-most application:
( z. ( x. x)) (( y. y y) ( y. y y))
----> ( x. x)
7/31/2017
39
Eager evaluation
(Eagerly) reduce left of top application
to an abstraction
Then (eagerly) reduce argument
Then -reduce the application
7/31/2017
40
Example 1
( z. ( x. x))(( y. y y) ( y. y y))
Eager evaluation:
Reduce the rator of the top-most application to
an abstraction: Done.
Reduce the argument:
( z. ( x. x))(( y. y y) ( y. y y))
----> ( z. ( x. x))(( y. y y) ( y. y y))
----> ( z. ( x. x))(( y. y y) ( y. y y))…
7/31/2017
41
Example 2
( x. x x)(( y. y y) ( z. z))
Lazy evaluation:
( x. x x )(( y. y y) ( z. z)) ---->
7/31/2017
42
Example 2
( x. x x)(( y. y y) ( z. z))
Lazy evaluation:
( x. x x )(( y. y y) ( z. z)) ---->
7/31/2017
43
Example 2
( x. x x)(( y. y y) ( z. z))
Lazy evaluation:
( x. x x )(( y. y y) ( z. z)) ---->
(( y. y y ) ( z. z)) (( y. y y ) ( z. z))
7/31/2017
44
Example 2
( x. x x)(( y. y y) ( z. z))
Lazy evaluation:
( x. x x )(( y. y y) ( z. z)) ---->
(( y. y y ) ( z. z)) (( y. y y ) ( z. z)
7/31/2017
45
Example 2
( x. x x)(( y. y y) ( z. z))
Lazy evaluation:
( x. x x )(( y. y y) ( z. z)) ---->
(( y. y y ) ( z. z)) (( y. y y ) ( z. z))
7/31/2017
46
Example 2
( x. x x)(( y. y y) ( z. z))
Lazy evaluation:
( x. x x )(( y. y y) ( z. z)) ---->
(( y. y y ) ( z. z)) (( y. y y ) ( z. z))
----> (( z. z ) ( z. z))(( y. y y ) ( z. z))
7/31/2017
47
Example 2
( x. x x)(( y. y y) ( z. z))
Lazy evaluation:
( x. x x )(( y. y y) ( z. z)) ---->
(( y. y y ) ( z. z)) (( y. y y ) ( z. z))
----> (( z. z ) ( z. z))(( y. y y ) ( z. z))
7/31/2017
48
Example 2
( x. x x)(( y. y y) ( z. z))
Lazy evaluation:
( x. x x )(( y. y y) ( z. z)) ---->
(( y. y y ) ( z. z)) (( y. y y ) ( z. z))
----> (( z. z ) ( z. z))(( y. y y ) ( z. z))
7/31/2017
49
Example 2
( x. x x)(( y. y y) ( z. z))
Lazy evaluation:
( x. x x )(( y. y y) ( z. z)) ---->
(( y. y y ) ( z. z)) (( y. y y ) ( z. z))
----> (( z. z ) ( z. z))(( y. y y ) ( z. z))
----> ( z. z ) (( y. y y ) ( z. z))
7/31/2017
50
Example 2
( x. x x)(( y. y y) ( z. z))
Lazy evaluation:
( x. x x )(( y. y y) ( z. z)) ---->
(( y. y y ) ( z. z)) (( y. y y ) ( z. z))
----> (( z. z ) ( z. z))(( y. y y ) ( z. z))
----> ( z. z ) (( y. y y ) ( z. z)) ---->
( y. y y ) ( z. z)
7/31/2017
51
Example 2
( x. x x)(( y. y y) ( z. z))
Lazy evaluation:
( x. x x )(( y. y y) ( z. z)) ---->
(( y. y y ) ( z. z) ) (( y. y y ) ( z. z))
----> (( z. z ) ( z. z))(( y. y y ) ( z. z))
----> ( z. z ) (( y. y y ) ( z. z)) ---->
( y. y y ) ( z. z)
7/31/2017
52
Example 2
( x. x x)(( y. y y) ( z. z))
Lazy evaluation:
( x. x x )(( y. y y) ( z. z)) ---->
(( y. y y ) ( z. z) ) (( y. y y ) ( z. z))
----> (( z. z ) ( z. z))(( y. y y ) ( z. z))
----> ( z. z ) (( y. y y ) ( z. z)) ---->
( y. y y ) ( z. z) ~~ z. z
7/31/2017
53
Example 2
( x. x x)(( y. y y) ( z. z))
Eager evaluation:
( x. x x) (( y. y y) ( z. z)) ---->
( x. x x) (( z. z ) ( z. z)) ---->
( x. x x) ( z. z) ---->
( z. z) ( z. z) ----> z. z
7/31/2017
54
© Copyright 2026 Paperzz