(** Forward simulation for statements. *)

(* Specifications: *)
Lemma tr_top_val_for_val_inv:
forall e le m v ty sl a tmps,
tr_top tge e le m For_val (Csyntax.Eval v ty) sl a tmps ->
sl = nil /\ typeof a = ty /\ eval_expr tge e le m a v.
Lemma alloc_variables_preserved:
forall e m params e' m',
Csem.alloc_variables ge e m params e' m' ->
alloc_variables tge e m params e' m'.
Lemma bind_parameters_preserved:
forall e m params args m',
Csem.bind_parameters ge e m params args m' ->
bind_parameters tge e m params args m'.
Lemma blocks_of_env_preserved:
forall e, blocks_of_env tge e = Csem.blocks_of_env ge e.
Lemma sstep_simulation:
forall S1 t S2, Csem.sstep ge S1 t S2 ->
forall S1' (MS: match_states S1 S1'),
exists S2',
(plus step1 tge S1' t S2' \/
(star step1 tge S1' t S2' /\ measure S2 < measure S1)%nat)
/\ match_states S2 S2'.