Require Export Axioms.
Require Export Maps.

(* Specifications: *)
Lemma allocvars_blocks_valid: forall vars E m e m1,
alloc_variables E m vars e m1 ->
forall b, Mem.valid_block m b -> Mem.valid_block m1 b.
Lemma storev_valid_block_1:
forall ch m addr v m',
Mem.storev ch m addr v = Some m' ->
(forall b, Mem.valid_block m b -> Mem.valid_block m' b).
Lemma genv_find_add_global_fresh: forall {F V} (g:Genv.t F V) i i0 v0
(I:i0 <> i),
Genv.find_symbol (Genv.add_global g (i0, v0)) i =
Genv.find_symbol g i.
Lemma genv_find_add_globals_fresh: forall {F V} defs (g:Genv.t F V) i
(G: ~ In i (map fst defs)),
Genv.find_symbol (Genv.add_globals g defs) i =  Genv.find_symbol g i.
Lemma add_globals_find_symbol: forall {F V} (defs : list (ident * globdef F V))
(R: list_norepet (map fst defs)) (g: Genv.t F V) m0 m
(G: Genv.alloc_globals (Genv.add_globals g defs) m0 defs = Some m)
(N: Genv.genv_next g = Mem.nextblock m0)
b (VB: Mem.valid_block m b),
Mem.valid_block m0 b \/
exists id, Genv.find_symbol (Genv.add_globals g defs) id = Some b.