[STATEMENT]
lemma "app (Fn g) y = g y"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. app (Fn g) y = g y
[PROOF STEP]
nitpick [expect = none]
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. app (Fn g) y = g y
[PROOF STEP]
sorry


[STATEMENT]
lemma nuc_Inf_closed: "nucleus f \<Longrightarrow> Sup_closed_set (Fix f)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. nucleus f \<Longrightarrow> Sup_closed_set (Fix f)
[PROOF STEP]
(* nitpick *)
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. nucleus f \<Longrightarrow> Sup_closed_set (Fix f)
[PROOF STEP]
oops


[STATEMENT]
lemma "P"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. P
[PROOF STEP]
apply (recursion_example "(A \<and> D) \<and> (B \<and> C)")
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. P
[PROOF STEP]
oops


[STATEMENT]
lemma Call_type_sound:
 "[| wf_java_prog G; a' \<noteq> Null; Norm (h, l)::\<preceq>(G, lT); class G C = Some y;
     max_spec G C (mn,pTsa) = {((mda,rTa),pTs')}; xc\<le>|xh; xh\<le>|h;
     list_all2 (conf G h) pvs pTsa;
     (md, rT, pns, lvars, blk, res) =
               the (method (G,fst (the (h (the_Addr a')))) (mn, pTs'));
  \<forall>lT. (np a' None, h, init_vars lvars(pns[\<mapsto>]pvs)(This\<mapsto>a'))::\<preceq>(G, lT) -->
  (G, lT)\<turnstile>blk\<surd> -->  h\<le>|xi \<and>  (xcptb, xi, xl)::\<preceq>(G, lT);
  \<forall>lT. (xcptb,xi, xl)::\<preceq>(G, lT) --> (\<forall>T. (G, lT)\<turnstile>res::T -->
          xi\<le>|h' \<and> (x',h', xj)::\<preceq>(G, lT) \<and> (x' = None --> G,h'\<turnstile>v::\<preceq>T));
  G,xh\<turnstile>a'::\<preceq> Class C
  |] ==>
  xc\<le>|h' \<and> (x',(h', l))::\<preceq>(G, lT) \<and>  (x' = None --> G,h'\<turnstile>v::\<preceq>rTa)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<lbrakk>wf_java_prog G; a' \<noteq> Null; Norm (h, l) ::\<preceq> (G, lT); class G C = Some y; max_spec G C (mn, pTsa) = {((mda, rTa), pTs')}; xc \<le>| xh; xh \<le>| h; list_all2 (conf G h) pvs pTsa; (md, rT, pns, lvars, blk, res) = the (method (G, cname_of h a') (mn, pTs')); \<forall>lT. (np a' None, h, init_vars lvars(pns [\<mapsto>] pvs, This \<mapsto> a')) ::\<preceq> (G, lT) \<longrightarrow> (G, lT) \<turnstile> blk \<surd> \<longrightarrow> h \<le>| xi \<and> (xcptb, xi, xl) ::\<preceq> (G, lT); \<forall>lT. (xcptb, xi, xl) ::\<preceq> (G, lT) \<longrightarrow> (\<forall>T. (G, lT) \<turnstile> res :: T \<longrightarrow> xi \<le>| h' \<and> (x', h', xj) ::\<preceq> (G, lT) \<and> (x' = None \<longrightarrow> G,h' \<turnstile> v ::\<preceq> T)); G,xh \<turnstile> a' ::\<preceq> Class C\<rbrakk> \<Longrightarrow> xc \<le>| h' \<and> (x', h', l) ::\<preceq> (G, lT) \<and> (x' = None \<longrightarrow> G,h' \<turnstile> v ::\<preceq> rTa)
[PROOF STEP]
apply( drule max_spec2mheads)
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<lbrakk>wf_java_prog G; a' \<noteq> Null; Norm (h, l) ::\<preceq> (G, lT); class G C = Some y; xc \<le>| xh; xh \<le>| h; list_all2 (conf G h) pvs pTsa; (md, rT, pns, lvars, blk, res) = the (method (G, cname_of h a') (mn, pTs')); \<forall>lT. (np a' None, h, init_vars lvars(pns [\<mapsto>] pvs, This \<mapsto> a')) ::\<preceq> (G, lT) \<longrightarrow> (G, lT) \<turnstile> blk \<surd> \<longrightarrow> h \<le>| xi \<and> (xcptb, xi, xl) ::\<preceq> (G, lT); \<forall>lT. (xcptb, xi, xl) ::\<preceq> (G, lT) \<longrightarrow> (\<forall>T. (G, lT) \<turnstile> res :: T \<longrightarrow> xi \<le>| h' \<and> (x', h', xj) ::\<preceq> (G, lT) \<and> (x' = None \<longrightarrow> G,h' \<turnstile> v ::\<preceq> T)); G,xh \<turnstile> a' ::\<preceq> Class C; \<exists>D b. mda = Class D \<and> method (G, C) (mn, pTs') = Some (D, rTa, b) \<and> list_all2 (widen G) pTsa pTs'\<rbrakk> \<Longrightarrow> xc \<le>| h' \<and> (x', h', l) ::\<preceq> (G, lT) \<and> (x' = None \<longrightarrow> G,h' \<turnstile> v ::\<preceq> rTa)
[PROOF STEP]
apply( clarify)
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<And>D a aa ab b. \<lbrakk>wf_java_prog G; a' \<noteq> Null; Norm (h, l) ::\<preceq> (G, lT); class G C = Some y; xc \<le>| xh; xh \<le>| h; list_all2 (conf G h) pvs pTsa; (md, rT, pns, lvars, blk, res) = the (method (G, cname_of h a') (mn, pTs')); \<forall>lT. (np a' None, h, init_vars lvars(pns [\<mapsto>] pvs, This \<mapsto> a')) ::\<preceq> (G, lT) \<longrightarrow> (G, lT) \<turnstile> blk \<surd> \<longrightarrow> h \<le>| xi \<and> (xcptb, xi, xl) ::\<preceq> (G, lT); \<forall>lT. (xcptb, xi, xl) ::\<preceq> (G, lT) \<longrightarrow> (\<forall>T. (G, lT) \<turnstile> res :: T \<longrightarrow> xi \<le>| h' \<and> (x', h', xj) ::\<preceq> (G, lT) \<and> (x' = None \<longrightarrow> G,h' \<turnstile> v ::\<preceq> T)); G,xh \<turnstile> a' ::\<preceq> Class C; mda = Class D; method (G, C) (mn, pTs') = Some (D, rTa, a, aa, ab, b); list_all2 (widen G) pTsa pTs'\<rbrakk> \<Longrightarrow> xc \<le>| h' \<and> (x', h', l) ::\<preceq> (G, lT) \<and> (x' = None \<longrightarrow> G,h' \<turnstile> v ::\<preceq> rTa)
[PROOF STEP]
apply( drule (2) non_np_objD')
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<And>D a aa ab b. \<lbrakk>wf_java_prog G; Norm (h, l) ::\<preceq> (G, lT); class G C = Some y; xc \<le>| xh; xh \<le>| h; list_all2 (conf G h) pvs pTsa; (md, rT, pns, lvars, blk, res) = the (method (G, cname_of h a') (mn, pTs')); \<forall>lT. (np a' None, h, init_vars lvars(pns [\<mapsto>] pvs, This \<mapsto> a')) ::\<preceq> (G, lT) \<longrightarrow> (G, lT) \<turnstile> blk \<surd> \<longrightarrow> h \<le>| xi \<and> (xcptb, xi, xl) ::\<preceq> (G, lT); \<forall>lT. (xcptb, xi, xl) ::\<preceq> (G, lT) \<longrightarrow> (\<forall>T. (G, lT) \<turnstile> res :: T \<longrightarrow> xi \<le>| h' \<and> (x', h', xj) ::\<preceq> (G, lT) \<and> (x' = None \<longrightarrow> G,h' \<turnstile> v ::\<preceq> T)); G,xh \<turnstile> a' ::\<preceq> Class C; mda = Class D; method (G, C) (mn, pTs') = Some (D, rTa, a, aa, ab, b); list_all2 (widen G) pTsa pTs'; \<exists>a Ca fs. a' = Addr a \<and> xh a = Some (Ca, fs) \<and> G \<turnstile> Class Ca \<preceq> Class C\<rbrakk> \<Longrightarrow> xc \<le>| h' \<and> (x', h', l) ::\<preceq> (G, lT) \<and> (x' = None \<longrightarrow> G,h' \<turnstile> v ::\<preceq> rTa)
[PROOF STEP]
apply( clarsimp)
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<And>D a aa ab b ac Ca fs. \<lbrakk>wf_java_prog G; Norm (h, l) ::\<preceq> (G, lT); class G C = Some y; xc \<le>| xh; xh \<le>| h; list_all2 (conf G h) pvs pTsa; (md, rT, pns, lvars, blk, res) = the (method (G, fst (the (h ac))) (mn, pTs')); \<forall>lT. Norm (h, init_vars lvars(pns [\<mapsto>] pvs, This \<mapsto> Addr ac)) ::\<preceq> (G, lT) \<longrightarrow> (G, lT) \<turnstile> blk \<surd> \<longrightarrow> h \<le>| xi \<and> (xcptb, xi, xl) ::\<preceq> (G, lT); \<forall>lT. (xcptb, xi, xl) ::\<preceq> (G, lT) \<longrightarrow> (\<forall>T. (G, lT) \<turnstile> res :: T \<longrightarrow> xi \<le>| h' \<and> (x', h', xj) ::\<preceq> (G, lT) \<and> (x' = None \<longrightarrow> G,h' \<turnstile> v ::\<preceq> T)); G,xh \<turnstile> Addr ac ::\<preceq> Class C; mda = Class D; method (G, C) (mn, pTs') = Some (D, rTa, a, aa, ab, b); list_all2 (widen G) pTsa pTs'; a' = Addr ac; G \<turnstile> Ca \<preceq>C C; xh ac = Some (Ca, fs)\<rbrakk> \<Longrightarrow> xc \<le>| h' \<and> (x', h', l) ::\<preceq> (G, lT) \<and> (x' = None \<longrightarrow> G,h' \<turnstile> v ::\<preceq> rTa)
[PROOF STEP]
apply( frule (1) hext_objD)
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<And>D a aa ab b ac Ca fs. \<lbrakk>wf_java_prog G; Norm (h, l) ::\<preceq> (G, lT); class G C = Some y; xc \<le>| xh; xh \<le>| h; list_all2 (conf G h) pvs pTsa; (md, rT, pns, lvars, blk, res) = the (method (G, fst (the (h ac))) (mn, pTs')); \<forall>lT. Norm (h, init_vars lvars(pns [\<mapsto>] pvs, This \<mapsto> Addr ac)) ::\<preceq> (G, lT) \<longrightarrow> (G, lT) \<turnstile> blk \<surd> \<longrightarrow> h \<le>| xi \<and> (xcptb, xi, xl) ::\<preceq> (G, lT); \<forall>lT. (xcptb, xi, xl) ::\<preceq> (G, lT) \<longrightarrow> (\<forall>T. (G, lT) \<turnstile> res :: T \<longrightarrow> xi \<le>| h' \<and> (x', h', xj) ::\<preceq> (G, lT) \<and> (x' = None \<longrightarrow> G,h' \<turnstile> v ::\<preceq> T)); G,xh \<turnstile> Addr ac ::\<preceq> Class C; mda = Class D; method (G, C) (mn, pTs') = Some (D, rTa, a, aa, ab, b); list_all2 (widen G) pTsa pTs'; a' = Addr ac; G \<turnstile> Ca \<preceq>C C; xh ac = Some (Ca, fs); \<exists>fs'. h ac = Some (Ca, fs')\<rbrakk> \<Longrightarrow> xc \<le>| h' \<and> (x', h', l) ::\<preceq> (G, lT) \<and> (x' = None \<longrightarrow> G,h' \<turnstile> v ::\<preceq> rTa)
[PROOF STEP]
apply( clarsimp)
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<And>D a aa ab b ac Ca fs fs'. \<lbrakk>wf_java_prog G; Norm (h, l) ::\<preceq> (G, lT); class G C = Some y; xc \<le>| xh; xh \<le>| h; list_all2 (conf G h) pvs pTsa; (md, rT, pns, lvars, blk, res) = the (method (G, Ca) (mn, pTs')); \<forall>lT. Norm (h, init_vars lvars(pns [\<mapsto>] pvs, This \<mapsto> Addr ac)) ::\<preceq> (G, lT) \<longrightarrow> (G, lT) \<turnstile> blk \<surd> \<longrightarrow> h \<le>| xi \<and> (xcptb, xi, xl) ::\<preceq> (G, lT); \<forall>lT. (xcptb, xi, xl) ::\<preceq> (G, lT) \<longrightarrow> (\<forall>T. (G, lT) \<turnstile> res :: T \<longrightarrow> xi \<le>| h' \<and> (x', h', xj) ::\<preceq> (G, lT) \<and> (x' = None \<longrightarrow> G,h' \<turnstile> v ::\<preceq> T)); G,xh \<turnstile> Addr ac ::\<preceq> Class C; mda = Class D; method (G, C) (mn, pTs') = Some (D, rTa, a, aa, ab, b); list_all2 (widen G) pTsa pTs'; a' = Addr ac; G \<turnstile> Ca \<preceq>C C; xh ac = Some (Ca, fs); h ac = Some (Ca, fs')\<rbrakk> \<Longrightarrow> xc \<le>| h' \<and> (x', h', l) ::\<preceq> (G, lT) \<and> (x' = None \<longrightarrow> G,h' \<turnstile> v ::\<preceq> rTa)
[PROOF STEP]
apply( drule (3) Call_lemma)
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<And>D a aa ab b ac Ca fs fs'. \<lbrakk>wf_java_prog G; Norm (h, l) ::\<preceq> (G, lT); class G C = Some y; xc \<le>| xh; xh \<le>| h; list_all2 (conf G h) pvs pTsa; (md, rT, pns, lvars, blk, res) = the (method (G, Ca) (mn, pTs')); \<forall>lT. Norm (h, init_vars lvars(pns [\<mapsto>] pvs, This \<mapsto> Addr ac)) ::\<preceq> (G, lT) \<longrightarrow> (G, lT) \<turnstile> blk \<surd> \<longrightarrow> h \<le>| xi \<and> (xcptb, xi, xl) ::\<preceq> (G, lT); \<forall>lT. (xcptb, xi, xl) ::\<preceq> (G, lT) \<longrightarrow> (\<forall>T. (G, lT) \<turnstile> res :: T \<longrightarrow> xi \<le>| h' \<and> (x', h', xj) ::\<preceq> (G, lT) \<and> (x' = None \<longrightarrow> G,h' \<turnstile> v ::\<preceq> T)); G,xh \<turnstile> Addr ac ::\<preceq> Class C; mda = Class D; list_all2 (widen G) pTsa pTs'; a' = Addr ac; G \<turnstile> Ca \<preceq>C C; xh ac = Some (Ca, fs); h ac = Some (Ca, fs'); \<exists>T' rT' b. method (G, Ca) (mn, pTs') = Some (T', rT', b) \<and> G \<turnstile> rT' \<preceq> rTa \<and> G \<turnstile> Ca \<preceq>C T' \<and> wf_mhead G (mn, pTs') rT' \<and> wf_java_mdecl G T' ((mn, pTs'), rT', b)\<rbrakk> \<Longrightarrow> xc \<le>| h' \<and> (x', h', l) ::\<preceq> (G, lT) \<and> (x' = None \<longrightarrow> G,h' \<turnstile> v ::\<preceq> rTa)
[PROOF STEP]
apply( clarsimp simp add: wf_java_mdecl_def)
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<And>D ac Ca fs fs' T. \<lbrakk>wf_java_prog G; Norm (h, l) ::\<preceq> (G, lT); class G C = Some y; xc \<le>| xh; xh \<le>| h; list_all2 (conf G h) pvs pTsa; \<forall>lT. Norm (h, init_vars lvars(pns [\<mapsto>] pvs, This \<mapsto> Addr ac)) ::\<preceq> (G, lT) \<longrightarrow> (G, lT) \<turnstile> blk \<surd> \<longrightarrow> h \<le>| xi \<and> (xcptb, xi, xl) ::\<preceq> (G, lT); \<forall>lT. (xcptb, xi, xl) ::\<preceq> (G, lT) \<longrightarrow> (\<forall>T. (G, lT) \<turnstile> res :: T \<longrightarrow> xi \<le>| h' \<and> (x', h', xj) ::\<preceq> (G, lT) \<and> (x' = None \<longrightarrow> G,h' \<turnstile> v ::\<preceq> T)); G,xh \<turnstile> Addr ac ::\<preceq> Class C; mda = Class D; list_all2 (widen G) pTsa pTs'; a' = Addr ac; G \<turnstile> Ca \<preceq>C C; xh ac = Some (Ca, fs); h ac = Some (Ca, fs'); method (G, Ca) (mn, pTs') = Some (md, rT, pns, lvars, blk, res); G \<turnstile> rT \<preceq> rTa; G \<turnstile> Ca \<preceq>C md; wf_mhead G (mn, pTs') rT; length pTs' = length pns; distinct pns; unique lvars; This \<notin> set pns; This \<notin> fst ` set lvars; \<forall>pn\<in>set pns. map_of lvars pn = None; \<forall>x\<in>set lvars. is_type G (snd x); (G, map_of lvars(pns [\<mapsto>] pTs', This \<mapsto> Class md)) \<turnstile> blk \<surd>; (G, map_of lvars(pns [\<mapsto>] pTs', This \<mapsto> Class md)) \<turnstile> res :: T; G \<turnstile> T \<preceq> rT\<rbrakk> \<Longrightarrow> xc \<le>| h' \<and> (x', h', l) ::\<preceq> (G, lT) \<and> (x' = None \<longrightarrow> G,h' \<turnstile> v ::\<preceq> rTa)
[PROOF STEP]
apply( erule_tac V = "method sig x = y" for sig x y in thin_rl)
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<And>D ac Ca fs fs' T. \<lbrakk>wf_java_prog G; Norm (h, l) ::\<preceq> (G, lT); class G C = Some y; xc \<le>| xh; xh \<le>| h; list_all2 (conf G h) pvs pTsa; \<forall>lT. Norm (h, init_vars lvars(pns [\<mapsto>] pvs, This \<mapsto> Addr ac)) ::\<preceq> (G, lT) \<longrightarrow> (G, lT) \<turnstile> blk \<surd> \<longrightarrow> h \<le>| xi \<and> (xcptb, xi, xl) ::\<preceq> (G, lT); \<forall>lT. (xcptb, xi, xl) ::\<preceq> (G, lT) \<longrightarrow> (\<forall>T. (G, lT) \<turnstile> res :: T \<longrightarrow> xi \<le>| h' \<and> (x', h', xj) ::\<preceq> (G, lT) \<and> (x' = None \<longrightarrow> G,h' \<turnstile> v ::\<preceq> T)); G,xh \<turnstile> Addr ac ::\<preceq> Class C; mda = Class D; list_all2 (widen G) pTsa pTs'; a' = Addr ac; G \<turnstile> Ca \<preceq>C C; xh ac = Some (Ca, fs); h ac = Some (Ca, fs'); G \<turnstile> rT \<preceq> rTa; G \<turnstile> Ca \<preceq>C md; wf_mhead G (mn, pTs') rT; length pTs' = length pns; distinct pns; unique lvars; This \<notin> set pns; This \<notin> fst ` set lvars; \<forall>pn\<in>set pns. map_of lvars pn = None; \<forall>x\<in>set lvars. is_type G (snd x); (G, map_of lvars(pns [\<mapsto>] pTs', This \<mapsto> Class md)) \<turnstile> blk \<surd>; (G, map_of lvars(pns [\<mapsto>] pTs', This \<mapsto> Class md)) \<turnstile> res :: T; G \<turnstile> T \<preceq> rT\<rbrakk> \<Longrightarrow> xc \<le>| h' \<and> (x', h', l) ::\<preceq> (G, lT) \<and> (x' = None \<longrightarrow> G,h' \<turnstile> v ::\<preceq> rTa)
[PROOF STEP]
apply( drule spec, erule impE,  erule_tac [2] notE impE, tactic "assume_tac \<^context> 2")
[PROOF STATE]
proof (prove)
goal (2 subgoals):
 1. \<And>D ac Ca fs fs' T. \<lbrakk>wf_java_prog G; Norm (h, l) ::\<preceq> (G, lT); class G C = Some y; xc \<le>| xh; xh \<le>| h; list_all2 (conf G h) pvs pTsa; \<forall>lT. (xcptb, xi, xl) ::\<preceq> (G, lT) \<longrightarrow> (\<forall>T. (G, lT) \<turnstile> res :: T \<longrightarrow> xi \<le>| h' \<and> (x', h', xj) ::\<preceq> (G, lT) \<and> (x' = None \<longrightarrow> G,h' \<turnstile> v ::\<preceq> T)); G,xh \<turnstile> Addr ac ::\<preceq> Class C; mda = Class D; list_all2 (widen G) pTsa pTs'; a' = Addr ac; G \<turnstile> Ca \<preceq>C C; xh ac = Some (Ca, fs); h ac = Some (Ca, fs'); G \<turnstile> rT \<preceq> rTa; G \<turnstile> Ca \<preceq>C md; wf_mhead G (mn, pTs') rT; length pTs' = length pns; distinct pns; unique lvars; This \<notin> set pns; This \<notin> fst ` set lvars; \<forall>pn\<in>set pns. map_of lvars pn = None; \<forall>x\<in>set lvars. is_type G (snd x); (G, map_of lvars(pns [\<mapsto>] pTs', This \<mapsto> Class md)) \<turnstile> blk \<surd>; (G, map_of lvars(pns [\<mapsto>] pTs', This \<mapsto> Class md)) \<turnstile> res :: T; G \<turnstile> T \<preceq> rT\<rbrakk> \<Longrightarrow> Norm (h, init_vars lvars(pns [\<mapsto>] pvs, This \<mapsto> Addr ac)) ::\<preceq> (G, map_of lvars(pns [\<mapsto>] pTs', This \<mapsto> Class md))
 2. \<And>D ac Ca fs fs' T. \<lbrakk>wf_java_prog G; Norm (h, l) ::\<preceq> (G, lT); class G C = Some y; xc \<le>| xh; xh \<le>| h; list_all2 (conf G h) pvs pTsa; \<forall>lT. (xcptb, xi, xl) ::\<preceq> (G, lT) \<longrightarrow> (\<forall>T. (G, lT) \<turnstile> res :: T \<longrightarrow> xi \<le>| h' \<and> (x', h', xj) ::\<preceq> (G, lT) \<and> (x' = None \<longrightarrow> G,h' \<turnstile> v ::\<preceq> T)); G,xh \<turnstile> Addr ac ::\<preceq> Class C; mda = Class D; list_all2 (widen G) pTsa pTs'; a' = Addr ac; G \<turnstile> Ca \<preceq>C C; xh ac = Some (Ca, fs); h ac = Some (Ca, fs'); G \<turnstile> rT \<preceq> rTa; G \<turnstile> Ca \<preceq>C md; wf_mhead G (mn, pTs') rT; length pTs' = length pns; distinct pns; unique lvars; This \<notin> set pns; This \<notin> fst ` set lvars; \<forall>pn\<in>set pns. map_of lvars pn = None; \<forall>x\<in>set lvars. is_type G (snd x); (G, map_of lvars(pns [\<mapsto>] pTs', This \<mapsto> Class md)) \<turnstile> blk \<surd>; (G, map_of lvars(pns [\<mapsto>] pTs', This \<mapsto> Class md)) \<turnstile> res :: T; G \<turnstile> T \<preceq> rT; h \<le>| xi \<and> (xcptb, xi, xl) ::\<preceq> (G, map_of lvars(pns [\<mapsto>] pTs', This \<mapsto> Class md))\<rbrakk> \<Longrightarrow> xc \<le>| h' \<and> (x', h', l) ::\<preceq> (G, lT) \<and> (x' = None \<longrightarrow> G,h' \<turnstile> v ::\<preceq> rTa)
[PROOF STEP]
apply(  rule conformsI)
[PROOF STATE]
proof (prove)
goal (4 subgoals):
 1. \<And>D ac Ca fs fs' T. \<lbrakk>wf_java_prog G; Norm (h, l) ::\<preceq> (G, lT); class G C = Some y; xc \<le>| xh; xh \<le>| h; list_all2 (conf G h) pvs pTsa; \<forall>lT. (xcptb, xi, xl) ::\<preceq> (G, lT) \<longrightarrow> (\<forall>T. (G, lT) \<turnstile> res :: T \<longrightarrow> xi \<le>| h' \<and> (x', h', xj) ::\<preceq> (G, lT) \<and> (x' = None \<longrightarrow> G,h' \<turnstile> v ::\<preceq> T)); G,xh \<turnstile> Addr ac ::\<preceq> Class C; mda = Class D; list_all2 (widen G) pTsa pTs'; a' = Addr ac; G \<turnstile> Ca \<preceq>C C; xh ac = Some (Ca, fs); h ac = Some (Ca, fs'); G \<turnstile> rT \<preceq> rTa; G \<turnstile> Ca \<preceq>C md; wf_mhead G (mn, pTs') rT; length pTs' = length pns; distinct pns; unique lvars; This \<notin> set pns; This \<notin> fst ` set lvars; \<forall>pn\<in>set pns. map_of lvars pn = None; \<forall>x\<in>set lvars. is_type G (snd x); (G, map_of lvars(pns [\<mapsto>] pTs', This \<mapsto> Class md)) \<turnstile> blk \<surd>; (G, map_of lvars(pns [\<mapsto>] pTs', This \<mapsto> Class md)) \<turnstile> res :: T; G \<turnstile> T \<preceq> rT\<rbrakk> \<Longrightarrow> G \<turnstile>h h \<surd>
 2. \<And>D ac Ca fs fs' T. \<lbrakk>wf_java_prog G; Norm (h, l) ::\<preceq> (G, lT); class G C = Some y; xc \<le>| xh; xh \<le>| h; list_all2 (conf G h) pvs pTsa; \<forall>lT. (xcptb, xi, xl) ::\<preceq> (G, lT) \<longrightarrow> (\<forall>T. (G, lT) \<turnstile> res :: T \<longrightarrow> xi \<le>| h' \<and> (x', h', xj) ::\<preceq> (G, lT) \<and> (x' = None \<longrightarrow> G,h' \<turnstile> v ::\<preceq> T)); G,xh \<turnstile> Addr ac ::\<preceq> Class C; mda = Class D; list_all2 (widen G) pTsa pTs'; a' = Addr ac; G \<turnstile> Ca \<preceq>C C; xh ac = Some (Ca, fs); h ac = Some (Ca, fs'); G \<turnstile> rT \<preceq> rTa; G \<turnstile> Ca \<preceq>C md; wf_mhead G (mn, pTs') rT; length pTs' = length pns; distinct pns; unique lvars; This \<notin> set pns; This \<notin> fst ` set lvars; \<forall>pn\<in>set pns. map_of lvars pn = None; \<forall>x\<in>set lvars. is_type G (snd x); (G, map_of lvars(pns [\<mapsto>] pTs', This \<mapsto> Class md)) \<turnstile> blk \<surd>; (G, map_of lvars(pns [\<mapsto>] pTs', This \<mapsto> Class md)) \<turnstile> res :: T; G \<turnstile> T \<preceq> rT\<rbrakk> \<Longrightarrow> G,h \<turnstile> init_vars lvars(pns [\<mapsto>] pvs, This \<mapsto> Addr ac) [::\<preceq>] map_of lvars(pns [\<mapsto>] pTs', This \<mapsto> Class md)
 3. \<And>D ac Ca fs fs' T. \<lbrakk>wf_java_prog G; Norm (h, l) ::\<preceq> (G, lT); class G C = Some y; xc \<le>| xh; xh \<le>| h; list_all2 (conf G h) pvs pTsa; \<forall>lT. (xcptb, xi, xl) ::\<preceq> (G, lT) \<longrightarrow> (\<forall>T. (G, lT) \<turnstile> res :: T \<longrightarrow> xi \<le>| h' \<and> (x', h', xj) ::\<preceq> (G, lT) \<and> (x' = None \<longrightarrow> G,h' \<turnstile> v ::\<preceq> T)); G,xh \<turnstile> Addr ac ::\<preceq> Class C; mda = Class D; list_all2 (widen G) pTsa pTs'; a' = Addr ac; G \<turnstile> Ca \<preceq>C C; xh ac = Some (Ca, fs); h ac = Some (Ca, fs'); G \<turnstile> rT \<preceq> rTa; G \<turnstile> Ca \<preceq>C md; wf_mhead G (mn, pTs') rT; length pTs' = length pns; distinct pns; unique lvars; This \<notin> set pns; This \<notin> fst ` set lvars; \<forall>pn\<in>set pns. map_of lvars pn = None; \<forall>x\<in>set lvars. is_type G (snd x); (G, map_of lvars(pns [\<mapsto>] pTs', This \<mapsto> Class md)) \<turnstile> blk \<surd>; (G, map_of lvars(pns [\<mapsto>] pTs', This \<mapsto> Class md)) \<turnstile> res :: T; G \<turnstile> T \<preceq> rT\<rbrakk> \<Longrightarrow> xconf h None
 4. \<And>D ac Ca fs fs' T. \<lbrakk>wf_java_prog G; Norm (h, l) ::\<preceq> (G, lT); class G C = Some y; xc \<le>| xh; xh \<le>| h; list_all2 (conf G h) pvs pTsa; \<forall>lT. (xcptb, xi, xl) ::\<preceq> (G, lT) \<longrightarrow> (\<forall>T. (G, lT) \<turnstile> res :: T \<longrightarrow> xi \<le>| h' \<and> (x', h', xj) ::\<preceq> (G, lT) \<and> (x' = None \<longrightarrow> G,h' \<turnstile> v ::\<preceq> T)); G,xh \<turnstile> Addr ac ::\<preceq> Class C; mda = Class D; list_all2 (widen G) pTsa pTs'; a' = Addr ac; G \<turnstile> Ca \<preceq>C C; xh ac = Some (Ca, fs); h ac = Some (Ca, fs'); G \<turnstile> rT \<preceq> rTa; G \<turnstile> Ca \<preceq>C md; wf_mhead G (mn, pTs') rT; length pTs' = length pns; distinct pns; unique lvars; This \<notin> set pns; This \<notin> fst ` set lvars; \<forall>pn\<in>set pns. map_of lvars pn = None; \<forall>x\<in>set lvars. is_type G (snd x); (G, map_of lvars(pns [\<mapsto>] pTs', This \<mapsto> Class md)) \<turnstile> blk \<surd>; (G, map_of lvars(pns [\<mapsto>] pTs', This \<mapsto> Class md)) \<turnstile> res :: T; G \<turnstile> T \<preceq> rT; h \<le>| xi \<and> (xcptb, xi, xl) ::\<preceq> (G, map_of lvars(pns [\<mapsto>] pTs', This \<mapsto> Class md))\<rbrakk> \<Longrightarrow> xc \<le>| h' \<and> (x', h', l) ::\<preceq> (G, lT) \<and> (x' = None \<longrightarrow> G,h' \<turnstile> v ::\<preceq> rTa)
