(*The blocks explicitly exported via call arguments, plus the already shared blocks*)
Definition exportedSrc mu vals b := orb (getBlocks vals b) (sharedSrc mu b).
Definition exportedTgt mu vals b := orb (getBlocks vals b) (sharedTgt mu b).

(*The following six or so results are key lemmas about REACH - they say that blocks exported in SRC are injected, to blocks exported by TGT, preserving the locBlocks-structure, ie distinction betwene public and foreign*)
Lemma REACH_as_inj_REACH: forall mu (WD: SM_wd mu) m1 m2 vals1 vals2
(MemInjMu : Mem.inject (as_inj mu) m1 m2)
(ValInjMu : Forall2 (val_inject (as_inj mu)) vals1 vals2) b1
(R : REACH m1 (exportedSrc mu vals1) b1 = true),
exists b2 d, as_inj mu b1 = Some (b2, d) /\
REACH m2 (exportedTgt mu vals2) b2 = true.