[STATEMENT]
theorem no_type_error:
  fixes \<sigma> :: jvm_state
  assumes welltyped: "wf_jvm_prog\<^bsub>\<Phi>\<^esub> P" and conforms: "P,\<Phi> \<turnstile> \<sigma> \<surd>"
  shows "exec_d P \<sigma> \<noteq> TypeError"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. exec_d P \<sigma> \<noteq> TypeError
[PROOF STEP]
(*<*)
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. exec_d P \<sigma> \<noteq> TypeError
[PROOF STEP]
proof -
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. exec_d P \<sigma> \<noteq> TypeError
[PROOF STEP]
from welltyped
[PROOF STATE]
proof (chain)
picking this:
wf_jvm_prog\<^bsub>\<Phi>\<^esub> P
[PROOF STEP]
obtain mb where wf: "wf_prog mb P"
[PROOF STATE]
proof (prove)
using this:
wf_jvm_prog\<^bsub>\<Phi>\<^esub> P

goal (1 subgoal):
 1. (\<And>mb. wf_prog mb P \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by (fast dest: wt_jvm_progD)
[PROOF STATE]
proof (state)
this:
wf_prog mb P

goal (1 subgoal):
 1. exec_d P \<sigma> \<noteq> TypeError
[PROOF STEP]
obtain xcp h frs sh where s [simp]: "\<sigma> = (xcp, h, frs, sh)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (\<And>xcp h frs sh. \<sigma> = (xcp, h, frs, sh) \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by (cases \<sigma>)
[PROOF STATE]
proof (state)
this:
\<sigma> = (xcp, h, frs, sh)

goal (1 subgoal):
 1. exec_d P \<sigma> \<noteq> TypeError
[PROOF STEP]
from conforms
[PROOF STATE]
proof (chain)
picking this:
P,\<Phi> |- \<sigma> [ok]
[PROOF STEP]
have "xcp \<noteq> None \<or> frs = [] \<Longrightarrow> check P \<sigma>"
[PROOF STATE]
proof (prove)
using this:
P,\<Phi> |- \<sigma> [ok]

goal (1 subgoal):
 1. xcp \<noteq> None \<or> frs = [] \<Longrightarrow> check P \<sigma>
[PROOF STEP]
by (unfold correct_state_def check_def) auto
[PROOF STATE]
proof (state)
this:
xcp \<noteq> None \<or> frs = [] \<Longrightarrow> check P \<sigma>

goal (1 subgoal):
 1. exec_d P \<sigma> \<noteq> TypeError
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
xcp \<noteq> None \<or> frs = [] \<Longrightarrow> check P \<sigma>

goal (1 subgoal):
 1. exec_d P \<sigma> \<noteq> TypeError
[PROOF STEP]
{
[PROOF STATE]
proof (state)
this:
xcp \<noteq> None \<or> frs = [] \<Longrightarrow> check P \<sigma>

goal (1 subgoal):
 1. exec_d P \<sigma> \<noteq> TypeError
[PROOF STEP]
assume "\<not>(xcp \<noteq> None \<or> frs = [])"
[PROOF STATE]
proof (state)
this:
\<not> (xcp \<noteq> None \<or> frs = [])

goal (1 subgoal):
 1. exec_d P \<sigma> \<noteq> TypeError
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
\<not> (xcp \<noteq> None \<or> frs = [])
[PROOF STEP]
obtain stk reg C M pc ics frs' where
      xcp [simp]: "xcp = None" and
      frs [simp]: "frs = (stk,reg,C,M,pc,ics)#frs'"
[PROOF STATE]
proof (prove)
using this:
\<not> (xcp \<noteq> None \<or> frs = [])

goal (1 subgoal):
 1. (\<And>stk reg C M pc ics frs'. \<lbrakk>xcp = None; frs = (stk, reg, C, M, pc, ics) # frs'\<rbrakk> \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by (clarsimp simp add: neq_Nil_conv)
[PROOF STATE]
proof (state)
this:
xcp = None
frs = (stk, reg, C, M, pc, ics) # frs'

goal (1 subgoal):
 1. exec_d P \<sigma> \<noteq> TypeError
[PROOF STEP]
from conforms
[PROOF STATE]
proof (chain)
picking this:
P,\<Phi> |- \<sigma> [ok]
[PROOF STEP]
obtain  ST LT b Ts T mxs mxl ins xt where
      hconf:  "P \<turnstile> h \<surd>" and
      shconf:  "P,h \<turnstile>\<^sub>s sh \<surd>" and
      meth:   "P \<turnstile> C sees M,b:Ts\<rightarrow>T = (mxs, mxl, ins, xt) in C" and
      \<Phi>:      "\<Phi> C M ! pc = Some (ST,LT)" and
      frame:  "conf_f P h sh (ST,LT) ins (stk,reg,C,M,pc,ics)" and
      frames: "conf_fs P h sh \<Phi> C M (size Ts) T frs'"
[PROOF STATE]
proof (prove)
using this:
P,\<Phi> |- \<sigma> [ok]

goal (1 subgoal):
 1. (\<And>b Ts T mxs mxl ins xt ST LT. \<lbrakk>P \<turnstile> h \<surd>; P,h \<turnstile>\<^sub>s sh \<surd>; P \<turnstile> C sees M, b :  Ts\<rightarrow>T = (mxs, mxl, ins, xt) in C; \<Phi> C M ! pc = \<lfloor>(ST, LT)\<rfloor>; conf_f P h sh (ST, LT) ins (stk, reg, C, M, pc, ics); conf_fs P h sh \<Phi> C M (length Ts) T frs'\<rbrakk> \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by (fastforce simp add: correct_state_def dest: sees_method_fun)
[PROOF STATE]
proof (state)
this:
P \<turnstile> h \<surd>
P,h \<turnstile>\<^sub>s sh \<surd>
P \<turnstile> C sees M, b :  Ts\<rightarrow>T = (mxs, mxl, ins, xt) in C
\<Phi> C M ! pc = \<lfloor>(ST, LT)\<rfloor>
conf_f P h sh (ST, LT) ins (stk, reg, C, M, pc, ics)
conf_fs P h sh \<Phi> C M (length Ts) T frs'

goal (1 subgoal):
 1. exec_d P \<sigma> \<noteq> TypeError
[PROOF STEP]
from frame
[PROOF STATE]
proof (chain)
picking this:
conf_f P h sh (ST, LT) ins (stk, reg, C, M, pc, ics)
[PROOF STEP]
obtain
      stk: "P,h \<turnstile> stk [:\<le>] ST" and
      reg: "P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT" and
      pc:  "pc < size ins"
[PROOF STATE]
proof (prove)
using this:
conf_f P h sh (ST, LT) ins (stk, reg, C, M, pc, ics)

goal (1 subgoal):
 1. (\<lbrakk>P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; pc < length ins\<rbrakk> \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by (simp add: conf_f_def)
[PROOF STATE]
proof (state)
this:
P,h \<turnstile> stk [:\<le>] ST
P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT
pc < length ins

goal (1 subgoal):
 1. exec_d P \<sigma> \<noteq> TypeError
[PROOF STEP]
from welltyped meth \<Phi> pc
[PROOF STATE]
proof (chain)
picking this:
wf_jvm_prog\<^bsub>\<Phi>\<^esub> P
P \<turnstile> C sees M, b :  Ts\<rightarrow>T = (mxs, mxl, ins, xt) in C
\<Phi> C M ! pc = \<lfloor>(ST, LT)\<rfloor>
pc < length ins
[PROOF STEP]
have "OK (Some (ST, LT)) \<in> states P mxs (1+size Ts+mxl)
        \<or> OK (Some (ST, LT)) \<in> states P mxs (size Ts+mxl)"
[PROOF STATE]
proof (prove)
using this:
wf_jvm_prog\<^bsub>\<Phi>\<^esub> P
P \<turnstile> C sees M, b :  Ts\<rightarrow>T = (mxs, mxl, ins, xt) in C
\<Phi> C M ! pc = \<lfloor>(ST, LT)\<rfloor>
pc < length ins

goal (1 subgoal):
 1. OK \<lfloor>(ST, LT)\<rfloor> \<in> states P mxs (1 + length Ts + mxl) \<or> OK \<lfloor>(ST, LT)\<rfloor> \<in> states P mxs (length Ts + mxl)
[PROOF STEP]
by (cases b, auto dest: wt_jvm_prog_states_NonStatic wt_jvm_prog_states_Static)
[PROOF STATE]
proof (state)
this:
OK \<lfloor>(ST, LT)\<rfloor> \<in> states P mxs (1 + length Ts + mxl) \<or> OK \<lfloor>(ST, LT)\<rfloor> \<in> states P mxs (length Ts + mxl)

goal (1 subgoal):
 1. exec_d P \<sigma> \<noteq> TypeError
[PROOF STEP]
hence "size ST \<le> mxs"
[PROOF STATE]
proof (prove)
using this:
OK \<lfloor>(ST, LT)\<rfloor> \<in> states P mxs (1 + length Ts + mxl) \<or> OK \<lfloor>(ST, LT)\<rfloor> \<in> states P mxs (length Ts + mxl)

goal (1 subgoal):
 1. length ST \<le> mxs
[PROOF STEP]
by (auto simp add: JVM_states_unfold)
[PROOF STATE]
proof (state)
this:
length ST \<le> mxs

goal (1 subgoal):
 1. exec_d P \<sigma> \<noteq> TypeError
[PROOF STEP]
with stk
[PROOF STATE]
proof (chain)
picking this:
P,h \<turnstile> stk [:\<le>] ST
length ST \<le> mxs
[PROOF STEP]
have mxs: "size stk \<le> mxs"
[PROOF STATE]
proof (prove)
using this:
P,h \<turnstile> stk [:\<le>] ST
length ST \<le> mxs

goal (1 subgoal):
 1. length stk \<le> mxs
[PROOF STEP]
by (auto dest: list_all2_lengthD)
[PROOF STATE]
proof (state)
this:
length stk \<le> mxs

goal (1 subgoal):
 1. exec_d P \<sigma> \<noteq> TypeError
[PROOF STEP]
from welltyped meth pc
[PROOF STATE]
proof (chain)
picking this:
wf_jvm_prog\<^bsub>\<Phi>\<^esub> P
P \<turnstile> C sees M, b :  Ts\<rightarrow>T = (mxs, mxl, ins, xt) in C
pc < length ins
[PROOF STEP]
have "P,T,mxs,size ins,xt \<turnstile> ins!pc,pc :: \<Phi> C M"
[PROOF STATE]
proof (prove)
using this:
wf_jvm_prog\<^bsub>\<Phi>\<^esub> P
P \<turnstile> C sees M, b :  Ts\<rightarrow>T = (mxs, mxl, ins, xt) in C
pc < length ins

goal (1 subgoal):
 1. P,T,mxs,length ins,xt \<turnstile> ins ! pc,pc :: \<Phi> C M
[PROOF STEP]
by (rule wt_jvm_prog_impl_wt_instr)
[PROOF STATE]
proof (state)
this:
P,T,mxs,length ins,xt \<turnstile> ins ! pc,pc :: \<Phi> C M

goal (1 subgoal):
 1. exec_d P \<sigma> \<noteq> TypeError
[PROOF STEP]
hence app\<^sub>0: "app (ins!pc) P mxs T pc (size ins) xt (\<Phi> C M!pc) "
[PROOF STATE]
proof (prove)
using this:
P,T,mxs,length ins,xt \<turnstile> ins ! pc,pc :: \<Phi> C M

goal (1 subgoal):
 1. app (ins ! pc) P mxs T pc (length ins) xt (\<Phi> C M ! pc)
[PROOF STEP]
by (simp add: wt_instr_def)
[PROOF STATE]
proof (state)
this:
app (ins ! pc) P mxs T pc (length ins) xt (\<Phi> C M ! pc)

goal (1 subgoal):
 1. exec_d P \<sigma> \<noteq> TypeError
[PROOF STEP]
with \<Phi>
[PROOF STATE]
proof (chain)
picking this:
\<Phi> C M ! pc = \<lfloor>(ST, LT)\<rfloor>
app (ins ! pc) P mxs T pc (length ins) xt (\<Phi> C M ! pc)
[PROOF STEP]
have eff:
      "\<forall>(pc',s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < size ins"
[PROOF STATE]
proof (prove)
using this:
\<Phi> C M ! pc = \<lfloor>(ST, LT)\<rfloor>
app (ins ! pc) P mxs T pc (length ins) xt (\<Phi> C M ! pc)

goal (1 subgoal):
 1. \<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins
[PROOF STEP]
by (unfold app_def) simp
[PROOF STATE]
proof (state)
this:
\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins

goal (1 subgoal):
 1. exec_d P \<sigma> \<noteq> TypeError
[PROOF STEP]
from app\<^sub>0 \<Phi>
[PROOF STATE]
proof (chain)
picking this:
app (ins ! pc) P mxs T pc (length ins) xt (\<Phi> C M ! pc)
\<Phi> C M ! pc = \<lfloor>(ST, LT)\<rfloor>
[PROOF STEP]
have app:
      "xcpt_app (ins!pc) P pc mxs xt (ST,LT) \<and> app\<^sub>i (ins!pc, P, pc, mxs, T, (ST,LT))"
[PROOF STATE]
proof (prove)
using this:
app (ins ! pc) P mxs T pc (length ins) xt (\<Phi> C M ! pc)
\<Phi> C M ! pc = \<lfloor>(ST, LT)\<rfloor>

goal (1 subgoal):
 1. xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT)
[PROOF STEP]
by (clarsimp simp add: app_def)
[PROOF STATE]
proof (state)
this:
xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT)

goal (1 subgoal):
 1. exec_d P \<sigma> \<noteq> TypeError
[PROOF STEP]
with eff stk reg
[PROOF STATE]
proof (chain)
picking this:
\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins
P,h \<turnstile> stk [:\<le>] ST
P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT
xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT)
[PROOF STEP]
have "check_instr (ins!pc) P h stk reg C M pc frs' sh"
[PROOF STATE]
proof (prove)
using this:
\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins
P,h \<turnstile> stk [:\<le>] ST
P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT
xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT)

goal (1 subgoal):
 1. check_instr (ins ! pc) P h stk reg C M pc frs' sh
[PROOF STEP]
proof (cases "ins!pc")
[PROOF STATE]
proof (state)
goal (18 subgoals):
 1. \<And>x1. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Load x1\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 2. \<And>x2. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Store x2\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 3. \<And>x3. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Push x3\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 4. \<And>x4. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = New x4\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 5. \<And>x51 x52. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Getfield x51 x52\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 6. \<And>x61 x62 x63. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Getstatic x61 x62 x63\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 7. \<And>x71 x72. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Putfield x71 x72\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 8. \<And>x81 x82 x83. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Putstatic x81 x82 x83\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 9. \<And>x9. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Checkcast x9\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 10. \<And>x101 x102. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Invoke x101 x102\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
A total of 18 subgoals...
[PROOF STEP]
case (Getfield F C)
[PROOF STATE]
proof (state)
this:
ins ! pc = Getfield F C

goal (18 subgoals):
 1. \<And>x1. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Load x1\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 2. \<And>x2. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Store x2\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 3. \<And>x3. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Push x3\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 4. \<And>x4. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = New x4\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 5. \<And>x51 x52. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Getfield x51 x52\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 6. \<And>x61 x62 x63. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Getstatic x61 x62 x63\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 7. \<And>x71 x72. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Putfield x71 x72\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 8. \<And>x81 x82 x83. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Putstatic x81 x82 x83\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 9. \<And>x9. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Checkcast x9\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 10. \<And>x101 x102. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Invoke x101 x102\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
A total of 18 subgoals...
[PROOF STEP]
with app stk reg \<Phi>
[PROOF STATE]
proof (chain)
picking this:
xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT)
P,h \<turnstile> stk [:\<le>] ST
P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT
\<Phi> C__ M ! pc = \<lfloor>(ST, LT)\<rfloor>
ins ! pc = Getfield F C
[PROOF STEP]
obtain v vT stk' where
        field: "P \<turnstile> C sees F,NonStatic:vT in C" and
        stk:   "stk = v # stk'" and
        conf:  "P,h \<turnstile> v :\<le> Class C"