[PROOF STEP]
apply(   erule conforms_heapD)
[PROOF STATE]
proof (prove)
goal (3 subgoals):
 1. \<And>D ac Ca fs fs' T. \<lbrakk>wf_java_prog G; Norm (h, l) ::\<preceq> (G, lT); class G C = Some y; xc \<le>| xh; xh \<le>| h; list_all2 (conf G h) pvs pTsa; \<forall>lT. (xcptb, xi, xl) ::\<preceq> (G, lT) \<longrightarrow> (\<forall>T. (G, lT) \<turnstile> res :: T \<longrightarrow> xi \<le>| h' \<and> (x', h', xj) ::\<preceq> (G, lT) \<and> (x' = None \<longrightarrow> G,h' \<turnstile> v ::\<preceq> T)); G,xh \<turnstile> Addr ac ::\<preceq> Class C; mda = Class D; list_all2 (widen G) pTsa pTs'; a' = Addr ac; G \<turnstile> Ca \<preceq>C C; xh ac = Some (Ca, fs); h ac = Some (Ca, fs'); G \<turnstile> rT \<preceq> rTa; G \<turnstile> Ca \<preceq>C md; wf_mhead G (mn, pTs') rT; length pTs' = length pns; distinct pns; unique lvars; This \<notin> set pns; This \<notin> fst ` set lvars; \<forall>pn\<in>set pns. map_of lvars pn = None; \<forall>x\<in>set lvars. is_type G (snd x); (G, map_of lvars(pns [\<mapsto>] pTs', This \<mapsto> Class md)) \<turnstile> blk \<surd>; (G, map_of lvars(pns [\<mapsto>] pTs', This \<mapsto> Class md)) \<turnstile> res :: T; G \<turnstile> T \<preceq> rT\<rbrakk> \<Longrightarrow> G,h \<turnstile> init_vars lvars(pns [\<mapsto>] pvs, This \<mapsto> Addr ac) [::\<preceq>] map_of lvars(pns [\<mapsto>] pTs', This \<mapsto> Class md)
 2. \<And>D ac Ca fs fs' T. \<lbrakk>wf_java_prog G; Norm (h, l) ::\<preceq> (G, lT); class G C = Some y; xc \<le>| xh; xh \<le>| h; list_all2 (conf G h) pvs pTsa; \<forall>lT. (xcptb, xi, xl) ::\<preceq> (G, lT) \<longrightarrow> (\<forall>T. (G, lT) \<turnstile> res :: T \<longrightarrow> xi \<le>| h' \<and> (x', h', xj) ::\<preceq> (G, lT) \<and> (x' = None \<longrightarrow> G,h' \<turnstile> v ::\<preceq> T)); G,xh \<turnstile> Addr ac ::\<preceq> Class C; mda = Class D; list_all2 (widen G) pTsa pTs'; a' = Addr ac; G \<turnstile> Ca \<preceq>C C; xh ac = Some (Ca, fs); h ac = Some (Ca, fs'); G \<turnstile> rT \<preceq> rTa; G \<turnstile> Ca \<preceq>C md; wf_mhead G (mn, pTs') rT; length pTs' = length pns; distinct pns; unique lvars; This \<notin> set pns; This \<notin> fst ` set lvars; \<forall>pn\<in>set pns. map_of lvars pn = None; \<forall>x\<in>set lvars. is_type G (snd x); (G, map_of lvars(pns [\<mapsto>] pTs', This \<mapsto> Class md)) \<turnstile> blk \<surd>; (G, map_of lvars(pns [\<mapsto>] pTs', This \<mapsto> Class md)) \<turnstile> res :: T; G \<turnstile> T \<preceq> rT\<rbrakk> \<Longrightarrow> xconf h None
 3. \<And>D ac Ca fs fs' T. \<lbrakk>wf_java_prog G; Norm (h, l) ::\<preceq> (G, lT); class G C = Some y; xc \<le>| xh; xh \<le>| h; list_all2 (conf G h) pvs pTsa; \<forall>lT. (xcptb, xi, xl) ::\<preceq> (G, lT) \<longrightarrow> (\<forall>T. (G, lT) \<turnstile> res :: T \<longrightarrow> xi \<le>| h' \<and> (x', h', xj) ::\<preceq> (G, lT) \<and> (x' = None \<longrightarrow> G,h' \<turnstile> v ::\<preceq> T)); G,xh \<turnstile> Addr ac ::\<preceq> Class C; mda = Class D; list_all2 (widen G) pTsa pTs'; a' = Addr ac; G \<turnstile> Ca \<preceq>C C; xh ac = Some (Ca, fs); h ac = Some (Ca, fs'); G \<turnstile> rT \<preceq> rTa; G \<turnstile> Ca \<preceq>C md; wf_mhead G (mn, pTs') rT; length pTs' = length pns; distinct pns; unique lvars; This \<notin> set pns; This \<notin> fst ` set lvars; \<forall>pn\<in>set pns. map_of lvars pn = None; \<forall>x\<in>set lvars. is_type G (snd x); (G, map_of lvars(pns [\<mapsto>] pTs', This \<mapsto> Class md)) \<turnstile> blk \<surd>; (G, map_of lvars(pns [\<mapsto>] pTs', This \<mapsto> Class md)) \<turnstile> res :: T; G \<turnstile> T \<preceq> rT; h \<le>| xi \<and> (xcptb, xi, xl) ::\<preceq> (G, map_of lvars(pns [\<mapsto>] pTs', This \<mapsto> Class md))\<rbrakk> \<Longrightarrow> xc \<le>| h' \<and> (x', h', l) ::\<preceq> (G, lT) \<and> (x' = None \<longrightarrow> G,h' \<turnstile> v ::\<preceq> rTa)
