Ltac TransfInstr :=
match goal with
| H1: (PTree.get ?pc (fn_code ?f) = Some ?instr),
H2: (analyze ?rm ?f)#?pc = VA.State ?ae ?am |- _ =>
generalize (transf_instr_at rm _ _ _ H1); unfold transf_instr; rewrite H2
end.
(** The proof of simulation proceeds by case analysis on the transition taken in the source code. *)

Lemma transf_initial_states:
forall st1, initial_state prog st1 ->
exists n, exists st2, initial_state tprog st2 /\ match_states n st1 st2.