(** ** Properties of [drop_perm]. *)

(* Specifications: *)
Axiom nextblock_drop:
forall m b lo hi p m', drop_perm m b lo hi p = Some m' ->
nextblock m' = nextblock m.
Axiom drop_perm_valid_block_1:
forall m b lo hi p m', drop_perm m b lo hi p = Some m' ->
forall b', valid_block m b' -> valid_block m' b'.
Axiom drop_perm_valid_block_2:
forall m b lo hi p m', drop_perm m b lo hi p = Some m' ->
forall b', valid_block m' b' -> valid_block m b'.
Axiom range_perm_drop_1:
forall m b lo hi p m', drop_perm m b lo hi p = Some m' ->
range_perm m b lo hi Cur Freeable.
Axiom range_perm_drop_2:
forall m b lo hi p,
range_perm m b lo hi Cur Freeable -> { m' | drop_perm m b lo hi p = Some m' }.
Axiom perm_drop_1:
forall m b lo hi p m', drop_perm m b lo hi p = Some m' ->
forall ofs k, lo <= ofs < hi -> perm m' b ofs k p.
Axiom perm_drop_2:
forall m b lo hi p m', drop_perm m b lo hi p = Some m' ->
forall ofs k p', lo <= ofs < hi -> perm m' b ofs k p' -> perm_order p p'.
Axiom perm_drop_3:
forall m b lo hi p m', drop_perm m b lo hi p = Some m' ->
forall b' ofs k p', b' <> b \/ ofs < lo \/ hi <= ofs -> perm m b' ofs k p' -> perm m' b' ofs k p'.
Axiom perm_drop_4:
forall m b lo hi p m', drop_perm m b lo hi p = Some m' ->
forall b' ofs k p', perm m' b' ofs k p' -> perm m b' ofs k p'.
Axiom load_drop:
forall m b lo hi p m', drop_perm m b lo hi p = Some m' ->
forall chunk b' ofs,
b' <> b \/ ofs + size_chunk chunk <= lo \/ hi <= ofs \/ perm_order p Readable ->
load chunk m' b' ofs = load chunk m b' ofs.