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.

(*new lemma*)
Lemma free_parallel_inject:
forall j (m1 m2 : mem) (b : block) (lo hi : Z) (m1' : mem) ,
Mem.inject j m1 m2 ->
Mem.free m1 b lo hi = Some m1' ->
forall b2 d (J: j b = Some(b2,d)),
exists m2' : mem, Mem.free m2 b2 (lo+d) (hi+d) = Some m2' /\
Mem.inject j m1' m2'.