(** Effect of [alloc] on access validity. *)

(* Specifications: *)
Axiom valid_access_alloc_other:
forall m1 lo hi m2 b, alloc m1 lo hi = (m2, b) ->
forall chunk b' ofs p,
valid_access m1 chunk b' ofs p ->
valid_access m2 chunk b' ofs p.
Axiom valid_access_alloc_same:
forall m1 lo hi m2 b, alloc m1 lo hi = (m2, b) ->
forall chunk ofs,
lo <= ofs -> ofs + size_chunk chunk <= hi -> (align_chunk chunk | ofs) ->
valid_access m2 chunk b ofs Freeable.
Axiom valid_access_alloc_inv:
forall m1 lo hi m2 b, alloc m1 lo hi = (m2, b) ->
forall chunk b' ofs p,
valid_access m2 chunk b' ofs p ->
if eq_block b' b
then lo <= ofs /\ ofs + size_chunk chunk <= hi /\ (align_chunk chunk | ofs)
else valid_access m1 chunk b' ofs p.
Axiom valid_access_alloc_other:
forall m1 lo hi m2 b, alloc m1 lo hi = (m2, b) ->
forall chunk b' ofs p,
valid_access m1 chunk b' ofs p ->
valid_access m2 chunk b' ofs p.
Axiom valid_access_alloc_same:
forall m1 lo hi m2 b, alloc m1 lo hi = (m2, b) ->
forall chunk ofs,
lo <= ofs -> ofs + size_chunk chunk <= hi -> (align_chunk chunk | ofs) ->
valid_access m2 chunk b ofs Freeable.
Axiom valid_access_alloc_inv:
forall m1 lo hi m2 b, alloc m1 lo hi = (m2, b) ->
forall chunk b' ofs p,
valid_access m2 chunk b' ofs p ->
if eq_block b' b
then lo <= ofs /\ ofs + size_chunk chunk <= hi /\ (align_chunk chunk | ofs)
else valid_access m1 chunk b' ofs p.