cases: fixes a1 :: "('fenv, 'henv, ('fun, 'dyn) frame) state"   and a2 :: "('fenv, 'henv, ('fun, 'dyn) frame) state" assumes "a1 \<rightarrow> a2" obtains F :: "'fenv" and f :: "'fun" and fd :: "('dyn, 'var, 'fun, 'op) instr fundef" and pc :: "nat" and d :: "'dyn" and H :: "'henv" and \<Sigma> :: "'dyn list" and st :: "('fun, 'dyn) frame list" where "a1 = State F__ H__ (Frame f__ pc__ \<Sigma>__ # st__)" and "a2 = State F__ H__ (Frame f__ (Suc pc__) (d__ # \<Sigma>__) # st__)" and "F_get F__ f__ = Some fd__" and "pc__ < length (body fd__)" and "body fd__ ! pc__ = IPush d__"   | F :: "'fenv" and f :: "'fun" and fd :: "('dyn, 'var, 'fun, 'op) instr fundef" and pc :: "nat" and H :: "'henv" and d :: "'dyn" and \<Sigma> :: "'dyn list" and st :: "('fun, 'dyn) frame list" where "a1 = State Fa__ Ha__ (Frame fa__ pca__ (da__ # \<Sigma>'__) # sta__)" and "a2 = State Fa__ Ha__ (Frame fa__ (Suc pca__) \<Sigma>'__ # sta__)" and "F_get Fa__ fa__ = Some fda__" and "pca__ < length (body fda__)" and "body fda__ ! pca__ = IPop"   | F :: "'fenv" and f :: "'fun" and fd :: "('dyn, 'var, 'fun, 'op) instr fundef" and pc :: "nat" and x :: "'var" and H :: "'henv" and y :: "'dyn" and d :: "'dyn" and \<Sigma> :: "'dyn list" and st :: "('fun, 'dyn) frame list" where "a1 = State Fb__ Hb__ (Frame fb__ pcb__ (y__ # \<Sigma>''__) # stb__)" and "a2 = State Fb__ Hb__ (Frame fb__ (Suc pcb__) (db__ # \<Sigma>''__) # stb__)" and "F_get Fb__ fb__ = Some fdb__" and "pcb__ < length (body fdb__)" and "body fdb__ ! pcb__ = ILoad x__" and "heap_get Hb__ (x__, y__) = Some db__"   | F :: "'fenv" and f :: "'fun" and fd :: "('dyn, 'var, 'fun, 'op) instr fundef" and pc :: "nat" and x :: "'var" and H :: "'henv" and y :: "'dyn" and d :: "'dyn" and H' :: "'henv" and \<Sigma> :: "'dyn list" and st :: "('fun, 'dyn) frame list" where "a1 = State Fc__ Hc__ (Frame fc__ pcc__ (y # dc__ # \<Sigma>'''__) # stc__)" and "a2 = State Fc__ H' (Frame fc__ (Suc pcc__) \<Sigma>'''__ # stc__)" and "F_get Fc__ fc__ = Some fdc__" and "pcc__ < length (body fdc__)" and "body fdc__ ! pcc__ = IStore xa__" and "heap_add Hc__ (xa__, y) dc__ = H'"   | F :: "'fenv" and f :: "'fun" and fd :: "('dyn, 'var, 'fun, 'op) instr fundef" and pc :: "nat" and op :: "'op" and ar :: "nat" and \<Sigma> :: "'dyn list" and x :: "'dyn" and H :: "'henv" and st :: "('fun, 'dyn) frame list" where "a1 = State Fd__ Hd__ (Frame fe__ pcd__ \<Sigma>''''__ # std__)" and "a2 = State Fd__ Hd__ (Frame fe__ (Suc pcd__) (x # drop ar \<Sigma>''''__) # std__)" and "F_get Fd__ fe__ = Some fdd__" and "pcd__ < length (body fdd__)" and "body fdd__ ! pcd__ = IOp op" and "\<AA>\<rr>\<ii>\<tt>\<yy> op = ar" and "ar \<le> length \<Sigma>''''__" and "\<OO>\<pp> op (take ar \<Sigma>''''__) = x"   | F :: "'fenv" and f :: "'fun" and fd :: "('dyn, 'var, 'fun, 'op) instr fundef" and pc :: "nat" and n :: "nat" and d :: "'dyn" and H :: "'henv" and \<Sigma> :: "'dyn list" and st :: "('fun, 'dyn) frame list" where "a1 = State Fe__ He__ (Frame ff__ pce__ (dd__ # \<Sigma>'''''__) # ste__)" and "a2 = State Fe__ He__ (Frame ff__ n__ \<Sigma>'''''__ # ste__)" and "F_get Fe__ ff__ = Some fde__" and "pce__ < length (body fde__)" and "body fde__ ! pce__ = ICJump n__" and "is_true dd__"   | F :: "'fenv" and f :: "'fun" and fd :: "('dyn, 'var, 'fun, 'op) instr fundef" and pc :: "nat" and n :: "nat" and d :: "'dyn" and H :: "'henv" and \<Sigma> :: "'dyn list" and st :: "('fun, 'dyn) frame list" where "a1 = State Ff__ Hf__ (Frame fg__ pcf__ (d # \<Sigma>''''''__) # stf__)" and "a2 = State Ff__ Hf__ (Frame fg__ (Suc pcf__) \<Sigma>''''''__ # stf__)" and "F_get Ff__ fg__ = Some fdf__" and "pcf__ < length (body fdf__)" and "body fdf__ ! pcf__ = ICJump n" and "is_false d"   | F :: "'fenv" and f :: "'fun" and fd :: "('dyn, 'var, 'fun, 'op) instr fundef" and pc :: "nat" and g :: "'fun" and gd :: "('dyn, 'var, 'fun, 'op) instr fundef" and \<Sigma> :: "'dyn list" and frame\<^sub>f :: "('fun, 'dyn) frame" and frame\<^sub>g :: "('fun, 'dyn) frame" and H :: "'henv" and st :: "('fun, 'dyn) frame list" where "a1 = State Fg__ Hg__ (frame\<^sub>f__ # stg__)" and "a2 = State Fg__ Hg__ (frame\<^sub>g__ # frame\<^sub>f__ # stg__)" and "F_get Fg__ fh__ = Some fd" and "pc < length (body fd)" and "body fd ! pc = ICall g__" and "F_get Fg__ g__ = Some gd__" and "arity gd__ \<le> length \<Sigma>" and "frame\<^sub>f__ = Frame fh__ pc \<Sigma>" and "frame\<^sub>g__ = Frame g__ 0 (take (arity gd__) \<Sigma>)"   | F :: "'fenv" and g :: "'fun" and gd :: "('dyn, 'var, 'fun, 'op) instr fundef" and \<Sigma>\<^sub>f :: "'dyn list" and pc\<^sub>g :: "nat" and frame\<^sub>g :: "('fun, 'dyn) frame" and \<Sigma>\<^sub>g :: "'dyn list" and frame\<^sub>f :: "('fun, 'dyn) frame" and f :: "'fun" and pc\<^sub>f :: "nat" and frame\<^sub>f' :: "('fun, 'dyn) frame" and H :: "'henv" and st :: "('fun, 'dyn) frame list" where "a1 = State F H (frame\<^sub>g # frame\<^sub>f # st)" and "a2 = State F H (frame\<^sub>f' # st)" and "F_get F g = Some gd" and "arity gd \<le> length \<Sigma>\<^sub>f" and "pc\<^sub>g = length (body gd)" and "frame\<^sub>g = Frame g pc\<^sub>g \<Sigma>\<^sub>g" and "frame\<^sub>f = Frame f pc\<^sub>f \<Sigma>\<^sub>f" and "frame\<^sub>f' = Frame f (Suc pc\<^sub>f) (\<Sigma>\<^sub>g @ drop (arity gd) \<Sigma>\<^sub>f)"