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

(* Specifications: *)
Axiom nextblock_alloc:
forall m1 lo hi m2 b, alloc m1 lo hi = (m2, b) ->
nextblock m2 = Pos.succ (nextblock m1).
Axiom valid_block_alloc:
forall m1 lo hi m2 b, alloc m1 lo hi = (m2, b) ->
forall b', valid_block m1 b' -> valid_block m2 b'.
Axiom fresh_block_alloc:
forall m1 lo hi m2 b, alloc m1 lo hi = (m2, b) ->
~(valid_block m1 b).
Axiom valid_new_block:
forall m1 lo hi m2 b, alloc m1 lo hi = (m2, b) ->
valid_block m2 b.
Axiom valid_block_alloc_inv:
forall m1 lo hi m2 b, alloc m1 lo hi = (m2, b) ->
forall b', valid_block m2 b' -> b' = b \/ valid_block m1 b'.
Axiom nextblock_alloc:
forall m1 lo hi m2 b, alloc m1 lo hi = (m2, b) ->
nextblock m2 = Pos.succ (nextblock m1).
Axiom valid_block_alloc:
forall m1 lo hi m2 b, alloc m1 lo hi = (m2, b) ->
forall b', valid_block m1 b' -> valid_block m2 b'.
Axiom fresh_block_alloc:
forall m1 lo hi m2 b, alloc m1 lo hi = (m2, b) ->
~(valid_block m1 b).
Axiom valid_new_block:
forall m1 lo hi m2 b, alloc m1 lo hi = (m2, b) ->
valid_block m2 b.
Axiom valid_block_alloc_inv:
forall m1 lo hi m2 b, alloc m1 lo hi = (m2, b) ->
forall b', valid_block m2 b' -> b' = b \/ valid_block m1 b'.