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 freelist_right_inject: forall j m1 l m2 m2'
(F:Mem.free_list m2 l = Some m2')
(Inj : Mem.inject j m1 m2)
(Hyp: forall b2 lo2 hi2 (L:In ((b2,lo2),hi2) l)
b1 delta ofs k p
(J:j b1 = Some (b2, delta))
(P: Mem.perm m1 b1 ofs k p)
(OFS: lo2 <= ofs + delta < hi2),
False),
Mem.inject j m1 m2'.