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 find_id_rev: forall i G, list_norepet (map fst G) -> find_id i (rev G) = find_id i G.