Section PRESERVATION.
Variable prog: Cminor.program.
Let ge := Genv.globalenv prog.
Variable hf: helper_functions.
Let tprog := transform_program (sel_fundef hf ge) prog.
Let tge := Genv.globalenv tprog.
Hypothesis HELPERS: i64_helpers_correct tge hf.
Definition globalfunction_ptr_inject (j:meminj):=
forall b f, Genv.find_funct_ptr ge b = Some f ->
j b = Some(b,0) /\ isGlobalBlock ge b = true.
(*From Cminorgenproof*)
Remark val_inject_function_pointer:
forall v fd j tv,
Genv.find_funct ge v = Some fd ->
globalfunction_ptr_inject j ->
val_inject j v tv ->
tv = v.
(* Lemma functions_translated: forall (v v': val) (f: Cminor.fundef), Genv.find_funct ge v = Some f -> Val.lessdef v v' -> Genv.find_funct tge v' = Some (sel_fundef hf ge f). *)

Lemma functions_translated:
forall (v v': val) (f: Cminor.fundef) j,
Genv.find_funct ge v = Some f ->
val_inject j v v' ->
globalfunction_ptr_inject j ->
Genv.find_funct tge v' = Some (sel_fundef hf ge f).