[PROOF STATE]
proof (prove)
using this:
xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT)
P,h \<turnstile> stk [:\<le>] ST
P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT
\<Phi> C__ M ! pc = \<lfloor>(ST, LT)\<rfloor>
ins ! pc = Getfield F C

goal (1 subgoal):
 1. (\<And>vT v stk'. \<lbrakk>P \<turnstile> C sees F,NonStatic:vT in C; stk = v # stk'; P,h \<turnstile> v :\<le> Class C\<rbrakk> \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
P \<turnstile> C sees F,NonStatic:vT in C
stk = v # stk'
P,h \<turnstile> v :\<le> Class C

goal (18 subgoals):
 1. \<And>x1. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Load x1\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 2. \<And>x2. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Store x2\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 3. \<And>x3. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Push x3\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 4. \<And>x4. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = New x4\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 5. \<And>x51 x52. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Getfield x51 x52\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 6. \<And>x61 x62 x63. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Getstatic x61 x62 x63\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 7. \<And>x71 x72. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Putfield x71 x72\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 8. \<And>x81 x82 x83. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Putstatic x81 x82 x83\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 9. \<And>x9. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Checkcast x9\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 10. \<And>x101 x102. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Invoke x101 x102\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
A total of 18 subgoals...
[PROOF STEP]
from conf
[PROOF STATE]
proof (chain)
picking this:
P,h \<turnstile> v :\<le> Class C
[PROOF STEP]
have is_Ref: "is_Ref v"
[PROOF STATE]
proof (prove)
using this:
P,h \<turnstile> v :\<le> Class C

goal (1 subgoal):
 1. is_Ref v
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
is_Ref v

goal (18 subgoals):
 1. \<And>x1. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Load x1\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 2. \<And>x2. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Store x2\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 3. \<And>x3. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Push x3\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 4. \<And>x4. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = New x4\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 5. \<And>x51 x52. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Getfield x51 x52\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 6. \<And>x61 x62 x63. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Getstatic x61 x62 x63\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 7. \<And>x71 x72. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Putfield x71 x72\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 8. \<And>x81 x82 x83. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Putstatic x81 x82 x83\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 9. \<And>x9. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Checkcast x9\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 10. \<And>x101 x102. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Invoke x101 x102\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
A total of 18 subgoals...
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
is_Ref v

goal (18 subgoals):
 1. \<And>x1. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Load x1\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 2. \<And>x2. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Store x2\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 3. \<And>x3. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Push x3\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 4. \<And>x4. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = New x4\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 5. \<And>x51 x52. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Getfield x51 x52\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 6. \<And>x61 x62 x63. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Getstatic x61 x62 x63\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 7. \<And>x71 x72. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Putfield x71 x72\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 8. \<And>x81 x82 x83. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Putstatic x81 x82 x83\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 9. \<And>x9. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Checkcast x9\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 10. \<And>x101 x102. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Invoke x101 x102\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
A total of 18 subgoals...
[PROOF STEP]
{
[PROOF STATE]
proof (state)
this:
is_Ref v

goal (18 subgoals):
 1. \<And>x1. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Load x1\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 2. \<And>x2. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Store x2\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 3. \<And>x3. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Push x3\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 4. \<And>x4. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = New x4\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 5. \<And>x51 x52. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Getfield x51 x52\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 6. \<And>x61 x62 x63. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Getstatic x61 x62 x63\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 7. \<And>x71 x72. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Putfield x71 x72\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 8. \<And>x81 x82 x83. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Putstatic x81 x82 x83\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 9. \<And>x9. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Checkcast x9\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 10. \<And>x101 x102. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Invoke x101 x102\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
A total of 18 subgoals...
[PROOF STEP]
assume "v \<noteq> Null"
[PROOF STATE]
proof (state)
this:
v \<noteq> Null

goal (18 subgoals):
 1. \<And>x1. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Load x1\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 2. \<And>x2. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Store x2\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 3. \<And>x3. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Push x3\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 4. \<And>x4. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = New x4\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 5. \<And>x51 x52. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Getfield x51 x52\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 6. \<And>x61 x62 x63. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Getstatic x61 x62 x63\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 7. \<And>x71 x72. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Putfield x71 x72\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 8. \<And>x81 x82 x83. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Putstatic x81 x82 x83\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 9. \<And>x9. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Checkcast x9\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 10. \<And>x101 x102. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Invoke x101 x102\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
A total of 18 subgoals...
[PROOF STEP]
with conf field is_Ref wf
[PROOF STATE]
proof (chain)
picking this:
P,h \<turnstile> v :\<le> Class C
P \<turnstile> C sees F,NonStatic:vT in C
is_Ref v
wf_prog mb P
v \<noteq> Null
[PROOF STEP]
have "\<exists>D vs. h (the_Addr v) = Some (D,vs) \<and> P \<turnstile> D \<preceq>\<^sup>* C"
[PROOF STATE]
proof (prove)
using this:
P,h \<turnstile> v :\<le> Class C
P \<turnstile> C sees F,NonStatic:vT in C
is_Ref v
wf_prog mb P
v \<noteq> Null

goal (1 subgoal):
 1. \<exists>D vs. h (the_Addr v) = \<lfloor>(D, vs)\<rfloor> \<and> P \<turnstile> D \<preceq>\<^sup>* C
[PROOF STEP]
by (auto dest!: non_npD)
[PROOF STATE]
proof (state)
this:
\<exists>D vs. h (the_Addr v) = \<lfloor>(D, vs)\<rfloor> \<and> P \<turnstile> D \<preceq>\<^sup>* C

goal (18 subgoals):
 1. \<And>x1. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Load x1\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 2. \<And>x2. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Store x2\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 3. \<And>x3. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Push x3\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 4. \<And>x4. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = New x4\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 5. \<And>x51 x52. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Getfield x51 x52\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 6. \<And>x61 x62 x63. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Getstatic x61 x62 x63\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 7. \<And>x71 x72. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Putfield x71 x72\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 8. \<And>x81 x82 x83. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Putstatic x81 x82 x83\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 9. \<And>x9. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Checkcast x9\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 10. \<And>x101 x102. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Invoke x101 x102\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
A total of 18 subgoals...
[PROOF STEP]
}
[PROOF STATE]
proof (state)
this:
v \<noteq> Null \<Longrightarrow> \<exists>D vs. h (the_Addr v) = \<lfloor>(D, vs)\<rfloor> \<and> P \<turnstile> D \<preceq>\<^sup>* C

goal (18 subgoals):
 1. \<And>x1. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Load x1\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 2. \<And>x2. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Store x2\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 3. \<And>x3. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Push x3\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 4. \<And>x4. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = New x4\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 5. \<And>x51 x52. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Getfield x51 x52\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 6. \<And>x61 x62 x63. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Getstatic x61 x62 x63\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 7. \<And>x71 x72. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Putfield x71 x72\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 8. \<And>x81 x82 x83. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Putstatic x81 x82 x83\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 9. \<And>x9. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Checkcast x9\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 10. \<And>x101 x102. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Invoke x101 x102\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
A total of 18 subgoals...
[PROOF STEP]
ultimately
[PROOF STATE]
proof (chain)
picking this:
is_Ref v
v \<noteq> Null \<Longrightarrow> \<exists>D vs. h (the_Addr v) = \<lfloor>(D, vs)\<rfloor> \<and> P \<turnstile> D \<preceq>\<^sup>* C
[PROOF STEP]
show ?thesis
[PROOF STATE]
proof (prove)
using this:
is_Ref v
v \<noteq> Null \<Longrightarrow> \<exists>D vs. h (the_Addr v) = \<lfloor>(D, vs)\<rfloor> \<and> P \<turnstile> D \<preceq>\<^sup>* C

goal (1 subgoal):
 1. check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
[PROOF STEP]
using Getfield field stk
        has_field_mono[OF has_visible_field[OF field]] hconfD[OF hconf]
[PROOF STATE]
proof (prove)
using this:
is_Ref v
v \<noteq> Null \<Longrightarrow> \<exists>D vs. h (the_Addr v) = \<lfloor>(D, vs)\<rfloor> \<and> P \<turnstile> D \<preceq>\<^sup>* C
ins ! pc = Getfield F C
P \<turnstile> C sees F,NonStatic:vT in C
stk = v # stk'
P \<turnstile> ?C' \<preceq>\<^sup>* C \<Longrightarrow> P \<turnstile> ?C' has F,NonStatic:vT in C
h ?a = \<lfloor>?obj\<rfloor> \<Longrightarrow> P,h \<turnstile> ?obj \<surd>

goal (1 subgoal):
 1. check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
[PROOF STEP]
by (unfold oconf_def has_field_def) (fastforce dest: has_fields_fun)
[PROOF STATE]
proof (state)
this:
check_instr (ins ! pc) P h stk reg C__ M pc frs' sh

goal (17 subgoals):
 1. \<And>x1. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Load x1\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 2. \<And>x2. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Store x2\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 3. \<And>x3. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Push x3\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 4. \<And>x4. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = New x4\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 5. \<And>x61 x62 x63. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Getstatic x61 x62 x63\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 6. \<And>x71 x72. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Putfield x71 x72\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 7. \<And>x81 x82 x83. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Putstatic x81 x82 x83\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 8. \<And>x9. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Checkcast x9\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 9. \<And>x101 x102. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Invoke x101 x102\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 10. \<And>x111 x112 x113. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Invokestatic x111 x112 x113\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
A total of 17 subgoals...
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (17 subgoals):
 1. \<And>x1. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Load x1\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 2. \<And>x2. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Store x2\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 3. \<And>x3. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Push x3\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 4. \<And>x4. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = New x4\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 5. \<And>x61 x62 x63. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Getstatic x61 x62 x63\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 6. \<And>x71 x72. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Putfield x71 x72\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 7. \<And>x81 x82 x83. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Putstatic x81 x82 x83\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 8. \<And>x9. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Checkcast x9\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 9. \<And>x101 x102. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Invoke x101 x102\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 10. \<And>x111 x112 x113. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Invokestatic x111 x112 x113\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
A total of 17 subgoals...
[PROOF STEP]
case (Getstatic C F D)
[PROOF STATE]
proof (state)
this:
ins ! pc = Getstatic C F D

goal (17 subgoals):
 1. \<And>x1. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Load x1\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 2. \<And>x2. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Store x2\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 3. \<And>x3. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Push x3\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 4. \<And>x4. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = New x4\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 5. \<And>x61 x62 x63. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Getstatic x61 x62 x63\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 6. \<And>x71 x72. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Putfield x71 x72\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 7. \<And>x81 x82 x83. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Putstatic x81 x82 x83\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 8. \<And>x9. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Checkcast x9\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 9. \<And>x101 x102. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Invoke x101 x102\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 10. \<And>x111 x112 x113. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Invokestatic x111 x112 x113\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
A total of 17 subgoals...
[PROOF STEP]
with app stk reg \<Phi>
[PROOF STATE]
proof (chain)
picking this:
xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT)
P,h \<turnstile> stk [:\<le>] ST
P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT
\<Phi> C__ M ! pc = \<lfloor>(ST, LT)\<rfloor>
ins ! pc = Getstatic C F D
[PROOF STEP]
obtain vT where
        field: "P \<turnstile> C sees F,Static:vT in D"
