(*selected standard assumptions:*)

(* Specifications: *)
Lemma eff_after_check2:
forall nu' ret1 m1' m2' ret2
(MemInjNu': Mem.inject (as_inj nu') m1' m2')
(RValInjNu': val_inject (as_inj nu') ret1 ret2)
frgnSrc' (frgnSrcHyp: frgnSrc' = fun b => andb (DomSrc nu' b)
(andb (negb (locBlocksSrc nu' b))
(REACH m1' (exportedSrc nu' (ret1::nil)) b)))
frgnTgt' (frgnTgtHyp: frgnTgt' = fun b => andb (DomTgt nu' b)
(andb (negb (locBlocksTgt nu' b))
(REACH m2' (exportedTgt nu' (ret2::nil)) b)))
mu' (Mu'Hyp: mu' = replace_externs nu' frgnSrc' frgnTgt')
(WD: SM_wd nu') (SMValid: sm_valid nu' m1' m2'),
SM_wd mu' /\ sm_valid mu' m1' m2'.
Lemma eff_after_check3:
forall nu' ret1 m1' m2' ret2
(MemInjNu': Mem.inject (as_inj nu') m1' m2')
(RValInjNu': val_inject (as_inj nu') ret1 ret2)
frgnSrc' (frgnSrcHyp: frgnSrc' = fun b => andb (DomSrc nu' b)
(andb (negb (locBlocksSrc nu' b))
(REACH m1' (exportedSrc nu' (ret1::nil)) b)))
frgnTgt' (frgnTgtHyp: frgnTgt' = fun b => andb (DomTgt nu' b)
(andb (negb (locBlocksTgt nu' b))
(REACH m2' (exportedTgt nu' (ret2::nil)) b)))
mu' (Mu'Hyp: mu' = replace_externs nu' frgnSrc' frgnTgt'),
Mem.inject (as_inj mu') m1' m2' /\ val_inject (as_inj mu') ret1 ret2.
Lemma eff_after_check5a:
forall mu pubSrc' pubTgt' nu
(NuHyp: nu = replace_locals mu pubSrc' pubTgt')
kappa m1 m2
(SEP: sm_inject_separated nu kappa m1 m2),
sm_inject_separated mu kappa m1 m2.
Lemma eff_after_check5b:
forall nu' mu' frgnSrc' frgnTgt'
(Mu'Hyp: mu' = replace_externs nu' frgnSrc' frgnTgt')
kappa m1 m2 (SEP: sm_inject_separated kappa nu' m1 m2),
sm_inject_separated kappa mu' m1 m2.
Lemma eff_after_check5:
forall mu pubSrc' pubTgt' nu
(NuHyp: nu = replace_locals mu pubSrc' pubTgt')
nu' mu' frgnSrc' frgnTgt'
(Mu'Hyp: mu' = replace_externs nu' frgnSrc' frgnTgt')
m1 m2 (SEP: sm_inject_separated nu nu' m1 m2),
sm_inject_separated mu mu' m1 m2.
Lemma eff_after_check5_explicitProof:
forall mu pubSrc' pubTgt' nu
(NuHyp: nu = replace_locals mu pubSrc' pubTgt')
nu' mu' frgnSrc' frgnTgt'
(Mu'Hyp: mu' = replace_externs nu' frgnSrc' frgnTgt')
m1 m2 (SEP: sm_inject_separated nu nu' m1 m2),
sm_inject_separated mu mu' m1 m2.