Definition reestablish (mu0 mu: SM_Injection): SM_Injection :=
  match mu0, mu with
    Build_SM_Injection locBSrc0 locBTgt0 pSrc0 pTgt0 local0
                       extBSrc0 extBTgt0 fSrc0 fTgt0 extern0,
    Build_SM_Injection locBSrc locBTgt pSrc pTgt local
                       extBSrc extBTgt fSrc fTgt extern =>
    Build_SM_Injection locBSrc0 locBTgt0 pSrc0 pTgt0 local0
                       (fun b => if locBSrc0 b then false else locBSrc b || extBSrc b)
                       (fun b => if locBTgt0 b then false else locBTgt b || extBTgt b)
                       fSrc0 fTgt0 (*We have not YET learned about additional blocks - that's
                          done by replace_externs in AfterEtxernal!*)
                       (fun b => if locBSrc0 b then None else join extern local b)
  end.

Lemma reestablish_wd': forall mu0 mu (WD0:SM_wd mu0) (WD:SM_wd mu) (INC: inject_incr (as_inj mu0) (as_inj mu)) (Hmu: forall b1 b2 z (A:as_inj mu b1 = Some(b2,z)), locBlocksSrc mu0 b1 = locBlocksTgt mu0 b2 /\ extBlocksSrc mu0 b1 = extBlocksTgt mu0 b2) (ExtTgt: forall b, extBlocksTgt mu0 b = true -> DomTgt mu b = true), SM_wd (reestablish mu0 mu).