(** Matching between states *)
Inductive match_states: Csem.state -> state -> Prop :=
| match_exprstates: forall f r k e m tf sl tk le dest a tmps,
tr_function f tf ->
tr_top tge e le m dest r sl a tmps ->
match_cont_exp dest a k tk ->
match_states (Csem.ExprState f r k e m)
(State tf Sskip (Kseqlist sl tk) e le m)
| match_regularstates: forall f s k e m tf ts tk le,
tr_function f tf ->
tr_stmt s ts ->
match_cont k tk ->
match_states (Csem.State f s k e m)
(State tf ts tk e le m)
| match_callstates: forall fd args k m tfd tk,
tr_fundef fd tfd ->
match_cont k tk ->
match_states (Csem.Callstate fd args k m)
(Callstate tfd args tk m)
| match_returnstates: forall res k m tk,
match_cont k tk ->
match_states (Csem.Returnstate res k m)
(Returnstate res tk m)
| match_stuckstate: forall S,
match_states Csem.Stuckstate S.
(** Additional results on translation of statements *)

(* Specifications: *)
Lemma tr_select_switch:
forall n ls tls,
tr_lblstmts ls tls ->
tr_lblstmts (Csem.select_switch n ls) (select_switch n tls).
Lemma tr_seq_of_labeled_statement:
forall ls tls,
tr_lblstmts ls tls ->
tr_stmt (Csem.seq_of_labeled_statement ls) (seq_of_labeled_statement tls).