(*an inject_separated-like property wrt DOM/RNG instead of
  wrt validity in suitable memories*)
Definition sm_inject_separated (mu mu' : SM_Injection) (m1 m2:mem):Prop :=
  (forall b1 b2 d, as_inj mu b1 = None -> as_inj mu' b1 = Some(b2,d) ->
                   (DomSrc mu b1 = false /\ DomTgt mu b2 = false)) /\
  (forall b1, DomSrc mu b1 = false -> DomSrc mu' b1 = true -> ~Mem.valid_block m1 b1) /\
  (forall b2, DomTgt mu b2 = false -> DomTgt mu' b2 = true -> ~Mem.valid_block m2 b2).

(* Specifications: *)
Lemma sm_inject_separated_mem: forall mu mu' m1 m2 (SEP: sm_inject_separated mu mu' m1 m2) (WD': SM_wd mu'), inject_separated (as_inj mu) (as_inj mu') m1 m2.
Lemma sm_inject_separated_asinj_same: forall mu nu m1 m2 (SEP: sm_inject_separated mu nu m1 m2) nu' (Hnu: as_inj nu = as_inj nu') (HSrc: DomSrc nu = DomSrc nu') (HTgt: DomTgt nu = DomTgt nu'), sm_inject_separated mu nu' m1 m2.
Lemma sm_inject_separated_mem: forall mu mu' m1 m2 (SEP: sm_inject_separated mu mu' m1 m2) (WD': SM_wd mu'), inject_separated (as_inj mu) (as_inj mu') m1 m2.
Lemma sm_inject_separated_asinj_same: forall mu nu m1 m2 (SEP: sm_inject_separated mu nu m1 m2) nu' (Hnu: as_inj nu = as_inj nu') (HSrc: DomSrc nu = DomSrc nu') (HTgt: DomTgt nu = DomTgt nu'), sm_inject_separated mu nu' m1 m2.