Section EFFSTEP_PERM.
Variable cenv : compilenv.
Variable sz : Z.
Variable f : Csharpminor.function.
Variable tfn : function.
Variable mu : SM_Injection.
Variable m tm : mem.
Variable e : Csharpminor.env.
Variable lenv : temp_env.
Variable te : env.
Variable sp lo hi: Values.block.
Variable cs : callstack.
Variable s : Csharpminor.stmt.
Variable k : Csharpminor.cont.
Variable tk : cont.
Variable xenv : exit_env.
Variable PRE: REACH_closed m (vis mu) /\
meminj_preserves_globals ge (as_inj mu) /\
(forall b, isGlobalBlock ge b = true -> frgnBlocksSrc mu b = true) /\
sm_valid mu m tm /\ SM_wd mu /\
Mem.inject (as_inj mu) m tm.
Variable TRF : transl_funbody cenv sz f = OK tfn.
(*exists tv, (eval_expr tge (Vptr sp Int.zero) te tm x1 tv /\ val_inject (restrict (as_inj mu) (vis mu)) v tv /\ val_match_approx x2 v) /\*)

Lemma EFF_step_case_Switch: forall
(MCS : structured_match_callstack mu m tm
(Frame cenv tfn e lenv te sp lo hi :: cs)
(Mem.nextblock m)
(Mem.nextblock tm))
a x x0 ts cases n
(MK : match_cont k tk cenv xenv cs)
(EvalA: Csharpminor.eval_expr ge e lenv m a (Vint n))
(EQ : transl_expr cenv a = OK (x, x0))
(EQ0 : transl_lblstmt cenv (switch_env cases xenv) cases
(Sswitch x (switch_table cases 0) (length (switch_table cases 0))) =
OK ts),
exists c2' : CMin_core,
exists m2' mu',
effstep_plus cmin_eff_sem tge EmptyEffect
(CMin_State tfn ts tk (Vptr sp Int.zero) te) tm c2' m2' /\
Match_cores (CSharpMin_State f (seq_of_lbl_stmt (select_switch n cases)) k e lenv) mu'
(CSharpMin_State f (seq_of_lbl_stmt (select_switch n cases)) k e lenv) m c2' m2'
/\ intern_incr mu mu' /\
sm_inject_separated mu mu' m tm /\
sm_locally_allocated mu mu' m tm m m2' /\
SM_wd mu' /\ sm_valid mu' m m2'.