(*in extern_incr steps, sm_inject_separated_intern_MYB is not needed/trivial, since locBlocksSrc mu b = locBlocksSrc mu' b and locBlocksTgt mu b = locBlocksTgt mu' b*)
Definition sm_valid (mu : SM_Injection) (m1 m2: mem) :=
(forall b1, DOM mu b1 -> Mem.valid_block m1 b1)
/\ (forall b2, RNG mu b2 -> Mem.valid_block m2 b2).

(* Specifications: *)
Lemma intern_incr_refl: forall mu, intern_incr mu mu.
Definition smvalid_src (mu : SM_Injection) m1 :=
forall b1, DOM mu b1 -> Memory.Mem.valid_block m1 b1.
Lemma intern_incr_refl: forall mu, intern_incr mu mu.
Definition smvalid_src (mu : SM_Injection) m1 :=
forall b1, DOM mu b1 -> Memory.Mem.valid_block m1 b1.
Lemma sm_valid_smvalid_src mu m1 m2 :
sm_valid mu m1 m2 -> smvalid_src mu m1.
Lemma intern_incr_local: forall mu mu' (INC: intern_incr mu mu'),
inject_incr (local_of mu) (local_of mu').
Lemma extern_incr_trans: forall mu mu' mu''
(Inc: extern_incr mu mu') (Inc': extern_incr mu' mu''),
extern_incr mu mu''.
Lemma sm_inject_separated_same_sminj: forall mu m m',
sm_inject_separated mu mu m m'.
Lemma intern_incr_as_inj: forall mu mu'
(INC: intern_incr mu mu') (WD': SM_wd mu'),
inject_incr (as_inj mu) (as_inj mu').
Lemma extern_incr_as_inj: forall mu mu'
(INC: extern_incr mu mu') (WD': SM_wd mu'),
inject_incr (as_inj mu) (as_inj mu').
Lemma inject_separated_intern_incr_fwd:
forall mu mu' m1 m2 mu'' m2'
(SEP: sm_inject_separated mu mu' m1 m2)
(SEP': sm_inject_separated mu' mu'' m1 m2')
(INC: intern_incr mu mu') (INC': intern_incr mu' mu'')
(FWD: mem_forward m2 m2')
(WD': SM_wd mu') (WD'': SM_wd mu''),
sm_inject_separated mu mu'' m1 m2.
Lemma intern_separated_incr_fwd2:
forall mu0 mu mu' m10 m20 m1 m2,
intern_incr mu mu' ->
sm_inject_separated mu mu' m1 m2 ->
intern_incr mu0 mu ->
mem_forward m10 m1 ->
sm_inject_separated mu0 mu m10 m20 ->
mem_forward m20 m2 ->
SM_wd mu' ->
sm_inject_separated mu0 mu' m10 m20.
Lemma sm_locally_allocated_trans: forall mu mu' mu'' m2 m3 m2' m3' m2'' m3''
(LocAlloc23 : sm_locally_allocated mu mu' m2 m3 m2'' m3')
(LocAlloc23' : sm_locally_allocated mu' mu'' m2'' m3' m2' m3'')
(Fwd2 : mem_forward m2 m2'')
(Fwd2' : mem_forward m2'' m2')
(Fwd3 : mem_forward m3 m3')
(Fwd3' : mem_forward m3' m3''),
sm_locally_allocated mu mu'' m2 m3 m2' m3''.