%%% Lemmas about values.
%%% Author: Frank Pfenning

  %%% Values correspond to value expressions.
  vtrans_val : vtrans W E -> value E -> type.

  vtrv_z     : vtrans_val (vtr_z) (val_z).
  vtrv_s     : vtrans_val (vtr_s U1) (val_s P1)
		<- vtrans_val U1 P1.

  vtrv_pair  : vtrans_val (vtr_pair U2 U1) (val_pair P2 P1)
	          <- vtrans_val U1 P1
		  <- vtrans_val U2 P2.

  vtrv_lam   : vtrans_val (vtr_lam U1) (val_lam).

%mode vtrans_val +U -P.
%worlds () (vtrans_val U P).
%covers vtrans_val +U -P.

  %%% Values evaluate only to themselves.
  val_eval  : value E -> eval E E -> type.

  vev_z     : val_eval (val_z) (ev_z).
  vev_s	    : val_eval (val_s P1) (ev_s D1)
	       <- val_eval P1 D1.

  vev_pair  : val_eval (val_pair P2 P1) (ev_pair D2 D1)
	         <- val_eval P1 D1
		 <- val_eval P2 D2.

  vev_lam   : val_eval (val_lam) (ev_lam).

%mode val_eval +P -D.
%worlds () (val_eval P D).
%covers val_eval +P -D.