[PROOF STEP]
apply(  rule lconf_ext)
[PROOF STATE]
proof (prove)
goal (4 subgoals):
 1. \<And>D ac Ca fs fs' T. \<lbrakk>wf_java_prog G; Norm (h, l) ::\<preceq> (G, lT); class G C = Some y; xc \<le>| xh; xh \<le>| h; list_all2 (conf G h) pvs pTsa; \<forall>lT. (xcptb, xi, xl) ::\<preceq> (G, lT) \<longrightarrow> (\<forall>T. (G, lT) \<turnstile> res :: T \<longrightarrow> xi \<le>| h' \<and> (x', h', xj) ::\<preceq> (G, lT) \<and> (x' = None \<longrightarrow> G,h' \<turnstile> v ::\<preceq> T)); G,xh \<turnstile> Addr ac ::\<preceq> Class C; mda = Class D; list_all2 (widen G) pTsa pTs'; a' = Addr ac; G \<turnstile> Ca \<preceq>C C; xh ac = Some (Ca, fs); h ac = Some (Ca, fs'); G \<turnstile> rT \<preceq> rTa; G \<turnstile> Ca \<preceq>C md; wf_mhead G (mn, pTs') rT; length pTs' = length pns; distinct pns; unique lvars; This \<notin> set pns; This \<notin> fst ` set lvars; \<forall>pn\<in>set pns. map_of lvars pn = None; \<forall>x\<in>set lvars. is_type G (snd x); (G, map_of lvars(pns [\<mapsto>] pTs', This \<mapsto> Class md)) \<turnstile> blk \<surd>; (G, map_of lvars(pns [\<mapsto>] pTs', This \<mapsto> Class md)) \<turnstile> res :: T; G \<turnstile> T \<preceq> rT\<rbrakk> \<Longrightarrow> G,h \<turnstile> init_vars lvars(pns [\<mapsto>] pvs) [::\<preceq>] map_of lvars(pns [\<mapsto>] pTs')
 2. \<And>D ac Ca fs fs' T. \<lbrakk>wf_java_prog G; Norm (h, l) ::\<preceq> (G, lT); class G C = Some y; xc \<le>| xh; xh \<le>| h; list_all2 (conf G h) pvs pTsa; \<forall>lT. (xcptb, xi, xl) ::\<preceq> (G, lT) \<longrightarrow> (\<forall>T. (G, lT) \<turnstile> res :: T \<longrightarrow> xi \<le>| h' \<and> (x', h', xj) ::\<preceq> (G, lT) \<and> (x' = None \<longrightarrow> G,h' \<turnstile> v ::\<preceq> T)); G,xh \<turnstile> Addr ac ::\<preceq> Class C; mda = Class D; list_all2 (widen G) pTsa pTs'; a' = Addr ac; G \<turnstile> Ca \<preceq>C C; xh ac = Some (Ca, fs); h ac = Some (Ca, fs'); G \<turnstile> rT \<preceq> rTa; G \<turnstile> Ca \<preceq>C md; wf_mhead G (mn, pTs') rT; length pTs' = length pns; distinct pns; unique lvars; This \<notin> set pns; This \<notin> fst ` set lvars; \<forall>pn\<in>set pns. map_of lvars pn = None; \<forall>x\<in>set lvars. is_type G (snd x); (G, map_of lvars(pns [\<mapsto>] pTs', This \<mapsto> Class md)) \<turnstile> blk \<surd>; (G, map_of lvars(pns [\<mapsto>] pTs', This \<mapsto> Class md)) \<turnstile> res :: T; G \<turnstile> T \<preceq> rT\<rbrakk> \<Longrightarrow> G,h \<turnstile> Addr ac ::\<preceq> Class md
 3. \<And>D ac Ca fs fs' T. \<lbrakk>wf_java_prog G; Norm (h, l) ::\<preceq> (G, lT); class G C = Some y; xc \<le>| xh; xh \<le>| h; list_all2 (conf G h) pvs pTsa; \<forall>lT. (xcptb, xi, xl) ::\<preceq> (G, lT) \<longrightarrow> (\<forall>T. (G, lT) \<turnstile> res :: T \<longrightarrow> xi \<le>| h' \<and> (x', h', xj) ::\<preceq> (G, lT) \<and> (x' = None \<longrightarrow> G,h' \<turnstile> v ::\<preceq> T)); G,xh \<turnstile> Addr ac ::\<preceq> Class C; mda = Class D; list_all2 (widen G) pTsa pTs'; a' = Addr ac; G \<turnstile> Ca \<preceq>C C; xh ac = Some (Ca, fs); h ac = Some (Ca, fs'); G \<turnstile> rT \<preceq> rTa; G \<turnstile> Ca \<preceq>C md; wf_mhead G (mn, pTs') rT; length pTs' = length pns; distinct pns; unique lvars; This \<notin> set pns; This \<notin> fst ` set lvars; \<forall>pn\<in>set pns. map_of lvars pn = None; \<forall>x\<in>set lvars. is_type G (snd x); (G, map_of lvars(pns [\<mapsto>] pTs', This \<mapsto> Class md)) \<turnstile> blk \<surd>; (G, map_of lvars(pns [\<mapsto>] pTs', This \<mapsto> Class md)) \<turnstile> res :: T; G \<turnstile> T \<preceq> rT\<rbrakk> \<Longrightarrow> xconf h None
 4. \<And>D ac Ca fs fs' T. \<lbrakk>wf_java_prog G; Norm (h, l) ::\<preceq> (G, lT); class G C = Some y; xc \<le>| xh; xh \<le>| h; list_all2 (conf G h) pvs pTsa; \<forall>lT. (xcptb, xi, xl) ::\<preceq> (G, lT) \<longrightarrow> (\<forall>T. (G, lT) \<turnstile> res :: T \<longrightarrow> xi \<le>| h' \<and> (x', h', xj) ::\<preceq> (G, lT) \<and> (x' = None \<longrightarrow> G,h' \<turnstile> v ::\<preceq> T)); G,xh \<turnstile> Addr ac ::\<preceq> Class C; mda = Class D; list_all2 (widen G) pTsa pTs'; a' = Addr ac; G \<turnstile> Ca \<preceq>C C; xh ac = Some (Ca, fs); h ac = Some (Ca, fs'); G \<turnstile> rT \<preceq> rTa; G \<turnstile> Ca \<preceq>C md; wf_mhead G (mn, pTs') rT; length pTs' = length pns; distinct pns; unique lvars; This \<notin> set pns; This \<notin> fst ` set lvars; \<forall>pn\<in>set pns. map_of lvars pn = None; \<forall>x\<in>set lvars. is_type G (snd x); (G, map_of lvars(pns [\<mapsto>] pTs', This \<mapsto> Class md)) \<turnstile> blk \<surd>; (G, map_of lvars(pns [\<mapsto>] pTs', This \<mapsto> Class md)) \<turnstile> res :: T; G \<turnstile> T \<preceq> rT; h \<le>| xi \<and> (xcptb, xi, xl) ::\<preceq> (G, map_of lvars(pns [\<mapsto>] pTs', This \<mapsto> Class md))\<rbrakk> \<Longrightarrow> xc \<le>| h' \<and> (x', h', l) ::\<preceq> (G, lT) \<and> (x' = None \<longrightarrow> G,h' \<turnstile> v ::\<preceq> rTa)
