Definition upto_block (b: block) (w: rmap) : rmap :=  only_blocks (fun b' => plt b' b) w.
Definition beyond_block (b: block) (w: rmap) : rmap := only_blocks (not_dec (fun b' => plt b' b)) w.

(* Specifications: *)
Lemma join_upto_beyond_block:
forall b phi, identity (ghost_of phi) -> join  (upto_block b phi)  (beyond_block b phi) phi.
Lemma split_range:
forall phi base n,
(forall loc, adr_range base n loc ->
match phi @ loc with YES _ _ k _ => isVAL k | _ => True end) ->
noghost phi ->
exists phi1, exists phi2,
join phi1 phi2 phi /\
forall loc, if adr_range_dec base n loc then identity (phi2 @ loc)
else identity (phi1 @ loc).