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: forall (c1 : core_data) (m1 : mem) (c1' : core_data) (m1' : mem), corestep CSharpMin_core_sem ge c1 m1 c1' m1' -> forall (c2 : CMin_core) (m2 : mem) (j : meminj), match_cores c1 j c1 m1 c2 m2 -> (exists c2' : CMin_core, exists m2' : mem, exists j' : meminj, inject_incr j j' /\ Events.inject_separated j j' m1 m2 /\ corestep_plus CMin_core_sem tge c2 m2 c2' m2' /\ match_cores c1' j' c1' m1' c2' m2') \/ (MC_measure c1' < MC_measure c1)%nat /\ match_cores c1' j c1' m1' c2 m2.