[PROOF STEP]
apply(   force elim!: Call_lemma2)
[PROOF STATE]
proof (prove)
goal (3 subgoals):
 1. \<And>D ac Ca fs fs' T. \<lbrakk>wf_java_prog G; Norm (h, l) ::\<preceq> (G, lT); class G C = Some y; xc \<le>| xh; xh \<le>| h; list_all2 (conf G h) pvs pTsa; \<forall>lT. (xcptb, xi, xl) ::\<preceq> (G, lT) \<longrightarrow> (\<forall>T. (G, lT) \<turnstile> res :: T \<longrightarrow> xi \<le>| h' \<and> (x', h', xj) ::\<preceq> (G, lT) \<and> (x' = None \<longrightarrow> G,h' \<turnstile> v ::\<preceq> T)); G,xh \<turnstile> Addr ac ::\<preceq> Class C; mda = Class D; list_all2 (widen G) pTsa pTs'; a' = Addr ac; G \<turnstile> Ca \<preceq>C C; xh ac = Some (Ca, fs); h ac = Some (Ca, fs'); G \<turnstile> rT \<preceq> rTa; G \<turnstile> Ca \<preceq>C md; wf_mhead G (mn, pTs') rT; length pTs' = length pns; distinct pns; unique lvars; This \<notin> set pns; This \<notin> fst ` set lvars; \<forall>pn\<in>set pns. map_of lvars pn = None; \<forall>x\<in>set lvars. is_type G (snd x); (G, map_of lvars(pns [\<mapsto>] pTs', This \<mapsto> Class md)) \<turnstile> blk \<surd>; (G, map_of lvars(pns [\<mapsto>] pTs', This \<mapsto> Class md)) \<turnstile> res :: T; G \<turnstile> T \<preceq> rT\<rbrakk> \<Longrightarrow> G,h \<turnstile> Addr ac ::\<preceq> Class md
 2. \<And>D ac Ca fs fs' T. \<lbrakk>wf_java_prog G; Norm (h, l) ::\<preceq> (G, lT); class G C = Some y; xc \<le>| xh; xh \<le>| h; list_all2 (conf G h) pvs pTsa; \<forall>lT. (xcptb, xi, xl) ::\<preceq> (G, lT) \<longrightarrow> (\<forall>T. (G, lT) \<turnstile> res :: T \<longrightarrow> xi \<le>| h' \<and> (x', h', xj) ::\<preceq> (G, lT) \<and> (x' = None \<longrightarrow> G,h' \<turnstile> v ::\<preceq> T)); G,xh \<turnstile> Addr ac ::\<preceq> Class C; mda = Class D; list_all2 (widen G) pTsa pTs'; a' = Addr ac; G \<turnstile> Ca \<preceq>C C; xh ac = Some (Ca, fs); h ac = Some (Ca, fs'); G \<turnstile> rT \<preceq> rTa; G \<turnstile> Ca \<preceq>C md; wf_mhead G (mn, pTs') rT; length pTs' = length pns; distinct pns; unique lvars; This \<notin> set pns; This \<notin> fst ` set lvars; \<forall>pn\<in>set pns. map_of lvars pn = None; \<forall>x\<in>set lvars. is_type G (snd x); (G, map_of lvars(pns [\<mapsto>] pTs', This \<mapsto> Class md)) \<turnstile> blk \<surd>; (G, map_of lvars(pns [\<mapsto>] pTs', This \<mapsto> Class md)) \<turnstile> res :: T; G \<turnstile> T \<preceq> rT\<rbrakk> \<Longrightarrow> xconf h None
 3. \<And>D ac Ca fs fs' T. \<lbrakk>wf_java_prog G; Norm (h, l) ::\<preceq> (G, lT); class G C = Some y; xc \<le>| xh; xh \<le>| h; list_all2 (conf G h) pvs pTsa; \<forall>lT. (xcptb, xi, xl) ::\<preceq> (G, lT) \<longrightarrow> (\<forall>T. (G, lT) \<turnstile> res :: T \<longrightarrow> xi \<le>| h' \<and> (x', h', xj) ::\<preceq> (G, lT) \<and> (x' = None \<longrightarrow> G,h' \<turnstile> v ::\<preceq> T)); G,xh \<turnstile> Addr ac ::\<preceq> Class C; mda = Class D; list_all2 (widen G) pTsa pTs'; a' = Addr ac; G \<turnstile> Ca \<preceq>C C; xh ac = Some (Ca, fs); h ac = Some (Ca, fs'); G \<turnstile> rT \<preceq> rTa; G \<turnstile> Ca \<preceq>C md; wf_mhead G (mn, pTs') rT; length pTs' = length pns; distinct pns; unique lvars; This \<notin> set pns; This \<notin> fst ` set lvars; \<forall>pn\<in>set pns. map_of lvars pn = None; \<forall>x\<in>set lvars. is_type G (snd x); (G, map_of lvars(pns [\<mapsto>] pTs', This \<mapsto> Class md)) \<turnstile> blk \<surd>; (G, map_of lvars(pns [\<mapsto>] pTs', This \<mapsto> Class md)) \<turnstile> res :: T; G \<turnstile> T \<preceq> rT; h \<le>| xi \<and> (xcptb, xi, xl) ::\<preceq> (G, map_of lvars(pns [\<mapsto>] pTs', This \<mapsto> Class md))\<rbrakk> \<Longrightarrow> xc \<le>| h' \<and> (x', h', l) ::\<preceq> (G, lT) \<and> (x' = None \<longrightarrow> G,h' \<turnstile> v ::\<preceq> rTa)
[PROOF STEP]
apply(  erule conf_hext, erule (1) conf_obj_AddrI)
[PROOF STATE]
proof (prove)
goal (2 subgoals):
 1. \<And>D ac Ca fs fs' T. \<lbrakk>wf_java_prog G; Norm (h, l) ::\<preceq> (G, lT); class G C = Some y; xc \<le>| xh; xh \<le>| h; list_all2 (conf G h) pvs pTsa; \<forall>lT. (xcptb, xi, xl) ::\<preceq> (G, lT) \<longrightarrow> (\<forall>T. (G, lT) \<turnstile> res :: T \<longrightarrow> xi \<le>| h' \<and> (x', h', xj) ::\<preceq> (G, lT) \<and> (x' = None \<longrightarrow> G,h' \<turnstile> v ::\<preceq> T)); G,xh \<turnstile> Addr ac ::\<preceq> Class C; mda = Class D; list_all2 (widen G) pTsa pTs'; a' = Addr ac; G \<turnstile> Ca \<preceq>C C; xh ac = Some (Ca, fs); h ac = Some (Ca, fs'); G \<turnstile> rT \<preceq> rTa; G \<turnstile> Ca \<preceq>C md; wf_mhead G (mn, pTs') rT; length pTs' = length pns; distinct pns; unique lvars; This \<notin> set pns; This \<notin> fst ` set lvars; \<forall>pn\<in>set pns. map_of lvars pn = None; \<forall>x\<in>set lvars. is_type G (snd x); (G, map_of lvars(pns [\<mapsto>] pTs', This \<mapsto> Class md)) \<turnstile> blk \<surd>; (G, map_of lvars(pns [\<mapsto>] pTs', This \<mapsto> Class md)) \<turnstile> res :: T; G \<turnstile> T \<preceq> rT\<rbrakk> \<Longrightarrow> xconf h None
 2. \<And>D ac Ca fs fs' T. \<lbrakk>wf_java_prog G; Norm (h, l) ::\<preceq> (G, lT); class G C = Some y; xc \<le>| xh; xh \<le>| h; list_all2 (conf G h) pvs pTsa; \<forall>lT. (xcptb, xi, xl) ::\<preceq> (G, lT) \<longrightarrow> (\<forall>T. (G, lT) \<turnstile> res :: T \<longrightarrow> xi \<le>| h' \<and> (x', h', xj) ::\<preceq> (G, lT) \<and> (x' = None \<longrightarrow> G,h' \<turnstile> v ::\<preceq> T)); G,xh \<turnstile> Addr ac ::\<preceq> Class C; mda = Class D; list_all2 (widen G) pTsa pTs'; a' = Addr ac; G \<turnstile> Ca \<preceq>C C; xh ac = Some (Ca, fs); h ac = Some (Ca, fs'); G \<turnstile> rT \<preceq> rTa; G \<turnstile> Ca \<preceq>C md; wf_mhead G (mn, pTs') rT; length pTs' = length pns; distinct pns; unique lvars; This \<notin> set pns; This \<notin> fst ` set lvars; \<forall>pn\<in>set pns. map_of lvars pn = None; \<forall>x\<in>set lvars. is_type G (snd x); (G, map_of lvars(pns [\<mapsto>] pTs', This \<mapsto> Class md)) \<turnstile> blk \<surd>; (G, map_of lvars(pns [\<mapsto>] pTs', This \<mapsto> Class md)) \<turnstile> res :: T; G \<turnstile> T \<preceq> rT; h \<le>| xi \<and> (xcptb, xi, xl) ::\<preceq> (G, map_of lvars(pns [\<mapsto>] pTs', This \<mapsto> Class md))\<rbrakk> \<Longrightarrow> xc \<le>| h' \<and> (x', h', l) ::\<preceq> (G, lT) \<and> (x' = None \<longrightarrow> G,h' \<turnstile> v ::\<preceq> rTa)
[PROOF STEP]
apply( erule_tac V = "E\<turnstile>blk\<surd>" for E blk in thin_rl)
[PROOF STATE]
proof (prove)
goal (2 subgoals):
 1. \<And>D ac Ca fs fs' T. \<lbrakk>wf_java_prog G; Norm (h, l) ::\<preceq> (G, lT); class G C = Some y; xc \<le>| xh; xh \<le>| h; list_all2 (conf G h) pvs pTsa; \<forall>lT. (xcptb, xi, xl) ::\<preceq> (G, lT) \<longrightarrow> (\<forall>T. (G, lT) \<turnstile> res :: T \<longrightarrow> xi \<le>| h' \<and> (x', h', xj) ::\<preceq> (G, lT) \<and> (x' = None \<longrightarrow> G,h' \<turnstile> v ::\<preceq> T)); G,xh \<turnstile> Addr ac ::\<preceq> Class C; mda = Class D; list_all2 (widen G) pTsa pTs'; a' = Addr ac; G \<turnstile> Ca \<preceq>C C; xh ac = Some (Ca, fs); h ac = Some (Ca, fs'); G \<turnstile> rT \<preceq> rTa; G \<turnstile> Ca \<preceq>C md; wf_mhead G (mn, pTs') rT; length pTs' = length pns; distinct pns; unique lvars; This \<notin> set pns; This \<notin> fst ` set lvars; \<forall>pn\<in>set pns. map_of lvars pn = None; \<forall>x\<in>set lvars. is_type G (snd x); (G, map_of lvars(pns [\<mapsto>] pTs', This \<mapsto> Class md)) \<turnstile> res :: T; G \<turnstile> T \<preceq> rT\<rbrakk> \<Longrightarrow> xconf h None
 2. \<And>D ac Ca fs fs' T. \<lbrakk>wf_java_prog G; Norm (h, l) ::\<preceq> (G, lT); class G C = Some y; xc \<le>| xh; xh \<le>| h; list_all2 (conf G h) pvs pTsa; \<forall>lT. (xcptb, xi, xl) ::\<preceq> (G, lT) \<longrightarrow> (\<forall>T. (G, lT) \<turnstile> res :: T \<longrightarrow> xi \<le>| h' \<and> (x', h', xj) ::\<preceq> (G, lT) \<and> (x' = None \<longrightarrow> G,h' \<turnstile> v ::\<preceq> T)); G,xh \<turnstile> Addr ac ::\<preceq> Class C; mda = Class D; list_all2 (widen G) pTsa pTs'; a' = Addr ac; G \<turnstile> Ca \<preceq>C C; xh ac = Some (Ca, fs); h ac = Some (Ca, fs'); G \<turnstile> rT \<preceq> rTa; G \<turnstile> Ca \<preceq>C md; wf_mhead G (mn, pTs') rT; length pTs' = length pns; distinct pns; unique lvars; This \<notin> set pns; This \<notin> fst ` set lvars; \<forall>pn\<in>set pns. map_of lvars pn = None; \<forall>x\<in>set lvars. is_type G (snd x); (G, map_of lvars(pns [\<mapsto>] pTs', This \<mapsto> Class md)) \<turnstile> blk \<surd>; (G, map_of lvars(pns [\<mapsto>] pTs', This \<mapsto> Class md)) \<turnstile> res :: T; G \<turnstile> T \<preceq> rT; h \<le>| xi \<and> (xcptb, xi, xl) ::\<preceq> (G, map_of lvars(pns [\<mapsto>] pTs', This \<mapsto> Class md))\<rbrakk> \<Longrightarrow> xc \<le>| h' \<and> (x', h', l) ::\<preceq> (G, lT) \<and> (x' = None \<longrightarrow> G,h' \<turnstile> v ::\<preceq> rTa)
