Module LabelsetFacts := FSetFacts.Facts(Labelset).Definition match_prog (p tp: Linear.program) :=
  match_program (fun ctx f tf => tf = transf_fundef f) eq p tp.

(* Specifications: *)
Lemma transf_program_match: forall p, match_prog p (transf_program p).
Lemma symbols_preserved: forall id, Genv.find_symbol tge id = Genv.find_symbol ge id.
Lemma senv_preserved: Senv.equiv ge tge.
Lemma functions_translated: forall v f, Genv.find_funct ge v = Some f -> Genv.find_funct tge v = Some (transf_fundef f).
Lemma function_ptr_translated: forall v f, Genv.find_funct_ptr ge v = Some f -> Genv.find_funct_ptr tge v = Some (transf_fundef f).
Lemma sig_function_translated: forall f, funsig (transf_fundef f) = funsig f.
Lemma find_function_translated: forall ros ls f, find_function ge ros ls = Some f -> find_function tge ros ls = Some (transf_fundef f).