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 REACH_closed_alloc_left_sm: forall m lo hi sp m' (ALLOC : Mem.alloc m lo hi = (m', sp)) mu (RC: REACH_closed m (vis mu)) b' delta, REACH_closed m' (vis (alloc_left_sm mu sp b' delta)).