[PROOF STEP]
apply (simp add: conforms_def)
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<And>D ac Ca fs fs' T. \<lbrakk>wf_java_prog G; Norm (h, l) ::\<preceq> (G, lT); class G C = Some y; xc \<le>| xh; xh \<le>| h; list_all2 (conf G h) pvs pTsa; \<forall>lT. (xcptb, xi, xl) ::\<preceq> (G, lT) \<longrightarrow> (\<forall>T. (G, lT) \<turnstile> res :: T \<longrightarrow> xi \<le>| h' \<and> (x', h', xj) ::\<preceq> (G, lT) \<and> (x' = None \<longrightarrow> G,h' \<turnstile> v ::\<preceq> T)); G,xh \<turnstile> Addr ac ::\<preceq> Class C; mda = Class D; list_all2 (widen G) pTsa pTs'; a' = Addr ac; G \<turnstile> Ca \<preceq>C C; xh ac = Some (Ca, fs); h ac = Some (Ca, fs'); G \<turnstile> rT \<preceq> rTa; G \<turnstile> Ca \<preceq>C md; wf_mhead G (mn, pTs') rT; length pTs' = length pns; distinct pns; unique lvars; This \<notin> set pns; This \<notin> fst ` set lvars; \<forall>pn\<in>set pns. map_of lvars pn = None; \<forall>x\<in>set lvars. is_type G (snd x); (G, map_of lvars(pns [\<mapsto>] pTs', This \<mapsto> Class md)) \<turnstile> blk \<surd>; (G, map_of lvars(pns [\<mapsto>] pTs', This \<mapsto> Class md)) \<turnstile> res :: T; G \<turnstile> T \<preceq> rT; h \<le>| xi \<and> (xcptb, xi, xl) ::\<preceq> (G, map_of lvars(pns [\<mapsto>] pTs', This \<mapsto> Class md))\<rbrakk> \<Longrightarrow> xc \<le>| h' \<and> (x', h', l) ::\<preceq> (G, lT) \<and> (x' = None \<longrightarrow> G,h' \<turnstile> v ::\<preceq> rTa)
[PROOF STEP]
apply( erule conjE)
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<And>D ac Ca fs fs' T. \<lbrakk>wf_java_prog G; Norm (h, l) ::\<preceq> (G, lT); class G C = Some y; xc \<le>| xh; xh \<le>| h; list_all2 (conf G h) pvs pTsa; \<forall>lT. (xcptb, xi, xl) ::\<preceq> (G, lT) \<longrightarrow> (\<forall>T. (G, lT) \<turnstile> res :: T \<longrightarrow> xi \<le>| h' \<and> (x', h', xj) ::\<preceq> (G, lT) \<and> (x' = None \<longrightarrow> G,h' \<turnstile> v ::\<preceq> T)); G,xh \<turnstile> Addr ac ::\<preceq> Class C; mda = Class D; list_all2 (widen G) pTsa pTs'; a' = Addr ac; G \<turnstile> Ca \<preceq>C C; xh ac = Some (Ca, fs); h ac = Some (Ca, fs'); G \<turnstile> rT \<preceq> rTa; G \<turnstile> Ca \<preceq>C md; wf_mhead G (mn, pTs') rT; length pTs' = length pns; distinct pns; unique lvars; This \<notin> set pns; This \<notin> fst ` set lvars; \<forall>pn\<in>set pns. map_of lvars pn = None; \<forall>x\<in>set lvars. is_type G (snd x); (G, map_of lvars(pns [\<mapsto>] pTs', This \<mapsto> Class md)) \<turnstile> blk \<surd>; (G, map_of lvars(pns [\<mapsto>] pTs', This \<mapsto> Class md)) \<turnstile> res :: T; G \<turnstile> T \<preceq> rT; h \<le>| xi; (xcptb, xi, xl) ::\<preceq> (G, map_of lvars(pns [\<mapsto>] pTs', This \<mapsto> Class md))\<rbrakk> \<Longrightarrow> xc \<le>| h' \<and> (x', h', l) ::\<preceq> (G, lT) \<and> (x' = None \<longrightarrow> G,h' \<turnstile> v ::\<preceq> rTa)
[PROOF STEP]
apply( drule spec, erule (1) impE)
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<And>D ac Ca fs fs' T. \<lbrakk>wf_java_prog G; Norm (h, l) ::\<preceq> (G, lT); class G C = Some y; xc \<le>| xh; xh \<le>| h; list_all2 (conf G h) pvs pTsa; G,xh \<turnstile> Addr ac ::\<preceq> Class C; mda = Class D; list_all2 (widen G) pTsa pTs'; a' = Addr ac; G \<turnstile> Ca \<preceq>C C; xh ac = Some (Ca, fs); h ac = Some (Ca, fs'); G \<turnstile> rT \<preceq> rTa; G \<turnstile> Ca \<preceq>C md; wf_mhead G (mn, pTs') rT; length pTs' = length pns; distinct pns; unique lvars; This \<notin> set pns; This \<notin> fst ` set lvars; \<forall>pn\<in>set pns. map_of lvars pn = None; \<forall>x\<in>set lvars. is_type G (snd x); (G, map_of lvars(pns [\<mapsto>] pTs', This \<mapsto> Class md)) \<turnstile> blk \<surd>; (G, map_of lvars(pns [\<mapsto>] pTs', This \<mapsto> Class md)) \<turnstile> res :: T; G \<turnstile> T \<preceq> rT; h \<le>| xi; (xcptb, xi, xl) ::\<preceq> (G, map_of lvars(pns [\<mapsto>] pTs', This \<mapsto> Class md)); \<forall>T. (G, map_of lvars(pns [\<mapsto>] pTs', This \<mapsto> Class md)) \<turnstile> res :: T \<longrightarrow> xi \<le>| h' \<and> (x', h', xj) ::\<preceq> (G, map_of lvars(pns [\<mapsto>] pTs', This \<mapsto> Class md)) \<and> (x' = None \<longrightarrow> G,h' \<turnstile> v ::\<preceq> T)\<rbrakk> \<Longrightarrow> xc \<le>| h' \<and> (x', h', l) ::\<preceq> (G, lT) \<and> (x' = None \<longrightarrow> G,h' \<turnstile> v ::\<preceq> rTa)
[PROOF STEP]
apply( drule spec, erule (1) impE)
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<And>D ac Ca fs fs' T. \<lbrakk>wf_java_prog G; Norm (h, l) ::\<preceq> (G, lT); class G C = Some y; xc \<le>| xh; xh \<le>| h; list_all2 (conf G h) pvs pTsa; G,xh \<turnstile> Addr ac ::\<preceq> Class C; mda = Class D; list_all2 (widen G) pTsa pTs'; a' = Addr ac; G \<turnstile> Ca \<preceq>C C; xh ac = Some (Ca, fs); h ac = Some (Ca, fs'); G \<turnstile> rT \<preceq> rTa; G \<turnstile> Ca \<preceq>C md; wf_mhead G (mn, pTs') rT; length pTs' = length pns; distinct pns; unique lvars; This \<notin> set pns; This \<notin> fst ` set lvars; \<forall>pn\<in>set pns. map_of lvars pn = None; \<forall>x\<in>set lvars. is_type G (snd x); (G, map_of lvars(pns [\<mapsto>] pTs', This \<mapsto> Class md)) \<turnstile> blk \<surd>; (G, map_of lvars(pns [\<mapsto>] pTs', This \<mapsto> Class md)) \<turnstile> res :: T; G \<turnstile> T \<preceq> rT; h \<le>| xi; (xcptb, xi, xl) ::\<preceq> (G, map_of lvars(pns [\<mapsto>] pTs', This \<mapsto> Class md)); xi \<le>| h' \<and> (x', h', xj) ::\<preceq> (G, map_of lvars(pns [\<mapsto>] pTs', This \<mapsto> Class md)) \<and> (x' = None \<longrightarrow> G,h' \<turnstile> v ::\<preceq> T)\<rbrakk> \<Longrightarrow> xc \<le>| h' \<and> (x', h', l) ::\<preceq> (G, lT) \<and> (x' = None \<longrightarrow> G,h' \<turnstile> v ::\<preceq> rTa)
[PROOF STEP]
apply( erule_tac V = "E\<turnstile>res::rT" for E rT in thin_rl)
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<And>D ac Ca fs fs' T. \<lbrakk>wf_java_prog G; Norm (h, l) ::\<preceq> (G, lT); class G C = Some y; xc \<le>| xh; xh \<le>| h; list_all2 (conf G h) pvs pTsa; G,xh \<turnstile> Addr ac ::\<preceq> Class C; mda = Class D; list_all2 (widen G) pTsa pTs'; a' = Addr ac; G \<turnstile> Ca \<preceq>C C; xh ac = Some (Ca, fs); h ac = Some (Ca, fs'); G \<turnstile> rT \<preceq> rTa; G \<turnstile> Ca \<preceq>C md; wf_mhead G (mn, pTs') rT; length pTs' = length pns; distinct pns; unique lvars; This \<notin> set pns; This \<notin> fst ` set lvars; \<forall>pn\<in>set pns. map_of lvars pn = None; \<forall>x\<in>set lvars. is_type G (snd x); (G, map_of lvars(pns [\<mapsto>] pTs', This \<mapsto> Class md)) \<turnstile> blk \<surd>; G \<turnstile> T \<preceq> rT; h \<le>| xi; (xcptb, xi, xl) ::\<preceq> (G, map_of lvars(pns [\<mapsto>] pTs', This \<mapsto> Class md)); xi \<le>| h' \<and> (x', h', xj) ::\<preceq> (G, map_of lvars(pns [\<mapsto>] pTs', This \<mapsto> Class md)) \<and> (x' = None \<longrightarrow> G,h' \<turnstile> v ::\<preceq> T)\<rbrakk> \<Longrightarrow> xc \<le>| h' \<and> (x', h', l) ::\<preceq> (G, lT) \<and> (x' = None \<longrightarrow> G,h' \<turnstile> v ::\<preceq> rTa)
[PROOF STEP]
apply( clarify)
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<And>D ac Ca fs fs' T. \<lbrakk>wf_java_prog G; Norm (h, l) ::\<preceq> (G, lT); class G C = Some y; xc \<le>| xh; xh \<le>| h; list_all2 (conf G h) pvs pTsa; G,xh \<turnstile> Addr ac ::\<preceq> Class C; mda = Class D; list_all2 (widen G) pTsa pTs'; a' = Addr ac; G \<turnstile> Ca \<preceq>C C; xh ac = Some (Ca, fs); h ac = Some (Ca, fs'); G \<turnstile> rT \<preceq> rTa; G \<turnstile> Ca \<preceq>C md; wf_mhead G (mn, pTs') rT; length pTs' = length pns; distinct pns; unique lvars; This \<notin> set pns; This \<notin> fst ` set lvars; \<forall>pn\<in>set pns. map_of lvars pn = None; \<forall>x\<in>set lvars. is_type G (snd x); (G, map_of lvars(pns [\<mapsto>] pTs', This \<mapsto> Class md)) \<turnstile> blk \<surd>; G \<turnstile> T \<preceq> rT; h \<le>| xi; (xcptb, xi, xl) ::\<preceq> (G, map_of lvars(pns [\<mapsto>] pTs', This \<mapsto> Class md)); xi \<le>| h'; (x', h', xj) ::\<preceq> (G, map_of lvars(pns [\<mapsto>] pTs', This \<mapsto> Class md)); x' = None \<longrightarrow> G,h' \<turnstile> v ::\<preceq> T\<rbrakk> \<Longrightarrow> xc \<le>| h' \<and> (x', h', l) ::\<preceq> (G, lT) \<and> (x' = None \<longrightarrow> G,h' \<turnstile> v ::\<preceq> rTa)
[PROOF STEP]
apply( rule conjI)
[PROOF STATE]
proof (prove)
goal (2 subgoals):
 1. \<And>D ac Ca fs fs' T. \<lbrakk>wf_java_prog G; Norm (h, l) ::\<preceq> (G, lT); class G C = Some y; xc \<le>| xh; xh \<le>| h; list_all2 (conf G h) pvs pTsa; G,xh \<turnstile> Addr ac ::\<preceq> Class C; mda = Class D; list_all2 (widen G) pTsa pTs'; a' = Addr ac; G \<turnstile> Ca \<preceq>C C; xh ac = Some (Ca, fs); h ac = Some (Ca, fs'); G \<turnstile> rT \<preceq> rTa; G \<turnstile> Ca \<preceq>C md; wf_mhead G (mn, pTs') rT; length pTs' = length pns; distinct pns; unique lvars; This \<notin> set pns; This \<notin> fst ` set lvars; \<forall>pn\<in>set pns. map_of lvars pn = None; \<forall>x\<in>set lvars. is_type G (snd x); (G, map_of lvars(pns [\<mapsto>] pTs', This \<mapsto> Class md)) \<turnstile> blk \<surd>; G \<turnstile> T \<preceq> rT; h \<le>| xi; (xcptb, xi, xl) ::\<preceq> (G, map_of lvars(pns [\<mapsto>] pTs', This \<mapsto> Class md)); xi \<le>| h'; (x', h', xj) ::\<preceq> (G, map_of lvars(pns [\<mapsto>] pTs', This \<mapsto> Class md)); x' = None \<longrightarrow> G,h' \<turnstile> v ::\<preceq> T\<rbrakk> \<Longrightarrow> xc \<le>| h'
 2. \<And>D ac Ca fs fs' T. \<lbrakk>wf_java_prog G; Norm (h, l) ::\<preceq> (G, lT); class G C = Some y; xc \<le>| xh; xh \<le>| h; list_all2 (conf G h) pvs pTsa; G,xh \<turnstile> Addr ac ::\<preceq> Class C; mda = Class D; list_all2 (widen G) pTsa pTs'; a' = Addr ac; G \<turnstile> Ca \<preceq>C C; xh ac = Some (Ca, fs); h ac = Some (Ca, fs'); G \<turnstile> rT \<preceq> rTa; G \<turnstile> Ca \<preceq>C md; wf_mhead G (mn, pTs') rT; length pTs' = length pns; distinct pns; unique lvars; This \<notin> set pns; This \<notin> fst ` set lvars; \<forall>pn\<in>set pns. map_of lvars pn = None; \<forall>x\<in>set lvars. is_type G (snd x); (G, map_of lvars(pns [\<mapsto>] pTs', This \<mapsto> Class md)) \<turnstile> blk \<surd>; G \<turnstile> T \<preceq> rT; h \<le>| xi; (xcptb, xi, xl) ::\<preceq> (G, map_of lvars(pns [\<mapsto>] pTs', This \<mapsto> Class md)); xi \<le>| h'; (x', h', xj) ::\<preceq> (G, map_of lvars(pns [\<mapsto>] pTs', This \<mapsto> Class md)); x' = None \<longrightarrow> G,h' \<turnstile> v ::\<preceq> T\<rbrakk> \<Longrightarrow> (x', h', l) ::\<preceq> (G, lT) \<and> (x' = None \<longrightarrow> G,h' \<turnstile> v ::\<preceq> rTa)
[PROOF STEP]
apply(  fast intro: hext_trans)
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<And>D ac Ca fs fs' T. \<lbrakk>wf_java_prog G; Norm (h, l) ::\<preceq> (G, lT); class G C = Some y; xc \<le>| xh; xh \<le>| h; list_all2 (conf G h) pvs pTsa; G,xh \<turnstile> Addr ac ::\<preceq> Class C; mda = Class D; list_all2 (widen G) pTsa pTs'; a' = Addr ac; G \<turnstile> Ca \<preceq>C C; xh ac = Some (Ca, fs); h ac = Some (Ca, fs'); G \<turnstile> rT \<preceq> rTa; G \<turnstile> Ca \<preceq>C md; wf_mhead G (mn, pTs') rT; length pTs' = length pns; distinct pns; unique lvars; This \<notin> set pns; This \<notin> fst ` set lvars; \<forall>pn\<in>set pns. map_of lvars pn = None; \<forall>x\<in>set lvars. is_type G (snd x); (G, map_of lvars(pns [\<mapsto>] pTs', This \<mapsto> Class md)) \<turnstile> blk \<surd>; G \<turnstile> T \<preceq> rT; h \<le>| xi; (xcptb, xi, xl) ::\<preceq> (G, map_of lvars(pns [\<mapsto>] pTs', This \<mapsto> Class md)); xi \<le>| h'; (x', h', xj) ::\<preceq> (G, map_of lvars(pns [\<mapsto>] pTs', This \<mapsto> Class md)); x' = None \<longrightarrow> G,h' \<turnstile> v ::\<preceq> T\<rbrakk> \<Longrightarrow> (x', h', l) ::\<preceq> (G, lT) \<and> (x' = None \<longrightarrow> G,h' \<turnstile> v ::\<preceq> rTa)
[PROOF STEP]
apply( rule conjI)
[PROOF STATE]
proof (prove)
goal (2 subgoals):
 1. \<And>D ac Ca fs fs' T. \<lbrakk>wf_java_prog G; Norm (h, l) ::\<preceq> (G, lT); class G C = Some y; xc \<le>| xh; xh \<le>| h; list_all2 (conf G h) pvs pTsa; G,xh \<turnstile> Addr ac ::\<preceq> Class C; mda = Class D; list_all2 (widen G) pTsa pTs'; a' = Addr ac; G \<turnstile> Ca \<preceq>C C; xh ac = Some (Ca, fs); h ac = Some (Ca, fs'); G \<turnstile> rT \<preceq> rTa; G \<turnstile> Ca \<preceq>C md; wf_mhead G (mn, pTs') rT; length pTs' = length pns; distinct pns; unique lvars; This \<notin> set pns; This \<notin> fst ` set lvars; \<forall>pn\<in>set pns. map_of lvars pn = None; \<forall>x\<in>set lvars. is_type G (snd x); (G, map_of lvars(pns [\<mapsto>] pTs', This \<mapsto> Class md)) \<turnstile> blk \<surd>; G \<turnstile> T \<preceq> rT; h \<le>| xi; (xcptb, xi, xl) ::\<preceq> (G, map_of lvars(pns [\<mapsto>] pTs', This \<mapsto> Class md)); xi \<le>| h'; (x', h', xj) ::\<preceq> (G, map_of lvars(pns [\<mapsto>] pTs', This \<mapsto> Class md)); x' = None \<longrightarrow> G,h' \<turnstile> v ::\<preceq> T\<rbrakk> \<Longrightarrow> (x', h', l) ::\<preceq> (G, lT)
 2. \<And>D ac Ca fs fs' T. \<lbrakk>wf_java_prog G; Norm (h, l) ::\<preceq> (G, lT); class G C = Some y; xc \<le>| xh; xh \<le>| h; list_all2 (conf G h) pvs pTsa; G,xh \<turnstile> Addr ac ::\<preceq> Class C; mda = Class D; list_all2 (widen G) pTsa pTs'; a' = Addr ac; G \<turnstile> Ca \<preceq>C C; xh ac = Some (Ca, fs); h ac = Some (Ca, fs'); G \<turnstile> rT \<preceq> rTa; G \<turnstile> Ca \<preceq>C md; wf_mhead G (mn, pTs') rT; length pTs' = length pns; distinct pns; unique lvars; This \<notin> set pns; This \<notin> fst ` set lvars; \<forall>pn\<in>set pns. map_of lvars pn = None; \<forall>x\<in>set lvars. is_type G (snd x); (G, map_of lvars(pns [\<mapsto>] pTs', This \<mapsto> Class md)) \<turnstile> blk \<surd>; G \<turnstile> T \<preceq> rT; h \<le>| xi; (xcptb, xi, xl) ::\<preceq> (G, map_of lvars(pns [\<mapsto>] pTs', This \<mapsto> Class md)); xi \<le>| h'; (x', h', xj) ::\<preceq> (G, map_of lvars(pns [\<mapsto>] pTs', This \<mapsto> Class md)); x' = None \<longrightarrow> G,h' \<turnstile> v ::\<preceq> T\<rbrakk> \<Longrightarrow> x' = None \<longrightarrow> G,h' \<turnstile> v ::\<preceq> rTa
[PROOF STEP]
apply(  rule_tac [2] impI)
[PROOF STATE]
proof (prove)
goal (2 subgoals):
 1. \<And>D ac Ca fs fs' T. \<lbrakk>wf_java_prog G; Norm (h, l) ::\<preceq> (G, lT); class G C = Some y; xc \<le>| xh; xh \<le>| h; list_all2 (conf G h) pvs pTsa; G,xh \<turnstile> Addr ac ::\<preceq> Class C; mda = Class D; list_all2 (widen G) pTsa pTs'; a' = Addr ac; G \<turnstile> Ca \<preceq>C C; xh ac = Some (Ca, fs); h ac = Some (Ca, fs'); G \<turnstile> rT \<preceq> rTa; G \<turnstile> Ca \<preceq>C md; wf_mhead G (mn, pTs') rT; length pTs' = length pns; distinct pns; unique lvars; This \<notin> set pns; This \<notin> fst ` set lvars; \<forall>pn\<in>set pns. map_of lvars pn = None; \<forall>x\<in>set lvars. is_type G (snd x); (G, map_of lvars(pns [\<mapsto>] pTs', This \<mapsto> Class md)) \<turnstile> blk \<surd>; G \<turnstile> T \<preceq> rT; h \<le>| xi; (xcptb, xi, xl) ::\<preceq> (G, map_of lvars(pns [\<mapsto>] pTs', This \<mapsto> Class md)); xi \<le>| h'; (x', h', xj) ::\<preceq> (G, map_of lvars(pns [\<mapsto>] pTs', This \<mapsto> Class md)); x' = None \<longrightarrow> G,h' \<turnstile> v ::\<preceq> T\<rbrakk> \<Longrightarrow> (x', h', l) ::\<preceq> (G, lT)
 2. \<And>D ac Ca fs fs' T. \<lbrakk>wf_java_prog G; Norm (h, l) ::\<preceq> (G, lT); class G C = Some y; xc \<le>| xh; xh \<le>| h; list_all2 (conf G h) pvs pTsa; G,xh \<turnstile> Addr ac ::\<preceq> Class C; mda = Class D; list_all2 (widen G) pTsa pTs'; a' = Addr ac; G \<turnstile> Ca \<preceq>C C; xh ac = Some (Ca, fs); h ac = Some (Ca, fs'); G \<turnstile> rT \<preceq> rTa; G \<turnstile> Ca \<preceq>C md; wf_mhead G (mn, pTs') rT; length pTs' = length pns; distinct pns; unique lvars; This \<notin> set pns; This \<notin> fst ` set lvars; \<forall>pn\<in>set pns. map_of lvars pn = None; \<forall>x\<in>set lvars. is_type G (snd x); (G, map_of lvars(pns [\<mapsto>] pTs', This \<mapsto> Class md)) \<turnstile> blk \<surd>; G \<turnstile> T \<preceq> rT; h \<le>| xi; (xcptb, xi, xl) ::\<preceq> (G, map_of lvars(pns [\<mapsto>] pTs', This \<mapsto> Class md)); xi \<le>| h'; (x', h', xj) ::\<preceq> (G, map_of lvars(pns [\<mapsto>] pTs', This \<mapsto> Class md)); x' = None \<longrightarrow> G,h' \<turnstile> v ::\<preceq> T; x' = None\<rbrakk> \<Longrightarrow> G,h' \<turnstile> v ::\<preceq> rTa
[PROOF STEP]
apply(  erule_tac [2] notE impE, tactic "assume_tac \<^context> 2")
[PROOF STATE]
proof (prove)
goal (2 subgoals):
 1. \<And>D ac Ca fs fs' T. \<lbrakk>wf_java_prog G; Norm (h, l) ::\<preceq> (G, lT); class G C = Some y; xc \<le>| xh; xh \<le>| h; list_all2 (conf G h) pvs pTsa; G,xh \<turnstile> Addr ac ::\<preceq> Class C; mda = Class D; list_all2 (widen G) pTsa pTs'; a' = Addr ac; G \<turnstile> Ca \<preceq>C C; xh ac = Some (Ca, fs); h ac = Some (Ca, fs'); G \<turnstile> rT \<preceq> rTa; G \<turnstile> Ca \<preceq>C md; wf_mhead G (mn, pTs') rT; length pTs' = length pns; distinct pns; unique lvars; This \<notin> set pns; This \<notin> fst ` set lvars; \<forall>pn\<in>set pns. map_of lvars pn = None; \<forall>x\<in>set lvars. is_type G (snd x); (G, map_of lvars(pns [\<mapsto>] pTs', This \<mapsto> Class md)) \<turnstile> blk \<surd>; G \<turnstile> T \<preceq> rT; h \<le>| xi; (xcptb, xi, xl) ::\<preceq> (G, map_of lvars(pns [\<mapsto>] pTs', This \<mapsto> Class md)); xi \<le>| h'; (x', h', xj) ::\<preceq> (G, map_of lvars(pns [\<mapsto>] pTs', This \<mapsto> Class md)); x' = None \<longrightarrow> G,h' \<turnstile> v ::\<preceq> T\<rbrakk> \<Longrightarrow> (x', h', l) ::\<preceq> (G, lT)
 2. \<And>D ac Ca fs fs' T. \<lbrakk>wf_java_prog G; Norm (h, l) ::\<preceq> (G, lT); class G C = Some y; xc \<le>| xh; xh \<le>| h; list_all2 (conf G h) pvs pTsa; G,xh \<turnstile> Addr ac ::\<preceq> Class C; mda = Class D; list_all2 (widen G) pTsa pTs'; a' = Addr ac; G \<turnstile> Ca \<preceq>C C; xh ac = Some (Ca, fs); h ac = Some (Ca, fs'); G \<turnstile> rT \<preceq> rTa; G \<turnstile> Ca \<preceq>C md; wf_mhead G (mn, pTs') rT; length pTs' = length pns; distinct pns; unique lvars; This \<notin> set pns; This \<notin> fst ` set lvars; \<forall>pn\<in>set pns. map_of lvars pn = None; \<forall>x\<in>set lvars. is_type G (snd x); (G, map_of lvars(pns [\<mapsto>] pTs', This \<mapsto> Class md)) \<turnstile> blk \<surd>; G \<turnstile> T \<preceq> rT; h \<le>| xi; (xcptb, xi, xl) ::\<preceq> (G, map_of lvars(pns [\<mapsto>] pTs', This \<mapsto> Class md)); xi \<le>| h'; (x', h', xj) ::\<preceq> (G, map_of lvars(pns [\<mapsto>] pTs', This \<mapsto> Class md)); x' = None; G,h' \<turnstile> v ::\<preceq> T\<rbrakk> \<Longrightarrow> G,h' \<turnstile> v ::\<preceq> rTa
[PROOF STEP]
apply(  frule_tac [2] conf_widen)
[PROOF STATE]
proof (prove)
goal (4 subgoals):
 1. \<And>D ac Ca fs fs' T. \<lbrakk>wf_java_prog G; Norm (h, l) ::\<preceq> (G, lT); class G C = Some y; xc \<le>| xh; xh \<le>| h; list_all2 (conf G h) pvs pTsa; G,xh \<turnstile> Addr ac ::\<preceq> Class C; mda = Class D; list_all2 (widen G) pTsa pTs'; a' = Addr ac; G \<turnstile> Ca \<preceq>C C; xh ac = Some (Ca, fs); h ac = Some (Ca, fs'); G \<turnstile> rT \<preceq> rTa; G \<turnstile> Ca \<preceq>C md; wf_mhead G (mn, pTs') rT; length pTs' = length pns; distinct pns; unique lvars; This \<notin> set pns; This \<notin> fst ` set lvars; \<forall>pn\<in>set pns. map_of lvars pn = None; \<forall>x\<in>set lvars. is_type G (snd x); (G, map_of lvars(pns [\<mapsto>] pTs', This \<mapsto> Class md)) \<turnstile> blk \<surd>; G \<turnstile> T \<preceq> rT; h \<le>| xi; (xcptb, xi, xl) ::\<preceq> (G, map_of lvars(pns [\<mapsto>] pTs', This \<mapsto> Class md)); xi \<le>| h'; (x', h', xj) ::\<preceq> (G, map_of lvars(pns [\<mapsto>] pTs', This \<mapsto> Class md)); x' = None \<longrightarrow> G,h' \<turnstile> v ::\<preceq> T\<rbrakk> \<Longrightarrow> (x', h', l) ::\<preceq> (G, lT)
 2. \<And>D ac Ca fs fs' T. \<lbrakk>wf_java_prog G; Norm (h, l) ::\<preceq> (G, lT); class G C = Some y; xc \<le>| xh; xh \<le>| h; list_all2 (conf G h) pvs pTsa; G,xh \<turnstile> Addr ac ::\<preceq> Class C; mda = Class D; list_all2 (widen G) pTsa pTs'; a' = Addr ac; G \<turnstile> Ca \<preceq>C C; xh ac = Some (Ca, fs); h ac = Some (Ca, fs'); G \<turnstile> rT \<preceq> rTa; G \<turnstile> Ca \<preceq>C md; wf_mhead G (mn, pTs') rT; length pTs' = length pns; distinct pns; unique lvars; This \<notin> set pns; This \<notin> fst ` set lvars; \<forall>pn\<in>set pns. map_of lvars pn = None; \<forall>x\<in>set lvars. is_type G (snd x); (G, map_of lvars(pns [\<mapsto>] pTs', This \<mapsto> Class md)) \<turnstile> blk \<surd>; G \<turnstile> T \<preceq> rT; h \<le>| xi; (xcptb, xi, xl) ::\<preceq> (G, map_of lvars(pns [\<mapsto>] pTs', This \<mapsto> Class md)); xi \<le>| h'; (x', h', xj) ::\<preceq> (G, map_of lvars(pns [\<mapsto>] pTs', This \<mapsto> Class md)); x' = None; G,h' \<turnstile> v ::\<preceq> T\<rbrakk> \<Longrightarrow> G,?h145 D ac Ca fs fs' T \<turnstile> ?x145 D ac Ca fs fs' T ::\<preceq> ?T145 D ac Ca fs fs' T
 3. \<And>D ac Ca fs fs' T. \<lbrakk>wf_java_prog G; Norm (h, l) ::\<preceq> (G, lT); class G C = Some y; xc \<le>| xh; xh \<le>| h; list_all2 (conf G h) pvs pTsa; G,xh \<turnstile> Addr ac ::\<preceq> Class C; mda = Class D; list_all2 (widen G) pTsa pTs'; a' = Addr ac; G \<turnstile> Ca \<preceq>C C; xh ac = Some (Ca, fs); h ac = Some (Ca, fs'); G \<turnstile> rT \<preceq> rTa; G \<turnstile> Ca \<preceq>C md; wf_mhead G (mn, pTs') rT; length pTs' = length pns; distinct pns; unique lvars; This \<notin> set pns; This \<notin> fst ` set lvars; \<forall>pn\<in>set pns. map_of lvars pn = None; \<forall>x\<in>set lvars. is_type G (snd x); (G, map_of lvars(pns [\<mapsto>] pTs', This \<mapsto> Class md)) \<turnstile> blk \<surd>; G \<turnstile> T \<preceq> rT; h \<le>| xi; (xcptb, xi, xl) ::\<preceq> (G, map_of lvars(pns [\<mapsto>] pTs', This \<mapsto> Class md)); xi \<le>| h'; (x', h', xj) ::\<preceq> (G, map_of lvars(pns [\<mapsto>] pTs', This \<mapsto> Class md)); x' = None; G,h' \<turnstile> v ::\<preceq> T\<rbrakk> \<Longrightarrow> G \<turnstile> ?T145 D ac Ca fs fs' T \<preceq> ?T'145 D ac Ca fs fs' T
 4. \<And>D ac Ca fs fs' T. \<lbrakk>wf_java_prog G; Norm (h, l) ::\<preceq> (G, lT); class G C = Some y; xc \<le>| xh; xh \<le>| h; list_all2 (conf G h) pvs pTsa; G,xh \<turnstile> Addr ac ::\<preceq> Class C; mda = Class D; list_all2 (widen G) pTsa pTs'; a' = Addr ac; G \<turnstile> Ca \<preceq>C C; xh ac = Some (Ca, fs); h ac = Some (Ca, fs'); G \<turnstile> rT \<preceq> rTa; G \<turnstile> Ca \<preceq>C md; wf_mhead G (mn, pTs') rT; length pTs' = length pns; distinct pns; unique lvars; This \<notin> set pns; This \<notin> fst ` set lvars; \<forall>pn\<in>set pns. map_of lvars pn = None; \<forall>x\<in>set lvars. is_type G (snd x); (G, map_of lvars(pns [\<mapsto>] pTs', This \<mapsto> Class md)) \<turnstile> blk \<surd>; G \<turnstile> T \<preceq> rT; h \<le>| xi; (xcptb, xi, xl) ::\<preceq> (G, map_of lvars(pns [\<mapsto>] pTs', This \<mapsto> Class md)); xi \<le>| h'; (x', h', xj) ::\<preceq> (G, map_of lvars(pns [\<mapsto>] pTs', This \<mapsto> Class md)); x' = None; G,h' \<turnstile> v ::\<preceq> T; G,?h145 D ac Ca fs fs' T \<turnstile> ?x145 D ac Ca fs fs' T ::\<preceq> ?T'145 D ac Ca fs fs' T\<rbrakk> \<Longrightarrow> G,h' \<turnstile> v ::\<preceq> rTa
[PROOF STEP]
apply(    tactic "assume_tac \<^context> 4")
[PROOF STATE]
proof (prove)
goal (3 subgoals):
 1. \<And>D ac Ca fs fs' T. \<lbrakk>wf_java_prog G; Norm (h, l) ::\<preceq> (G, lT); class G C = Some y; xc \<le>| xh; xh \<le>| h; list_all2 (conf G h) pvs pTsa; G,xh \<turnstile> Addr ac ::\<preceq> Class C; mda = Class D; list_all2 (widen G) pTsa pTs'; a' = Addr ac; G \<turnstile> Ca \<preceq>C C; xh ac = Some (Ca, fs); h ac = Some (Ca, fs'); G \<turnstile> rT \<preceq> rTa; G \<turnstile> Ca \<preceq>C md; wf_mhead G (mn, pTs') rT; length pTs' = length pns; distinct pns; unique lvars; This \<notin> set pns; This \<notin> fst ` set lvars; \<forall>pn\<in>set pns. map_of lvars pn = None; \<forall>x\<in>set lvars. is_type G (snd x); (G, map_of lvars(pns [\<mapsto>] pTs', This \<mapsto> Class md)) \<turnstile> blk \<surd>; G \<turnstile> T \<preceq> rT; h \<le>| xi; (xcptb, xi, xl) ::\<preceq> (G, map_of lvars(pns [\<mapsto>] pTs', This \<mapsto> Class md)); xi \<le>| h'; (x', h', xj) ::\<preceq> (G, map_of lvars(pns [\<mapsto>] pTs', This \<mapsto> Class md)); x' = None \<longrightarrow> G,h' \<turnstile> v ::\<preceq> T\<rbrakk> \<Longrightarrow> (x', h', l) ::\<preceq> (G, lT)
 2. \<And>D ac Ca fs fs' T. \<lbrakk>wf_java_prog G; Norm (h, l) ::\<preceq> (G, lT); class G C = Some y; xc \<le>| xh; xh \<le>| h; list_all2 (conf G h) pvs pTsa; G,xh \<turnstile> Addr ac ::\<preceq> Class C; mda = Class D; list_all2 (widen G) pTsa pTs'; a' = Addr ac; G \<turnstile> Ca \<preceq>C C; xh ac = Some (Ca, fs); h ac = Some (Ca, fs'); G \<turnstile> rT \<preceq> rTa; G \<turnstile> Ca \<preceq>C md; wf_mhead G (mn, pTs') rT; length pTs' = length pns; distinct pns; unique lvars; This \<notin> set pns; This \<notin> fst ` set lvars; \<forall>pn\<in>set pns. map_of lvars pn = None; \<forall>x\<in>set lvars. is_type G (snd x); (G, map_of lvars(pns [\<mapsto>] pTs', This \<mapsto> Class md)) \<turnstile> blk \<surd>; G \<turnstile> T \<preceq> rT; h \<le>| xi; (xcptb, xi, xl) ::\<preceq> (G, map_of lvars(pns [\<mapsto>] pTs', This \<mapsto> Class md)); xi \<le>| h'; (x', h', xj) ::\<preceq> (G, map_of lvars(pns [\<mapsto>] pTs', This \<mapsto> Class md)); x' = None; G,h' \<turnstile> v ::\<preceq> T\<rbrakk> \<Longrightarrow> G,h' \<turnstile> v ::\<preceq> ?T145 D ac Ca fs fs' T
 3. \<And>D ac Ca fs fs' T. \<lbrakk>wf_java_prog G; Norm (h, l) ::\<preceq> (G, lT); class G C = Some y; xc \<le>| xh; xh \<le>| h; list_all2 (conf G h) pvs pTsa; G,xh \<turnstile> Addr ac ::\<preceq> Class C; mda = Class D; list_all2 (widen G) pTsa pTs'; a' = Addr ac; G \<turnstile> Ca \<preceq>C C; xh ac = Some (Ca, fs); h ac = Some (Ca, fs'); G \<turnstile> rT \<preceq> rTa; G \<turnstile> Ca \<preceq>C md; wf_mhead G (mn, pTs') rT; length pTs' = length pns; distinct pns; unique lvars; This \<notin> set pns; This \<notin> fst ` set lvars; \<forall>pn\<in>set pns. map_of lvars pn = None; \<forall>x\<in>set lvars. is_type G (snd x); (G, map_of lvars(pns [\<mapsto>] pTs', This \<mapsto> Class md)) \<turnstile> blk \<surd>; G \<turnstile> T \<preceq> rT; h \<le>| xi; (xcptb, xi, xl) ::\<preceq> (G, map_of lvars(pns [\<mapsto>] pTs', This \<mapsto> Class md)); xi \<le>| h'; (x', h', xj) ::\<preceq> (G, map_of lvars(pns [\<mapsto>] pTs', This \<mapsto> Class md)); x' = None; G,h' \<turnstile> v ::\<preceq> T\<rbrakk> \<Longrightarrow> G \<turnstile> ?T145 D ac Ca fs fs' T \<preceq> rTa
