%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%% Definition 3 + 6 + Figure 5 : Var-validity of cps terms %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% stack : type. dot : stack. , : stack -> ctriv -> stack. %infix left 10 , . vvalR : croot -> type. %name vvalR VVR. vvalE : stack -> cexp -> type. vvalT : stack -> ctriv -> stack -> type. vvalC : stack -> ccont -> type. vvalK : stack -> (ctriv -> cexp) -> type. %mode vvalR +R. %mode vvalE +Xi +E. %mode vvalT +Xi +T -Xi'. %mode vvalC +Xi +C. %mode vvalK +Xi +K. vval_klam : vvalR (klam E) <- ({k:ccont}vvalC dot k -> vvalE dot (E k)). vval_capp : vvalE Xi (capp T0 T1 C) <- vvalT Xi T1 Xi1 <- vvalT Xi1 T0 Xi0 <- vvalC Xi0 C. vval_cret : vvalE Xi (cret C T) <- vvalT Xi T Xi' <- vvalC Xi' C. vval_xlam : vvalT Xi (xlam R) Xi <- ({x:ctriv}({Xi':stack}vvalT Xi' x Xi') -> vvalR (R x)). vval_vlam : vvalC Xi (vlam E) <- ({v:ctriv}({Xi':stack}vvalT (Xi' , v) v Xi') -> vvalE (Xi , v) (E v)). vval_kappa : vvalK Xi Kappa <- ({v:ctriv}({Xi':stack}vvalT (Xi' , v) v Xi') -> vvalE (Xi , v) (Kappa v)) <- ({t:ctriv}({Xi':stack}vvalT Xi' t Xi') -> vvalE Xi (Kappa t)). %name vvalE VVE. %name vvalT VVT. %name vvalC VVC. %name vvalK VVK. %terminates (R E T C) (vvalR R) (vvalE _ E) (vvalT _ T _) (vvalC _ C). %terminates K (vvalK _ K).