15-851 Computation and Deduction  
  Assignment 4 
Hand-in 
 Please hand in a copy of your code electronically (see for instructions).
 
Exercise 5.11 
 Write Elf programs to determine if a Mini-ML expression is free of the
recursion operation fix and at the same time linear,
i.e. every bound variable occurs exactly once.  Since only one branch in
a case statement will be taken during evaluation, a bound variable must
occur exactly once in each branch in a linear expression.
 
  Note: you do not have to program the test whether
a program is affine or relevant as stated in the notes.
 
Exercise 3.18 
 Consider a language extension to support lazy evaluation in
Mini-ML. For this we introduce a new type constructor # , where
#t is the type of suspensions of type t . There should
be a new constructor delay e and a destructor
let delay u = e1 in
e2. The intent is that we substitute an expression for u which
need not be a value.
 
  -  Extend typing, value, and evaluation judgements. 
 
  -  Define a function force which has type  (#a) -> a for a
type variable a. 
 
  -  Prove that force(delay e) evaluates to
v if and only if e evaluates to v according
to your operational semantics. 
 
  -  Represent the new expression constructors in LF. 
 
  -  Represent the new value constructors in LF. 
 
  -  Represent the new evaluation rules in LF. 
 
  -  Extend the proof of type preservation. 
 
  -  Extend the proof of value soundness. 
 
  -  Extend the definition of the value soundness judgement and give a
representation of the new cases in LF. 
 
  -  Another choice of primitives for suspensions are
delay e and
force e. Compare this to the primitives
delay and let delay used above. Do you
see any advantages or disadvantages? 
 
 
 
  [ Home
  | Schedule
  | Assignments
  | Handouts
  | Software
  | Overview
  ]
 
  fp@cs  
  Frank Pfenning
 
 |