[PROOF STEP]
apply(   tactic "assume_tac \<^context> 2")
[PROOF STATE]
proof (prove)
goal (2 subgoals):
 1. \<And>D ac Ca fs fs' T. \<lbrakk>wf_java_prog G; Norm (h, l) ::\<preceq> (G, lT); class G C = Some y; xc \<le>| xh; xh \<le>| h; list_all2 (conf G h) pvs pTsa; G,xh \<turnstile> Addr ac ::\<preceq> Class C; mda = Class D; list_all2 (widen G) pTsa pTs'; a' = Addr ac; G \<turnstile> Ca \<preceq>C C; xh ac = Some (Ca, fs); h ac = Some (Ca, fs'); G \<turnstile> rT \<preceq> rTa; G \<turnstile> Ca \<preceq>C md; wf_mhead G (mn, pTs') rT; length pTs' = length pns; distinct pns; unique lvars; This \<notin> set pns; This \<notin> fst ` set lvars; \<forall>pn\<in>set pns. map_of lvars pn = None; \<forall>x\<in>set lvars. is_type G (snd x); (G, map_of lvars(pns [\<mapsto>] pTs', This \<mapsto> Class md)) \<turnstile> blk \<surd>; G \<turnstile> T \<preceq> rT; h \<le>| xi; (xcptb, xi, xl) ::\<preceq> (G, map_of lvars(pns [\<mapsto>] pTs', This \<mapsto> Class md)); xi \<le>| h'; (x', h', xj) ::\<preceq> (G, map_of lvars(pns [\<mapsto>] pTs', This \<mapsto> Class md)); x' = None \<longrightarrow> G,h' \<turnstile> v ::\<preceq> T\<rbrakk> \<Longrightarrow> (x', h', l) ::\<preceq> (G, lT)
 2. \<And>D ac Ca fs fs' T. \<lbrakk>wf_java_prog G; Norm (h, l) ::\<preceq> (G, lT); class G C = Some y; xc \<le>| xh; xh \<le>| h; list_all2 (conf G h) pvs pTsa; G,xh \<turnstile> Addr ac ::\<preceq> Class C; mda = Class D; list_all2 (widen G) pTsa pTs'; a' = Addr ac; G \<turnstile> Ca \<preceq>C C; xh ac = Some (Ca, fs); h ac = Some (Ca, fs'); G \<turnstile> rT \<preceq> rTa; G \<turnstile> Ca \<preceq>C md; wf_mhead G (mn, pTs') rT; length pTs' = length pns; distinct pns; unique lvars; This \<notin> set pns; This \<notin> fst ` set lvars; \<forall>pn\<in>set pns. map_of lvars pn = None; \<forall>x\<in>set lvars. is_type G (snd x); (G, map_of lvars(pns [\<mapsto>] pTs', This \<mapsto> Class md)) \<turnstile> blk \<surd>; G \<turnstile> T \<preceq> rT; h \<le>| xi; (xcptb, xi, xl) ::\<preceq> (G, map_of lvars(pns [\<mapsto>] pTs', This \<mapsto> Class md)); xi \<le>| h'; (x', h', xj) ::\<preceq> (G, map_of lvars(pns [\<mapsto>] pTs', This \<mapsto> Class md)); x' = None; G,h' \<turnstile> v ::\<preceq> T\<rbrakk> \<Longrightarrow> G \<turnstile> T \<preceq> rTa
