Definition all_initializers_aligned (prog: program) :=
forallb (fun idv => andb (initializers_aligned 0 (gvar_init (snd idv)))
(Zlt_bool (init_data_list_size (gvar_init (snd idv))) Ptrofs.modulus))
(prog_vars prog) = true.

(* Specifications: *)
Lemma forallb_rev: forall {A} f (vl: list A), forallb f (rev vl) = forallb f vl.
Lemma store_init_data_list_access:
forall  {F V} (ge: Genv.t F V) m b z dl m',
Genv.store_init_data_list ge m b z dl = Some m' ->
access_at m = access_at m'.
Lemma rev_prog_funct': forall {F V} vl, rev (@prog_funct' F V vl) = prog_funct' (rev vl).
Lemma alloc_global_beyond2:
forall {F V} (ge: Genv.t F V) m iv m', Genv.alloc_global ge m iv = Some m' ->
forall loc, (fst loc > nextblock m)%positive ->
access_at m' loc Cur = None.
Lemma alloc_global_access:
forall {F V} (ge: Genv.t F V) m i v m', Genv.alloc_global ge m (i, Gvar v) = Some m' ->
forall z, access_at m' (nextblock m, z) Cur =
if range_dec 0 z (init_data_list_size (gvar_init v))
then Some (Genv.perm_globvar v) else None.
Lemma alloc_global_inflate_same:
forall n i v gev m G m0,
Genv.alloc_global gev m0 (i, Gvar v) = Some m ->
(forall z : Z, initial_core gev G n @ (nextblock m0, z) = NO Share.bot bot_unreadable) ->
inflate_initial_mem m0 (initial_core gev G n) =
upto_block (nextblock m0) (inflate_initial_mem m (initial_core gev G n)).
Lemma find_id_rev: forall i G,
list_norepet (map fst G) -> find_id i (rev G) = find_id i G.