Definition memren := block -> option block.Definition ren_incr f1 f2 :=
    forall (b b' : block),
      f1 b = Some b' -> f2 b = Some b'.Definition ren_separated (f f' : memren) m1 m2 :=
    forall (b1 b2 : block),
      f b1 = None ->
      f' b1 = Some b2 ->
      ~ Mem.valid_block m1 b1 /\ ~ Mem.valid_block m2 b2.Definition ren_domain_incr (f1 f2: memren) :=
    forall b,
      f1 b -> f2 b.(** Defining the domain of a renaming with respect to a memory*)
  Definition domain_memren (f: memren) m :=
    forall b, Mem.valid_block m b <-> isSome (f b).

(* Specifications: *)
Lemma restrPermMap_domain: forall f m p (Hlt: permMapLt p (getMaxPerm m)), domain_memren f m <-> domain_memren f (restrPermMap Hlt).
Lemma domain_memren_incr: forall f f' f'' m, domain_memren f' m -> domain_memren f'' m -> ren_domain_incr f f' <-> ren_domain_incr f f''.
Lemma domain_memren_trans: forall f f' m m', domain_memren f m -> domain_memren f m' -> domain_memren f' m' -> domain_memren f' m.
Lemma ren_incr_domain_incr: forall f f', ren_incr f f' -> ren_domain_incr f f'.
Lemma ren_domain_incr_refl: forall f, ren_domain_incr f f.
Lemma ren_domain_incr_trans: forall f f' f'', ren_domain_incr f f' -> ren_domain_incr f' f'' -> ren_domain_incr f f''.
Lemma ren_incr_trans: forall f f' f'', ren_incr f f' -> ren_incr f' f'' -> ren_incr f f''.
Lemma ren_incr_refl: forall f, ren_incr f f.
Lemma ren_separated_refl: forall f m m', ren_separated f f m m'.