Definition alloc_left_sm (mu: SM_Injection) b1 b2 delta: SM_Injection :=
  Build_SM_Injection (fun b => eq_block b b1 || locBlocksSrc mu b)
                     (locBlocksTgt mu) (*b2 is already in locBlocksTgt!*)
                     (pubBlocksSrc mu) (pubBlocksTgt mu)
                     (fun b => if eq_block b b1 then Some(b2, delta)
                               else local_of mu b)
                     (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.