PPT

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