[PROOF STATE]
proof (prove)
using this:
xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT)
P,h \<turnstile> stk [:\<le>] ST
P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT
\<Phi> C__ M ! pc = \<lfloor>(ST, LT)\<rfloor>
ins ! pc = Getstatic C F D

goal (1 subgoal):
 1. (\<And>vT. P \<turnstile> C sees F,Static:vT in D \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
P \<turnstile> C sees F,Static:vT in D

goal (17 subgoals):
 1. \<And>x1. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Load x1\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 2. \<And>x2. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Store x2\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 3. \<And>x3. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Push x3\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 4. \<And>x4. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = New x4\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 5. \<And>x61 x62 x63. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Getstatic x61 x62 x63\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 6. \<And>x71 x72. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Putfield x71 x72\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 7. \<And>x81 x82 x83. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Putstatic x81 x82 x83\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 8. \<And>x9. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Checkcast x9\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 9. \<And>x101 x102. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Invoke x101 x102\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 10. \<And>x111 x112 x113. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Invokestatic x111 x112 x113\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
A total of 17 subgoals...
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
P \<turnstile> C sees F,Static:vT in D
[PROOF STEP]
show ?thesis
[PROOF STATE]
proof (prove)
using this:
P \<turnstile> C sees F,Static:vT in D

goal (1 subgoal):
 1. check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
[PROOF STEP]
using Getstatic stk
        has_field_idemp[OF has_visible_field[OF field]] shconfD[OF shconf]
[PROOF STATE]
proof (prove)
using this:
P \<turnstile> C sees F,Static:vT in D
ins ! pc = Getstatic C F D
P,h \<turnstile> stk [:\<le>] ST
P \<turnstile> D has F,Static:vT in D
sh ?C = \<lfloor>(?sfs, ?i)\<rfloor> \<Longrightarrow> P,h,?C \<turnstile>\<^sub>s ?sfs \<surd>

goal (1 subgoal):
 1. check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
[PROOF STEP]
by (unfold soconf_def has_field_def) (fastforce dest: has_fields_fun)
[PROOF STATE]
proof (state)
this:
check_instr (ins ! pc) P h stk reg C__ M pc frs' sh

goal (16 subgoals):
 1. \<And>x1. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Load x1\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 2. \<And>x2. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Store x2\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 3. \<And>x3. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Push x3\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 4. \<And>x4. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = New x4\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 5. \<And>x71 x72. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Putfield x71 x72\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 6. \<And>x81 x82 x83. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Putstatic x81 x82 x83\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 7. \<And>x9. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Checkcast x9\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 8. \<And>x101 x102. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Invoke x101 x102\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 9. \<And>x111 x112 x113. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Invokestatic x111 x112 x113\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 10. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Return\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
A total of 16 subgoals...
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (16 subgoals):
 1. \<And>x1. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Load x1\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 2. \<And>x2. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Store x2\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 3. \<And>x3. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Push x3\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 4. \<And>x4. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = New x4\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 5. \<And>x71 x72. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Putfield x71 x72\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 6. \<And>x81 x82 x83. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Putstatic x81 x82 x83\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 7. \<And>x9. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Checkcast x9\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 8. \<And>x101 x102. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Invoke x101 x102\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 9. \<And>x111 x112 x113. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Invokestatic x111 x112 x113\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 10. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Return\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
A total of 16 subgoals...
[PROOF STEP]
case (Putfield F C)
[PROOF STATE]
proof (state)
this:
ins ! pc = Putfield F C

goal (16 subgoals):
 1. \<And>x1. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Load x1\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 2. \<And>x2. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Store x2\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 3. \<And>x3. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Push x3\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 4. \<And>x4. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = New x4\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 5. \<And>x71 x72. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Putfield x71 x72\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 6. \<And>x81 x82 x83. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Putstatic x81 x82 x83\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 7. \<And>x9. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Checkcast x9\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 8. \<And>x101 x102. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Invoke x101 x102\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 9. \<And>x111 x112 x113. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Invokestatic x111 x112 x113\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 10. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Return\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
A total of 16 subgoals...
[PROOF STEP]
with app stk reg \<Phi>
[PROOF STATE]
proof (chain)
picking this:
xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT)
P,h \<turnstile> stk [:\<le>] ST
P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT
\<Phi> C__ M ! pc = \<lfloor>(ST, LT)\<rfloor>
ins ! pc = Putfield F C
[PROOF STEP]
obtain v ref vT stk' where
        field: "P \<turnstile> C sees F,NonStatic:vT in C" and
        stk:   "stk = v # ref # stk'" and
        confv: "P,h \<turnstile> v :\<le> vT" and
        confr: "P,h \<turnstile> ref :\<le> Class C"
[PROOF STATE]
proof (prove)
using this:
xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT)
P,h \<turnstile> stk [:\<le>] ST
P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT
\<Phi> C__ M ! pc = \<lfloor>(ST, LT)\<rfloor>
ins ! pc = Putfield F C

