(* Blocks that are not mapped by f are set to empty permission. This makes the invariant preservation easier. *)
Definition projectMap (f : memren) (pmap : access_map) : access_map :=
(pmap#1, Maps.PTree.fold (fun acc b bperm =>
match f b with
| Some b' =>
Maps.PTree.set b' bperm acc
| None =>
acc end)
pmap.2 (Maps.PTree.empty _)).

Lemma memval_obs_eq_incr:
forall (f f': memren) mv1 mv2
(Hincr: ren_incr f f')
(Hobs_eq: memval_obs_eq f mv1 mv2),
memval_obs_eq f' mv1 mv2.