Opaque Mem.alloc.

(* Specifications: *)
Lemma AllocContentsUndef1: forall z,
ZMap.get z (Mem.mem_contents m2) !! b = Undef.
Lemma AllocContentsUndef1: forall z,
ZMap.get z (Mem.mem_contents m2) !! b = Undef.
Lemma nextblock_freelist:
forall fbl m m',
Mem.free_list m fbl = Some m' ->
Mem.nextblock m' = Mem.nextblock m.
Lemma perm_freelist:
forall fbl m m' b ofs k p,
Mem.free_list m fbl = Some m' ->
Mem.perm m' b ofs k p ->
Mem.perm m b ofs k p.
Lemma store_freshloc: forall ch m addr v m'
(ST: Mem.storev ch m addr v = Some m'),
freshloc m m' = fun b => false.
Lemma freshloc_alloc: forall m1 lo hi m2 b
(ALLOC: Mem.alloc m1 lo hi = (m2, b)),
freshloc m1 m2 = fun bb => eq_block bb b.
Lemma freshloc_free: forall m sp i n m'
(F: Mem.free m sp i n = Some m'),
freshloc m m' = fun b => false.
Lemma freshloc_free_list: forall m n m'
(F: Mem.free_list m n = Some m'),
freshloc m m' = fun b => false.
(*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'.
Lemma REACH_closed_free: forall m1 b lo hi m2
(F: Mem.free m1 b lo hi = Some m2) X
(RC: REACH_closed m1 X),
REACH_closed m2 X.
Lemma REACH_closed_freelist: forall X l m m'
(FL : Mem.free_list m l = Some m')
(RC : REACH_closed m X),
REACH_closed m' X.