%%% Computations of Continuation Machine %%% Author: Frank Pfenning %%% Single Step Transitions => : state -> state -> type. %name => C. %infix none 6 =>. %mode => +S -S'. % Natural Numbers st_z : K # (ev z) => K # (return z). st_s : K # (ev (s E')) => (K ; [x'] return (s x')) # (ev E'). st_case : K # (ev (case E1 E2 E3)) => (K ; [x1] case1 x1 E2 E3) # (ev E1). st_case1_z : K # (case1 (z) E2 E3) => K # (ev E2). st_case1_s : K # (case1 (s V1') E2 E3) => K # (ev (E3 V1')). % Pairs st_pair : K # (ev (pair E1 E2)) => (K ; [x1] pair1 x1 E2) # (ev E1). st_pair1 : K # (pair1 V1 E2) => (K ; [x2] return (pair V1 x2)) # (ev E2). st_fst : K # (ev (fst E')) => (K ; [x'] fst1 x') # (ev E'). st_fst1 : K # (fst1 (pair V1 V2)) => K # (return V1). st_snd : K # (ev (snd E')) => (K ; [x'] snd1 x') # (ev E'). st_snd1 : K # (snd1 (pair V1 V2)) => K # (return V2). % Functions st_lam : K # (ev (lam E')) => K # (return (lam E')). st_app : K # (ev (app E1 E2)) => (K ; [x1] app1 x1 E2) # (ev E1). st_app1 : K # (app1 V1 E2) => (K ; [x2] app2 V1 x2) # (ev E2). st_app2 : K # (app2 (lam E1') V2) => K # (ev (E1' V2)). % Definitions st_letv : K # (ev (letv E1 E2)) => (K ; [x1] ev (E2 x1)) # (ev E1). st_letn : K # (ev (letn E1 E2)) => K # (ev (E2 E1)). % Recursion st_fix : K # (ev (fix E')) => K # (ev (E' (fix E'))). % Return Instructions st_return : (K ; [x] I x) # (return V) => K # (I V). st_init : (init) # (return V) => (answer V). %terminates {} (=> S S'). %%% Multi-Step Computation =>* : state -> state -> type. %name =>* C*. %infix none 5 =>*. %mode =>* +S -S'. stop : S =>* S. << : S =>* S'' <- S => S' <- S' =>* S''. %infix left 5 <<. % Because of evaluation order, computation sequences are displayed % in reverse, using "<<" as a left-associative infix operator. %%% Full Evaluation ceval : exp -> exp -> type. %name ceval CE. %mode ceval +E -V. cev : ceval E V <- (init) # (ev E) =>* (answer V).