Section EFF_InternalCall.
Variable cenv : compilenv.
Variable f : Csharpminor.function.
Variable mu : SM_Injection.
Variable m tm : mem.
Variable cs : callstack.
Variable e : Csharpminor.env.
Variable lenv : temp_env.
Variable k : Csharpminor.cont.
Variable tk : cont.
End EFF_InternalCall.

Lemma Match_effcore_diagram:
forall st1 m1 st1' m1' (U1 : Values.block -> Z -> bool)
(EFFSTEP: effstep csharpmin_eff_sem ge U1 st1 m1 st1' m1')
st2 mu m2
(UHyp: forall b ofs,  U1 b ofs = true -> Mem.valid_block m1 b ->
vis mu b = true)
(MC: Match_cores st1 mu st1 m1 st2 m2),
exists st2' m2' mu',
intern_incr mu mu' /\
sm_inject_separated mu mu' m1 m2 /\
sm_locally_allocated mu mu' m1 m2 m1' m2' /\
Match_cores st1' mu' st1' m1' st2' m2' /\
(exists U2 : Values.block -> Z -> bool,
(effstep_plus cmin_eff_sem tge U2 st2 m2 st2' m2' \/
(MC_measure st1' < MC_measure st1)%nat /\
effstep_star cmin_eff_sem tge U2 st2 m2 st2' m2') /\
(forall (b : Values.block) (ofs : Z),
U2 b ofs = true ->
Mem.valid_block m2 b /\
(locBlocksTgt mu b = false ->
exists (b1 : Values.block) (delta1 : Z),
foreign_of mu b1 = Some (b, delta1) /\
U1 b1 (ofs - delta1) = true /\
Mem.perm m1 b1 (ofs - delta1) Max Nonempty))).