[PROOF STEP]
prefer 2
[PROOF STATE]
proof (prove)
goal (2 subgoals):
 1. \<And>D ac Ca fs fs' T. \<lbrakk>wf_java_prog G; Norm (h, l) ::\<preceq> (G, lT); class G C = Some y; xc \<le>| xh; xh \<le>| h; list_all2 (conf G h) pvs pTsa; G,xh \<turnstile> Addr ac ::\<preceq> Class C; mda = Class D; list_all2 (widen G) pTsa pTs'; a' = Addr ac; G \<turnstile> Ca \<preceq>C C; xh ac = Some (Ca, fs); h ac = Some (Ca, fs'); G \<turnstile> rT \<preceq> rTa; G \<turnstile> Ca \<preceq>C md; wf_mhead G (mn, pTs') rT; length pTs' = length pns; distinct pns; unique lvars; This \<notin> set pns; This \<notin> fst ` set lvars; \<forall>pn\<in>set pns. map_of lvars pn = None; \<forall>x\<in>set lvars. is_type G (snd x); (G, map_of lvars(pns [\<mapsto>] pTs', This \<mapsto> Class md)) \<turnstile> blk \<surd>; G \<turnstile> T \<preceq> rT; h \<le>| xi; (xcptb, xi, xl) ::\<preceq> (G, map_of lvars(pns [\<mapsto>] pTs', This \<mapsto> Class md)); xi \<le>| h'; (x', h', xj) ::\<preceq> (G, map_of lvars(pns [\<mapsto>] pTs', This \<mapsto> Class md)); x' = None; G,h' \<turnstile> v ::\<preceq> T\<rbrakk> \<Longrightarrow> G \<turnstile> T \<preceq> rTa
 2. \<And>D ac Ca fs fs' T. \<lbrakk>wf_java_prog G; Norm (h, l) ::\<preceq> (G, lT); class G C = Some y; xc \<le>| xh; xh \<le>| h; list_all2 (conf G h) pvs pTsa; G,xh \<turnstile> Addr ac ::\<preceq> Class C; mda = Class D; list_all2 (widen G) pTsa pTs'; a' = Addr ac; G \<turnstile> Ca \<preceq>C C; xh ac = Some (Ca, fs); h ac = Some (Ca, fs'); G \<turnstile> rT \<preceq> rTa; G \<turnstile> Ca \<preceq>C md; wf_mhead G (mn, pTs') rT; length pTs' = length pns; distinct pns; unique lvars; This \<notin> set pns; This \<notin> fst ` set lvars; \<forall>pn\<in>set pns. map_of lvars pn = None; \<forall>x\<in>set lvars. is_type G (snd x); (G, map_of lvars(pns [\<mapsto>] pTs', This \<mapsto> Class md)) \<turnstile> blk \<surd>; G \<turnstile> T \<preceq> rT; h \<le>| xi; (xcptb, xi, xl) ::\<preceq> (G, map_of lvars(pns [\<mapsto>] pTs', This \<mapsto> Class md)); xi \<le>| h'; (x', h', xj) ::\<preceq> (G, map_of lvars(pns [\<mapsto>] pTs', This \<mapsto> Class md)); x' = None \<longrightarrow> G,h' \<turnstile> v ::\<preceq> T\<rbrakk> \<Longrightarrow> (x', h', l) ::\<preceq> (G, lT)
