Definition smvalid_tgt (mu : SM_Injection) m2 :=
forall b2, RNG mu b2 -> Memory.Mem.valid_block m2 b2.

(* Specifications: *)
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''.