(* Lemma alloc_global_inflate_identity_iff: forall gev m0 i f m G n loc, Genv.alloc_global gev m0 (i, Gfun f) = Some m -> (identity (inflate_initial_mem m0 (initial_core gev G n) @ loc) <-> identity (inflate_initial_mem m (initial_core gev G n) @ loc)). *)

(* Specifications: *)
Lemma alloc_global_identity_lemma3:
forall gev m0 i f m G n loc,
Genv.alloc_global gev m0 (i, Gfun f) = Some m ->
identity (inflate_initial_mem m (initial_core gev G n) @ loc) ->
identity (inflate_initial_mem m0 (initial_core gev G n) @ loc).
Lemma identity_inflate_at_Gfun:
forall n i f gev m G0 G loc m0,
list_norepet (map fst (G0 ++ G)) ->
Genv.find_symbol gev i = Some (nextblock m0) ->
Genv.alloc_global gev m0 (i, Gfun f) = Some m ->
In i (map fst G) ->
(identity (inflate_initial_mem m0 (initial_core gev (G0 ++ G) n) @ loc) <->
identity (inflate_initial_mem m (initial_core gev (G0 ++ G) n) @ loc)).
Lemma global_initializers:
forall (prog: program) G m n rho,
list_norepet (prog_defs_names prog) ->
all_initializers_aligned prog ->
match_fdecs (prog_funct prog) G ->
ge_of rho = filter_genv (globalenv prog) ->
Genv.init_mem prog = Some m ->
app_pred (globvars2pred (globals_of_env rho) (prog_vars prog) rho)
(inflate_initial_mem m (initial_core (Genv.globalenv prog) G n)).