[PROOF STEP]
apply(  fast elim!: widen_trans)
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<And>D ac Ca fs fs' T. \<lbrakk>wf_java_prog G; Norm (h, l) ::\<preceq> (G, lT); class G C = Some y; xc \<le>| xh; xh \<le>| h; list_all2 (conf G h) pvs pTsa; G,xh \<turnstile> Addr ac ::\<preceq> Class C; mda = Class D; list_all2 (widen G) pTsa pTs'; a' = Addr ac; G \<turnstile> Ca \<preceq>C C; xh ac = Some (Ca, fs); h ac = Some (Ca, fs'); G \<turnstile> rT \<preceq> rTa; G \<turnstile> Ca \<preceq>C md; wf_mhead G (mn, pTs') rT; length pTs' = length pns; distinct pns; unique lvars; This \<notin> set pns; This \<notin> fst ` set lvars; \<forall>pn\<in>set pns. map_of lvars pn = None; \<forall>x\<in>set lvars. is_type G (snd x); (G, map_of lvars(pns [\<mapsto>] pTs', This \<mapsto> Class md)) \<turnstile> blk \<surd>; G \<turnstile> T \<preceq> rT; h \<le>| xi; (xcptb, xi, xl) ::\<preceq> (G, map_of lvars(pns [\<mapsto>] pTs', This \<mapsto> Class md)); xi \<le>| h'; (x', h', xj) ::\<preceq> (G, map_of lvars(pns [\<mapsto>] pTs', This \<mapsto> Class md)); x' = None \<longrightarrow> G,h' \<turnstile> v ::\<preceq> T\<rbrakk> \<Longrightarrow> (x', h', l) ::\<preceq> (G, lT)
[PROOF STEP]
apply (rule conforms_xcpt_change)
[PROOF STATE]
proof (prove)
goal (2 subgoals):
 1. \<And>D ac Ca fs fs' T. \<lbrakk>wf_java_prog G; Norm (h, l) ::\<preceq> (G, lT); class G C = Some y; xc \<le>| xh; xh \<le>| h; list_all2 (conf G h) pvs pTsa; G,xh \<turnstile> Addr ac ::\<preceq> Class C; mda = Class D; list_all2 (widen G) pTsa pTs'; a' = Addr ac; G \<turnstile> Ca \<preceq>C C; xh ac = Some (Ca, fs); h ac = Some (Ca, fs'); G \<turnstile> rT \<preceq> rTa; G \<turnstile> Ca \<preceq>C md; wf_mhead G (mn, pTs') rT; length pTs' = length pns; distinct pns; unique lvars; This \<notin> set pns; This \<notin> fst ` set lvars; \<forall>pn\<in>set pns. map_of lvars pn = None; \<forall>x\<in>set lvars. is_type G (snd x); (G, map_of lvars(pns [\<mapsto>] pTs', This \<mapsto> Class md)) \<turnstile> blk \<surd>; G \<turnstile> T \<preceq> rT; h \<le>| xi; (xcptb, xi, xl) ::\<preceq> (G, map_of lvars(pns [\<mapsto>] pTs', This \<mapsto> Class md)); xi \<le>| h'; (x', h', xj) ::\<preceq> (G, map_of lvars(pns [\<mapsto>] pTs', This \<mapsto> Class md)); x' = None \<longrightarrow> G,h' \<turnstile> v ::\<preceq> T\<rbrakk> \<Longrightarrow> (?x151 D ac Ca fs fs' T, h', l) ::\<preceq> (G, lT)
 2. \<And>D ac Ca fs fs' T. \<lbrakk>wf_java_prog G; Norm (h, l) ::\<preceq> (G, lT); class G C = Some y; xc \<le>| xh; xh \<le>| h; list_all2 (conf G h) pvs pTsa; G,xh \<turnstile> Addr ac ::\<preceq> Class C; mda = Class D; list_all2 (widen G) pTsa pTs'; a' = Addr ac; G \<turnstile> Ca \<preceq>C C; xh ac = Some (Ca, fs); h ac = Some (Ca, fs'); G \<turnstile> rT \<preceq> rTa; G \<turnstile> Ca \<preceq>C md; wf_mhead G (mn, pTs') rT; length pTs' = length pns; distinct pns; unique lvars; This \<notin> set pns; This \<notin> fst ` set lvars; \<forall>pn\<in>set pns. map_of lvars pn = None; \<forall>x\<in>set lvars. is_type G (snd x); (G, map_of lvars(pns [\<mapsto>] pTs', This \<mapsto> Class md)) \<turnstile> blk \<surd>; G \<turnstile> T \<preceq> rT; h \<le>| xi; (xcptb, xi, xl) ::\<preceq> (G, map_of lvars(pns [\<mapsto>] pTs', This \<mapsto> Class md)); xi \<le>| h'; (x', h', xj) ::\<preceq> (G, map_of lvars(pns [\<mapsto>] pTs', This \<mapsto> Class md)); x' = None \<longrightarrow> G,h' \<turnstile> v ::\<preceq> T\<rbrakk> \<Longrightarrow> xconf h' (?x151 D ac Ca fs fs' T) \<longrightarrow> xconf h' x'
[PROOF STEP]
apply( rule conforms_hext)
[PROOF STATE]
proof (prove)
goal (4 subgoals):
 1. \<And>D ac Ca fs fs' T. \<lbrakk>wf_java_prog G; Norm (h, l) ::\<preceq> (G, lT); class G C = Some y; xc \<le>| xh; xh \<le>| h; list_all2 (conf G h) pvs pTsa; G,xh \<turnstile> Addr ac ::\<preceq> Class C; mda = Class D; list_all2 (widen G) pTsa pTs'; a' = Addr ac; G \<turnstile> Ca \<preceq>C C; xh ac = Some (Ca, fs); h ac = Some (Ca, fs'); G \<turnstile> rT \<preceq> rTa; G \<turnstile> Ca \<preceq>C md; wf_mhead G (mn, pTs') rT; length pTs' = length pns; distinct pns; unique lvars; This \<notin> set pns; This \<notin> fst ` set lvars; \<forall>pn\<in>set pns. map_of lvars pn = None; \<forall>x\<in>set lvars. is_type G (snd x); (G, map_of lvars(pns [\<mapsto>] pTs', This \<mapsto> Class md)) \<turnstile> blk \<surd>; G \<turnstile> T \<preceq> rT; h \<le>| xi; (xcptb, xi, xl) ::\<preceq> (G, map_of lvars(pns [\<mapsto>] pTs', This \<mapsto> Class md)); xi \<le>| h'; (x', h', xj) ::\<preceq> (G, map_of lvars(pns [\<mapsto>] pTs', This \<mapsto> Class md)); x' = None \<longrightarrow> G,h' \<turnstile> v ::\<preceq> T\<rbrakk> \<Longrightarrow> (?x151 D ac Ca fs fs' T, ?h154 D ac Ca fs fs' T, l) ::\<preceq> (G, lT)
 2. \<And>D ac Ca fs fs' T. \<lbrakk>wf_java_prog G; Norm (h, l) ::\<preceq> (G, lT); class G C = Some y; xc \<le>| xh; xh \<le>| h; list_all2 (conf G h) pvs pTsa; G,xh \<turnstile> Addr ac ::\<preceq> Class C; mda = Class D; list_all2 (widen G) pTsa pTs'; a' = Addr ac; G \<turnstile> Ca \<preceq>C C; xh ac = Some (Ca, fs); h ac = Some (Ca, fs'); G \<turnstile> rT \<preceq> rTa; G \<turnstile> Ca \<preceq>C md; wf_mhead G (mn, pTs') rT; length pTs' = length pns; distinct pns; unique lvars; This \<notin> set pns; This \<notin> fst ` set lvars; \<forall>pn\<in>set pns. map_of lvars pn = None; \<forall>x\<in>set lvars. is_type G (snd x); (G, map_of lvars(pns [\<mapsto>] pTs', This \<mapsto> Class md)) \<turnstile> blk \<surd>; G \<turnstile> T \<preceq> rT; h \<le>| xi; (xcptb, xi, xl) ::\<preceq> (G, map_of lvars(pns [\<mapsto>] pTs', This \<mapsto> Class md)); xi \<le>| h'; (x', h', xj) ::\<preceq> (G, map_of lvars(pns [\<mapsto>] pTs', This \<mapsto> Class md)); x' = None \<longrightarrow> G,h' \<turnstile> v ::\<preceq> T\<rbrakk> \<Longrightarrow> ?h154 D ac Ca fs fs' T \<le>| h'
 3. \<And>D ac Ca fs fs' T. \<lbrakk>wf_java_prog G; Norm (h, l) ::\<preceq> (G, lT); class G C = Some y; xc \<le>| xh; xh \<le>| h; list_all2 (conf G h) pvs pTsa; G,xh \<turnstile> Addr ac ::\<preceq> Class C; mda = Class D; list_all2 (widen G) pTsa pTs'; a' = Addr ac; G \<turnstile> Ca \<preceq>C C; xh ac = Some (Ca, fs); h ac = Some (Ca, fs'); G \<turnstile> rT \<preceq> rTa; G \<turnstile> Ca \<preceq>C md; wf_mhead G (mn, pTs') rT; length pTs' = length pns; distinct pns; unique lvars; This \<notin> set pns; This \<notin> fst ` set lvars; \<forall>pn\<in>set pns. map_of lvars pn = None; \<forall>x\<in>set lvars. is_type G (snd x); (G, map_of lvars(pns [\<mapsto>] pTs', This \<mapsto> Class md)) \<turnstile> blk \<surd>; G \<turnstile> T \<preceq> rT; h \<le>| xi; (xcptb, xi, xl) ::\<preceq> (G, map_of lvars(pns [\<mapsto>] pTs', This \<mapsto> Class md)); xi \<le>| h'; (x', h', xj) ::\<preceq> (G, map_of lvars(pns [\<mapsto>] pTs', This \<mapsto> Class md)); x' = None \<longrightarrow> G,h' \<turnstile> v ::\<preceq> T\<rbrakk> \<Longrightarrow> G \<turnstile>h h' \<surd>
 4. \<And>D ac Ca fs fs' T. \<lbrakk>wf_java_prog G; Norm (h, l) ::\<preceq> (G, lT); class G C = Some y; xc \<le>| xh; xh \<le>| h; list_all2 (conf G h) pvs pTsa; G,xh \<turnstile> Addr ac ::\<preceq> Class C; mda = Class D; list_all2 (widen G) pTsa pTs'; a' = Addr ac; G \<turnstile> Ca \<preceq>C C; xh ac = Some (Ca, fs); h ac = Some (Ca, fs'); G \<turnstile> rT \<preceq> rTa; G \<turnstile> Ca \<preceq>C md; wf_mhead G (mn, pTs') rT; length pTs' = length pns; distinct pns; unique lvars; This \<notin> set pns; This \<notin> fst ` set lvars; \<forall>pn\<in>set pns. map_of lvars pn = None; \<forall>x\<in>set lvars. is_type G (snd x); (G, map_of lvars(pns [\<mapsto>] pTs', This \<mapsto> Class md)) \<turnstile> blk \<surd>; G \<turnstile> T \<preceq> rT; h \<le>| xi; (xcptb, xi, xl) ::\<preceq> (G, map_of lvars(pns [\<mapsto>] pTs', This \<mapsto> Class md)); xi \<le>| h'; (x', h', xj) ::\<preceq> (G, map_of lvars(pns [\<mapsto>] pTs', This \<mapsto> Class md)); x' = None \<longrightarrow> G,h' \<turnstile> v ::\<preceq> T\<rbrakk> \<Longrightarrow> xconf h' (?x151 D ac Ca fs fs' T) \<longrightarrow> xconf h' x'
[PROOF STEP]
apply assumption
[PROOF STATE]
proof (prove)
goal (3 subgoals):
 1. \<And>D ac Ca fs fs' T. \<lbrakk>wf_java_prog G; Norm (h, l) ::\<preceq> (G, lT); class G C = Some y; xc \<le>| xh; xh \<le>| h; list_all2 (conf G h) pvs pTsa; G,xh \<turnstile> Addr ac ::\<preceq> Class C; mda = Class D; list_all2 (widen G) pTsa pTs'; a' = Addr ac; G \<turnstile> Ca \<preceq>C C; xh ac = Some (Ca, fs); h ac = Some (Ca, fs'); G \<turnstile> rT \<preceq> rTa; G \<turnstile> Ca \<preceq>C md; wf_mhead G (mn, pTs') rT; length pTs' = length pns; distinct pns; unique lvars; This \<notin> set pns; This \<notin> fst ` set lvars; \<forall>pn\<in>set pns. map_of lvars pn = None; \<forall>x\<in>set lvars. is_type G (snd x); (G, map_of lvars(pns [\<mapsto>] pTs', This \<mapsto> Class md)) \<turnstile> blk \<surd>; G \<turnstile> T \<preceq> rT; h \<le>| xi; (xcptb, xi, xl) ::\<preceq> (G, map_of lvars(pns [\<mapsto>] pTs', This \<mapsto> Class md)); xi \<le>| h'; (x', h', xj) ::\<preceq> (G, map_of lvars(pns [\<mapsto>] pTs', This \<mapsto> Class md)); x' = None \<longrightarrow> G,h' \<turnstile> v ::\<preceq> T\<rbrakk> \<Longrightarrow> h \<le>| h'
 2. \<And>D ac Ca fs fs' T. \<lbrakk>wf_java_prog G; Norm (h, l) ::\<preceq> (G, lT); class G C = Some y; xc \<le>| xh; xh \<le>| h; list_all2 (conf G h) pvs pTsa; G,xh \<turnstile> Addr ac ::\<preceq> Class C; mda = Class D; list_all2 (widen G) pTsa pTs'; a' = Addr ac; G \<turnstile> Ca \<preceq>C C; xh ac = Some (Ca, fs); h ac = Some (Ca, fs'); G \<turnstile> rT \<preceq> rTa; G \<turnstile> Ca \<preceq>C md; wf_mhead G (mn, pTs') rT; length pTs' = length pns; distinct pns; unique lvars; This \<notin> set pns; This \<notin> fst ` set lvars; \<forall>pn\<in>set pns. map_of lvars pn = None; \<forall>x\<in>set lvars. is_type G (snd x); (G, map_of lvars(pns [\<mapsto>] pTs', This \<mapsto> Class md)) \<turnstile> blk \<surd>; G \<turnstile> T \<preceq> rT; h \<le>| xi; (xcptb, xi, xl) ::\<preceq> (G, map_of lvars(pns [\<mapsto>] pTs', This \<mapsto> Class md)); xi \<le>| h'; (x', h', xj) ::\<preceq> (G, map_of lvars(pns [\<mapsto>] pTs', This \<mapsto> Class md)); x' = None \<longrightarrow> G,h' \<turnstile> v ::\<preceq> T\<rbrakk> \<Longrightarrow> G \<turnstile>h h' \<surd>
 3. \<And>D ac Ca fs fs' T. \<lbrakk>wf_java_prog G; Norm (h, l) ::\<preceq> (G, lT); class G C = Some y; xc \<le>| xh; xh \<le>| h; list_all2 (conf G h) pvs pTsa; G,xh \<turnstile> Addr ac ::\<preceq> Class C; mda = Class D; list_all2 (widen G) pTsa pTs'; a' = Addr ac; G \<turnstile> Ca \<preceq>C C; xh ac = Some (Ca, fs); h ac = Some (Ca, fs'); G \<turnstile> rT \<preceq> rTa; G \<turnstile> Ca \<preceq>C md; wf_mhead G (mn, pTs') rT; length pTs' = length pns; distinct pns; unique lvars; This \<notin> set pns; This \<notin> fst ` set lvars; \<forall>pn\<in>set pns. map_of lvars pn = None; \<forall>x\<in>set lvars. is_type G (snd x); (G, map_of lvars(pns [\<mapsto>] pTs', This \<mapsto> Class md)) \<turnstile> blk \<surd>; G \<turnstile> T \<preceq> rT; h \<le>| xi; (xcptb, xi, xl) ::\<preceq> (G, map_of lvars(pns [\<mapsto>] pTs', This \<mapsto> Class md)); xi \<le>| h'; (x', h', xj) ::\<preceq> (G, map_of lvars(pns [\<mapsto>] pTs', This \<mapsto> Class md)); x' = None \<longrightarrow> G,h' \<turnstile> v ::\<preceq> T\<rbrakk> \<Longrightarrow> xconf h' None \<longrightarrow> xconf h' x'
[PROOF STEP]
apply(  erule (1) hext_trans)
[PROOF STATE]
proof (prove)
goal (2 subgoals):
 1. \<And>D ac Ca fs fs' T. \<lbrakk>wf_java_prog G; Norm (h, l) ::\<preceq> (G, lT); class G C = Some y; xc \<le>| xh; xh \<le>| h; list_all2 (conf G h) pvs pTsa; G,xh \<turnstile> Addr ac ::\<preceq> Class C; mda = Class D; list_all2 (widen G) pTsa pTs'; a' = Addr ac; G \<turnstile> Ca \<preceq>C C; xh ac = Some (Ca, fs); h ac = Some (Ca, fs'); G \<turnstile> rT \<preceq> rTa; G \<turnstile> Ca \<preceq>C md; wf_mhead G (mn, pTs') rT; length pTs' = length pns; distinct pns; unique lvars; This \<notin> set pns; This \<notin> fst ` set lvars; \<forall>pn\<in>set pns. map_of lvars pn = None; \<forall>x\<in>set lvars. is_type G (snd x); (G, map_of lvars(pns [\<mapsto>] pTs', This \<mapsto> Class md)) \<turnstile> blk \<surd>; G \<turnstile> T \<preceq> rT; h \<le>| xi; (xcptb, xi, xl) ::\<preceq> (G, map_of lvars(pns [\<mapsto>] pTs', This \<mapsto> Class md)); xi \<le>| h'; (x', h', xj) ::\<preceq> (G, map_of lvars(pns [\<mapsto>] pTs', This \<mapsto> Class md)); x' = None \<longrightarrow> G,h' \<turnstile> v ::\<preceq> T\<rbrakk> \<Longrightarrow> G \<turnstile>h h' \<surd>
 2. \<And>D ac Ca fs fs' T. \<lbrakk>wf_java_prog G; Norm (h, l) ::\<preceq> (G, lT); class G C = Some y; xc \<le>| xh; xh \<le>| h; list_all2 (conf G h) pvs pTsa; G,xh \<turnstile> Addr ac ::\<preceq> Class C; mda = Class D; list_all2 (widen G) pTsa pTs'; a' = Addr ac; G \<turnstile> Ca \<preceq>C C; xh ac = Some (Ca, fs); h ac = Some (Ca, fs'); G \<turnstile> rT \<preceq> rTa; G \<turnstile> Ca \<preceq>C md; wf_mhead G (mn, pTs') rT; length pTs' = length pns; distinct pns; unique lvars; This \<notin> set pns; This \<notin> fst ` set lvars; \<forall>pn\<in>set pns. map_of lvars pn = None; \<forall>x\<in>set lvars. is_type G (snd x); (G, map_of lvars(pns [\<mapsto>] pTs', This \<mapsto> Class md)) \<turnstile> blk \<surd>; G \<turnstile> T \<preceq> rT; h \<le>| xi; (xcptb, xi, xl) ::\<preceq> (G, map_of lvars(pns [\<mapsto>] pTs', This \<mapsto> Class md)); xi \<le>| h'; (x', h', xj) ::\<preceq> (G, map_of lvars(pns [\<mapsto>] pTs', This \<mapsto> Class md)); x' = None \<longrightarrow> G,h' \<turnstile> v ::\<preceq> T\<rbrakk> \<Longrightarrow> xconf h' None \<longrightarrow> xconf h' x'
[PROOF STEP]
apply( erule conforms_heapD)
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<And>D ac Ca fs fs' T. \<lbrakk>wf_java_prog G; Norm (h, l) ::\<preceq> (G, lT); class G C = Some y; xc \<le>| xh; xh \<le>| h; list_all2 (conf G h) pvs pTsa; G,xh \<turnstile> Addr ac ::\<preceq> Class C; mda = Class D; list_all2 (widen G) pTsa pTs'; a' = Addr ac; G \<turnstile> Ca \<preceq>C C; xh ac = Some (Ca, fs); h ac = Some (Ca, fs'); G \<turnstile> rT \<preceq> rTa; G \<turnstile> Ca \<preceq>C md; wf_mhead G (mn, pTs') rT; length pTs' = length pns; distinct pns; unique lvars; This \<notin> set pns; This \<notin> fst ` set lvars; \<forall>pn\<in>set pns. map_of lvars pn = None; \<forall>x\<in>set lvars. is_type G (snd x); (G, map_of lvars(pns [\<mapsto>] pTs', This \<mapsto> Class md)) \<turnstile> blk \<surd>; G \<turnstile> T \<preceq> rT; h \<le>| xi; (xcptb, xi, xl) ::\<preceq> (G, map_of lvars(pns [\<mapsto>] pTs', This \<mapsto> Class md)); xi \<le>| h'; (x', h', xj) ::\<preceq> (G, map_of lvars(pns [\<mapsto>] pTs', This \<mapsto> Class md)); x' = None \<longrightarrow> G,h' \<turnstile> v ::\<preceq> T\<rbrakk> \<Longrightarrow> xconf h' None \<longrightarrow> xconf h' x'
[PROOF STEP]
apply (simp add: conforms_def)
[PROOF STATE]
proof (prove)
goal:
No subgoals!
[PROOF STEP]
done


[STATEMENT]
theorem Sbis_c2: "c2 \<approx>s c2"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. c2 \<approx>s c2
[PROOF STEP]
oops


[STATEMENT]
lemma "P Inl"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. P Inl
[PROOF STEP]
refute [expect = genuine]
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. P Inl
[PROOF STEP]
oops