*)
(* Lemma MS_step_case_Builtin: forall x t ef optid vres m' bl vargs (EvalArgs: Csharpminor.eval_exprlist ge e lenv m bl vargs) (ExtCall: Events.external_call ef ge vargs m t vres m') (MCS : structured_match_callstack mu m tm (Frame cenv tfn e lenv te sp lo hi :: cs) (Mem.nextblock m) (Mem.nextblock tm)) (EQ : transl_exprlist cenv bl = OK x), exists c2' : CMin_core, exists m2' mu', corestep_plus CMin_core_sem tge (CMin_State tfn (Sbuiltin optid ef x) tk (Vptr sp Int.zero) te) tm c2' m2' /\ intern_incr mu mu' /\ sm_inject_separated mu mu' m tm /\ sm_locally_allocated mu mu' m tm m' m2' /\ Match_cores (CSharpMin_State f Csharpminor.Sskip k e (set_optvar optid vres lenv)) mu' (CSharpMin_State f Csharpminor.Sskip k e (set_optvar optid vres lenv)) m' c2' m2' /\ SM_wd mu' /\ sm_valid mu' m' m2'. *)

Lemma MS_step_case_Ite: forall
(MCS : structured_match_callstack mu m tm
(Frame cenv tfn e lenv te sp lo hi :: cs)
(Mem.nextblock m)
(Mem.nextblock tm))
x x0 x1 x2 b v a s1 s2
(H : Csharpminor.eval_expr ge e lenv m a v)
(BoolOfVal : Val.bool_of_val v b)
(MK : match_cont k tk cenv xenv cs)
(EQ : transl_expr cenv a = OK (x, x0))
(EQ1 : transl_stmt cenv xenv s1 = OK x1)
(EQ0 : transl_stmt cenv xenv s2 = OK x2),
exists c2' : CMin_core,
exists m2' mu',
corestep_plus CMin_core_sem tge
(CMin_State tfn (Sifthenelse x x1 x2) tk (Vptr sp Int.zero) te) tm c2' m2' /\
intern_incr mu mu' /\
sm_inject_separated mu mu' m tm /\
sm_locally_allocated mu mu' m tm m m2' /\
Match_cores  (CSharpMin_State f (if b then s1 else s2) k e lenv) mu'
(CSharpMin_State f (if b then s1 else s2) k e lenv) m c2' m2' /\
SM_wd mu' /\
sm_valid mu' m m2'.