Definition mkinitial_SM (mu: SM_Injection) frgnS frgnT :=
  match mu with
  Build_SM_Injection locBSrc locBTgt pSrc pTgt local extBSrc extBTgt fSrc fTgt extern =>
  Build_SM_Injection (fun b => false) (fun b => false) (fun b => false) (fun b => false) (fun b => None)
                     (DomSrc mu) (DomTgt mu) frgnS frgnT (as_inj mu)
  end.

Lemma mkinitial_SM_ok: forall {F1 V1 F2 V2:Type} (g1: Genv.t F1 V1) (g2: Genv.t F2 V2) (G:genvs_domain_eq g1 g2) mu (WD: SM_wd mu) (PG: meminj_preserves_globals g1 (as_inj mu)) vals1 vals2 (VALS: Forall2 (val_inject (as_inj mu)) vals1 vals2) m1 m2 (SMV: sm_valid mu m1 m2) (INJ: Mem.inject (as_inj mu) m1 m2) (RchTgt: forall b, REACH m2 (fun b' => isGlobalBlock g2 b' || getBlocks vals2 b') b = true -> DomTgt mu b = true) nu (NU: nu = mkinitial_SM mu (REACH m1 (fun b => isGlobalBlock g1 b || getBlocks vals1 b)) (REACH m2 (fun b => isGlobalBlock g2 b || getBlocks vals2 b))), SM_wd nu /\ sm_valid nu m1 m2 /\ meminj_preserves_globals g1 (extern_of nu) /\ (forall b, isGlobalBlock g1 b = true -> frgnBlocksSrc nu b = true) /\ REACH_closed m1 (vis nu) /\ REACH_closed m1 (mapped (as_inj nu)).