goal (1 subgoal):
 1. (\<And>vT v ref stk'. \<lbrakk>P \<turnstile> C sees F,NonStatic:vT in C; stk = v # ref # stk'; P,h \<turnstile> v :\<le> vT; P,h \<turnstile> ref :\<le> Class C\<rbrakk> \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by fastforce
[PROOF STATE]
proof (state)
this:
P \<turnstile> C sees F,NonStatic:vT in C
stk = v # ref # stk'
P,h \<turnstile> v :\<le> vT
P,h \<turnstile> ref :\<le> Class C

goal (16 subgoals):
 1. \<And>x1. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Load x1\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 2. \<And>x2. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Store x2\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 3. \<And>x3. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Push x3\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 4. \<And>x4. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = New x4\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 5. \<And>x71 x72. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Putfield x71 x72\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 6. \<And>x81 x82 x83. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Putstatic x81 x82 x83\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 7. \<And>x9. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Checkcast x9\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 8. \<And>x101 x102. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Invoke x101 x102\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 9. \<And>x111 x112 x113. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Invokestatic x111 x112 x113\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 10. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Return\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
A total of 16 subgoals...
[PROOF STEP]
from confr
[PROOF STATE]
proof (chain)
picking this:
P,h \<turnstile> ref :\<le> Class C
[PROOF STEP]
have is_Ref: "is_Ref ref"
[PROOF STATE]
proof (prove)
using this:
P,h \<turnstile> ref :\<le> Class C

goal (1 subgoal):
 1. is_Ref ref
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
is_Ref ref

goal (16 subgoals):
 1. \<And>x1. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Load x1\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 2. \<And>x2. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Store x2\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 3. \<And>x3. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Push x3\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 4. \<And>x4. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = New x4\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 5. \<And>x71 x72. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Putfield x71 x72\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 6. \<And>x81 x82 x83. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Putstatic x81 x82 x83\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 7. \<And>x9. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Checkcast x9\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 8. \<And>x101 x102. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Invoke x101 x102\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 9. \<And>x111 x112 x113. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Invokestatic x111 x112 x113\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 10. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Return\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
A total of 16 subgoals...
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
is_Ref ref

goal (16 subgoals):
 1. \<And>x1. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Load x1\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 2. \<And>x2. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Store x2\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 3. \<And>x3. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Push x3\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 4. \<And>x4. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = New x4\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 5. \<And>x71 x72. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Putfield x71 x72\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 6. \<And>x81 x82 x83. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Putstatic x81 x82 x83\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 7. \<And>x9. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Checkcast x9\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 8. \<And>x101 x102. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Invoke x101 x102\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 9. \<And>x111 x112 x113. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Invokestatic x111 x112 x113\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 10. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Return\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
A total of 16 subgoals...
[PROOF STEP]
{
[PROOF STATE]
proof (state)
this:
is_Ref ref

goal (16 subgoals):
 1. \<And>x1. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Load x1\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 2. \<And>x2. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Store x2\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 3. \<And>x3. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Push x3\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 4. \<And>x4. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = New x4\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 5. \<And>x71 x72. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Putfield x71 x72\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 6. \<And>x81 x82 x83. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Putstatic x81 x82 x83\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 7. \<And>x9. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Checkcast x9\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 8. \<And>x101 x102. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Invoke x101 x102\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 9. \<And>x111 x112 x113. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Invokestatic x111 x112 x113\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 10. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Return\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
A total of 16 subgoals...
[PROOF STEP]
assume "ref \<noteq> Null"
[PROOF STATE]
proof (state)
this:
ref \<noteq> Null

goal (16 subgoals):
 1. \<And>x1. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Load x1\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 2. \<And>x2. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Store x2\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 3. \<And>x3. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Push x3\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 4. \<And>x4. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = New x4\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 5. \<And>x71 x72. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Putfield x71 x72\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 6. \<And>x81 x82 x83. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Putstatic x81 x82 x83\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 7. \<And>x9. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Checkcast x9\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 8. \<And>x101 x102. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Invoke x101 x102\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 9. \<And>x111 x112 x113. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Invokestatic x111 x112 x113\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 10. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Return\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
A total of 16 subgoals...
[PROOF STEP]
with confr field is_Ref wf
[PROOF STATE]
proof (chain)
picking this:
P,h \<turnstile> ref :\<le> Class C
P \<turnstile> C sees F,NonStatic:vT in C
is_Ref ref
wf_prog mb P
ref \<noteq> Null
[PROOF STEP]
have "\<exists>D vs. h (the_Addr ref) = Some (D,vs) \<and> P \<turnstile> D \<preceq>\<^sup>* C"
[PROOF STATE]
proof (prove)
using this:
P,h \<turnstile> ref :\<le> Class C
P \<turnstile> C sees F,NonStatic:vT in C
is_Ref ref
wf_prog mb P
ref \<noteq> Null

goal (1 subgoal):
 1. \<exists>D vs. h (the_Addr ref) = \<lfloor>(D, vs)\<rfloor> \<and> P \<turnstile> D \<preceq>\<^sup>* C
[PROOF STEP]
by (auto dest: non_npD)
[PROOF STATE]
proof (state)
this:
\<exists>D vs. h (the_Addr ref) = \<lfloor>(D, vs)\<rfloor> \<and> P \<turnstile> D \<preceq>\<^sup>* C

goal (16 subgoals):
 1. \<And>x1. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Load x1\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 2. \<And>x2. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Store x2\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 3. \<And>x3. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Push x3\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 4. \<And>x4. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = New x4\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 5. \<And>x71 x72. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Putfield x71 x72\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 6. \<And>x81 x82 x83. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Putstatic x81 x82 x83\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 7. \<And>x9. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Checkcast x9\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 8. \<And>x101 x102. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Invoke x101 x102\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 9. \<And>x111 x112 x113. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Invokestatic x111 x112 x113\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 10. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Return\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
A total of 16 subgoals...
[PROOF STEP]
}
[PROOF STATE]
proof (state)
this:
ref \<noteq> Null \<Longrightarrow> \<exists>D vs. h (the_Addr ref) = \<lfloor>(D, vs)\<rfloor> \<and> P \<turnstile> D \<preceq>\<^sup>* C

goal (16 subgoals):
 1. \<And>x1. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Load x1\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 2. \<And>x2. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Store x2\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 3. \<And>x3. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Push x3\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 4. \<And>x4. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = New x4\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 5. \<And>x71 x72. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Putfield x71 x72\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 6. \<And>x81 x82 x83. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Putstatic x81 x82 x83\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 7. \<And>x9. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Checkcast x9\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 8. \<And>x101 x102. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Invoke x101 x102\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 9. \<And>x111 x112 x113. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Invokestatic x111 x112 x113\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 10. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Return\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
A total of 16 subgoals...
[PROOF STEP]
ultimately
[PROOF STATE]
proof (chain)
picking this:
is_Ref ref
ref \<noteq> Null \<Longrightarrow> \<exists>D vs. h (the_Addr ref) = \<lfloor>(D, vs)\<rfloor> \<and> P \<turnstile> D \<preceq>\<^sup>* C
[PROOF STEP]
show ?thesis
[PROOF STATE]
proof (prove)
using this:
is_Ref ref
ref \<noteq> Null \<Longrightarrow> \<exists>D vs. h (the_Addr ref) = \<lfloor>(D, vs)\<rfloor> \<and> P \<turnstile> D \<preceq>\<^sup>* C

goal (1 subgoal):
 1. check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
[PROOF STEP]
using Putfield field stk confv
[PROOF STATE]
proof (prove)
using this:
is_Ref ref
ref \<noteq> Null \<Longrightarrow> \<exists>D vs. h (the_Addr ref) = \<lfloor>(D, vs)\<rfloor> \<and> P \<turnstile> D \<preceq>\<^sup>* C
ins ! pc = Putfield F C
P \<turnstile> C sees F,NonStatic:vT in C
stk = v # ref # stk'
P,h \<turnstile> v :\<le> vT

goal (1 subgoal):
 1. check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
[PROOF STEP]
by fastforce
[PROOF STATE]
proof (state)
this:
check_instr (ins ! pc) P h stk reg C__ M pc frs' sh

goal (15 subgoals):
 1. \<And>x1. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Load x1\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 2. \<And>x2. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Store x2\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 3. \<And>x3. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Push x3\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 4. \<And>x4. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = New x4\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 5. \<And>x81 x82 x83. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Putstatic x81 x82 x83\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 6. \<And>x9. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Checkcast x9\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 7. \<And>x101 x102. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Invoke x101 x102\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 8. \<And>x111 x112 x113. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Invokestatic x111 x112 x113\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 9. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Return\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 10. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Pop\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
A total of 15 subgoals...
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (15 subgoals):
 1. \<And>x1. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Load x1\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 2. \<And>x2. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Store x2\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 3. \<And>x3. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Push x3\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 4. \<And>x4. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = New x4\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 5. \<And>x81 x82 x83. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Putstatic x81 x82 x83\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 6. \<And>x9. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Checkcast x9\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 7. \<And>x101 x102. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Invoke x101 x102\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 8. \<And>x111 x112 x113. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Invokestatic x111 x112 x113\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 9. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Return\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 10. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Pop\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
A total of 15 subgoals...
[PROOF STEP]
case (Invoke M' n)
[PROOF STATE]
proof (state)
this:
ins ! pc = Invoke M' n

goal (15 subgoals):
 1. \<And>x1. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Load x1\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 2. \<And>x2. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Store x2\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 3. \<And>x3. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Push x3\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 4. \<And>x4. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = New x4\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 5. \<And>x81 x82 x83. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Putstatic x81 x82 x83\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 6. \<And>x9. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Checkcast x9\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 7. \<And>x101 x102. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Invoke x101 x102\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 8. \<And>x111 x112 x113. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Invokestatic x111 x112 x113\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 9. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Return\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 10. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Pop\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
A total of 15 subgoals...
[PROOF STEP]
with app
[PROOF STATE]
proof (chain)
picking this:
xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT)
ins ! pc = Invoke M' n
[PROOF STEP]
have n: "n < size ST"
[PROOF STATE]
proof (prove)
using this:
xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT)
ins ! pc = Invoke M' n

goal (1 subgoal):
 1. n < length ST
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
n < length ST

goal (15 subgoals):
 1. \<And>x1. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Load x1\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 2. \<And>x2. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Store x2\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 3. \<And>x3. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Push x3\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 4. \<And>x4. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = New x4\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 5. \<And>x81 x82 x83. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Putstatic x81 x82 x83\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 6. \<And>x9. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Checkcast x9\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 7. \<And>x101 x102. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Invoke x101 x102\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 8. \<And>x111 x112 x113. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Invokestatic x111 x112 x113\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 9. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Return\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 10. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Pop\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
A total of 15 subgoals...
[PROOF STEP]
from stk
[PROOF STATE]
proof (chain)
picking this:
P,h \<turnstile> stk [:\<le>] ST
[PROOF STEP]
have [simp]: "size stk = size ST"
[PROOF STATE]
proof (prove)
using this:
P,h \<turnstile> stk [:\<le>] ST

goal (1 subgoal):
 1. length stk = length ST
[PROOF STEP]
by (rule list_all2_lengthD)
[PROOF STATE]
proof (state)
this:
length stk = length ST

goal (15 subgoals):
 1. \<And>x1. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Load x1\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 2. \<And>x2. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Store x2\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 3. \<And>x3. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Push x3\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 4. \<And>x4. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = New x4\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 5. \<And>x81 x82 x83. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Putstatic x81 x82 x83\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 6. \<And>x9. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Checkcast x9\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 7. \<And>x101 x102. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Invoke x101 x102\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 8. \<And>x111 x112 x113. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Invokestatic x111 x112 x113\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 9. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Return\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 10. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Pop\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
