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

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_check1: forall mu (WD: SM_wd mu) m1 m2 (SMValMu: sm_valid mu m1 m2) (*selected standard assumptions:*) (MemInjMu: Mem.inject (as_inj mu) m1 m2) vals1 vals2 (ValInjMu: Forall2 (val_inject (as_inj mu)) vals1 vals2) pubSrc' (pubSrcHyp: pubSrc' = fun b => andb (locBlocksSrc mu b) (REACH m1 (exportedSrc mu vals1) b)) pubTgt' (pubTgtHyp: pubTgt' = fun b => andb (locBlocksTgt mu b) (REACH m2 (exportedTgt mu vals2) b)) nu (NuHyp: nu = replace_locals mu pubSrc' pubTgt'), SM_wd nu /\ sm_valid nu m1 m2 /\ Mem.inject (as_inj nu) m1 m2 /\ Forall2 (val_inject (as_inj nu)) vals1 vals2.