End INITMEM.
Definition init_mem (p: program F V) :=
alloc_globals (globalenv p) Mem.empty p.(prog_defs).

Theorem init_mem_characterization:
forall p b gv m,
find_var_info (globalenv p) b = Some gv ->
init_mem p = Some m ->
Mem.range_perm m b 0 (init_data_list_size gv.(gvar_init)) Cur (perm_globvar gv)
/\ (forall ofs k p, Mem.perm m b ofs k p ->
0 <= ofs < init_data_list_size gv.(gvar_init) /\ perm_order (perm_globvar gv) p)
/\ (gv.(gvar_volatile) = false ->
load_store_init_data (globalenv p) m b 0 gv.(gvar_init))
/\ (gv.(gvar_volatile) = false ->
Mem.loadbytes m b 0 (init_data_list_size gv.(gvar_init)) = Some (bytes_of_init_data_list (globalenv p) gv.(gvar_init))).