Definition restrPermMap p' m (Hlt: permMapLt p' (getMaxPerm m)) : mem.

(* Specifications: *)
Lemma restrPermMap_irr: forall p1 p2 m1 m2 (P1: permMapLt p1 (getMaxPerm m1)) (P2: permMapLt p2 (getMaxPerm m2)), p1 = p2 -> m1 = m2 -> restrPermMap P1 = restrPermMap P2.
Lemma restrPermMap_nextblock : forall p' m (Hlt: permMapLt p' (getMaxPerm m)), Mem.nextblock (restrPermMap Hlt) = Mem.nextblock m.
Lemma restrPermMap_valid : forall p' m (Hlt: permMapLt p' (getMaxPerm m)) b, Mem.valid_block (restrPermMap Hlt) b <-> Mem.valid_block m b.
Lemma restrPermMap_contents : forall p' m (Hlt: permMapLt p' (getMaxPerm m)), contents_at (restrPermMap Hlt) = contents_at m.
Lemma restrPermMap_max : forall p' m (Hlt: permMapLt p' (getMaxPerm m)), max_access_at (restrPermMap Hlt) = max_access_at m.
Lemma restrPermMap_irr' : forall p' p'' m (Hlt : permMapLt p' (getMaxPerm m)) (Hlt': permMapLt p'' (getMaxPerm m)) (Heq_new: p' = p''), restrPermMap Hlt = restrPermMap Hlt'.
Lemma restrPermMap_disjoint_inv: forall (mi mj m : mem) (pi pj : access_map) (Hltj: permMapLt pj (getMaxPerm m)) (Hlti: permMapLt pi (getMaxPerm m)) (Hdisjoint: permMapsDisjoint pi pj) (Hrestrj: restrPermMap Hltj = mj) (Hrestri: restrPermMap Hlti = mi), permMapsDisjoint (getCurPerm mi) (getCurPerm mj).
Lemma restrPermMap_correct : forall p' m (Hlt: permMapLt p' (getMaxPerm m)) b ofs, permission_at (restrPermMap Hlt) b ofs Max = Maps.PMap.get b (getMaxPerm m) ofs /\ permission_at (restrPermMap Hlt) b ofs Cur = Maps.PMap.get b p' ofs.