A total of 15 subgoals...
[PROOF STEP]
{
[PROOF STATE]
proof (state)
this:
length stk = length ST

goal (15 subgoals):
 1. \<And>x1. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Load x1\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 2. \<And>x2. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Store x2\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 3. \<And>x3. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Push x3\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 4. \<And>x4. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = New x4\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 5. \<And>x81 x82 x83. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Putstatic x81 x82 x83\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 6. \<And>x9. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Checkcast x9\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 7. \<And>x101 x102. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Invoke x101 x102\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 8. \<And>x111 x112 x113. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Invokestatic x111 x112 x113\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 9. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Return\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 10. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Pop\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
A total of 15 subgoals...
[PROOF STEP]
assume "stk!n = Null"
[PROOF STATE]
proof (state)
this:
stk ! n = Null

goal (15 subgoals):
 1. \<And>x1. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Load x1\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 2. \<And>x2. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Store x2\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 3. \<And>x3. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Push x3\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 4. \<And>x4. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = New x4\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 5. \<And>x81 x82 x83. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Putstatic x81 x82 x83\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 6. \<And>x9. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Checkcast x9\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 7. \<And>x101 x102. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Invoke x101 x102\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 8. \<And>x111 x112 x113. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Invokestatic x111 x112 x113\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 9. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Return\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 10. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Pop\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
A total of 15 subgoals...
[PROOF STEP]
with n Invoke
[PROOF STATE]
proof (chain)
picking this:
n < length ST
ins ! pc = Invoke M' n
stk ! n = Null
[PROOF STEP]
have ?thesis
[PROOF STATE]
proof (prove)
using this:
n < length ST
ins ! pc = Invoke M' n
stk ! n = Null

goal (1 subgoal):
 1. check_instr (ins ! pc) P h stk reg C M pc frs' sh
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
check_instr (ins ! pc) P h stk reg C M pc frs' sh

goal (15 subgoals):
 1. \<And>x1. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Load x1\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 2. \<And>x2. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Store x2\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 3. \<And>x3. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Push x3\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 4. \<And>x4. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = New x4\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 5. \<And>x81 x82 x83. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Putstatic x81 x82 x83\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 6. \<And>x9. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Checkcast x9\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 7. \<And>x101 x102. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Invoke x101 x102\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 8. \<And>x111 x112 x113. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Invokestatic x111 x112 x113\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 9. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Return\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 10. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Pop\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
A total of 15 subgoals...
[PROOF STEP]
}
[PROOF STATE]
proof (state)
this:
stk ! n = Null \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh

goal (15 subgoals):
 1. \<And>x1. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Load x1\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 2. \<And>x2. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Store x2\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 3. \<And>x3. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Push x3\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 4. \<And>x4. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = New x4\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 5. \<And>x81 x82 x83. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Putstatic x81 x82 x83\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 6. \<And>x9. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Checkcast x9\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 7. \<And>x101 x102. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Invoke x101 x102\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 8. \<And>x111 x112 x113. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Invokestatic x111 x112 x113\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 9. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Return\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 10. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Pop\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
A total of 15 subgoals...
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
stk ! n = Null \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh

goal (15 subgoals):
 1. \<And>x1. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Load x1\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 2. \<And>x2. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Store x2\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 3. \<And>x3. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Push x3\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 4. \<And>x4. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = New x4\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 5. \<And>x81 x82 x83. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Putstatic x81 x82 x83\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 6. \<And>x9. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Checkcast x9\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 7. \<And>x101 x102. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Invoke x101 x102\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 8. \<And>x111 x112 x113. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Invokestatic x111 x112 x113\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 9. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Return\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 10. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Pop\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
A total of 15 subgoals...
[PROOF STEP]
{
[PROOF STATE]
proof (state)
this:
stk ! n = Null \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh

goal (15 subgoals):
 1. \<And>x1. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Load x1\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 2. \<And>x2. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Store x2\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 3. \<And>x3. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Push x3\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 4. \<And>x4. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = New x4\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 5. \<And>x81 x82 x83. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Putstatic x81 x82 x83\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 6. \<And>x9. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Checkcast x9\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 7. \<And>x101 x102. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Invoke x101 x102\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 8. \<And>x111 x112 x113. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Invokestatic x111 x112 x113\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 9. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Return\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 10. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Pop\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
A total of 15 subgoals...
[PROOF STEP]
assume "ST!n = NT"
[PROOF STATE]
proof (state)
this:
ST ! n = NT

goal (15 subgoals):
 1. \<And>x1. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Load x1\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 2. \<And>x2. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Store x2\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 3. \<And>x3. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Push x3\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 4. \<And>x4. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = New x4\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 5. \<And>x81 x82 x83. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Putstatic x81 x82 x83\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 6. \<And>x9. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Checkcast x9\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 7. \<And>x101 x102. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Invoke x101 x102\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 8. \<And>x111 x112 x113. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Invokestatic x111 x112 x113\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 9. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Return\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 10. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Pop\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
A total of 15 subgoals...
[PROOF STEP]
with n stk
[PROOF STATE]
proof (chain)
picking this:
n < length ST
P,h \<turnstile> stk [:\<le>] ST
ST ! n = NT
[PROOF STEP]
have "stk!n = Null"
[PROOF STATE]
proof (prove)
using this:
n < length ST
P,h \<turnstile> stk [:\<le>] ST
ST ! n = NT

goal (1 subgoal):
 1. stk ! n = Null
[PROOF STEP]
by (auto simp: list_all2_conv_all_nth)
[PROOF STATE]
proof (state)
this:
stk ! n = Null

goal (15 subgoals):
 1. \<And>x1. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Load x1\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 2. \<And>x2. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Store x2\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 3. \<And>x3. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Push x3\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 4. \<And>x4. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = New x4\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 5. \<And>x81 x82 x83. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Putstatic x81 x82 x83\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 6. \<And>x9. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Checkcast x9\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 7. \<And>x101 x102. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Invoke x101 x102\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 8. \<And>x111 x112 x113. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Invokestatic x111 x112 x113\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 9. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Return\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 10. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Pop\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
A total of 15 subgoals...
[PROOF STEP]
with n Invoke
[PROOF STATE]
proof (chain)
picking this:
n < length ST
ins ! pc = Invoke M' n
stk ! n = Null
[PROOF STEP]
have ?thesis
[PROOF STATE]
proof (prove)
using this:
n < length ST
ins ! pc = Invoke M' n
stk ! n = Null

goal (1 subgoal):
 1. check_instr (ins ! pc) P h stk reg C M pc frs' sh
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
check_instr (ins ! pc) P h stk reg C M pc frs' sh

goal (15 subgoals):
 1. \<And>x1. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Load x1\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 2. \<And>x2. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Store x2\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 3. \<And>x3. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Push x3\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 4. \<And>x4. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = New x4\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 5. \<And>x81 x82 x83. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Putstatic x81 x82 x83\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 6. \<And>x9. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Checkcast x9\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 7. \<And>x101 x102. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Invoke x101 x102\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 8. \<And>x111 x112 x113. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Invokestatic x111 x112 x113\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 9. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Return\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 10. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Pop\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
A total of 15 subgoals...
[PROOF STEP]
}
[PROOF STATE]
proof (state)
this:
ST ! n = NT \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh

goal (15 subgoals):
 1. \<And>x1. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Load x1\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 2. \<And>x2. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Store x2\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 3. \<And>x3. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Push x3\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 4. \<And>x4. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = New x4\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 5. \<And>x81 x82 x83. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Putstatic x81 x82 x83\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 6. \<And>x9. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Checkcast x9\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 7. \<And>x101 x102. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Invoke x101 x102\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 8. \<And>x111 x112 x113. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Invokestatic x111 x112 x113\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 9. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Return\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 10. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Pop\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
A total of 15 subgoals...
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
ST ! n = NT \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh

goal (15 subgoals):
 1. \<And>x1. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Load x1\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 2. \<And>x2. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Store x2\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 3. \<And>x3. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Push x3\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 4. \<And>x4. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = New x4\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 5. \<And>x81 x82 x83. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Putstatic x81 x82 x83\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 6. \<And>x9. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Checkcast x9\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 7. \<And>x101 x102. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Invoke x101 x102\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 8. \<And>x111 x112 x113. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Invokestatic x111 x112 x113\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 9. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Return\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 10. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Pop\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
A total of 15 subgoals...
[PROOF STEP]
{
[PROOF STATE]
proof (state)
this:
ST ! n = NT \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh

goal (15 subgoals):
 1. \<And>x1. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Load x1\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 2. \<And>x2. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Store x2\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 3. \<And>x3. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Push x3\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 4. \<And>x4. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = New x4\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 5. \<And>x81 x82 x83. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Putstatic x81 x82 x83\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 6. \<And>x9. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Checkcast x9\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 7. \<And>x101 x102. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Invoke x101 x102\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 8. \<And>x111 x112 x113. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Invokestatic x111 x112 x113\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 9. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Return\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 10. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Pop\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
A total of 15 subgoals...
[PROOF STEP]
assume Null: "stk!n \<noteq> Null" and NT: "ST!n \<noteq> NT"
[PROOF STATE]
proof (state)
this:
stk ! n \<noteq> Null
ST ! n \<noteq> NT

goal (15 subgoals):
 1. \<And>x1. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Load x1\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 2. \<And>x2. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Store x2\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 3. \<And>x3. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Push x3\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 4. \<And>x4. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = New x4\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 5. \<And>x81 x82 x83. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Putstatic x81 x82 x83\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 6. \<And>x9. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Checkcast x9\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 7. \<And>x101 x102. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Invoke x101 x102\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 8. \<And>x111 x112 x113. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Invokestatic x111 x112 x113\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 9. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Return\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 10. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Pop\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
A total of 15 subgoals...
[PROOF STEP]
from NT app Invoke
[PROOF STATE]
proof (chain)
picking this:
ST ! n \<noteq> NT
xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT)
ins ! pc = Invoke M' n
[PROOF STEP]
obtain D D' Ts T m where
          D:  "ST!n = Class D" and
          M': "P \<turnstile> D sees M',NonStatic: Ts\<rightarrow>T = m in D'" and
          Ts: "P \<turnstile> rev (take n ST) [\<le>] Ts"
[PROOF STATE]
proof (prove)
using this:
ST ! n \<noteq> NT
xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT)
ins ! pc = Invoke M' n

