Section ALLOC.
Variable m1: mem.
Variables lo hi: Z.
Variable m2: mem.
Variable b: Values.block.
Hypothesis ALLOC: Mem.alloc m1 lo hi = (m2, b).
Transparent Mem.alloc.
Opaque Mem.alloc.
Definition alloc_right_sm (mu: SM_Injection) sp: SM_Injection :=
Build_SM_Injection (locBlocksSrc mu)
(fun b => eq_block b sp || locBlocksTgt mu b)
(pubBlocksSrc mu) (pubBlocksTgt mu)
(local_of mu)
(extBlocksSrc mu) (extBlocksTgt mu)
(frgnBlocksSrc mu) (frgnBlocksTgt mu) (extern_of mu).

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.