(***********************************************************************)

Goal forall mu (WD: SM_wd mu) m1 m2 m2'
(U: Mem.unchanged_on (local_out_of_reach mu m1) m2 m2'),
Mem.unchanged_on (fun b ofs => pubBlocksTgt mu b = true /\
                  loc_out_of_reach (pub_of mu) m1 b ofs) m2 m2'.Goal forall mu (WD: SM_wd mu) m1 m2 m2'
(U: Mem.unchanged_on (local_out_of_reach mu m1) m2 m2'),
Mem.unchanged_on (fun b ofs => locBlocksTgt mu b = true /\
                    pubBlocksTgt mu b = false) m2 m2'.Goal forall mu m1 m2 m2' (WD:SM_wd mu)
  (U1: Mem.unchanged_on (fun b ofs => locBlocksTgt mu b = true /\
                    pubBlocksTgt mu b = false) m2 m2')
  (U2: Mem.unchanged_on (fun b ofs => pubBlocksTgt mu b = true /\
                  loc_out_of_reach (pub_of mu) m1 b ofs) m2 m2'),
Mem.unchanged_on (local_out_of_reach mu m1) m2 m2'.

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'.