(*--------------------------------------------------------------------*)

Lemma MC_after_external:forall (d : core_data) (j j' : meminj) (st1 : core_data) (st2 : CMin_core)
(m1 : mem) (e : external_function) (vals1 : list val) (ret1 : val)
(m1' m2 m2' : mem) (ret2 : val) (sig : signature),
d = st1 /\ match_cores d j st1 m1 st2 m2 ->
at_external CSharpMin_core_sem st1 = Some (e, sig, vals1) ->
Events.meminj_preserves_globals ge j ->
inject_incr j j' ->
Events.inject_separated j j' m1 m2 ->
Mem.inject j' m1' m2' ->
val_inject j' ret1 ret2 ->
mem_forward m1 m1' ->
Mem.unchanged_on (Events.loc_unmapped j) m1 m1' ->
mem_forward m2 m2' ->
Mem.unchanged_on (Events.loc_out_of_reach j m1) m2 m2' ->
exists st1' : core_data,
exists st2' : CMin_core,
exists d' : core_data,
after_external CSharpMin_core_sem (Some ret1) st1 = Some st1' /\
after_external CMin_core_sem (Some ret2) st2 = Some st2' /\
d' = st1' /\ match_cores d' j' st1' m1' st2' m2'.