goal (1 subgoal):
 1. (\<And>D Ts T m D'. \<lbrakk>ST ! n = Class D; P \<turnstile> D sees M', NonStatic :  Ts\<rightarrow>T = m in D'; P \<turnstile> rev (take n ST) [\<le>] Ts\<rbrakk> \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
ST ! n = Class D
P \<turnstile> D sees M', NonStatic :  Ts\<rightarrow>T = m in D'
P \<turnstile> rev (take n ST) [\<le>] Ts

goal (15 subgoals):
 1. \<And>x1. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = Load x1\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 2. \<And>x2. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = Store x2\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 3. \<And>x3. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = Push x3\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 4. \<And>x4. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = New x4\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 5. \<And>x81 x82 x83. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = Putstatic x81 x82 x83\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 6. \<And>x9. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = Checkcast x9\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 7. \<And>x101 x102. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = Invoke x101 x102\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 8. \<And>x111 x112 x113. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = Invokestatic x111 x112 x113\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 9. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = Return\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 10. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = Pop\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
A total of 15 subgoals...
[PROOF STEP]
from D stk n
[PROOF STATE]
proof (chain)
picking this:
ST ! n = Class D
P,h \<turnstile> stk [:\<le>] ST
n < length ST
[PROOF STEP]
have "P,h \<turnstile> stk!n :\<le> Class D"
[PROOF STATE]
proof (prove)
using this:
ST ! n = Class D
P,h \<turnstile> stk [:\<le>] ST
n < length ST

goal (1 subgoal):
 1. P,h \<turnstile> stk ! n :\<le> Class D
[PROOF STEP]
by (auto simp: list_all2_conv_all_nth)
[PROOF STATE]
proof (state)
this:
P,h \<turnstile> stk ! n :\<le> Class D

goal (15 subgoals):
 1. \<And>x1. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = Load x1\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 2. \<And>x2. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = Store x2\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 3. \<And>x3. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = Push x3\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 4. \<And>x4. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = New x4\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 5. \<And>x81 x82 x83. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = Putstatic x81 x82 x83\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 6. \<And>x9. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = Checkcast x9\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 7. \<And>x101 x102. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = Invoke x101 x102\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 8. \<And>x111 x112 x113. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = Invokestatic x111 x112 x113\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 9. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = Return\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 10. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = Pop\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
A total of 15 subgoals...
[PROOF STEP]
with Null
[PROOF STATE]
proof (chain)
picking this:
stk ! n \<noteq> Null
P,h \<turnstile> stk ! n :\<le> Class D
[PROOF STEP]
obtain a C' fs where
          [simp]: "stk!n = Addr a" "h a = Some (C',fs)" and
          "P \<turnstile> C' \<preceq>\<^sup>* D"
[PROOF STATE]
proof (prove)
using this:
stk ! n \<noteq> Null
P,h \<turnstile> stk ! n :\<le> Class D

goal (1 subgoal):
 1. (\<And>a C' fs. \<lbrakk>stk ! n = Addr a; h a = \<lfloor>(C', fs)\<rfloor>; P \<turnstile> C' \<preceq>\<^sup>* D\<rbrakk> \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by (fastforce dest!: conf_ClassD)
[PROOF STATE]
proof (state)
this:
stk ! n = Addr a
h a = \<lfloor>(C', fs)\<rfloor>
P \<turnstile> C' \<preceq>\<^sup>* D

goal (15 subgoals):
 1. \<And>x1. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = Load x1\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 2. \<And>x2. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = Store x2\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 3. \<And>x3. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = Push x3\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 4. \<And>x4. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = New x4\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 5. \<And>x81 x82 x83. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = Putstatic x81 x82 x83\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 6. \<And>x9. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = Checkcast x9\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 7. \<And>x101 x102. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = Invoke x101 x102\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 8. \<And>x111 x112 x113. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = Invokestatic x111 x112 x113\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 9. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = Return\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 10. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = Pop\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
A total of 15 subgoals...
[PROOF STEP]
with M' wf
[PROOF STATE]
proof (chain)
picking this:
P \<turnstile> D sees M', NonStatic :  Ts\<rightarrow>T = m in D'
wf_prog mb P
stk ! n = Addr a
h a = \<lfloor>(C', fs)\<rfloor>
P \<turnstile> C' \<preceq>\<^sup>* D
[PROOF STEP]
obtain m' Ts' T' D'' where
          C': "P \<turnstile> C' sees M',NonStatic: Ts'\<rightarrow>T' = m' in D''" and
          Ts': "P \<turnstile> Ts [\<le>] Ts'"
[PROOF STATE]
proof (prove)
using this:
P \<turnstile> D sees M', NonStatic :  Ts\<rightarrow>T = m in D'
wf_prog mb P
stk ! n = Addr a
h a = \<lfloor>(C', fs)\<rfloor>
P \<turnstile> C' \<preceq>\<^sup>* D

goal (1 subgoal):
 1. (\<And>Ts' T' m' D''. \<lbrakk>P \<turnstile> C' sees M', NonStatic :  Ts'\<rightarrow>T' = m' in D''; P \<turnstile> Ts [\<le>] Ts'\<rbrakk> \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by (auto dest!: sees_method_mono)
[PROOF STATE]
proof (state)
this:
P \<turnstile> C' sees M', NonStatic :  Ts'\<rightarrow>T' = m' in D''
P \<turnstile> Ts [\<le>] Ts'

goal (15 subgoals):
 1. \<And>x1. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = Load x1\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 2. \<And>x2. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = Store x2\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 3. \<And>x3. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = Push x3\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 4. \<And>x4. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = New x4\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 5. \<And>x81 x82 x83. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = Putstatic x81 x82 x83\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 6. \<And>x9. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = Checkcast x9\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 7. \<And>x101 x102. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = Invoke x101 x102\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 8. \<And>x111 x112 x113. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = Invokestatic x111 x112 x113\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 9. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = Return\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 10. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = Pop\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
A total of 15 subgoals...
[PROOF STEP]
from stk
[PROOF STATE]
proof (chain)
picking this:
P,h \<turnstile> stk [:\<le>] ST
[PROOF STEP]
have "P,h \<turnstile> take n stk [:\<le>] take n ST"
[PROOF STATE]
proof (prove)
using this:
P,h \<turnstile> stk [:\<le>] ST

goal (1 subgoal):
 1. P,h \<turnstile> take n stk [:\<le>] take n ST
[PROOF STEP]
..
[PROOF STATE]
proof (state)
this:
P,h \<turnstile> take n stk [:\<le>] take n ST

goal (15 subgoals):
 1. \<And>x1. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = Load x1\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 2. \<And>x2. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = Store x2\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 3. \<And>x3. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = Push x3\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 4. \<And>x4. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = New x4\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 5. \<And>x81 x82 x83. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = Putstatic x81 x82 x83\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 6. \<And>x9. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = Checkcast x9\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 7. \<And>x101 x102. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = Invoke x101 x102\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 8. \<And>x111 x112 x113. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = Invokestatic x111 x112 x113\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 9. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = Return\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 10. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = Pop\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
A total of 15 subgoals...
[PROOF STEP]
hence "P,h \<turnstile> rev (take n stk) [:\<le>] rev (take n ST)"
[PROOF STATE]
proof (prove)
using this:
P,h \<turnstile> take n stk [:\<le>] take n ST

goal (1 subgoal):
 1. P,h \<turnstile> rev (take n stk) [:\<le>] rev (take n ST)
[PROOF STEP]
..
[PROOF STATE]
proof (state)
this:
P,h \<turnstile> rev (take n stk) [:\<le>] rev (take n ST)

goal (15 subgoals):
 1. \<And>x1. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = Load x1\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 2. \<And>x2. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = Store x2\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 3. \<And>x3. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = Push x3\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 4. \<And>x4. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = New x4\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 5. \<And>x81 x82 x83. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = Putstatic x81 x82 x83\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 6. \<And>x9. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = Checkcast x9\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 7. \<And>x101 x102. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = Invoke x101 x102\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 8. \<And>x111 x112 x113. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = Invokestatic x111 x112 x113\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 9. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = Return\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 10. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = Pop\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
A total of 15 subgoals...
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
P,h \<turnstile> rev (take n stk) [:\<le>] rev (take n ST)

goal (15 subgoals):
 1. \<And>x1. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = Load x1\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 2. \<And>x2. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = Store x2\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 3. \<And>x3. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = Push x3\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 4. \<And>x4. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = New x4\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 5. \<And>x81 x82 x83. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = Putstatic x81 x82 x83\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 6. \<And>x9. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = Checkcast x9\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 7. \<And>x101 x102. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = Invoke x101 x102\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 8. \<And>x111 x112 x113. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = Invokestatic x111 x112 x113\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 9. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = Return\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 10. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = Pop\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
A total of 15 subgoals...
[PROOF STEP]
note Ts
[PROOF STATE]
proof (state)
this:
P \<turnstile> rev (take n ST) [\<le>] Ts

goal (15 subgoals):
 1. \<And>x1. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = Load x1\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 2. \<And>x2. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = Store x2\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 3. \<And>x3. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = Push x3\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 4. \<And>x4. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = New x4\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 5. \<And>x81 x82 x83. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = Putstatic x81 x82 x83\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 6. \<And>x9. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = Checkcast x9\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 7. \<And>x101 x102. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = Invoke x101 x102\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 8. \<And>x111 x112 x113. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = Invokestatic x111 x112 x113\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 9. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = Return\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 10. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = Pop\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
A total of 15 subgoals...
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
P \<turnstile> rev (take n ST) [\<le>] Ts

goal (15 subgoals):
 1. \<And>x1. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = Load x1\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 2. \<And>x2. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = Store x2\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 3. \<And>x3. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = Push x3\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 4. \<And>x4. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = New x4\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 5. \<And>x81 x82 x83. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = Putstatic x81 x82 x83\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 6. \<And>x9. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = Checkcast x9\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 7. \<And>x101 x102. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = Invoke x101 x102\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 8. \<And>x111 x112 x113. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = Invokestatic x111 x112 x113\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 9. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = Return\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 10. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = Pop\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
A total of 15 subgoals...
[PROOF STEP]
note Ts'
[PROOF STATE]
proof (state)
this:
P \<turnstile> Ts [\<le>] Ts'

goal (15 subgoals):
 1. \<And>x1. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = Load x1\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 2. \<And>x2. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = Store x2\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 3. \<And>x3. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = Push x3\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 4. \<And>x4. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = New x4\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 5. \<And>x81 x82 x83. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = Putstatic x81 x82 x83\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 6. \<And>x9. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = Checkcast x9\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 7. \<And>x101 x102. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = Invoke x101 x102\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 8. \<And>x111 x112 x113. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = Invokestatic x111 x112 x113\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 9. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = Return\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 10. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = Pop\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
A total of 15 subgoals...
[PROOF STEP]
finally
[PROOF STATE]
proof (chain)
picking this:
P,h \<turnstile> rev (take n stk) [:\<le>] Ts'
[PROOF STEP]
have "P,h \<turnstile> rev (take n stk) [:\<le>] Ts'"
[PROOF STATE]
proof (prove)
using this:
P,h \<turnstile> rev (take n stk) [:\<le>] Ts'

goal (1 subgoal):
 1. P,h \<turnstile> rev (take n stk) [:\<le>] Ts'
[PROOF STEP]
.
[PROOF STATE]
proof (state)
this:
P,h \<turnstile> rev (take n stk) [:\<le>] Ts'

goal (15 subgoals):
 1. \<And>x1. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = Load x1\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 2. \<And>x2. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = Store x2\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 3. \<And>x3. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = Push x3\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 4. \<And>x4. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = New x4\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 5. \<And>x81 x82 x83. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = Putstatic x81 x82 x83\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 6. \<And>x9. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = Checkcast x9\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 7. \<And>x101 x102. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = Invoke x101 x102\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 8. \<And>x111 x112 x113. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = Invokestatic x111 x112 x113\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 9. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = Return\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 10. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = Pop\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
A total of 15 subgoals...
[PROOF STEP]
with Invoke Null n C'
[PROOF STATE]
proof (chain)
picking this:
ins ! pc = Invoke M' n
stk ! n \<noteq> Null
n < length ST
P \<turnstile> C' sees M', NonStatic :  Ts'\<rightarrow>T' = m' in D''
P,h \<turnstile> rev (take n stk) [:\<le>] Ts'
[PROOF STEP]
have ?thesis
[PROOF STATE]
proof (prove)
using this:
ins ! pc = Invoke M' n
stk ! n \<noteq> Null
n < length ST
P \<turnstile> C' sees M', NonStatic :  Ts'\<rightarrow>T' = m' in D''
P,h \<turnstile> rev (take n stk) [:\<le>] Ts'

goal (1 subgoal):
 1. check_instr (ins ! pc) P h stk reg C M pc frs' sh
[PROOF STEP]
by (auto simp add: is_Ref_def2 has_methodI)
[PROOF STATE]
proof (state)
this:
check_instr (ins ! pc) P h stk reg C M pc frs' sh

goal (15 subgoals):
 1. \<And>x1. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = Load x1\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 2. \<And>x2. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = Store x2\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 3. \<And>x3. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = Push x3\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 4. \<And>x4. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = New x4\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 5. \<And>x81 x82 x83. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = Putstatic x81 x82 x83\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 6. \<And>x9. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = Checkcast x9\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 7. \<And>x101 x102. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = Invoke x101 x102\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 8. \<And>x111 x112 x113. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = Invokestatic x111 x112 x113\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 9. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = Return\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 10. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = Pop\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
A total of 15 subgoals...
[PROOF STEP]
}
[PROOF STATE]
proof (state)
this:
\<lbrakk>stk ! n \<noteq> Null; ST ! n \<noteq> NT\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh

goal (15 subgoals):
 1. \<And>x1. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Load x1\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 2. \<And>x2. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Store x2\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 3. \<And>x3. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Push x3\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 4. \<And>x4. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = New x4\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 5. \<And>x81 x82 x83. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Putstatic x81 x82 x83\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 6. \<And>x9. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Checkcast x9\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 7. \<And>x101 x102. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Invoke x101 x102\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 8. \<And>x111 x112 x113. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Invokestatic x111 x112 x113\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 9. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Return\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 10. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Pop\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
A total of 15 subgoals...
[PROOF STEP]
ultimately
[PROOF STATE]
proof (chain)
picking this:
stk ! n = Null \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
ST ! n = NT \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
\<lbrakk>stk ! n \<noteq> Null; ST ! n \<noteq> NT\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
[PROOF STEP]
show ?thesis
[PROOF STATE]
proof (prove)
using this:
stk ! n = Null \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
ST ! n = NT \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
\<lbrakk>stk ! n \<noteq> Null; ST ! n \<noteq> NT\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh

goal (1 subgoal):
 1. check_instr (ins ! pc) P h stk reg C M pc frs' sh
[PROOF STEP]
by blast
[PROOF STATE]
proof (state)
this:
check_instr (ins ! pc) P h stk reg C M pc frs' sh

goal (14 subgoals):
 1. \<And>x1. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Load x1\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 2. \<And>x2. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Store x2\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 3. \<And>x3. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Push x3\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 4. \<And>x4. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = New x4\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 5. \<And>x81 x82 x83. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Putstatic x81 x82 x83\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 6. \<And>x9. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Checkcast x9\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 7. \<And>x111 x112 x113. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Invokestatic x111 x112 x113\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 8. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Return\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 9. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Pop\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 10. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = IAdd\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
A total of 14 subgoals...
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (14 subgoals):
 1. \<And>x1. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Load x1\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 2. \<And>x2. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Store x2\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 3. \<And>x3. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Push x3\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 4. \<And>x4. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = New x4\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 5. \<And>x81 x82 x83. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Putstatic x81 x82 x83\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 6. \<And>x9. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Checkcast x9\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 7. \<And>x111 x112 x113. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Invokestatic x111 x112 x113\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 8. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Return\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 9. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Pop\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 10. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = IAdd\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
A total of 14 subgoals...
[PROOF STEP]
case (Invokestatic C M' n)
[PROOF STATE]
proof (state)
this:
ins ! pc = Invokestatic C M' n

goal (14 subgoals):
 1. \<And>x1. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Load x1\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 2. \<And>x2. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Store x2\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 3. \<And>x3. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Push x3\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 4. \<And>x4. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = New x4\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 5. \<And>x81 x82 x83. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Putstatic x81 x82 x83\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 6. \<And>x9. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Checkcast x9\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 7. \<And>x111 x112 x113. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Invokestatic x111 x112 x113\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 8. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Return\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 9. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Pop\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 10. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = IAdd\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
A total of 14 subgoals...
[PROOF STEP]
with app
[PROOF STATE]
proof (chain)
picking this:
xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT)
ins ! pc = Invokestatic C M' n
[PROOF STEP]
have n: "n \<le> size ST"
[PROOF STATE]
proof (prove)
using this:
xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT)
ins ! pc = Invokestatic C M' n

goal (1 subgoal):
 1. n \<le> length ST
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
n \<le> length ST

goal (14 subgoals):
 1. \<And>x1. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Load x1\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 2. \<And>x2. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Store x2\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 3. \<And>x3. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Push x3\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 4. \<And>x4. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = New x4\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 5. \<And>x81 x82 x83. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Putstatic x81 x82 x83\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 6. \<And>x9. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Checkcast x9\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 7. \<And>x111 x112 x113. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Invokestatic x111 x112 x113\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 8. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Return\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 9. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Pop\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 10. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = IAdd\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
A total of 14 subgoals...
[PROOF STEP]
from stk
[PROOF STATE]
proof (chain)
picking this:
P,h \<turnstile> stk [:\<le>] ST
[PROOF STEP]
have [simp]: "size stk = size ST"
[PROOF STATE]
proof (prove)
using this:
P,h \<turnstile> stk [:\<le>] ST

goal (1 subgoal):
 1. length stk = length ST
[PROOF STEP]
by (rule list_all2_lengthD)
[PROOF STATE]
proof (state)
this:
length stk = length ST

goal (14 subgoals):
 1. \<And>x1. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Load x1\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 2. \<And>x2. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Store x2\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 3. \<And>x3. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Push x3\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 4. \<And>x4. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = New x4\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 5. \<And>x81 x82 x83. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Putstatic x81 x82 x83\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 6. \<And>x9. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Checkcast x9\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 7. \<And>x111 x112 x113. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Invokestatic x111 x112 x113\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 8. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Return\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 9. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Pop\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 10. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = IAdd\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
A total of 14 subgoals...
[PROOF STEP]
from app Invokestatic
[PROOF STATE]
proof (chain)
picking this:
xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT)
ins ! pc = Invokestatic C M' n
[PROOF STEP]
obtain D Ts T m where
        M': "P \<turnstile> C sees M',Static: Ts\<rightarrow>T = m in D" and
        Ts: "P \<turnstile> rev (take n ST) [\<le>] Ts"
[PROOF STATE]
proof (prove)
using this:
xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT)
ins ! pc = Invokestatic C M' n

goal (1 subgoal):
 1. (\<And>Ts T m D. \<lbrakk>P \<turnstile> C sees M', Static :  Ts\<rightarrow>T = m in D; P \<turnstile> rev (take n ST) [\<le>] Ts\<rbrakk> \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
P \<turnstile> C sees M', Static :  Ts\<rightarrow>T = m in D
P \<turnstile> rev (take n ST) [\<le>] Ts

goal (14 subgoals):
 1. \<And>x1. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = Load x1\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 2. \<And>x2. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = Store x2\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 3. \<And>x3. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = Push x3\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 4. \<And>x4. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = New x4\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 5. \<And>x81 x82 x83. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = Putstatic x81 x82 x83\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 6. \<And>x9. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = Checkcast x9\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 7. \<And>x111 x112 x113. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = Invokestatic x111 x112 x113\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 8. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = Return\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 9. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = Pop\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 10. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = IAdd\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
A total of 14 subgoals...
[PROOF STEP]
from stk
[PROOF STATE]
proof (chain)
picking this:
P,h \<turnstile> stk [:\<le>] ST
[PROOF STEP]
have "P,h \<turnstile> take n stk [:\<le>] take n ST"
[PROOF STATE]
proof (prove)
using this:
P,h \<turnstile> stk [:\<le>] ST

goal (1 subgoal):
 1. P,h \<turnstile> take n stk [:\<le>] take n ST
[PROOF STEP]
..
[PROOF STATE]
proof (state)
this:
P,h \<turnstile> take n stk [:\<le>] take n ST

goal (14 subgoals):
 1. \<And>x1. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = Load x1\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 2. \<And>x2. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = Store x2\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 3. \<And>x3. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = Push x3\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 4. \<And>x4. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = New x4\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 5. \<And>x81 x82 x83. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = Putstatic x81 x82 x83\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 6. \<And>x9. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = Checkcast x9\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 7. \<And>x111 x112 x113. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = Invokestatic x111 x112 x113\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 8. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = Return\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 9. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = Pop\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 10. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = IAdd\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
A total of 14 subgoals...
[PROOF STEP]
hence "P,h \<turnstile> rev (take n stk) [:\<le>] rev (take n ST)"
[PROOF STATE]
proof (prove)
using this:
P,h \<turnstile> take n stk [:\<le>] take n ST

goal (1 subgoal):
 1. P,h \<turnstile> rev (take n stk) [:\<le>] rev (take n ST)
[PROOF STEP]
..
[PROOF STATE]
proof (state)
this:
P,h \<turnstile> rev (take n stk) [:\<le>] rev (take n ST)

goal (14 subgoals):
 1. \<And>x1. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = Load x1\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 2. \<And>x2. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = Store x2\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 3. \<And>x3. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = Push x3\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 4. \<And>x4. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = New x4\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 5. \<And>x81 x82 x83. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = Putstatic x81 x82 x83\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 6. \<And>x9. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = Checkcast x9\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 7. \<And>x111 x112 x113. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = Invokestatic x111 x112 x113\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 8. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = Return\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 9. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = Pop\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 10. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = IAdd\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
A total of 14 subgoals...
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
P,h \<turnstile> rev (take n stk) [:\<le>] rev (take n ST)

goal (14 subgoals):
 1. \<And>x1. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = Load x1\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 2. \<And>x2. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = Store x2\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 3. \<And>x3. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = Push x3\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 4. \<And>x4. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = New x4\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 5. \<And>x81 x82 x83. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = Putstatic x81 x82 x83\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 6. \<And>x9. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = Checkcast x9\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 7. \<And>x111 x112 x113. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = Invokestatic x111 x112 x113\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 8. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = Return\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 9. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = Pop\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 10. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = IAdd\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
A total of 14 subgoals...
[PROOF STEP]
note Ts
[PROOF STATE]
proof (state)
this:
P \<turnstile> rev (take n ST) [\<le>] Ts

goal (14 subgoals):
 1. \<And>x1. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = Load x1\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 2. \<And>x2. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = Store x2\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 3. \<And>x3. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = Push x3\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 4. \<And>x4. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = New x4\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 5. \<And>x81 x82 x83. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = Putstatic x81 x82 x83\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 6. \<And>x9. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = Checkcast x9\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 7. \<And>x111 x112 x113. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = Invokestatic x111 x112 x113\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 8. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = Return\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 9. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = Pop\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 10. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = IAdd\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
A total of 14 subgoals...
[PROOF STEP]
finally
[PROOF STATE]
proof (chain)
picking this:
P,h \<turnstile> rev (take n stk) [:\<le>] Ts
[PROOF STEP]
have "P,h \<turnstile> rev (take n stk) [:\<le>] Ts"
[PROOF STATE]
proof (prove)
using this:
P,h \<turnstile> rev (take n stk) [:\<le>] Ts

goal (1 subgoal):
 1. P,h \<turnstile> rev (take n stk) [:\<le>] Ts
[PROOF STEP]
.
[PROOF STATE]
proof (state)
this:
P,h \<turnstile> rev (take n stk) [:\<le>] Ts

goal (14 subgoals):
 1. \<And>x1. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = Load x1\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 2. \<And>x2. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = Store x2\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 3. \<And>x3. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = Push x3\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 4. \<And>x4. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = New x4\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 5. \<And>x81 x82 x83. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = Putstatic x81 x82 x83\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 6. \<And>x9. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = Checkcast x9\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 7. \<And>x111 x112 x113. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = Invokestatic x111 x112 x113\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 8. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = Return\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 9. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = Pop\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 10. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = IAdd\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
A total of 14 subgoals...
[PROOF STEP]
with Invokestatic n M'
[PROOF STATE]
proof (chain)
picking this:
ins ! pc = Invokestatic C M' n
n \<le> length ST
P \<turnstile> C sees M', Static :  Ts\<rightarrow>T = m in D
P,h \<turnstile> rev (take n stk) [:\<le>] Ts
[PROOF STEP]
show ?thesis
[PROOF STATE]
proof (prove)
using this:
ins ! pc = Invokestatic C M' n
n \<le> length ST
P \<turnstile> C sees M', Static :  Ts\<rightarrow>T = m in D
P,h \<turnstile> rev (take n stk) [:\<le>] Ts

goal (1 subgoal):
 1. check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
[PROOF STEP]
by (auto simp add: is_Ref_def2 has_methodI)
[PROOF STATE]
proof (state)
this:
check_instr (ins ! pc) P h stk reg C__ M pc frs' sh

goal (13 subgoals):
 1. \<And>x1. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = Load x1\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 2. \<And>x2. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = Store x2\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 3. \<And>x3. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = Push x3\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 4. \<And>x4. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = New x4\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 5. \<And>x81 x82 x83. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = Putstatic x81 x82 x83\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 6. \<And>x9. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = Checkcast x9\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 7. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = Return\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 8. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = Pop\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 9. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = IAdd\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
 10. \<And>x15. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C__ M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T__, ST, LT); ins ! pc = Goto x15\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C__ M pc frs' sh
A total of 13 subgoals...
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (13 subgoals):
 1. \<And>x1. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Load x1\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 2. \<And>x2. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Store x2\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 3. \<And>x3. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Push x3\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 4. \<And>x4. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = New x4\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 5. \<And>x81 x82 x83. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Putstatic x81 x82 x83\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 6. \<And>x9. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Checkcast x9\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 7. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Return\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 8. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Pop\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 9. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = IAdd\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 10. \<And>x15. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Goto x15\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
A total of 13 subgoals...
[PROOF STEP]
case Return
[PROOF STATE]
proof (state)
this:
ins ! pc = Return

goal (13 subgoals):
 1. \<And>x1. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Load x1\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 2. \<And>x2. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Store x2\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 3. \<And>x3. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Push x3\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 4. \<And>x4. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = New x4\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 5. \<And>x81 x82 x83. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Putstatic x81 x82 x83\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 6. \<And>x9. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Checkcast x9\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 7. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Return\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 8. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Pop\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 9. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = IAdd\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 10. \<And>x15. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Goto x15\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
A total of 13 subgoals...
[PROOF STEP]
show ?thesis
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. check_instr (ins ! pc) P h stk reg C M pc frs' sh
[PROOF STEP]
proof(cases "M = clinit")
[PROOF STATE]
proof (state)
goal (2 subgoals):
 1. M = clinit \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 2. M \<noteq> clinit \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
[PROOF STEP]
case True
[PROOF STATE]
proof (state)
this:
M = clinit

goal (2 subgoals):
 1. M = clinit \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 2. M \<noteq> clinit \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
[PROOF STEP]
have "is_class P C"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. is_class P C
[PROOF STEP]
by(rule sees_method_is_class[OF meth])
[PROOF STATE]
proof (state)
this:
is_class P C

goal (2 subgoals):
 1. M = clinit \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 2. M \<noteq> clinit \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
[PROOF STEP]
with wf_sees_clinit[OF wf]
[PROOF STATE]
proof (chain)
picking this:
class P ?C = \<lfloor>?a\<rfloor> \<Longrightarrow> \<exists>m. P \<turnstile> ?C sees clinit, Static :  []\<rightarrow>Void = m in ?C
is_class P C
[PROOF STEP]
obtain m where "P \<turnstile> C sees clinit,Static: [] \<rightarrow> Void = m in C"
[PROOF STATE]
proof (prove)
using this:
class P ?C = \<lfloor>?a\<rfloor> \<Longrightarrow> \<exists>m. P \<turnstile> ?C sees clinit, Static :  []\<rightarrow>Void = m in ?C
is_class P C

goal (1 subgoal):
 1. (\<And>m. P \<turnstile> C sees clinit, Static :  []\<rightarrow>Void = m in C \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by(fastforce simp: is_class_def)
[PROOF STATE]
proof (state)
this:
P \<turnstile> C sees clinit, Static :  []\<rightarrow>Void = m in C

goal (2 subgoals):
 1. M = clinit \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 2. M \<noteq> clinit \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
[PROOF STEP]
with stk app \<Phi> meth frames True Return
[PROOF STATE]
proof (chain)
picking this:
P,h \<turnstile> stk [:\<le>] ST
xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT)
\<Phi> C M ! pc = \<lfloor>(ST, LT)\<rfloor>
P \<turnstile> C sees M, b :  Ts\<rightarrow>T = (mxs, mxl, ins, xt) in C
conf_fs P h sh \<Phi> C M (length Ts) T frs'
M = clinit
ins ! pc = Return
P \<turnstile> C sees clinit, Static :  []\<rightarrow>Void = m in C
[PROOF STEP]
show ?thesis
[PROOF STATE]
proof (prove)
using this:
P,h \<turnstile> stk [:\<le>] ST
xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT)
\<Phi> C M ! pc = \<lfloor>(ST, LT)\<rfloor>
P \<turnstile> C sees M, b :  Ts\<rightarrow>T = (mxs, mxl, ins, xt) in C
conf_fs P h sh \<Phi> C M (length Ts) T frs'
M = clinit
ins ! pc = Return
P \<turnstile> C sees clinit, Static :  []\<rightarrow>Void = m in C

