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