End ALLOC.
Local Hint Resolve valid_block_alloc fresh_block_alloc valid_new_block: mem.
Local Hint Resolve valid_access_alloc_other valid_access_alloc_same: mem.
(** ** Properties related to [free]. *)

(* Specifications: *)
Theorem 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 }.
Lemma free_result:
m2 = unchecked_free m1 bf lo hi.
Theorem nextblock_free:
nextblock m2 = nextblock m1.
Theorem valid_block_free_1:
forall b, valid_block m1 b -> valid_block m2 b.
Theorem valid_block_free_2:
forall b, valid_block m2 b -> valid_block m1 b.
Theorem 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 }.
Lemma free_result:
m2 = unchecked_free m1 bf lo hi.
Theorem nextblock_free:
nextblock m2 = nextblock m1.
Theorem valid_block_free_1:
forall b, valid_block m1 b -> valid_block m2 b.
Theorem valid_block_free_2:
forall b, valid_block m2 b -> valid_block m1 b.