goal (1 subgoal):
 1. check_instr (ins ! pc) P h stk reg C M pc frs' sh
[PROOF STEP]
by (auto simp add: has_methodI)
[PROOF STATE]
proof (state)
this:
check_instr (ins ! pc) P h stk reg C M pc frs' sh

goal (1 subgoal):
 1. M \<noteq> clinit \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. M \<noteq> clinit \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
[PROOF STEP]
case False
[PROOF STATE]
proof (state)
this:
M \<noteq> clinit

goal (1 subgoal):
 1. M \<noteq> clinit \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
[PROOF STEP]
with stk app \<Phi> meth frames Return
[PROOF STATE]
proof (chain)
picking this:
P,h \<turnstile> stk [:\<le>] ST
xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT)
\<Phi> C M ! pc = \<lfloor>(ST, LT)\<rfloor>
P \<turnstile> C sees M, b :  Ts\<rightarrow>T = (mxs, mxl, ins, xt) in C
conf_fs P h sh \<Phi> C M (length Ts) T frs'
ins ! pc = Return
M \<noteq> clinit
[PROOF STEP]
show ?thesis
[PROOF STATE]
proof (prove)
using this:
P,h \<turnstile> stk [:\<le>] ST
xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT)
\<Phi> C M ! pc = \<lfloor>(ST, LT)\<rfloor>
P \<turnstile> C sees M, b :  Ts\<rightarrow>T = (mxs, mxl, ins, xt) in C
conf_fs P h sh \<Phi> C M (length Ts) T frs'
ins ! pc = Return
M \<noteq> clinit

