(** ** Properties of [free]. *)
(** [free] succeeds if and only if the correspond range of addresses has [Freeable] current permission. *)

(* Specifications: *)
Axiom range_perm_free:
forall m1 b lo hi,
range_perm m1 b lo hi Cur Freeable ->
{ m2: mem | free m1 b lo hi = Some m2 }.
Axiom free_range_perm:
forall m1 bf lo hi m2, free m1 bf lo hi = Some m2 ->
range_perm m1 bf lo hi Cur Freeable.
Axiom range_perm_free:
forall m1 b lo hi,
range_perm m1 b lo hi Cur Freeable ->
{ m2: mem | free m1 b lo hi = Some m2 }.
Axiom free_range_perm:
forall m1 bf lo hi m2, free m1 bf lo hi = Some m2 ->
range_perm m1 bf lo hi Cur Freeable.