Opaque Mem.free.

(* Specifications: *)
Lemma alloc_obs_eq:
forall f m m' lo hi m2 m2' b b'
(Hobs_eq: mem_obs_eq f m m')
(Halloc: Mem.alloc m lo hi = (m2, b))
(Halloc': Mem.alloc m' lo hi = (m2', b')),
exists f',
f' b = Some b' /\
mem_obs_eq f' m2 m2' /\
ren_incr f f' /\
ren_separated f f' m m' /\
(exists p : positive,
Mem.nextblock m2 = (Mem.nextblock m + p)%positive /\
Mem.nextblock m2' = (Mem.nextblock m' + p)%positive) /\
(forall b0 : block,
Mem.valid_block m2' b0 ->
~ Mem.valid_block m' b0 ->
f'
(Z.to_pos
match - Z.pos_sub (Mem.nextblock m') (Mem.nextblock m) with
| 0 => Z.pos b0
| Z.pos y' => Z.pos (b0 + y')
| Z.neg y' => Z.pos_sub b0 y'
end) = Some b0 /\
f
(Z.to_pos
match - Z.pos_sub (Mem.nextblock m') (Mem.nextblock m) with
| 0 => Z.pos b0
| Z.pos y' => Z.pos (b0 + y')
| Z.neg y' => Z.pos_sub b0 y'
end) = None) /\
(Mem.nextblock m = Mem.nextblock m' ->
(forall b1 b3 : block, f b1 = Some b3 -> b1 = b3) ->
forall b1 b0 : block, f' b1 = Some b0 -> b1 = b0).
Lemma valid_pointer_ren:
forall f m m' b1 b2 ofs
(Hmem_obs_eq: mem_obs_eq f m m')
(Hf: f b1 = Some b2),
Mem.valid_pointer m b1 ofs = Mem.valid_pointer m' b2 ofs.
Lemma val_obs_cmpu:
forall f v1 v2 v1' v2' m m' (comp : comparison)
(Hval_obs': val_obs f v2 v2')
(Hval_obs: val_obs f v1 v1')
(Hmem_obs_eq: mem_obs_eq f m m'),
val_obs f (Val.cmpu (Mem.valid_pointer m) comp v1 v2)
(Val.cmpu (Mem.valid_pointer m') comp v1' v2').
Lemma access_drop_1:
forall m b lo hi p m', Mem.drop_perm m b lo hi p = Some m' ->
(forall ofs, lo <= ofs < hi ->
forall k,
access_at m (b, ofs) k = Some Freeable /\ access_at m' (b, ofs) k = Some p).
Lemma access_drop_2:
forall m b lo hi p,
(forall ofs, lo <= ofs < hi -> access_at m (b,ofs) Cur = Some Freeable) ->
{ m' | Mem.drop_perm m b lo hi p = Some m' }.
Lemma access_drop_3:
forall m b lo hi p m', Mem.drop_perm m b lo hi p = Some m' ->
forall b' ofs k, b' <> b \/ ofs < lo \/ hi <= ofs ->
access_at m (b', ofs) k = access_at m' (b',ofs) k.
Lemma storebytes_access:
forall m1 b ofs bytes m2 (STORE: Mem.storebytes m1 b ofs bytes = Some m2),
access_at m1 = access_at m2.
Lemma store_access:
forall chunk m1 b ofs v m2 (STORE: Mem.store chunk m1 b ofs v = Some m2),
access_at m1 = access_at m2.
Lemma perm_order'_dec_fiddle:
forall y x, y = Some x ->
proj_sumbool (Mem.perm_order'_dec y Nonempty) = true.
Lemma access_at_valid_pointer:
forall m b ofs p, access_at m (b,ofs) Cur = Some p ->
Mem.valid_pointer m b ofs = true.