Definition MATCH (d:CL_core) mu c1 m1 c2 m2:Prop :=
  match_states (restrict (as_inj mu) (vis mu)) c1 m1 c2 m2 /\
  REACH_closed m1 (vis mu) /\
  meminj_preserves_globals ge (as_inj mu) /\
  globalfunction_ptr_inject (as_inj mu) /\
  (forall b, isGlobalBlock ge b = true -> frgnBlocksSrc mu b = true) /\
  sm_valid mu m1 m2 /\ SM_wd mu /\ Mem.inject (as_inj mu) m1 m2.

Lemma restrict_vis_foreign: forall mu (WD: SM_wd mu) b1 b2 delta (R: restrict (as_inj mu) (vis mu) b1 = Some (b2, delta)) (LT: locBlocksTgt mu b2 = false), foreign_of mu b1 = Some (b2, delta).