simps: fixes a1 :: "t_context"   and a2 :: "b_e list"   and a3 :: "tf" shows "a1 \<turnstile> a2 : a3 = ((\<exists>\<C> v. a1 = \<C> \<and> a2 = [C v] \<and> a3 = [] _> [typeof v]) \<or> (\<exists>t \<C> uu_. a1 = \<C> \<and> a2 = [Unop_i t uu_] \<and> a3 = [t] _> [t] \<and> is_int_t t) \<or> (\<exists>t \<C> uv_. a1 = \<C> \<and> a2 = [Unop_f t uv_] \<and> a3 = [t] _> [t] \<and> is_float_t t) \<or> (\<exists>t \<C> iop. a1 = \<C> \<and> a2 = [Binop_i t iop] \<and> a3 = [t, t] _> [t] \<and> is_int_t t) \<or> (\<exists>t \<C> uw_. a1 = \<C> \<and> a2 = [Binop_f t uw_] \<and> a3 = [t, t] _> [t] \<and> is_float_t t) \<or> (\<exists>t \<C> ux_. a1 = \<C> \<and> a2 = [Testop t ux_] \<and> a3 = [t] _> [T_i32] \<and> is_int_t t) \<or> (\<exists>t \<C> uy_. a1 = \<C> \<and> a2 = [Relop_i t uy_] \<and> a3 = [t, t] _> [T_i32] \<and> is_int_t t) \<or> (\<exists>t \<C> uz_. a1 = \<C> \<and> a2 = [Relop_f t uz_] \<and> a3 = [t, t] _> [T_i32] \<and> is_float_t t) \<or> (\<exists>t1 t2 sx \<C>. a1 = \<C> \<and> a2 = [Cvtop t1 Convert t2 sx] \<and> a3 = [t2] _> [t1] \<and> t1 \<noteq> t2 \<and> (sx = None) = (is_float_t t1 \<and> is_float_t t2 \<or> is_int_t t1 \<and> is_int_t t2 \<and> t_length t1 < t_length t2)) \<or> (\<exists>t1 t2 \<C>. a1 = \<C> \<and> a2 = [Cvtop t1 Reinterpret t2 None] \<and> a3 = [t2] _> [t1] \<and> t1 \<noteq> t2 \<and> t_length t1 = t_length t2) \<or> (\<exists>\<C> ts ts'. a1 = \<C> \<and> a2 = [Unreachable] \<and> a3 = ts _> ts') \<or> (\<exists>\<C>. a1 = \<C> \<and> a2 = [Nop] \<and> a3 = [] _> []) \<or> (\<exists>\<C> t. a1 = \<C> \<and> a2 = [Drop] \<and> a3 = [t] _> []) \<or> (\<exists>\<C> t. a1 = \<C> \<and> a2 = [Select] \<and> a3 = [t, t, T_i32] _> [t]) \<or> (\<exists>tf tn tm \<C> es. a1 = \<C> \<and> a2 = [Block tf es] \<and> a3 = tn _> tm \<and> tf = tn _> tm \<and> \<C>\<lparr>label := [tm] @ label \<C>\<rparr> \<turnstile> es : tn _> tm) \<or> (\<exists>tf tn tm \<C> es. a1 = \<C> \<and> a2 = [Loop tf es] \<and> a3 = tn _> tm \<and> tf = tn _> tm \<and> \<C>\<lparr>label := [tn] @ label \<C>\<rparr> \<turnstile> es : tn _> tm) \<or> (\<exists>tf tn tm \<C> es1 es2. a1 = \<C> \<and> a2 = [b_e.If tf es1 es2] \<and> a3 = tn @ [T_i32] _> tm \<and> tf = tn _> tm \<and> \<C>\<lparr>label := [tm] @ label \<C>\<rparr> \<turnstile> es1 : tn _> tm \<and> \<C>\<lparr>label := [tm] @ label \<C>\<rparr> \<turnstile> es2 : tn _> tm) \<or> (\<exists>i \<C> ts t1s t2s. a1 = \<C> \<and> a2 = [Br i] \<and> a3 = t1s @ ts _> t2s \<and> i < length (label \<C>) \<and> label \<C> ! i = ts) \<or> (\<exists>i \<C> ts. a1 = \<C> \<and> a2 = [Br_if i] \<and> a3 = ts @ [T_i32] _> ts \<and> i < length (label \<C>) \<and> label \<C> ! i = ts) \<or> (\<exists>\<C> ts is i t1s t2s. a1 = \<C> \<and> a2 = [Br_table is i] \<and> a3 = t1s @ ts @ [T_i32] _> t2s \<and> list_all (\<lambda>i. i < length (label \<C>) \<and> label \<C> ! i = ts) (is @ [i])) \<or> (\<exists>\<C> ts t1s t2s. a1 = \<C> \<and> a2 = [Return] \<and> a3 = t1s @ ts _> t2s \<and> return \<C> = Some ts) \<or> (\<exists>i \<C> tf. a1 = \<C> \<and> a2 = [Call i] \<and> a3 = tf \<and> i < length (func_t \<C>) \<and> func_t \<C> ! i = tf) \<or> (\<exists>i \<C> t1s t2s. a1 = \<C> \<and> a2 = [Call_indirect i] \<and> a3 = t1s @ [T_i32] _> t2s \<and> i < length (types_t \<C>) \<and> types_t \<C> ! i = t1s _> t2s \<and> table \<C> \<noteq> None) \<or> (\<exists>i \<C> t. a1 = \<C> \<and> a2 = [Get_local i] \<and> a3 = [] _> [t] \<and> i < length (local \<C>) \<and> local \<C> ! i = t) \<or> (\<exists>i \<C> t. a1 = \<C> \<and> a2 = [Set_local i] \<and> a3 = [t] _> [] \<and> i < length (local \<C>) \<and> local \<C> ! i = t) \<or> (\<exists>i \<C> t. a1 = \<C> \<and> a2 = [Tee_local i] \<and> a3 = [t] _> [t] \<and> i < length (local \<C>) \<and> local \<C> ! i = t) \<or> (\<exists>i \<C> t. a1 = \<C> \<and> a2 = [Get_global i] \<and> a3 = [] _> [t] \<and> i < length (global \<C>) \<and> tg_t (global \<C> ! i) = t) \<or> (\<exists>i \<C> t. a1 = \<C> \<and> a2 = [Set_global i] \<and> a3 = [t] _> [] \<and> i < length (global \<C>) \<and> tg_t (global \<C> ! i) = t \<and> is_mut (global \<C> ! i)) \<or> (\<exists>\<C> n a tp_sx t off. a1 = \<C> \<and> a2 = [Load t tp_sx a off] \<and> a3 = [T_i32] _> [t] \<and> memory \<C> = Some n \<and> load_store_t_bounds a (option_projl tp_sx) t) \<or> (\<exists>\<C> n a tp t off. a1 = \<C> \<and> a2 = [Store t tp a off] \<and> a3 = [T_i32, t] _> [] \<and> memory \<C> = Some n \<and> load_store_t_bounds a tp t) \<or> (\<exists>\<C> n. a1 = \<C> \<and> a2 = [Current_memory] \<and> a3 = [] _> [T_i32] \<and> memory \<C> = Some n) \<or> (\<exists>\<C> n. a1 = \<C> \<and> a2 = [Grow_memory] \<and> a3 = [T_i32] _> [T_i32] \<and> memory \<C> = Some n) \<or> (\<exists>\<C>. a1 = \<C> \<and> a2 = [] \<and> a3 = [] _> []) \<or> (\<exists>\<C> es t1s t2s e t3s. a1 = \<C> \<and> a2 = es @ [e] \<and> a3 = t1s _> t3s \<and> \<C> \<turnstile> es : t1s _> t2s \<and> \<C> \<turnstile> [e] : t2s _> t3s) \<or> (\<exists>\<C> es t1s t2s ts. a1 = \<C> \<and> a2 = es \<and> a3 = ts @ t1s _> ts @ t2s \<and> \<C> \<turnstile> es : t1s _> t2s))"