Parameter MC_order :  core_data -> core_data -> Prop.Parameter MC_wellfounded: well_founded MC_order.Definition MC_measure (q:CSharpMin_core): nat :=
  match q with
  | CSharpMin_State fn s k e lenv => seq_left_depth s
  | _ => O
  end.

Lemma MS_step_case_InternalCall: forall cenv f j m tm e cs k tk vargs targs x m1 lenv (Param1: list_norepet (map fst (Csharpminor.fn_vars f))) (Param2 : list_norepet (Csharpminor.fn_params f)) (Param3 : list_disjoint (Csharpminor.fn_params f) (fn_temps f)) (AlocVars : alloc_variables empty_env m (Csharpminor.fn_vars f) e m1) (BindParams: bind_parameters (Csharpminor.fn_params f) vargs (create_undef_temps (fn_temps f)) = Some lenv) (MINJ : Mem.inject j m tm) (MCS : match_callstack prog j m tm cs (Mem.nextblock m) (Mem.nextblock tm)) (MK : match_cont k tk cenv nil cs) (ISCC : Csharpminor.is_call_cont k) (ARGSINJ : val_list_inject j vargs targs) (EQ : transl_function f = OK x) (*NEW:*) (PG: meminj_preserves_globals ge j), exists (c2' : CMin_core) (m2' : mem), corestep_plus CMin_core_sem tge (CMin_Callstate (AST.Internal x) targs tk) tm c2' m2' /\ exists (j' : meminj), inject_incr j j' /\ inject_separated j j' m tm /\ match_cores (CSharpMin_State f (Csharpminor.fn_body f) k e lenv) j' (CSharpMin_State f (Csharpminor.fn_body f) k e lenv) m1 c2' m2'.