(** The current permission is always less than or equal to the maximal permission. *)

(* Specifications: *)
Axiom perm_cur_max:
forall m b ofs p, perm m b ofs Cur p -> perm m b ofs Max p.
Axiom perm_cur:
forall m b ofs k p, perm m b ofs Cur p -> perm m b ofs k p.
Axiom perm_max:
forall m b ofs k p, perm m b ofs k p -> perm m b ofs Max p.
(** Having a (nonempty) permission implies that the block is valid. In other words, invalid blocks, not yet allocated, are all empty. *)
Axiom perm_valid_block:
forall m b ofs k p, perm m b ofs k p -> valid_block m b.
(* Unused? (** The [Mem.perm] predicate is decidable. *)
Axiom perm_dec:
forall m b ofs k p, {perm m b ofs k p} + {~ perm m b ofs k p}.
Axiom perm_cur_max:
forall m b ofs p, perm m b ofs Cur p -> perm m b ofs Max p.
Axiom perm_cur:
forall m b ofs k p, perm m b ofs Cur p -> perm m b ofs k p.
Axiom perm_max:
forall m b ofs k p, perm m b ofs k p -> perm m b ofs Max p.
(** Having a (nonempty) permission implies that the block is valid. In other words, invalid blocks, not yet allocated, are all empty. *)
Axiom perm_valid_block:
forall m b ofs k p, perm m b ofs k p -> valid_block m b.
(* Unused? (** The [Mem.perm] predicate is decidable. *)
Axiom perm_dec:
forall m b ofs k p, {perm m b ofs k p} + {~ perm m b ofs k p}.