goal (1 subgoal):
 1. check_instr (ins ! pc) P h stk reg C M pc frs' sh
[PROOF STEP]
by (auto intro: has_methodI)
[PROOF STATE]
proof (state)
this:
check_instr (ins ! pc) P h stk reg C M pc frs' sh

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
check_instr (ins ! pc) P h stk reg C M pc frs' sh

goal (12 subgoals):
 1. \<And>x1. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Load x1\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 2. \<And>x2. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Store x2\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 3. \<And>x3. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Push x3\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 4. \<And>x4. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = New x4\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 5. \<And>x81 x82 x83. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Putstatic x81 x82 x83\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 6. \<And>x9. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Checkcast x9\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 7. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Pop\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 8. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = IAdd\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 9. \<And>x15. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = Goto x15\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
 10. \<lbrakk>\<forall>(pc', s')\<in>set (eff (ins ! pc) P pc xt (\<Phi> C M ! pc)). pc' < length ins; P,h \<turnstile> stk [:\<le>] ST; P,h \<turnstile> reg [:\<le>\<^sub>\<top>] LT; xcpt_app (ins ! pc) P pc mxs xt (ST, LT) \<and> app\<^sub>i (ins ! pc, P, pc, mxs, T, ST, LT); ins ! pc = CmpEq\<rbrakk> \<Longrightarrow> check_instr (ins ! pc) P h stk reg C M pc frs' sh
A total of 12 subgoals...
[PROOF STEP]
qed (auto simp add: list_all2_lengthD)
[PROOF STATE]
proof (state)
this:
check_instr (ins ! pc) P h stk reg C M pc frs' sh

goal (1 subgoal):
 1. exec_d P \<sigma> \<noteq> TypeError
[PROOF STEP]
hence "check P \<sigma>"
[PROOF STATE]
proof (prove)
using this:
check_instr (ins ! pc) P h stk reg C M pc frs' sh

goal (1 subgoal):
 1. check P \<sigma>
[PROOF STEP]
using meth pc mxs
[PROOF STATE]
proof (prove)
using this:
check_instr (ins ! pc) P h stk reg C M pc frs' sh
P \<turnstile> C sees M, b :  Ts\<rightarrow>T = (mxs, mxl, ins, xt) in C
pc < length ins
length stk \<le> mxs

goal (1 subgoal):
 1. check P \<sigma>
[PROOF STEP]
by (auto simp: check_def intro: has_methodI)
[PROOF STATE]
proof (state)
this:
check P \<sigma>

goal (1 subgoal):
 1. exec_d P \<sigma> \<noteq> TypeError
[PROOF STEP]
}
[PROOF STATE]
proof (state)
this:
\<not> (xcp \<noteq> None \<or> frs = []) \<Longrightarrow> check P \<sigma>

goal (1 subgoal):
 1. exec_d P \<sigma> \<noteq> TypeError
[PROOF STEP]
ultimately
[PROOF STATE]
proof (chain)
picking this:
xcp \<noteq> None \<or> frs = [] \<Longrightarrow> check P \<sigma>
\<not> (xcp \<noteq> None \<or> frs = []) \<Longrightarrow> check P \<sigma>
[PROOF STEP]
have "check P \<sigma>"
[PROOF STATE]
proof (prove)
using this:
xcp \<noteq> None \<or> frs = [] \<Longrightarrow> check P \<sigma>
\<not> (xcp \<noteq> None \<or> frs = []) \<Longrightarrow> check P \<sigma>

goal (1 subgoal):
 1. check P \<sigma>
[PROOF STEP]
by blast
[PROOF STATE]
proof (state)
this:
check P \<sigma>

goal (1 subgoal):
 1. exec_d P \<sigma> \<noteq> TypeError
[PROOF STEP]
thus "exec_d P \<sigma> \<noteq> TypeError"
[PROOF STATE]
proof (prove)
using this:
check P \<sigma>

goal (1 subgoal):
 1. exec_d P \<sigma> \<noteq> TypeError
[PROOF STEP]
..
[PROOF STATE]
proof (state)
this:
exec_d P \<sigma> \<noteq> TypeError

goal:
No subgoals!
[PROOF STEP]
qed