induct: fixes x1 :: "('fenv, 'henv, ('fun, ('dyn, 'num, 'bool) unboxed) frame) state"   and x2 :: "('fenv, 'henv, ('fun, ('dyn, 'num, 'bool) unboxed) frame) state"   and P :: "('fenv, 'henv, ('fun, ('dyn, 'num, 'bool) unboxed) frame) state \<Rightarrow> ('fenv, 'henv, ('fun, ('dyn, 'num, 'bool) unboxed) frame) state \<Rightarrow> bool" assumes "x1 \<rightarrow> x2"   and "\<And>F f fd pc d H \<Sigma> st. \<lbrakk>F_get F f = Some fd; pc < length (body fd); body fd ! pc = IPush d\<rbrakk> \<Longrightarrow> P (State F H (Frame f pc \<Sigma> # st)) (State F H (Frame f (Suc pc) (OpDyn d # \<Sigma>) # st))"   and "\<And>F f fd pc n H \<Sigma> st. \<lbrakk>F_get F f = Some fd; pc < length (body fd); body fd ! pc = IPushUbx1 n\<rbrakk> \<Longrightarrow> P (State F H (Frame f pc \<Sigma> # st)) (State F H (Frame f (Suc pc) (OpUbx1 n # \<Sigma>) # st))"   and "\<And>F f fd pc b H \<Sigma> st. \<lbrakk>F_get F f = Some fd; pc < length (body fd); body fd ! pc = IPushUbx2 b\<rbrakk> \<Longrightarrow> P (State F H (Frame f pc \<Sigma> # st)) (State F H (Frame f (Suc pc) (OpUbx2 b # \<Sigma>) # st))"   and "\<And>F f fd pc H x \<Sigma> st. \<lbrakk>F_get F f = Some fd; pc < length (body fd); body fd ! pc = IPop\<rbrakk> \<Longrightarrow> P (State F H (Frame f pc (x # \<Sigma>) # st)) (State F H (Frame f (Suc pc) \<Sigma> # st))"   and "\<And>F f fd pc x i i' H d \<Sigma> st. \<lbrakk>F_get F f = Some fd; pc < length (body fd); body fd ! pc = ILoad x; cast_Dyn i = Some i'; heap_get H (x, i') = Some d\<rbrakk> \<Longrightarrow> P (State F H (Frame f pc (i # \<Sigma>) # st)) (State F H (Frame f (Suc pc) (OpDyn d # \<Sigma>) # st))"   and "\<And>F f fd pc \<tau> x i i' H d blob \<Sigma> st. \<lbrakk>F_get F f = Some fd; pc < length (body fd); body fd ! pc = ILoadUbx \<tau> x; cast_Dyn i = Some i'; heap_get H (x, i') = Some d; unbox \<tau> d = Some blob\<rbrakk> \<Longrightarrow> P (State F H (Frame f pc (i # \<Sigma>) # st)) (State F H (Frame f (Suc pc) (blob # \<Sigma>) # st))"   and "\<And>F f fd pc \<tau> x i i' H d F' \<Sigma> st. \<lbrakk>F_get F f = Some fd; pc < length (body fd); body fd ! pc = ILoadUbx \<tau> x; cast_Dyn i = Some i'; heap_get H (x, i') = Some d; unbox \<tau> d = None; F_add F f (generalize_fundef fd) = F'\<rbrakk> \<Longrightarrow> P (State F H (Frame f pc (i # \<Sigma>) # st)) (State F' H (box_stack f (Frame f (Suc pc) (OpDyn d # \<Sigma>) # st)))"   and "\<And>F f fd pc x i i' y d H H' \<Sigma> st. \<lbrakk>F_get F f = Some fd; pc < length (body fd); body fd ! pc = IStore x; cast_Dyn i = Some i'; cast_Dyn y = Some d; heap_add H (x, i') d = H'\<rbrakk> \<Longrightarrow> P (State F H (Frame f pc (i # y # \<Sigma>) # st)) (State F H' (Frame f (Suc pc) \<Sigma> # st))"   and "\<And>F f fd pc \<tau> x i i' blob d H H' \<Sigma> st. \<lbrakk>F_get F f = Some fd; pc < length (body fd); body fd ! pc = IStoreUbx \<tau> x; cast_Dyn i = Some i'; cast_and_box \<tau> blob = Some d; heap_add H (x, i') d = H'\<rbrakk> \<Longrightarrow> P (State F H (Frame f pc (i # blob # \<Sigma>) # st)) (State F H' (Frame f (Suc pc) \<Sigma> # st))"   and "\<And>F f fd pc op ar \<Sigma> \<Sigma>' x H st. \<lbrakk>F_get F f = Some fd; pc < length (body fd); body fd ! pc = IOp op; \<AA>\<rr>\<ii>\<tt>\<yy> op = ar; ar \<le> length \<Sigma>; traverse cast_Dyn (take ar \<Sigma>) = Some \<Sigma>'; \<II>\<nn>\<ll> op \<Sigma>' = None; \<OO>\<pp> op \<Sigma>' = x\<rbrakk> \<Longrightarrow> P (State F H (Frame f pc \<Sigma> # st)) (State F H (Frame f (Suc pc) (OpDyn x # drop ar \<Sigma>) # st))"   and "\<And>F f fd pc op ar \<Sigma> \<Sigma>' opinl x F' H st. \<lbrakk>F_get F f = Some fd; pc < length (body fd); body fd ! pc = IOp op; \<AA>\<rr>\<ii>\<tt>\<yy> op = ar; ar \<le> length \<Sigma>; traverse cast_Dyn (take ar \<Sigma>) = Some \<Sigma>'; \<II>\<nn>\<ll> op \<Sigma>' = Some opinl; \<II>\<nn>\<ll>\<OO>\<pp> opinl \<Sigma>' = x; F_add F f (rewrite_fundef_body fd pc (IOpInl opinl)) = F'\<rbrakk> \<Longrightarrow> P (State F H (Frame f pc \<Sigma> # st)) (State F' H (Frame f (Suc pc) (OpDyn x # drop ar \<Sigma>) # st))"   and "\<And>F f fd pc opinl ar \<Sigma> \<Sigma>' x H st. \<lbrakk>F_get F f = Some fd; pc < length (body fd); body fd ! pc = IOpInl opinl; \<AA>\<rr>\<ii>\<tt>\<yy> (\<DD>\<ee>\<II>\<nn>\<ll> opinl) = ar; ar \<le> length \<Sigma>; traverse cast_Dyn (take ar \<Sigma>) = Some \<Sigma>'; \<II>\<ss>\<II>\<nn>\<ll> opinl \<Sigma>'; \<II>\<nn>\<ll>\<OO>\<pp> opinl \<Sigma>' = x\<rbrakk> \<Longrightarrow> P (State F H (Frame f pc \<Sigma> # st)) (State F H (Frame f (Suc pc) (OpDyn x # drop ar \<Sigma>) # st))"   and "\<And>F f fd pc opinl ar \<Sigma> \<Sigma>' x F' H st. \<lbrakk>F_get F f = Some fd; pc < length (body fd); body fd ! pc = IOpInl opinl; \<AA>\<rr>\<ii>\<tt>\<yy> (\<DD>\<ee>\<II>\<nn>\<ll> opinl) = ar; ar \<le> length \<Sigma>; traverse cast_Dyn (take ar \<Sigma>) = Some \<Sigma>'; \<not> \<II>\<ss>\<II>\<nn>\<ll> opinl \<Sigma>'; \<II>\<nn>\<ll>\<OO>\<pp> opinl \<Sigma>' = x; F_add F f (rewrite_fundef_body fd pc (IOp (\<DD>\<ee>\<II>\<nn>\<ll> opinl))) = F'\<rbrakk> \<Longrightarrow> P (State F H (Frame f pc \<Sigma> # st)) (State F' H (Frame f (Suc pc) (OpDyn x # drop ar \<Sigma>) # st))"   and "\<And>F f fd pc opubx op ar \<Sigma> x H st. \<lbrakk>F_get F f = Some fd; pc < length (body fd); body fd ! pc = IOpUbx opubx; \<DD>\<ee>\<II>\<nn>\<ll> (\<BB>\<oo>\<xx> opubx) = op; \<AA>\<rr>\<ii>\<tt>\<yy> op = ar; ar \<le> length \<Sigma>; \<UU>\<bb>\<xx>\<OO>\<pp> opubx (take ar \<Sigma>) = Some x\<rbrakk> \<Longrightarrow> P (State F H (Frame f pc \<Sigma> # st)) (State F H (Frame f (Suc pc) (x # drop ar \<Sigma>) # st))"   and "\<And>F f fd pc n y d H \<Sigma> st. \<lbrakk>F_get F f = Some fd; pc < length (body fd); body fd ! pc = ICJump n; cast_Dyn y = Some d; is_true d\<rbrakk> \<Longrightarrow> P (State F H (Frame f pc (y # \<Sigma>) # st)) (State F H (Frame f n \<Sigma> # st))"   and "\<And>F f fd pc n y d H \<Sigma> st. \<lbrakk>F_get F f = Some fd; pc < length (body fd); body fd ! pc = ICJump n; cast_Dyn y = Some d; is_false d\<rbrakk> \<Longrightarrow> P (State F H (Frame f pc (y # \<Sigma>) # st)) (State F H (Frame f (Suc pc) \<Sigma> # st))"   and "\<And>F f fd pc g gd ar \<Sigma> frame\<^sub>f frame\<^sub>g H st. \<lbrakk>F_get F f = Some fd; pc < length (body fd); body fd ! pc = ICall g; F_get F g = Some gd; arity gd = ar; ar \<le> length \<Sigma>; frame\<^sub>f = Frame f pc \<Sigma>; list_all is_dyn_operand (take ar \<Sigma>); frame\<^sub>g = Frame g 0 (take ar \<Sigma>)\<rbrakk> \<Longrightarrow> P (State F H (frame\<^sub>f # st)) (State F H (frame\<^sub>g # frame\<^sub>f # st))"   and "\<And>F g gd \<Sigma>\<^sub>f pc\<^sub>g frame\<^sub>g \<Sigma>\<^sub>g frame\<^sub>f f pc\<^sub>f frame\<^sub>f' H st. \<lbrakk>F_get F g = Some gd; arity gd \<le> length \<Sigma>\<^sub>f; pc\<^sub>g = length (body gd); frame\<^sub>g = Frame g pc\<^sub>g \<Sigma>\<^sub>g; frame\<^sub>f = Frame f pc\<^sub>f \<Sigma>\<^sub>f; frame\<^sub>f' = Frame f (Suc pc\<^sub>f) (\<Sigma>\<^sub>g @ drop (arity gd) \<Sigma>\<^sub>f)\<rbrakk> \<Longrightarrow> P (State F H (frame\<^sub>g # frame\<^sub>f # st)) (State F H (frame\<^sub>f' # st))" shows "P x1 x2"