[STATEMENT]
lemma infer_e_e_wf:
  fixes e::e
  assumes "\<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile> e \<Rightarrow> \<tau>"
  shows "\<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f e : b_of \<tau>"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1.  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f e : b_of \<tau>
[PROOF STEP]
using assms
[PROOF STATE]
proof (prove)
using this:
\<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta>  \<turnstile> e \<Rightarrow> \<tau>

goal (1 subgoal):
 1.  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f e : b_of \<tau>
[PROOF STEP]
proof(nominal_induct \<tau> avoiding: \<tau> rule: infer_e.strong_induct)
[PROOF STATE]
proof (state)
goal (12 subgoals):
 1. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> v \<tau> \<tau>'. \<lbrakk> \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v \<Rightarrow> \<tau>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [ v ]\<^sup>e : b_of \<tau>
 2. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> v1 z1 c1 v2 z2 c2 z3 \<tau>. \<lbrakk> \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v1 \<Rightarrow> \<lbrace> z1 : B_int  | c1 \<rbrace>;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v2 \<Rightarrow> \<lbrace> z2 : B_int  | c2 \<rbrace>; atom z3 \<sharp> [ plus v1 v2 ]\<^sup>e; atom z3 \<sharp> \<Gamma>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [ plus v1 v2 ]\<^sup>e : b_of \<lbrace> z3 : B_int  | [ [ z3 ]\<^sup>v ]\<^sup>c\<^sup>e  ==  [ plus [ v1 ]\<^sup>c\<^sup>e [ v2 ]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e  \<rbrace>
 3. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> v1 z1 c1 v2 z2 c2 z3 \<tau>. \<lbrakk> \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v1 \<Rightarrow> \<lbrace> z1 : B_int  | c1 \<rbrace>;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v2 \<Rightarrow> \<lbrace> z2 : B_int  | c2 \<rbrace>; atom z3 \<sharp> [ leq v1 v2 ]\<^sup>e; atom z3 \<sharp> \<Gamma>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [ leq v1 v2 ]\<^sup>e : b_of \<lbrace> z3 : B_bool  | [ [ z3 ]\<^sup>v ]\<^sup>c\<^sup>e  ==  [ leq [ v1 ]\<^sup>c\<^sup>e [ v2 ]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e  \<rbrace>
 4. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> v1 z1 b c1 v2 z2 c2 z3 \<tau>. \<lbrakk> \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v1 \<Rightarrow> \<lbrace> z1 : b  | c1 \<rbrace>;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v2 \<Rightarrow> \<lbrace> z2 : b  | c2 \<rbrace>; atom z3 \<sharp> [ eq v1 v2 ]\<^sup>e; atom z3 \<sharp> \<Gamma>; b \<in> {B_bool, B_int, B_unit}\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [ eq v1 v2 ]\<^sup>e : b_of \<lbrace> z3 : B_bool  | [ [ z3 ]\<^sup>v ]\<^sup>c\<^sup>e  ==  [ eq [ v1 ]\<^sup>c\<^sup>e [ v2 ]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e  \<rbrace>
 5. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> f x b c \<tau>' s' v \<tau> \<tau>''. \<lbrakk>atom x \<sharp> \<tau>'';  \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ; Some (AF_fundef f (AF_fun_typ_none (AF_fun_typ x b c \<tau>' s'))) = lookup_fun \<Phi> f; \<Theta> ; \<B> ; \<Gamma>  \<turnstile> v \<Leftarrow> \<lbrace> x : b  | c \<rbrace>; atom x \<sharp> \<Theta>; atom x \<sharp> \<Phi>; atom x \<sharp> \<B>; atom x \<sharp> \<Gamma>; atom x \<sharp> \<Delta>; atom x \<sharp> v; atom x \<sharp> \<tau>; \<tau>'[x::=v]\<^sub>v = \<tau>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [ f  v  ]\<^sup>e : b_of \<tau>
 6. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> b' f bv x b c \<tau>' s' v \<tau> \<tau>''. \<lbrakk>atom bv \<sharp> \<tau>'';  \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B>  \<turnstile>\<^sub>w\<^sub>f b' ; Some (AF_fundef f (AF_fun_typ_some bv (AF_fun_typ x b c \<tau>' s'))) = lookup_fun \<Phi> f; \<Theta> ; \<B> ; \<Gamma>  \<turnstile> v \<Leftarrow> \<lbrace> x : b[bv::=b']\<^sub>b  | c[bv::=b']\<^sub>b \<rbrace>; atom x \<sharp> \<Gamma>; \<tau>'[bv::=b']\<^sub>b[x::=v]\<^sub>v = \<tau>; atom bv \<sharp> \<Theta>; atom bv \<sharp> \<Phi>; atom bv \<sharp> \<B>; atom bv \<sharp> \<Gamma>; atom bv \<sharp> \<Delta>; atom bv \<sharp> b'; atom bv \<sharp> v; atom bv \<sharp> \<tau>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [f [ b' ]  v ]\<^sup>e : b_of \<tau>
 7. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> v z' b1 b2 c z \<tau>. \<lbrakk> \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v \<Rightarrow> \<lbrace> z' : [ b1 , b2 ]\<^sup>b  | c \<rbrace>; atom z \<sharp> [#1v ]\<^sup>e; atom z \<sharp> \<Gamma>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [#1v ]\<^sup>e : b_of \<lbrace> z : b1  | [ [ z ]\<^sup>v ]\<^sup>c\<^sup>e  ==  [#1[ v ]\<^sup>c\<^sup>e]\<^sup>c\<^sup>e  \<rbrace>
 8. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> v z' b1 b2 c z \<tau>. \<lbrakk> \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v \<Rightarrow> \<lbrace> z' : [ b1 , b2 ]\<^sup>b  | c \<rbrace>; atom z \<sharp> [#2v ]\<^sup>e; atom z \<sharp> \<Gamma>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [#2v ]\<^sup>e : b_of \<lbrace> z : b2  | [ [ z ]\<^sup>v ]\<^sup>c\<^sup>e  ==  [#2[ v ]\<^sup>c\<^sup>e]\<^sup>c\<^sup>e  \<rbrace>
 9. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> v z' c z \<tau>. \<lbrakk> \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v \<Rightarrow> \<lbrace> z' : B_bitvec  | c \<rbrace>; atom z \<sharp> [| v |]\<^sup>e; atom z \<sharp> \<Gamma>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [| v |]\<^sup>e : b_of \<lbrace> z : B_int  | [ [ z ]\<^sup>v ]\<^sup>c\<^sup>e  ==  [| [ v ]\<^sup>c\<^sup>e |]\<^sup>c\<^sup>e  \<rbrace>
 10. \<And>\<Theta> \<B> \<Gamma> \<Phi> \<Delta> u \<tau> \<tau>'. \<lbrakk> \<Theta> ; \<B>  \<turnstile>\<^sub>w\<^sub>f \<Gamma> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ; (u, \<tau>) \<in> setD \<Delta>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [ u ]\<^sup>e : b_of \<tau>
A total of 12 subgoals...
[PROOF STEP]
case (infer_e_valI \<Theta> \<B> \<Gamma> \<Delta>' \<Phi> v \<tau>)
[PROOF STATE]
proof (state)
this:
 \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta>'
 \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi>
 \<Theta> ; \<B> ; \<Gamma> \<turnstile> v \<Rightarrow> \<tau>'__

goal (12 subgoals):
 1. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> v \<tau> \<tau>'. \<lbrakk> \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v \<Rightarrow> \<tau>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [ v ]\<^sup>e : b_of \<tau>
 2. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> v1 z1 c1 v2 z2 c2 z3 \<tau>. \<lbrakk> \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v1 \<Rightarrow> \<lbrace> z1 : B_int  | c1 \<rbrace>;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v2 \<Rightarrow> \<lbrace> z2 : B_int  | c2 \<rbrace>; atom z3 \<sharp> [ plus v1 v2 ]\<^sup>e; atom z3 \<sharp> \<Gamma>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [ plus v1 v2 ]\<^sup>e : b_of \<lbrace> z3 : B_int  | [ [ z3 ]\<^sup>v ]\<^sup>c\<^sup>e  ==  [ plus [ v1 ]\<^sup>c\<^sup>e [ v2 ]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e  \<rbrace>
 3. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> v1 z1 c1 v2 z2 c2 z3 \<tau>. \<lbrakk> \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v1 \<Rightarrow> \<lbrace> z1 : B_int  | c1 \<rbrace>;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v2 \<Rightarrow> \<lbrace> z2 : B_int  | c2 \<rbrace>; atom z3 \<sharp> [ leq v1 v2 ]\<^sup>e; atom z3 \<sharp> \<Gamma>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [ leq v1 v2 ]\<^sup>e : b_of \<lbrace> z3 : B_bool  | [ [ z3 ]\<^sup>v ]\<^sup>c\<^sup>e  ==  [ leq [ v1 ]\<^sup>c\<^sup>e [ v2 ]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e  \<rbrace>
 4. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> v1 z1 b c1 v2 z2 c2 z3 \<tau>. \<lbrakk> \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v1 \<Rightarrow> \<lbrace> z1 : b  | c1 \<rbrace>;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v2 \<Rightarrow> \<lbrace> z2 : b  | c2 \<rbrace>; atom z3 \<sharp> [ eq v1 v2 ]\<^sup>e; atom z3 \<sharp> \<Gamma>; b \<in> {B_bool, B_int, B_unit}\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [ eq v1 v2 ]\<^sup>e : b_of \<lbrace> z3 : B_bool  | [ [ z3 ]\<^sup>v ]\<^sup>c\<^sup>e  ==  [ eq [ v1 ]\<^sup>c\<^sup>e [ v2 ]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e  \<rbrace>
 5. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> f x b c \<tau>' s' v \<tau> \<tau>''. \<lbrakk>atom x \<sharp> \<tau>'';  \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ; Some (AF_fundef f (AF_fun_typ_none (AF_fun_typ x b c \<tau>' s'))) = lookup_fun \<Phi> f; \<Theta> ; \<B> ; \<Gamma>  \<turnstile> v \<Leftarrow> \<lbrace> x : b  | c \<rbrace>; atom x \<sharp> \<Theta>; atom x \<sharp> \<Phi>; atom x \<sharp> \<B>; atom x \<sharp> \<Gamma>; atom x \<sharp> \<Delta>; atom x \<sharp> v; atom x \<sharp> \<tau>; \<tau>'[x::=v]\<^sub>v = \<tau>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [ f  v  ]\<^sup>e : b_of \<tau>
 6. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> b' f bv x b c \<tau>' s' v \<tau> \<tau>''. \<lbrakk>atom bv \<sharp> \<tau>'';  \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B>  \<turnstile>\<^sub>w\<^sub>f b' ; Some (AF_fundef f (AF_fun_typ_some bv (AF_fun_typ x b c \<tau>' s'))) = lookup_fun \<Phi> f; \<Theta> ; \<B> ; \<Gamma>  \<turnstile> v \<Leftarrow> \<lbrace> x : b[bv::=b']\<^sub>b  | c[bv::=b']\<^sub>b \<rbrace>; atom x \<sharp> \<Gamma>; \<tau>'[bv::=b']\<^sub>b[x::=v]\<^sub>v = \<tau>; atom bv \<sharp> \<Theta>; atom bv \<sharp> \<Phi>; atom bv \<sharp> \<B>; atom bv \<sharp> \<Gamma>; atom bv \<sharp> \<Delta>; atom bv \<sharp> b'; atom bv \<sharp> v; atom bv \<sharp> \<tau>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [f [ b' ]  v ]\<^sup>e : b_of \<tau>
 7. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> v z' b1 b2 c z \<tau>. \<lbrakk> \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v \<Rightarrow> \<lbrace> z' : [ b1 , b2 ]\<^sup>b  | c \<rbrace>; atom z \<sharp> [#1v ]\<^sup>e; atom z \<sharp> \<Gamma>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [#1v ]\<^sup>e : b_of \<lbrace> z : b1  | [ [ z ]\<^sup>v ]\<^sup>c\<^sup>e  ==  [#1[ v ]\<^sup>c\<^sup>e]\<^sup>c\<^sup>e  \<rbrace>
 8. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> v z' b1 b2 c z \<tau>. \<lbrakk> \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v \<Rightarrow> \<lbrace> z' : [ b1 , b2 ]\<^sup>b  | c \<rbrace>; atom z \<sharp> [#2v ]\<^sup>e; atom z \<sharp> \<Gamma>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [#2v ]\<^sup>e : b_of \<lbrace> z : b2  | [ [ z ]\<^sup>v ]\<^sup>c\<^sup>e  ==  [#2[ v ]\<^sup>c\<^sup>e]\<^sup>c\<^sup>e  \<rbrace>
 9. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> v z' c z \<tau>. \<lbrakk> \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v \<Rightarrow> \<lbrace> z' : B_bitvec  | c \<rbrace>; atom z \<sharp> [| v |]\<^sup>e; atom z \<sharp> \<Gamma>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [| v |]\<^sup>e : b_of \<lbrace> z : B_int  | [ [ z ]\<^sup>v ]\<^sup>c\<^sup>e  ==  [| [ v ]\<^sup>c\<^sup>e |]\<^sup>c\<^sup>e  \<rbrace>
 10. \<And>\<Theta> \<B> \<Gamma> \<Phi> \<Delta> u \<tau> \<tau>'. \<lbrakk> \<Theta> ; \<B>  \<turnstile>\<^sub>w\<^sub>f \<Gamma> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ; (u, \<tau>) \<in> setD \<Delta>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [ u ]\<^sup>e : b_of \<tau>
A total of 12 subgoals...
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
 \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta>'
 \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi>
 \<Theta> ; \<B> ; \<Gamma> \<turnstile> v \<Rightarrow> \<tau>'__
[PROOF STEP]
show ?case
[PROOF STATE]
proof (prove)
using this:
 \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta>'
 \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi>
 \<Theta> ; \<B> ; \<Gamma> \<turnstile> v \<Rightarrow> \<tau>'__

goal (1 subgoal):
 1.  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta>' \<turnstile>\<^sub>w\<^sub>f [ v ]\<^sup>e : b_of \<tau>'__
[PROOF STEP]
using  infer_v_v_wf wf_intros
[PROOF STATE]
proof (prove)
using this:
 \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta>'
 \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi>
 \<Theta> ; \<B> ; \<Gamma> \<turnstile> v \<Rightarrow> \<tau>'__
 ?\<Theta> ; ?\<B> ; ?G \<turnstile> ?v \<Rightarrow> ?\<tau> \<Longrightarrow>  ?\<Theta> ; ?\<B> ; ?G \<turnstile>\<^sub>w\<^sub>f ?v : b_of ?\<tau>
   \<turnstile>\<^sub>w\<^sub>f ?\<Theta>  \<Longrightarrow>  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f B_int
   \<turnstile>\<^sub>w\<^sub>f ?\<Theta>  \<Longrightarrow>  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f B_bool
   \<turnstile>\<^sub>w\<^sub>f ?\<Theta>  \<Longrightarrow>  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f B_unit
   \<turnstile>\<^sub>w\<^sub>f ?\<Theta>  \<Longrightarrow>  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f B_bitvec
\<lbrakk> ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?b1.0 ;  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?b2.0 \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f [ ?b1.0 , ?b2.0 ]\<^sup>b
\<lbrakk>   \<turnstile>\<^sub>w\<^sub>f ?\<Theta> ; AF_typedef ?s ?dclist \<in> set ?\<Theta>\<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f B_id ?s
\<lbrakk>   \<turnstile>\<^sub>w\<^sub>f ?\<Theta> ;  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?b ; AF_typedef_poly ?s ?bv ?dclist \<in> set ?\<Theta>\<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f B_app ?s ?b
\<lbrakk> ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?\<Gamma> ; Some (?b, ?c) = lookup ?\<Gamma> ?x\<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [ ?x ]\<^sup>v : ?b
 ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?\<Gamma>  \<Longrightarrow>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [ ?l ]\<^sup>v : base_for_lit ?l
\<lbrakk> ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : ?b1.0 ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v2.0 : ?b2.0 \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [ ?v1.0 , ?v2.0 ]\<^sup>v : [ ?b1.0 , ?b2.0 ]\<^sup>b
\<lbrakk>AF_typedef ?s ?dclist \<in> set ?\<Theta>; (?dc, \<lbrace> ?x : ?b'  | ?c \<rbrace>) \<in> set ?dclist;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v : ?b' \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f V_cons ?s ?dc ?v : B_id ?s
\<lbrakk>AF_typedef_poly ?s ?bv ?dclist \<in> set ?\<Theta>; (?dc, \<lbrace> ?x : ?b'  | ?c \<rbrace>) \<in> set ?dclist;  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?b ; atom ?bv \<sharp> (?\<Theta>, ?\<B>, ?\<Gamma>, ?b, ?v);  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v : ?b'[?bv::=?b]\<^sub>b\<^sub>b \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f V_consp ?s ?dc ?b ?v : B_app ?s ?b
 ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v : ?b  \<Longrightarrow>   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [ ?v ]\<^sup>c\<^sup>e : ?b
\<lbrakk>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : B_int ;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v2.0 : B_int \<rbrakk> \<Longrightarrow>   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [ plus ?v1.0 ?v2.0 ]\<^sup>c\<^sup>e : B_int
\<lbrakk>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : B_int ;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v2.0 : B_int \<rbrakk> \<Longrightarrow>   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [ leq ?v1.0 ?v2.0 ]\<^sup>c\<^sup>e : B_bool
\<lbrakk>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : ?b ;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v2.0 : ?b \<rbrakk> \<Longrightarrow>   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [ eq ?v1.0 ?v2.0 ]\<^sup>c\<^sup>e : B_bool
  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : [ ?b1.0 , ?b2.0 ]\<^sup>b  \<Longrightarrow>   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [#1?v1.0]\<^sup>c\<^sup>e : ?b1.0
  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : [ ?b1.0 , ?b2.0 ]\<^sup>b  \<Longrightarrow>   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [#2?v1.0]\<^sup>c\<^sup>e : ?b2.0
\<lbrakk>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : B_bitvec ;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v2.0 : B_bitvec \<rbrakk> \<Longrightarrow>   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [ ?v1.0 @@ ?v2.0 ]\<^sup>c\<^sup>e : B_bitvec
  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : B_bitvec  \<Longrightarrow>   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [| ?v1.0 |]\<^sup>c\<^sup>e : B_int
\<lbrakk>atom ?z \<sharp> (?\<Theta>, ?\<B>, ?\<Gamma>);  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?b ;  ?\<Theta> ; ?\<B> ; (?z, ?b, TRUE) #\<^sub>\<Gamma> ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?c \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f \<lbrace> ?z : ?b  | ?c \<rbrace>
\<lbrakk>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?e1.0 : ?b ;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?e2.0 : ?b \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?e1.0  ==  ?e2.0
 ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?\<Gamma>  \<Longrightarrow>  ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f TRUE
 ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?\<Gamma>  \<Longrightarrow>  ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f FALSE
\<lbrakk> ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?c1.0 ;  ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?c2.0 \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?c1.0  AND  ?c2.0
\<lbrakk> ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?c1.0 ;  ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?c2.0 \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?c1.0 OR ?c2.0
 ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?c1.0  \<Longrightarrow>  ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f \<not> ?c1.0
\<lbrakk> ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?c1.0 ;  ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?c2.0 \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?c1.0  IMP  ?c2.0
   \<turnstile>\<^sub>w\<^sub>f ?\<Theta>  \<Longrightarrow>  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f GNil
\<lbrakk>?c \<notin> {TRUE, FALSE};  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?\<Gamma> ; atom ?x \<sharp> ?\<Gamma>;  ?\<Theta> ; ?\<B> ; (?x, ?b, TRUE) #\<^sub>\<Gamma> ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?c ;  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?b \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f (?x, ?b, ?c) #\<^sub>\<Gamma> ?\<Gamma>
\<lbrakk>?c \<in> {TRUE, FALSE};  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?\<Gamma> ; atom ?x \<sharp> ?\<Gamma>;  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?b \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f (?x, ?b, ?c) #\<^sub>\<Gamma> ?\<Gamma>
   \<turnstile>\<^sub>w\<^sub>f []
\<lbrakk>name_of_type ?tdef \<notin> name_of_type ` set ?\<Theta>;    \<turnstile>\<^sub>w\<^sub>f ?\<Theta> ;  ?\<Theta> \<turnstile>\<^sub>w\<^sub>f ?tdef \<rbrakk> \<Longrightarrow>    \<turnstile>\<^sub>w\<^sub>f ?tdef # ?\<Theta>
 ?\<Theta> ; {||}  ; GNil \<turnstile>\<^sub>w\<^sub>f ?lst  \<Longrightarrow>  ?\<Theta> \<turnstile>\<^sub>w\<^sub>f AF_typedef ?s ?lst
 ?\<Theta> ; {|?bv|}  ; GNil \<turnstile>\<^sub>w\<^sub>f ?lst  \<Longrightarrow>  ?\<Theta> \<turnstile>\<^sub>w\<^sub>f AF_typedef_poly ?s ?bv ?lst
 ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?\<Gamma>  \<Longrightarrow>  ?\<Theta> ; ?\<B>  ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f []
\<lbrakk> ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?\<tau> ; ?dc \<notin> fst ` set ?ts;  ?\<Theta> ; ?\<B>  ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?ts \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<B>  ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f (?dc, ?\<tau>) # ?ts
\<lbrakk> ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f ?\<Phi> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v : ?b \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f [ ?v ]\<^sup>e : ?b
\<lbrakk> ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f ?\<Phi> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : B_int ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v2.0 : B_int \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f [ plus ?v1.0 ?v2.0 ]\<^sup>e : B_int
\<lbrakk> ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f ?\<Phi> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : B_int ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v2.0 : B_int \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f [ leq ?v1.0 ?v2.0 ]\<^sup>e : B_bool
\<lbrakk> ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f ?\<Phi> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : ?b ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v2.0 : ?b ; ?b \<in> {B_bool, B_int, B_unit}\<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f [ eq ?v1.0 ?v2.0 ]\<^sup>e : B_bool
\<lbrakk> ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f ?\<Phi> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : [ ?b1.0 , ?b2.0 ]\<^sup>b \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f [#1?v1.0 ]\<^sup>e : ?b1.0
\<lbrakk> ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f ?\<Phi> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : [ ?b1.0 , ?b2.0 ]\<^sup>b \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f [#2?v1.0 ]\<^sup>e : ?b2.0
\<lbrakk> ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f ?\<Phi> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : B_bitvec ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v2.0 : B_bitvec \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f [ ?v1.0 @@ ?v2.0 ]\<^sup>e : B_bitvec
\<lbrakk> ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f ?\<Phi> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : B_bitvec ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v2.0 : B_int \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f [ ?v1.0  ?v2.0 ]\<^sup>e : [ B_bitvec , B_bitvec ]\<^sup>b
\<lbrakk> ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f ?\<Phi> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : B_bitvec \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f [| ?v1.0 |]\<^sup>e : B_int
\<lbrakk> ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f ?\<Phi> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta> ; Some (AF_fundef ?f (AF_fun_typ_none (AF_fun_typ ?x ?b ?c ?\<tau> ?s))) = lookup_fun ?\<Phi> ?f;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v : ?b \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f [ ?f  ?v  ]\<^sup>e : b_of ?\<tau>
\<lbrakk> ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f ?\<Phi> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta> ;  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?b' ; atom ?bv \<sharp> (?\<Phi>, ?\<Theta>, ?\<B>, ?\<Gamma>, ?\<Delta>, ?b', ?v, (b_of ?\<tau>)[?bv::=?b']\<^sub>b); Some (AF_fundef ?f (AF_fun_typ_some ?bv (AF_fun_typ ?x ?b ?c ?\<tau> ?s))) = lookup_fun ?\<Phi> ?f;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v : ?b[?bv::=?b']\<^sub>b \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f [?f [ ?b' ]  ?v ]\<^sup>e : (b_of ?\<tau>)[?bv::=?b']\<^sub>b
\<lbrakk> ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f ?\<Phi> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta> ; (?u, ?\<tau>) \<in> setD ?\<Delta>\<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f [ ?u ]\<^sup>e : b_of ?\<tau>
\<lbrakk> ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f ?\<Phi> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v : ?b ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta> \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f [?v]\<^sup>s : ?b
\<lbrakk> ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f ?e : ?b' ;  ?\<Theta> ; ?\<Phi> ; ?\<B> ; (?x, ?b', TRUE) #\<^sub>\<Gamma> ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f ?s : ?b ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta> ; atom ?x \<sharp> (?\<Phi>, ?\<Theta>, ?\<B>, ?\<Gamma>, ?\<Delta>, ?e, ?b)\<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f LET ?x = ?e IN ?s : ?b
\<lbrakk> ?\<Theta> ; ?\<Phi> ; ?\<B> ; (?x, B_bool, ?c) #\<^sub>\<Gamma> ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f ?s : ?b ;  ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?c ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta> ; atom ?x \<sharp> (?\<Phi>, ?\<Theta>, ?\<B>, ?\<Gamma>, ?\<Delta>, ?c, ?b, ?s)\<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f ASSERT ?c IN ?s  : ?b
\<lbrakk> ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f ?s1.0 : b_of ?\<tau> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?\<tau> ;  ?\<Theta> ; ?\<Phi> ; ?\<B> ; (?x, b_of ?\<tau>, TRUE) #\<^sub>\<Gamma> ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f ?s2.0 : ?b ; atom ?x \<sharp> (?\<Phi>, ?\<Theta>, ?\<B>, ?\<Gamma>, ?\<Delta>, ?s1.0, ?b, ?\<tau>)\<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f LET ?x : ?\<tau> = ?s1.0 IN ?s2.0 : ?b
\<lbrakk> ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v : B_bool ;  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f ?s1.0 : ?b ;  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f ?s2.0 : ?b \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f IF ?v THEN ?s1.0 ELSE ?s2.0 : ?b
\<lbrakk> ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?\<tau> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v : b_of ?\<tau> ; atom ?u \<sharp> (?\<Phi>, ?\<Theta>, ?\<B>, ?\<Gamma>, ?\<Delta>, ?\<tau>, ?v, ?b);  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; (?u, ?\<tau>) #\<^sub>\<Delta> ?\<Delta> \<turnstile>\<^sub>w\<^sub>f ?s : ?b \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f VAR ?u : ?\<tau> = ?v IN ?s : ?b
\<lbrakk>(?u, ?\<tau>) \<in> setD ?\<Delta>;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta> ;  ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f ?\<Phi> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v : b_of ?\<tau> \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f ?u ::= ?v : B_unit
\<lbrakk> ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f ?s1.0 : B_bool ;  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f ?s2.0 : ?b \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f WHILE ?s1.0 DO { ?s2.0 }  : ?b
\<lbrakk> ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f ?s1.0 : B_unit ;  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f ?s2.0 : ?b \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f  ?s1.0 ;; ?s2.0  : ?b
\<lbrakk> ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v : B_id ?tid ; AF_typedef ?tid ?dclist \<in> set ?\<Theta>;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta> ;  ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f ?\<Phi> ;  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> ; ?tid ; ?dclist \<turnstile>\<^sub>w\<^sub>f ?cs : ?b \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f MATCH ?v WITH { ?cs } : ?b
\<lbrakk> ?\<Theta> ; ?\<Phi> ; ?\<B> ; (?x, b_of ?\<tau>, TRUE) #\<^sub>\<Gamma> ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f ?s : ?b ; atom ?x \<sharp> (?\<Phi>, ?\<Theta>, ?\<B>, ?\<Gamma>, ?\<Delta>, ?\<Gamma>, ?\<tau>);  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta> \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> ; ?tid ; ?dc ; ?\<tau> \<turnstile>\<^sub>w\<^sub>f  ?dc ?x \<Rightarrow> ?s  : ?b
 ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> ; ?tid ; ?dc ; ?t \<turnstile>\<^sub>w\<^sub>f ?cs : ?b  \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> ; ?tid ; [(?dc, ?t)] \<turnstile>\<^sub>w\<^sub>f { ?cs } : ?b
\<lbrakk> ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> ; ?tid ; ?dc ; ?t \<turnstile>\<^sub>w\<^sub>f ?cs : ?b ;  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> ; ?tid ; ?dclist \<turnstile>\<^sub>w\<^sub>f ?css : ?b \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> ; ?tid ; (?dc, ?t) # ?dclist \<turnstile>\<^sub>w\<^sub>f  ?cs | ?css   : ?b
 ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?\<Gamma>  \<Longrightarrow>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f []\<^sub>\<Delta>
\<lbrakk> ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?\<tau> ; ?u \<notin> fst ` setD ?\<Delta>\<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f (?u, ?\<tau>) #\<^sub>\<Delta> ?\<Delta>
   \<turnstile>\<^sub>w\<^sub>f ?\<Theta>  \<Longrightarrow>  ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f []
\<lbrakk>?f \<notin> name_of_fun ` set ?\<Phi>;  ?\<Theta>  ; ?\<Phi> \<turnstile>\<^sub>w\<^sub>f ?ft ;  ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f ?\<Phi> \<rbrakk> \<Longrightarrow>  ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f AF_fundef ?f ?ft # ?\<Phi>
 ?\<Theta> ; ?\<Phi> ; {||} \<turnstile>\<^sub>w\<^sub>f ?ft  \<Longrightarrow>  ?\<Theta>  ; ?\<Phi> \<turnstile>\<^sub>w\<^sub>f AF_fun_typ_none ?ft
 ?\<Theta> ; ?\<Phi> ; {|?bv|} \<turnstile>\<^sub>w\<^sub>f ?ft  \<Longrightarrow>  ?\<Theta>  ; ?\<Phi> \<turnstile>\<^sub>w\<^sub>f AF_fun_typ_some ?bv ?ft
\<lbrakk> ?\<Theta> ; ?B  \<turnstile>\<^sub>w\<^sub>f ?b ; supp ?s \<subseteq> {atom ?x} \<union> supp ?B; supp ?c \<subseteq> {atom ?x};  ?\<Theta> ; ?B ; (?x, ?b, ?c) #\<^sub>\<Gamma> GNil   \<turnstile>\<^sub>w\<^sub>f ?\<tau> ;  ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f ?\<Phi> \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?B \<turnstile>\<^sub>w\<^sub>f AF_fun_typ ?x ?b ?c ?\<tau> ?s

goal (1 subgoal):
 1.  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta>' \<turnstile>\<^sub>w\<^sub>f [ v ]\<^sup>e : b_of \<tau>'__
[PROOF STEP]
by metis
[PROOF STATE]
proof (state)
this:
 \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta>' \<turnstile>\<^sub>w\<^sub>f [ v ]\<^sup>e : b_of \<tau>'__

goal (11 subgoals):
 1. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> v1 z1 c1 v2 z2 c2 z3 \<tau>. \<lbrakk> \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v1 \<Rightarrow> \<lbrace> z1 : B_int  | c1 \<rbrace>;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v2 \<Rightarrow> \<lbrace> z2 : B_int  | c2 \<rbrace>; atom z3 \<sharp> [ plus v1 v2 ]\<^sup>e; atom z3 \<sharp> \<Gamma>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [ plus v1 v2 ]\<^sup>e : b_of \<lbrace> z3 : B_int  | [ [ z3 ]\<^sup>v ]\<^sup>c\<^sup>e  ==  [ plus [ v1 ]\<^sup>c\<^sup>e [ v2 ]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e  \<rbrace>
 2. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> v1 z1 c1 v2 z2 c2 z3 \<tau>. \<lbrakk> \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v1 \<Rightarrow> \<lbrace> z1 : B_int  | c1 \<rbrace>;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v2 \<Rightarrow> \<lbrace> z2 : B_int  | c2 \<rbrace>; atom z3 \<sharp> [ leq v1 v2 ]\<^sup>e; atom z3 \<sharp> \<Gamma>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [ leq v1 v2 ]\<^sup>e : b_of \<lbrace> z3 : B_bool  | [ [ z3 ]\<^sup>v ]\<^sup>c\<^sup>e  ==  [ leq [ v1 ]\<^sup>c\<^sup>e [ v2 ]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e  \<rbrace>
 3. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> v1 z1 b c1 v2 z2 c2 z3 \<tau>. \<lbrakk> \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v1 \<Rightarrow> \<lbrace> z1 : b  | c1 \<rbrace>;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v2 \<Rightarrow> \<lbrace> z2 : b  | c2 \<rbrace>; atom z3 \<sharp> [ eq v1 v2 ]\<^sup>e; atom z3 \<sharp> \<Gamma>; b \<in> {B_bool, B_int, B_unit}\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [ eq v1 v2 ]\<^sup>e : b_of \<lbrace> z3 : B_bool  | [ [ z3 ]\<^sup>v ]\<^sup>c\<^sup>e  ==  [ eq [ v1 ]\<^sup>c\<^sup>e [ v2 ]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e  \<rbrace>
 4. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> f x b c \<tau>' s' v \<tau> \<tau>''. \<lbrakk>atom x \<sharp> \<tau>'';  \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ; Some (AF_fundef f (AF_fun_typ_none (AF_fun_typ x b c \<tau>' s'))) = lookup_fun \<Phi> f; \<Theta> ; \<B> ; \<Gamma>  \<turnstile> v \<Leftarrow> \<lbrace> x : b  | c \<rbrace>; atom x \<sharp> \<Theta>; atom x \<sharp> \<Phi>; atom x \<sharp> \<B>; atom x \<sharp> \<Gamma>; atom x \<sharp> \<Delta>; atom x \<sharp> v; atom x \<sharp> \<tau>; \<tau>'[x::=v]\<^sub>v = \<tau>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [ f  v  ]\<^sup>e : b_of \<tau>
 5. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> b' f bv x b c \<tau>' s' v \<tau> \<tau>''. \<lbrakk>atom bv \<sharp> \<tau>'';  \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B>  \<turnstile>\<^sub>w\<^sub>f b' ; Some (AF_fundef f (AF_fun_typ_some bv (AF_fun_typ x b c \<tau>' s'))) = lookup_fun \<Phi> f; \<Theta> ; \<B> ; \<Gamma>  \<turnstile> v \<Leftarrow> \<lbrace> x : b[bv::=b']\<^sub>b  | c[bv::=b']\<^sub>b \<rbrace>; atom x \<sharp> \<Gamma>; \<tau>'[bv::=b']\<^sub>b[x::=v]\<^sub>v = \<tau>; atom bv \<sharp> \<Theta>; atom bv \<sharp> \<Phi>; atom bv \<sharp> \<B>; atom bv \<sharp> \<Gamma>; atom bv \<sharp> \<Delta>; atom bv \<sharp> b'; atom bv \<sharp> v; atom bv \<sharp> \<tau>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [f [ b' ]  v ]\<^sup>e : b_of \<tau>
 6. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> v z' b1 b2 c z \<tau>. \<lbrakk> \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v \<Rightarrow> \<lbrace> z' : [ b1 , b2 ]\<^sup>b  | c \<rbrace>; atom z \<sharp> [#1v ]\<^sup>e; atom z \<sharp> \<Gamma>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [#1v ]\<^sup>e : b_of \<lbrace> z : b1  | [ [ z ]\<^sup>v ]\<^sup>c\<^sup>e  ==  [#1[ v ]\<^sup>c\<^sup>e]\<^sup>c\<^sup>e  \<rbrace>
 7. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> v z' b1 b2 c z \<tau>. \<lbrakk> \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v \<Rightarrow> \<lbrace> z' : [ b1 , b2 ]\<^sup>b  | c \<rbrace>; atom z \<sharp> [#2v ]\<^sup>e; atom z \<sharp> \<Gamma>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [#2v ]\<^sup>e : b_of \<lbrace> z : b2  | [ [ z ]\<^sup>v ]\<^sup>c\<^sup>e  ==  [#2[ v ]\<^sup>c\<^sup>e]\<^sup>c\<^sup>e  \<rbrace>
 8. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> v z' c z \<tau>. \<lbrakk> \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v \<Rightarrow> \<lbrace> z' : B_bitvec  | c \<rbrace>; atom z \<sharp> [| v |]\<^sup>e; atom z \<sharp> \<Gamma>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [| v |]\<^sup>e : b_of \<lbrace> z : B_int  | [ [ z ]\<^sup>v ]\<^sup>c\<^sup>e  ==  [| [ v ]\<^sup>c\<^sup>e |]\<^sup>c\<^sup>e  \<rbrace>
 9. \<And>\<Theta> \<B> \<Gamma> \<Phi> \<Delta> u \<tau> \<tau>'. \<lbrakk> \<Theta> ; \<B>  \<turnstile>\<^sub>w\<^sub>f \<Gamma> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ; (u, \<tau>) \<in> setD \<Delta>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [ u ]\<^sup>e : b_of \<tau>
 10. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> v1 z1 c1 v2 z2 c2 z3 \<tau>. \<lbrakk> \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v1 \<Rightarrow> \<lbrace> z1 : B_bitvec  | c1 \<rbrace>;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v2 \<Rightarrow> \<lbrace> z2 : B_bitvec  | c2 \<rbrace>; atom z3 \<sharp> [ v1 @@ v2 ]\<^sup>e; atom z3 \<sharp> \<Gamma>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [ v1 @@ v2 ]\<^sup>e : b_of \<lbrace> z3 : B_bitvec  | [ [ z3 ]\<^sup>v ]\<^sup>c\<^sup>e  ==  [ [ v1 ]\<^sup>c\<^sup>e @@ [ v2 ]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e  \<rbrace>
A total of 11 subgoals...
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (11 subgoals):
 1. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> v1 z1 c1 v2 z2 c2 z3 \<tau>. \<lbrakk> \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v1 \<Rightarrow> \<lbrace> z1 : B_int  | c1 \<rbrace>;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v2 \<Rightarrow> \<lbrace> z2 : B_int  | c2 \<rbrace>; atom z3 \<sharp> [ plus v1 v2 ]\<^sup>e; atom z3 \<sharp> \<Gamma>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [ plus v1 v2 ]\<^sup>e : b_of \<lbrace> z3 : B_int  | [ [ z3 ]\<^sup>v ]\<^sup>c\<^sup>e  ==  [ plus [ v1 ]\<^sup>c\<^sup>e [ v2 ]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e  \<rbrace>
 2. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> v1 z1 c1 v2 z2 c2 z3 \<tau>. \<lbrakk> \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v1 \<Rightarrow> \<lbrace> z1 : B_int  | c1 \<rbrace>;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v2 \<Rightarrow> \<lbrace> z2 : B_int  | c2 \<rbrace>; atom z3 \<sharp> [ leq v1 v2 ]\<^sup>e; atom z3 \<sharp> \<Gamma>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [ leq v1 v2 ]\<^sup>e : b_of \<lbrace> z3 : B_bool  | [ [ z3 ]\<^sup>v ]\<^sup>c\<^sup>e  ==  [ leq [ v1 ]\<^sup>c\<^sup>e [ v2 ]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e  \<rbrace>
 3. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> v1 z1 b c1 v2 z2 c2 z3 \<tau>. \<lbrakk> \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v1 \<Rightarrow> \<lbrace> z1 : b  | c1 \<rbrace>;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v2 \<Rightarrow> \<lbrace> z2 : b  | c2 \<rbrace>; atom z3 \<sharp> [ eq v1 v2 ]\<^sup>e; atom z3 \<sharp> \<Gamma>; b \<in> {B_bool, B_int, B_unit}\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [ eq v1 v2 ]\<^sup>e : b_of \<lbrace> z3 : B_bool  | [ [ z3 ]\<^sup>v ]\<^sup>c\<^sup>e  ==  [ eq [ v1 ]\<^sup>c\<^sup>e [ v2 ]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e  \<rbrace>
 4. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> f x b c \<tau>' s' v \<tau> \<tau>''. \<lbrakk>atom x \<sharp> \<tau>'';  \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ; Some (AF_fundef f (AF_fun_typ_none (AF_fun_typ x b c \<tau>' s'))) = lookup_fun \<Phi> f; \<Theta> ; \<B> ; \<Gamma>  \<turnstile> v \<Leftarrow> \<lbrace> x : b  | c \<rbrace>; atom x \<sharp> \<Theta>; atom x \<sharp> \<Phi>; atom x \<sharp> \<B>; atom x \<sharp> \<Gamma>; atom x \<sharp> \<Delta>; atom x \<sharp> v; atom x \<sharp> \<tau>; \<tau>'[x::=v]\<^sub>v = \<tau>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [ f  v  ]\<^sup>e : b_of \<tau>
 5. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> b' f bv x b c \<tau>' s' v \<tau> \<tau>''. \<lbrakk>atom bv \<sharp> \<tau>'';  \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B>  \<turnstile>\<^sub>w\<^sub>f b' ; Some (AF_fundef f (AF_fun_typ_some bv (AF_fun_typ x b c \<tau>' s'))) = lookup_fun \<Phi> f; \<Theta> ; \<B> ; \<Gamma>  \<turnstile> v \<Leftarrow> \<lbrace> x : b[bv::=b']\<^sub>b  | c[bv::=b']\<^sub>b \<rbrace>; atom x \<sharp> \<Gamma>; \<tau>'[bv::=b']\<^sub>b[x::=v]\<^sub>v = \<tau>; atom bv \<sharp> \<Theta>; atom bv \<sharp> \<Phi>; atom bv \<sharp> \<B>; atom bv \<sharp> \<Gamma>; atom bv \<sharp> \<Delta>; atom bv \<sharp> b'; atom bv \<sharp> v; atom bv \<sharp> \<tau>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [f [ b' ]  v ]\<^sup>e : b_of \<tau>
 6. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> v z' b1 b2 c z \<tau>. \<lbrakk> \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v \<Rightarrow> \<lbrace> z' : [ b1 , b2 ]\<^sup>b  | c \<rbrace>; atom z \<sharp> [#1v ]\<^sup>e; atom z \<sharp> \<Gamma>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [#1v ]\<^sup>e : b_of \<lbrace> z : b1  | [ [ z ]\<^sup>v ]\<^sup>c\<^sup>e  ==  [#1[ v ]\<^sup>c\<^sup>e]\<^sup>c\<^sup>e  \<rbrace>
 7. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> v z' b1 b2 c z \<tau>. \<lbrakk> \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v \<Rightarrow> \<lbrace> z' : [ b1 , b2 ]\<^sup>b  | c \<rbrace>; atom z \<sharp> [#2v ]\<^sup>e; atom z \<sharp> \<Gamma>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [#2v ]\<^sup>e : b_of \<lbrace> z : b2  | [ [ z ]\<^sup>v ]\<^sup>c\<^sup>e  ==  [#2[ v ]\<^sup>c\<^sup>e]\<^sup>c\<^sup>e  \<rbrace>
 8. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> v z' c z \<tau>. \<lbrakk> \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v \<Rightarrow> \<lbrace> z' : B_bitvec  | c \<rbrace>; atom z \<sharp> [| v |]\<^sup>e; atom z \<sharp> \<Gamma>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [| v |]\<^sup>e : b_of \<lbrace> z : B_int  | [ [ z ]\<^sup>v ]\<^sup>c\<^sup>e  ==  [| [ v ]\<^sup>c\<^sup>e |]\<^sup>c\<^sup>e  \<rbrace>
 9. \<And>\<Theta> \<B> \<Gamma> \<Phi> \<Delta> u \<tau> \<tau>'. \<lbrakk> \<Theta> ; \<B>  \<turnstile>\<^sub>w\<^sub>f \<Gamma> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ; (u, \<tau>) \<in> setD \<Delta>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [ u ]\<^sup>e : b_of \<tau>
 10. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> v1 z1 c1 v2 z2 c2 z3 \<tau>. \<lbrakk> \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v1 \<Rightarrow> \<lbrace> z1 : B_bitvec  | c1 \<rbrace>;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v2 \<Rightarrow> \<lbrace> z2 : B_bitvec  | c2 \<rbrace>; atom z3 \<sharp> [ v1 @@ v2 ]\<^sup>e; atom z3 \<sharp> \<Gamma>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [ v1 @@ v2 ]\<^sup>e : b_of \<lbrace> z3 : B_bitvec  | [ [ z3 ]\<^sup>v ]\<^sup>c\<^sup>e  ==  [ [ v1 ]\<^sup>c\<^sup>e @@ [ v2 ]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e  \<rbrace>
A total of 11 subgoals...
[PROOF STEP]
case (infer_e_plusI \<Theta> \<B> \<Gamma> \<Delta>' \<Phi> v1 z1 c1 v2 z2 c2 z3)
[PROOF STATE]
proof (state)
this:
 \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta>'
 \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi>
 \<Theta> ; \<B> ; \<Gamma> \<turnstile> v1 \<Rightarrow> \<lbrace> z1 : B_int  | c1 \<rbrace>
 \<Theta> ; \<B> ; \<Gamma> \<turnstile> v2 \<Rightarrow> \<lbrace> z2 : B_int  | c2 \<rbrace>
atom z3 \<sharp> [ plus v1 v2 ]\<^sup>e
atom z3 \<sharp> \<Gamma>

goal (11 subgoals):
 1. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> v1 z1 c1 v2 z2 c2 z3 \<tau>. \<lbrakk> \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v1 \<Rightarrow> \<lbrace> z1 : B_int  | c1 \<rbrace>;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v2 \<Rightarrow> \<lbrace> z2 : B_int  | c2 \<rbrace>; atom z3 \<sharp> [ plus v1 v2 ]\<^sup>e; atom z3 \<sharp> \<Gamma>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [ plus v1 v2 ]\<^sup>e : b_of \<lbrace> z3 : B_int  | [ [ z3 ]\<^sup>v ]\<^sup>c\<^sup>e  ==  [ plus [ v1 ]\<^sup>c\<^sup>e [ v2 ]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e  \<rbrace>
 2. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> v1 z1 c1 v2 z2 c2 z3 \<tau>. \<lbrakk> \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v1 \<Rightarrow> \<lbrace> z1 : B_int  | c1 \<rbrace>;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v2 \<Rightarrow> \<lbrace> z2 : B_int  | c2 \<rbrace>; atom z3 \<sharp> [ leq v1 v2 ]\<^sup>e; atom z3 \<sharp> \<Gamma>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [ leq v1 v2 ]\<^sup>e : b_of \<lbrace> z3 : B_bool  | [ [ z3 ]\<^sup>v ]\<^sup>c\<^sup>e  ==  [ leq [ v1 ]\<^sup>c\<^sup>e [ v2 ]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e  \<rbrace>
 3. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> v1 z1 b c1 v2 z2 c2 z3 \<tau>. \<lbrakk> \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v1 \<Rightarrow> \<lbrace> z1 : b  | c1 \<rbrace>;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v2 \<Rightarrow> \<lbrace> z2 : b  | c2 \<rbrace>; atom z3 \<sharp> [ eq v1 v2 ]\<^sup>e; atom z3 \<sharp> \<Gamma>; b \<in> {B_bool, B_int, B_unit}\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [ eq v1 v2 ]\<^sup>e : b_of \<lbrace> z3 : B_bool  | [ [ z3 ]\<^sup>v ]\<^sup>c\<^sup>e  ==  [ eq [ v1 ]\<^sup>c\<^sup>e [ v2 ]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e  \<rbrace>
 4. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> f x b c \<tau>' s' v \<tau> \<tau>''. \<lbrakk>atom x \<sharp> \<tau>'';  \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ; Some (AF_fundef f (AF_fun_typ_none (AF_fun_typ x b c \<tau>' s'))) = lookup_fun \<Phi> f; \<Theta> ; \<B> ; \<Gamma>  \<turnstile> v \<Leftarrow> \<lbrace> x : b  | c \<rbrace>; atom x \<sharp> \<Theta>; atom x \<sharp> \<Phi>; atom x \<sharp> \<B>; atom x \<sharp> \<Gamma>; atom x \<sharp> \<Delta>; atom x \<sharp> v; atom x \<sharp> \<tau>; \<tau>'[x::=v]\<^sub>v = \<tau>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [ f  v  ]\<^sup>e : b_of \<tau>
 5. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> b' f bv x b c \<tau>' s' v \<tau> \<tau>''. \<lbrakk>atom bv \<sharp> \<tau>'';  \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B>  \<turnstile>\<^sub>w\<^sub>f b' ; Some (AF_fundef f (AF_fun_typ_some bv (AF_fun_typ x b c \<tau>' s'))) = lookup_fun \<Phi> f; \<Theta> ; \<B> ; \<Gamma>  \<turnstile> v \<Leftarrow> \<lbrace> x : b[bv::=b']\<^sub>b  | c[bv::=b']\<^sub>b \<rbrace>; atom x \<sharp> \<Gamma>; \<tau>'[bv::=b']\<^sub>b[x::=v]\<^sub>v = \<tau>; atom bv \<sharp> \<Theta>; atom bv \<sharp> \<Phi>; atom bv \<sharp> \<B>; atom bv \<sharp> \<Gamma>; atom bv \<sharp> \<Delta>; atom bv \<sharp> b'; atom bv \<sharp> v; atom bv \<sharp> \<tau>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [f [ b' ]  v ]\<^sup>e : b_of \<tau>
 6. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> v z' b1 b2 c z \<tau>. \<lbrakk> \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v \<Rightarrow> \<lbrace> z' : [ b1 , b2 ]\<^sup>b  | c \<rbrace>; atom z \<sharp> [#1v ]\<^sup>e; atom z \<sharp> \<Gamma>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [#1v ]\<^sup>e : b_of \<lbrace> z : b1  | [ [ z ]\<^sup>v ]\<^sup>c\<^sup>e  ==  [#1[ v ]\<^sup>c\<^sup>e]\<^sup>c\<^sup>e  \<rbrace>
 7. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> v z' b1 b2 c z \<tau>. \<lbrakk> \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v \<Rightarrow> \<lbrace> z' : [ b1 , b2 ]\<^sup>b  | c \<rbrace>; atom z \<sharp> [#2v ]\<^sup>e; atom z \<sharp> \<Gamma>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [#2v ]\<^sup>e : b_of \<lbrace> z : b2  | [ [ z ]\<^sup>v ]\<^sup>c\<^sup>e  ==  [#2[ v ]\<^sup>c\<^sup>e]\<^sup>c\<^sup>e  \<rbrace>
 8. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> v z' c z \<tau>. \<lbrakk> \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v \<Rightarrow> \<lbrace> z' : B_bitvec  | c \<rbrace>; atom z \<sharp> [| v |]\<^sup>e; atom z \<sharp> \<Gamma>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [| v |]\<^sup>e : b_of \<lbrace> z : B_int  | [ [ z ]\<^sup>v ]\<^sup>c\<^sup>e  ==  [| [ v ]\<^sup>c\<^sup>e |]\<^sup>c\<^sup>e  \<rbrace>
 9. \<And>\<Theta> \<B> \<Gamma> \<Phi> \<Delta> u \<tau> \<tau>'. \<lbrakk> \<Theta> ; \<B>  \<turnstile>\<^sub>w\<^sub>f \<Gamma> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ; (u, \<tau>) \<in> setD \<Delta>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [ u ]\<^sup>e : b_of \<tau>
 10. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> v1 z1 c1 v2 z2 c2 z3 \<tau>. \<lbrakk> \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v1 \<Rightarrow> \<lbrace> z1 : B_bitvec  | c1 \<rbrace>;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v2 \<Rightarrow> \<lbrace> z2 : B_bitvec  | c2 \<rbrace>; atom z3 \<sharp> [ v1 @@ v2 ]\<^sup>e; atom z3 \<sharp> \<Gamma>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [ v1 @@ v2 ]\<^sup>e : b_of \<lbrace> z3 : B_bitvec  | [ [ z3 ]\<^sup>v ]\<^sup>c\<^sup>e  ==  [ [ v1 ]\<^sup>c\<^sup>e @@ [ v2 ]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e  \<rbrace>
A total of 11 subgoals...
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
 \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta>'
 \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi>
 \<Theta> ; \<B> ; \<Gamma> \<turnstile> v1 \<Rightarrow> \<lbrace> z1 : B_int  | c1 \<rbrace>
 \<Theta> ; \<B> ; \<Gamma> \<turnstile> v2 \<Rightarrow> \<lbrace> z2 : B_int  | c2 \<rbrace>
atom z3 \<sharp> [ plus v1 v2 ]\<^sup>e
atom z3 \<sharp> \<Gamma>
[PROOF STEP]
show ?case
[PROOF STATE]
proof (prove)
using this:
 \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta>'
 \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi>
 \<Theta> ; \<B> ; \<Gamma> \<turnstile> v1 \<Rightarrow> \<lbrace> z1 : B_int  | c1 \<rbrace>
 \<Theta> ; \<B> ; \<Gamma> \<turnstile> v2 \<Rightarrow> \<lbrace> z2 : B_int  | c2 \<rbrace>
atom z3 \<sharp> [ plus v1 v2 ]\<^sup>e
atom z3 \<sharp> \<Gamma>

goal (1 subgoal):
 1.  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta>' \<turnstile>\<^sub>w\<^sub>f [ plus v1 v2 ]\<^sup>e : b_of \<lbrace> z3 : B_int  | [ [ z3 ]\<^sup>v ]\<^sup>c\<^sup>e  ==  [ plus [ v1 ]\<^sup>c\<^sup>e [ v2 ]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e  \<rbrace>
[PROOF STEP]
using  b_of.simps infer_v_v_wf wf_intros
[PROOF STATE]
proof (prove)
using this:
 \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta>'
 \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi>
 \<Theta> ; \<B> ; \<Gamma> \<turnstile> v1 \<Rightarrow> \<lbrace> z1 : B_int  | c1 \<rbrace>
 \<Theta> ; \<B> ; \<Gamma> \<turnstile> v2 \<Rightarrow> \<lbrace> z2 : B_int  | c2 \<rbrace>
atom z3 \<sharp> [ plus v1 v2 ]\<^sup>e
atom z3 \<sharp> \<Gamma>
b_of \<lbrace> ?z : ?b  | ?c \<rbrace> = ?b
 ?\<Theta> ; ?\<B> ; ?G \<turnstile> ?v \<Rightarrow> ?\<tau> \<Longrightarrow>  ?\<Theta> ; ?\<B> ; ?G \<turnstile>\<^sub>w\<^sub>f ?v : b_of ?\<tau>
   \<turnstile>\<^sub>w\<^sub>f ?\<Theta>  \<Longrightarrow>  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f B_int
   \<turnstile>\<^sub>w\<^sub>f ?\<Theta>  \<Longrightarrow>  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f B_bool
   \<turnstile>\<^sub>w\<^sub>f ?\<Theta>  \<Longrightarrow>  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f B_unit
   \<turnstile>\<^sub>w\<^sub>f ?\<Theta>  \<Longrightarrow>  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f B_bitvec
\<lbrakk> ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?b1.0 ;  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?b2.0 \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f [ ?b1.0 , ?b2.0 ]\<^sup>b
\<lbrakk>   \<turnstile>\<^sub>w\<^sub>f ?\<Theta> ; AF_typedef ?s ?dclist \<in> set ?\<Theta>\<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f B_id ?s
\<lbrakk>   \<turnstile>\<^sub>w\<^sub>f ?\<Theta> ;  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?b ; AF_typedef_poly ?s ?bv ?dclist \<in> set ?\<Theta>\<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f B_app ?s ?b
\<lbrakk> ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?\<Gamma> ; Some (?b, ?c) = lookup ?\<Gamma> ?x\<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [ ?x ]\<^sup>v : ?b
 ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?\<Gamma>  \<Longrightarrow>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [ ?l ]\<^sup>v : base_for_lit ?l
\<lbrakk> ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : ?b1.0 ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v2.0 : ?b2.0 \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [ ?v1.0 , ?v2.0 ]\<^sup>v : [ ?b1.0 , ?b2.0 ]\<^sup>b
\<lbrakk>AF_typedef ?s ?dclist \<in> set ?\<Theta>; (?dc, \<lbrace> ?x : ?b'  | ?c \<rbrace>) \<in> set ?dclist;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v : ?b' \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f V_cons ?s ?dc ?v : B_id ?s
\<lbrakk>AF_typedef_poly ?s ?bv ?dclist \<in> set ?\<Theta>; (?dc, \<lbrace> ?x : ?b'  | ?c \<rbrace>) \<in> set ?dclist;  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?b ; atom ?bv \<sharp> (?\<Theta>, ?\<B>, ?\<Gamma>, ?b, ?v);  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v : ?b'[?bv::=?b]\<^sub>b\<^sub>b \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f V_consp ?s ?dc ?b ?v : B_app ?s ?b
 ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v : ?b  \<Longrightarrow>   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [ ?v ]\<^sup>c\<^sup>e : ?b
\<lbrakk>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : B_int ;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v2.0 : B_int \<rbrakk> \<Longrightarrow>   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [ plus ?v1.0 ?v2.0 ]\<^sup>c\<^sup>e : B_int
\<lbrakk>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : B_int ;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v2.0 : B_int \<rbrakk> \<Longrightarrow>   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [ leq ?v1.0 ?v2.0 ]\<^sup>c\<^sup>e : B_bool
\<lbrakk>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : ?b ;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v2.0 : ?b \<rbrakk> \<Longrightarrow>   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [ eq ?v1.0 ?v2.0 ]\<^sup>c\<^sup>e : B_bool
  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : [ ?b1.0 , ?b2.0 ]\<^sup>b  \<Longrightarrow>   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [#1?v1.0]\<^sup>c\<^sup>e : ?b1.0
  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : [ ?b1.0 , ?b2.0 ]\<^sup>b  \<Longrightarrow>   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [#2?v1.0]\<^sup>c\<^sup>e : ?b2.0
\<lbrakk>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : B_bitvec ;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v2.0 : B_bitvec \<rbrakk> \<Longrightarrow>   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [ ?v1.0 @@ ?v2.0 ]\<^sup>c\<^sup>e : B_bitvec
  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : B_bitvec  \<Longrightarrow>   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [| ?v1.0 |]\<^sup>c\<^sup>e : B_int
\<lbrakk>atom ?z \<sharp> (?\<Theta>, ?\<B>, ?\<Gamma>);  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?b ;  ?\<Theta> ; ?\<B> ; (?z, ?b, TRUE) #\<^sub>\<Gamma> ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?c \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f \<lbrace> ?z : ?b  | ?c \<rbrace>
\<lbrakk>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?e1.0 : ?b ;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?e2.0 : ?b \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?e1.0  ==  ?e2.0
 ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?\<Gamma>  \<Longrightarrow>  ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f TRUE
 ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?\<Gamma>  \<Longrightarrow>  ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f FALSE
\<lbrakk> ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?c1.0 ;  ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?c2.0 \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?c1.0  AND  ?c2.0
\<lbrakk> ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?c1.0 ;  ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?c2.0 \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?c1.0 OR ?c2.0
 ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?c1.0  \<Longrightarrow>  ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f \<not> ?c1.0
\<lbrakk> ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?c1.0 ;  ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?c2.0 \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?c1.0  IMP  ?c2.0
   \<turnstile>\<^sub>w\<^sub>f ?\<Theta>  \<Longrightarrow>  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f GNil
\<lbrakk>?c \<notin> {TRUE, FALSE};  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?\<Gamma> ; atom ?x \<sharp> ?\<Gamma>;  ?\<Theta> ; ?\<B> ; (?x, ?b, TRUE) #\<^sub>\<Gamma> ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?c ;  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?b \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f (?x, ?b, ?c) #\<^sub>\<Gamma> ?\<Gamma>
\<lbrakk>?c \<in> {TRUE, FALSE};  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?\<Gamma> ; atom ?x \<sharp> ?\<Gamma>;  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?b \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f (?x, ?b, ?c) #\<^sub>\<Gamma> ?\<Gamma>
   \<turnstile>\<^sub>w\<^sub>f []
\<lbrakk>name_of_type ?tdef \<notin> name_of_type ` set ?\<Theta>;    \<turnstile>\<^sub>w\<^sub>f ?\<Theta> ;  ?\<Theta> \<turnstile>\<^sub>w\<^sub>f ?tdef \<rbrakk> \<Longrightarrow>    \<turnstile>\<^sub>w\<^sub>f ?tdef # ?\<Theta>
 ?\<Theta> ; {||}  ; GNil \<turnstile>\<^sub>w\<^sub>f ?lst  \<Longrightarrow>  ?\<Theta> \<turnstile>\<^sub>w\<^sub>f AF_typedef ?s ?lst
 ?\<Theta> ; {|?bv|}  ; GNil \<turnstile>\<^sub>w\<^sub>f ?lst  \<Longrightarrow>  ?\<Theta> \<turnstile>\<^sub>w\<^sub>f AF_typedef_poly ?s ?bv ?lst
 ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?\<Gamma>  \<Longrightarrow>  ?\<Theta> ; ?\<B>  ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f []
\<lbrakk> ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?\<tau> ; ?dc \<notin> fst ` set ?ts;  ?\<Theta> ; ?\<B>  ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?ts \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<B>  ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f (?dc, ?\<tau>) # ?ts
\<lbrakk> ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f ?\<Phi> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v : ?b \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f [ ?v ]\<^sup>e : ?b
\<lbrakk> ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f ?\<Phi> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : B_int ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v2.0 : B_int \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f [ plus ?v1.0 ?v2.0 ]\<^sup>e : B_int
\<lbrakk> ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f ?\<Phi> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : B_int ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v2.0 : B_int \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f [ leq ?v1.0 ?v2.0 ]\<^sup>e : B_bool
\<lbrakk> ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f ?\<Phi> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : ?b ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v2.0 : ?b ; ?b \<in> {B_bool, B_int, B_unit}\<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f [ eq ?v1.0 ?v2.0 ]\<^sup>e : B_bool
\<lbrakk> ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f ?\<Phi> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : [ ?b1.0 , ?b2.0 ]\<^sup>b \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f [#1?v1.0 ]\<^sup>e : ?b1.0
\<lbrakk> ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f ?\<Phi> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : [ ?b1.0 , ?b2.0 ]\<^sup>b \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f [#2?v1.0 ]\<^sup>e : ?b2.0
\<lbrakk> ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f ?\<Phi> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : B_bitvec ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v2.0 : B_bitvec \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f [ ?v1.0 @@ ?v2.0 ]\<^sup>e : B_bitvec
\<lbrakk> ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f ?\<Phi> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : B_bitvec ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v2.0 : B_int \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f [ ?v1.0  ?v2.0 ]\<^sup>e : [ B_bitvec , B_bitvec ]\<^sup>b
\<lbrakk> ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f ?\<Phi> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : B_bitvec \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f [| ?v1.0 |]\<^sup>e : B_int
\<lbrakk> ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f ?\<Phi> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta> ; Some (AF_fundef ?f (AF_fun_typ_none (AF_fun_typ ?x ?b ?c ?\<tau> ?s))) = lookup_fun ?\<Phi> ?f;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v : ?b \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f [ ?f  ?v  ]\<^sup>e : b_of ?\<tau>
\<lbrakk> ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f ?\<Phi> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta> ;  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?b' ; atom ?bv \<sharp> (?\<Phi>, ?\<Theta>, ?\<B>, ?\<Gamma>, ?\<Delta>, ?b', ?v, (b_of ?\<tau>)[?bv::=?b']\<^sub>b); Some (AF_fundef ?f (AF_fun_typ_some ?bv (AF_fun_typ ?x ?b ?c ?\<tau> ?s))) = lookup_fun ?\<Phi> ?f;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v : ?b[?bv::=?b']\<^sub>b \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f [?f [ ?b' ]  ?v ]\<^sup>e : (b_of ?\<tau>)[?bv::=?b']\<^sub>b
\<lbrakk> ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f ?\<Phi> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta> ; (?u, ?\<tau>) \<in> setD ?\<Delta>\<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f [ ?u ]\<^sup>e : b_of ?\<tau>
\<lbrakk> ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f ?\<Phi> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v : ?b ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta> \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f [?v]\<^sup>s : ?b
\<lbrakk> ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f ?e : ?b' ;  ?\<Theta> ; ?\<Phi> ; ?\<B> ; (?x, ?b', TRUE) #\<^sub>\<Gamma> ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f ?s : ?b ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta> ; atom ?x \<sharp> (?\<Phi>, ?\<Theta>, ?\<B>, ?\<Gamma>, ?\<Delta>, ?e, ?b)\<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f LET ?x = ?e IN ?s : ?b
\<lbrakk> ?\<Theta> ; ?\<Phi> ; ?\<B> ; (?x, B_bool, ?c) #\<^sub>\<Gamma> ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f ?s : ?b ;  ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?c ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta> ; atom ?x \<sharp> (?\<Phi>, ?\<Theta>, ?\<B>, ?\<Gamma>, ?\<Delta>, ?c, ?b, ?s)\<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f ASSERT ?c IN ?s  : ?b
\<lbrakk> ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f ?s1.0 : b_of ?\<tau> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?\<tau> ;  ?\<Theta> ; ?\<Phi> ; ?\<B> ; (?x, b_of ?\<tau>, TRUE) #\<^sub>\<Gamma> ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f ?s2.0 : ?b ; atom ?x \<sharp> (?\<Phi>, ?\<Theta>, ?\<B>, ?\<Gamma>, ?\<Delta>, ?s1.0, ?b, ?\<tau>)\<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f LET ?x : ?\<tau> = ?s1.0 IN ?s2.0 : ?b
\<lbrakk> ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v : B_bool ;  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f ?s1.0 : ?b ;  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f ?s2.0 : ?b \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f IF ?v THEN ?s1.0 ELSE ?s2.0 : ?b
\<lbrakk> ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?\<tau> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v : b_of ?\<tau> ; atom ?u \<sharp> (?\<Phi>, ?\<Theta>, ?\<B>, ?\<Gamma>, ?\<Delta>, ?\<tau>, ?v, ?b);  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; (?u, ?\<tau>) #\<^sub>\<Delta> ?\<Delta> \<turnstile>\<^sub>w\<^sub>f ?s : ?b \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f VAR ?u : ?\<tau> = ?v IN ?s : ?b
\<lbrakk>(?u, ?\<tau>) \<in> setD ?\<Delta>;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta> ;  ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f ?\<Phi> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v : b_of ?\<tau> \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f ?u ::= ?v : B_unit
\<lbrakk> ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f ?s1.0 : B_bool ;  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f ?s2.0 : ?b \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f WHILE ?s1.0 DO { ?s2.0 }  : ?b
\<lbrakk> ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f ?s1.0 : B_unit ;  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f ?s2.0 : ?b \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f  ?s1.0 ;; ?s2.0  : ?b
\<lbrakk> ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v : B_id ?tid ; AF_typedef ?tid ?dclist \<in> set ?\<Theta>;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta> ;  ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f ?\<Phi> ;  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> ; ?tid ; ?dclist \<turnstile>\<^sub>w\<^sub>f ?cs : ?b \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f MATCH ?v WITH { ?cs } : ?b
\<lbrakk> ?\<Theta> ; ?\<Phi> ; ?\<B> ; (?x, b_of ?\<tau>, TRUE) #\<^sub>\<Gamma> ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f ?s : ?b ; atom ?x \<sharp> (?\<Phi>, ?\<Theta>, ?\<B>, ?\<Gamma>, ?\<Delta>, ?\<Gamma>, ?\<tau>);  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta> \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> ; ?tid ; ?dc ; ?\<tau> \<turnstile>\<^sub>w\<^sub>f  ?dc ?x \<Rightarrow> ?s  : ?b
 ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> ; ?tid ; ?dc ; ?t \<turnstile>\<^sub>w\<^sub>f ?cs : ?b  \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> ; ?tid ; [(?dc, ?t)] \<turnstile>\<^sub>w\<^sub>f { ?cs } : ?b
\<lbrakk> ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> ; ?tid ; ?dc ; ?t \<turnstile>\<^sub>w\<^sub>f ?cs : ?b ;  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> ; ?tid ; ?dclist \<turnstile>\<^sub>w\<^sub>f ?css : ?b \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> ; ?tid ; (?dc, ?t) # ?dclist \<turnstile>\<^sub>w\<^sub>f  ?cs | ?css   : ?b
 ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?\<Gamma>  \<Longrightarrow>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f []\<^sub>\<Delta>
\<lbrakk> ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?\<tau> ; ?u \<notin> fst ` setD ?\<Delta>\<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f (?u, ?\<tau>) #\<^sub>\<Delta> ?\<Delta>
   \<turnstile>\<^sub>w\<^sub>f ?\<Theta>  \<Longrightarrow>  ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f []
\<lbrakk>?f \<notin> name_of_fun ` set ?\<Phi>;  ?\<Theta>  ; ?\<Phi> \<turnstile>\<^sub>w\<^sub>f ?ft ;  ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f ?\<Phi> \<rbrakk> \<Longrightarrow>  ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f AF_fundef ?f ?ft # ?\<Phi>
 ?\<Theta> ; ?\<Phi> ; {||} \<turnstile>\<^sub>w\<^sub>f ?ft  \<Longrightarrow>  ?\<Theta>  ; ?\<Phi> \<turnstile>\<^sub>w\<^sub>f AF_fun_typ_none ?ft
 ?\<Theta> ; ?\<Phi> ; {|?bv|} \<turnstile>\<^sub>w\<^sub>f ?ft  \<Longrightarrow>  ?\<Theta>  ; ?\<Phi> \<turnstile>\<^sub>w\<^sub>f AF_fun_typ_some ?bv ?ft
\<lbrakk> ?\<Theta> ; ?B  \<turnstile>\<^sub>w\<^sub>f ?b ; supp ?s \<subseteq> {atom ?x} \<union> supp ?B; supp ?c \<subseteq> {atom ?x};  ?\<Theta> ; ?B ; (?x, ?b, ?c) #\<^sub>\<Gamma> GNil   \<turnstile>\<^sub>w\<^sub>f ?\<tau> ;  ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f ?\<Phi> \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?B \<turnstile>\<^sub>w\<^sub>f AF_fun_typ ?x ?b ?c ?\<tau> ?s

goal (1 subgoal):
 1.  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta>' \<turnstile>\<^sub>w\<^sub>f [ plus v1 v2 ]\<^sup>e : b_of \<lbrace> z3 : B_int  | [ [ z3 ]\<^sup>v ]\<^sup>c\<^sup>e  ==  [ plus [ v1 ]\<^sup>c\<^sup>e [ v2 ]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e  \<rbrace>
[PROOF STEP]
by metis
[PROOF STATE]
proof (state)
this:
 \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta>' \<turnstile>\<^sub>w\<^sub>f [ plus v1 v2 ]\<^sup>e : b_of \<lbrace> z3 : B_int  | [ [ z3 ]\<^sup>v ]\<^sup>c\<^sup>e  ==  [ plus [ v1 ]\<^sup>c\<^sup>e [ v2 ]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e  \<rbrace>

goal (10 subgoals):
 1. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> v1 z1 c1 v2 z2 c2 z3 \<tau>. \<lbrakk> \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v1 \<Rightarrow> \<lbrace> z1 : B_int  | c1 \<rbrace>;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v2 \<Rightarrow> \<lbrace> z2 : B_int  | c2 \<rbrace>; atom z3 \<sharp> [ leq v1 v2 ]\<^sup>e; atom z3 \<sharp> \<Gamma>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [ leq v1 v2 ]\<^sup>e : b_of \<lbrace> z3 : B_bool  | [ [ z3 ]\<^sup>v ]\<^sup>c\<^sup>e  ==  [ leq [ v1 ]\<^sup>c\<^sup>e [ v2 ]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e  \<rbrace>
 2. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> v1 z1 b c1 v2 z2 c2 z3 \<tau>. \<lbrakk> \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v1 \<Rightarrow> \<lbrace> z1 : b  | c1 \<rbrace>;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v2 \<Rightarrow> \<lbrace> z2 : b  | c2 \<rbrace>; atom z3 \<sharp> [ eq v1 v2 ]\<^sup>e; atom z3 \<sharp> \<Gamma>; b \<in> {B_bool, B_int, B_unit}\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [ eq v1 v2 ]\<^sup>e : b_of \<lbrace> z3 : B_bool  | [ [ z3 ]\<^sup>v ]\<^sup>c\<^sup>e  ==  [ eq [ v1 ]\<^sup>c\<^sup>e [ v2 ]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e  \<rbrace>
 3. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> f x b c \<tau>' s' v \<tau> \<tau>''. \<lbrakk>atom x \<sharp> \<tau>'';  \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ; Some (AF_fundef f (AF_fun_typ_none (AF_fun_typ x b c \<tau>' s'))) = lookup_fun \<Phi> f; \<Theta> ; \<B> ; \<Gamma>  \<turnstile> v \<Leftarrow> \<lbrace> x : b  | c \<rbrace>; atom x \<sharp> \<Theta>; atom x \<sharp> \<Phi>; atom x \<sharp> \<B>; atom x \<sharp> \<Gamma>; atom x \<sharp> \<Delta>; atom x \<sharp> v; atom x \<sharp> \<tau>; \<tau>'[x::=v]\<^sub>v = \<tau>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [ f  v  ]\<^sup>e : b_of \<tau>
 4. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> b' f bv x b c \<tau>' s' v \<tau> \<tau>''. \<lbrakk>atom bv \<sharp> \<tau>'';  \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B>  \<turnstile>\<^sub>w\<^sub>f b' ; Some (AF_fundef f (AF_fun_typ_some bv (AF_fun_typ x b c \<tau>' s'))) = lookup_fun \<Phi> f; \<Theta> ; \<B> ; \<Gamma>  \<turnstile> v \<Leftarrow> \<lbrace> x : b[bv::=b']\<^sub>b  | c[bv::=b']\<^sub>b \<rbrace>; atom x \<sharp> \<Gamma>; \<tau>'[bv::=b']\<^sub>b[x::=v]\<^sub>v = \<tau>; atom bv \<sharp> \<Theta>; atom bv \<sharp> \<Phi>; atom bv \<sharp> \<B>; atom bv \<sharp> \<Gamma>; atom bv \<sharp> \<Delta>; atom bv \<sharp> b'; atom bv \<sharp> v; atom bv \<sharp> \<tau>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [f [ b' ]  v ]\<^sup>e : b_of \<tau>
 5. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> v z' b1 b2 c z \<tau>. \<lbrakk> \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v \<Rightarrow> \<lbrace> z' : [ b1 , b2 ]\<^sup>b  | c \<rbrace>; atom z \<sharp> [#1v ]\<^sup>e; atom z \<sharp> \<Gamma>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [#1v ]\<^sup>e : b_of \<lbrace> z : b1  | [ [ z ]\<^sup>v ]\<^sup>c\<^sup>e  ==  [#1[ v ]\<^sup>c\<^sup>e]\<^sup>c\<^sup>e  \<rbrace>
 6. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> v z' b1 b2 c z \<tau>. \<lbrakk> \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v \<Rightarrow> \<lbrace> z' : [ b1 , b2 ]\<^sup>b  | c \<rbrace>; atom z \<sharp> [#2v ]\<^sup>e; atom z \<sharp> \<Gamma>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [#2v ]\<^sup>e : b_of \<lbrace> z : b2  | [ [ z ]\<^sup>v ]\<^sup>c\<^sup>e  ==  [#2[ v ]\<^sup>c\<^sup>e]\<^sup>c\<^sup>e  \<rbrace>
 7. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> v z' c z \<tau>. \<lbrakk> \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v \<Rightarrow> \<lbrace> z' : B_bitvec  | c \<rbrace>; atom z \<sharp> [| v |]\<^sup>e; atom z \<sharp> \<Gamma>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [| v |]\<^sup>e : b_of \<lbrace> z : B_int  | [ [ z ]\<^sup>v ]\<^sup>c\<^sup>e  ==  [| [ v ]\<^sup>c\<^sup>e |]\<^sup>c\<^sup>e  \<rbrace>
 8. \<And>\<Theta> \<B> \<Gamma> \<Phi> \<Delta> u \<tau> \<tau>'. \<lbrakk> \<Theta> ; \<B>  \<turnstile>\<^sub>w\<^sub>f \<Gamma> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ; (u, \<tau>) \<in> setD \<Delta>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [ u ]\<^sup>e : b_of \<tau>
 9. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> v1 z1 c1 v2 z2 c2 z3 \<tau>. \<lbrakk> \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v1 \<Rightarrow> \<lbrace> z1 : B_bitvec  | c1 \<rbrace>;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v2 \<Rightarrow> \<lbrace> z2 : B_bitvec  | c2 \<rbrace>; atom z3 \<sharp> [ v1 @@ v2 ]\<^sup>e; atom z3 \<sharp> \<Gamma>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [ v1 @@ v2 ]\<^sup>e : b_of \<lbrace> z3 : B_bitvec  | [ [ z3 ]\<^sup>v ]\<^sup>c\<^sup>e  ==  [ [ v1 ]\<^sup>c\<^sup>e @@ [ v2 ]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e  \<rbrace>
 10. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> v1 z1 c1 v2 z2 z3 \<tau>. \<lbrakk>atom z3 \<sharp> \<tau>; atom z1 \<sharp> \<tau>; atom z2 \<sharp> \<tau>;  \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v1 \<Rightarrow> \<lbrace> z1 : B_bitvec  | c1 \<rbrace>; \<Theta> ; \<B> ; \<Gamma>  \<turnstile> v2 \<Leftarrow> \<lbrace> z2 : B_int  | [ leq [ [ L_num 0 ]\<^sup>v ]\<^sup>c\<^sup>e [ [ z2 ]\<^sup>v ]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e  ==  [ [ L_true ]\<^sup>v ]\<^sup>c\<^sup>e   AND  [ leq [ [ z2 ]\<^sup>v ]\<^sup>c\<^sup>e [| [ v1 ]\<^sup>c\<^sup>e |]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e  ==  [ [ L_true ]\<^sup>v ]\<^sup>c\<^sup>e   \<rbrace>; atom z1 \<sharp> [ v1  v2 ]\<^sup>e; atom z1 \<sharp> \<Gamma>; atom z2 \<sharp> [ v1  v2 ]\<^sup>e; atom z2 \<sharp> \<Gamma>; atom z3 \<sharp> [ v1  v2 ]\<^sup>e; atom z3 \<sharp> \<Gamma>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [ v1  v2 ]\<^sup>e : b_of \<lbrace> z3 : [ B_bitvec , B_bitvec ]\<^sup>b  | [ v1 ]\<^sup>c\<^sup>e  ==  [ [#1[ [ z3 ]\<^sup>v ]\<^sup>c\<^sup>e]\<^sup>c\<^sup>e @@ [#2[ [ z3 ]\<^sup>v ]\<^sup>c\<^sup>e]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e   AND  [| [#1[ [ z3 ]\<^sup>v ]\<^sup>c\<^sup>e]\<^sup>c\<^sup>e |]\<^sup>c\<^sup>e  ==  [ v2 ]\<^sup>c\<^sup>e   \<rbrace>
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (10 subgoals):
 1. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> v1 z1 c1 v2 z2 c2 z3 \<tau>. \<lbrakk> \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v1 \<Rightarrow> \<lbrace> z1 : B_int  | c1 \<rbrace>;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v2 \<Rightarrow> \<lbrace> z2 : B_int  | c2 \<rbrace>; atom z3 \<sharp> [ leq v1 v2 ]\<^sup>e; atom z3 \<sharp> \<Gamma>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [ leq v1 v2 ]\<^sup>e : b_of \<lbrace> z3 : B_bool  | [ [ z3 ]\<^sup>v ]\<^sup>c\<^sup>e  ==  [ leq [ v1 ]\<^sup>c\<^sup>e [ v2 ]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e  \<rbrace>
 2. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> v1 z1 b c1 v2 z2 c2 z3 \<tau>. \<lbrakk> \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v1 \<Rightarrow> \<lbrace> z1 : b  | c1 \<rbrace>;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v2 \<Rightarrow> \<lbrace> z2 : b  | c2 \<rbrace>; atom z3 \<sharp> [ eq v1 v2 ]\<^sup>e; atom z3 \<sharp> \<Gamma>; b \<in> {B_bool, B_int, B_unit}\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [ eq v1 v2 ]\<^sup>e : b_of \<lbrace> z3 : B_bool  | [ [ z3 ]\<^sup>v ]\<^sup>c\<^sup>e  ==  [ eq [ v1 ]\<^sup>c\<^sup>e [ v2 ]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e  \<rbrace>
 3. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> f x b c \<tau>' s' v \<tau> \<tau>''. \<lbrakk>atom x \<sharp> \<tau>'';  \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ; Some (AF_fundef f (AF_fun_typ_none (AF_fun_typ x b c \<tau>' s'))) = lookup_fun \<Phi> f; \<Theta> ; \<B> ; \<Gamma>  \<turnstile> v \<Leftarrow> \<lbrace> x : b  | c \<rbrace>; atom x \<sharp> \<Theta>; atom x \<sharp> \<Phi>; atom x \<sharp> \<B>; atom x \<sharp> \<Gamma>; atom x \<sharp> \<Delta>; atom x \<sharp> v; atom x \<sharp> \<tau>; \<tau>'[x::=v]\<^sub>v = \<tau>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [ f  v  ]\<^sup>e : b_of \<tau>
 4. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> b' f bv x b c \<tau>' s' v \<tau> \<tau>''. \<lbrakk>atom bv \<sharp> \<tau>'';  \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B>  \<turnstile>\<^sub>w\<^sub>f b' ; Some (AF_fundef f (AF_fun_typ_some bv (AF_fun_typ x b c \<tau>' s'))) = lookup_fun \<Phi> f; \<Theta> ; \<B> ; \<Gamma>  \<turnstile> v \<Leftarrow> \<lbrace> x : b[bv::=b']\<^sub>b  | c[bv::=b']\<^sub>b \<rbrace>; atom x \<sharp> \<Gamma>; \<tau>'[bv::=b']\<^sub>b[x::=v]\<^sub>v = \<tau>; atom bv \<sharp> \<Theta>; atom bv \<sharp> \<Phi>; atom bv \<sharp> \<B>; atom bv \<sharp> \<Gamma>; atom bv \<sharp> \<Delta>; atom bv \<sharp> b'; atom bv \<sharp> v; atom bv \<sharp> \<tau>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [f [ b' ]  v ]\<^sup>e : b_of \<tau>
 5. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> v z' b1 b2 c z \<tau>. \<lbrakk> \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v \<Rightarrow> \<lbrace> z' : [ b1 , b2 ]\<^sup>b  | c \<rbrace>; atom z \<sharp> [#1v ]\<^sup>e; atom z \<sharp> \<Gamma>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [#1v ]\<^sup>e : b_of \<lbrace> z : b1  | [ [ z ]\<^sup>v ]\<^sup>c\<^sup>e  ==  [#1[ v ]\<^sup>c\<^sup>e]\<^sup>c\<^sup>e  \<rbrace>
 6. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> v z' b1 b2 c z \<tau>. \<lbrakk> \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v \<Rightarrow> \<lbrace> z' : [ b1 , b2 ]\<^sup>b  | c \<rbrace>; atom z \<sharp> [#2v ]\<^sup>e; atom z \<sharp> \<Gamma>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [#2v ]\<^sup>e : b_of \<lbrace> z : b2  | [ [ z ]\<^sup>v ]\<^sup>c\<^sup>e  ==  [#2[ v ]\<^sup>c\<^sup>e]\<^sup>c\<^sup>e  \<rbrace>
 7. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> v z' c z \<tau>. \<lbrakk> \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v \<Rightarrow> \<lbrace> z' : B_bitvec  | c \<rbrace>; atom z \<sharp> [| v |]\<^sup>e; atom z \<sharp> \<Gamma>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [| v |]\<^sup>e : b_of \<lbrace> z : B_int  | [ [ z ]\<^sup>v ]\<^sup>c\<^sup>e  ==  [| [ v ]\<^sup>c\<^sup>e |]\<^sup>c\<^sup>e  \<rbrace>
 8. \<And>\<Theta> \<B> \<Gamma> \<Phi> \<Delta> u \<tau> \<tau>'. \<lbrakk> \<Theta> ; \<B>  \<turnstile>\<^sub>w\<^sub>f \<Gamma> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ; (u, \<tau>) \<in> setD \<Delta>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [ u ]\<^sup>e : b_of \<tau>
 9. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> v1 z1 c1 v2 z2 c2 z3 \<tau>. \<lbrakk> \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v1 \<Rightarrow> \<lbrace> z1 : B_bitvec  | c1 \<rbrace>;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v2 \<Rightarrow> \<lbrace> z2 : B_bitvec  | c2 \<rbrace>; atom z3 \<sharp> [ v1 @@ v2 ]\<^sup>e; atom z3 \<sharp> \<Gamma>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [ v1 @@ v2 ]\<^sup>e : b_of \<lbrace> z3 : B_bitvec  | [ [ z3 ]\<^sup>v ]\<^sup>c\<^sup>e  ==  [ [ v1 ]\<^sup>c\<^sup>e @@ [ v2 ]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e  \<rbrace>
 10. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> v1 z1 c1 v2 z2 z3 \<tau>. \<lbrakk>atom z3 \<sharp> \<tau>; atom z1 \<sharp> \<tau>; atom z2 \<sharp> \<tau>;  \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v1 \<Rightarrow> \<lbrace> z1 : B_bitvec  | c1 \<rbrace>; \<Theta> ; \<B> ; \<Gamma>  \<turnstile> v2 \<Leftarrow> \<lbrace> z2 : B_int  | [ leq [ [ L_num 0 ]\<^sup>v ]\<^sup>c\<^sup>e [ [ z2 ]\<^sup>v ]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e  ==  [ [ L_true ]\<^sup>v ]\<^sup>c\<^sup>e   AND  [ leq [ [ z2 ]\<^sup>v ]\<^sup>c\<^sup>e [| [ v1 ]\<^sup>c\<^sup>e |]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e  ==  [ [ L_true ]\<^sup>v ]\<^sup>c\<^sup>e   \<rbrace>; atom z1 \<sharp> [ v1  v2 ]\<^sup>e; atom z1 \<sharp> \<Gamma>; atom z2 \<sharp> [ v1  v2 ]\<^sup>e; atom z2 \<sharp> \<Gamma>; atom z3 \<sharp> [ v1  v2 ]\<^sup>e; atom z3 \<sharp> \<Gamma>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [ v1  v2 ]\<^sup>e : b_of \<lbrace> z3 : [ B_bitvec , B_bitvec ]\<^sup>b  | [ v1 ]\<^sup>c\<^sup>e  ==  [ [#1[ [ z3 ]\<^sup>v ]\<^sup>c\<^sup>e]\<^sup>c\<^sup>e @@ [#2[ [ z3 ]\<^sup>v ]\<^sup>c\<^sup>e]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e   AND  [| [#1[ [ z3 ]\<^sup>v ]\<^sup>c\<^sup>e]\<^sup>c\<^sup>e |]\<^sup>c\<^sup>e  ==  [ v2 ]\<^sup>c\<^sup>e   \<rbrace>
[PROOF STEP]
case (infer_e_leqI \<Theta> \<B> \<Gamma> \<Delta>' v1 z1 c1 v2 z2 c2 z3)
[PROOF STATE]
proof (state)
this:
 \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta>'
 \<Theta>  \<turnstile>\<^sub>w\<^sub>f v1
 \<Theta> ; \<B> ; \<Gamma> \<turnstile> z1 \<Rightarrow> \<lbrace> c1 : B_int  | v2 \<rbrace>
 \<Theta> ; \<B> ; \<Gamma> \<turnstile> z2 \<Rightarrow> \<lbrace> c2 : B_int  | z3 \<rbrace>
atom z3_ \<sharp> [ leq z1 z2 ]\<^sup>e
atom z3_ \<sharp> \<Gamma>

goal (10 subgoals):
 1. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> v1 z1 c1 v2 z2 c2 z3 \<tau>. \<lbrakk> \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v1 \<Rightarrow> \<lbrace> z1 : B_int  | c1 \<rbrace>;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v2 \<Rightarrow> \<lbrace> z2 : B_int  | c2 \<rbrace>; atom z3 \<sharp> [ leq v1 v2 ]\<^sup>e; atom z3 \<sharp> \<Gamma>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [ leq v1 v2 ]\<^sup>e : b_of \<lbrace> z3 : B_bool  | [ [ z3 ]\<^sup>v ]\<^sup>c\<^sup>e  ==  [ leq [ v1 ]\<^sup>c\<^sup>e [ v2 ]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e  \<rbrace>
 2. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> v1 z1 b c1 v2 z2 c2 z3 \<tau>. \<lbrakk> \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v1 \<Rightarrow> \<lbrace> z1 : b  | c1 \<rbrace>;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v2 \<Rightarrow> \<lbrace> z2 : b  | c2 \<rbrace>; atom z3 \<sharp> [ eq v1 v2 ]\<^sup>e; atom z3 \<sharp> \<Gamma>; b \<in> {B_bool, B_int, B_unit}\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [ eq v1 v2 ]\<^sup>e : b_of \<lbrace> z3 : B_bool  | [ [ z3 ]\<^sup>v ]\<^sup>c\<^sup>e  ==  [ eq [ v1 ]\<^sup>c\<^sup>e [ v2 ]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e  \<rbrace>
 3. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> f x b c \<tau>' s' v \<tau> \<tau>''. \<lbrakk>atom x \<sharp> \<tau>'';  \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ; Some (AF_fundef f (AF_fun_typ_none (AF_fun_typ x b c \<tau>' s'))) = lookup_fun \<Phi> f; \<Theta> ; \<B> ; \<Gamma>  \<turnstile> v \<Leftarrow> \<lbrace> x : b  | c \<rbrace>; atom x \<sharp> \<Theta>; atom x \<sharp> \<Phi>; atom x \<sharp> \<B>; atom x \<sharp> \<Gamma>; atom x \<sharp> \<Delta>; atom x \<sharp> v; atom x \<sharp> \<tau>; \<tau>'[x::=v]\<^sub>v = \<tau>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [ f  v  ]\<^sup>e : b_of \<tau>
 4. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> b' f bv x b c \<tau>' s' v \<tau> \<tau>''. \<lbrakk>atom bv \<sharp> \<tau>'';  \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B>  \<turnstile>\<^sub>w\<^sub>f b' ; Some (AF_fundef f (AF_fun_typ_some bv (AF_fun_typ x b c \<tau>' s'))) = lookup_fun \<Phi> f; \<Theta> ; \<B> ; \<Gamma>  \<turnstile> v \<Leftarrow> \<lbrace> x : b[bv::=b']\<^sub>b  | c[bv::=b']\<^sub>b \<rbrace>; atom x \<sharp> \<Gamma>; \<tau>'[bv::=b']\<^sub>b[x::=v]\<^sub>v = \<tau>; atom bv \<sharp> \<Theta>; atom bv \<sharp> \<Phi>; atom bv \<sharp> \<B>; atom bv \<sharp> \<Gamma>; atom bv \<sharp> \<Delta>; atom bv \<sharp> b'; atom bv \<sharp> v; atom bv \<sharp> \<tau>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [f [ b' ]  v ]\<^sup>e : b_of \<tau>
 5. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> v z' b1 b2 c z \<tau>. \<lbrakk> \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v \<Rightarrow> \<lbrace> z' : [ b1 , b2 ]\<^sup>b  | c \<rbrace>; atom z \<sharp> [#1v ]\<^sup>e; atom z \<sharp> \<Gamma>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [#1v ]\<^sup>e : b_of \<lbrace> z : b1  | [ [ z ]\<^sup>v ]\<^sup>c\<^sup>e  ==  [#1[ v ]\<^sup>c\<^sup>e]\<^sup>c\<^sup>e  \<rbrace>
 6. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> v z' b1 b2 c z \<tau>. \<lbrakk> \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v \<Rightarrow> \<lbrace> z' : [ b1 , b2 ]\<^sup>b  | c \<rbrace>; atom z \<sharp> [#2v ]\<^sup>e; atom z \<sharp> \<Gamma>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [#2v ]\<^sup>e : b_of \<lbrace> z : b2  | [ [ z ]\<^sup>v ]\<^sup>c\<^sup>e  ==  [#2[ v ]\<^sup>c\<^sup>e]\<^sup>c\<^sup>e  \<rbrace>
 7. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> v z' c z \<tau>. \<lbrakk> \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v \<Rightarrow> \<lbrace> z' : B_bitvec  | c \<rbrace>; atom z \<sharp> [| v |]\<^sup>e; atom z \<sharp> \<Gamma>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [| v |]\<^sup>e : b_of \<lbrace> z : B_int  | [ [ z ]\<^sup>v ]\<^sup>c\<^sup>e  ==  [| [ v ]\<^sup>c\<^sup>e |]\<^sup>c\<^sup>e  \<rbrace>
 8. \<And>\<Theta> \<B> \<Gamma> \<Phi> \<Delta> u \<tau> \<tau>'. \<lbrakk> \<Theta> ; \<B>  \<turnstile>\<^sub>w\<^sub>f \<Gamma> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ; (u, \<tau>) \<in> setD \<Delta>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [ u ]\<^sup>e : b_of \<tau>
 9. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> v1 z1 c1 v2 z2 c2 z3 \<tau>. \<lbrakk> \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v1 \<Rightarrow> \<lbrace> z1 : B_bitvec  | c1 \<rbrace>;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v2 \<Rightarrow> \<lbrace> z2 : B_bitvec  | c2 \<rbrace>; atom z3 \<sharp> [ v1 @@ v2 ]\<^sup>e; atom z3 \<sharp> \<Gamma>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [ v1 @@ v2 ]\<^sup>e : b_of \<lbrace> z3 : B_bitvec  | [ [ z3 ]\<^sup>v ]\<^sup>c\<^sup>e  ==  [ [ v1 ]\<^sup>c\<^sup>e @@ [ v2 ]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e  \<rbrace>
 10. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> v1 z1 c1 v2 z2 z3 \<tau>. \<lbrakk>atom z3 \<sharp> \<tau>; atom z1 \<sharp> \<tau>; atom z2 \<sharp> \<tau>;  \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v1 \<Rightarrow> \<lbrace> z1 : B_bitvec  | c1 \<rbrace>; \<Theta> ; \<B> ; \<Gamma>  \<turnstile> v2 \<Leftarrow> \<lbrace> z2 : B_int  | [ leq [ [ L_num 0 ]\<^sup>v ]\<^sup>c\<^sup>e [ [ z2 ]\<^sup>v ]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e  ==  [ [ L_true ]\<^sup>v ]\<^sup>c\<^sup>e   AND  [ leq [ [ z2 ]\<^sup>v ]\<^sup>c\<^sup>e [| [ v1 ]\<^sup>c\<^sup>e |]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e  ==  [ [ L_true ]\<^sup>v ]\<^sup>c\<^sup>e   \<rbrace>; atom z1 \<sharp> [ v1  v2 ]\<^sup>e; atom z1 \<sharp> \<Gamma>; atom z2 \<sharp> [ v1  v2 ]\<^sup>e; atom z2 \<sharp> \<Gamma>; atom z3 \<sharp> [ v1  v2 ]\<^sup>e; atom z3 \<sharp> \<Gamma>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [ v1  v2 ]\<^sup>e : b_of \<lbrace> z3 : [ B_bitvec , B_bitvec ]\<^sup>b  | [ v1 ]\<^sup>c\<^sup>e  ==  [ [#1[ [ z3 ]\<^sup>v ]\<^sup>c\<^sup>e]\<^sup>c\<^sup>e @@ [#2[ [ z3 ]\<^sup>v ]\<^sup>c\<^sup>e]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e   AND  [| [#1[ [ z3 ]\<^sup>v ]\<^sup>c\<^sup>e]\<^sup>c\<^sup>e |]\<^sup>c\<^sup>e  ==  [ v2 ]\<^sup>c\<^sup>e   \<rbrace>
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
 \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta>'
 \<Theta>  \<turnstile>\<^sub>w\<^sub>f v1
 \<Theta> ; \<B> ; \<Gamma> \<turnstile> z1 \<Rightarrow> \<lbrace> c1 : B_int  | v2 \<rbrace>
 \<Theta> ; \<B> ; \<Gamma> \<turnstile> z2 \<Rightarrow> \<lbrace> c2 : B_int  | z3 \<rbrace>
atom z3_ \<sharp> [ leq z1 z2 ]\<^sup>e
atom z3_ \<sharp> \<Gamma>
[PROOF STEP]
show ?case
[PROOF STATE]
proof (prove)
using this:
 \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta>'
 \<Theta>  \<turnstile>\<^sub>w\<^sub>f v1
 \<Theta> ; \<B> ; \<Gamma> \<turnstile> z1 \<Rightarrow> \<lbrace> c1 : B_int  | v2 \<rbrace>
 \<Theta> ; \<B> ; \<Gamma> \<turnstile> z2 \<Rightarrow> \<lbrace> c2 : B_int  | z3 \<rbrace>
atom z3_ \<sharp> [ leq z1 z2 ]\<^sup>e
atom z3_ \<sharp> \<Gamma>

goal (1 subgoal):
 1.  \<Theta> ; v1 ; \<B> ; \<Gamma> ; \<Delta>' \<turnstile>\<^sub>w\<^sub>f [ leq z1 z2 ]\<^sup>e : b_of \<lbrace> z3_ : B_bool  | [ [ z3_ ]\<^sup>v ]\<^sup>c\<^sup>e  ==  [ leq [ z1 ]\<^sup>c\<^sup>e [ z2 ]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e  \<rbrace>
[PROOF STEP]
using  b_of.simps infer_v_v_wf wf_intros
[PROOF STATE]
proof (prove)
using this:
 \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta>'
 \<Theta>  \<turnstile>\<^sub>w\<^sub>f v1
 \<Theta> ; \<B> ; \<Gamma> \<turnstile> z1 \<Rightarrow> \<lbrace> c1 : B_int  | v2 \<rbrace>
 \<Theta> ; \<B> ; \<Gamma> \<turnstile> z2 \<Rightarrow> \<lbrace> c2 : B_int  | z3 \<rbrace>
atom z3_ \<sharp> [ leq z1 z2 ]\<^sup>e
atom z3_ \<sharp> \<Gamma>
b_of \<lbrace> ?z : ?b  | ?c \<rbrace> = ?b
 ?\<Theta> ; ?\<B> ; ?G \<turnstile> ?v \<Rightarrow> ?\<tau> \<Longrightarrow>  ?\<Theta> ; ?\<B> ; ?G \<turnstile>\<^sub>w\<^sub>f ?v : b_of ?\<tau>
   \<turnstile>\<^sub>w\<^sub>f ?\<Theta>  \<Longrightarrow>  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f B_int
   \<turnstile>\<^sub>w\<^sub>f ?\<Theta>  \<Longrightarrow>  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f B_bool
   \<turnstile>\<^sub>w\<^sub>f ?\<Theta>  \<Longrightarrow>  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f B_unit
   \<turnstile>\<^sub>w\<^sub>f ?\<Theta>  \<Longrightarrow>  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f B_bitvec
\<lbrakk> ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?b1.0 ;  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?b2.0 \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f [ ?b1.0 , ?b2.0 ]\<^sup>b
\<lbrakk>   \<turnstile>\<^sub>w\<^sub>f ?\<Theta> ; AF_typedef ?s ?dclist \<in> set ?\<Theta>\<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f B_id ?s
\<lbrakk>   \<turnstile>\<^sub>w\<^sub>f ?\<Theta> ;  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?b ; AF_typedef_poly ?s ?bv ?dclist \<in> set ?\<Theta>\<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f B_app ?s ?b
\<lbrakk> ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?\<Gamma> ; Some (?b, ?c) = lookup ?\<Gamma> ?x\<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [ ?x ]\<^sup>v : ?b
 ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?\<Gamma>  \<Longrightarrow>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [ ?l ]\<^sup>v : base_for_lit ?l
\<lbrakk> ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : ?b1.0 ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v2.0 : ?b2.0 \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [ ?v1.0 , ?v2.0 ]\<^sup>v : [ ?b1.0 , ?b2.0 ]\<^sup>b
\<lbrakk>AF_typedef ?s ?dclist \<in> set ?\<Theta>; (?dc, \<lbrace> ?x : ?b'  | ?c \<rbrace>) \<in> set ?dclist;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v : ?b' \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f V_cons ?s ?dc ?v : B_id ?s
\<lbrakk>AF_typedef_poly ?s ?bv ?dclist \<in> set ?\<Theta>; (?dc, \<lbrace> ?x : ?b'  | ?c \<rbrace>) \<in> set ?dclist;  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?b ; atom ?bv \<sharp> (?\<Theta>, ?\<B>, ?\<Gamma>, ?b, ?v);  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v : ?b'[?bv::=?b]\<^sub>b\<^sub>b \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f V_consp ?s ?dc ?b ?v : B_app ?s ?b
 ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v : ?b  \<Longrightarrow>   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [ ?v ]\<^sup>c\<^sup>e : ?b
\<lbrakk>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : B_int ;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v2.0 : B_int \<rbrakk> \<Longrightarrow>   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [ plus ?v1.0 ?v2.0 ]\<^sup>c\<^sup>e : B_int
\<lbrakk>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : B_int ;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v2.0 : B_int \<rbrakk> \<Longrightarrow>   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [ leq ?v1.0 ?v2.0 ]\<^sup>c\<^sup>e : B_bool
\<lbrakk>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : ?b ;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v2.0 : ?b \<rbrakk> \<Longrightarrow>   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [ eq ?v1.0 ?v2.0 ]\<^sup>c\<^sup>e : B_bool
  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : [ ?b1.0 , ?b2.0 ]\<^sup>b  \<Longrightarrow>   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [#1?v1.0]\<^sup>c\<^sup>e : ?b1.0
  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : [ ?b1.0 , ?b2.0 ]\<^sup>b  \<Longrightarrow>   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [#2?v1.0]\<^sup>c\<^sup>e : ?b2.0
\<lbrakk>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : B_bitvec ;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v2.0 : B_bitvec \<rbrakk> \<Longrightarrow>   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [ ?v1.0 @@ ?v2.0 ]\<^sup>c\<^sup>e : B_bitvec
  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : B_bitvec  \<Longrightarrow>   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [| ?v1.0 |]\<^sup>c\<^sup>e : B_int
\<lbrakk>atom ?z \<sharp> (?\<Theta>, ?\<B>, ?\<Gamma>);  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?b ;  ?\<Theta> ; ?\<B> ; (?z, ?b, TRUE) #\<^sub>\<Gamma> ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?c \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f \<lbrace> ?z : ?b  | ?c \<rbrace>
\<lbrakk>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?e1.0 : ?b ;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?e2.0 : ?b \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?e1.0  ==  ?e2.0
 ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?\<Gamma>  \<Longrightarrow>  ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f TRUE
 ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?\<Gamma>  \<Longrightarrow>  ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f FALSE
\<lbrakk> ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?c1.0 ;  ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?c2.0 \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?c1.0  AND  ?c2.0
\<lbrakk> ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?c1.0 ;  ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?c2.0 \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?c1.0 OR ?c2.0
 ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?c1.0  \<Longrightarrow>  ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f \<not> ?c1.0
\<lbrakk> ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?c1.0 ;  ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?c2.0 \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?c1.0  IMP  ?c2.0
   \<turnstile>\<^sub>w\<^sub>f ?\<Theta>  \<Longrightarrow>  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f GNil
\<lbrakk>?c \<notin> {TRUE, FALSE};  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?\<Gamma> ; atom ?x \<sharp> ?\<Gamma>;  ?\<Theta> ; ?\<B> ; (?x, ?b, TRUE) #\<^sub>\<Gamma> ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?c ;  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?b \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f (?x, ?b, ?c) #\<^sub>\<Gamma> ?\<Gamma>
\<lbrakk>?c \<in> {TRUE, FALSE};  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?\<Gamma> ; atom ?x \<sharp> ?\<Gamma>;  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?b \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f (?x, ?b, ?c) #\<^sub>\<Gamma> ?\<Gamma>
   \<turnstile>\<^sub>w\<^sub>f []
\<lbrakk>name_of_type ?tdef \<notin> name_of_type ` set ?\<Theta>;    \<turnstile>\<^sub>w\<^sub>f ?\<Theta> ;  ?\<Theta> \<turnstile>\<^sub>w\<^sub>f ?tdef \<rbrakk> \<Longrightarrow>    \<turnstile>\<^sub>w\<^sub>f ?tdef # ?\<Theta>
 ?\<Theta> ; {||}  ; GNil \<turnstile>\<^sub>w\<^sub>f ?lst  \<Longrightarrow>  ?\<Theta> \<turnstile>\<^sub>w\<^sub>f AF_typedef ?s ?lst
 ?\<Theta> ; {|?bv|}  ; GNil \<turnstile>\<^sub>w\<^sub>f ?lst  \<Longrightarrow>  ?\<Theta> \<turnstile>\<^sub>w\<^sub>f AF_typedef_poly ?s ?bv ?lst
 ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?\<Gamma>  \<Longrightarrow>  ?\<Theta> ; ?\<B>  ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f []
\<lbrakk> ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?\<tau> ; ?dc \<notin> fst ` set ?ts;  ?\<Theta> ; ?\<B>  ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?ts \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<B>  ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f (?dc, ?\<tau>) # ?ts
\<lbrakk> ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f ?\<Phi> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v : ?b \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f [ ?v ]\<^sup>e : ?b
\<lbrakk> ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f ?\<Phi> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : B_int ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v2.0 : B_int \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f [ plus ?v1.0 ?v2.0 ]\<^sup>e : B_int
\<lbrakk> ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f ?\<Phi> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : B_int ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v2.0 : B_int \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f [ leq ?v1.0 ?v2.0 ]\<^sup>e : B_bool
\<lbrakk> ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f ?\<Phi> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : ?b ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v2.0 : ?b ; ?b \<in> {B_bool, B_int, B_unit}\<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f [ eq ?v1.0 ?v2.0 ]\<^sup>e : B_bool
\<lbrakk> ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f ?\<Phi> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : [ ?b1.0 , ?b2.0 ]\<^sup>b \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f [#1?v1.0 ]\<^sup>e : ?b1.0
\<lbrakk> ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f ?\<Phi> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : [ ?b1.0 , ?b2.0 ]\<^sup>b \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f [#2?v1.0 ]\<^sup>e : ?b2.0
\<lbrakk> ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f ?\<Phi> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : B_bitvec ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v2.0 : B_bitvec \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f [ ?v1.0 @@ ?v2.0 ]\<^sup>e : B_bitvec
\<lbrakk> ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f ?\<Phi> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : B_bitvec ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v2.0 : B_int \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f [ ?v1.0  ?v2.0 ]\<^sup>e : [ B_bitvec , B_bitvec ]\<^sup>b
\<lbrakk> ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f ?\<Phi> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : B_bitvec \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f [| ?v1.0 |]\<^sup>e : B_int
\<lbrakk> ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f ?\<Phi> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta> ; Some (AF_fundef ?f (AF_fun_typ_none (AF_fun_typ ?x ?b ?c ?\<tau> ?s))) = lookup_fun ?\<Phi> ?f;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v : ?b \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f [ ?f  ?v  ]\<^sup>e : b_of ?\<tau>
\<lbrakk> ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f ?\<Phi> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta> ;  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?b' ; atom ?bv \<sharp> (?\<Phi>, ?\<Theta>, ?\<B>, ?\<Gamma>, ?\<Delta>, ?b', ?v, (b_of ?\<tau>)[?bv::=?b']\<^sub>b); Some (AF_fundef ?f (AF_fun_typ_some ?bv (AF_fun_typ ?x ?b ?c ?\<tau> ?s))) = lookup_fun ?\<Phi> ?f;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v : ?b[?bv::=?b']\<^sub>b \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f [?f [ ?b' ]  ?v ]\<^sup>e : (b_of ?\<tau>)[?bv::=?b']\<^sub>b
\<lbrakk> ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f ?\<Phi> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta> ; (?u, ?\<tau>) \<in> setD ?\<Delta>\<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f [ ?u ]\<^sup>e : b_of ?\<tau>
\<lbrakk> ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f ?\<Phi> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v : ?b ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta> \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f [?v]\<^sup>s : ?b
\<lbrakk> ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f ?e : ?b' ;  ?\<Theta> ; ?\<Phi> ; ?\<B> ; (?x, ?b', TRUE) #\<^sub>\<Gamma> ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f ?s : ?b ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta> ; atom ?x \<sharp> (?\<Phi>, ?\<Theta>, ?\<B>, ?\<Gamma>, ?\<Delta>, ?e, ?b)\<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f LET ?x = ?e IN ?s : ?b
\<lbrakk> ?\<Theta> ; ?\<Phi> ; ?\<B> ; (?x, B_bool, ?c) #\<^sub>\<Gamma> ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f ?s : ?b ;  ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?c ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta> ; atom ?x \<sharp> (?\<Phi>, ?\<Theta>, ?\<B>, ?\<Gamma>, ?\<Delta>, ?c, ?b, ?s)\<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f ASSERT ?c IN ?s  : ?b
\<lbrakk> ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f ?s1.0 : b_of ?\<tau> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?\<tau> ;  ?\<Theta> ; ?\<Phi> ; ?\<B> ; (?x, b_of ?\<tau>, TRUE) #\<^sub>\<Gamma> ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f ?s2.0 : ?b ; atom ?x \<sharp> (?\<Phi>, ?\<Theta>, ?\<B>, ?\<Gamma>, ?\<Delta>, ?s1.0, ?b, ?\<tau>)\<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f LET ?x : ?\<tau> = ?s1.0 IN ?s2.0 : ?b
\<lbrakk> ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v : B_bool ;  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f ?s1.0 : ?b ;  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f ?s2.0 : ?b \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f IF ?v THEN ?s1.0 ELSE ?s2.0 : ?b
\<lbrakk> ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?\<tau> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v : b_of ?\<tau> ; atom ?u \<sharp> (?\<Phi>, ?\<Theta>, ?\<B>, ?\<Gamma>, ?\<Delta>, ?\<tau>, ?v, ?b);  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; (?u, ?\<tau>) #\<^sub>\<Delta> ?\<Delta> \<turnstile>\<^sub>w\<^sub>f ?s : ?b \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f VAR ?u : ?\<tau> = ?v IN ?s : ?b
\<lbrakk>(?u, ?\<tau>) \<in> setD ?\<Delta>;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta> ;  ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f ?\<Phi> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v : b_of ?\<tau> \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f ?u ::= ?v : B_unit
\<lbrakk> ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f ?s1.0 : B_bool ;  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f ?s2.0 : ?b \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f WHILE ?s1.0 DO { ?s2.0 }  : ?b
\<lbrakk> ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f ?s1.0 : B_unit ;  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f ?s2.0 : ?b \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f  ?s1.0 ;; ?s2.0  : ?b
\<lbrakk> ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v : B_id ?tid ; AF_typedef ?tid ?dclist \<in> set ?\<Theta>;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta> ;  ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f ?\<Phi> ;  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> ; ?tid ; ?dclist \<turnstile>\<^sub>w\<^sub>f ?cs : ?b \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f MATCH ?v WITH { ?cs } : ?b
\<lbrakk> ?\<Theta> ; ?\<Phi> ; ?\<B> ; (?x, b_of ?\<tau>, TRUE) #\<^sub>\<Gamma> ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f ?s : ?b ; atom ?x \<sharp> (?\<Phi>, ?\<Theta>, ?\<B>, ?\<Gamma>, ?\<Delta>, ?\<Gamma>, ?\<tau>);  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta> \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> ; ?tid ; ?dc ; ?\<tau> \<turnstile>\<^sub>w\<^sub>f  ?dc ?x \<Rightarrow> ?s  : ?b
 ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> ; ?tid ; ?dc ; ?t \<turnstile>\<^sub>w\<^sub>f ?cs : ?b  \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> ; ?tid ; [(?dc, ?t)] \<turnstile>\<^sub>w\<^sub>f { ?cs } : ?b
\<lbrakk> ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> ; ?tid ; ?dc ; ?t \<turnstile>\<^sub>w\<^sub>f ?cs : ?b ;  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> ; ?tid ; ?dclist \<turnstile>\<^sub>w\<^sub>f ?css : ?b \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> ; ?tid ; (?dc, ?t) # ?dclist \<turnstile>\<^sub>w\<^sub>f  ?cs | ?css   : ?b
 ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?\<Gamma>  \<Longrightarrow>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f []\<^sub>\<Delta>
\<lbrakk> ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?\<tau> ; ?u \<notin> fst ` setD ?\<Delta>\<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f (?u, ?\<tau>) #\<^sub>\<Delta> ?\<Delta>
   \<turnstile>\<^sub>w\<^sub>f ?\<Theta>  \<Longrightarrow>  ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f []
\<lbrakk>?f \<notin> name_of_fun ` set ?\<Phi>;  ?\<Theta>  ; ?\<Phi> \<turnstile>\<^sub>w\<^sub>f ?ft ;  ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f ?\<Phi> \<rbrakk> \<Longrightarrow>  ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f AF_fundef ?f ?ft # ?\<Phi>
 ?\<Theta> ; ?\<Phi> ; {||} \<turnstile>\<^sub>w\<^sub>f ?ft  \<Longrightarrow>  ?\<Theta>  ; ?\<Phi> \<turnstile>\<^sub>w\<^sub>f AF_fun_typ_none ?ft
 ?\<Theta> ; ?\<Phi> ; {|?bv|} \<turnstile>\<^sub>w\<^sub>f ?ft  \<Longrightarrow>  ?\<Theta>  ; ?\<Phi> \<turnstile>\<^sub>w\<^sub>f AF_fun_typ_some ?bv ?ft
\<lbrakk> ?\<Theta> ; ?B  \<turnstile>\<^sub>w\<^sub>f ?b ; supp ?s \<subseteq> {atom ?x} \<union> supp ?B; supp ?c \<subseteq> {atom ?x};  ?\<Theta> ; ?B ; (?x, ?b, ?c) #\<^sub>\<Gamma> GNil   \<turnstile>\<^sub>w\<^sub>f ?\<tau> ;  ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f ?\<Phi> \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?B \<turnstile>\<^sub>w\<^sub>f AF_fun_typ ?x ?b ?c ?\<tau> ?s

goal (1 subgoal):
 1.  \<Theta> ; v1 ; \<B> ; \<Gamma> ; \<Delta>' \<turnstile>\<^sub>w\<^sub>f [ leq z1 z2 ]\<^sup>e : b_of \<lbrace> z3_ : B_bool  | [ [ z3_ ]\<^sup>v ]\<^sup>c\<^sup>e  ==  [ leq [ z1 ]\<^sup>c\<^sup>e [ z2 ]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e  \<rbrace>
[PROOF STEP]
by metis
[PROOF STATE]
proof (state)
this:
 \<Theta> ; v1 ; \<B> ; \<Gamma> ; \<Delta>' \<turnstile>\<^sub>w\<^sub>f [ leq z1 z2 ]\<^sup>e : b_of \<lbrace> z3_ : B_bool  | [ [ z3_ ]\<^sup>v ]\<^sup>c\<^sup>e  ==  [ leq [ z1 ]\<^sup>c\<^sup>e [ z2 ]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e  \<rbrace>

goal (9 subgoals):
 1. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> v1 z1 b c1 v2 z2 c2 z3 \<tau>. \<lbrakk> \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v1 \<Rightarrow> \<lbrace> z1 : b  | c1 \<rbrace>;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v2 \<Rightarrow> \<lbrace> z2 : b  | c2 \<rbrace>; atom z3 \<sharp> [ eq v1 v2 ]\<^sup>e; atom z3 \<sharp> \<Gamma>; b \<in> {B_bool, B_int, B_unit}\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [ eq v1 v2 ]\<^sup>e : b_of \<lbrace> z3 : B_bool  | [ [ z3 ]\<^sup>v ]\<^sup>c\<^sup>e  ==  [ eq [ v1 ]\<^sup>c\<^sup>e [ v2 ]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e  \<rbrace>
 2. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> f x b c \<tau>' s' v \<tau> \<tau>''. \<lbrakk>atom x \<sharp> \<tau>'';  \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ; Some (AF_fundef f (AF_fun_typ_none (AF_fun_typ x b c \<tau>' s'))) = lookup_fun \<Phi> f; \<Theta> ; \<B> ; \<Gamma>  \<turnstile> v \<Leftarrow> \<lbrace> x : b  | c \<rbrace>; atom x \<sharp> \<Theta>; atom x \<sharp> \<Phi>; atom x \<sharp> \<B>; atom x \<sharp> \<Gamma>; atom x \<sharp> \<Delta>; atom x \<sharp> v; atom x \<sharp> \<tau>; \<tau>'[x::=v]\<^sub>v = \<tau>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [ f  v  ]\<^sup>e : b_of \<tau>
 3. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> b' f bv x b c \<tau>' s' v \<tau> \<tau>''. \<lbrakk>atom bv \<sharp> \<tau>'';  \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B>  \<turnstile>\<^sub>w\<^sub>f b' ; Some (AF_fundef f (AF_fun_typ_some bv (AF_fun_typ x b c \<tau>' s'))) = lookup_fun \<Phi> f; \<Theta> ; \<B> ; \<Gamma>  \<turnstile> v \<Leftarrow> \<lbrace> x : b[bv::=b']\<^sub>b  | c[bv::=b']\<^sub>b \<rbrace>; atom x \<sharp> \<Gamma>; \<tau>'[bv::=b']\<^sub>b[x::=v]\<^sub>v = \<tau>; atom bv \<sharp> \<Theta>; atom bv \<sharp> \<Phi>; atom bv \<sharp> \<B>; atom bv \<sharp> \<Gamma>; atom bv \<sharp> \<Delta>; atom bv \<sharp> b'; atom bv \<sharp> v; atom bv \<sharp> \<tau>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [f [ b' ]  v ]\<^sup>e : b_of \<tau>
 4. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> v z' b1 b2 c z \<tau>. \<lbrakk> \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v \<Rightarrow> \<lbrace> z' : [ b1 , b2 ]\<^sup>b  | c \<rbrace>; atom z \<sharp> [#1v ]\<^sup>e; atom z \<sharp> \<Gamma>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [#1v ]\<^sup>e : b_of \<lbrace> z : b1  | [ [ z ]\<^sup>v ]\<^sup>c\<^sup>e  ==  [#1[ v ]\<^sup>c\<^sup>e]\<^sup>c\<^sup>e  \<rbrace>
 5. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> v z' b1 b2 c z \<tau>. \<lbrakk> \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v \<Rightarrow> \<lbrace> z' : [ b1 , b2 ]\<^sup>b  | c \<rbrace>; atom z \<sharp> [#2v ]\<^sup>e; atom z \<sharp> \<Gamma>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [#2v ]\<^sup>e : b_of \<lbrace> z : b2  | [ [ z ]\<^sup>v ]\<^sup>c\<^sup>e  ==  [#2[ v ]\<^sup>c\<^sup>e]\<^sup>c\<^sup>e  \<rbrace>
 6. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> v z' c z \<tau>. \<lbrakk> \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v \<Rightarrow> \<lbrace> z' : B_bitvec  | c \<rbrace>; atom z \<sharp> [| v |]\<^sup>e; atom z \<sharp> \<Gamma>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [| v |]\<^sup>e : b_of \<lbrace> z : B_int  | [ [ z ]\<^sup>v ]\<^sup>c\<^sup>e  ==  [| [ v ]\<^sup>c\<^sup>e |]\<^sup>c\<^sup>e  \<rbrace>
 7. \<And>\<Theta> \<B> \<Gamma> \<Phi> \<Delta> u \<tau> \<tau>'. \<lbrakk> \<Theta> ; \<B>  \<turnstile>\<^sub>w\<^sub>f \<Gamma> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ; (u, \<tau>) \<in> setD \<Delta>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [ u ]\<^sup>e : b_of \<tau>
 8. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> v1 z1 c1 v2 z2 c2 z3 \<tau>. \<lbrakk> \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v1 \<Rightarrow> \<lbrace> z1 : B_bitvec  | c1 \<rbrace>;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v2 \<Rightarrow> \<lbrace> z2 : B_bitvec  | c2 \<rbrace>; atom z3 \<sharp> [ v1 @@ v2 ]\<^sup>e; atom z3 \<sharp> \<Gamma>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [ v1 @@ v2 ]\<^sup>e : b_of \<lbrace> z3 : B_bitvec  | [ [ z3 ]\<^sup>v ]\<^sup>c\<^sup>e  ==  [ [ v1 ]\<^sup>c\<^sup>e @@ [ v2 ]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e  \<rbrace>
 9. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> v1 z1 c1 v2 z2 z3 \<tau>. \<lbrakk>atom z3 \<sharp> \<tau>; atom z1 \<sharp> \<tau>; atom z2 \<sharp> \<tau>;  \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v1 \<Rightarrow> \<lbrace> z1 : B_bitvec  | c1 \<rbrace>; \<Theta> ; \<B> ; \<Gamma>  \<turnstile> v2 \<Leftarrow> \<lbrace> z2 : B_int  | [ leq [ [ L_num 0 ]\<^sup>v ]\<^sup>c\<^sup>e [ [ z2 ]\<^sup>v ]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e  ==  [ [ L_true ]\<^sup>v ]\<^sup>c\<^sup>e   AND  [ leq [ [ z2 ]\<^sup>v ]\<^sup>c\<^sup>e [| [ v1 ]\<^sup>c\<^sup>e |]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e  ==  [ [ L_true ]\<^sup>v ]\<^sup>c\<^sup>e   \<rbrace>; atom z1 \<sharp> [ v1  v2 ]\<^sup>e; atom z1 \<sharp> \<Gamma>; atom z2 \<sharp> [ v1  v2 ]\<^sup>e; atom z2 \<sharp> \<Gamma>; atom z3 \<sharp> [ v1  v2 ]\<^sup>e; atom z3 \<sharp> \<Gamma>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [ v1  v2 ]\<^sup>e : b_of \<lbrace> z3 : [ B_bitvec , B_bitvec ]\<^sup>b  | [ v1 ]\<^sup>c\<^sup>e  ==  [ [#1[ [ z3 ]\<^sup>v ]\<^sup>c\<^sup>e]\<^sup>c\<^sup>e @@ [#2[ [ z3 ]\<^sup>v ]\<^sup>c\<^sup>e]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e   AND  [| [#1[ [ z3 ]\<^sup>v ]\<^sup>c\<^sup>e]\<^sup>c\<^sup>e |]\<^sup>c\<^sup>e  ==  [ v2 ]\<^sup>c\<^sup>e   \<rbrace>
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (9 subgoals):
 1. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> v1 z1 b c1 v2 z2 c2 z3 \<tau>. \<lbrakk> \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v1 \<Rightarrow> \<lbrace> z1 : b  | c1 \<rbrace>;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v2 \<Rightarrow> \<lbrace> z2 : b  | c2 \<rbrace>; atom z3 \<sharp> [ eq v1 v2 ]\<^sup>e; atom z3 \<sharp> \<Gamma>; b \<in> {B_bool, B_int, B_unit}\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [ eq v1 v2 ]\<^sup>e : b_of \<lbrace> z3 : B_bool  | [ [ z3 ]\<^sup>v ]\<^sup>c\<^sup>e  ==  [ eq [ v1 ]\<^sup>c\<^sup>e [ v2 ]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e  \<rbrace>
 2. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> f x b c \<tau>' s' v \<tau> \<tau>''. \<lbrakk>atom x \<sharp> \<tau>'';  \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ; Some (AF_fundef f (AF_fun_typ_none (AF_fun_typ x b c \<tau>' s'))) = lookup_fun \<Phi> f; \<Theta> ; \<B> ; \<Gamma>  \<turnstile> v \<Leftarrow> \<lbrace> x : b  | c \<rbrace>; atom x \<sharp> \<Theta>; atom x \<sharp> \<Phi>; atom x \<sharp> \<B>; atom x \<sharp> \<Gamma>; atom x \<sharp> \<Delta>; atom x \<sharp> v; atom x \<sharp> \<tau>; \<tau>'[x::=v]\<^sub>v = \<tau>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [ f  v  ]\<^sup>e : b_of \<tau>
 3. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> b' f bv x b c \<tau>' s' v \<tau> \<tau>''. \<lbrakk>atom bv \<sharp> \<tau>'';  \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B>  \<turnstile>\<^sub>w\<^sub>f b' ; Some (AF_fundef f (AF_fun_typ_some bv (AF_fun_typ x b c \<tau>' s'))) = lookup_fun \<Phi> f; \<Theta> ; \<B> ; \<Gamma>  \<turnstile> v \<Leftarrow> \<lbrace> x : b[bv::=b']\<^sub>b  | c[bv::=b']\<^sub>b \<rbrace>; atom x \<sharp> \<Gamma>; \<tau>'[bv::=b']\<^sub>b[x::=v]\<^sub>v = \<tau>; atom bv \<sharp> \<Theta>; atom bv \<sharp> \<Phi>; atom bv \<sharp> \<B>; atom bv \<sharp> \<Gamma>; atom bv \<sharp> \<Delta>; atom bv \<sharp> b'; atom bv \<sharp> v; atom bv \<sharp> \<tau>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [f [ b' ]  v ]\<^sup>e : b_of \<tau>
 4. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> v z' b1 b2 c z \<tau>. \<lbrakk> \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v \<Rightarrow> \<lbrace> z' : [ b1 , b2 ]\<^sup>b  | c \<rbrace>; atom z \<sharp> [#1v ]\<^sup>e; atom z \<sharp> \<Gamma>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [#1v ]\<^sup>e : b_of \<lbrace> z : b1  | [ [ z ]\<^sup>v ]\<^sup>c\<^sup>e  ==  [#1[ v ]\<^sup>c\<^sup>e]\<^sup>c\<^sup>e  \<rbrace>
 5. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> v z' b1 b2 c z \<tau>. \<lbrakk> \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v \<Rightarrow> \<lbrace> z' : [ b1 , b2 ]\<^sup>b  | c \<rbrace>; atom z \<sharp> [#2v ]\<^sup>e; atom z \<sharp> \<Gamma>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [#2v ]\<^sup>e : b_of \<lbrace> z : b2  | [ [ z ]\<^sup>v ]\<^sup>c\<^sup>e  ==  [#2[ v ]\<^sup>c\<^sup>e]\<^sup>c\<^sup>e  \<rbrace>
 6. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> v z' c z \<tau>. \<lbrakk> \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v \<Rightarrow> \<lbrace> z' : B_bitvec  | c \<rbrace>; atom z \<sharp> [| v |]\<^sup>e; atom z \<sharp> \<Gamma>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [| v |]\<^sup>e : b_of \<lbrace> z : B_int  | [ [ z ]\<^sup>v ]\<^sup>c\<^sup>e  ==  [| [ v ]\<^sup>c\<^sup>e |]\<^sup>c\<^sup>e  \<rbrace>
 7. \<And>\<Theta> \<B> \<Gamma> \<Phi> \<Delta> u \<tau> \<tau>'. \<lbrakk> \<Theta> ; \<B>  \<turnstile>\<^sub>w\<^sub>f \<Gamma> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ; (u, \<tau>) \<in> setD \<Delta>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [ u ]\<^sup>e : b_of \<tau>
 8. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> v1 z1 c1 v2 z2 c2 z3 \<tau>. \<lbrakk> \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v1 \<Rightarrow> \<lbrace> z1 : B_bitvec  | c1 \<rbrace>;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v2 \<Rightarrow> \<lbrace> z2 : B_bitvec  | c2 \<rbrace>; atom z3 \<sharp> [ v1 @@ v2 ]\<^sup>e; atom z3 \<sharp> \<Gamma>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [ v1 @@ v2 ]\<^sup>e : b_of \<lbrace> z3 : B_bitvec  | [ [ z3 ]\<^sup>v ]\<^sup>c\<^sup>e  ==  [ [ v1 ]\<^sup>c\<^sup>e @@ [ v2 ]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e  \<rbrace>
 9. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> v1 z1 c1 v2 z2 z3 \<tau>. \<lbrakk>atom z3 \<sharp> \<tau>; atom z1 \<sharp> \<tau>; atom z2 \<sharp> \<tau>;  \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v1 \<Rightarrow> \<lbrace> z1 : B_bitvec  | c1 \<rbrace>; \<Theta> ; \<B> ; \<Gamma>  \<turnstile> v2 \<Leftarrow> \<lbrace> z2 : B_int  | [ leq [ [ L_num 0 ]\<^sup>v ]\<^sup>c\<^sup>e [ [ z2 ]\<^sup>v ]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e  ==  [ [ L_true ]\<^sup>v ]\<^sup>c\<^sup>e   AND  [ leq [ [ z2 ]\<^sup>v ]\<^sup>c\<^sup>e [| [ v1 ]\<^sup>c\<^sup>e |]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e  ==  [ [ L_true ]\<^sup>v ]\<^sup>c\<^sup>e   \<rbrace>; atom z1 \<sharp> [ v1  v2 ]\<^sup>e; atom z1 \<sharp> \<Gamma>; atom z2 \<sharp> [ v1  v2 ]\<^sup>e; atom z2 \<sharp> \<Gamma>; atom z3 \<sharp> [ v1  v2 ]\<^sup>e; atom z3 \<sharp> \<Gamma>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [ v1  v2 ]\<^sup>e : b_of \<lbrace> z3 : [ B_bitvec , B_bitvec ]\<^sup>b  | [ v1 ]\<^sup>c\<^sup>e  ==  [ [#1[ [ z3 ]\<^sup>v ]\<^sup>c\<^sup>e]\<^sup>c\<^sup>e @@ [#2[ [ z3 ]\<^sup>v ]\<^sup>c\<^sup>e]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e   AND  [| [#1[ [ z3 ]\<^sup>v ]\<^sup>c\<^sup>e]\<^sup>c\<^sup>e |]\<^sup>c\<^sup>e  ==  [ v2 ]\<^sup>c\<^sup>e   \<rbrace>
[PROOF STEP]
case (infer_e_eqI \<Theta> \<B> \<Gamma> \<Delta>' v1 z1 c1 v2 z2 c2 z3)
[PROOF STATE]
proof (state)
this:
 \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta>'
 \<Theta>  \<turnstile>\<^sub>w\<^sub>f v1
 \<Theta> ; \<B> ; \<Gamma> \<turnstile> z1 \<Rightarrow> \<lbrace> c1 : v2  | z2 \<rbrace>
 \<Theta> ; \<B> ; \<Gamma> \<turnstile> c2 \<Rightarrow> \<lbrace> z3 : v2  | c2_ \<rbrace>
atom z3_ \<sharp> [ eq z1 c2 ]\<^sup>e
atom z3_ \<sharp> \<Gamma>
v2 \<in> {B_bool, B_int, B_unit}

goal (9 subgoals):
 1. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> v1 z1 b c1 v2 z2 c2 z3 \<tau>. \<lbrakk> \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v1 \<Rightarrow> \<lbrace> z1 : b  | c1 \<rbrace>;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v2 \<Rightarrow> \<lbrace> z2 : b  | c2 \<rbrace>; atom z3 \<sharp> [ eq v1 v2 ]\<^sup>e; atom z3 \<sharp> \<Gamma>; b \<in> {B_bool, B_int, B_unit}\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [ eq v1 v2 ]\<^sup>e : b_of \<lbrace> z3 : B_bool  | [ [ z3 ]\<^sup>v ]\<^sup>c\<^sup>e  ==  [ eq [ v1 ]\<^sup>c\<^sup>e [ v2 ]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e  \<rbrace>
 2. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> f x b c \<tau>' s' v \<tau> \<tau>''. \<lbrakk>atom x \<sharp> \<tau>'';  \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ; Some (AF_fundef f (AF_fun_typ_none (AF_fun_typ x b c \<tau>' s'))) = lookup_fun \<Phi> f; \<Theta> ; \<B> ; \<Gamma>  \<turnstile> v \<Leftarrow> \<lbrace> x : b  | c \<rbrace>; atom x \<sharp> \<Theta>; atom x \<sharp> \<Phi>; atom x \<sharp> \<B>; atom x \<sharp> \<Gamma>; atom x \<sharp> \<Delta>; atom x \<sharp> v; atom x \<sharp> \<tau>; \<tau>'[x::=v]\<^sub>v = \<tau>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [ f  v  ]\<^sup>e : b_of \<tau>
 3. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> b' f bv x b c \<tau>' s' v \<tau> \<tau>''. \<lbrakk>atom bv \<sharp> \<tau>'';  \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B>  \<turnstile>\<^sub>w\<^sub>f b' ; Some (AF_fundef f (AF_fun_typ_some bv (AF_fun_typ x b c \<tau>' s'))) = lookup_fun \<Phi> f; \<Theta> ; \<B> ; \<Gamma>  \<turnstile> v \<Leftarrow> \<lbrace> x : b[bv::=b']\<^sub>b  | c[bv::=b']\<^sub>b \<rbrace>; atom x \<sharp> \<Gamma>; \<tau>'[bv::=b']\<^sub>b[x::=v]\<^sub>v = \<tau>; atom bv \<sharp> \<Theta>; atom bv \<sharp> \<Phi>; atom bv \<sharp> \<B>; atom bv \<sharp> \<Gamma>; atom bv \<sharp> \<Delta>; atom bv \<sharp> b'; atom bv \<sharp> v; atom bv \<sharp> \<tau>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [f [ b' ]  v ]\<^sup>e : b_of \<tau>
 4. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> v z' b1 b2 c z \<tau>. \<lbrakk> \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v \<Rightarrow> \<lbrace> z' : [ b1 , b2 ]\<^sup>b  | c \<rbrace>; atom z \<sharp> [#1v ]\<^sup>e; atom z \<sharp> \<Gamma>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [#1v ]\<^sup>e : b_of \<lbrace> z : b1  | [ [ z ]\<^sup>v ]\<^sup>c\<^sup>e  ==  [#1[ v ]\<^sup>c\<^sup>e]\<^sup>c\<^sup>e  \<rbrace>
 5. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> v z' b1 b2 c z \<tau>. \<lbrakk> \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v \<Rightarrow> \<lbrace> z' : [ b1 , b2 ]\<^sup>b  | c \<rbrace>; atom z \<sharp> [#2v ]\<^sup>e; atom z \<sharp> \<Gamma>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [#2v ]\<^sup>e : b_of \<lbrace> z : b2  | [ [ z ]\<^sup>v ]\<^sup>c\<^sup>e  ==  [#2[ v ]\<^sup>c\<^sup>e]\<^sup>c\<^sup>e  \<rbrace>
 6. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> v z' c z \<tau>. \<lbrakk> \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v \<Rightarrow> \<lbrace> z' : B_bitvec  | c \<rbrace>; atom z \<sharp> [| v |]\<^sup>e; atom z \<sharp> \<Gamma>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [| v |]\<^sup>e : b_of \<lbrace> z : B_int  | [ [ z ]\<^sup>v ]\<^sup>c\<^sup>e  ==  [| [ v ]\<^sup>c\<^sup>e |]\<^sup>c\<^sup>e  \<rbrace>
 7. \<And>\<Theta> \<B> \<Gamma> \<Phi> \<Delta> u \<tau> \<tau>'. \<lbrakk> \<Theta> ; \<B>  \<turnstile>\<^sub>w\<^sub>f \<Gamma> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ; (u, \<tau>) \<in> setD \<Delta>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [ u ]\<^sup>e : b_of \<tau>
 8. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> v1 z1 c1 v2 z2 c2 z3 \<tau>. \<lbrakk> \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v1 \<Rightarrow> \<lbrace> z1 : B_bitvec  | c1 \<rbrace>;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v2 \<Rightarrow> \<lbrace> z2 : B_bitvec  | c2 \<rbrace>; atom z3 \<sharp> [ v1 @@ v2 ]\<^sup>e; atom z3 \<sharp> \<Gamma>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [ v1 @@ v2 ]\<^sup>e : b_of \<lbrace> z3 : B_bitvec  | [ [ z3 ]\<^sup>v ]\<^sup>c\<^sup>e  ==  [ [ v1 ]\<^sup>c\<^sup>e @@ [ v2 ]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e  \<rbrace>
 9. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> v1 z1 c1 v2 z2 z3 \<tau>. \<lbrakk>atom z3 \<sharp> \<tau>; atom z1 \<sharp> \<tau>; atom z2 \<sharp> \<tau>;  \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v1 \<Rightarrow> \<lbrace> z1 : B_bitvec  | c1 \<rbrace>; \<Theta> ; \<B> ; \<Gamma>  \<turnstile> v2 \<Leftarrow> \<lbrace> z2 : B_int  | [ leq [ [ L_num 0 ]\<^sup>v ]\<^sup>c\<^sup>e [ [ z2 ]\<^sup>v ]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e  ==  [ [ L_true ]\<^sup>v ]\<^sup>c\<^sup>e   AND  [ leq [ [ z2 ]\<^sup>v ]\<^sup>c\<^sup>e [| [ v1 ]\<^sup>c\<^sup>e |]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e  ==  [ [ L_true ]\<^sup>v ]\<^sup>c\<^sup>e   \<rbrace>; atom z1 \<sharp> [ v1  v2 ]\<^sup>e; atom z1 \<sharp> \<Gamma>; atom z2 \<sharp> [ v1  v2 ]\<^sup>e; atom z2 \<sharp> \<Gamma>; atom z3 \<sharp> [ v1  v2 ]\<^sup>e; atom z3 \<sharp> \<Gamma>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [ v1  v2 ]\<^sup>e : b_of \<lbrace> z3 : [ B_bitvec , B_bitvec ]\<^sup>b  | [ v1 ]\<^sup>c\<^sup>e  ==  [ [#1[ [ z3 ]\<^sup>v ]\<^sup>c\<^sup>e]\<^sup>c\<^sup>e @@ [#2[ [ z3 ]\<^sup>v ]\<^sup>c\<^sup>e]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e   AND  [| [#1[ [ z3 ]\<^sup>v ]\<^sup>c\<^sup>e]\<^sup>c\<^sup>e |]\<^sup>c\<^sup>e  ==  [ v2 ]\<^sup>c\<^sup>e   \<rbrace>
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
 \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta>'
 \<Theta>  \<turnstile>\<^sub>w\<^sub>f v1
 \<Theta> ; \<B> ; \<Gamma> \<turnstile> z1 \<Rightarrow> \<lbrace> c1 : v2  | z2 \<rbrace>
 \<Theta> ; \<B> ; \<Gamma> \<turnstile> c2 \<Rightarrow> \<lbrace> z3 : v2  | c2_ \<rbrace>
atom z3_ \<sharp> [ eq z1 c2 ]\<^sup>e
atom z3_ \<sharp> \<Gamma>
v2 \<in> {B_bool, B_int, B_unit}
[PROOF STEP]
show ?case
[PROOF STATE]
proof (prove)
using this:
 \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta>'
 \<Theta>  \<turnstile>\<^sub>w\<^sub>f v1
 \<Theta> ; \<B> ; \<Gamma> \<turnstile> z1 \<Rightarrow> \<lbrace> c1 : v2  | z2 \<rbrace>
 \<Theta> ; \<B> ; \<Gamma> \<turnstile> c2 \<Rightarrow> \<lbrace> z3 : v2  | c2_ \<rbrace>
atom z3_ \<sharp> [ eq z1 c2 ]\<^sup>e
atom z3_ \<sharp> \<Gamma>
v2 \<in> {B_bool, B_int, B_unit}

goal (1 subgoal):
 1.  \<Theta> ; v1 ; \<B> ; \<Gamma> ; \<Delta>' \<turnstile>\<^sub>w\<^sub>f [ eq z1 c2 ]\<^sup>e : b_of \<lbrace> z3_ : B_bool  | [ [ z3_ ]\<^sup>v ]\<^sup>c\<^sup>e  ==  [ eq [ z1 ]\<^sup>c\<^sup>e [ c2 ]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e  \<rbrace>
[PROOF STEP]
using  b_of.simps infer_v_v_wf wf_intros
[PROOF STATE]
proof (prove)
using this:
 \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta>'
 \<Theta>  \<turnstile>\<^sub>w\<^sub>f v1
 \<Theta> ; \<B> ; \<Gamma> \<turnstile> z1 \<Rightarrow> \<lbrace> c1 : v2  | z2 \<rbrace>
 \<Theta> ; \<B> ; \<Gamma> \<turnstile> c2 \<Rightarrow> \<lbrace> z3 : v2  | c2_ \<rbrace>
atom z3_ \<sharp> [ eq z1 c2 ]\<^sup>e
atom z3_ \<sharp> \<Gamma>
v2 \<in> {B_bool, B_int, B_unit}
b_of \<lbrace> ?z : ?b  | ?c \<rbrace> = ?b
 ?\<Theta> ; ?\<B> ; ?G \<turnstile> ?v \<Rightarrow> ?\<tau> \<Longrightarrow>  ?\<Theta> ; ?\<B> ; ?G \<turnstile>\<^sub>w\<^sub>f ?v : b_of ?\<tau>
   \<turnstile>\<^sub>w\<^sub>f ?\<Theta>  \<Longrightarrow>  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f B_int
   \<turnstile>\<^sub>w\<^sub>f ?\<Theta>  \<Longrightarrow>  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f B_bool
   \<turnstile>\<^sub>w\<^sub>f ?\<Theta>  \<Longrightarrow>  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f B_unit
   \<turnstile>\<^sub>w\<^sub>f ?\<Theta>  \<Longrightarrow>  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f B_bitvec
\<lbrakk> ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?b1.0 ;  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?b2.0 \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f [ ?b1.0 , ?b2.0 ]\<^sup>b
\<lbrakk>   \<turnstile>\<^sub>w\<^sub>f ?\<Theta> ; AF_typedef ?s ?dclist \<in> set ?\<Theta>\<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f B_id ?s
\<lbrakk>   \<turnstile>\<^sub>w\<^sub>f ?\<Theta> ;  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?b ; AF_typedef_poly ?s ?bv ?dclist \<in> set ?\<Theta>\<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f B_app ?s ?b
\<lbrakk> ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?\<Gamma> ; Some (?b, ?c) = lookup ?\<Gamma> ?x\<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [ ?x ]\<^sup>v : ?b
 ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?\<Gamma>  \<Longrightarrow>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [ ?l ]\<^sup>v : base_for_lit ?l
\<lbrakk> ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : ?b1.0 ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v2.0 : ?b2.0 \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [ ?v1.0 , ?v2.0 ]\<^sup>v : [ ?b1.0 , ?b2.0 ]\<^sup>b
\<lbrakk>AF_typedef ?s ?dclist \<in> set ?\<Theta>; (?dc, \<lbrace> ?x : ?b'  | ?c \<rbrace>) \<in> set ?dclist;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v : ?b' \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f V_cons ?s ?dc ?v : B_id ?s
\<lbrakk>AF_typedef_poly ?s ?bv ?dclist \<in> set ?\<Theta>; (?dc, \<lbrace> ?x : ?b'  | ?c \<rbrace>) \<in> set ?dclist;  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?b ; atom ?bv \<sharp> (?\<Theta>, ?\<B>, ?\<Gamma>, ?b, ?v);  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v : ?b'[?bv::=?b]\<^sub>b\<^sub>b \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f V_consp ?s ?dc ?b ?v : B_app ?s ?b
 ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v : ?b  \<Longrightarrow>   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [ ?v ]\<^sup>c\<^sup>e : ?b
\<lbrakk>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : B_int ;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v2.0 : B_int \<rbrakk> \<Longrightarrow>   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [ plus ?v1.0 ?v2.0 ]\<^sup>c\<^sup>e : B_int
\<lbrakk>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : B_int ;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v2.0 : B_int \<rbrakk> \<Longrightarrow>   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [ leq ?v1.0 ?v2.0 ]\<^sup>c\<^sup>e : B_bool
\<lbrakk>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : ?b ;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v2.0 : ?b \<rbrakk> \<Longrightarrow>   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [ eq ?v1.0 ?v2.0 ]\<^sup>c\<^sup>e : B_bool
  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : [ ?b1.0 , ?b2.0 ]\<^sup>b  \<Longrightarrow>   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [#1?v1.0]\<^sup>c\<^sup>e : ?b1.0
  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : [ ?b1.0 , ?b2.0 ]\<^sup>b  \<Longrightarrow>   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [#2?v1.0]\<^sup>c\<^sup>e : ?b2.0
\<lbrakk>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : B_bitvec ;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v2.0 : B_bitvec \<rbrakk> \<Longrightarrow>   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [ ?v1.0 @@ ?v2.0 ]\<^sup>c\<^sup>e : B_bitvec
  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : B_bitvec  \<Longrightarrow>   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [| ?v1.0 |]\<^sup>c\<^sup>e : B_int
\<lbrakk>atom ?z \<sharp> (?\<Theta>, ?\<B>, ?\<Gamma>);  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?b ;  ?\<Theta> ; ?\<B> ; (?z, ?b, TRUE) #\<^sub>\<Gamma> ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?c \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f \<lbrace> ?z : ?b  | ?c \<rbrace>
\<lbrakk>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?e1.0 : ?b ;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?e2.0 : ?b \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?e1.0  ==  ?e2.0
 ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?\<Gamma>  \<Longrightarrow>  ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f TRUE
 ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?\<Gamma>  \<Longrightarrow>  ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f FALSE
\<lbrakk> ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?c1.0 ;  ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?c2.0 \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?c1.0  AND  ?c2.0
\<lbrakk> ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?c1.0 ;  ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?c2.0 \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?c1.0 OR ?c2.0
 ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?c1.0  \<Longrightarrow>  ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f \<not> ?c1.0
\<lbrakk> ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?c1.0 ;  ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?c2.0 \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?c1.0  IMP  ?c2.0
   \<turnstile>\<^sub>w\<^sub>f ?\<Theta>  \<Longrightarrow>  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f GNil
\<lbrakk>?c \<notin> {TRUE, FALSE};  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?\<Gamma> ; atom ?x \<sharp> ?\<Gamma>;  ?\<Theta> ; ?\<B> ; (?x, ?b, TRUE) #\<^sub>\<Gamma> ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?c ;  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?b \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f (?x, ?b, ?c) #\<^sub>\<Gamma> ?\<Gamma>
\<lbrakk>?c \<in> {TRUE, FALSE};  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?\<Gamma> ; atom ?x \<sharp> ?\<Gamma>;  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?b \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f (?x, ?b, ?c) #\<^sub>\<Gamma> ?\<Gamma>
   \<turnstile>\<^sub>w\<^sub>f []
\<lbrakk>name_of_type ?tdef \<notin> name_of_type ` set ?\<Theta>;    \<turnstile>\<^sub>w\<^sub>f ?\<Theta> ;  ?\<Theta> \<turnstile>\<^sub>w\<^sub>f ?tdef \<rbrakk> \<Longrightarrow>    \<turnstile>\<^sub>w\<^sub>f ?tdef # ?\<Theta>
 ?\<Theta> ; {||}  ; GNil \<turnstile>\<^sub>w\<^sub>f ?lst  \<Longrightarrow>  ?\<Theta> \<turnstile>\<^sub>w\<^sub>f AF_typedef ?s ?lst
 ?\<Theta> ; {|?bv|}  ; GNil \<turnstile>\<^sub>w\<^sub>f ?lst  \<Longrightarrow>  ?\<Theta> \<turnstile>\<^sub>w\<^sub>f AF_typedef_poly ?s ?bv ?lst
 ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?\<Gamma>  \<Longrightarrow>  ?\<Theta> ; ?\<B>  ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f []
\<lbrakk> ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?\<tau> ; ?dc \<notin> fst ` set ?ts;  ?\<Theta> ; ?\<B>  ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?ts \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<B>  ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f (?dc, ?\<tau>) # ?ts
\<lbrakk> ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f ?\<Phi> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v : ?b \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f [ ?v ]\<^sup>e : ?b
\<lbrakk> ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f ?\<Phi> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : B_int ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v2.0 : B_int \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f [ plus ?v1.0 ?v2.0 ]\<^sup>e : B_int
\<lbrakk> ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f ?\<Phi> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : B_int ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v2.0 : B_int \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f [ leq ?v1.0 ?v2.0 ]\<^sup>e : B_bool
\<lbrakk> ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f ?\<Phi> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : ?b ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v2.0 : ?b ; ?b \<in> {B_bool, B_int, B_unit}\<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f [ eq ?v1.0 ?v2.0 ]\<^sup>e : B_bool
\<lbrakk> ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f ?\<Phi> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : [ ?b1.0 , ?b2.0 ]\<^sup>b \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f [#1?v1.0 ]\<^sup>e : ?b1.0
\<lbrakk> ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f ?\<Phi> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : [ ?b1.0 , ?b2.0 ]\<^sup>b \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f [#2?v1.0 ]\<^sup>e : ?b2.0
\<lbrakk> ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f ?\<Phi> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : B_bitvec ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v2.0 : B_bitvec \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f [ ?v1.0 @@ ?v2.0 ]\<^sup>e : B_bitvec
\<lbrakk> ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f ?\<Phi> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : B_bitvec ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v2.0 : B_int \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f [ ?v1.0  ?v2.0 ]\<^sup>e : [ B_bitvec , B_bitvec ]\<^sup>b
\<lbrakk> ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f ?\<Phi> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : B_bitvec \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f [| ?v1.0 |]\<^sup>e : B_int
\<lbrakk> ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f ?\<Phi> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta> ; Some (AF_fundef ?f (AF_fun_typ_none (AF_fun_typ ?x ?b ?c ?\<tau> ?s))) = lookup_fun ?\<Phi> ?f;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v : ?b \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f [ ?f  ?v  ]\<^sup>e : b_of ?\<tau>
\<lbrakk> ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f ?\<Phi> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta> ;  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?b' ; atom ?bv \<sharp> (?\<Phi>, ?\<Theta>, ?\<B>, ?\<Gamma>, ?\<Delta>, ?b', ?v, (b_of ?\<tau>)[?bv::=?b']\<^sub>b); Some (AF_fundef ?f (AF_fun_typ_some ?bv (AF_fun_typ ?x ?b ?c ?\<tau> ?s))) = lookup_fun ?\<Phi> ?f;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v : ?b[?bv::=?b']\<^sub>b \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f [?f [ ?b' ]  ?v ]\<^sup>e : (b_of ?\<tau>)[?bv::=?b']\<^sub>b
\<lbrakk> ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f ?\<Phi> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta> ; (?u, ?\<tau>) \<in> setD ?\<Delta>\<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f [ ?u ]\<^sup>e : b_of ?\<tau>
\<lbrakk> ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f ?\<Phi> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v : ?b ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta> \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f [?v]\<^sup>s : ?b
\<lbrakk> ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f ?e : ?b' ;  ?\<Theta> ; ?\<Phi> ; ?\<B> ; (?x, ?b', TRUE) #\<^sub>\<Gamma> ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f ?s : ?b ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta> ; atom ?x \<sharp> (?\<Phi>, ?\<Theta>, ?\<B>, ?\<Gamma>, ?\<Delta>, ?e, ?b)\<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f LET ?x = ?e IN ?s : ?b
\<lbrakk> ?\<Theta> ; ?\<Phi> ; ?\<B> ; (?x, B_bool, ?c) #\<^sub>\<Gamma> ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f ?s : ?b ;  ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?c ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta> ; atom ?x \<sharp> (?\<Phi>, ?\<Theta>, ?\<B>, ?\<Gamma>, ?\<Delta>, ?c, ?b, ?s)\<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f ASSERT ?c IN ?s  : ?b
\<lbrakk> ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f ?s1.0 : b_of ?\<tau> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?\<tau> ;  ?\<Theta> ; ?\<Phi> ; ?\<B> ; (?x, b_of ?\<tau>, TRUE) #\<^sub>\<Gamma> ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f ?s2.0 : ?b ; atom ?x \<sharp> (?\<Phi>, ?\<Theta>, ?\<B>, ?\<Gamma>, ?\<Delta>, ?s1.0, ?b, ?\<tau>)\<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f LET ?x : ?\<tau> = ?s1.0 IN ?s2.0 : ?b
\<lbrakk> ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v : B_bool ;  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f ?s1.0 : ?b ;  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f ?s2.0 : ?b \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f IF ?v THEN ?s1.0 ELSE ?s2.0 : ?b
\<lbrakk> ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?\<tau> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v : b_of ?\<tau> ; atom ?u \<sharp> (?\<Phi>, ?\<Theta>, ?\<B>, ?\<Gamma>, ?\<Delta>, ?\<tau>, ?v, ?b);  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; (?u, ?\<tau>) #\<^sub>\<Delta> ?\<Delta> \<turnstile>\<^sub>w\<^sub>f ?s : ?b \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f VAR ?u : ?\<tau> = ?v IN ?s : ?b
\<lbrakk>(?u, ?\<tau>) \<in> setD ?\<Delta>;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta> ;  ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f ?\<Phi> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v : b_of ?\<tau> \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f ?u ::= ?v : B_unit
\<lbrakk> ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f ?s1.0 : B_bool ;  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f ?s2.0 : ?b \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f WHILE ?s1.0 DO { ?s2.0 }  : ?b
\<lbrakk> ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f ?s1.0 : B_unit ;  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f ?s2.0 : ?b \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f  ?s1.0 ;; ?s2.0  : ?b
\<lbrakk> ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v : B_id ?tid ; AF_typedef ?tid ?dclist \<in> set ?\<Theta>;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta> ;  ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f ?\<Phi> ;  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> ; ?tid ; ?dclist \<turnstile>\<^sub>w\<^sub>f ?cs : ?b \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f MATCH ?v WITH { ?cs } : ?b
\<lbrakk> ?\<Theta> ; ?\<Phi> ; ?\<B> ; (?x, b_of ?\<tau>, TRUE) #\<^sub>\<Gamma> ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f ?s : ?b ; atom ?x \<sharp> (?\<Phi>, ?\<Theta>, ?\<B>, ?\<Gamma>, ?\<Delta>, ?\<Gamma>, ?\<tau>);  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta> \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> ; ?tid ; ?dc ; ?\<tau> \<turnstile>\<^sub>w\<^sub>f  ?dc ?x \<Rightarrow> ?s  : ?b
 ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> ; ?tid ; ?dc ; ?t \<turnstile>\<^sub>w\<^sub>f ?cs : ?b  \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> ; ?tid ; [(?dc, ?t)] \<turnstile>\<^sub>w\<^sub>f { ?cs } : ?b
\<lbrakk> ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> ; ?tid ; ?dc ; ?t \<turnstile>\<^sub>w\<^sub>f ?cs : ?b ;  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> ; ?tid ; ?dclist \<turnstile>\<^sub>w\<^sub>f ?css : ?b \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> ; ?tid ; (?dc, ?t) # ?dclist \<turnstile>\<^sub>w\<^sub>f  ?cs | ?css   : ?b
 ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?\<Gamma>  \<Longrightarrow>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f []\<^sub>\<Delta>
\<lbrakk> ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?\<tau> ; ?u \<notin> fst ` setD ?\<Delta>\<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f (?u, ?\<tau>) #\<^sub>\<Delta> ?\<Delta>
   \<turnstile>\<^sub>w\<^sub>f ?\<Theta>  \<Longrightarrow>  ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f []
\<lbrakk>?f \<notin> name_of_fun ` set ?\<Phi>;  ?\<Theta>  ; ?\<Phi> \<turnstile>\<^sub>w\<^sub>f ?ft ;  ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f ?\<Phi> \<rbrakk> \<Longrightarrow>  ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f AF_fundef ?f ?ft # ?\<Phi>
 ?\<Theta> ; ?\<Phi> ; {||} \<turnstile>\<^sub>w\<^sub>f ?ft  \<Longrightarrow>  ?\<Theta>  ; ?\<Phi> \<turnstile>\<^sub>w\<^sub>f AF_fun_typ_none ?ft
 ?\<Theta> ; ?\<Phi> ; {|?bv|} \<turnstile>\<^sub>w\<^sub>f ?ft  \<Longrightarrow>  ?\<Theta>  ; ?\<Phi> \<turnstile>\<^sub>w\<^sub>f AF_fun_typ_some ?bv ?ft
\<lbrakk> ?\<Theta> ; ?B  \<turnstile>\<^sub>w\<^sub>f ?b ; supp ?s \<subseteq> {atom ?x} \<union> supp ?B; supp ?c \<subseteq> {atom ?x};  ?\<Theta> ; ?B ; (?x, ?b, ?c) #\<^sub>\<Gamma> GNil   \<turnstile>\<^sub>w\<^sub>f ?\<tau> ;  ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f ?\<Phi> \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?B \<turnstile>\<^sub>w\<^sub>f AF_fun_typ ?x ?b ?c ?\<tau> ?s

goal (1 subgoal):
 1.  \<Theta> ; v1 ; \<B> ; \<Gamma> ; \<Delta>' \<turnstile>\<^sub>w\<^sub>f [ eq z1 c2 ]\<^sup>e : b_of \<lbrace> z3_ : B_bool  | [ [ z3_ ]\<^sup>v ]\<^sup>c\<^sup>e  ==  [ eq [ z1 ]\<^sup>c\<^sup>e [ c2 ]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e  \<rbrace>
[PROOF STEP]
by metis
[PROOF STATE]
proof (state)
this:
 \<Theta> ; v1 ; \<B> ; \<Gamma> ; \<Delta>' \<turnstile>\<^sub>w\<^sub>f [ eq z1 c2 ]\<^sup>e : b_of \<lbrace> z3_ : B_bool  | [ [ z3_ ]\<^sup>v ]\<^sup>c\<^sup>e  ==  [ eq [ z1 ]\<^sup>c\<^sup>e [ c2 ]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e  \<rbrace>

goal (8 subgoals):
 1. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> f x b c \<tau>' s' v \<tau> \<tau>''. \<lbrakk>atom x \<sharp> \<tau>'';  \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ; Some (AF_fundef f (AF_fun_typ_none (AF_fun_typ x b c \<tau>' s'))) = lookup_fun \<Phi> f; \<Theta> ; \<B> ; \<Gamma>  \<turnstile> v \<Leftarrow> \<lbrace> x : b  | c \<rbrace>; atom x \<sharp> \<Theta>; atom x \<sharp> \<Phi>; atom x \<sharp> \<B>; atom x \<sharp> \<Gamma>; atom x \<sharp> \<Delta>; atom x \<sharp> v; atom x \<sharp> \<tau>; \<tau>'[x::=v]\<^sub>v = \<tau>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [ f  v  ]\<^sup>e : b_of \<tau>
 2. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> b' f bv x b c \<tau>' s' v \<tau> \<tau>''. \<lbrakk>atom bv \<sharp> \<tau>'';  \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B>  \<turnstile>\<^sub>w\<^sub>f b' ; Some (AF_fundef f (AF_fun_typ_some bv (AF_fun_typ x b c \<tau>' s'))) = lookup_fun \<Phi> f; \<Theta> ; \<B> ; \<Gamma>  \<turnstile> v \<Leftarrow> \<lbrace> x : b[bv::=b']\<^sub>b  | c[bv::=b']\<^sub>b \<rbrace>; atom x \<sharp> \<Gamma>; \<tau>'[bv::=b']\<^sub>b[x::=v]\<^sub>v = \<tau>; atom bv \<sharp> \<Theta>; atom bv \<sharp> \<Phi>; atom bv \<sharp> \<B>; atom bv \<sharp> \<Gamma>; atom bv \<sharp> \<Delta>; atom bv \<sharp> b'; atom bv \<sharp> v; atom bv \<sharp> \<tau>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [f [ b' ]  v ]\<^sup>e : b_of \<tau>
 3. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> v z' b1 b2 c z \<tau>. \<lbrakk> \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v \<Rightarrow> \<lbrace> z' : [ b1 , b2 ]\<^sup>b  | c \<rbrace>; atom z \<sharp> [#1v ]\<^sup>e; atom z \<sharp> \<Gamma>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [#1v ]\<^sup>e : b_of \<lbrace> z : b1  | [ [ z ]\<^sup>v ]\<^sup>c\<^sup>e  ==  [#1[ v ]\<^sup>c\<^sup>e]\<^sup>c\<^sup>e  \<rbrace>
 4. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> v z' b1 b2 c z \<tau>. \<lbrakk> \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v \<Rightarrow> \<lbrace> z' : [ b1 , b2 ]\<^sup>b  | c \<rbrace>; atom z \<sharp> [#2v ]\<^sup>e; atom z \<sharp> \<Gamma>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [#2v ]\<^sup>e : b_of \<lbrace> z : b2  | [ [ z ]\<^sup>v ]\<^sup>c\<^sup>e  ==  [#2[ v ]\<^sup>c\<^sup>e]\<^sup>c\<^sup>e  \<rbrace>
 5. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> v z' c z \<tau>. \<lbrakk> \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v \<Rightarrow> \<lbrace> z' : B_bitvec  | c \<rbrace>; atom z \<sharp> [| v |]\<^sup>e; atom z \<sharp> \<Gamma>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [| v |]\<^sup>e : b_of \<lbrace> z : B_int  | [ [ z ]\<^sup>v ]\<^sup>c\<^sup>e  ==  [| [ v ]\<^sup>c\<^sup>e |]\<^sup>c\<^sup>e  \<rbrace>
 6. \<And>\<Theta> \<B> \<Gamma> \<Phi> \<Delta> u \<tau> \<tau>'. \<lbrakk> \<Theta> ; \<B>  \<turnstile>\<^sub>w\<^sub>f \<Gamma> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ; (u, \<tau>) \<in> setD \<Delta>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [ u ]\<^sup>e : b_of \<tau>
 7. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> v1 z1 c1 v2 z2 c2 z3 \<tau>. \<lbrakk> \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v1 \<Rightarrow> \<lbrace> z1 : B_bitvec  | c1 \<rbrace>;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v2 \<Rightarrow> \<lbrace> z2 : B_bitvec  | c2 \<rbrace>; atom z3 \<sharp> [ v1 @@ v2 ]\<^sup>e; atom z3 \<sharp> \<Gamma>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [ v1 @@ v2 ]\<^sup>e : b_of \<lbrace> z3 : B_bitvec  | [ [ z3 ]\<^sup>v ]\<^sup>c\<^sup>e  ==  [ [ v1 ]\<^sup>c\<^sup>e @@ [ v2 ]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e  \<rbrace>
 8. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> v1 z1 c1 v2 z2 z3 \<tau>. \<lbrakk>atom z3 \<sharp> \<tau>; atom z1 \<sharp> \<tau>; atom z2 \<sharp> \<tau>;  \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v1 \<Rightarrow> \<lbrace> z1 : B_bitvec  | c1 \<rbrace>; \<Theta> ; \<B> ; \<Gamma>  \<turnstile> v2 \<Leftarrow> \<lbrace> z2 : B_int  | [ leq [ [ L_num 0 ]\<^sup>v ]\<^sup>c\<^sup>e [ [ z2 ]\<^sup>v ]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e  ==  [ [ L_true ]\<^sup>v ]\<^sup>c\<^sup>e   AND  [ leq [ [ z2 ]\<^sup>v ]\<^sup>c\<^sup>e [| [ v1 ]\<^sup>c\<^sup>e |]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e  ==  [ [ L_true ]\<^sup>v ]\<^sup>c\<^sup>e   \<rbrace>; atom z1 \<sharp> [ v1  v2 ]\<^sup>e; atom z1 \<sharp> \<Gamma>; atom z2 \<sharp> [ v1  v2 ]\<^sup>e; atom z2 \<sharp> \<Gamma>; atom z3 \<sharp> [ v1  v2 ]\<^sup>e; atom z3 \<sharp> \<Gamma>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [ v1  v2 ]\<^sup>e : b_of \<lbrace> z3 : [ B_bitvec , B_bitvec ]\<^sup>b  | [ v1 ]\<^sup>c\<^sup>e  ==  [ [#1[ [ z3 ]\<^sup>v ]\<^sup>c\<^sup>e]\<^sup>c\<^sup>e @@ [#2[ [ z3 ]\<^sup>v ]\<^sup>c\<^sup>e]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e   AND  [| [#1[ [ z3 ]\<^sup>v ]\<^sup>c\<^sup>e]\<^sup>c\<^sup>e |]\<^sup>c\<^sup>e  ==  [ v2 ]\<^sup>c\<^sup>e   \<rbrace>
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (8 subgoals):
 1. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> f x b c \<tau>' s' v \<tau> \<tau>''. \<lbrakk>atom x \<sharp> \<tau>'';  \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ; Some (AF_fundef f (AF_fun_typ_none (AF_fun_typ x b c \<tau>' s'))) = lookup_fun \<Phi> f; \<Theta> ; \<B> ; \<Gamma>  \<turnstile> v \<Leftarrow> \<lbrace> x : b  | c \<rbrace>; atom x \<sharp> \<Theta>; atom x \<sharp> \<Phi>; atom x \<sharp> \<B>; atom x \<sharp> \<Gamma>; atom x \<sharp> \<Delta>; atom x \<sharp> v; atom x \<sharp> \<tau>; \<tau>'[x::=v]\<^sub>v = \<tau>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [ f  v  ]\<^sup>e : b_of \<tau>
 2. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> b' f bv x b c \<tau>' s' v \<tau> \<tau>''. \<lbrakk>atom bv \<sharp> \<tau>'';  \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B>  \<turnstile>\<^sub>w\<^sub>f b' ; Some (AF_fundef f (AF_fun_typ_some bv (AF_fun_typ x b c \<tau>' s'))) = lookup_fun \<Phi> f; \<Theta> ; \<B> ; \<Gamma>  \<turnstile> v \<Leftarrow> \<lbrace> x : b[bv::=b']\<^sub>b  | c[bv::=b']\<^sub>b \<rbrace>; atom x \<sharp> \<Gamma>; \<tau>'[bv::=b']\<^sub>b[x::=v]\<^sub>v = \<tau>; atom bv \<sharp> \<Theta>; atom bv \<sharp> \<Phi>; atom bv \<sharp> \<B>; atom bv \<sharp> \<Gamma>; atom bv \<sharp> \<Delta>; atom bv \<sharp> b'; atom bv \<sharp> v; atom bv \<sharp> \<tau>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [f [ b' ]  v ]\<^sup>e : b_of \<tau>
 3. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> v z' b1 b2 c z \<tau>. \<lbrakk> \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v \<Rightarrow> \<lbrace> z' : [ b1 , b2 ]\<^sup>b  | c \<rbrace>; atom z \<sharp> [#1v ]\<^sup>e; atom z \<sharp> \<Gamma>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [#1v ]\<^sup>e : b_of \<lbrace> z : b1  | [ [ z ]\<^sup>v ]\<^sup>c\<^sup>e  ==  [#1[ v ]\<^sup>c\<^sup>e]\<^sup>c\<^sup>e  \<rbrace>
 4. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> v z' b1 b2 c z \<tau>. \<lbrakk> \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v \<Rightarrow> \<lbrace> z' : [ b1 , b2 ]\<^sup>b  | c \<rbrace>; atom z \<sharp> [#2v ]\<^sup>e; atom z \<sharp> \<Gamma>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [#2v ]\<^sup>e : b_of \<lbrace> z : b2  | [ [ z ]\<^sup>v ]\<^sup>c\<^sup>e  ==  [#2[ v ]\<^sup>c\<^sup>e]\<^sup>c\<^sup>e  \<rbrace>
 5. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> v z' c z \<tau>. \<lbrakk> \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v \<Rightarrow> \<lbrace> z' : B_bitvec  | c \<rbrace>; atom z \<sharp> [| v |]\<^sup>e; atom z \<sharp> \<Gamma>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [| v |]\<^sup>e : b_of \<lbrace> z : B_int  | [ [ z ]\<^sup>v ]\<^sup>c\<^sup>e  ==  [| [ v ]\<^sup>c\<^sup>e |]\<^sup>c\<^sup>e  \<rbrace>
 6. \<And>\<Theta> \<B> \<Gamma> \<Phi> \<Delta> u \<tau> \<tau>'. \<lbrakk> \<Theta> ; \<B>  \<turnstile>\<^sub>w\<^sub>f \<Gamma> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ; (u, \<tau>) \<in> setD \<Delta>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [ u ]\<^sup>e : b_of \<tau>
 7. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> v1 z1 c1 v2 z2 c2 z3 \<tau>. \<lbrakk> \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v1 \<Rightarrow> \<lbrace> z1 : B_bitvec  | c1 \<rbrace>;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v2 \<Rightarrow> \<lbrace> z2 : B_bitvec  | c2 \<rbrace>; atom z3 \<sharp> [ v1 @@ v2 ]\<^sup>e; atom z3 \<sharp> \<Gamma>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [ v1 @@ v2 ]\<^sup>e : b_of \<lbrace> z3 : B_bitvec  | [ [ z3 ]\<^sup>v ]\<^sup>c\<^sup>e  ==  [ [ v1 ]\<^sup>c\<^sup>e @@ [ v2 ]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e  \<rbrace>
 8. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> v1 z1 c1 v2 z2 z3 \<tau>. \<lbrakk>atom z3 \<sharp> \<tau>; atom z1 \<sharp> \<tau>; atom z2 \<sharp> \<tau>;  \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v1 \<Rightarrow> \<lbrace> z1 : B_bitvec  | c1 \<rbrace>; \<Theta> ; \<B> ; \<Gamma>  \<turnstile> v2 \<Leftarrow> \<lbrace> z2 : B_int  | [ leq [ [ L_num 0 ]\<^sup>v ]\<^sup>c\<^sup>e [ [ z2 ]\<^sup>v ]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e  ==  [ [ L_true ]\<^sup>v ]\<^sup>c\<^sup>e   AND  [ leq [ [ z2 ]\<^sup>v ]\<^sup>c\<^sup>e [| [ v1 ]\<^sup>c\<^sup>e |]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e  ==  [ [ L_true ]\<^sup>v ]\<^sup>c\<^sup>e   \<rbrace>; atom z1 \<sharp> [ v1  v2 ]\<^sup>e; atom z1 \<sharp> \<Gamma>; atom z2 \<sharp> [ v1  v2 ]\<^sup>e; atom z2 \<sharp> \<Gamma>; atom z3 \<sharp> [ v1  v2 ]\<^sup>e; atom z3 \<sharp> \<Gamma>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [ v1  v2 ]\<^sup>e : b_of \<lbrace> z3 : [ B_bitvec , B_bitvec ]\<^sup>b  | [ v1 ]\<^sup>c\<^sup>e  ==  [ [#1[ [ z3 ]\<^sup>v ]\<^sup>c\<^sup>e]\<^sup>c\<^sup>e @@ [#2[ [ z3 ]\<^sup>v ]\<^sup>c\<^sup>e]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e   AND  [| [#1[ [ z3 ]\<^sup>v ]\<^sup>c\<^sup>e]\<^sup>c\<^sup>e |]\<^sup>c\<^sup>e  ==  [ v2 ]\<^sup>c\<^sup>e   \<rbrace>
[PROOF STEP]
case (infer_e_appI \<Theta> \<B> \<Gamma> \<Delta> \<Phi> f x b c \<tau>' s' v \<tau>'')
[PROOF STATE]
proof (state)
this:
atom x \<sharp> \<tau>
 \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta>
 \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi>
Some (AF_fundef f (AF_fun_typ_none (AF_fun_typ x b c \<tau>' s'))) = lookup_fun \<Phi> f
\<Theta> ; \<B> ; \<Gamma>  \<turnstile> v \<Leftarrow> \<lbrace> x : b  | c \<rbrace>
atom x \<sharp> \<Theta>
atom x \<sharp> \<Phi>
atom x \<sharp> \<B>
atom x \<sharp> \<Gamma>
atom x \<sharp> \<Delta>
atom x \<sharp> v
atom x \<sharp> \<tau>''
\<tau>'[x::=v]\<^sub>v = \<tau>''

goal (8 subgoals):
 1. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> f x b c \<tau>' s' v \<tau> \<tau>''. \<lbrakk>atom x \<sharp> \<tau>'';  \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ; Some (AF_fundef f (AF_fun_typ_none (AF_fun_typ x b c \<tau>' s'))) = lookup_fun \<Phi> f; \<Theta> ; \<B> ; \<Gamma>  \<turnstile> v \<Leftarrow> \<lbrace> x : b  | c \<rbrace>; atom x \<sharp> \<Theta>; atom x \<sharp> \<Phi>; atom x \<sharp> \<B>; atom x \<sharp> \<Gamma>; atom x \<sharp> \<Delta>; atom x \<sharp> v; atom x \<sharp> \<tau>; \<tau>'[x::=v]\<^sub>v = \<tau>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [ f  v  ]\<^sup>e : b_of \<tau>
 2. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> b' f bv x b c \<tau>' s' v \<tau> \<tau>''. \<lbrakk>atom bv \<sharp> \<tau>'';  \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B>  \<turnstile>\<^sub>w\<^sub>f b' ; Some (AF_fundef f (AF_fun_typ_some bv (AF_fun_typ x b c \<tau>' s'))) = lookup_fun \<Phi> f; \<Theta> ; \<B> ; \<Gamma>  \<turnstile> v \<Leftarrow> \<lbrace> x : b[bv::=b']\<^sub>b  | c[bv::=b']\<^sub>b \<rbrace>; atom x \<sharp> \<Gamma>; \<tau>'[bv::=b']\<^sub>b[x::=v]\<^sub>v = \<tau>; atom bv \<sharp> \<Theta>; atom bv \<sharp> \<Phi>; atom bv \<sharp> \<B>; atom bv \<sharp> \<Gamma>; atom bv \<sharp> \<Delta>; atom bv \<sharp> b'; atom bv \<sharp> v; atom bv \<sharp> \<tau>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [f [ b' ]  v ]\<^sup>e : b_of \<tau>
 3. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> v z' b1 b2 c z \<tau>. \<lbrakk> \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v \<Rightarrow> \<lbrace> z' : [ b1 , b2 ]\<^sup>b  | c \<rbrace>; atom z \<sharp> [#1v ]\<^sup>e; atom z \<sharp> \<Gamma>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [#1v ]\<^sup>e : b_of \<lbrace> z : b1  | [ [ z ]\<^sup>v ]\<^sup>c\<^sup>e  ==  [#1[ v ]\<^sup>c\<^sup>e]\<^sup>c\<^sup>e  \<rbrace>
 4. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> v z' b1 b2 c z \<tau>. \<lbrakk> \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v \<Rightarrow> \<lbrace> z' : [ b1 , b2 ]\<^sup>b  | c \<rbrace>; atom z \<sharp> [#2v ]\<^sup>e; atom z \<sharp> \<Gamma>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [#2v ]\<^sup>e : b_of \<lbrace> z : b2  | [ [ z ]\<^sup>v ]\<^sup>c\<^sup>e  ==  [#2[ v ]\<^sup>c\<^sup>e]\<^sup>c\<^sup>e  \<rbrace>
 5. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> v z' c z \<tau>. \<lbrakk> \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v \<Rightarrow> \<lbrace> z' : B_bitvec  | c \<rbrace>; atom z \<sharp> [| v |]\<^sup>e; atom z \<sharp> \<Gamma>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [| v |]\<^sup>e : b_of \<lbrace> z : B_int  | [ [ z ]\<^sup>v ]\<^sup>c\<^sup>e  ==  [| [ v ]\<^sup>c\<^sup>e |]\<^sup>c\<^sup>e  \<rbrace>
 6. \<And>\<Theta> \<B> \<Gamma> \<Phi> \<Delta> u \<tau> \<tau>'. \<lbrakk> \<Theta> ; \<B>  \<turnstile>\<^sub>w\<^sub>f \<Gamma> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ; (u, \<tau>) \<in> setD \<Delta>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [ u ]\<^sup>e : b_of \<tau>
 7. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> v1 z1 c1 v2 z2 c2 z3 \<tau>. \<lbrakk> \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v1 \<Rightarrow> \<lbrace> z1 : B_bitvec  | c1 \<rbrace>;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v2 \<Rightarrow> \<lbrace> z2 : B_bitvec  | c2 \<rbrace>; atom z3 \<sharp> [ v1 @@ v2 ]\<^sup>e; atom z3 \<sharp> \<Gamma>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [ v1 @@ v2 ]\<^sup>e : b_of \<lbrace> z3 : B_bitvec  | [ [ z3 ]\<^sup>v ]\<^sup>c\<^sup>e  ==  [ [ v1 ]\<^sup>c\<^sup>e @@ [ v2 ]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e  \<rbrace>
 8. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> v1 z1 c1 v2 z2 z3 \<tau>. \<lbrakk>atom z3 \<sharp> \<tau>; atom z1 \<sharp> \<tau>; atom z2 \<sharp> \<tau>;  \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v1 \<Rightarrow> \<lbrace> z1 : B_bitvec  | c1 \<rbrace>; \<Theta> ; \<B> ; \<Gamma>  \<turnstile> v2 \<Leftarrow> \<lbrace> z2 : B_int  | [ leq [ [ L_num 0 ]\<^sup>v ]\<^sup>c\<^sup>e [ [ z2 ]\<^sup>v ]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e  ==  [ [ L_true ]\<^sup>v ]\<^sup>c\<^sup>e   AND  [ leq [ [ z2 ]\<^sup>v ]\<^sup>c\<^sup>e [| [ v1 ]\<^sup>c\<^sup>e |]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e  ==  [ [ L_true ]\<^sup>v ]\<^sup>c\<^sup>e   \<rbrace>; atom z1 \<sharp> [ v1  v2 ]\<^sup>e; atom z1 \<sharp> \<Gamma>; atom z2 \<sharp> [ v1  v2 ]\<^sup>e; atom z2 \<sharp> \<Gamma>; atom z3 \<sharp> [ v1  v2 ]\<^sup>e; atom z3 \<sharp> \<Gamma>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [ v1  v2 ]\<^sup>e : b_of \<lbrace> z3 : [ B_bitvec , B_bitvec ]\<^sup>b  | [ v1 ]\<^sup>c\<^sup>e  ==  [ [#1[ [ z3 ]\<^sup>v ]\<^sup>c\<^sup>e]\<^sup>c\<^sup>e @@ [#2[ [ z3 ]\<^sup>v ]\<^sup>c\<^sup>e]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e   AND  [| [#1[ [ z3 ]\<^sup>v ]\<^sup>c\<^sup>e]\<^sup>c\<^sup>e |]\<^sup>c\<^sup>e  ==  [ v2 ]\<^sup>c\<^sup>e   \<rbrace>
[PROOF STEP]
have "\<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f AE_app f v : b_of \<tau>' "
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1.  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [ f  v  ]\<^sup>e : b_of \<tau>'
[PROOF STEP]
proof
[PROOF STATE]
proof (state)
goal (4 subgoals):
 1.  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi>
 2.  \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta>
 3. Some (AF_fundef f (AF_fun_typ_none (AF_fun_typ ?x ?b ?c \<tau>' ?s))) = lookup_fun \<Phi> f
 4.  \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f v : ?b
[PROOF STEP]
show \<open> \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> \<close>
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1.  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi>
[PROOF STEP]
using infer_e_appI
[PROOF STATE]
proof (prove)
using this:
atom x \<sharp> \<tau>
 \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta>
 \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi>
Some (AF_fundef f (AF_fun_typ_none (AF_fun_typ x b c \<tau>' s'))) = lookup_fun \<Phi> f
\<Theta> ; \<B> ; \<Gamma>  \<turnstile> v \<Leftarrow> \<lbrace> x : b  | c \<rbrace>
atom x \<sharp> \<Theta>
atom x \<sharp> \<Phi>
atom x \<sharp> \<B>
atom x \<sharp> \<Gamma>
atom x \<sharp> \<Delta>
atom x \<sharp> v
atom x \<sharp> \<tau>''
\<tau>'[x::=v]\<^sub>v = \<tau>''

goal (1 subgoal):
 1.  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi>
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
 \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi>

goal (3 subgoals):
 1.  \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta>
 2. Some (AF_fundef f (AF_fun_typ_none (AF_fun_typ ?x ?b ?c \<tau>' ?s))) = lookup_fun \<Phi> f
 3.  \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f v : ?b
[PROOF STEP]
show \<open> \<Theta>; \<B>; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> \<close>
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1.  \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta>
[PROOF STEP]
using infer_e_appI
[PROOF STATE]
proof (prove)
using this:
atom x \<sharp> \<tau>
 \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta>
 \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi>
Some (AF_fundef f (AF_fun_typ_none (AF_fun_typ x b c \<tau>' s'))) = lookup_fun \<Phi> f
\<Theta> ; \<B> ; \<Gamma>  \<turnstile> v \<Leftarrow> \<lbrace> x : b  | c \<rbrace>
atom x \<sharp> \<Theta>
atom x \<sharp> \<Phi>
atom x \<sharp> \<B>
atom x \<sharp> \<Gamma>
atom x \<sharp> \<Delta>
atom x \<sharp> v
atom x \<sharp> \<tau>''
\<tau>'[x::=v]\<^sub>v = \<tau>''

goal (1 subgoal):
 1.  \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta>
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
 \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta>

goal (2 subgoals):
 1. Some (AF_fundef f (AF_fun_typ_none (AF_fun_typ ?x ?b ?c \<tau>' ?s))) = lookup_fun \<Phi> f
 2.  \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f v : ?b
[PROOF STEP]
show \<open>Some (AF_fundef f (AF_fun_typ_none (AF_fun_typ x b c \<tau>' s'))) = lookup_fun \<Phi> f\<close>
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. Some (AF_fundef f (AF_fun_typ_none (AF_fun_typ x b c \<tau>' s'))) = lookup_fun \<Phi> f
[PROOF STEP]
using infer_e_appI
[PROOF STATE]
proof (prove)
using this:
atom x \<sharp> \<tau>
 \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta>
 \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi>
Some (AF_fundef f (AF_fun_typ_none (AF_fun_typ x b c \<tau>' s'))) = lookup_fun \<Phi> f
\<Theta> ; \<B> ; \<Gamma>  \<turnstile> v \<Leftarrow> \<lbrace> x : b  | c \<rbrace>
atom x \<sharp> \<Theta>
atom x \<sharp> \<Phi>
atom x \<sharp> \<B>
atom x \<sharp> \<Gamma>
atom x \<sharp> \<Delta>
atom x \<sharp> v
atom x \<sharp> \<tau>''
\<tau>'[x::=v]\<^sub>v = \<tau>''

goal (1 subgoal):
 1. Some (AF_fundef f (AF_fun_typ_none (AF_fun_typ x b c \<tau>' s'))) = lookup_fun \<Phi> f
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
Some (AF_fundef f (AF_fun_typ_none (AF_fun_typ x b c \<tau>' s'))) = lookup_fun \<Phi> f

goal (1 subgoal):
 1.  \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f v : b
[PROOF STEP]
show "\<Theta>; \<B>;\<Gamma> \<turnstile>\<^sub>w\<^sub>f v : b"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1.  \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f v : b
[PROOF STEP]
using infer_e_appI check_v_wf b_of.simps
[PROOF STATE]
proof (prove)
using this:
atom x \<sharp> \<tau>
 \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta>
 \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi>
Some (AF_fundef f (AF_fun_typ_none (AF_fun_typ x b c \<tau>' s'))) = lookup_fun \<Phi> f
\<Theta> ; \<B> ; \<Gamma>  \<turnstile> v \<Leftarrow> \<lbrace> x : b  | c \<rbrace>
atom x \<sharp> \<Theta>
atom x \<sharp> \<Phi>
atom x \<sharp> \<B>
atom x \<sharp> \<Gamma>
atom x \<sharp> \<Delta>
atom x \<sharp> v
atom x \<sharp> \<tau>''
\<tau>'[x::=v]\<^sub>v = \<tau>''
?\<Theta> ; ?\<B> ; ?\<Gamma>  \<turnstile> ?v \<Leftarrow> ?\<tau> \<Longrightarrow>  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?\<Gamma>
?\<Theta> ; ?\<B> ; ?\<Gamma>  \<turnstile> ?v \<Leftarrow> ?\<tau> \<Longrightarrow>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v : b_of ?\<tau>
?\<Theta> ; ?\<B> ; ?\<Gamma>  \<turnstile> ?v \<Leftarrow> ?\<tau> \<Longrightarrow>  ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?\<tau>
b_of \<lbrace> ?z : ?b  | ?c \<rbrace> = ?b

goal (1 subgoal):
 1.  \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f v : b
[PROOF STEP]
by metis
[PROOF STATE]
proof (state)
this:
 \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f v : b

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
 \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [ f  v  ]\<^sup>e : b_of \<tau>'

goal (8 subgoals):
 1. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> f x b c \<tau>' s' v \<tau> \<tau>''. \<lbrakk>atom x \<sharp> \<tau>'';  \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ; Some (AF_fundef f (AF_fun_typ_none (AF_fun_typ x b c \<tau>' s'))) = lookup_fun \<Phi> f; \<Theta> ; \<B> ; \<Gamma>  \<turnstile> v \<Leftarrow> \<lbrace> x : b  | c \<rbrace>; atom x \<sharp> \<Theta>; atom x \<sharp> \<Phi>; atom x \<sharp> \<B>; atom x \<sharp> \<Gamma>; atom x \<sharp> \<Delta>; atom x \<sharp> v; atom x \<sharp> \<tau>; \<tau>'[x::=v]\<^sub>v = \<tau>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [ f  v  ]\<^sup>e : b_of \<tau>
 2. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> b' f bv x b c \<tau>' s' v \<tau> \<tau>''. \<lbrakk>atom bv \<sharp> \<tau>'';  \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B>  \<turnstile>\<^sub>w\<^sub>f b' ; Some (AF_fundef f (AF_fun_typ_some bv (AF_fun_typ x b c \<tau>' s'))) = lookup_fun \<Phi> f; \<Theta> ; \<B> ; \<Gamma>  \<turnstile> v \<Leftarrow> \<lbrace> x : b[bv::=b']\<^sub>b  | c[bv::=b']\<^sub>b \<rbrace>; atom x \<sharp> \<Gamma>; \<tau>'[bv::=b']\<^sub>b[x::=v]\<^sub>v = \<tau>; atom bv \<sharp> \<Theta>; atom bv \<sharp> \<Phi>; atom bv \<sharp> \<B>; atom bv \<sharp> \<Gamma>; atom bv \<sharp> \<Delta>; atom bv \<sharp> b'; atom bv \<sharp> v; atom bv \<sharp> \<tau>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [f [ b' ]  v ]\<^sup>e : b_of \<tau>
 3. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> v z' b1 b2 c z \<tau>. \<lbrakk> \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v \<Rightarrow> \<lbrace> z' : [ b1 , b2 ]\<^sup>b  | c \<rbrace>; atom z \<sharp> [#1v ]\<^sup>e; atom z \<sharp> \<Gamma>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [#1v ]\<^sup>e : b_of \<lbrace> z : b1  | [ [ z ]\<^sup>v ]\<^sup>c\<^sup>e  ==  [#1[ v ]\<^sup>c\<^sup>e]\<^sup>c\<^sup>e  \<rbrace>
 4. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> v z' b1 b2 c z \<tau>. \<lbrakk> \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v \<Rightarrow> \<lbrace> z' : [ b1 , b2 ]\<^sup>b  | c \<rbrace>; atom z \<sharp> [#2v ]\<^sup>e; atom z \<sharp> \<Gamma>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [#2v ]\<^sup>e : b_of \<lbrace> z : b2  | [ [ z ]\<^sup>v ]\<^sup>c\<^sup>e  ==  [#2[ v ]\<^sup>c\<^sup>e]\<^sup>c\<^sup>e  \<rbrace>
 5. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> v z' c z \<tau>. \<lbrakk> \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v \<Rightarrow> \<lbrace> z' : B_bitvec  | c \<rbrace>; atom z \<sharp> [| v |]\<^sup>e; atom z \<sharp> \<Gamma>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [| v |]\<^sup>e : b_of \<lbrace> z : B_int  | [ [ z ]\<^sup>v ]\<^sup>c\<^sup>e  ==  [| [ v ]\<^sup>c\<^sup>e |]\<^sup>c\<^sup>e  \<rbrace>
 6. \<And>\<Theta> \<B> \<Gamma> \<Phi> \<Delta> u \<tau> \<tau>'. \<lbrakk> \<Theta> ; \<B>  \<turnstile>\<^sub>w\<^sub>f \<Gamma> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ; (u, \<tau>) \<in> setD \<Delta>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [ u ]\<^sup>e : b_of \<tau>
 7. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> v1 z1 c1 v2 z2 c2 z3 \<tau>. \<lbrakk> \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v1 \<Rightarrow> \<lbrace> z1 : B_bitvec  | c1 \<rbrace>;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v2 \<Rightarrow> \<lbrace> z2 : B_bitvec  | c2 \<rbrace>; atom z3 \<sharp> [ v1 @@ v2 ]\<^sup>e; atom z3 \<sharp> \<Gamma>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [ v1 @@ v2 ]\<^sup>e : b_of \<lbrace> z3 : B_bitvec  | [ [ z3 ]\<^sup>v ]\<^sup>c\<^sup>e  ==  [ [ v1 ]\<^sup>c\<^sup>e @@ [ v2 ]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e  \<rbrace>
 8. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> v1 z1 c1 v2 z2 z3 \<tau>. \<lbrakk>atom z3 \<sharp> \<tau>; atom z1 \<sharp> \<tau>; atom z2 \<sharp> \<tau>;  \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v1 \<Rightarrow> \<lbrace> z1 : B_bitvec  | c1 \<rbrace>; \<Theta> ; \<B> ; \<Gamma>  \<turnstile> v2 \<Leftarrow> \<lbrace> z2 : B_int  | [ leq [ [ L_num 0 ]\<^sup>v ]\<^sup>c\<^sup>e [ [ z2 ]\<^sup>v ]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e  ==  [ [ L_true ]\<^sup>v ]\<^sup>c\<^sup>e   AND  [ leq [ [ z2 ]\<^sup>v ]\<^sup>c\<^sup>e [| [ v1 ]\<^sup>c\<^sup>e |]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e  ==  [ [ L_true ]\<^sup>v ]\<^sup>c\<^sup>e   \<rbrace>; atom z1 \<sharp> [ v1  v2 ]\<^sup>e; atom z1 \<sharp> \<Gamma>; atom z2 \<sharp> [ v1  v2 ]\<^sup>e; atom z2 \<sharp> \<Gamma>; atom z3 \<sharp> [ v1  v2 ]\<^sup>e; atom z3 \<sharp> \<Gamma>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [ v1  v2 ]\<^sup>e : b_of \<lbrace> z3 : [ B_bitvec , B_bitvec ]\<^sup>b  | [ v1 ]\<^sup>c\<^sup>e  ==  [ [#1[ [ z3 ]\<^sup>v ]\<^sup>c\<^sup>e]\<^sup>c\<^sup>e @@ [#2[ [ z3 ]\<^sup>v ]\<^sup>c\<^sup>e]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e   AND  [| [#1[ [ z3 ]\<^sup>v ]\<^sup>c\<^sup>e]\<^sup>c\<^sup>e |]\<^sup>c\<^sup>e  ==  [ v2 ]\<^sup>c\<^sup>e   \<rbrace>
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
 \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [ f  v  ]\<^sup>e : b_of \<tau>'

goal (8 subgoals):
 1. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> f x b c \<tau>' s' v \<tau> \<tau>''. \<lbrakk>atom x \<sharp> \<tau>'';  \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ; Some (AF_fundef f (AF_fun_typ_none (AF_fun_typ x b c \<tau>' s'))) = lookup_fun \<Phi> f; \<Theta> ; \<B> ; \<Gamma>  \<turnstile> v \<Leftarrow> \<lbrace> x : b  | c \<rbrace>; atom x \<sharp> \<Theta>; atom x \<sharp> \<Phi>; atom x \<sharp> \<B>; atom x \<sharp> \<Gamma>; atom x \<sharp> \<Delta>; atom x \<sharp> v; atom x \<sharp> \<tau>; \<tau>'[x::=v]\<^sub>v = \<tau>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [ f  v  ]\<^sup>e : b_of \<tau>
 2. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> b' f bv x b c \<tau>' s' v \<tau> \<tau>''. \<lbrakk>atom bv \<sharp> \<tau>'';  \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B>  \<turnstile>\<^sub>w\<^sub>f b' ; Some (AF_fundef f (AF_fun_typ_some bv (AF_fun_typ x b c \<tau>' s'))) = lookup_fun \<Phi> f; \<Theta> ; \<B> ; \<Gamma>  \<turnstile> v \<Leftarrow> \<lbrace> x : b[bv::=b']\<^sub>b  | c[bv::=b']\<^sub>b \<rbrace>; atom x \<sharp> \<Gamma>; \<tau>'[bv::=b']\<^sub>b[x::=v]\<^sub>v = \<tau>; atom bv \<sharp> \<Theta>; atom bv \<sharp> \<Phi>; atom bv \<sharp> \<B>; atom bv \<sharp> \<Gamma>; atom bv \<sharp> \<Delta>; atom bv \<sharp> b'; atom bv \<sharp> v; atom bv \<sharp> \<tau>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [f [ b' ]  v ]\<^sup>e : b_of \<tau>
 3. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> v z' b1 b2 c z \<tau>. \<lbrakk> \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v \<Rightarrow> \<lbrace> z' : [ b1 , b2 ]\<^sup>b  | c \<rbrace>; atom z \<sharp> [#1v ]\<^sup>e; atom z \<sharp> \<Gamma>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [#1v ]\<^sup>e : b_of \<lbrace> z : b1  | [ [ z ]\<^sup>v ]\<^sup>c\<^sup>e  ==  [#1[ v ]\<^sup>c\<^sup>e]\<^sup>c\<^sup>e  \<rbrace>
 4. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> v z' b1 b2 c z \<tau>. \<lbrakk> \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v \<Rightarrow> \<lbrace> z' : [ b1 , b2 ]\<^sup>b  | c \<rbrace>; atom z \<sharp> [#2v ]\<^sup>e; atom z \<sharp> \<Gamma>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [#2v ]\<^sup>e : b_of \<lbrace> z : b2  | [ [ z ]\<^sup>v ]\<^sup>c\<^sup>e  ==  [#2[ v ]\<^sup>c\<^sup>e]\<^sup>c\<^sup>e  \<rbrace>
 5. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> v z' c z \<tau>. \<lbrakk> \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v \<Rightarrow> \<lbrace> z' : B_bitvec  | c \<rbrace>; atom z \<sharp> [| v |]\<^sup>e; atom z \<sharp> \<Gamma>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [| v |]\<^sup>e : b_of \<lbrace> z : B_int  | [ [ z ]\<^sup>v ]\<^sup>c\<^sup>e  ==  [| [ v ]\<^sup>c\<^sup>e |]\<^sup>c\<^sup>e  \<rbrace>
 6. \<And>\<Theta> \<B> \<Gamma> \<Phi> \<Delta> u \<tau> \<tau>'. \<lbrakk> \<Theta> ; \<B>  \<turnstile>\<^sub>w\<^sub>f \<Gamma> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ; (u, \<tau>) \<in> setD \<Delta>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [ u ]\<^sup>e : b_of \<tau>
 7. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> v1 z1 c1 v2 z2 c2 z3 \<tau>. \<lbrakk> \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v1 \<Rightarrow> \<lbrace> z1 : B_bitvec  | c1 \<rbrace>;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v2 \<Rightarrow> \<lbrace> z2 : B_bitvec  | c2 \<rbrace>; atom z3 \<sharp> [ v1 @@ v2 ]\<^sup>e; atom z3 \<sharp> \<Gamma>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [ v1 @@ v2 ]\<^sup>e : b_of \<lbrace> z3 : B_bitvec  | [ [ z3 ]\<^sup>v ]\<^sup>c\<^sup>e  ==  [ [ v1 ]\<^sup>c\<^sup>e @@ [ v2 ]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e  \<rbrace>
 8. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> v1 z1 c1 v2 z2 z3 \<tau>. \<lbrakk>atom z3 \<sharp> \<tau>; atom z1 \<sharp> \<tau>; atom z2 \<sharp> \<tau>;  \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v1 \<Rightarrow> \<lbrace> z1 : B_bitvec  | c1 \<rbrace>; \<Theta> ; \<B> ; \<Gamma>  \<turnstile> v2 \<Leftarrow> \<lbrace> z2 : B_int  | [ leq [ [ L_num 0 ]\<^sup>v ]\<^sup>c\<^sup>e [ [ z2 ]\<^sup>v ]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e  ==  [ [ L_true ]\<^sup>v ]\<^sup>c\<^sup>e   AND  [ leq [ [ z2 ]\<^sup>v ]\<^sup>c\<^sup>e [| [ v1 ]\<^sup>c\<^sup>e |]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e  ==  [ [ L_true ]\<^sup>v ]\<^sup>c\<^sup>e   \<rbrace>; atom z1 \<sharp> [ v1  v2 ]\<^sup>e; atom z1 \<sharp> \<Gamma>; atom z2 \<sharp> [ v1  v2 ]\<^sup>e; atom z2 \<sharp> \<Gamma>; atom z3 \<sharp> [ v1  v2 ]\<^sup>e; atom z3 \<sharp> \<Gamma>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [ v1  v2 ]\<^sup>e : b_of \<lbrace> z3 : [ B_bitvec , B_bitvec ]\<^sup>b  | [ v1 ]\<^sup>c\<^sup>e  ==  [ [#1[ [ z3 ]\<^sup>v ]\<^sup>c\<^sup>e]\<^sup>c\<^sup>e @@ [#2[ [ z3 ]\<^sup>v ]\<^sup>c\<^sup>e]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e   AND  [| [#1[ [ z3 ]\<^sup>v ]\<^sup>c\<^sup>e]\<^sup>c\<^sup>e |]\<^sup>c\<^sup>e  ==  [ v2 ]\<^sup>c\<^sup>e   \<rbrace>
[PROOF STEP]
have "b_of \<tau>' = b_of (\<tau>'[x::=v]\<^sub>v)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. b_of \<tau>' = b_of \<tau>'[x::=v]\<^sub>v
[PROOF STEP]
using subst_tbase_eq subst_v_\<tau>_def
[PROOF STATE]
proof (prove)
using this:
b_of ?\<tau> = b_of ?\<tau>[?x::=?v]\<^sub>\<tau>\<^sub>v
subst_v = subst_tv_abbrev

goal (1 subgoal):
 1. b_of \<tau>' = b_of \<tau>'[x::=v]\<^sub>v
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
b_of \<tau>' = b_of \<tau>'[x::=v]\<^sub>v

goal (8 subgoals):
 1. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> f x b c \<tau>' s' v \<tau> \<tau>''. \<lbrakk>atom x \<sharp> \<tau>'';  \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ; Some (AF_fundef f (AF_fun_typ_none (AF_fun_typ x b c \<tau>' s'))) = lookup_fun \<Phi> f; \<Theta> ; \<B> ; \<Gamma>  \<turnstile> v \<Leftarrow> \<lbrace> x : b  | c \<rbrace>; atom x \<sharp> \<Theta>; atom x \<sharp> \<Phi>; atom x \<sharp> \<B>; atom x \<sharp> \<Gamma>; atom x \<sharp> \<Delta>; atom x \<sharp> v; atom x \<sharp> \<tau>; \<tau>'[x::=v]\<^sub>v = \<tau>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [ f  v  ]\<^sup>e : b_of \<tau>
 2. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> b' f bv x b c \<tau>' s' v \<tau> \<tau>''. \<lbrakk>atom bv \<sharp> \<tau>'';  \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B>  \<turnstile>\<^sub>w\<^sub>f b' ; Some (AF_fundef f (AF_fun_typ_some bv (AF_fun_typ x b c \<tau>' s'))) = lookup_fun \<Phi> f; \<Theta> ; \<B> ; \<Gamma>  \<turnstile> v \<Leftarrow> \<lbrace> x : b[bv::=b']\<^sub>b  | c[bv::=b']\<^sub>b \<rbrace>; atom x \<sharp> \<Gamma>; \<tau>'[bv::=b']\<^sub>b[x::=v]\<^sub>v = \<tau>; atom bv \<sharp> \<Theta>; atom bv \<sharp> \<Phi>; atom bv \<sharp> \<B>; atom bv \<sharp> \<Gamma>; atom bv \<sharp> \<Delta>; atom bv \<sharp> b'; atom bv \<sharp> v; atom bv \<sharp> \<tau>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [f [ b' ]  v ]\<^sup>e : b_of \<tau>
 3. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> v z' b1 b2 c z \<tau>. \<lbrakk> \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v \<Rightarrow> \<lbrace> z' : [ b1 , b2 ]\<^sup>b  | c \<rbrace>; atom z \<sharp> [#1v ]\<^sup>e; atom z \<sharp> \<Gamma>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [#1v ]\<^sup>e : b_of \<lbrace> z : b1  | [ [ z ]\<^sup>v ]\<^sup>c\<^sup>e  ==  [#1[ v ]\<^sup>c\<^sup>e]\<^sup>c\<^sup>e  \<rbrace>
 4. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> v z' b1 b2 c z \<tau>. \<lbrakk> \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v \<Rightarrow> \<lbrace> z' : [ b1 , b2 ]\<^sup>b  | c \<rbrace>; atom z \<sharp> [#2v ]\<^sup>e; atom z \<sharp> \<Gamma>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [#2v ]\<^sup>e : b_of \<lbrace> z : b2  | [ [ z ]\<^sup>v ]\<^sup>c\<^sup>e  ==  [#2[ v ]\<^sup>c\<^sup>e]\<^sup>c\<^sup>e  \<rbrace>
 5. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> v z' c z \<tau>. \<lbrakk> \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v \<Rightarrow> \<lbrace> z' : B_bitvec  | c \<rbrace>; atom z \<sharp> [| v |]\<^sup>e; atom z \<sharp> \<Gamma>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [| v |]\<^sup>e : b_of \<lbrace> z : B_int  | [ [ z ]\<^sup>v ]\<^sup>c\<^sup>e  ==  [| [ v ]\<^sup>c\<^sup>e |]\<^sup>c\<^sup>e  \<rbrace>
 6. \<And>\<Theta> \<B> \<Gamma> \<Phi> \<Delta> u \<tau> \<tau>'. \<lbrakk> \<Theta> ; \<B>  \<turnstile>\<^sub>w\<^sub>f \<Gamma> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ; (u, \<tau>) \<in> setD \<Delta>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [ u ]\<^sup>e : b_of \<tau>
 7. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> v1 z1 c1 v2 z2 c2 z3 \<tau>. \<lbrakk> \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v1 \<Rightarrow> \<lbrace> z1 : B_bitvec  | c1 \<rbrace>;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v2 \<Rightarrow> \<lbrace> z2 : B_bitvec  | c2 \<rbrace>; atom z3 \<sharp> [ v1 @@ v2 ]\<^sup>e; atom z3 \<sharp> \<Gamma>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [ v1 @@ v2 ]\<^sup>e : b_of \<lbrace> z3 : B_bitvec  | [ [ z3 ]\<^sup>v ]\<^sup>c\<^sup>e  ==  [ [ v1 ]\<^sup>c\<^sup>e @@ [ v2 ]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e  \<rbrace>
 8. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> v1 z1 c1 v2 z2 z3 \<tau>. \<lbrakk>atom z3 \<sharp> \<tau>; atom z1 \<sharp> \<tau>; atom z2 \<sharp> \<tau>;  \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v1 \<Rightarrow> \<lbrace> z1 : B_bitvec  | c1 \<rbrace>; \<Theta> ; \<B> ; \<Gamma>  \<turnstile> v2 \<Leftarrow> \<lbrace> z2 : B_int  | [ leq [ [ L_num 0 ]\<^sup>v ]\<^sup>c\<^sup>e [ [ z2 ]\<^sup>v ]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e  ==  [ [ L_true ]\<^sup>v ]\<^sup>c\<^sup>e   AND  [ leq [ [ z2 ]\<^sup>v ]\<^sup>c\<^sup>e [| [ v1 ]\<^sup>c\<^sup>e |]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e  ==  [ [ L_true ]\<^sup>v ]\<^sup>c\<^sup>e   \<rbrace>; atom z1 \<sharp> [ v1  v2 ]\<^sup>e; atom z1 \<sharp> \<Gamma>; atom z2 \<sharp> [ v1  v2 ]\<^sup>e; atom z2 \<sharp> \<Gamma>; atom z3 \<sharp> [ v1  v2 ]\<^sup>e; atom z3 \<sharp> \<Gamma>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [ v1  v2 ]\<^sup>e : b_of \<lbrace> z3 : [ B_bitvec , B_bitvec ]\<^sup>b  | [ v1 ]\<^sup>c\<^sup>e  ==  [ [#1[ [ z3 ]\<^sup>v ]\<^sup>c\<^sup>e]\<^sup>c\<^sup>e @@ [#2[ [ z3 ]\<^sup>v ]\<^sup>c\<^sup>e]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e   AND  [| [#1[ [ z3 ]\<^sup>v ]\<^sup>c\<^sup>e]\<^sup>c\<^sup>e |]\<^sup>c\<^sup>e  ==  [ v2 ]\<^sup>c\<^sup>e   \<rbrace>
[PROOF STEP]
ultimately
[PROOF STATE]
proof (chain)
picking this:
 \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [ f  v  ]\<^sup>e : b_of \<tau>'
b_of \<tau>' = b_of \<tau>'[x::=v]\<^sub>v
[PROOF STEP]
show ?case
[PROOF STATE]
proof (prove)
using this:
 \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [ f  v  ]\<^sup>e : b_of \<tau>'
b_of \<tau>' = b_of \<tau>'[x::=v]\<^sub>v

goal (1 subgoal):
 1.  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [ f  v  ]\<^sup>e : b_of \<tau>''
[PROOF STEP]
using infer_e_appI subst_v_c_def subst_b_\<tau>_def
[PROOF STATE]
proof (prove)
using this:
 \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [ f  v  ]\<^sup>e : b_of \<tau>'
b_of \<tau>' = b_of \<tau>'[x::=v]\<^sub>v
atom x \<sharp> \<tau>
 \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta>
 \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi>
Some (AF_fundef f (AF_fun_typ_none (AF_fun_typ x b c \<tau>' s'))) = lookup_fun \<Phi> f
\<Theta> ; \<B> ; \<Gamma>  \<turnstile> v \<Leftarrow> \<lbrace> x : b  | c \<rbrace>
atom x \<sharp> \<Theta>
atom x \<sharp> \<Phi>
atom x \<sharp> \<B>
atom x \<sharp> \<Gamma>
atom x \<sharp> \<Delta>
atom x \<sharp> v
atom x \<sharp> \<tau>''
\<tau>'[x::=v]\<^sub>v = \<tau>''
subst_v = subst_cv_abbrev
subst_b = subst_tb_abbrev

goal (1 subgoal):
 1.  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [ f  v  ]\<^sup>e : b_of \<tau>''
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
 \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [ f  v  ]\<^sup>e : b_of \<tau>''

goal (7 subgoals):
 1. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> b' f bv x b c \<tau>' s' v \<tau> \<tau>''. \<lbrakk>atom bv \<sharp> \<tau>'';  \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B>  \<turnstile>\<^sub>w\<^sub>f b' ; Some (AF_fundef f (AF_fun_typ_some bv (AF_fun_typ x b c \<tau>' s'))) = lookup_fun \<Phi> f; \<Theta> ; \<B> ; \<Gamma>  \<turnstile> v \<Leftarrow> \<lbrace> x : b[bv::=b']\<^sub>b  | c[bv::=b']\<^sub>b \<rbrace>; atom x \<sharp> \<Gamma>; \<tau>'[bv::=b']\<^sub>b[x::=v]\<^sub>v = \<tau>; atom bv \<sharp> \<Theta>; atom bv \<sharp> \<Phi>; atom bv \<sharp> \<B>; atom bv \<sharp> \<Gamma>; atom bv \<sharp> \<Delta>; atom bv \<sharp> b'; atom bv \<sharp> v; atom bv \<sharp> \<tau>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [f [ b' ]  v ]\<^sup>e : b_of \<tau>
 2. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> v z' b1 b2 c z \<tau>. \<lbrakk> \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v \<Rightarrow> \<lbrace> z' : [ b1 , b2 ]\<^sup>b  | c \<rbrace>; atom z \<sharp> [#1v ]\<^sup>e; atom z \<sharp> \<Gamma>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [#1v ]\<^sup>e : b_of \<lbrace> z : b1  | [ [ z ]\<^sup>v ]\<^sup>c\<^sup>e  ==  [#1[ v ]\<^sup>c\<^sup>e]\<^sup>c\<^sup>e  \<rbrace>
 3. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> v z' b1 b2 c z \<tau>. \<lbrakk> \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v \<Rightarrow> \<lbrace> z' : [ b1 , b2 ]\<^sup>b  | c \<rbrace>; atom z \<sharp> [#2v ]\<^sup>e; atom z \<sharp> \<Gamma>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [#2v ]\<^sup>e : b_of \<lbrace> z : b2  | [ [ z ]\<^sup>v ]\<^sup>c\<^sup>e  ==  [#2[ v ]\<^sup>c\<^sup>e]\<^sup>c\<^sup>e  \<rbrace>
 4. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> v z' c z \<tau>. \<lbrakk> \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v \<Rightarrow> \<lbrace> z' : B_bitvec  | c \<rbrace>; atom z \<sharp> [| v |]\<^sup>e; atom z \<sharp> \<Gamma>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [| v |]\<^sup>e : b_of \<lbrace> z : B_int  | [ [ z ]\<^sup>v ]\<^sup>c\<^sup>e  ==  [| [ v ]\<^sup>c\<^sup>e |]\<^sup>c\<^sup>e  \<rbrace>
 5. \<And>\<Theta> \<B> \<Gamma> \<Phi> \<Delta> u \<tau> \<tau>'. \<lbrakk> \<Theta> ; \<B>  \<turnstile>\<^sub>w\<^sub>f \<Gamma> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ; (u, \<tau>) \<in> setD \<Delta>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [ u ]\<^sup>e : b_of \<tau>
 6. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> v1 z1 c1 v2 z2 c2 z3 \<tau>. \<lbrakk> \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v1 \<Rightarrow> \<lbrace> z1 : B_bitvec  | c1 \<rbrace>;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v2 \<Rightarrow> \<lbrace> z2 : B_bitvec  | c2 \<rbrace>; atom z3 \<sharp> [ v1 @@ v2 ]\<^sup>e; atom z3 \<sharp> \<Gamma>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [ v1 @@ v2 ]\<^sup>e : b_of \<lbrace> z3 : B_bitvec  | [ [ z3 ]\<^sup>v ]\<^sup>c\<^sup>e  ==  [ [ v1 ]\<^sup>c\<^sup>e @@ [ v2 ]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e  \<rbrace>
 7. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> v1 z1 c1 v2 z2 z3 \<tau>. \<lbrakk>atom z3 \<sharp> \<tau>; atom z1 \<sharp> \<tau>; atom z2 \<sharp> \<tau>;  \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v1 \<Rightarrow> \<lbrace> z1 : B_bitvec  | c1 \<rbrace>; \<Theta> ; \<B> ; \<Gamma>  \<turnstile> v2 \<Leftarrow> \<lbrace> z2 : B_int  | [ leq [ [ L_num 0 ]\<^sup>v ]\<^sup>c\<^sup>e [ [ z2 ]\<^sup>v ]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e  ==  [ [ L_true ]\<^sup>v ]\<^sup>c\<^sup>e   AND  [ leq [ [ z2 ]\<^sup>v ]\<^sup>c\<^sup>e [| [ v1 ]\<^sup>c\<^sup>e |]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e  ==  [ [ L_true ]\<^sup>v ]\<^sup>c\<^sup>e   \<rbrace>; atom z1 \<sharp> [ v1  v2 ]\<^sup>e; atom z1 \<sharp> \<Gamma>; atom z2 \<sharp> [ v1  v2 ]\<^sup>e; atom z2 \<sharp> \<Gamma>; atom z3 \<sharp> [ v1  v2 ]\<^sup>e; atom z3 \<sharp> \<Gamma>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [ v1  v2 ]\<^sup>e : b_of \<lbrace> z3 : [ B_bitvec , B_bitvec ]\<^sup>b  | [ v1 ]\<^sup>c\<^sup>e  ==  [ [#1[ [ z3 ]\<^sup>v ]\<^sup>c\<^sup>e]\<^sup>c\<^sup>e @@ [#2[ [ z3 ]\<^sup>v ]\<^sup>c\<^sup>e]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e   AND  [| [#1[ [ z3 ]\<^sup>v ]\<^sup>c\<^sup>e]\<^sup>c\<^sup>e |]\<^sup>c\<^sup>e  ==  [ v2 ]\<^sup>c\<^sup>e   \<rbrace>
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (7 subgoals):
 1. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> b' f bv x b c \<tau>' s' v \<tau> \<tau>''. \<lbrakk>atom bv \<sharp> \<tau>'';  \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B>  \<turnstile>\<^sub>w\<^sub>f b' ; Some (AF_fundef f (AF_fun_typ_some bv (AF_fun_typ x b c \<tau>' s'))) = lookup_fun \<Phi> f; \<Theta> ; \<B> ; \<Gamma>  \<turnstile> v \<Leftarrow> \<lbrace> x : b[bv::=b']\<^sub>b  | c[bv::=b']\<^sub>b \<rbrace>; atom x \<sharp> \<Gamma>; \<tau>'[bv::=b']\<^sub>b[x::=v]\<^sub>v = \<tau>; atom bv \<sharp> \<Theta>; atom bv \<sharp> \<Phi>; atom bv \<sharp> \<B>; atom bv \<sharp> \<Gamma>; atom bv \<sharp> \<Delta>; atom bv \<sharp> b'; atom bv \<sharp> v; atom bv \<sharp> \<tau>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [f [ b' ]  v ]\<^sup>e : b_of \<tau>
 2. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> v z' b1 b2 c z \<tau>. \<lbrakk> \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v \<Rightarrow> \<lbrace> z' : [ b1 , b2 ]\<^sup>b  | c \<rbrace>; atom z \<sharp> [#1v ]\<^sup>e; atom z \<sharp> \<Gamma>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [#1v ]\<^sup>e : b_of \<lbrace> z : b1  | [ [ z ]\<^sup>v ]\<^sup>c\<^sup>e  ==  [#1[ v ]\<^sup>c\<^sup>e]\<^sup>c\<^sup>e  \<rbrace>
 3. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> v z' b1 b2 c z \<tau>. \<lbrakk> \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v \<Rightarrow> \<lbrace> z' : [ b1 , b2 ]\<^sup>b  | c \<rbrace>; atom z \<sharp> [#2v ]\<^sup>e; atom z \<sharp> \<Gamma>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [#2v ]\<^sup>e : b_of \<lbrace> z : b2  | [ [ z ]\<^sup>v ]\<^sup>c\<^sup>e  ==  [#2[ v ]\<^sup>c\<^sup>e]\<^sup>c\<^sup>e  \<rbrace>
 4. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> v z' c z \<tau>. \<lbrakk> \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v \<Rightarrow> \<lbrace> z' : B_bitvec  | c \<rbrace>; atom z \<sharp> [| v |]\<^sup>e; atom z \<sharp> \<Gamma>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [| v |]\<^sup>e : b_of \<lbrace> z : B_int  | [ [ z ]\<^sup>v ]\<^sup>c\<^sup>e  ==  [| [ v ]\<^sup>c\<^sup>e |]\<^sup>c\<^sup>e  \<rbrace>
 5. \<And>\<Theta> \<B> \<Gamma> \<Phi> \<Delta> u \<tau> \<tau>'. \<lbrakk> \<Theta> ; \<B>  \<turnstile>\<^sub>w\<^sub>f \<Gamma> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ; (u, \<tau>) \<in> setD \<Delta>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [ u ]\<^sup>e : b_of \<tau>
 6. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> v1 z1 c1 v2 z2 c2 z3 \<tau>. \<lbrakk> \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v1 \<Rightarrow> \<lbrace> z1 : B_bitvec  | c1 \<rbrace>;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v2 \<Rightarrow> \<lbrace> z2 : B_bitvec  | c2 \<rbrace>; atom z3 \<sharp> [ v1 @@ v2 ]\<^sup>e; atom z3 \<sharp> \<Gamma>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [ v1 @@ v2 ]\<^sup>e : b_of \<lbrace> z3 : B_bitvec  | [ [ z3 ]\<^sup>v ]\<^sup>c\<^sup>e  ==  [ [ v1 ]\<^sup>c\<^sup>e @@ [ v2 ]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e  \<rbrace>
 7. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> v1 z1 c1 v2 z2 z3 \<tau>. \<lbrakk>atom z3 \<sharp> \<tau>; atom z1 \<sharp> \<tau>; atom z2 \<sharp> \<tau>;  \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v1 \<Rightarrow> \<lbrace> z1 : B_bitvec  | c1 \<rbrace>; \<Theta> ; \<B> ; \<Gamma>  \<turnstile> v2 \<Leftarrow> \<lbrace> z2 : B_int  | [ leq [ [ L_num 0 ]\<^sup>v ]\<^sup>c\<^sup>e [ [ z2 ]\<^sup>v ]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e  ==  [ [ L_true ]\<^sup>v ]\<^sup>c\<^sup>e   AND  [ leq [ [ z2 ]\<^sup>v ]\<^sup>c\<^sup>e [| [ v1 ]\<^sup>c\<^sup>e |]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e  ==  [ [ L_true ]\<^sup>v ]\<^sup>c\<^sup>e   \<rbrace>; atom z1 \<sharp> [ v1  v2 ]\<^sup>e; atom z1 \<sharp> \<Gamma>; atom z2 \<sharp> [ v1  v2 ]\<^sup>e; atom z2 \<sharp> \<Gamma>; atom z3 \<sharp> [ v1  v2 ]\<^sup>e; atom z3 \<sharp> \<Gamma>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [ v1  v2 ]\<^sup>e : b_of \<lbrace> z3 : [ B_bitvec , B_bitvec ]\<^sup>b  | [ v1 ]\<^sup>c\<^sup>e  ==  [ [#1[ [ z3 ]\<^sup>v ]\<^sup>c\<^sup>e]\<^sup>c\<^sup>e @@ [#2[ [ z3 ]\<^sup>v ]\<^sup>c\<^sup>e]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e   AND  [| [#1[ [ z3 ]\<^sup>v ]\<^sup>c\<^sup>e]\<^sup>c\<^sup>e |]\<^sup>c\<^sup>e  ==  [ v2 ]\<^sup>c\<^sup>e   \<rbrace>
[PROOF STEP]
case (infer_e_appPI \<Theta> \<B> \<Gamma> \<Delta> \<Phi> b' f bv x b c \<tau>'' s' v \<tau>')
[PROOF STATE]
proof (state)
this:
atom bv \<sharp> \<tau>
 \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta>
 \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi>
 \<Theta> ; \<B>  \<turnstile>\<^sub>w\<^sub>f b'
Some (AF_fundef f (AF_fun_typ_some bv (AF_fun_typ x b c \<tau>'' s'))) = lookup_fun \<Phi> f
\<Theta> ; \<B> ; \<Gamma>  \<turnstile> v \<Leftarrow> \<lbrace> x : b[bv::=b']\<^sub>b  | c[bv::=b']\<^sub>b \<rbrace>
atom x \<sharp> \<Gamma>
\<tau>''[bv::=b']\<^sub>b[x::=v]\<^sub>v = \<tau>'
atom bv \<sharp> \<Theta>
atom bv \<sharp> \<Phi>
atom bv \<sharp> \<B>
atom bv \<sharp> \<Gamma>
atom bv \<sharp> \<Delta>
atom bv \<sharp> b'
atom bv \<sharp> v
atom bv \<sharp> \<tau>'

goal (7 subgoals):
 1. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> b' f bv x b c \<tau>' s' v \<tau> \<tau>''. \<lbrakk>atom bv \<sharp> \<tau>'';  \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B>  \<turnstile>\<^sub>w\<^sub>f b' ; Some (AF_fundef f (AF_fun_typ_some bv (AF_fun_typ x b c \<tau>' s'))) = lookup_fun \<Phi> f; \<Theta> ; \<B> ; \<Gamma>  \<turnstile> v \<Leftarrow> \<lbrace> x : b[bv::=b']\<^sub>b  | c[bv::=b']\<^sub>b \<rbrace>; atom x \<sharp> \<Gamma>; \<tau>'[bv::=b']\<^sub>b[x::=v]\<^sub>v = \<tau>; atom bv \<sharp> \<Theta>; atom bv \<sharp> \<Phi>; atom bv \<sharp> \<B>; atom bv \<sharp> \<Gamma>; atom bv \<sharp> \<Delta>; atom bv \<sharp> b'; atom bv \<sharp> v; atom bv \<sharp> \<tau>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [f [ b' ]  v ]\<^sup>e : b_of \<tau>
 2. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> v z' b1 b2 c z \<tau>. \<lbrakk> \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v \<Rightarrow> \<lbrace> z' : [ b1 , b2 ]\<^sup>b  | c \<rbrace>; atom z \<sharp> [#1v ]\<^sup>e; atom z \<sharp> \<Gamma>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [#1v ]\<^sup>e : b_of \<lbrace> z : b1  | [ [ z ]\<^sup>v ]\<^sup>c\<^sup>e  ==  [#1[ v ]\<^sup>c\<^sup>e]\<^sup>c\<^sup>e  \<rbrace>
 3. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> v z' b1 b2 c z \<tau>. \<lbrakk> \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v \<Rightarrow> \<lbrace> z' : [ b1 , b2 ]\<^sup>b  | c \<rbrace>; atom z \<sharp> [#2v ]\<^sup>e; atom z \<sharp> \<Gamma>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [#2v ]\<^sup>e : b_of \<lbrace> z : b2  | [ [ z ]\<^sup>v ]\<^sup>c\<^sup>e  ==  [#2[ v ]\<^sup>c\<^sup>e]\<^sup>c\<^sup>e  \<rbrace>
 4. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> v z' c z \<tau>. \<lbrakk> \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v \<Rightarrow> \<lbrace> z' : B_bitvec  | c \<rbrace>; atom z \<sharp> [| v |]\<^sup>e; atom z \<sharp> \<Gamma>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [| v |]\<^sup>e : b_of \<lbrace> z : B_int  | [ [ z ]\<^sup>v ]\<^sup>c\<^sup>e  ==  [| [ v ]\<^sup>c\<^sup>e |]\<^sup>c\<^sup>e  \<rbrace>
 5. \<And>\<Theta> \<B> \<Gamma> \<Phi> \<Delta> u \<tau> \<tau>'. \<lbrakk> \<Theta> ; \<B>  \<turnstile>\<^sub>w\<^sub>f \<Gamma> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ; (u, \<tau>) \<in> setD \<Delta>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [ u ]\<^sup>e : b_of \<tau>
 6. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> v1 z1 c1 v2 z2 c2 z3 \<tau>. \<lbrakk> \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v1 \<Rightarrow> \<lbrace> z1 : B_bitvec  | c1 \<rbrace>;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v2 \<Rightarrow> \<lbrace> z2 : B_bitvec  | c2 \<rbrace>; atom z3 \<sharp> [ v1 @@ v2 ]\<^sup>e; atom z3 \<sharp> \<Gamma>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [ v1 @@ v2 ]\<^sup>e : b_of \<lbrace> z3 : B_bitvec  | [ [ z3 ]\<^sup>v ]\<^sup>c\<^sup>e  ==  [ [ v1 ]\<^sup>c\<^sup>e @@ [ v2 ]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e  \<rbrace>
 7. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> v1 z1 c1 v2 z2 z3 \<tau>. \<lbrakk>atom z3 \<sharp> \<tau>; atom z1 \<sharp> \<tau>; atom z2 \<sharp> \<tau>;  \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v1 \<Rightarrow> \<lbrace> z1 : B_bitvec  | c1 \<rbrace>; \<Theta> ; \<B> ; \<Gamma>  \<turnstile> v2 \<Leftarrow> \<lbrace> z2 : B_int  | [ leq [ [ L_num 0 ]\<^sup>v ]\<^sup>c\<^sup>e [ [ z2 ]\<^sup>v ]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e  ==  [ [ L_true ]\<^sup>v ]\<^sup>c\<^sup>e   AND  [ leq [ [ z2 ]\<^sup>v ]\<^sup>c\<^sup>e [| [ v1 ]\<^sup>c\<^sup>e |]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e  ==  [ [ L_true ]\<^sup>v ]\<^sup>c\<^sup>e   \<rbrace>; atom z1 \<sharp> [ v1  v2 ]\<^sup>e; atom z1 \<sharp> \<Gamma>; atom z2 \<sharp> [ v1  v2 ]\<^sup>e; atom z2 \<sharp> \<Gamma>; atom z3 \<sharp> [ v1  v2 ]\<^sup>e; atom z3 \<sharp> \<Gamma>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [ v1  v2 ]\<^sup>e : b_of \<lbrace> z3 : [ B_bitvec , B_bitvec ]\<^sup>b  | [ v1 ]\<^sup>c\<^sup>e  ==  [ [#1[ [ z3 ]\<^sup>v ]\<^sup>c\<^sup>e]\<^sup>c\<^sup>e @@ [#2[ [ z3 ]\<^sup>v ]\<^sup>c\<^sup>e]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e   AND  [| [#1[ [ z3 ]\<^sup>v ]\<^sup>c\<^sup>e]\<^sup>c\<^sup>e |]\<^sup>c\<^sup>e  ==  [ v2 ]\<^sup>c\<^sup>e   \<rbrace>
[PROOF STEP]
have "\<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f AE_appP f b' v : (b_of \<tau>'')[bv::=b']\<^sub>b "
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1.  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [f [ b' ]  v ]\<^sup>e : (b_of \<tau>'')[bv::=b']\<^sub>b
[PROOF STEP]
proof
[PROOF STATE]
proof (state)
goal (6 subgoals):
 1.  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi>
 2.  \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta>
 3.  \<Theta> ; \<B>  \<turnstile>\<^sub>w\<^sub>f b'
 4. atom bv \<sharp> (\<Phi>, \<Theta>, \<B>, \<Gamma>, \<Delta>, b', v, (b_of \<tau>'')[bv::=b']\<^sub>b)
 5. Some (AF_fundef f (AF_fun_typ_some bv (AF_fun_typ ?x ?b ?c \<tau>'' ?s))) = lookup_fun \<Phi> f
 6.  \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f v : ?b[bv::=b']\<^sub>b
[PROOF STEP]
show \<open> \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> \<close>
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1.  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi>
[PROOF STEP]
using infer_e_appPI
[PROOF STATE]
proof (prove)
using this:
atom bv \<sharp> \<tau>
 \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta>
 \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi>
 \<Theta> ; \<B>  \<turnstile>\<^sub>w\<^sub>f b'
Some (AF_fundef f (AF_fun_typ_some bv (AF_fun_typ x b c \<tau>'' s'))) = lookup_fun \<Phi> f
\<Theta> ; \<B> ; \<Gamma>  \<turnstile> v \<Leftarrow> \<lbrace> x : b[bv::=b']\<^sub>b  | c[bv::=b']\<^sub>b \<rbrace>
atom x \<sharp> \<Gamma>
\<tau>''[bv::=b']\<^sub>b[x::=v]\<^sub>v = \<tau>'
atom bv \<sharp> \<Theta>
atom bv \<sharp> \<Phi>
atom bv \<sharp> \<B>
atom bv \<sharp> \<Gamma>
atom bv \<sharp> \<Delta>
atom bv \<sharp> b'
atom bv \<sharp> v
atom bv \<sharp> \<tau>'

goal (1 subgoal):
 1.  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi>
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
 \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi>

goal (5 subgoals):
 1.  \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta>
 2.  \<Theta> ; \<B>  \<turnstile>\<^sub>w\<^sub>f b'
 3. atom bv \<sharp> (\<Phi>, \<Theta>, \<B>, \<Gamma>, \<Delta>, b', v, (b_of \<tau>'')[bv::=b']\<^sub>b)
 4. Some (AF_fundef f (AF_fun_typ_some bv (AF_fun_typ ?x ?b ?c \<tau>'' ?s))) = lookup_fun \<Phi> f
 5.  \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f v : ?b[bv::=b']\<^sub>b
[PROOF STEP]
show \<open> \<Theta>; \<B>; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> \<close>
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1.  \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta>
[PROOF STEP]
using infer_e_appPI
[PROOF STATE]
proof (prove)
using this:
atom bv \<sharp> \<tau>
 \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta>
 \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi>
 \<Theta> ; \<B>  \<turnstile>\<^sub>w\<^sub>f b'
Some (AF_fundef f (AF_fun_typ_some bv (AF_fun_typ x b c \<tau>'' s'))) = lookup_fun \<Phi> f
\<Theta> ; \<B> ; \<Gamma>  \<turnstile> v \<Leftarrow> \<lbrace> x : b[bv::=b']\<^sub>b  | c[bv::=b']\<^sub>b \<rbrace>
atom x \<sharp> \<Gamma>
\<tau>''[bv::=b']\<^sub>b[x::=v]\<^sub>v = \<tau>'
atom bv \<sharp> \<Theta>
atom bv \<sharp> \<Phi>
atom bv \<sharp> \<B>
atom bv \<sharp> \<Gamma>
atom bv \<sharp> \<Delta>
atom bv \<sharp> b'
atom bv \<sharp> v
atom bv \<sharp> \<tau>'

goal (1 subgoal):
 1.  \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta>
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
 \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta>

goal (4 subgoals):
 1.  \<Theta> ; \<B>  \<turnstile>\<^sub>w\<^sub>f b'
 2. atom bv \<sharp> (\<Phi>, \<Theta>, \<B>, \<Gamma>, \<Delta>, b', v, (b_of \<tau>'')[bv::=b']\<^sub>b)
 3. Some (AF_fundef f (AF_fun_typ_some bv (AF_fun_typ ?x ?b ?c \<tau>'' ?s))) = lookup_fun \<Phi> f
 4.  \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f v : ?b[bv::=b']\<^sub>b
[PROOF STEP]
show \<open>Some (AF_fundef f (AF_fun_typ_some bv (AF_fun_typ x b c \<tau>'' s'))) = lookup_fun \<Phi> f\<close>
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. Some (AF_fundef f (AF_fun_typ_some bv (AF_fun_typ x b c \<tau>'' s'))) = lookup_fun \<Phi> f
[PROOF STEP]
using * infer_e_appPI
[PROOF STATE]
proof (prove)
using this:
atom ?bv2.0 \<sharp> (?bv1.0, ?b1.0, ?c1.0, ?\<tau>1.0, ?s1.0) \<Longrightarrow> AF_fun_typ_some ?bv2.0 (AF_fun_typ ?x1.0 ((?bv1.0 \<leftrightarrow> ?bv2.0) \<bullet> ?b1.0) ((?bv1.0 \<leftrightarrow> ?bv2.0) \<bullet> ?c1.0) ((?bv1.0 \<leftrightarrow> ?bv2.0) \<bullet> ?\<tau>1.0) ((?bv1.0 \<leftrightarrow> ?bv2.0) \<bullet> ?s1.0)) = AF_fun_typ_some ?bv1.0 (AF_fun_typ ?x1.0 ?b1.0 ?c1.0 ?\<tau>1.0 ?s1.0)
atom bv \<sharp> \<tau>
 \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta>
 \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi>
 \<Theta> ; \<B>  \<turnstile>\<^sub>w\<^sub>f b'
Some (AF_fundef f (AF_fun_typ_some bv (AF_fun_typ x b c \<tau>'' s'))) = lookup_fun \<Phi> f
\<Theta> ; \<B> ; \<Gamma>  \<turnstile> v \<Leftarrow> \<lbrace> x : b[bv::=b']\<^sub>b  | c[bv::=b']\<^sub>b \<rbrace>
atom x \<sharp> \<Gamma>
\<tau>''[bv::=b']\<^sub>b[x::=v]\<^sub>v = \<tau>'
atom bv \<sharp> \<Theta>
atom bv \<sharp> \<Phi>
atom bv \<sharp> \<B>
atom bv \<sharp> \<Gamma>
atom bv \<sharp> \<Delta>
atom bv \<sharp> b'
atom bv \<sharp> v
atom bv \<sharp> \<tau>'

goal (1 subgoal):
 1. Some (AF_fundef f (AF_fun_typ_some bv (AF_fun_typ x b c \<tau>'' s'))) = lookup_fun \<Phi> f
[PROOF STEP]
by metis
[PROOF STATE]
proof (state)
this:
Some (AF_fundef f (AF_fun_typ_some bv (AF_fun_typ x b c \<tau>'' s'))) = lookup_fun \<Phi> f

goal (3 subgoals):
 1.  \<Theta> ; \<B>  \<turnstile>\<^sub>w\<^sub>f b'
 2. atom bv \<sharp> (\<Phi>, \<Theta>, \<B>, \<Gamma>, \<Delta>, b', v, (b_of \<tau>'')[bv::=b']\<^sub>b)
 3.  \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f v : b[bv::=b']\<^sub>b
[PROOF STEP]
show "\<Theta> ; \<B>  \<turnstile>\<^sub>w\<^sub>f b'"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1.  \<Theta> ; \<B>  \<turnstile>\<^sub>w\<^sub>f b'
[PROOF STEP]
using infer_e_appPI
[PROOF STATE]
proof (prove)
using this:
atom bv \<sharp> \<tau>
 \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta>
 \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi>
 \<Theta> ; \<B>  \<turnstile>\<^sub>w\<^sub>f b'
Some (AF_fundef f (AF_fun_typ_some bv (AF_fun_typ x b c \<tau>'' s'))) = lookup_fun \<Phi> f
\<Theta> ; \<B> ; \<Gamma>  \<turnstile> v \<Leftarrow> \<lbrace> x : b[bv::=b']\<^sub>b  | c[bv::=b']\<^sub>b \<rbrace>
atom x \<sharp> \<Gamma>
\<tau>''[bv::=b']\<^sub>b[x::=v]\<^sub>v = \<tau>'
atom bv \<sharp> \<Theta>
atom bv \<sharp> \<Phi>
atom bv \<sharp> \<B>
atom bv \<sharp> \<Gamma>
atom bv \<sharp> \<Delta>
atom bv \<sharp> b'
atom bv \<sharp> v
atom bv \<sharp> \<tau>'

goal (1 subgoal):
 1.  \<Theta> ; \<B>  \<turnstile>\<^sub>w\<^sub>f b'
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
 \<Theta> ; \<B>  \<turnstile>\<^sub>w\<^sub>f b'

goal (2 subgoals):
 1. atom bv \<sharp> (\<Phi>, \<Theta>, \<B>, \<Gamma>, \<Delta>, b', v, (b_of \<tau>'')[bv::=b']\<^sub>b)
 2.  \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f v : b[bv::=b']\<^sub>b
[PROOF STEP]
show "\<Theta>; \<B>;\<Gamma> \<turnstile>\<^sub>w\<^sub>f v : (b[bv::=b']\<^sub>b)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1.  \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f v : b[bv::=b']\<^sub>b
[PROOF STEP]
using infer_e_appPI check_v_wf b_of.simps subst_b_b_def
[PROOF STATE]
proof (prove)
using this:
atom bv \<sharp> \<tau>
 \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta>
 \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi>
 \<Theta> ; \<B>  \<turnstile>\<^sub>w\<^sub>f b'
Some (AF_fundef f (AF_fun_typ_some bv (AF_fun_typ x b c \<tau>'' s'))) = lookup_fun \<Phi> f
\<Theta> ; \<B> ; \<Gamma>  \<turnstile> v \<Leftarrow> \<lbrace> x : b[bv::=b']\<^sub>b  | c[bv::=b']\<^sub>b \<rbrace>
atom x \<sharp> \<Gamma>
\<tau>''[bv::=b']\<^sub>b[x::=v]\<^sub>v = \<tau>'
atom bv \<sharp> \<Theta>
atom bv \<sharp> \<Phi>
atom bv \<sharp> \<B>
atom bv \<sharp> \<Gamma>
atom bv \<sharp> \<Delta>
atom bv \<sharp> b'
atom bv \<sharp> v
atom bv \<sharp> \<tau>'
?\<Theta> ; ?\<B> ; ?\<Gamma>  \<turnstile> ?v \<Leftarrow> ?\<tau> \<Longrightarrow>  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?\<Gamma>
?\<Theta> ; ?\<B> ; ?\<Gamma>  \<turnstile> ?v \<Leftarrow> ?\<tau> \<Longrightarrow>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v : b_of ?\<tau>
?\<Theta> ; ?\<B> ; ?\<Gamma>  \<turnstile> ?v \<Leftarrow> ?\<tau> \<Longrightarrow>  ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?\<tau>
b_of \<lbrace> ?z : ?b  | ?c \<rbrace> = ?b
subst_b = subst_bb_abbrev

goal (1 subgoal):
 1.  \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f v : b[bv::=b']\<^sub>b
[PROOF STEP]
by metis
[PROOF STATE]
proof (state)
this:
 \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f v : b[bv::=b']\<^sub>b

goal (1 subgoal):
 1. atom bv \<sharp> (\<Phi>, \<Theta>, \<B>, \<Gamma>, \<Delta>, b', v, (b_of \<tau>'')[bv::=b']\<^sub>b)
[PROOF STEP]
have "atom bv \<sharp> (b_of \<tau>'')[bv::=b']\<^sub>b\<^sub>b"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. atom bv \<sharp> (b_of \<tau>'')[bv::=b']\<^sub>b\<^sub>b
[PROOF STEP]
using fresh_subst_if subst_b_b_def infer_e_appPI
[PROOF STATE]
proof (prove)
using this:
?j \<sharp> ?t[?i::=?x]\<^sub>b = (atom ?i \<sharp> ?t \<and> ?j \<sharp> ?t \<or> ?j \<sharp> ?x \<and> (?j \<sharp> ?t \<or> ?j = atom ?i))
subst_b = subst_bb_abbrev
atom bv \<sharp> \<tau>
 \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta>
 \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi>
 \<Theta> ; \<B>  \<turnstile>\<^sub>w\<^sub>f b'
Some (AF_fundef f (AF_fun_typ_some bv (AF_fun_typ x b c \<tau>'' s'))) = lookup_fun \<Phi> f
\<Theta> ; \<B> ; \<Gamma>  \<turnstile> v \<Leftarrow> \<lbrace> x : b[bv::=b']\<^sub>b  | c[bv::=b']\<^sub>b \<rbrace>
atom x \<sharp> \<Gamma>
\<tau>''[bv::=b']\<^sub>b[x::=v]\<^sub>v = \<tau>'
atom bv \<sharp> \<Theta>
atom bv \<sharp> \<Phi>
atom bv \<sharp> \<B>
atom bv \<sharp> \<Gamma>
atom bv \<sharp> \<Delta>
atom bv \<sharp> b'
atom bv \<sharp> v
atom bv \<sharp> \<tau>'

goal (1 subgoal):
 1. atom bv \<sharp> (b_of \<tau>'')[bv::=b']\<^sub>b\<^sub>b
[PROOF STEP]
by metis
[PROOF STATE]
proof (state)
this:
atom bv \<sharp> (b_of \<tau>'')[bv::=b']\<^sub>b\<^sub>b

goal (1 subgoal):
 1. atom bv \<sharp> (\<Phi>, \<Theta>, \<B>, \<Gamma>, \<Delta>, b', v, (b_of \<tau>'')[bv::=b']\<^sub>b)
[PROOF STEP]
thus  "atom bv \<sharp> (\<Phi>, \<Theta>, \<B>, \<Gamma>, \<Delta>, b', v, (b_of \<tau>'')[bv::=b']\<^sub>b)"
[PROOF STATE]
proof (prove)
using this:
atom bv \<sharp> (b_of \<tau>'')[bv::=b']\<^sub>b\<^sub>b

goal (1 subgoal):
 1. atom bv \<sharp> (\<Phi>, \<Theta>, \<B>, \<Gamma>, \<Delta>, b', v, (b_of \<tau>'')[bv::=b']\<^sub>b)
[PROOF STEP]
using infer_e_appPI fresh_prodN subst_b_b_def
[PROOF STATE]
proof (prove)
using this:
atom bv \<sharp> (b_of \<tau>'')[bv::=b']\<^sub>b\<^sub>b
atom bv \<sharp> \<tau>
 \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta>
 \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi>
 \<Theta> ; \<B>  \<turnstile>\<^sub>w\<^sub>f b'
Some (AF_fundef f (AF_fun_typ_some bv (AF_fun_typ x b c \<tau>'' s'))) = lookup_fun \<Phi> f
\<Theta> ; \<B> ; \<Gamma>  \<turnstile> v \<Leftarrow> \<lbrace> x : b[bv::=b']\<^sub>b  | c[bv::=b']\<^sub>b \<rbrace>
atom x \<sharp> \<Gamma>
\<tau>''[bv::=b']\<^sub>b[x::=v]\<^sub>v = \<tau>'
atom bv \<sharp> \<Theta>
atom bv \<sharp> \<Phi>
atom bv \<sharp> \<B>
atom bv \<sharp> \<Gamma>
atom bv \<sharp> \<Delta>
atom bv \<sharp> b'
atom bv \<sharp> v
atom bv \<sharp> \<tau>'
?a \<sharp> (?x, ?y) = (?a \<sharp> ?x \<and> ?a \<sharp> ?y)
?x \<sharp> (?a, ?b, ?c) = (?x \<sharp> ?a \<and> ?x \<sharp> ?b \<and> ?x \<sharp> ?c)
?x \<sharp> (?a, ?b, ?c, ?d) = (?x \<sharp> ?a \<and> ?x \<sharp> ?b \<and> ?x \<sharp> ?c \<and> ?x \<sharp> ?d)
?x \<sharp> (?a, ?b, ?c, ?d, ?e) = (?x \<sharp> ?a \<and> ?x \<sharp> ?b \<and> ?x \<sharp> ?c \<and> ?x \<sharp> ?d \<and> ?x \<sharp> ?e)
?x \<sharp> (?a, ?b, ?c, ?d, ?e, ?f) = (?x \<sharp> ?a \<and> ?x \<sharp> ?b \<and> ?x \<sharp> ?c \<and> ?x \<sharp> ?d \<and> ?x \<sharp> ?e \<and> ?x \<sharp> ?f)
?x \<sharp> (?a, ?b, ?c, ?d, ?e, ?f, ?g) = (?x \<sharp> ?a \<and> ?x \<sharp> ?b \<and> ?x \<sharp> ?c \<and> ?x \<sharp> ?d \<and> ?x \<sharp> ?e \<and> ?x \<sharp> ?f \<and> ?x \<sharp> ?g)
?x \<sharp> (?a, ?b, ?c, ?d, ?e, ?f, ?g, ?h) = (?x \<sharp> ?a \<and> ?x \<sharp> ?b \<and> ?x \<sharp> ?c \<and> ?x \<sharp> ?d \<and> ?x \<sharp> ?e \<and> ?x \<sharp> ?f \<and> ?x \<sharp> ?g \<and> ?x \<sharp> ?h)
?x \<sharp> (?a, ?b, ?c, ?d, ?e, ?f, ?g, ?h, ?i) = (?x \<sharp> ?a \<and> ?x \<sharp> ?b \<and> ?x \<sharp> ?c \<and> ?x \<sharp> ?d \<and> ?x \<sharp> ?e \<and> ?x \<sharp> ?f \<and> ?x \<sharp> ?g \<and> ?x \<sharp> ?h \<and> ?x \<sharp> ?i)
?x \<sharp> (?a, ?b, ?c, ?d, ?e, ?f, ?g, ?h, ?i, ?j) = (?x \<sharp> ?a \<and> ?x \<sharp> ?b \<and> ?x \<sharp> ?c \<and> ?x \<sharp> ?d \<and> ?x \<sharp> ?e \<and> ?x \<sharp> ?f \<and> ?x \<sharp> ?g \<and> ?x \<sharp> ?h \<and> ?x \<sharp> ?i \<and> ?x \<sharp> ?j)
?x \<sharp> (?a, ?b, ?c, ?d, ?e, ?f, ?g, ?h, ?i, ?j, ?k, ?l) = (?x \<sharp> ?a \<and> ?x \<sharp> ?b \<and> ?x \<sharp> ?c \<and> ?x \<sharp> ?d \<and> ?x \<sharp> ?e \<and> ?x \<sharp> ?f \<and> ?x \<sharp> ?g \<and> ?x \<sharp> ?h \<and> ?x \<sharp> ?i \<and> ?x \<sharp> ?j \<and> ?x \<sharp> ?k \<and> ?x \<sharp> ?l)
subst_b = subst_bb_abbrev

goal (1 subgoal):
 1. atom bv \<sharp> (\<Phi>, \<Theta>, \<B>, \<Gamma>, \<Delta>, b', v, (b_of \<tau>'')[bv::=b']\<^sub>b)
[PROOF STEP]
by metis
[PROOF STATE]
proof (state)
this:
atom bv \<sharp> (\<Phi>, \<Theta>, \<B>, \<Gamma>, \<Delta>, b', v, (b_of \<tau>'')[bv::=b']\<^sub>b)

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
 \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [f [ b' ]  v ]\<^sup>e : (b_of \<tau>'')[bv::=b']\<^sub>b

goal (7 subgoals):
 1. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> b' f bv x b c \<tau>' s' v \<tau> \<tau>''. \<lbrakk>atom bv \<sharp> \<tau>'';  \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B>  \<turnstile>\<^sub>w\<^sub>f b' ; Some (AF_fundef f (AF_fun_typ_some bv (AF_fun_typ x b c \<tau>' s'))) = lookup_fun \<Phi> f; \<Theta> ; \<B> ; \<Gamma>  \<turnstile> v \<Leftarrow> \<lbrace> x : b[bv::=b']\<^sub>b  | c[bv::=b']\<^sub>b \<rbrace>; atom x \<sharp> \<Gamma>; \<tau>'[bv::=b']\<^sub>b[x::=v]\<^sub>v = \<tau>; atom bv \<sharp> \<Theta>; atom bv \<sharp> \<Phi>; atom bv \<sharp> \<B>; atom bv \<sharp> \<Gamma>; atom bv \<sharp> \<Delta>; atom bv \<sharp> b'; atom bv \<sharp> v; atom bv \<sharp> \<tau>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [f [ b' ]  v ]\<^sup>e : b_of \<tau>
 2. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> v z' b1 b2 c z \<tau>. \<lbrakk> \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v \<Rightarrow> \<lbrace> z' : [ b1 , b2 ]\<^sup>b  | c \<rbrace>; atom z \<sharp> [#1v ]\<^sup>e; atom z \<sharp> \<Gamma>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [#1v ]\<^sup>e : b_of \<lbrace> z : b1  | [ [ z ]\<^sup>v ]\<^sup>c\<^sup>e  ==  [#1[ v ]\<^sup>c\<^sup>e]\<^sup>c\<^sup>e  \<rbrace>
 3. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> v z' b1 b2 c z \<tau>. \<lbrakk> \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v \<Rightarrow> \<lbrace> z' : [ b1 , b2 ]\<^sup>b  | c \<rbrace>; atom z \<sharp> [#2v ]\<^sup>e; atom z \<sharp> \<Gamma>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [#2v ]\<^sup>e : b_of \<lbrace> z : b2  | [ [ z ]\<^sup>v ]\<^sup>c\<^sup>e  ==  [#2[ v ]\<^sup>c\<^sup>e]\<^sup>c\<^sup>e  \<rbrace>
 4. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> v z' c z \<tau>. \<lbrakk> \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v \<Rightarrow> \<lbrace> z' : B_bitvec  | c \<rbrace>; atom z \<sharp> [| v |]\<^sup>e; atom z \<sharp> \<Gamma>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [| v |]\<^sup>e : b_of \<lbrace> z : B_int  | [ [ z ]\<^sup>v ]\<^sup>c\<^sup>e  ==  [| [ v ]\<^sup>c\<^sup>e |]\<^sup>c\<^sup>e  \<rbrace>
 5. \<And>\<Theta> \<B> \<Gamma> \<Phi> \<Delta> u \<tau> \<tau>'. \<lbrakk> \<Theta> ; \<B>  \<turnstile>\<^sub>w\<^sub>f \<Gamma> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ; (u, \<tau>) \<in> setD \<Delta>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [ u ]\<^sup>e : b_of \<tau>
 6. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> v1 z1 c1 v2 z2 c2 z3 \<tau>. \<lbrakk> \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v1 \<Rightarrow> \<lbrace> z1 : B_bitvec  | c1 \<rbrace>;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v2 \<Rightarrow> \<lbrace> z2 : B_bitvec  | c2 \<rbrace>; atom z3 \<sharp> [ v1 @@ v2 ]\<^sup>e; atom z3 \<sharp> \<Gamma>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [ v1 @@ v2 ]\<^sup>e : b_of \<lbrace> z3 : B_bitvec  | [ [ z3 ]\<^sup>v ]\<^sup>c\<^sup>e  ==  [ [ v1 ]\<^sup>c\<^sup>e @@ [ v2 ]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e  \<rbrace>
 7. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> v1 z1 c1 v2 z2 z3 \<tau>. \<lbrakk>atom z3 \<sharp> \<tau>; atom z1 \<sharp> \<tau>; atom z2 \<sharp> \<tau>;  \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v1 \<Rightarrow> \<lbrace> z1 : B_bitvec  | c1 \<rbrace>; \<Theta> ; \<B> ; \<Gamma>  \<turnstile> v2 \<Leftarrow> \<lbrace> z2 : B_int  | [ leq [ [ L_num 0 ]\<^sup>v ]\<^sup>c\<^sup>e [ [ z2 ]\<^sup>v ]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e  ==  [ [ L_true ]\<^sup>v ]\<^sup>c\<^sup>e   AND  [ leq [ [ z2 ]\<^sup>v ]\<^sup>c\<^sup>e [| [ v1 ]\<^sup>c\<^sup>e |]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e  ==  [ [ L_true ]\<^sup>v ]\<^sup>c\<^sup>e   \<rbrace>; atom z1 \<sharp> [ v1  v2 ]\<^sup>e; atom z1 \<sharp> \<Gamma>; atom z2 \<sharp> [ v1  v2 ]\<^sup>e; atom z2 \<sharp> \<Gamma>; atom z3 \<sharp> [ v1  v2 ]\<^sup>e; atom z3 \<sharp> \<Gamma>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [ v1  v2 ]\<^sup>e : b_of \<lbrace> z3 : [ B_bitvec , B_bitvec ]\<^sup>b  | [ v1 ]\<^sup>c\<^sup>e  ==  [ [#1[ [ z3 ]\<^sup>v ]\<^sup>c\<^sup>e]\<^sup>c\<^sup>e @@ [#2[ [ z3 ]\<^sup>v ]\<^sup>c\<^sup>e]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e   AND  [| [#1[ [ z3 ]\<^sup>v ]\<^sup>c\<^sup>e]\<^sup>c\<^sup>e |]\<^sup>c\<^sup>e  ==  [ v2 ]\<^sup>c\<^sup>e   \<rbrace>
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
 \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [f [ b' ]  v ]\<^sup>e : (b_of \<tau>'')[bv::=b']\<^sub>b

goal (7 subgoals):
 1. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> b' f bv x b c \<tau>' s' v \<tau> \<tau>''. \<lbrakk>atom bv \<sharp> \<tau>'';  \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B>  \<turnstile>\<^sub>w\<^sub>f b' ; Some (AF_fundef f (AF_fun_typ_some bv (AF_fun_typ x b c \<tau>' s'))) = lookup_fun \<Phi> f; \<Theta> ; \<B> ; \<Gamma>  \<turnstile> v \<Leftarrow> \<lbrace> x : b[bv::=b']\<^sub>b  | c[bv::=b']\<^sub>b \<rbrace>; atom x \<sharp> \<Gamma>; \<tau>'[bv::=b']\<^sub>b[x::=v]\<^sub>v = \<tau>; atom bv \<sharp> \<Theta>; atom bv \<sharp> \<Phi>; atom bv \<sharp> \<B>; atom bv \<sharp> \<Gamma>; atom bv \<sharp> \<Delta>; atom bv \<sharp> b'; atom bv \<sharp> v; atom bv \<sharp> \<tau>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [f [ b' ]  v ]\<^sup>e : b_of \<tau>
 2. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> v z' b1 b2 c z \<tau>. \<lbrakk> \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v \<Rightarrow> \<lbrace> z' : [ b1 , b2 ]\<^sup>b  | c \<rbrace>; atom z \<sharp> [#1v ]\<^sup>e; atom z \<sharp> \<Gamma>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [#1v ]\<^sup>e : b_of \<lbrace> z : b1  | [ [ z ]\<^sup>v ]\<^sup>c\<^sup>e  ==  [#1[ v ]\<^sup>c\<^sup>e]\<^sup>c\<^sup>e  \<rbrace>
 3. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> v z' b1 b2 c z \<tau>. \<lbrakk> \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v \<Rightarrow> \<lbrace> z' : [ b1 , b2 ]\<^sup>b  | c \<rbrace>; atom z \<sharp> [#2v ]\<^sup>e; atom z \<sharp> \<Gamma>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [#2v ]\<^sup>e : b_of \<lbrace> z : b2  | [ [ z ]\<^sup>v ]\<^sup>c\<^sup>e  ==  [#2[ v ]\<^sup>c\<^sup>e]\<^sup>c\<^sup>e  \<rbrace>
 4. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> v z' c z \<tau>. \<lbrakk> \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v \<Rightarrow> \<lbrace> z' : B_bitvec  | c \<rbrace>; atom z \<sharp> [| v |]\<^sup>e; atom z \<sharp> \<Gamma>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [| v |]\<^sup>e : b_of \<lbrace> z : B_int  | [ [ z ]\<^sup>v ]\<^sup>c\<^sup>e  ==  [| [ v ]\<^sup>c\<^sup>e |]\<^sup>c\<^sup>e  \<rbrace>
 5. \<And>\<Theta> \<B> \<Gamma> \<Phi> \<Delta> u \<tau> \<tau>'. \<lbrakk> \<Theta> ; \<B>  \<turnstile>\<^sub>w\<^sub>f \<Gamma> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ; (u, \<tau>) \<in> setD \<Delta>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [ u ]\<^sup>e : b_of \<tau>
 6. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> v1 z1 c1 v2 z2 c2 z3 \<tau>. \<lbrakk> \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v1 \<Rightarrow> \<lbrace> z1 : B_bitvec  | c1 \<rbrace>;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v2 \<Rightarrow> \<lbrace> z2 : B_bitvec  | c2 \<rbrace>; atom z3 \<sharp> [ v1 @@ v2 ]\<^sup>e; atom z3 \<sharp> \<Gamma>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [ v1 @@ v2 ]\<^sup>e : b_of \<lbrace> z3 : B_bitvec  | [ [ z3 ]\<^sup>v ]\<^sup>c\<^sup>e  ==  [ [ v1 ]\<^sup>c\<^sup>e @@ [ v2 ]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e  \<rbrace>
 7. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> v1 z1 c1 v2 z2 z3 \<tau>. \<lbrakk>atom z3 \<sharp> \<tau>; atom z1 \<sharp> \<tau>; atom z2 \<sharp> \<tau>;  \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v1 \<Rightarrow> \<lbrace> z1 : B_bitvec  | c1 \<rbrace>; \<Theta> ; \<B> ; \<Gamma>  \<turnstile> v2 \<Leftarrow> \<lbrace> z2 : B_int  | [ leq [ [ L_num 0 ]\<^sup>v ]\<^sup>c\<^sup>e [ [ z2 ]\<^sup>v ]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e  ==  [ [ L_true ]\<^sup>v ]\<^sup>c\<^sup>e   AND  [ leq [ [ z2 ]\<^sup>v ]\<^sup>c\<^sup>e [| [ v1 ]\<^sup>c\<^sup>e |]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e  ==  [ [ L_true ]\<^sup>v ]\<^sup>c\<^sup>e   \<rbrace>; atom z1 \<sharp> [ v1  v2 ]\<^sup>e; atom z1 \<sharp> \<Gamma>; atom z2 \<sharp> [ v1  v2 ]\<^sup>e; atom z2 \<sharp> \<Gamma>; atom z3 \<sharp> [ v1  v2 ]\<^sup>e; atom z3 \<sharp> \<Gamma>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [ v1  v2 ]\<^sup>e : b_of \<lbrace> z3 : [ B_bitvec , B_bitvec ]\<^sup>b  | [ v1 ]\<^sup>c\<^sup>e  ==  [ [#1[ [ z3 ]\<^sup>v ]\<^sup>c\<^sup>e]\<^sup>c\<^sup>e @@ [#2[ [ z3 ]\<^sup>v ]\<^sup>c\<^sup>e]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e   AND  [| [#1[ [ z3 ]\<^sup>v ]\<^sup>c\<^sup>e]\<^sup>c\<^sup>e |]\<^sup>c\<^sup>e  ==  [ v2 ]\<^sup>c\<^sup>e   \<rbrace>
[PROOF STEP]
have "b_of \<tau>' = (b_of \<tau>'')[bv::=b']\<^sub>b"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. b_of \<tau>' = (b_of \<tau>'')[bv::=b']\<^sub>b
[PROOF STEP]
using \<open>\<tau>''[bv::=b']\<^sub>b[x::=v]\<^sub>v = \<tau>'\<close> b_of_subst_bb_commute subst_tbase_eq  subst_b_b_def subst_v_\<tau>_def subst_b_\<tau>_def
[PROOF STATE]
proof (prove)
using this:
\<tau>''[bv::=b']\<^sub>b[x::=v]\<^sub>v = \<tau>'
b_of ?\<tau>[?bv::=?b]\<^sub>\<tau>\<^sub>b = (b_of ?\<tau>)[?bv::=?b]\<^sub>b\<^sub>b
b_of ?\<tau> = b_of ?\<tau>[?x::=?v]\<^sub>\<tau>\<^sub>v
subst_b = subst_bb_abbrev
subst_v = subst_tv_abbrev
subst_b = subst_tb_abbrev

goal (1 subgoal):
 1. b_of \<tau>' = (b_of \<tau>'')[bv::=b']\<^sub>b
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
b_of \<tau>' = (b_of \<tau>'')[bv::=b']\<^sub>b

goal (7 subgoals):
 1. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> b' f bv x b c \<tau>' s' v \<tau> \<tau>''. \<lbrakk>atom bv \<sharp> \<tau>'';  \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B>  \<turnstile>\<^sub>w\<^sub>f b' ; Some (AF_fundef f (AF_fun_typ_some bv (AF_fun_typ x b c \<tau>' s'))) = lookup_fun \<Phi> f; \<Theta> ; \<B> ; \<Gamma>  \<turnstile> v \<Leftarrow> \<lbrace> x : b[bv::=b']\<^sub>b  | c[bv::=b']\<^sub>b \<rbrace>; atom x \<sharp> \<Gamma>; \<tau>'[bv::=b']\<^sub>b[x::=v]\<^sub>v = \<tau>; atom bv \<sharp> \<Theta>; atom bv \<sharp> \<Phi>; atom bv \<sharp> \<B>; atom bv \<sharp> \<Gamma>; atom bv \<sharp> \<Delta>; atom bv \<sharp> b'; atom bv \<sharp> v; atom bv \<sharp> \<tau>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [f [ b' ]  v ]\<^sup>e : b_of \<tau>
 2. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> v z' b1 b2 c z \<tau>. \<lbrakk> \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v \<Rightarrow> \<lbrace> z' : [ b1 , b2 ]\<^sup>b  | c \<rbrace>; atom z \<sharp> [#1v ]\<^sup>e; atom z \<sharp> \<Gamma>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [#1v ]\<^sup>e : b_of \<lbrace> z : b1  | [ [ z ]\<^sup>v ]\<^sup>c\<^sup>e  ==  [#1[ v ]\<^sup>c\<^sup>e]\<^sup>c\<^sup>e  \<rbrace>
 3. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> v z' b1 b2 c z \<tau>. \<lbrakk> \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v \<Rightarrow> \<lbrace> z' : [ b1 , b2 ]\<^sup>b  | c \<rbrace>; atom z \<sharp> [#2v ]\<^sup>e; atom z \<sharp> \<Gamma>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [#2v ]\<^sup>e : b_of \<lbrace> z : b2  | [ [ z ]\<^sup>v ]\<^sup>c\<^sup>e  ==  [#2[ v ]\<^sup>c\<^sup>e]\<^sup>c\<^sup>e  \<rbrace>
 4. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> v z' c z \<tau>. \<lbrakk> \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v \<Rightarrow> \<lbrace> z' : B_bitvec  | c \<rbrace>; atom z \<sharp> [| v |]\<^sup>e; atom z \<sharp> \<Gamma>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [| v |]\<^sup>e : b_of \<lbrace> z : B_int  | [ [ z ]\<^sup>v ]\<^sup>c\<^sup>e  ==  [| [ v ]\<^sup>c\<^sup>e |]\<^sup>c\<^sup>e  \<rbrace>
 5. \<And>\<Theta> \<B> \<Gamma> \<Phi> \<Delta> u \<tau> \<tau>'. \<lbrakk> \<Theta> ; \<B>  \<turnstile>\<^sub>w\<^sub>f \<Gamma> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ; (u, \<tau>) \<in> setD \<Delta>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [ u ]\<^sup>e : b_of \<tau>
 6. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> v1 z1 c1 v2 z2 c2 z3 \<tau>. \<lbrakk> \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v1 \<Rightarrow> \<lbrace> z1 : B_bitvec  | c1 \<rbrace>;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v2 \<Rightarrow> \<lbrace> z2 : B_bitvec  | c2 \<rbrace>; atom z3 \<sharp> [ v1 @@ v2 ]\<^sup>e; atom z3 \<sharp> \<Gamma>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [ v1 @@ v2 ]\<^sup>e : b_of \<lbrace> z3 : B_bitvec  | [ [ z3 ]\<^sup>v ]\<^sup>c\<^sup>e  ==  [ [ v1 ]\<^sup>c\<^sup>e @@ [ v2 ]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e  \<rbrace>
 7. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> v1 z1 c1 v2 z2 z3 \<tau>. \<lbrakk>atom z3 \<sharp> \<tau>; atom z1 \<sharp> \<tau>; atom z2 \<sharp> \<tau>;  \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v1 \<Rightarrow> \<lbrace> z1 : B_bitvec  | c1 \<rbrace>; \<Theta> ; \<B> ; \<Gamma>  \<turnstile> v2 \<Leftarrow> \<lbrace> z2 : B_int  | [ leq [ [ L_num 0 ]\<^sup>v ]\<^sup>c\<^sup>e [ [ z2 ]\<^sup>v ]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e  ==  [ [ L_true ]\<^sup>v ]\<^sup>c\<^sup>e   AND  [ leq [ [ z2 ]\<^sup>v ]\<^sup>c\<^sup>e [| [ v1 ]\<^sup>c\<^sup>e |]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e  ==  [ [ L_true ]\<^sup>v ]\<^sup>c\<^sup>e   \<rbrace>; atom z1 \<sharp> [ v1  v2 ]\<^sup>e; atom z1 \<sharp> \<Gamma>; atom z2 \<sharp> [ v1  v2 ]\<^sup>e; atom z2 \<sharp> \<Gamma>; atom z3 \<sharp> [ v1  v2 ]\<^sup>e; atom z3 \<sharp> \<Gamma>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [ v1  v2 ]\<^sup>e : b_of \<lbrace> z3 : [ B_bitvec , B_bitvec ]\<^sup>b  | [ v1 ]\<^sup>c\<^sup>e  ==  [ [#1[ [ z3 ]\<^sup>v ]\<^sup>c\<^sup>e]\<^sup>c\<^sup>e @@ [#2[ [ z3 ]\<^sup>v ]\<^sup>c\<^sup>e]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e   AND  [| [#1[ [ z3 ]\<^sup>v ]\<^sup>c\<^sup>e]\<^sup>c\<^sup>e |]\<^sup>c\<^sup>e  ==  [ v2 ]\<^sup>c\<^sup>e   \<rbrace>
[PROOF STEP]
ultimately
[PROOF STATE]
proof (chain)
picking this:
 \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [f [ b' ]  v ]\<^sup>e : (b_of \<tau>'')[bv::=b']\<^sub>b
b_of \<tau>' = (b_of \<tau>'')[bv::=b']\<^sub>b
[PROOF STEP]
show ?case
[PROOF STATE]
proof (prove)
using this:
 \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [f [ b' ]  v ]\<^sup>e : (b_of \<tau>'')[bv::=b']\<^sub>b
b_of \<tau>' = (b_of \<tau>'')[bv::=b']\<^sub>b

goal (1 subgoal):
 1.  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [f [ b' ]  v ]\<^sup>e : b_of \<tau>'
[PROOF STEP]
using infer_e_appI
[PROOF STATE]
proof (prove)
using this:
 \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [f [ b' ]  v ]\<^sup>e : (b_of \<tau>'')[bv::=b']\<^sub>b
b_of \<tau>' = (b_of \<tau>'')[bv::=b']\<^sub>b
\<lbrakk> ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta> ;  ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f ?\<Phi> ; Some (AF_fundef ?f (AF_fun_typ_none (AF_fun_typ ?x ?b ?c ?\<tau>' ?s'))) = lookup_fun ?\<Phi> ?f; ?\<Theta> ; ?\<B> ; ?\<Gamma>  \<turnstile> ?v \<Leftarrow> \<lbrace> ?x : ?b  | ?c \<rbrace>; atom ?x \<sharp> (?\<Theta>, ?\<Phi>, ?\<B>, ?\<Gamma>, ?\<Delta>, ?v, ?\<tau>); ?\<tau>'[?x::=?v]\<^sub>v = ?\<tau>\<rbrakk> \<Longrightarrow> ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta>  \<turnstile> [ ?f  ?v  ]\<^sup>e \<Rightarrow> ?\<tau>

goal (1 subgoal):
 1.  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [f [ b' ]  v ]\<^sup>e : b_of \<tau>'
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
 \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [f [ b' ]  v ]\<^sup>e : b_of \<tau>'

goal (6 subgoals):
 1. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> v z' b1 b2 c z \<tau>. \<lbrakk> \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v \<Rightarrow> \<lbrace> z' : [ b1 , b2 ]\<^sup>b  | c \<rbrace>; atom z \<sharp> [#1v ]\<^sup>e; atom z \<sharp> \<Gamma>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [#1v ]\<^sup>e : b_of \<lbrace> z : b1  | [ [ z ]\<^sup>v ]\<^sup>c\<^sup>e  ==  [#1[ v ]\<^sup>c\<^sup>e]\<^sup>c\<^sup>e  \<rbrace>
 2. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> v z' b1 b2 c z \<tau>. \<lbrakk> \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v \<Rightarrow> \<lbrace> z' : [ b1 , b2 ]\<^sup>b  | c \<rbrace>; atom z \<sharp> [#2v ]\<^sup>e; atom z \<sharp> \<Gamma>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [#2v ]\<^sup>e : b_of \<lbrace> z : b2  | [ [ z ]\<^sup>v ]\<^sup>c\<^sup>e  ==  [#2[ v ]\<^sup>c\<^sup>e]\<^sup>c\<^sup>e  \<rbrace>
 3. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> v z' c z \<tau>. \<lbrakk> \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v \<Rightarrow> \<lbrace> z' : B_bitvec  | c \<rbrace>; atom z \<sharp> [| v |]\<^sup>e; atom z \<sharp> \<Gamma>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [| v |]\<^sup>e : b_of \<lbrace> z : B_int  | [ [ z ]\<^sup>v ]\<^sup>c\<^sup>e  ==  [| [ v ]\<^sup>c\<^sup>e |]\<^sup>c\<^sup>e  \<rbrace>
 4. \<And>\<Theta> \<B> \<Gamma> \<Phi> \<Delta> u \<tau> \<tau>'. \<lbrakk> \<Theta> ; \<B>  \<turnstile>\<^sub>w\<^sub>f \<Gamma> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ; (u, \<tau>) \<in> setD \<Delta>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [ u ]\<^sup>e : b_of \<tau>
 5. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> v1 z1 c1 v2 z2 c2 z3 \<tau>. \<lbrakk> \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v1 \<Rightarrow> \<lbrace> z1 : B_bitvec  | c1 \<rbrace>;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v2 \<Rightarrow> \<lbrace> z2 : B_bitvec  | c2 \<rbrace>; atom z3 \<sharp> [ v1 @@ v2 ]\<^sup>e; atom z3 \<sharp> \<Gamma>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [ v1 @@ v2 ]\<^sup>e : b_of \<lbrace> z3 : B_bitvec  | [ [ z3 ]\<^sup>v ]\<^sup>c\<^sup>e  ==  [ [ v1 ]\<^sup>c\<^sup>e @@ [ v2 ]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e  \<rbrace>
 6. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> v1 z1 c1 v2 z2 z3 \<tau>. \<lbrakk>atom z3 \<sharp> \<tau>; atom z1 \<sharp> \<tau>; atom z2 \<sharp> \<tau>;  \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v1 \<Rightarrow> \<lbrace> z1 : B_bitvec  | c1 \<rbrace>; \<Theta> ; \<B> ; \<Gamma>  \<turnstile> v2 \<Leftarrow> \<lbrace> z2 : B_int  | [ leq [ [ L_num 0 ]\<^sup>v ]\<^sup>c\<^sup>e [ [ z2 ]\<^sup>v ]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e  ==  [ [ L_true ]\<^sup>v ]\<^sup>c\<^sup>e   AND  [ leq [ [ z2 ]\<^sup>v ]\<^sup>c\<^sup>e [| [ v1 ]\<^sup>c\<^sup>e |]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e  ==  [ [ L_true ]\<^sup>v ]\<^sup>c\<^sup>e   \<rbrace>; atom z1 \<sharp> [ v1  v2 ]\<^sup>e; atom z1 \<sharp> \<Gamma>; atom z2 \<sharp> [ v1  v2 ]\<^sup>e; atom z2 \<sharp> \<Gamma>; atom z3 \<sharp> [ v1  v2 ]\<^sup>e; atom z3 \<sharp> \<Gamma>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [ v1  v2 ]\<^sup>e : b_of \<lbrace> z3 : [ B_bitvec , B_bitvec ]\<^sup>b  | [ v1 ]\<^sup>c\<^sup>e  ==  [ [#1[ [ z3 ]\<^sup>v ]\<^sup>c\<^sup>e]\<^sup>c\<^sup>e @@ [#2[ [ z3 ]\<^sup>v ]\<^sup>c\<^sup>e]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e   AND  [| [#1[ [ z3 ]\<^sup>v ]\<^sup>c\<^sup>e]\<^sup>c\<^sup>e |]\<^sup>c\<^sup>e  ==  [ v2 ]\<^sup>c\<^sup>e   \<rbrace>
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (6 subgoals):
 1. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> v z' b1 b2 c z \<tau>. \<lbrakk> \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v \<Rightarrow> \<lbrace> z' : [ b1 , b2 ]\<^sup>b  | c \<rbrace>; atom z \<sharp> [#1v ]\<^sup>e; atom z \<sharp> \<Gamma>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [#1v ]\<^sup>e : b_of \<lbrace> z : b1  | [ [ z ]\<^sup>v ]\<^sup>c\<^sup>e  ==  [#1[ v ]\<^sup>c\<^sup>e]\<^sup>c\<^sup>e  \<rbrace>
 2. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> v z' b1 b2 c z \<tau>. \<lbrakk> \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v \<Rightarrow> \<lbrace> z' : [ b1 , b2 ]\<^sup>b  | c \<rbrace>; atom z \<sharp> [#2v ]\<^sup>e; atom z \<sharp> \<Gamma>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [#2v ]\<^sup>e : b_of \<lbrace> z : b2  | [ [ z ]\<^sup>v ]\<^sup>c\<^sup>e  ==  [#2[ v ]\<^sup>c\<^sup>e]\<^sup>c\<^sup>e  \<rbrace>
 3. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> v z' c z \<tau>. \<lbrakk> \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v \<Rightarrow> \<lbrace> z' : B_bitvec  | c \<rbrace>; atom z \<sharp> [| v |]\<^sup>e; atom z \<sharp> \<Gamma>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [| v |]\<^sup>e : b_of \<lbrace> z : B_int  | [ [ z ]\<^sup>v ]\<^sup>c\<^sup>e  ==  [| [ v ]\<^sup>c\<^sup>e |]\<^sup>c\<^sup>e  \<rbrace>
 4. \<And>\<Theta> \<B> \<Gamma> \<Phi> \<Delta> u \<tau> \<tau>'. \<lbrakk> \<Theta> ; \<B>  \<turnstile>\<^sub>w\<^sub>f \<Gamma> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ; (u, \<tau>) \<in> setD \<Delta>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [ u ]\<^sup>e : b_of \<tau>
 5. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> v1 z1 c1 v2 z2 c2 z3 \<tau>. \<lbrakk> \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v1 \<Rightarrow> \<lbrace> z1 : B_bitvec  | c1 \<rbrace>;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v2 \<Rightarrow> \<lbrace> z2 : B_bitvec  | c2 \<rbrace>; atom z3 \<sharp> [ v1 @@ v2 ]\<^sup>e; atom z3 \<sharp> \<Gamma>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [ v1 @@ v2 ]\<^sup>e : b_of \<lbrace> z3 : B_bitvec  | [ [ z3 ]\<^sup>v ]\<^sup>c\<^sup>e  ==  [ [ v1 ]\<^sup>c\<^sup>e @@ [ v2 ]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e  \<rbrace>
 6. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> v1 z1 c1 v2 z2 z3 \<tau>. \<lbrakk>atom z3 \<sharp> \<tau>; atom z1 \<sharp> \<tau>; atom z2 \<sharp> \<tau>;  \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v1 \<Rightarrow> \<lbrace> z1 : B_bitvec  | c1 \<rbrace>; \<Theta> ; \<B> ; \<Gamma>  \<turnstile> v2 \<Leftarrow> \<lbrace> z2 : B_int  | [ leq [ [ L_num 0 ]\<^sup>v ]\<^sup>c\<^sup>e [ [ z2 ]\<^sup>v ]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e  ==  [ [ L_true ]\<^sup>v ]\<^sup>c\<^sup>e   AND  [ leq [ [ z2 ]\<^sup>v ]\<^sup>c\<^sup>e [| [ v1 ]\<^sup>c\<^sup>e |]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e  ==  [ [ L_true ]\<^sup>v ]\<^sup>c\<^sup>e   \<rbrace>; atom z1 \<sharp> [ v1  v2 ]\<^sup>e; atom z1 \<sharp> \<Gamma>; atom z2 \<sharp> [ v1  v2 ]\<^sup>e; atom z2 \<sharp> \<Gamma>; atom z3 \<sharp> [ v1  v2 ]\<^sup>e; atom z3 \<sharp> \<Gamma>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [ v1  v2 ]\<^sup>e : b_of \<lbrace> z3 : [ B_bitvec , B_bitvec ]\<^sup>b  | [ v1 ]\<^sup>c\<^sup>e  ==  [ [#1[ [ z3 ]\<^sup>v ]\<^sup>c\<^sup>e]\<^sup>c\<^sup>e @@ [#2[ [ z3 ]\<^sup>v ]\<^sup>c\<^sup>e]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e   AND  [| [#1[ [ z3 ]\<^sup>v ]\<^sup>c\<^sup>e]\<^sup>c\<^sup>e |]\<^sup>c\<^sup>e  ==  [ v2 ]\<^sup>c\<^sup>e   \<rbrace>
[PROOF STEP]
case (infer_e_fstI \<Theta> \<B> \<Gamma> \<Delta>' \<Phi> v z' b1 b2 c z)
[PROOF STATE]
proof (state)
this:
 \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta>'
 \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi>
 \<Theta> ; \<B> ; \<Gamma> \<turnstile> v \<Rightarrow> \<lbrace> z' : [ b1 , b2 ]\<^sup>b  | c \<rbrace>
atom z \<sharp> [#1v ]\<^sup>e
atom z \<sharp> \<Gamma>

goal (6 subgoals):
 1. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> v z' b1 b2 c z \<tau>. \<lbrakk> \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v \<Rightarrow> \<lbrace> z' : [ b1 , b2 ]\<^sup>b  | c \<rbrace>; atom z \<sharp> [#1v ]\<^sup>e; atom z \<sharp> \<Gamma>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [#1v ]\<^sup>e : b_of \<lbrace> z : b1  | [ [ z ]\<^sup>v ]\<^sup>c\<^sup>e  ==  [#1[ v ]\<^sup>c\<^sup>e]\<^sup>c\<^sup>e  \<rbrace>
 2. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> v z' b1 b2 c z \<tau>. \<lbrakk> \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v \<Rightarrow> \<lbrace> z' : [ b1 , b2 ]\<^sup>b  | c \<rbrace>; atom z \<sharp> [#2v ]\<^sup>e; atom z \<sharp> \<Gamma>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [#2v ]\<^sup>e : b_of \<lbrace> z : b2  | [ [ z ]\<^sup>v ]\<^sup>c\<^sup>e  ==  [#2[ v ]\<^sup>c\<^sup>e]\<^sup>c\<^sup>e  \<rbrace>
 3. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> v z' c z \<tau>. \<lbrakk> \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v \<Rightarrow> \<lbrace> z' : B_bitvec  | c \<rbrace>; atom z \<sharp> [| v |]\<^sup>e; atom z \<sharp> \<Gamma>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [| v |]\<^sup>e : b_of \<lbrace> z : B_int  | [ [ z ]\<^sup>v ]\<^sup>c\<^sup>e  ==  [| [ v ]\<^sup>c\<^sup>e |]\<^sup>c\<^sup>e  \<rbrace>
 4. \<And>\<Theta> \<B> \<Gamma> \<Phi> \<Delta> u \<tau> \<tau>'. \<lbrakk> \<Theta> ; \<B>  \<turnstile>\<^sub>w\<^sub>f \<Gamma> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ; (u, \<tau>) \<in> setD \<Delta>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [ u ]\<^sup>e : b_of \<tau>
 5. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> v1 z1 c1 v2 z2 c2 z3 \<tau>. \<lbrakk> \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v1 \<Rightarrow> \<lbrace> z1 : B_bitvec  | c1 \<rbrace>;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v2 \<Rightarrow> \<lbrace> z2 : B_bitvec  | c2 \<rbrace>; atom z3 \<sharp> [ v1 @@ v2 ]\<^sup>e; atom z3 \<sharp> \<Gamma>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [ v1 @@ v2 ]\<^sup>e : b_of \<lbrace> z3 : B_bitvec  | [ [ z3 ]\<^sup>v ]\<^sup>c\<^sup>e  ==  [ [ v1 ]\<^sup>c\<^sup>e @@ [ v2 ]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e  \<rbrace>
 6. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> v1 z1 c1 v2 z2 z3 \<tau>. \<lbrakk>atom z3 \<sharp> \<tau>; atom z1 \<sharp> \<tau>; atom z2 \<sharp> \<tau>;  \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v1 \<Rightarrow> \<lbrace> z1 : B_bitvec  | c1 \<rbrace>; \<Theta> ; \<B> ; \<Gamma>  \<turnstile> v2 \<Leftarrow> \<lbrace> z2 : B_int  | [ leq [ [ L_num 0 ]\<^sup>v ]\<^sup>c\<^sup>e [ [ z2 ]\<^sup>v ]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e  ==  [ [ L_true ]\<^sup>v ]\<^sup>c\<^sup>e   AND  [ leq [ [ z2 ]\<^sup>v ]\<^sup>c\<^sup>e [| [ v1 ]\<^sup>c\<^sup>e |]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e  ==  [ [ L_true ]\<^sup>v ]\<^sup>c\<^sup>e   \<rbrace>; atom z1 \<sharp> [ v1  v2 ]\<^sup>e; atom z1 \<sharp> \<Gamma>; atom z2 \<sharp> [ v1  v2 ]\<^sup>e; atom z2 \<sharp> \<Gamma>; atom z3 \<sharp> [ v1  v2 ]\<^sup>e; atom z3 \<sharp> \<Gamma>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [ v1  v2 ]\<^sup>e : b_of \<lbrace> z3 : [ B_bitvec , B_bitvec ]\<^sup>b  | [ v1 ]\<^sup>c\<^sup>e  ==  [ [#1[ [ z3 ]\<^sup>v ]\<^sup>c\<^sup>e]\<^sup>c\<^sup>e @@ [#2[ [ z3 ]\<^sup>v ]\<^sup>c\<^sup>e]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e   AND  [| [#1[ [ z3 ]\<^sup>v ]\<^sup>c\<^sup>e]\<^sup>c\<^sup>e |]\<^sup>c\<^sup>e  ==  [ v2 ]\<^sup>c\<^sup>e   \<rbrace>
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
 \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta>'
 \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi>
 \<Theta> ; \<B> ; \<Gamma> \<turnstile> v \<Rightarrow> \<lbrace> z' : [ b1 , b2 ]\<^sup>b  | c \<rbrace>
atom z \<sharp> [#1v ]\<^sup>e
atom z \<sharp> \<Gamma>
[PROOF STEP]
show ?case
[PROOF STATE]
proof (prove)
using this:
 \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta>'
 \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi>
 \<Theta> ; \<B> ; \<Gamma> \<turnstile> v \<Rightarrow> \<lbrace> z' : [ b1 , b2 ]\<^sup>b  | c \<rbrace>
atom z \<sharp> [#1v ]\<^sup>e
atom z \<sharp> \<Gamma>

goal (1 subgoal):
 1.  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta>' \<turnstile>\<^sub>w\<^sub>f [#1v ]\<^sup>e : b_of \<lbrace> z : b1  | [ [ z ]\<^sup>v ]\<^sup>c\<^sup>e  ==  [#1[ v ]\<^sup>c\<^sup>e]\<^sup>c\<^sup>e  \<rbrace>
[PROOF STEP]
using  b_of.simps infer_v_v_wf wf_intros
[PROOF STATE]
proof (prove)
using this:
 \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta>'
 \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi>
 \<Theta> ; \<B> ; \<Gamma> \<turnstile> v \<Rightarrow> \<lbrace> z' : [ b1 , b2 ]\<^sup>b  | c \<rbrace>
atom z \<sharp> [#1v ]\<^sup>e
atom z \<sharp> \<Gamma>
b_of \<lbrace> ?z : ?b  | ?c \<rbrace> = ?b
 ?\<Theta> ; ?\<B> ; ?G \<turnstile> ?v \<Rightarrow> ?\<tau> \<Longrightarrow>  ?\<Theta> ; ?\<B> ; ?G \<turnstile>\<^sub>w\<^sub>f ?v : b_of ?\<tau>
   \<turnstile>\<^sub>w\<^sub>f ?\<Theta>  \<Longrightarrow>  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f B_int
   \<turnstile>\<^sub>w\<^sub>f ?\<Theta>  \<Longrightarrow>  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f B_bool
   \<turnstile>\<^sub>w\<^sub>f ?\<Theta>  \<Longrightarrow>  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f B_unit
   \<turnstile>\<^sub>w\<^sub>f ?\<Theta>  \<Longrightarrow>  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f B_bitvec
\<lbrakk> ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?b1.0 ;  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?b2.0 \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f [ ?b1.0 , ?b2.0 ]\<^sup>b
\<lbrakk>   \<turnstile>\<^sub>w\<^sub>f ?\<Theta> ; AF_typedef ?s ?dclist \<in> set ?\<Theta>\<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f B_id ?s
\<lbrakk>   \<turnstile>\<^sub>w\<^sub>f ?\<Theta> ;  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?b ; AF_typedef_poly ?s ?bv ?dclist \<in> set ?\<Theta>\<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f B_app ?s ?b
\<lbrakk> ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?\<Gamma> ; Some (?b, ?c) = lookup ?\<Gamma> ?x\<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [ ?x ]\<^sup>v : ?b
 ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?\<Gamma>  \<Longrightarrow>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [ ?l ]\<^sup>v : base_for_lit ?l
\<lbrakk> ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : ?b1.0 ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v2.0 : ?b2.0 \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [ ?v1.0 , ?v2.0 ]\<^sup>v : [ ?b1.0 , ?b2.0 ]\<^sup>b
\<lbrakk>AF_typedef ?s ?dclist \<in> set ?\<Theta>; (?dc, \<lbrace> ?x : ?b'  | ?c \<rbrace>) \<in> set ?dclist;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v : ?b' \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f V_cons ?s ?dc ?v : B_id ?s
\<lbrakk>AF_typedef_poly ?s ?bv ?dclist \<in> set ?\<Theta>; (?dc, \<lbrace> ?x : ?b'  | ?c \<rbrace>) \<in> set ?dclist;  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?b ; atom ?bv \<sharp> (?\<Theta>, ?\<B>, ?\<Gamma>, ?b, ?v);  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v : ?b'[?bv::=?b]\<^sub>b\<^sub>b \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f V_consp ?s ?dc ?b ?v : B_app ?s ?b
 ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v : ?b  \<Longrightarrow>   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [ ?v ]\<^sup>c\<^sup>e : ?b
\<lbrakk>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : B_int ;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v2.0 : B_int \<rbrakk> \<Longrightarrow>   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [ plus ?v1.0 ?v2.0 ]\<^sup>c\<^sup>e : B_int
\<lbrakk>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : B_int ;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v2.0 : B_int \<rbrakk> \<Longrightarrow>   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [ leq ?v1.0 ?v2.0 ]\<^sup>c\<^sup>e : B_bool
\<lbrakk>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : ?b ;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v2.0 : ?b \<rbrakk> \<Longrightarrow>   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [ eq ?v1.0 ?v2.0 ]\<^sup>c\<^sup>e : B_bool
  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : [ ?b1.0 , ?b2.0 ]\<^sup>b  \<Longrightarrow>   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [#1?v1.0]\<^sup>c\<^sup>e : ?b1.0
  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : [ ?b1.0 , ?b2.0 ]\<^sup>b  \<Longrightarrow>   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [#2?v1.0]\<^sup>c\<^sup>e : ?b2.0
\<lbrakk>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : B_bitvec ;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v2.0 : B_bitvec \<rbrakk> \<Longrightarrow>   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [ ?v1.0 @@ ?v2.0 ]\<^sup>c\<^sup>e : B_bitvec
  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : B_bitvec  \<Longrightarrow>   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [| ?v1.0 |]\<^sup>c\<^sup>e : B_int
\<lbrakk>atom ?z \<sharp> (?\<Theta>, ?\<B>, ?\<Gamma>);  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?b ;  ?\<Theta> ; ?\<B> ; (?z, ?b, TRUE) #\<^sub>\<Gamma> ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?c \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f \<lbrace> ?z : ?b  | ?c \<rbrace>
\<lbrakk>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?e1.0 : ?b ;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?e2.0 : ?b \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?e1.0  ==  ?e2.0
 ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?\<Gamma>  \<Longrightarrow>  ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f TRUE
 ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?\<Gamma>  \<Longrightarrow>  ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f FALSE
\<lbrakk> ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?c1.0 ;  ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?c2.0 \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?c1.0  AND  ?c2.0
\<lbrakk> ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?c1.0 ;  ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?c2.0 \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?c1.0 OR ?c2.0
 ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?c1.0  \<Longrightarrow>  ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f \<not> ?c1.0
\<lbrakk> ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?c1.0 ;  ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?c2.0 \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?c1.0  IMP  ?c2.0
   \<turnstile>\<^sub>w\<^sub>f ?\<Theta>  \<Longrightarrow>  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f GNil
\<lbrakk>?c \<notin> {TRUE, FALSE};  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?\<Gamma> ; atom ?x \<sharp> ?\<Gamma>;  ?\<Theta> ; ?\<B> ; (?x, ?b, TRUE) #\<^sub>\<Gamma> ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?c ;  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?b \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f (?x, ?b, ?c) #\<^sub>\<Gamma> ?\<Gamma>
\<lbrakk>?c \<in> {TRUE, FALSE};  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?\<Gamma> ; atom ?x \<sharp> ?\<Gamma>;  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?b \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f (?x, ?b, ?c) #\<^sub>\<Gamma> ?\<Gamma>
   \<turnstile>\<^sub>w\<^sub>f []
\<lbrakk>name_of_type ?tdef \<notin> name_of_type ` set ?\<Theta>;    \<turnstile>\<^sub>w\<^sub>f ?\<Theta> ;  ?\<Theta> \<turnstile>\<^sub>w\<^sub>f ?tdef \<rbrakk> \<Longrightarrow>    \<turnstile>\<^sub>w\<^sub>f ?tdef # ?\<Theta>
 ?\<Theta> ; {||}  ; GNil \<turnstile>\<^sub>w\<^sub>f ?lst  \<Longrightarrow>  ?\<Theta> \<turnstile>\<^sub>w\<^sub>f AF_typedef ?s ?lst
 ?\<Theta> ; {|?bv|}  ; GNil \<turnstile>\<^sub>w\<^sub>f ?lst  \<Longrightarrow>  ?\<Theta> \<turnstile>\<^sub>w\<^sub>f AF_typedef_poly ?s ?bv ?lst
 ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?\<Gamma>  \<Longrightarrow>  ?\<Theta> ; ?\<B>  ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f []
\<lbrakk> ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?\<tau> ; ?dc \<notin> fst ` set ?ts;  ?\<Theta> ; ?\<B>  ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?ts \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<B>  ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f (?dc, ?\<tau>) # ?ts
\<lbrakk> ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f ?\<Phi> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v : ?b \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f [ ?v ]\<^sup>e : ?b
\<lbrakk> ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f ?\<Phi> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : B_int ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v2.0 : B_int \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f [ plus ?v1.0 ?v2.0 ]\<^sup>e : B_int
\<lbrakk> ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f ?\<Phi> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : B_int ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v2.0 : B_int \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f [ leq ?v1.0 ?v2.0 ]\<^sup>e : B_bool
\<lbrakk> ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f ?\<Phi> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : ?b ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v2.0 : ?b ; ?b \<in> {B_bool, B_int, B_unit}\<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f [ eq ?v1.0 ?v2.0 ]\<^sup>e : B_bool
\<lbrakk> ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f ?\<Phi> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : [ ?b1.0 , ?b2.0 ]\<^sup>b \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f [#1?v1.0 ]\<^sup>e : ?b1.0
\<lbrakk> ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f ?\<Phi> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : [ ?b1.0 , ?b2.0 ]\<^sup>b \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f [#2?v1.0 ]\<^sup>e : ?b2.0
\<lbrakk> ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f ?\<Phi> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : B_bitvec ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v2.0 : B_bitvec \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f [ ?v1.0 @@ ?v2.0 ]\<^sup>e : B_bitvec
\<lbrakk> ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f ?\<Phi> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : B_bitvec ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v2.0 : B_int \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f [ ?v1.0  ?v2.0 ]\<^sup>e : [ B_bitvec , B_bitvec ]\<^sup>b
\<lbrakk> ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f ?\<Phi> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : B_bitvec \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f [| ?v1.0 |]\<^sup>e : B_int
\<lbrakk> ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f ?\<Phi> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta> ; Some (AF_fundef ?f (AF_fun_typ_none (AF_fun_typ ?x ?b ?c ?\<tau> ?s))) = lookup_fun ?\<Phi> ?f;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v : ?b \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f [ ?f  ?v  ]\<^sup>e : b_of ?\<tau>
\<lbrakk> ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f ?\<Phi> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta> ;  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?b' ; atom ?bv \<sharp> (?\<Phi>, ?\<Theta>, ?\<B>, ?\<Gamma>, ?\<Delta>, ?b', ?v, (b_of ?\<tau>)[?bv::=?b']\<^sub>b); Some (AF_fundef ?f (AF_fun_typ_some ?bv (AF_fun_typ ?x ?b ?c ?\<tau> ?s))) = lookup_fun ?\<Phi> ?f;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v : ?b[?bv::=?b']\<^sub>b \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f [?f [ ?b' ]  ?v ]\<^sup>e : (b_of ?\<tau>)[?bv::=?b']\<^sub>b
\<lbrakk> ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f ?\<Phi> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta> ; (?u, ?\<tau>) \<in> setD ?\<Delta>\<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f [ ?u ]\<^sup>e : b_of ?\<tau>
\<lbrakk> ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f ?\<Phi> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v : ?b ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta> \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f [?v]\<^sup>s : ?b
\<lbrakk> ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f ?e : ?b' ;  ?\<Theta> ; ?\<Phi> ; ?\<B> ; (?x, ?b', TRUE) #\<^sub>\<Gamma> ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f ?s : ?b ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta> ; atom ?x \<sharp> (?\<Phi>, ?\<Theta>, ?\<B>, ?\<Gamma>, ?\<Delta>, ?e, ?b)\<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f LET ?x = ?e IN ?s : ?b
\<lbrakk> ?\<Theta> ; ?\<Phi> ; ?\<B> ; (?x, B_bool, ?c) #\<^sub>\<Gamma> ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f ?s : ?b ;  ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?c ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta> ; atom ?x \<sharp> (?\<Phi>, ?\<Theta>, ?\<B>, ?\<Gamma>, ?\<Delta>, ?c, ?b, ?s)\<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f ASSERT ?c IN ?s  : ?b
\<lbrakk> ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f ?s1.0 : b_of ?\<tau> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?\<tau> ;  ?\<Theta> ; ?\<Phi> ; ?\<B> ; (?x, b_of ?\<tau>, TRUE) #\<^sub>\<Gamma> ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f ?s2.0 : ?b ; atom ?x \<sharp> (?\<Phi>, ?\<Theta>, ?\<B>, ?\<Gamma>, ?\<Delta>, ?s1.0, ?b, ?\<tau>)\<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f LET ?x : ?\<tau> = ?s1.0 IN ?s2.0 : ?b
\<lbrakk> ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v : B_bool ;  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f ?s1.0 : ?b ;  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f ?s2.0 : ?b \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f IF ?v THEN ?s1.0 ELSE ?s2.0 : ?b
\<lbrakk> ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?\<tau> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v : b_of ?\<tau> ; atom ?u \<sharp> (?\<Phi>, ?\<Theta>, ?\<B>, ?\<Gamma>, ?\<Delta>, ?\<tau>, ?v, ?b);  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; (?u, ?\<tau>) #\<^sub>\<Delta> ?\<Delta> \<turnstile>\<^sub>w\<^sub>f ?s : ?b \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f VAR ?u : ?\<tau> = ?v IN ?s : ?b
\<lbrakk>(?u, ?\<tau>) \<in> setD ?\<Delta>;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta> ;  ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f ?\<Phi> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v : b_of ?\<tau> \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f ?u ::= ?v : B_unit
\<lbrakk> ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f ?s1.0 : B_bool ;  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f ?s2.0 : ?b \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f WHILE ?s1.0 DO { ?s2.0 }  : ?b
\<lbrakk> ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f ?s1.0 : B_unit ;  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f ?s2.0 : ?b \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f  ?s1.0 ;; ?s2.0  : ?b
\<lbrakk> ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v : B_id ?tid ; AF_typedef ?tid ?dclist \<in> set ?\<Theta>;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta> ;  ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f ?\<Phi> ;  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> ; ?tid ; ?dclist \<turnstile>\<^sub>w\<^sub>f ?cs : ?b \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f MATCH ?v WITH { ?cs } : ?b
\<lbrakk> ?\<Theta> ; ?\<Phi> ; ?\<B> ; (?x, b_of ?\<tau>, TRUE) #\<^sub>\<Gamma> ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f ?s : ?b ; atom ?x \<sharp> (?\<Phi>, ?\<Theta>, ?\<B>, ?\<Gamma>, ?\<Delta>, ?\<Gamma>, ?\<tau>);  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta> \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> ; ?tid ; ?dc ; ?\<tau> \<turnstile>\<^sub>w\<^sub>f  ?dc ?x \<Rightarrow> ?s  : ?b
 ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> ; ?tid ; ?dc ; ?t \<turnstile>\<^sub>w\<^sub>f ?cs : ?b  \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> ; ?tid ; [(?dc, ?t)] \<turnstile>\<^sub>w\<^sub>f { ?cs } : ?b
\<lbrakk> ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> ; ?tid ; ?dc ; ?t \<turnstile>\<^sub>w\<^sub>f ?cs : ?b ;  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> ; ?tid ; ?dclist \<turnstile>\<^sub>w\<^sub>f ?css : ?b \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> ; ?tid ; (?dc, ?t) # ?dclist \<turnstile>\<^sub>w\<^sub>f  ?cs | ?css   : ?b
 ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?\<Gamma>  \<Longrightarrow>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f []\<^sub>\<Delta>
\<lbrakk> ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?\<tau> ; ?u \<notin> fst ` setD ?\<Delta>\<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f (?u, ?\<tau>) #\<^sub>\<Delta> ?\<Delta>
   \<turnstile>\<^sub>w\<^sub>f ?\<Theta>  \<Longrightarrow>  ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f []
\<lbrakk>?f \<notin> name_of_fun ` set ?\<Phi>;  ?\<Theta>  ; ?\<Phi> \<turnstile>\<^sub>w\<^sub>f ?ft ;  ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f ?\<Phi> \<rbrakk> \<Longrightarrow>  ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f AF_fundef ?f ?ft # ?\<Phi>
 ?\<Theta> ; ?\<Phi> ; {||} \<turnstile>\<^sub>w\<^sub>f ?ft  \<Longrightarrow>  ?\<Theta>  ; ?\<Phi> \<turnstile>\<^sub>w\<^sub>f AF_fun_typ_none ?ft
 ?\<Theta> ; ?\<Phi> ; {|?bv|} \<turnstile>\<^sub>w\<^sub>f ?ft  \<Longrightarrow>  ?\<Theta>  ; ?\<Phi> \<turnstile>\<^sub>w\<^sub>f AF_fun_typ_some ?bv ?ft
\<lbrakk> ?\<Theta> ; ?B  \<turnstile>\<^sub>w\<^sub>f ?b ; supp ?s \<subseteq> {atom ?x} \<union> supp ?B; supp ?c \<subseteq> {atom ?x};  ?\<Theta> ; ?B ; (?x, ?b, ?c) #\<^sub>\<Gamma> GNil   \<turnstile>\<^sub>w\<^sub>f ?\<tau> ;  ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f ?\<Phi> \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?B \<turnstile>\<^sub>w\<^sub>f AF_fun_typ ?x ?b ?c ?\<tau> ?s

goal (1 subgoal):
 1.  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta>' \<turnstile>\<^sub>w\<^sub>f [#1v ]\<^sup>e : b_of \<lbrace> z : b1  | [ [ z ]\<^sup>v ]\<^sup>c\<^sup>e  ==  [#1[ v ]\<^sup>c\<^sup>e]\<^sup>c\<^sup>e  \<rbrace>
[PROOF STEP]
by metis
[PROOF STATE]
proof (state)
this:
 \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta>' \<turnstile>\<^sub>w\<^sub>f [#1v ]\<^sup>e : b_of \<lbrace> z : b1  | [ [ z ]\<^sup>v ]\<^sup>c\<^sup>e  ==  [#1[ v ]\<^sup>c\<^sup>e]\<^sup>c\<^sup>e  \<rbrace>

goal (5 subgoals):
 1. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> v z' b1 b2 c z \<tau>. \<lbrakk> \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v \<Rightarrow> \<lbrace> z' : [ b1 , b2 ]\<^sup>b  | c \<rbrace>; atom z \<sharp> [#2v ]\<^sup>e; atom z \<sharp> \<Gamma>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [#2v ]\<^sup>e : b_of \<lbrace> z : b2  | [ [ z ]\<^sup>v ]\<^sup>c\<^sup>e  ==  [#2[ v ]\<^sup>c\<^sup>e]\<^sup>c\<^sup>e  \<rbrace>
 2. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> v z' c z \<tau>. \<lbrakk> \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v \<Rightarrow> \<lbrace> z' : B_bitvec  | c \<rbrace>; atom z \<sharp> [| v |]\<^sup>e; atom z \<sharp> \<Gamma>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [| v |]\<^sup>e : b_of \<lbrace> z : B_int  | [ [ z ]\<^sup>v ]\<^sup>c\<^sup>e  ==  [| [ v ]\<^sup>c\<^sup>e |]\<^sup>c\<^sup>e  \<rbrace>
 3. \<And>\<Theta> \<B> \<Gamma> \<Phi> \<Delta> u \<tau> \<tau>'. \<lbrakk> \<Theta> ; \<B>  \<turnstile>\<^sub>w\<^sub>f \<Gamma> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ; (u, \<tau>) \<in> setD \<Delta>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [ u ]\<^sup>e : b_of \<tau>
 4. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> v1 z1 c1 v2 z2 c2 z3 \<tau>. \<lbrakk> \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v1 \<Rightarrow> \<lbrace> z1 : B_bitvec  | c1 \<rbrace>;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v2 \<Rightarrow> \<lbrace> z2 : B_bitvec  | c2 \<rbrace>; atom z3 \<sharp> [ v1 @@ v2 ]\<^sup>e; atom z3 \<sharp> \<Gamma>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [ v1 @@ v2 ]\<^sup>e : b_of \<lbrace> z3 : B_bitvec  | [ [ z3 ]\<^sup>v ]\<^sup>c\<^sup>e  ==  [ [ v1 ]\<^sup>c\<^sup>e @@ [ v2 ]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e  \<rbrace>
 5. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> v1 z1 c1 v2 z2 z3 \<tau>. \<lbrakk>atom z3 \<sharp> \<tau>; atom z1 \<sharp> \<tau>; atom z2 \<sharp> \<tau>;  \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v1 \<Rightarrow> \<lbrace> z1 : B_bitvec  | c1 \<rbrace>; \<Theta> ; \<B> ; \<Gamma>  \<turnstile> v2 \<Leftarrow> \<lbrace> z2 : B_int  | [ leq [ [ L_num 0 ]\<^sup>v ]\<^sup>c\<^sup>e [ [ z2 ]\<^sup>v ]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e  ==  [ [ L_true ]\<^sup>v ]\<^sup>c\<^sup>e   AND  [ leq [ [ z2 ]\<^sup>v ]\<^sup>c\<^sup>e [| [ v1 ]\<^sup>c\<^sup>e |]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e  ==  [ [ L_true ]\<^sup>v ]\<^sup>c\<^sup>e   \<rbrace>; atom z1 \<sharp> [ v1  v2 ]\<^sup>e; atom z1 \<sharp> \<Gamma>; atom z2 \<sharp> [ v1  v2 ]\<^sup>e; atom z2 \<sharp> \<Gamma>; atom z3 \<sharp> [ v1  v2 ]\<^sup>e; atom z3 \<sharp> \<Gamma>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [ v1  v2 ]\<^sup>e : b_of \<lbrace> z3 : [ B_bitvec , B_bitvec ]\<^sup>b  | [ v1 ]\<^sup>c\<^sup>e  ==  [ [#1[ [ z3 ]\<^sup>v ]\<^sup>c\<^sup>e]\<^sup>c\<^sup>e @@ [#2[ [ z3 ]\<^sup>v ]\<^sup>c\<^sup>e]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e   AND  [| [#1[ [ z3 ]\<^sup>v ]\<^sup>c\<^sup>e]\<^sup>c\<^sup>e |]\<^sup>c\<^sup>e  ==  [ v2 ]\<^sup>c\<^sup>e   \<rbrace>
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (5 subgoals):
 1. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> v z' b1 b2 c z \<tau>. \<lbrakk> \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v \<Rightarrow> \<lbrace> z' : [ b1 , b2 ]\<^sup>b  | c \<rbrace>; atom z \<sharp> [#2v ]\<^sup>e; atom z \<sharp> \<Gamma>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [#2v ]\<^sup>e : b_of \<lbrace> z : b2  | [ [ z ]\<^sup>v ]\<^sup>c\<^sup>e  ==  [#2[ v ]\<^sup>c\<^sup>e]\<^sup>c\<^sup>e  \<rbrace>
 2. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> v z' c z \<tau>. \<lbrakk> \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v \<Rightarrow> \<lbrace> z' : B_bitvec  | c \<rbrace>; atom z \<sharp> [| v |]\<^sup>e; atom z \<sharp> \<Gamma>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [| v |]\<^sup>e : b_of \<lbrace> z : B_int  | [ [ z ]\<^sup>v ]\<^sup>c\<^sup>e  ==  [| [ v ]\<^sup>c\<^sup>e |]\<^sup>c\<^sup>e  \<rbrace>
 3. \<And>\<Theta> \<B> \<Gamma> \<Phi> \<Delta> u \<tau> \<tau>'. \<lbrakk> \<Theta> ; \<B>  \<turnstile>\<^sub>w\<^sub>f \<Gamma> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ; (u, \<tau>) \<in> setD \<Delta>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [ u ]\<^sup>e : b_of \<tau>
 4. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> v1 z1 c1 v2 z2 c2 z3 \<tau>. \<lbrakk> \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v1 \<Rightarrow> \<lbrace> z1 : B_bitvec  | c1 \<rbrace>;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v2 \<Rightarrow> \<lbrace> z2 : B_bitvec  | c2 \<rbrace>; atom z3 \<sharp> [ v1 @@ v2 ]\<^sup>e; atom z3 \<sharp> \<Gamma>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [ v1 @@ v2 ]\<^sup>e : b_of \<lbrace> z3 : B_bitvec  | [ [ z3 ]\<^sup>v ]\<^sup>c\<^sup>e  ==  [ [ v1 ]\<^sup>c\<^sup>e @@ [ v2 ]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e  \<rbrace>
 5. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> v1 z1 c1 v2 z2 z3 \<tau>. \<lbrakk>atom z3 \<sharp> \<tau>; atom z1 \<sharp> \<tau>; atom z2 \<sharp> \<tau>;  \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v1 \<Rightarrow> \<lbrace> z1 : B_bitvec  | c1 \<rbrace>; \<Theta> ; \<B> ; \<Gamma>  \<turnstile> v2 \<Leftarrow> \<lbrace> z2 : B_int  | [ leq [ [ L_num 0 ]\<^sup>v ]\<^sup>c\<^sup>e [ [ z2 ]\<^sup>v ]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e  ==  [ [ L_true ]\<^sup>v ]\<^sup>c\<^sup>e   AND  [ leq [ [ z2 ]\<^sup>v ]\<^sup>c\<^sup>e [| [ v1 ]\<^sup>c\<^sup>e |]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e  ==  [ [ L_true ]\<^sup>v ]\<^sup>c\<^sup>e   \<rbrace>; atom z1 \<sharp> [ v1  v2 ]\<^sup>e; atom z1 \<sharp> \<Gamma>; atom z2 \<sharp> [ v1  v2 ]\<^sup>e; atom z2 \<sharp> \<Gamma>; atom z3 \<sharp> [ v1  v2 ]\<^sup>e; atom z3 \<sharp> \<Gamma>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [ v1  v2 ]\<^sup>e : b_of \<lbrace> z3 : [ B_bitvec , B_bitvec ]\<^sup>b  | [ v1 ]\<^sup>c\<^sup>e  ==  [ [#1[ [ z3 ]\<^sup>v ]\<^sup>c\<^sup>e]\<^sup>c\<^sup>e @@ [#2[ [ z3 ]\<^sup>v ]\<^sup>c\<^sup>e]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e   AND  [| [#1[ [ z3 ]\<^sup>v ]\<^sup>c\<^sup>e]\<^sup>c\<^sup>e |]\<^sup>c\<^sup>e  ==  [ v2 ]\<^sup>c\<^sup>e   \<rbrace>
[PROOF STEP]
case (infer_e_sndI \<Theta> \<B> \<Gamma> \<Delta>' \<Phi> v z' b1 b2 c z)
[PROOF STATE]
proof (state)
this:
 \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta>'
 \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi>
 \<Theta> ; \<B> ; \<Gamma> \<turnstile> v \<Rightarrow> \<lbrace> z' : [ b1 , b2 ]\<^sup>b  | c \<rbrace>
atom z \<sharp> [#2v ]\<^sup>e
atom z \<sharp> \<Gamma>

goal (5 subgoals):
 1. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> v z' b1 b2 c z \<tau>. \<lbrakk> \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v \<Rightarrow> \<lbrace> z' : [ b1 , b2 ]\<^sup>b  | c \<rbrace>; atom z \<sharp> [#2v ]\<^sup>e; atom z \<sharp> \<Gamma>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [#2v ]\<^sup>e : b_of \<lbrace> z : b2  | [ [ z ]\<^sup>v ]\<^sup>c\<^sup>e  ==  [#2[ v ]\<^sup>c\<^sup>e]\<^sup>c\<^sup>e  \<rbrace>
 2. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> v z' c z \<tau>. \<lbrakk> \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v \<Rightarrow> \<lbrace> z' : B_bitvec  | c \<rbrace>; atom z \<sharp> [| v |]\<^sup>e; atom z \<sharp> \<Gamma>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [| v |]\<^sup>e : b_of \<lbrace> z : B_int  | [ [ z ]\<^sup>v ]\<^sup>c\<^sup>e  ==  [| [ v ]\<^sup>c\<^sup>e |]\<^sup>c\<^sup>e  \<rbrace>
 3. \<And>\<Theta> \<B> \<Gamma> \<Phi> \<Delta> u \<tau> \<tau>'. \<lbrakk> \<Theta> ; \<B>  \<turnstile>\<^sub>w\<^sub>f \<Gamma> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ; (u, \<tau>) \<in> setD \<Delta>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [ u ]\<^sup>e : b_of \<tau>
 4. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> v1 z1 c1 v2 z2 c2 z3 \<tau>. \<lbrakk> \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v1 \<Rightarrow> \<lbrace> z1 : B_bitvec  | c1 \<rbrace>;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v2 \<Rightarrow> \<lbrace> z2 : B_bitvec  | c2 \<rbrace>; atom z3 \<sharp> [ v1 @@ v2 ]\<^sup>e; atom z3 \<sharp> \<Gamma>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [ v1 @@ v2 ]\<^sup>e : b_of \<lbrace> z3 : B_bitvec  | [ [ z3 ]\<^sup>v ]\<^sup>c\<^sup>e  ==  [ [ v1 ]\<^sup>c\<^sup>e @@ [ v2 ]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e  \<rbrace>
 5. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> v1 z1 c1 v2 z2 z3 \<tau>. \<lbrakk>atom z3 \<sharp> \<tau>; atom z1 \<sharp> \<tau>; atom z2 \<sharp> \<tau>;  \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v1 \<Rightarrow> \<lbrace> z1 : B_bitvec  | c1 \<rbrace>; \<Theta> ; \<B> ; \<Gamma>  \<turnstile> v2 \<Leftarrow> \<lbrace> z2 : B_int  | [ leq [ [ L_num 0 ]\<^sup>v ]\<^sup>c\<^sup>e [ [ z2 ]\<^sup>v ]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e  ==  [ [ L_true ]\<^sup>v ]\<^sup>c\<^sup>e   AND  [ leq [ [ z2 ]\<^sup>v ]\<^sup>c\<^sup>e [| [ v1 ]\<^sup>c\<^sup>e |]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e  ==  [ [ L_true ]\<^sup>v ]\<^sup>c\<^sup>e   \<rbrace>; atom z1 \<sharp> [ v1  v2 ]\<^sup>e; atom z1 \<sharp> \<Gamma>; atom z2 \<sharp> [ v1  v2 ]\<^sup>e; atom z2 \<sharp> \<Gamma>; atom z3 \<sharp> [ v1  v2 ]\<^sup>e; atom z3 \<sharp> \<Gamma>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [ v1  v2 ]\<^sup>e : b_of \<lbrace> z3 : [ B_bitvec , B_bitvec ]\<^sup>b  | [ v1 ]\<^sup>c\<^sup>e  ==  [ [#1[ [ z3 ]\<^sup>v ]\<^sup>c\<^sup>e]\<^sup>c\<^sup>e @@ [#2[ [ z3 ]\<^sup>v ]\<^sup>c\<^sup>e]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e   AND  [| [#1[ [ z3 ]\<^sup>v ]\<^sup>c\<^sup>e]\<^sup>c\<^sup>e |]\<^sup>c\<^sup>e  ==  [ v2 ]\<^sup>c\<^sup>e   \<rbrace>
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
 \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta>'
 \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi>
 \<Theta> ; \<B> ; \<Gamma> \<turnstile> v \<Rightarrow> \<lbrace> z' : [ b1 , b2 ]\<^sup>b  | c \<rbrace>
atom z \<sharp> [#2v ]\<^sup>e
atom z \<sharp> \<Gamma>
[PROOF STEP]
show ?case
[PROOF STATE]
proof (prove)
using this:
 \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta>'
 \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi>
 \<Theta> ; \<B> ; \<Gamma> \<turnstile> v \<Rightarrow> \<lbrace> z' : [ b1 , b2 ]\<^sup>b  | c \<rbrace>
atom z \<sharp> [#2v ]\<^sup>e
atom z \<sharp> \<Gamma>

goal (1 subgoal):
 1.  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta>' \<turnstile>\<^sub>w\<^sub>f [#2v ]\<^sup>e : b_of \<lbrace> z : b2  | [ [ z ]\<^sup>v ]\<^sup>c\<^sup>e  ==  [#2[ v ]\<^sup>c\<^sup>e]\<^sup>c\<^sup>e  \<rbrace>
[PROOF STEP]
using  b_of.simps infer_v_v_wf wf_intros
[PROOF STATE]
proof (prove)
using this:
 \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta>'
 \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi>
 \<Theta> ; \<B> ; \<Gamma> \<turnstile> v \<Rightarrow> \<lbrace> z' : [ b1 , b2 ]\<^sup>b  | c \<rbrace>
atom z \<sharp> [#2v ]\<^sup>e
atom z \<sharp> \<Gamma>
b_of \<lbrace> ?z : ?b  | ?c \<rbrace> = ?b
 ?\<Theta> ; ?\<B> ; ?G \<turnstile> ?v \<Rightarrow> ?\<tau> \<Longrightarrow>  ?\<Theta> ; ?\<B> ; ?G \<turnstile>\<^sub>w\<^sub>f ?v : b_of ?\<tau>
   \<turnstile>\<^sub>w\<^sub>f ?\<Theta>  \<Longrightarrow>  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f B_int
   \<turnstile>\<^sub>w\<^sub>f ?\<Theta>  \<Longrightarrow>  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f B_bool
   \<turnstile>\<^sub>w\<^sub>f ?\<Theta>  \<Longrightarrow>  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f B_unit
   \<turnstile>\<^sub>w\<^sub>f ?\<Theta>  \<Longrightarrow>  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f B_bitvec
\<lbrakk> ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?b1.0 ;  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?b2.0 \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f [ ?b1.0 , ?b2.0 ]\<^sup>b
\<lbrakk>   \<turnstile>\<^sub>w\<^sub>f ?\<Theta> ; AF_typedef ?s ?dclist \<in> set ?\<Theta>\<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f B_id ?s
\<lbrakk>   \<turnstile>\<^sub>w\<^sub>f ?\<Theta> ;  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?b ; AF_typedef_poly ?s ?bv ?dclist \<in> set ?\<Theta>\<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f B_app ?s ?b
\<lbrakk> ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?\<Gamma> ; Some (?b, ?c) = lookup ?\<Gamma> ?x\<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [ ?x ]\<^sup>v : ?b
 ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?\<Gamma>  \<Longrightarrow>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [ ?l ]\<^sup>v : base_for_lit ?l
\<lbrakk> ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : ?b1.0 ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v2.0 : ?b2.0 \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [ ?v1.0 , ?v2.0 ]\<^sup>v : [ ?b1.0 , ?b2.0 ]\<^sup>b
\<lbrakk>AF_typedef ?s ?dclist \<in> set ?\<Theta>; (?dc, \<lbrace> ?x : ?b'  | ?c \<rbrace>) \<in> set ?dclist;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v : ?b' \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f V_cons ?s ?dc ?v : B_id ?s
\<lbrakk>AF_typedef_poly ?s ?bv ?dclist \<in> set ?\<Theta>; (?dc, \<lbrace> ?x : ?b'  | ?c \<rbrace>) \<in> set ?dclist;  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?b ; atom ?bv \<sharp> (?\<Theta>, ?\<B>, ?\<Gamma>, ?b, ?v);  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v : ?b'[?bv::=?b]\<^sub>b\<^sub>b \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f V_consp ?s ?dc ?b ?v : B_app ?s ?b
 ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v : ?b  \<Longrightarrow>   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [ ?v ]\<^sup>c\<^sup>e : ?b
\<lbrakk>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : B_int ;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v2.0 : B_int \<rbrakk> \<Longrightarrow>   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [ plus ?v1.0 ?v2.0 ]\<^sup>c\<^sup>e : B_int
\<lbrakk>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : B_int ;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v2.0 : B_int \<rbrakk> \<Longrightarrow>   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [ leq ?v1.0 ?v2.0 ]\<^sup>c\<^sup>e : B_bool
\<lbrakk>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : ?b ;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v2.0 : ?b \<rbrakk> \<Longrightarrow>   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [ eq ?v1.0 ?v2.0 ]\<^sup>c\<^sup>e : B_bool
  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : [ ?b1.0 , ?b2.0 ]\<^sup>b  \<Longrightarrow>   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [#1?v1.0]\<^sup>c\<^sup>e : ?b1.0
  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : [ ?b1.0 , ?b2.0 ]\<^sup>b  \<Longrightarrow>   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [#2?v1.0]\<^sup>c\<^sup>e : ?b2.0
\<lbrakk>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : B_bitvec ;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v2.0 : B_bitvec \<rbrakk> \<Longrightarrow>   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [ ?v1.0 @@ ?v2.0 ]\<^sup>c\<^sup>e : B_bitvec
  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : B_bitvec  \<Longrightarrow>   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [| ?v1.0 |]\<^sup>c\<^sup>e : B_int
\<lbrakk>atom ?z \<sharp> (?\<Theta>, ?\<B>, ?\<Gamma>);  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?b ;  ?\<Theta> ; ?\<B> ; (?z, ?b, TRUE) #\<^sub>\<Gamma> ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?c \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f \<lbrace> ?z : ?b  | ?c \<rbrace>
\<lbrakk>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?e1.0 : ?b ;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?e2.0 : ?b \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?e1.0  ==  ?e2.0
 ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?\<Gamma>  \<Longrightarrow>  ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f TRUE
 ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?\<Gamma>  \<Longrightarrow>  ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f FALSE
\<lbrakk> ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?c1.0 ;  ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?c2.0 \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?c1.0  AND  ?c2.0
\<lbrakk> ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?c1.0 ;  ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?c2.0 \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?c1.0 OR ?c2.0
 ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?c1.0  \<Longrightarrow>  ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f \<not> ?c1.0
\<lbrakk> ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?c1.0 ;  ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?c2.0 \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?c1.0  IMP  ?c2.0
   \<turnstile>\<^sub>w\<^sub>f ?\<Theta>  \<Longrightarrow>  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f GNil
\<lbrakk>?c \<notin> {TRUE, FALSE};  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?\<Gamma> ; atom ?x \<sharp> ?\<Gamma>;  ?\<Theta> ; ?\<B> ; (?x, ?b, TRUE) #\<^sub>\<Gamma> ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?c ;  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?b \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f (?x, ?b, ?c) #\<^sub>\<Gamma> ?\<Gamma>
\<lbrakk>?c \<in> {TRUE, FALSE};  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?\<Gamma> ; atom ?x \<sharp> ?\<Gamma>;  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?b \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f (?x, ?b, ?c) #\<^sub>\<Gamma> ?\<Gamma>
   \<turnstile>\<^sub>w\<^sub>f []
\<lbrakk>name_of_type ?tdef \<notin> name_of_type ` set ?\<Theta>;    \<turnstile>\<^sub>w\<^sub>f ?\<Theta> ;  ?\<Theta> \<turnstile>\<^sub>w\<^sub>f ?tdef \<rbrakk> \<Longrightarrow>    \<turnstile>\<^sub>w\<^sub>f ?tdef # ?\<Theta>
 ?\<Theta> ; {||}  ; GNil \<turnstile>\<^sub>w\<^sub>f ?lst  \<Longrightarrow>  ?\<Theta> \<turnstile>\<^sub>w\<^sub>f AF_typedef ?s ?lst
 ?\<Theta> ; {|?bv|}  ; GNil \<turnstile>\<^sub>w\<^sub>f ?lst  \<Longrightarrow>  ?\<Theta> \<turnstile>\<^sub>w\<^sub>f AF_typedef_poly ?s ?bv ?lst
 ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?\<Gamma>  \<Longrightarrow>  ?\<Theta> ; ?\<B>  ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f []
\<lbrakk> ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?\<tau> ; ?dc \<notin> fst ` set ?ts;  ?\<Theta> ; ?\<B>  ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?ts \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<B>  ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f (?dc, ?\<tau>) # ?ts
\<lbrakk> ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f ?\<Phi> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v : ?b \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f [ ?v ]\<^sup>e : ?b
\<lbrakk> ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f ?\<Phi> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : B_int ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v2.0 : B_int \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f [ plus ?v1.0 ?v2.0 ]\<^sup>e : B_int
\<lbrakk> ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f ?\<Phi> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : B_int ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v2.0 : B_int \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f [ leq ?v1.0 ?v2.0 ]\<^sup>e : B_bool
\<lbrakk> ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f ?\<Phi> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : ?b ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v2.0 : ?b ; ?b \<in> {B_bool, B_int, B_unit}\<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f [ eq ?v1.0 ?v2.0 ]\<^sup>e : B_bool
\<lbrakk> ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f ?\<Phi> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : [ ?b1.0 , ?b2.0 ]\<^sup>b \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f [#1?v1.0 ]\<^sup>e : ?b1.0
\<lbrakk> ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f ?\<Phi> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : [ ?b1.0 , ?b2.0 ]\<^sup>b \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f [#2?v1.0 ]\<^sup>e : ?b2.0
\<lbrakk> ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f ?\<Phi> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : B_bitvec ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v2.0 : B_bitvec \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f [ ?v1.0 @@ ?v2.0 ]\<^sup>e : B_bitvec
\<lbrakk> ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f ?\<Phi> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : B_bitvec ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v2.0 : B_int \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f [ ?v1.0  ?v2.0 ]\<^sup>e : [ B_bitvec , B_bitvec ]\<^sup>b
\<lbrakk> ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f ?\<Phi> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : B_bitvec \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f [| ?v1.0 |]\<^sup>e : B_int
\<lbrakk> ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f ?\<Phi> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta> ; Some (AF_fundef ?f (AF_fun_typ_none (AF_fun_typ ?x ?b ?c ?\<tau> ?s))) = lookup_fun ?\<Phi> ?f;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v : ?b \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f [ ?f  ?v  ]\<^sup>e : b_of ?\<tau>
\<lbrakk> ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f ?\<Phi> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta> ;  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?b' ; atom ?bv \<sharp> (?\<Phi>, ?\<Theta>, ?\<B>, ?\<Gamma>, ?\<Delta>, ?b', ?v, (b_of ?\<tau>)[?bv::=?b']\<^sub>b); Some (AF_fundef ?f (AF_fun_typ_some ?bv (AF_fun_typ ?x ?b ?c ?\<tau> ?s))) = lookup_fun ?\<Phi> ?f;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v : ?b[?bv::=?b']\<^sub>b \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f [?f [ ?b' ]  ?v ]\<^sup>e : (b_of ?\<tau>)[?bv::=?b']\<^sub>b
\<lbrakk> ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f ?\<Phi> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta> ; (?u, ?\<tau>) \<in> setD ?\<Delta>\<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f [ ?u ]\<^sup>e : b_of ?\<tau>
\<lbrakk> ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f ?\<Phi> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v : ?b ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta> \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f [?v]\<^sup>s : ?b
\<lbrakk> ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f ?e : ?b' ;  ?\<Theta> ; ?\<Phi> ; ?\<B> ; (?x, ?b', TRUE) #\<^sub>\<Gamma> ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f ?s : ?b ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta> ; atom ?x \<sharp> (?\<Phi>, ?\<Theta>, ?\<B>, ?\<Gamma>, ?\<Delta>, ?e, ?b)\<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f LET ?x = ?e IN ?s : ?b
\<lbrakk> ?\<Theta> ; ?\<Phi> ; ?\<B> ; (?x, B_bool, ?c) #\<^sub>\<Gamma> ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f ?s : ?b ;  ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?c ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta> ; atom ?x \<sharp> (?\<Phi>, ?\<Theta>, ?\<B>, ?\<Gamma>, ?\<Delta>, ?c, ?b, ?s)\<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f ASSERT ?c IN ?s  : ?b
\<lbrakk> ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f ?s1.0 : b_of ?\<tau> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?\<tau> ;  ?\<Theta> ; ?\<Phi> ; ?\<B> ; (?x, b_of ?\<tau>, TRUE) #\<^sub>\<Gamma> ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f ?s2.0 : ?b ; atom ?x \<sharp> (?\<Phi>, ?\<Theta>, ?\<B>, ?\<Gamma>, ?\<Delta>, ?s1.0, ?b, ?\<tau>)\<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f LET ?x : ?\<tau> = ?s1.0 IN ?s2.0 : ?b
\<lbrakk> ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v : B_bool ;  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f ?s1.0 : ?b ;  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f ?s2.0 : ?b \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f IF ?v THEN ?s1.0 ELSE ?s2.0 : ?b
\<lbrakk> ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?\<tau> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v : b_of ?\<tau> ; atom ?u \<sharp> (?\<Phi>, ?\<Theta>, ?\<B>, ?\<Gamma>, ?\<Delta>, ?\<tau>, ?v, ?b);  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; (?u, ?\<tau>) #\<^sub>\<Delta> ?\<Delta> \<turnstile>\<^sub>w\<^sub>f ?s : ?b \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f VAR ?u : ?\<tau> = ?v IN ?s : ?b
\<lbrakk>(?u, ?\<tau>) \<in> setD ?\<Delta>;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta> ;  ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f ?\<Phi> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v : b_of ?\<tau> \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f ?u ::= ?v : B_unit
\<lbrakk> ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f ?s1.0 : B_bool ;  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f ?s2.0 : ?b \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f WHILE ?s1.0 DO { ?s2.0 }  : ?b
\<lbrakk> ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f ?s1.0 : B_unit ;  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f ?s2.0 : ?b \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f  ?s1.0 ;; ?s2.0  : ?b
\<lbrakk> ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v : B_id ?tid ; AF_typedef ?tid ?dclist \<in> set ?\<Theta>;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta> ;  ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f ?\<Phi> ;  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> ; ?tid ; ?dclist \<turnstile>\<^sub>w\<^sub>f ?cs : ?b \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f MATCH ?v WITH { ?cs } : ?b
\<lbrakk> ?\<Theta> ; ?\<Phi> ; ?\<B> ; (?x, b_of ?\<tau>, TRUE) #\<^sub>\<Gamma> ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f ?s : ?b ; atom ?x \<sharp> (?\<Phi>, ?\<Theta>, ?\<B>, ?\<Gamma>, ?\<Delta>, ?\<Gamma>, ?\<tau>);  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta> \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> ; ?tid ; ?dc ; ?\<tau> \<turnstile>\<^sub>w\<^sub>f  ?dc ?x \<Rightarrow> ?s  : ?b
 ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> ; ?tid ; ?dc ; ?t \<turnstile>\<^sub>w\<^sub>f ?cs : ?b  \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> ; ?tid ; [(?dc, ?t)] \<turnstile>\<^sub>w\<^sub>f { ?cs } : ?b
\<lbrakk> ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> ; ?tid ; ?dc ; ?t \<turnstile>\<^sub>w\<^sub>f ?cs : ?b ;  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> ; ?tid ; ?dclist \<turnstile>\<^sub>w\<^sub>f ?css : ?b \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> ; ?tid ; (?dc, ?t) # ?dclist \<turnstile>\<^sub>w\<^sub>f  ?cs | ?css   : ?b
 ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?\<Gamma>  \<Longrightarrow>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f []\<^sub>\<Delta>
\<lbrakk> ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?\<tau> ; ?u \<notin> fst ` setD ?\<Delta>\<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f (?u, ?\<tau>) #\<^sub>\<Delta> ?\<Delta>
   \<turnstile>\<^sub>w\<^sub>f ?\<Theta>  \<Longrightarrow>  ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f []
\<lbrakk>?f \<notin> name_of_fun ` set ?\<Phi>;  ?\<Theta>  ; ?\<Phi> \<turnstile>\<^sub>w\<^sub>f ?ft ;  ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f ?\<Phi> \<rbrakk> \<Longrightarrow>  ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f AF_fundef ?f ?ft # ?\<Phi>
 ?\<Theta> ; ?\<Phi> ; {||} \<turnstile>\<^sub>w\<^sub>f ?ft  \<Longrightarrow>  ?\<Theta>  ; ?\<Phi> \<turnstile>\<^sub>w\<^sub>f AF_fun_typ_none ?ft
 ?\<Theta> ; ?\<Phi> ; {|?bv|} \<turnstile>\<^sub>w\<^sub>f ?ft  \<Longrightarrow>  ?\<Theta>  ; ?\<Phi> \<turnstile>\<^sub>w\<^sub>f AF_fun_typ_some ?bv ?ft
\<lbrakk> ?\<Theta> ; ?B  \<turnstile>\<^sub>w\<^sub>f ?b ; supp ?s \<subseteq> {atom ?x} \<union> supp ?B; supp ?c \<subseteq> {atom ?x};  ?\<Theta> ; ?B ; (?x, ?b, ?c) #\<^sub>\<Gamma> GNil   \<turnstile>\<^sub>w\<^sub>f ?\<tau> ;  ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f ?\<Phi> \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?B \<turnstile>\<^sub>w\<^sub>f AF_fun_typ ?x ?b ?c ?\<tau> ?s

goal (1 subgoal):
 1.  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta>' \<turnstile>\<^sub>w\<^sub>f [#2v ]\<^sup>e : b_of \<lbrace> z : b2  | [ [ z ]\<^sup>v ]\<^sup>c\<^sup>e  ==  [#2[ v ]\<^sup>c\<^sup>e]\<^sup>c\<^sup>e  \<rbrace>
[PROOF STEP]
by metis
[PROOF STATE]
proof (state)
this:
 \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta>' \<turnstile>\<^sub>w\<^sub>f [#2v ]\<^sup>e : b_of \<lbrace> z : b2  | [ [ z ]\<^sup>v ]\<^sup>c\<^sup>e  ==  [#2[ v ]\<^sup>c\<^sup>e]\<^sup>c\<^sup>e  \<rbrace>

goal (4 subgoals):
 1. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> v z' c z \<tau>. \<lbrakk> \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v \<Rightarrow> \<lbrace> z' : B_bitvec  | c \<rbrace>; atom z \<sharp> [| v |]\<^sup>e; atom z \<sharp> \<Gamma>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [| v |]\<^sup>e : b_of \<lbrace> z : B_int  | [ [ z ]\<^sup>v ]\<^sup>c\<^sup>e  ==  [| [ v ]\<^sup>c\<^sup>e |]\<^sup>c\<^sup>e  \<rbrace>
 2. \<And>\<Theta> \<B> \<Gamma> \<Phi> \<Delta> u \<tau> \<tau>'. \<lbrakk> \<Theta> ; \<B>  \<turnstile>\<^sub>w\<^sub>f \<Gamma> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ; (u, \<tau>) \<in> setD \<Delta>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [ u ]\<^sup>e : b_of \<tau>
 3. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> v1 z1 c1 v2 z2 c2 z3 \<tau>. \<lbrakk> \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v1 \<Rightarrow> \<lbrace> z1 : B_bitvec  | c1 \<rbrace>;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v2 \<Rightarrow> \<lbrace> z2 : B_bitvec  | c2 \<rbrace>; atom z3 \<sharp> [ v1 @@ v2 ]\<^sup>e; atom z3 \<sharp> \<Gamma>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [ v1 @@ v2 ]\<^sup>e : b_of \<lbrace> z3 : B_bitvec  | [ [ z3 ]\<^sup>v ]\<^sup>c\<^sup>e  ==  [ [ v1 ]\<^sup>c\<^sup>e @@ [ v2 ]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e  \<rbrace>
 4. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> v1 z1 c1 v2 z2 z3 \<tau>. \<lbrakk>atom z3 \<sharp> \<tau>; atom z1 \<sharp> \<tau>; atom z2 \<sharp> \<tau>;  \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v1 \<Rightarrow> \<lbrace> z1 : B_bitvec  | c1 \<rbrace>; \<Theta> ; \<B> ; \<Gamma>  \<turnstile> v2 \<Leftarrow> \<lbrace> z2 : B_int  | [ leq [ [ L_num 0 ]\<^sup>v ]\<^sup>c\<^sup>e [ [ z2 ]\<^sup>v ]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e  ==  [ [ L_true ]\<^sup>v ]\<^sup>c\<^sup>e   AND  [ leq [ [ z2 ]\<^sup>v ]\<^sup>c\<^sup>e [| [ v1 ]\<^sup>c\<^sup>e |]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e  ==  [ [ L_true ]\<^sup>v ]\<^sup>c\<^sup>e   \<rbrace>; atom z1 \<sharp> [ v1  v2 ]\<^sup>e; atom z1 \<sharp> \<Gamma>; atom z2 \<sharp> [ v1  v2 ]\<^sup>e; atom z2 \<sharp> \<Gamma>; atom z3 \<sharp> [ v1  v2 ]\<^sup>e; atom z3 \<sharp> \<Gamma>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [ v1  v2 ]\<^sup>e : b_of \<lbrace> z3 : [ B_bitvec , B_bitvec ]\<^sup>b  | [ v1 ]\<^sup>c\<^sup>e  ==  [ [#1[ [ z3 ]\<^sup>v ]\<^sup>c\<^sup>e]\<^sup>c\<^sup>e @@ [#2[ [ z3 ]\<^sup>v ]\<^sup>c\<^sup>e]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e   AND  [| [#1[ [ z3 ]\<^sup>v ]\<^sup>c\<^sup>e]\<^sup>c\<^sup>e |]\<^sup>c\<^sup>e  ==  [ v2 ]\<^sup>c\<^sup>e   \<rbrace>
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (4 subgoals):
 1. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> v z' c z \<tau>. \<lbrakk> \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v \<Rightarrow> \<lbrace> z' : B_bitvec  | c \<rbrace>; atom z \<sharp> [| v |]\<^sup>e; atom z \<sharp> \<Gamma>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [| v |]\<^sup>e : b_of \<lbrace> z : B_int  | [ [ z ]\<^sup>v ]\<^sup>c\<^sup>e  ==  [| [ v ]\<^sup>c\<^sup>e |]\<^sup>c\<^sup>e  \<rbrace>
 2. \<And>\<Theta> \<B> \<Gamma> \<Phi> \<Delta> u \<tau> \<tau>'. \<lbrakk> \<Theta> ; \<B>  \<turnstile>\<^sub>w\<^sub>f \<Gamma> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ; (u, \<tau>) \<in> setD \<Delta>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [ u ]\<^sup>e : b_of \<tau>
 3. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> v1 z1 c1 v2 z2 c2 z3 \<tau>. \<lbrakk> \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v1 \<Rightarrow> \<lbrace> z1 : B_bitvec  | c1 \<rbrace>;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v2 \<Rightarrow> \<lbrace> z2 : B_bitvec  | c2 \<rbrace>; atom z3 \<sharp> [ v1 @@ v2 ]\<^sup>e; atom z3 \<sharp> \<Gamma>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [ v1 @@ v2 ]\<^sup>e : b_of \<lbrace> z3 : B_bitvec  | [ [ z3 ]\<^sup>v ]\<^sup>c\<^sup>e  ==  [ [ v1 ]\<^sup>c\<^sup>e @@ [ v2 ]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e  \<rbrace>
 4. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> v1 z1 c1 v2 z2 z3 \<tau>. \<lbrakk>atom z3 \<sharp> \<tau>; atom z1 \<sharp> \<tau>; atom z2 \<sharp> \<tau>;  \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v1 \<Rightarrow> \<lbrace> z1 : B_bitvec  | c1 \<rbrace>; \<Theta> ; \<B> ; \<Gamma>  \<turnstile> v2 \<Leftarrow> \<lbrace> z2 : B_int  | [ leq [ [ L_num 0 ]\<^sup>v ]\<^sup>c\<^sup>e [ [ z2 ]\<^sup>v ]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e  ==  [ [ L_true ]\<^sup>v ]\<^sup>c\<^sup>e   AND  [ leq [ [ z2 ]\<^sup>v ]\<^sup>c\<^sup>e [| [ v1 ]\<^sup>c\<^sup>e |]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e  ==  [ [ L_true ]\<^sup>v ]\<^sup>c\<^sup>e   \<rbrace>; atom z1 \<sharp> [ v1  v2 ]\<^sup>e; atom z1 \<sharp> \<Gamma>; atom z2 \<sharp> [ v1  v2 ]\<^sup>e; atom z2 \<sharp> \<Gamma>; atom z3 \<sharp> [ v1  v2 ]\<^sup>e; atom z3 \<sharp> \<Gamma>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [ v1  v2 ]\<^sup>e : b_of \<lbrace> z3 : [ B_bitvec , B_bitvec ]\<^sup>b  | [ v1 ]\<^sup>c\<^sup>e  ==  [ [#1[ [ z3 ]\<^sup>v ]\<^sup>c\<^sup>e]\<^sup>c\<^sup>e @@ [#2[ [ z3 ]\<^sup>v ]\<^sup>c\<^sup>e]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e   AND  [| [#1[ [ z3 ]\<^sup>v ]\<^sup>c\<^sup>e]\<^sup>c\<^sup>e |]\<^sup>c\<^sup>e  ==  [ v2 ]\<^sup>c\<^sup>e   \<rbrace>
[PROOF STEP]
case (infer_e_lenI \<Theta> \<B> \<Gamma> \<Delta>' \<Phi> v z' c z)
[PROOF STATE]
proof (state)
this:
 \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta>'
 \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi>
 \<Theta> ; \<B> ; \<Gamma> \<turnstile> v \<Rightarrow> \<lbrace> z' : B_bitvec  | c \<rbrace>
atom z \<sharp> [| v |]\<^sup>e
atom z \<sharp> \<Gamma>

goal (4 subgoals):
 1. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> v z' c z \<tau>. \<lbrakk> \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v \<Rightarrow> \<lbrace> z' : B_bitvec  | c \<rbrace>; atom z \<sharp> [| v |]\<^sup>e; atom z \<sharp> \<Gamma>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [| v |]\<^sup>e : b_of \<lbrace> z : B_int  | [ [ z ]\<^sup>v ]\<^sup>c\<^sup>e  ==  [| [ v ]\<^sup>c\<^sup>e |]\<^sup>c\<^sup>e  \<rbrace>
 2. \<And>\<Theta> \<B> \<Gamma> \<Phi> \<Delta> u \<tau> \<tau>'. \<lbrakk> \<Theta> ; \<B>  \<turnstile>\<^sub>w\<^sub>f \<Gamma> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ; (u, \<tau>) \<in> setD \<Delta>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [ u ]\<^sup>e : b_of \<tau>
 3. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> v1 z1 c1 v2 z2 c2 z3 \<tau>. \<lbrakk> \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v1 \<Rightarrow> \<lbrace> z1 : B_bitvec  | c1 \<rbrace>;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v2 \<Rightarrow> \<lbrace> z2 : B_bitvec  | c2 \<rbrace>; atom z3 \<sharp> [ v1 @@ v2 ]\<^sup>e; atom z3 \<sharp> \<Gamma>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [ v1 @@ v2 ]\<^sup>e : b_of \<lbrace> z3 : B_bitvec  | [ [ z3 ]\<^sup>v ]\<^sup>c\<^sup>e  ==  [ [ v1 ]\<^sup>c\<^sup>e @@ [ v2 ]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e  \<rbrace>
 4. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> v1 z1 c1 v2 z2 z3 \<tau>. \<lbrakk>atom z3 \<sharp> \<tau>; atom z1 \<sharp> \<tau>; atom z2 \<sharp> \<tau>;  \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v1 \<Rightarrow> \<lbrace> z1 : B_bitvec  | c1 \<rbrace>; \<Theta> ; \<B> ; \<Gamma>  \<turnstile> v2 \<Leftarrow> \<lbrace> z2 : B_int  | [ leq [ [ L_num 0 ]\<^sup>v ]\<^sup>c\<^sup>e [ [ z2 ]\<^sup>v ]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e  ==  [ [ L_true ]\<^sup>v ]\<^sup>c\<^sup>e   AND  [ leq [ [ z2 ]\<^sup>v ]\<^sup>c\<^sup>e [| [ v1 ]\<^sup>c\<^sup>e |]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e  ==  [ [ L_true ]\<^sup>v ]\<^sup>c\<^sup>e   \<rbrace>; atom z1 \<sharp> [ v1  v2 ]\<^sup>e; atom z1 \<sharp> \<Gamma>; atom z2 \<sharp> [ v1  v2 ]\<^sup>e; atom z2 \<sharp> \<Gamma>; atom z3 \<sharp> [ v1  v2 ]\<^sup>e; atom z3 \<sharp> \<Gamma>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [ v1  v2 ]\<^sup>e : b_of \<lbrace> z3 : [ B_bitvec , B_bitvec ]\<^sup>b  | [ v1 ]\<^sup>c\<^sup>e  ==  [ [#1[ [ z3 ]\<^sup>v ]\<^sup>c\<^sup>e]\<^sup>c\<^sup>e @@ [#2[ [ z3 ]\<^sup>v ]\<^sup>c\<^sup>e]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e   AND  [| [#1[ [ z3 ]\<^sup>v ]\<^sup>c\<^sup>e]\<^sup>c\<^sup>e |]\<^sup>c\<^sup>e  ==  [ v2 ]\<^sup>c\<^sup>e   \<rbrace>
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
 \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta>'
 \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi>
 \<Theta> ; \<B> ; \<Gamma> \<turnstile> v \<Rightarrow> \<lbrace> z' : B_bitvec  | c \<rbrace>
atom z \<sharp> [| v |]\<^sup>e
atom z \<sharp> \<Gamma>
[PROOF STEP]
show ?case
[PROOF STATE]
proof (prove)
using this:
 \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta>'
 \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi>
 \<Theta> ; \<B> ; \<Gamma> \<turnstile> v \<Rightarrow> \<lbrace> z' : B_bitvec  | c \<rbrace>
atom z \<sharp> [| v |]\<^sup>e
atom z \<sharp> \<Gamma>

goal (1 subgoal):
 1.  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta>' \<turnstile>\<^sub>w\<^sub>f [| v |]\<^sup>e : b_of \<lbrace> z : B_int  | [ [ z ]\<^sup>v ]\<^sup>c\<^sup>e  ==  [| [ v ]\<^sup>c\<^sup>e |]\<^sup>c\<^sup>e  \<rbrace>
[PROOF STEP]
using  b_of.simps infer_v_v_wf wf_intros
[PROOF STATE]
proof (prove)
using this:
 \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta>'
 \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi>
 \<Theta> ; \<B> ; \<Gamma> \<turnstile> v \<Rightarrow> \<lbrace> z' : B_bitvec  | c \<rbrace>
atom z \<sharp> [| v |]\<^sup>e
atom z \<sharp> \<Gamma>
b_of \<lbrace> ?z : ?b  | ?c \<rbrace> = ?b
 ?\<Theta> ; ?\<B> ; ?G \<turnstile> ?v \<Rightarrow> ?\<tau> \<Longrightarrow>  ?\<Theta> ; ?\<B> ; ?G \<turnstile>\<^sub>w\<^sub>f ?v : b_of ?\<tau>
   \<turnstile>\<^sub>w\<^sub>f ?\<Theta>  \<Longrightarrow>  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f B_int
   \<turnstile>\<^sub>w\<^sub>f ?\<Theta>  \<Longrightarrow>  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f B_bool
   \<turnstile>\<^sub>w\<^sub>f ?\<Theta>  \<Longrightarrow>  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f B_unit
   \<turnstile>\<^sub>w\<^sub>f ?\<Theta>  \<Longrightarrow>  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f B_bitvec
\<lbrakk> ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?b1.0 ;  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?b2.0 \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f [ ?b1.0 , ?b2.0 ]\<^sup>b
\<lbrakk>   \<turnstile>\<^sub>w\<^sub>f ?\<Theta> ; AF_typedef ?s ?dclist \<in> set ?\<Theta>\<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f B_id ?s
\<lbrakk>   \<turnstile>\<^sub>w\<^sub>f ?\<Theta> ;  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?b ; AF_typedef_poly ?s ?bv ?dclist \<in> set ?\<Theta>\<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f B_app ?s ?b
\<lbrakk> ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?\<Gamma> ; Some (?b, ?c) = lookup ?\<Gamma> ?x\<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [ ?x ]\<^sup>v : ?b
 ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?\<Gamma>  \<Longrightarrow>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [ ?l ]\<^sup>v : base_for_lit ?l
\<lbrakk> ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : ?b1.0 ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v2.0 : ?b2.0 \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [ ?v1.0 , ?v2.0 ]\<^sup>v : [ ?b1.0 , ?b2.0 ]\<^sup>b
\<lbrakk>AF_typedef ?s ?dclist \<in> set ?\<Theta>; (?dc, \<lbrace> ?x : ?b'  | ?c \<rbrace>) \<in> set ?dclist;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v : ?b' \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f V_cons ?s ?dc ?v : B_id ?s
\<lbrakk>AF_typedef_poly ?s ?bv ?dclist \<in> set ?\<Theta>; (?dc, \<lbrace> ?x : ?b'  | ?c \<rbrace>) \<in> set ?dclist;  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?b ; atom ?bv \<sharp> (?\<Theta>, ?\<B>, ?\<Gamma>, ?b, ?v);  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v : ?b'[?bv::=?b]\<^sub>b\<^sub>b \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f V_consp ?s ?dc ?b ?v : B_app ?s ?b
 ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v : ?b  \<Longrightarrow>   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [ ?v ]\<^sup>c\<^sup>e : ?b
\<lbrakk>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : B_int ;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v2.0 : B_int \<rbrakk> \<Longrightarrow>   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [ plus ?v1.0 ?v2.0 ]\<^sup>c\<^sup>e : B_int
\<lbrakk>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : B_int ;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v2.0 : B_int \<rbrakk> \<Longrightarrow>   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [ leq ?v1.0 ?v2.0 ]\<^sup>c\<^sup>e : B_bool
\<lbrakk>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : ?b ;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v2.0 : ?b \<rbrakk> \<Longrightarrow>   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [ eq ?v1.0 ?v2.0 ]\<^sup>c\<^sup>e : B_bool
  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : [ ?b1.0 , ?b2.0 ]\<^sup>b  \<Longrightarrow>   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [#1?v1.0]\<^sup>c\<^sup>e : ?b1.0
  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : [ ?b1.0 , ?b2.0 ]\<^sup>b  \<Longrightarrow>   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [#2?v1.0]\<^sup>c\<^sup>e : ?b2.0
\<lbrakk>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : B_bitvec ;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v2.0 : B_bitvec \<rbrakk> \<Longrightarrow>   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [ ?v1.0 @@ ?v2.0 ]\<^sup>c\<^sup>e : B_bitvec
  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : B_bitvec  \<Longrightarrow>   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [| ?v1.0 |]\<^sup>c\<^sup>e : B_int
\<lbrakk>atom ?z \<sharp> (?\<Theta>, ?\<B>, ?\<Gamma>);  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?b ;  ?\<Theta> ; ?\<B> ; (?z, ?b, TRUE) #\<^sub>\<Gamma> ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?c \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f \<lbrace> ?z : ?b  | ?c \<rbrace>
\<lbrakk>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?e1.0 : ?b ;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?e2.0 : ?b \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?e1.0  ==  ?e2.0
 ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?\<Gamma>  \<Longrightarrow>  ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f TRUE
 ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?\<Gamma>  \<Longrightarrow>  ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f FALSE
\<lbrakk> ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?c1.0 ;  ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?c2.0 \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?c1.0  AND  ?c2.0
\<lbrakk> ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?c1.0 ;  ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?c2.0 \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?c1.0 OR ?c2.0
 ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?c1.0  \<Longrightarrow>  ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f \<not> ?c1.0
\<lbrakk> ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?c1.0 ;  ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?c2.0 \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?c1.0  IMP  ?c2.0
   \<turnstile>\<^sub>w\<^sub>f ?\<Theta>  \<Longrightarrow>  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f GNil
\<lbrakk>?c \<notin> {TRUE, FALSE};  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?\<Gamma> ; atom ?x \<sharp> ?\<Gamma>;  ?\<Theta> ; ?\<B> ; (?x, ?b, TRUE) #\<^sub>\<Gamma> ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?c ;  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?b \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f (?x, ?b, ?c) #\<^sub>\<Gamma> ?\<Gamma>
\<lbrakk>?c \<in> {TRUE, FALSE};  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?\<Gamma> ; atom ?x \<sharp> ?\<Gamma>;  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?b \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f (?x, ?b, ?c) #\<^sub>\<Gamma> ?\<Gamma>
   \<turnstile>\<^sub>w\<^sub>f []
\<lbrakk>name_of_type ?tdef \<notin> name_of_type ` set ?\<Theta>;    \<turnstile>\<^sub>w\<^sub>f ?\<Theta> ;  ?\<Theta> \<turnstile>\<^sub>w\<^sub>f ?tdef \<rbrakk> \<Longrightarrow>    \<turnstile>\<^sub>w\<^sub>f ?tdef # ?\<Theta>
 ?\<Theta> ; {||}  ; GNil \<turnstile>\<^sub>w\<^sub>f ?lst  \<Longrightarrow>  ?\<Theta> \<turnstile>\<^sub>w\<^sub>f AF_typedef ?s ?lst
 ?\<Theta> ; {|?bv|}  ; GNil \<turnstile>\<^sub>w\<^sub>f ?lst  \<Longrightarrow>  ?\<Theta> \<turnstile>\<^sub>w\<^sub>f AF_typedef_poly ?s ?bv ?lst
 ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?\<Gamma>  \<Longrightarrow>  ?\<Theta> ; ?\<B>  ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f []
\<lbrakk> ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?\<tau> ; ?dc \<notin> fst ` set ?ts;  ?\<Theta> ; ?\<B>  ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?ts \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<B>  ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f (?dc, ?\<tau>) # ?ts
\<lbrakk> ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f ?\<Phi> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v : ?b \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f [ ?v ]\<^sup>e : ?b
\<lbrakk> ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f ?\<Phi> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : B_int ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v2.0 : B_int \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f [ plus ?v1.0 ?v2.0 ]\<^sup>e : B_int
\<lbrakk> ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f ?\<Phi> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : B_int ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v2.0 : B_int \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f [ leq ?v1.0 ?v2.0 ]\<^sup>e : B_bool
\<lbrakk> ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f ?\<Phi> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : ?b ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v2.0 : ?b ; ?b \<in> {B_bool, B_int, B_unit}\<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f [ eq ?v1.0 ?v2.0 ]\<^sup>e : B_bool
\<lbrakk> ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f ?\<Phi> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : [ ?b1.0 , ?b2.0 ]\<^sup>b \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f [#1?v1.0 ]\<^sup>e : ?b1.0
\<lbrakk> ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f ?\<Phi> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : [ ?b1.0 , ?b2.0 ]\<^sup>b \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f [#2?v1.0 ]\<^sup>e : ?b2.0
\<lbrakk> ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f ?\<Phi> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : B_bitvec ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v2.0 : B_bitvec \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f [ ?v1.0 @@ ?v2.0 ]\<^sup>e : B_bitvec
\<lbrakk> ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f ?\<Phi> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : B_bitvec ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v2.0 : B_int \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f [ ?v1.0  ?v2.0 ]\<^sup>e : [ B_bitvec , B_bitvec ]\<^sup>b
\<lbrakk> ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f ?\<Phi> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : B_bitvec \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f [| ?v1.0 |]\<^sup>e : B_int
\<lbrakk> ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f ?\<Phi> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta> ; Some (AF_fundef ?f (AF_fun_typ_none (AF_fun_typ ?x ?b ?c ?\<tau> ?s))) = lookup_fun ?\<Phi> ?f;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v : ?b \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f [ ?f  ?v  ]\<^sup>e : b_of ?\<tau>
\<lbrakk> ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f ?\<Phi> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta> ;  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?b' ; atom ?bv \<sharp> (?\<Phi>, ?\<Theta>, ?\<B>, ?\<Gamma>, ?\<Delta>, ?b', ?v, (b_of ?\<tau>)[?bv::=?b']\<^sub>b); Some (AF_fundef ?f (AF_fun_typ_some ?bv (AF_fun_typ ?x ?b ?c ?\<tau> ?s))) = lookup_fun ?\<Phi> ?f;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v : ?b[?bv::=?b']\<^sub>b \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f [?f [ ?b' ]  ?v ]\<^sup>e : (b_of ?\<tau>)[?bv::=?b']\<^sub>b
\<lbrakk> ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f ?\<Phi> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta> ; (?u, ?\<tau>) \<in> setD ?\<Delta>\<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f [ ?u ]\<^sup>e : b_of ?\<tau>
\<lbrakk> ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f ?\<Phi> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v : ?b ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta> \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f [?v]\<^sup>s : ?b
\<lbrakk> ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f ?e : ?b' ;  ?\<Theta> ; ?\<Phi> ; ?\<B> ; (?x, ?b', TRUE) #\<^sub>\<Gamma> ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f ?s : ?b ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta> ; atom ?x \<sharp> (?\<Phi>, ?\<Theta>, ?\<B>, ?\<Gamma>, ?\<Delta>, ?e, ?b)\<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f LET ?x = ?e IN ?s : ?b
\<lbrakk> ?\<Theta> ; ?\<Phi> ; ?\<B> ; (?x, B_bool, ?c) #\<^sub>\<Gamma> ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f ?s : ?b ;  ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?c ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta> ; atom ?x \<sharp> (?\<Phi>, ?\<Theta>, ?\<B>, ?\<Gamma>, ?\<Delta>, ?c, ?b, ?s)\<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f ASSERT ?c IN ?s  : ?b
\<lbrakk> ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f ?s1.0 : b_of ?\<tau> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?\<tau> ;  ?\<Theta> ; ?\<Phi> ; ?\<B> ; (?x, b_of ?\<tau>, TRUE) #\<^sub>\<Gamma> ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f ?s2.0 : ?b ; atom ?x \<sharp> (?\<Phi>, ?\<Theta>, ?\<B>, ?\<Gamma>, ?\<Delta>, ?s1.0, ?b, ?\<tau>)\<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f LET ?x : ?\<tau> = ?s1.0 IN ?s2.0 : ?b
\<lbrakk> ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v : B_bool ;  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f ?s1.0 : ?b ;  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f ?s2.0 : ?b \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f IF ?v THEN ?s1.0 ELSE ?s2.0 : ?b
\<lbrakk> ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?\<tau> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v : b_of ?\<tau> ; atom ?u \<sharp> (?\<Phi>, ?\<Theta>, ?\<B>, ?\<Gamma>, ?\<Delta>, ?\<tau>, ?v, ?b);  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; (?u, ?\<tau>) #\<^sub>\<Delta> ?\<Delta> \<turnstile>\<^sub>w\<^sub>f ?s : ?b \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f VAR ?u : ?\<tau> = ?v IN ?s : ?b
\<lbrakk>(?u, ?\<tau>) \<in> setD ?\<Delta>;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta> ;  ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f ?\<Phi> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v : b_of ?\<tau> \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f ?u ::= ?v : B_unit
\<lbrakk> ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f ?s1.0 : B_bool ;  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f ?s2.0 : ?b \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f WHILE ?s1.0 DO { ?s2.0 }  : ?b
\<lbrakk> ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f ?s1.0 : B_unit ;  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f ?s2.0 : ?b \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f  ?s1.0 ;; ?s2.0  : ?b
\<lbrakk> ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v : B_id ?tid ; AF_typedef ?tid ?dclist \<in> set ?\<Theta>;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta> ;  ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f ?\<Phi> ;  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> ; ?tid ; ?dclist \<turnstile>\<^sub>w\<^sub>f ?cs : ?b \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f MATCH ?v WITH { ?cs } : ?b
\<lbrakk> ?\<Theta> ; ?\<Phi> ; ?\<B> ; (?x, b_of ?\<tau>, TRUE) #\<^sub>\<Gamma> ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f ?s : ?b ; atom ?x \<sharp> (?\<Phi>, ?\<Theta>, ?\<B>, ?\<Gamma>, ?\<Delta>, ?\<Gamma>, ?\<tau>);  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta> \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> ; ?tid ; ?dc ; ?\<tau> \<turnstile>\<^sub>w\<^sub>f  ?dc ?x \<Rightarrow> ?s  : ?b
 ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> ; ?tid ; ?dc ; ?t \<turnstile>\<^sub>w\<^sub>f ?cs : ?b  \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> ; ?tid ; [(?dc, ?t)] \<turnstile>\<^sub>w\<^sub>f { ?cs } : ?b
\<lbrakk> ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> ; ?tid ; ?dc ; ?t \<turnstile>\<^sub>w\<^sub>f ?cs : ?b ;  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> ; ?tid ; ?dclist \<turnstile>\<^sub>w\<^sub>f ?css : ?b \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> ; ?tid ; (?dc, ?t) # ?dclist \<turnstile>\<^sub>w\<^sub>f  ?cs | ?css   : ?b
 ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?\<Gamma>  \<Longrightarrow>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f []\<^sub>\<Delta>
\<lbrakk> ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?\<tau> ; ?u \<notin> fst ` setD ?\<Delta>\<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f (?u, ?\<tau>) #\<^sub>\<Delta> ?\<Delta>
   \<turnstile>\<^sub>w\<^sub>f ?\<Theta>  \<Longrightarrow>  ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f []
\<lbrakk>?f \<notin> name_of_fun ` set ?\<Phi>;  ?\<Theta>  ; ?\<Phi> \<turnstile>\<^sub>w\<^sub>f ?ft ;  ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f ?\<Phi> \<rbrakk> \<Longrightarrow>  ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f AF_fundef ?f ?ft # ?\<Phi>
 ?\<Theta> ; ?\<Phi> ; {||} \<turnstile>\<^sub>w\<^sub>f ?ft  \<Longrightarrow>  ?\<Theta>  ; ?\<Phi> \<turnstile>\<^sub>w\<^sub>f AF_fun_typ_none ?ft
 ?\<Theta> ; ?\<Phi> ; {|?bv|} \<turnstile>\<^sub>w\<^sub>f ?ft  \<Longrightarrow>  ?\<Theta>  ; ?\<Phi> \<turnstile>\<^sub>w\<^sub>f AF_fun_typ_some ?bv ?ft
\<lbrakk> ?\<Theta> ; ?B  \<turnstile>\<^sub>w\<^sub>f ?b ; supp ?s \<subseteq> {atom ?x} \<union> supp ?B; supp ?c \<subseteq> {atom ?x};  ?\<Theta> ; ?B ; (?x, ?b, ?c) #\<^sub>\<Gamma> GNil   \<turnstile>\<^sub>w\<^sub>f ?\<tau> ;  ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f ?\<Phi> \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?B \<turnstile>\<^sub>w\<^sub>f AF_fun_typ ?x ?b ?c ?\<tau> ?s

goal (1 subgoal):
 1.  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta>' \<turnstile>\<^sub>w\<^sub>f [| v |]\<^sup>e : b_of \<lbrace> z : B_int  | [ [ z ]\<^sup>v ]\<^sup>c\<^sup>e  ==  [| [ v ]\<^sup>c\<^sup>e |]\<^sup>c\<^sup>e  \<rbrace>
[PROOF STEP]
by metis
[PROOF STATE]
proof (state)
this:
 \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta>' \<turnstile>\<^sub>w\<^sub>f [| v |]\<^sup>e : b_of \<lbrace> z : B_int  | [ [ z ]\<^sup>v ]\<^sup>c\<^sup>e  ==  [| [ v ]\<^sup>c\<^sup>e |]\<^sup>c\<^sup>e  \<rbrace>

goal (3 subgoals):
 1. \<And>\<Theta> \<B> \<Gamma> \<Phi> \<Delta> u \<tau> \<tau>'. \<lbrakk> \<Theta> ; \<B>  \<turnstile>\<^sub>w\<^sub>f \<Gamma> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ; (u, \<tau>) \<in> setD \<Delta>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [ u ]\<^sup>e : b_of \<tau>
 2. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> v1 z1 c1 v2 z2 c2 z3 \<tau>. \<lbrakk> \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v1 \<Rightarrow> \<lbrace> z1 : B_bitvec  | c1 \<rbrace>;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v2 \<Rightarrow> \<lbrace> z2 : B_bitvec  | c2 \<rbrace>; atom z3 \<sharp> [ v1 @@ v2 ]\<^sup>e; atom z3 \<sharp> \<Gamma>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [ v1 @@ v2 ]\<^sup>e : b_of \<lbrace> z3 : B_bitvec  | [ [ z3 ]\<^sup>v ]\<^sup>c\<^sup>e  ==  [ [ v1 ]\<^sup>c\<^sup>e @@ [ v2 ]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e  \<rbrace>
 3. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> v1 z1 c1 v2 z2 z3 \<tau>. \<lbrakk>atom z3 \<sharp> \<tau>; atom z1 \<sharp> \<tau>; atom z2 \<sharp> \<tau>;  \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v1 \<Rightarrow> \<lbrace> z1 : B_bitvec  | c1 \<rbrace>; \<Theta> ; \<B> ; \<Gamma>  \<turnstile> v2 \<Leftarrow> \<lbrace> z2 : B_int  | [ leq [ [ L_num 0 ]\<^sup>v ]\<^sup>c\<^sup>e [ [ z2 ]\<^sup>v ]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e  ==  [ [ L_true ]\<^sup>v ]\<^sup>c\<^sup>e   AND  [ leq [ [ z2 ]\<^sup>v ]\<^sup>c\<^sup>e [| [ v1 ]\<^sup>c\<^sup>e |]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e  ==  [ [ L_true ]\<^sup>v ]\<^sup>c\<^sup>e   \<rbrace>; atom z1 \<sharp> [ v1  v2 ]\<^sup>e; atom z1 \<sharp> \<Gamma>; atom z2 \<sharp> [ v1  v2 ]\<^sup>e; atom z2 \<sharp> \<Gamma>; atom z3 \<sharp> [ v1  v2 ]\<^sup>e; atom z3 \<sharp> \<Gamma>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [ v1  v2 ]\<^sup>e : b_of \<lbrace> z3 : [ B_bitvec , B_bitvec ]\<^sup>b  | [ v1 ]\<^sup>c\<^sup>e  ==  [ [#1[ [ z3 ]\<^sup>v ]\<^sup>c\<^sup>e]\<^sup>c\<^sup>e @@ [#2[ [ z3 ]\<^sup>v ]\<^sup>c\<^sup>e]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e   AND  [| [#1[ [ z3 ]\<^sup>v ]\<^sup>c\<^sup>e]\<^sup>c\<^sup>e |]\<^sup>c\<^sup>e  ==  [ v2 ]\<^sup>c\<^sup>e   \<rbrace>
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (3 subgoals):
 1. \<And>\<Theta> \<B> \<Gamma> \<Phi> \<Delta> u \<tau> \<tau>'. \<lbrakk> \<Theta> ; \<B>  \<turnstile>\<^sub>w\<^sub>f \<Gamma> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ; (u, \<tau>) \<in> setD \<Delta>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [ u ]\<^sup>e : b_of \<tau>
 2. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> v1 z1 c1 v2 z2 c2 z3 \<tau>. \<lbrakk> \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v1 \<Rightarrow> \<lbrace> z1 : B_bitvec  | c1 \<rbrace>;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v2 \<Rightarrow> \<lbrace> z2 : B_bitvec  | c2 \<rbrace>; atom z3 \<sharp> [ v1 @@ v2 ]\<^sup>e; atom z3 \<sharp> \<Gamma>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [ v1 @@ v2 ]\<^sup>e : b_of \<lbrace> z3 : B_bitvec  | [ [ z3 ]\<^sup>v ]\<^sup>c\<^sup>e  ==  [ [ v1 ]\<^sup>c\<^sup>e @@ [ v2 ]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e  \<rbrace>
 3. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> v1 z1 c1 v2 z2 z3 \<tau>. \<lbrakk>atom z3 \<sharp> \<tau>; atom z1 \<sharp> \<tau>; atom z2 \<sharp> \<tau>;  \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v1 \<Rightarrow> \<lbrace> z1 : B_bitvec  | c1 \<rbrace>; \<Theta> ; \<B> ; \<Gamma>  \<turnstile> v2 \<Leftarrow> \<lbrace> z2 : B_int  | [ leq [ [ L_num 0 ]\<^sup>v ]\<^sup>c\<^sup>e [ [ z2 ]\<^sup>v ]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e  ==  [ [ L_true ]\<^sup>v ]\<^sup>c\<^sup>e   AND  [ leq [ [ z2 ]\<^sup>v ]\<^sup>c\<^sup>e [| [ v1 ]\<^sup>c\<^sup>e |]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e  ==  [ [ L_true ]\<^sup>v ]\<^sup>c\<^sup>e   \<rbrace>; atom z1 \<sharp> [ v1  v2 ]\<^sup>e; atom z1 \<sharp> \<Gamma>; atom z2 \<sharp> [ v1  v2 ]\<^sup>e; atom z2 \<sharp> \<Gamma>; atom z3 \<sharp> [ v1  v2 ]\<^sup>e; atom z3 \<sharp> \<Gamma>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [ v1  v2 ]\<^sup>e : b_of \<lbrace> z3 : [ B_bitvec , B_bitvec ]\<^sup>b  | [ v1 ]\<^sup>c\<^sup>e  ==  [ [#1[ [ z3 ]\<^sup>v ]\<^sup>c\<^sup>e]\<^sup>c\<^sup>e @@ [#2[ [ z3 ]\<^sup>v ]\<^sup>c\<^sup>e]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e   AND  [| [#1[ [ z3 ]\<^sup>v ]\<^sup>c\<^sup>e]\<^sup>c\<^sup>e |]\<^sup>c\<^sup>e  ==  [ v2 ]\<^sup>c\<^sup>e   \<rbrace>
[PROOF STEP]
case (infer_e_mvarI \<Theta> \<Gamma> \<Phi> \<Delta> u \<tau>)
[PROOF STATE]
proof (state)
this:
 \<Theta> ; \<Gamma>  \<turnstile>\<^sub>w\<^sub>f \<Phi>
 \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Delta>
 \<Theta> ; \<Gamma> ; \<Phi> \<turnstile>\<^sub>w\<^sub>f u
(\<tau>'__, \<tau>_) \<in> setD u

goal (3 subgoals):
 1. \<And>\<Theta> \<B> \<Gamma> \<Phi> \<Delta> u \<tau> \<tau>'. \<lbrakk> \<Theta> ; \<B>  \<turnstile>\<^sub>w\<^sub>f \<Gamma> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ; (u, \<tau>) \<in> setD \<Delta>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [ u ]\<^sup>e : b_of \<tau>
 2. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> v1 z1 c1 v2 z2 c2 z3 \<tau>. \<lbrakk> \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v1 \<Rightarrow> \<lbrace> z1 : B_bitvec  | c1 \<rbrace>;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v2 \<Rightarrow> \<lbrace> z2 : B_bitvec  | c2 \<rbrace>; atom z3 \<sharp> [ v1 @@ v2 ]\<^sup>e; atom z3 \<sharp> \<Gamma>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [ v1 @@ v2 ]\<^sup>e : b_of \<lbrace> z3 : B_bitvec  | [ [ z3 ]\<^sup>v ]\<^sup>c\<^sup>e  ==  [ [ v1 ]\<^sup>c\<^sup>e @@ [ v2 ]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e  \<rbrace>
 3. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> v1 z1 c1 v2 z2 z3 \<tau>. \<lbrakk>atom z3 \<sharp> \<tau>; atom z1 \<sharp> \<tau>; atom z2 \<sharp> \<tau>;  \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v1 \<Rightarrow> \<lbrace> z1 : B_bitvec  | c1 \<rbrace>; \<Theta> ; \<B> ; \<Gamma>  \<turnstile> v2 \<Leftarrow> \<lbrace> z2 : B_int  | [ leq [ [ L_num 0 ]\<^sup>v ]\<^sup>c\<^sup>e [ [ z2 ]\<^sup>v ]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e  ==  [ [ L_true ]\<^sup>v ]\<^sup>c\<^sup>e   AND  [ leq [ [ z2 ]\<^sup>v ]\<^sup>c\<^sup>e [| [ v1 ]\<^sup>c\<^sup>e |]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e  ==  [ [ L_true ]\<^sup>v ]\<^sup>c\<^sup>e   \<rbrace>; atom z1 \<sharp> [ v1  v2 ]\<^sup>e; atom z1 \<sharp> \<Gamma>; atom z2 \<sharp> [ v1  v2 ]\<^sup>e; atom z2 \<sharp> \<Gamma>; atom z3 \<sharp> [ v1  v2 ]\<^sup>e; atom z3 \<sharp> \<Gamma>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [ v1  v2 ]\<^sup>e : b_of \<lbrace> z3 : [ B_bitvec , B_bitvec ]\<^sup>b  | [ v1 ]\<^sup>c\<^sup>e  ==  [ [#1[ [ z3 ]\<^sup>v ]\<^sup>c\<^sup>e]\<^sup>c\<^sup>e @@ [#2[ [ z3 ]\<^sup>v ]\<^sup>c\<^sup>e]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e   AND  [| [#1[ [ z3 ]\<^sup>v ]\<^sup>c\<^sup>e]\<^sup>c\<^sup>e |]\<^sup>c\<^sup>e  ==  [ v2 ]\<^sup>c\<^sup>e   \<rbrace>
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
 \<Theta> ; \<Gamma>  \<turnstile>\<^sub>w\<^sub>f \<Phi>
 \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Delta>
 \<Theta> ; \<Gamma> ; \<Phi> \<turnstile>\<^sub>w\<^sub>f u
(\<tau>'__, \<tau>_) \<in> setD u
[PROOF STEP]
show ?case
[PROOF STATE]
proof (prove)
using this:
 \<Theta> ; \<Gamma>  \<turnstile>\<^sub>w\<^sub>f \<Phi>
 \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Delta>
 \<Theta> ; \<Gamma> ; \<Phi> \<turnstile>\<^sub>w\<^sub>f u
(\<tau>'__, \<tau>_) \<in> setD u

goal (1 subgoal):
 1.  \<Theta> ; \<Delta> ; \<Gamma> ; \<Phi> ; u \<turnstile>\<^sub>w\<^sub>f [ \<tau>'__ ]\<^sup>e : b_of \<tau>_
[PROOF STEP]
using  b_of.simps infer_v_v_wf wf_intros
[PROOF STATE]
proof (prove)
using this:
 \<Theta> ; \<Gamma>  \<turnstile>\<^sub>w\<^sub>f \<Phi>
 \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Delta>
 \<Theta> ; \<Gamma> ; \<Phi> \<turnstile>\<^sub>w\<^sub>f u
(\<tau>'__, \<tau>_) \<in> setD u
b_of \<lbrace> ?z : ?b  | ?c \<rbrace> = ?b
 ?\<Theta> ; ?\<B> ; ?G \<turnstile> ?v \<Rightarrow> ?\<tau> \<Longrightarrow>  ?\<Theta> ; ?\<B> ; ?G \<turnstile>\<^sub>w\<^sub>f ?v : b_of ?\<tau>
   \<turnstile>\<^sub>w\<^sub>f ?\<Theta>  \<Longrightarrow>  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f B_int
   \<turnstile>\<^sub>w\<^sub>f ?\<Theta>  \<Longrightarrow>  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f B_bool
   \<turnstile>\<^sub>w\<^sub>f ?\<Theta>  \<Longrightarrow>  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f B_unit
   \<turnstile>\<^sub>w\<^sub>f ?\<Theta>  \<Longrightarrow>  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f B_bitvec
\<lbrakk> ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?b1.0 ;  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?b2.0 \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f [ ?b1.0 , ?b2.0 ]\<^sup>b
\<lbrakk>   \<turnstile>\<^sub>w\<^sub>f ?\<Theta> ; AF_typedef ?s ?dclist \<in> set ?\<Theta>\<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f B_id ?s
\<lbrakk>   \<turnstile>\<^sub>w\<^sub>f ?\<Theta> ;  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?b ; AF_typedef_poly ?s ?bv ?dclist \<in> set ?\<Theta>\<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f B_app ?s ?b
\<lbrakk> ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?\<Gamma> ; Some (?b, ?c) = lookup ?\<Gamma> ?x\<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [ ?x ]\<^sup>v : ?b
 ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?\<Gamma>  \<Longrightarrow>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [ ?l ]\<^sup>v : base_for_lit ?l
\<lbrakk> ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : ?b1.0 ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v2.0 : ?b2.0 \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [ ?v1.0 , ?v2.0 ]\<^sup>v : [ ?b1.0 , ?b2.0 ]\<^sup>b
\<lbrakk>AF_typedef ?s ?dclist \<in> set ?\<Theta>; (?dc, \<lbrace> ?x : ?b'  | ?c \<rbrace>) \<in> set ?dclist;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v : ?b' \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f V_cons ?s ?dc ?v : B_id ?s
\<lbrakk>AF_typedef_poly ?s ?bv ?dclist \<in> set ?\<Theta>; (?dc, \<lbrace> ?x : ?b'  | ?c \<rbrace>) \<in> set ?dclist;  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?b ; atom ?bv \<sharp> (?\<Theta>, ?\<B>, ?\<Gamma>, ?b, ?v);  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v : ?b'[?bv::=?b]\<^sub>b\<^sub>b \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f V_consp ?s ?dc ?b ?v : B_app ?s ?b
 ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v : ?b  \<Longrightarrow>   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [ ?v ]\<^sup>c\<^sup>e : ?b
\<lbrakk>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : B_int ;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v2.0 : B_int \<rbrakk> \<Longrightarrow>   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [ plus ?v1.0 ?v2.0 ]\<^sup>c\<^sup>e : B_int
\<lbrakk>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : B_int ;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v2.0 : B_int \<rbrakk> \<Longrightarrow>   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [ leq ?v1.0 ?v2.0 ]\<^sup>c\<^sup>e : B_bool
\<lbrakk>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : ?b ;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v2.0 : ?b \<rbrakk> \<Longrightarrow>   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [ eq ?v1.0 ?v2.0 ]\<^sup>c\<^sup>e : B_bool
  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : [ ?b1.0 , ?b2.0 ]\<^sup>b  \<Longrightarrow>   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [#1?v1.0]\<^sup>c\<^sup>e : ?b1.0
  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : [ ?b1.0 , ?b2.0 ]\<^sup>b  \<Longrightarrow>   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [#2?v1.0]\<^sup>c\<^sup>e : ?b2.0
\<lbrakk>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : B_bitvec ;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v2.0 : B_bitvec \<rbrakk> \<Longrightarrow>   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [ ?v1.0 @@ ?v2.0 ]\<^sup>c\<^sup>e : B_bitvec
  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : B_bitvec  \<Longrightarrow>   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [| ?v1.0 |]\<^sup>c\<^sup>e : B_int
\<lbrakk>atom ?z \<sharp> (?\<Theta>, ?\<B>, ?\<Gamma>);  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?b ;  ?\<Theta> ; ?\<B> ; (?z, ?b, TRUE) #\<^sub>\<Gamma> ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?c \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f \<lbrace> ?z : ?b  | ?c \<rbrace>
\<lbrakk>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?e1.0 : ?b ;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?e2.0 : ?b \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?e1.0  ==  ?e2.0
 ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?\<Gamma>  \<Longrightarrow>  ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f TRUE
 ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?\<Gamma>  \<Longrightarrow>  ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f FALSE
\<lbrakk> ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?c1.0 ;  ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?c2.0 \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?c1.0  AND  ?c2.0
\<lbrakk> ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?c1.0 ;  ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?c2.0 \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?c1.0 OR ?c2.0
 ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?c1.0  \<Longrightarrow>  ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f \<not> ?c1.0
\<lbrakk> ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?c1.0 ;  ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?c2.0 \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?c1.0  IMP  ?c2.0
   \<turnstile>\<^sub>w\<^sub>f ?\<Theta>  \<Longrightarrow>  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f GNil
\<lbrakk>?c \<notin> {TRUE, FALSE};  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?\<Gamma> ; atom ?x \<sharp> ?\<Gamma>;  ?\<Theta> ; ?\<B> ; (?x, ?b, TRUE) #\<^sub>\<Gamma> ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?c ;  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?b \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f (?x, ?b, ?c) #\<^sub>\<Gamma> ?\<Gamma>
\<lbrakk>?c \<in> {TRUE, FALSE};  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?\<Gamma> ; atom ?x \<sharp> ?\<Gamma>;  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?b \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f (?x, ?b, ?c) #\<^sub>\<Gamma> ?\<Gamma>
   \<turnstile>\<^sub>w\<^sub>f []
\<lbrakk>name_of_type ?tdef \<notin> name_of_type ` set ?\<Theta>;    \<turnstile>\<^sub>w\<^sub>f ?\<Theta> ;  ?\<Theta> \<turnstile>\<^sub>w\<^sub>f ?tdef \<rbrakk> \<Longrightarrow>    \<turnstile>\<^sub>w\<^sub>f ?tdef # ?\<Theta>
 ?\<Theta> ; {||}  ; GNil \<turnstile>\<^sub>w\<^sub>f ?lst  \<Longrightarrow>  ?\<Theta> \<turnstile>\<^sub>w\<^sub>f AF_typedef ?s ?lst
 ?\<Theta> ; {|?bv|}  ; GNil \<turnstile>\<^sub>w\<^sub>f ?lst  \<Longrightarrow>  ?\<Theta> \<turnstile>\<^sub>w\<^sub>f AF_typedef_poly ?s ?bv ?lst
 ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?\<Gamma>  \<Longrightarrow>  ?\<Theta> ; ?\<B>  ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f []
\<lbrakk> ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?\<tau> ; ?dc \<notin> fst ` set ?ts;  ?\<Theta> ; ?\<B>  ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?ts \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<B>  ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f (?dc, ?\<tau>) # ?ts
\<lbrakk> ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f ?\<Phi> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v : ?b \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f [ ?v ]\<^sup>e : ?b
\<lbrakk> ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f ?\<Phi> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : B_int ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v2.0 : B_int \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f [ plus ?v1.0 ?v2.0 ]\<^sup>e : B_int
\<lbrakk> ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f ?\<Phi> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : B_int ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v2.0 : B_int \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f [ leq ?v1.0 ?v2.0 ]\<^sup>e : B_bool
\<lbrakk> ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f ?\<Phi> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : ?b ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v2.0 : ?b ; ?b \<in> {B_bool, B_int, B_unit}\<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f [ eq ?v1.0 ?v2.0 ]\<^sup>e : B_bool
\<lbrakk> ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f ?\<Phi> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : [ ?b1.0 , ?b2.0 ]\<^sup>b \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f [#1?v1.0 ]\<^sup>e : ?b1.0
\<lbrakk> ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f ?\<Phi> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : [ ?b1.0 , ?b2.0 ]\<^sup>b \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f [#2?v1.0 ]\<^sup>e : ?b2.0
\<lbrakk> ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f ?\<Phi> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : B_bitvec ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v2.0 : B_bitvec \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f [ ?v1.0 @@ ?v2.0 ]\<^sup>e : B_bitvec
\<lbrakk> ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f ?\<Phi> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : B_bitvec ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v2.0 : B_int \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f [ ?v1.0  ?v2.0 ]\<^sup>e : [ B_bitvec , B_bitvec ]\<^sup>b
\<lbrakk> ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f ?\<Phi> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : B_bitvec \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f [| ?v1.0 |]\<^sup>e : B_int
\<lbrakk> ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f ?\<Phi> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta> ; Some (AF_fundef ?f (AF_fun_typ_none (AF_fun_typ ?x ?b ?c ?\<tau> ?s))) = lookup_fun ?\<Phi> ?f;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v : ?b \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f [ ?f  ?v  ]\<^sup>e : b_of ?\<tau>
\<lbrakk> ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f ?\<Phi> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta> ;  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?b' ; atom ?bv \<sharp> (?\<Phi>, ?\<Theta>, ?\<B>, ?\<Gamma>, ?\<Delta>, ?b', ?v, (b_of ?\<tau>)[?bv::=?b']\<^sub>b); Some (AF_fundef ?f (AF_fun_typ_some ?bv (AF_fun_typ ?x ?b ?c ?\<tau> ?s))) = lookup_fun ?\<Phi> ?f;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v : ?b[?bv::=?b']\<^sub>b \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f [?f [ ?b' ]  ?v ]\<^sup>e : (b_of ?\<tau>)[?bv::=?b']\<^sub>b
\<lbrakk> ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f ?\<Phi> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta> ; (?u, ?\<tau>) \<in> setD ?\<Delta>\<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f [ ?u ]\<^sup>e : b_of ?\<tau>
\<lbrakk> ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f ?\<Phi> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v : ?b ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta> \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f [?v]\<^sup>s : ?b
\<lbrakk> ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f ?e : ?b' ;  ?\<Theta> ; ?\<Phi> ; ?\<B> ; (?x, ?b', TRUE) #\<^sub>\<Gamma> ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f ?s : ?b ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta> ; atom ?x \<sharp> (?\<Phi>, ?\<Theta>, ?\<B>, ?\<Gamma>, ?\<Delta>, ?e, ?b)\<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f LET ?x = ?e IN ?s : ?b
\<lbrakk> ?\<Theta> ; ?\<Phi> ; ?\<B> ; (?x, B_bool, ?c) #\<^sub>\<Gamma> ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f ?s : ?b ;  ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?c ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta> ; atom ?x \<sharp> (?\<Phi>, ?\<Theta>, ?\<B>, ?\<Gamma>, ?\<Delta>, ?c, ?b, ?s)\<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f ASSERT ?c IN ?s  : ?b
\<lbrakk> ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f ?s1.0 : b_of ?\<tau> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?\<tau> ;  ?\<Theta> ; ?\<Phi> ; ?\<B> ; (?x, b_of ?\<tau>, TRUE) #\<^sub>\<Gamma> ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f ?s2.0 : ?b ; atom ?x \<sharp> (?\<Phi>, ?\<Theta>, ?\<B>, ?\<Gamma>, ?\<Delta>, ?s1.0, ?b, ?\<tau>)\<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f LET ?x : ?\<tau> = ?s1.0 IN ?s2.0 : ?b
\<lbrakk> ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v : B_bool ;  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f ?s1.0 : ?b ;  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f ?s2.0 : ?b \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f IF ?v THEN ?s1.0 ELSE ?s2.0 : ?b
\<lbrakk> ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?\<tau> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v : b_of ?\<tau> ; atom ?u \<sharp> (?\<Phi>, ?\<Theta>, ?\<B>, ?\<Gamma>, ?\<Delta>, ?\<tau>, ?v, ?b);  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; (?u, ?\<tau>) #\<^sub>\<Delta> ?\<Delta> \<turnstile>\<^sub>w\<^sub>f ?s : ?b \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f VAR ?u : ?\<tau> = ?v IN ?s : ?b
\<lbrakk>(?u, ?\<tau>) \<in> setD ?\<Delta>;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta> ;  ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f ?\<Phi> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v : b_of ?\<tau> \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f ?u ::= ?v : B_unit
\<lbrakk> ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f ?s1.0 : B_bool ;  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f ?s2.0 : ?b \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f WHILE ?s1.0 DO { ?s2.0 }  : ?b
\<lbrakk> ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f ?s1.0 : B_unit ;  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f ?s2.0 : ?b \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f  ?s1.0 ;; ?s2.0  : ?b
\<lbrakk> ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v : B_id ?tid ; AF_typedef ?tid ?dclist \<in> set ?\<Theta>;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta> ;  ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f ?\<Phi> ;  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> ; ?tid ; ?dclist \<turnstile>\<^sub>w\<^sub>f ?cs : ?b \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f MATCH ?v WITH { ?cs } : ?b
\<lbrakk> ?\<Theta> ; ?\<Phi> ; ?\<B> ; (?x, b_of ?\<tau>, TRUE) #\<^sub>\<Gamma> ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f ?s : ?b ; atom ?x \<sharp> (?\<Phi>, ?\<Theta>, ?\<B>, ?\<Gamma>, ?\<Delta>, ?\<Gamma>, ?\<tau>);  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta> \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> ; ?tid ; ?dc ; ?\<tau> \<turnstile>\<^sub>w\<^sub>f  ?dc ?x \<Rightarrow> ?s  : ?b
 ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> ; ?tid ; ?dc ; ?t \<turnstile>\<^sub>w\<^sub>f ?cs : ?b  \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> ; ?tid ; [(?dc, ?t)] \<turnstile>\<^sub>w\<^sub>f { ?cs } : ?b
\<lbrakk> ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> ; ?tid ; ?dc ; ?t \<turnstile>\<^sub>w\<^sub>f ?cs : ?b ;  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> ; ?tid ; ?dclist \<turnstile>\<^sub>w\<^sub>f ?css : ?b \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> ; ?tid ; (?dc, ?t) # ?dclist \<turnstile>\<^sub>w\<^sub>f  ?cs | ?css   : ?b
 ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?\<Gamma>  \<Longrightarrow>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f []\<^sub>\<Delta>
\<lbrakk> ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?\<tau> ; ?u \<notin> fst ` setD ?\<Delta>\<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f (?u, ?\<tau>) #\<^sub>\<Delta> ?\<Delta>
   \<turnstile>\<^sub>w\<^sub>f ?\<Theta>  \<Longrightarrow>  ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f []
\<lbrakk>?f \<notin> name_of_fun ` set ?\<Phi>;  ?\<Theta>  ; ?\<Phi> \<turnstile>\<^sub>w\<^sub>f ?ft ;  ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f ?\<Phi> \<rbrakk> \<Longrightarrow>  ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f AF_fundef ?f ?ft # ?\<Phi>
 ?\<Theta> ; ?\<Phi> ; {||} \<turnstile>\<^sub>w\<^sub>f ?ft  \<Longrightarrow>  ?\<Theta>  ; ?\<Phi> \<turnstile>\<^sub>w\<^sub>f AF_fun_typ_none ?ft
 ?\<Theta> ; ?\<Phi> ; {|?bv|} \<turnstile>\<^sub>w\<^sub>f ?ft  \<Longrightarrow>  ?\<Theta>  ; ?\<Phi> \<turnstile>\<^sub>w\<^sub>f AF_fun_typ_some ?bv ?ft
\<lbrakk> ?\<Theta> ; ?B  \<turnstile>\<^sub>w\<^sub>f ?b ; supp ?s \<subseteq> {atom ?x} \<union> supp ?B; supp ?c \<subseteq> {atom ?x};  ?\<Theta> ; ?B ; (?x, ?b, ?c) #\<^sub>\<Gamma> GNil   \<turnstile>\<^sub>w\<^sub>f ?\<tau> ;  ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f ?\<Phi> \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?B \<turnstile>\<^sub>w\<^sub>f AF_fun_typ ?x ?b ?c ?\<tau> ?s

goal (1 subgoal):
 1.  \<Theta> ; \<Delta> ; \<Gamma> ; \<Phi> ; u \<turnstile>\<^sub>w\<^sub>f [ \<tau>'__ ]\<^sup>e : b_of \<tau>_
[PROOF STEP]
by metis
[PROOF STATE]
proof (state)
this:
 \<Theta> ; \<Delta> ; \<Gamma> ; \<Phi> ; u \<turnstile>\<^sub>w\<^sub>f [ \<tau>'__ ]\<^sup>e : b_of \<tau>_

goal (2 subgoals):
 1. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> v1 z1 c1 v2 z2 c2 z3 \<tau>. \<lbrakk> \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v1 \<Rightarrow> \<lbrace> z1 : B_bitvec  | c1 \<rbrace>;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v2 \<Rightarrow> \<lbrace> z2 : B_bitvec  | c2 \<rbrace>; atom z3 \<sharp> [ v1 @@ v2 ]\<^sup>e; atom z3 \<sharp> \<Gamma>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [ v1 @@ v2 ]\<^sup>e : b_of \<lbrace> z3 : B_bitvec  | [ [ z3 ]\<^sup>v ]\<^sup>c\<^sup>e  ==  [ [ v1 ]\<^sup>c\<^sup>e @@ [ v2 ]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e  \<rbrace>
 2. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> v1 z1 c1 v2 z2 z3 \<tau>. \<lbrakk>atom z3 \<sharp> \<tau>; atom z1 \<sharp> \<tau>; atom z2 \<sharp> \<tau>;  \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v1 \<Rightarrow> \<lbrace> z1 : B_bitvec  | c1 \<rbrace>; \<Theta> ; \<B> ; \<Gamma>  \<turnstile> v2 \<Leftarrow> \<lbrace> z2 : B_int  | [ leq [ [ L_num 0 ]\<^sup>v ]\<^sup>c\<^sup>e [ [ z2 ]\<^sup>v ]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e  ==  [ [ L_true ]\<^sup>v ]\<^sup>c\<^sup>e   AND  [ leq [ [ z2 ]\<^sup>v ]\<^sup>c\<^sup>e [| [ v1 ]\<^sup>c\<^sup>e |]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e  ==  [ [ L_true ]\<^sup>v ]\<^sup>c\<^sup>e   \<rbrace>; atom z1 \<sharp> [ v1  v2 ]\<^sup>e; atom z1 \<sharp> \<Gamma>; atom z2 \<sharp> [ v1  v2 ]\<^sup>e; atom z2 \<sharp> \<Gamma>; atom z3 \<sharp> [ v1  v2 ]\<^sup>e; atom z3 \<sharp> \<Gamma>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [ v1  v2 ]\<^sup>e : b_of \<lbrace> z3 : [ B_bitvec , B_bitvec ]\<^sup>b  | [ v1 ]\<^sup>c\<^sup>e  ==  [ [#1[ [ z3 ]\<^sup>v ]\<^sup>c\<^sup>e]\<^sup>c\<^sup>e @@ [#2[ [ z3 ]\<^sup>v ]\<^sup>c\<^sup>e]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e   AND  [| [#1[ [ z3 ]\<^sup>v ]\<^sup>c\<^sup>e]\<^sup>c\<^sup>e |]\<^sup>c\<^sup>e  ==  [ v2 ]\<^sup>c\<^sup>e   \<rbrace>
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (2 subgoals):
 1. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> v1 z1 c1 v2 z2 c2 z3 \<tau>. \<lbrakk> \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v1 \<Rightarrow> \<lbrace> z1 : B_bitvec  | c1 \<rbrace>;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v2 \<Rightarrow> \<lbrace> z2 : B_bitvec  | c2 \<rbrace>; atom z3 \<sharp> [ v1 @@ v2 ]\<^sup>e; atom z3 \<sharp> \<Gamma>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [ v1 @@ v2 ]\<^sup>e : b_of \<lbrace> z3 : B_bitvec  | [ [ z3 ]\<^sup>v ]\<^sup>c\<^sup>e  ==  [ [ v1 ]\<^sup>c\<^sup>e @@ [ v2 ]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e  \<rbrace>
 2. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> v1 z1 c1 v2 z2 z3 \<tau>. \<lbrakk>atom z3 \<sharp> \<tau>; atom z1 \<sharp> \<tau>; atom z2 \<sharp> \<tau>;  \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v1 \<Rightarrow> \<lbrace> z1 : B_bitvec  | c1 \<rbrace>; \<Theta> ; \<B> ; \<Gamma>  \<turnstile> v2 \<Leftarrow> \<lbrace> z2 : B_int  | [ leq [ [ L_num 0 ]\<^sup>v ]\<^sup>c\<^sup>e [ [ z2 ]\<^sup>v ]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e  ==  [ [ L_true ]\<^sup>v ]\<^sup>c\<^sup>e   AND  [ leq [ [ z2 ]\<^sup>v ]\<^sup>c\<^sup>e [| [ v1 ]\<^sup>c\<^sup>e |]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e  ==  [ [ L_true ]\<^sup>v ]\<^sup>c\<^sup>e   \<rbrace>; atom z1 \<sharp> [ v1  v2 ]\<^sup>e; atom z1 \<sharp> \<Gamma>; atom z2 \<sharp> [ v1  v2 ]\<^sup>e; atom z2 \<sharp> \<Gamma>; atom z3 \<sharp> [ v1  v2 ]\<^sup>e; atom z3 \<sharp> \<Gamma>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [ v1  v2 ]\<^sup>e : b_of \<lbrace> z3 : [ B_bitvec , B_bitvec ]\<^sup>b  | [ v1 ]\<^sup>c\<^sup>e  ==  [ [#1[ [ z3 ]\<^sup>v ]\<^sup>c\<^sup>e]\<^sup>c\<^sup>e @@ [#2[ [ z3 ]\<^sup>v ]\<^sup>c\<^sup>e]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e   AND  [| [#1[ [ z3 ]\<^sup>v ]\<^sup>c\<^sup>e]\<^sup>c\<^sup>e |]\<^sup>c\<^sup>e  ==  [ v2 ]\<^sup>c\<^sup>e   \<rbrace>
[PROOF STEP]
case (infer_e_concatI \<Theta> \<B> \<Gamma> \<Delta>' \<Phi> v1 z1 c1 v2 z2 c2 z3)
[PROOF STATE]
proof (state)
this:
 \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta>'
 \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi>
 \<Theta> ; \<B> ; \<Gamma> \<turnstile> v1 \<Rightarrow> \<lbrace> z1 : B_bitvec  | c1 \<rbrace>
 \<Theta> ; \<B> ; \<Gamma> \<turnstile> v2 \<Rightarrow> \<lbrace> z2 : B_bitvec  | c2 \<rbrace>
atom z3 \<sharp> [ v1 @@ v2 ]\<^sup>e
atom z3 \<sharp> \<Gamma>

goal (2 subgoals):
 1. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> v1 z1 c1 v2 z2 c2 z3 \<tau>. \<lbrakk> \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v1 \<Rightarrow> \<lbrace> z1 : B_bitvec  | c1 \<rbrace>;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v2 \<Rightarrow> \<lbrace> z2 : B_bitvec  | c2 \<rbrace>; atom z3 \<sharp> [ v1 @@ v2 ]\<^sup>e; atom z3 \<sharp> \<Gamma>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [ v1 @@ v2 ]\<^sup>e : b_of \<lbrace> z3 : B_bitvec  | [ [ z3 ]\<^sup>v ]\<^sup>c\<^sup>e  ==  [ [ v1 ]\<^sup>c\<^sup>e @@ [ v2 ]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e  \<rbrace>
 2. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> v1 z1 c1 v2 z2 z3 \<tau>. \<lbrakk>atom z3 \<sharp> \<tau>; atom z1 \<sharp> \<tau>; atom z2 \<sharp> \<tau>;  \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v1 \<Rightarrow> \<lbrace> z1 : B_bitvec  | c1 \<rbrace>; \<Theta> ; \<B> ; \<Gamma>  \<turnstile> v2 \<Leftarrow> \<lbrace> z2 : B_int  | [ leq [ [ L_num 0 ]\<^sup>v ]\<^sup>c\<^sup>e [ [ z2 ]\<^sup>v ]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e  ==  [ [ L_true ]\<^sup>v ]\<^sup>c\<^sup>e   AND  [ leq [ [ z2 ]\<^sup>v ]\<^sup>c\<^sup>e [| [ v1 ]\<^sup>c\<^sup>e |]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e  ==  [ [ L_true ]\<^sup>v ]\<^sup>c\<^sup>e   \<rbrace>; atom z1 \<sharp> [ v1  v2 ]\<^sup>e; atom z1 \<sharp> \<Gamma>; atom z2 \<sharp> [ v1  v2 ]\<^sup>e; atom z2 \<sharp> \<Gamma>; atom z3 \<sharp> [ v1  v2 ]\<^sup>e; atom z3 \<sharp> \<Gamma>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [ v1  v2 ]\<^sup>e : b_of \<lbrace> z3 : [ B_bitvec , B_bitvec ]\<^sup>b  | [ v1 ]\<^sup>c\<^sup>e  ==  [ [#1[ [ z3 ]\<^sup>v ]\<^sup>c\<^sup>e]\<^sup>c\<^sup>e @@ [#2[ [ z3 ]\<^sup>v ]\<^sup>c\<^sup>e]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e   AND  [| [#1[ [ z3 ]\<^sup>v ]\<^sup>c\<^sup>e]\<^sup>c\<^sup>e |]\<^sup>c\<^sup>e  ==  [ v2 ]\<^sup>c\<^sup>e   \<rbrace>
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
 \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta>'
 \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi>
 \<Theta> ; \<B> ; \<Gamma> \<turnstile> v1 \<Rightarrow> \<lbrace> z1 : B_bitvec  | c1 \<rbrace>
 \<Theta> ; \<B> ; \<Gamma> \<turnstile> v2 \<Rightarrow> \<lbrace> z2 : B_bitvec  | c2 \<rbrace>
atom z3 \<sharp> [ v1 @@ v2 ]\<^sup>e
atom z3 \<sharp> \<Gamma>
[PROOF STEP]
show ?case
[PROOF STATE]
proof (prove)
using this:
 \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta>'
 \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi>
 \<Theta> ; \<B> ; \<Gamma> \<turnstile> v1 \<Rightarrow> \<lbrace> z1 : B_bitvec  | c1 \<rbrace>
 \<Theta> ; \<B> ; \<Gamma> \<turnstile> v2 \<Rightarrow> \<lbrace> z2 : B_bitvec  | c2 \<rbrace>
atom z3 \<sharp> [ v1 @@ v2 ]\<^sup>e
atom z3 \<sharp> \<Gamma>

goal (1 subgoal):
 1.  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta>' \<turnstile>\<^sub>w\<^sub>f [ v1 @@ v2 ]\<^sup>e : b_of \<lbrace> z3 : B_bitvec  | [ [ z3 ]\<^sup>v ]\<^sup>c\<^sup>e  ==  [ [ v1 ]\<^sup>c\<^sup>e @@ [ v2 ]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e  \<rbrace>
[PROOF STEP]
using  b_of.simps infer_v_v_wf wf_intros
[PROOF STATE]
proof (prove)
using this:
 \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta>'
 \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi>
 \<Theta> ; \<B> ; \<Gamma> \<turnstile> v1 \<Rightarrow> \<lbrace> z1 : B_bitvec  | c1 \<rbrace>
 \<Theta> ; \<B> ; \<Gamma> \<turnstile> v2 \<Rightarrow> \<lbrace> z2 : B_bitvec  | c2 \<rbrace>
atom z3 \<sharp> [ v1 @@ v2 ]\<^sup>e
atom z3 \<sharp> \<Gamma>
b_of \<lbrace> ?z : ?b  | ?c \<rbrace> = ?b
 ?\<Theta> ; ?\<B> ; ?G \<turnstile> ?v \<Rightarrow> ?\<tau> \<Longrightarrow>  ?\<Theta> ; ?\<B> ; ?G \<turnstile>\<^sub>w\<^sub>f ?v : b_of ?\<tau>
   \<turnstile>\<^sub>w\<^sub>f ?\<Theta>  \<Longrightarrow>  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f B_int
   \<turnstile>\<^sub>w\<^sub>f ?\<Theta>  \<Longrightarrow>  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f B_bool
   \<turnstile>\<^sub>w\<^sub>f ?\<Theta>  \<Longrightarrow>  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f B_unit
   \<turnstile>\<^sub>w\<^sub>f ?\<Theta>  \<Longrightarrow>  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f B_bitvec
\<lbrakk> ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?b1.0 ;  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?b2.0 \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f [ ?b1.0 , ?b2.0 ]\<^sup>b
\<lbrakk>   \<turnstile>\<^sub>w\<^sub>f ?\<Theta> ; AF_typedef ?s ?dclist \<in> set ?\<Theta>\<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f B_id ?s
\<lbrakk>   \<turnstile>\<^sub>w\<^sub>f ?\<Theta> ;  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?b ; AF_typedef_poly ?s ?bv ?dclist \<in> set ?\<Theta>\<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f B_app ?s ?b
\<lbrakk> ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?\<Gamma> ; Some (?b, ?c) = lookup ?\<Gamma> ?x\<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [ ?x ]\<^sup>v : ?b
 ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?\<Gamma>  \<Longrightarrow>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [ ?l ]\<^sup>v : base_for_lit ?l
\<lbrakk> ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : ?b1.0 ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v2.0 : ?b2.0 \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [ ?v1.0 , ?v2.0 ]\<^sup>v : [ ?b1.0 , ?b2.0 ]\<^sup>b
\<lbrakk>AF_typedef ?s ?dclist \<in> set ?\<Theta>; (?dc, \<lbrace> ?x : ?b'  | ?c \<rbrace>) \<in> set ?dclist;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v : ?b' \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f V_cons ?s ?dc ?v : B_id ?s
\<lbrakk>AF_typedef_poly ?s ?bv ?dclist \<in> set ?\<Theta>; (?dc, \<lbrace> ?x : ?b'  | ?c \<rbrace>) \<in> set ?dclist;  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?b ; atom ?bv \<sharp> (?\<Theta>, ?\<B>, ?\<Gamma>, ?b, ?v);  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v : ?b'[?bv::=?b]\<^sub>b\<^sub>b \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f V_consp ?s ?dc ?b ?v : B_app ?s ?b
 ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v : ?b  \<Longrightarrow>   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [ ?v ]\<^sup>c\<^sup>e : ?b
\<lbrakk>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : B_int ;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v2.0 : B_int \<rbrakk> \<Longrightarrow>   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [ plus ?v1.0 ?v2.0 ]\<^sup>c\<^sup>e : B_int
\<lbrakk>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : B_int ;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v2.0 : B_int \<rbrakk> \<Longrightarrow>   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [ leq ?v1.0 ?v2.0 ]\<^sup>c\<^sup>e : B_bool
\<lbrakk>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : ?b ;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v2.0 : ?b \<rbrakk> \<Longrightarrow>   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [ eq ?v1.0 ?v2.0 ]\<^sup>c\<^sup>e : B_bool
  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : [ ?b1.0 , ?b2.0 ]\<^sup>b  \<Longrightarrow>   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [#1?v1.0]\<^sup>c\<^sup>e : ?b1.0
  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : [ ?b1.0 , ?b2.0 ]\<^sup>b  \<Longrightarrow>   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [#2?v1.0]\<^sup>c\<^sup>e : ?b2.0
\<lbrakk>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : B_bitvec ;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v2.0 : B_bitvec \<rbrakk> \<Longrightarrow>   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [ ?v1.0 @@ ?v2.0 ]\<^sup>c\<^sup>e : B_bitvec
  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : B_bitvec  \<Longrightarrow>   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [| ?v1.0 |]\<^sup>c\<^sup>e : B_int
\<lbrakk>atom ?z \<sharp> (?\<Theta>, ?\<B>, ?\<Gamma>);  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?b ;  ?\<Theta> ; ?\<B> ; (?z, ?b, TRUE) #\<^sub>\<Gamma> ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?c \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f \<lbrace> ?z : ?b  | ?c \<rbrace>
\<lbrakk>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?e1.0 : ?b ;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?e2.0 : ?b \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?e1.0  ==  ?e2.0
 ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?\<Gamma>  \<Longrightarrow>  ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f TRUE
 ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?\<Gamma>  \<Longrightarrow>  ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f FALSE
\<lbrakk> ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?c1.0 ;  ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?c2.0 \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?c1.0  AND  ?c2.0
\<lbrakk> ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?c1.0 ;  ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?c2.0 \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?c1.0 OR ?c2.0
 ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?c1.0  \<Longrightarrow>  ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f \<not> ?c1.0
\<lbrakk> ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?c1.0 ;  ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?c2.0 \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?c1.0  IMP  ?c2.0
   \<turnstile>\<^sub>w\<^sub>f ?\<Theta>  \<Longrightarrow>  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f GNil
\<lbrakk>?c \<notin> {TRUE, FALSE};  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?\<Gamma> ; atom ?x \<sharp> ?\<Gamma>;  ?\<Theta> ; ?\<B> ; (?x, ?b, TRUE) #\<^sub>\<Gamma> ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?c ;  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?b \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f (?x, ?b, ?c) #\<^sub>\<Gamma> ?\<Gamma>
\<lbrakk>?c \<in> {TRUE, FALSE};  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?\<Gamma> ; atom ?x \<sharp> ?\<Gamma>;  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?b \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f (?x, ?b, ?c) #\<^sub>\<Gamma> ?\<Gamma>
   \<turnstile>\<^sub>w\<^sub>f []
\<lbrakk>name_of_type ?tdef \<notin> name_of_type ` set ?\<Theta>;    \<turnstile>\<^sub>w\<^sub>f ?\<Theta> ;  ?\<Theta> \<turnstile>\<^sub>w\<^sub>f ?tdef \<rbrakk> \<Longrightarrow>    \<turnstile>\<^sub>w\<^sub>f ?tdef # ?\<Theta>
 ?\<Theta> ; {||}  ; GNil \<turnstile>\<^sub>w\<^sub>f ?lst  \<Longrightarrow>  ?\<Theta> \<turnstile>\<^sub>w\<^sub>f AF_typedef ?s ?lst
 ?\<Theta> ; {|?bv|}  ; GNil \<turnstile>\<^sub>w\<^sub>f ?lst  \<Longrightarrow>  ?\<Theta> \<turnstile>\<^sub>w\<^sub>f AF_typedef_poly ?s ?bv ?lst
 ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?\<Gamma>  \<Longrightarrow>  ?\<Theta> ; ?\<B>  ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f []
\<lbrakk> ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?\<tau> ; ?dc \<notin> fst ` set ?ts;  ?\<Theta> ; ?\<B>  ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?ts \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<B>  ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f (?dc, ?\<tau>) # ?ts
\<lbrakk> ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f ?\<Phi> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v : ?b \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f [ ?v ]\<^sup>e : ?b
\<lbrakk> ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f ?\<Phi> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : B_int ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v2.0 : B_int \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f [ plus ?v1.0 ?v2.0 ]\<^sup>e : B_int
\<lbrakk> ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f ?\<Phi> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : B_int ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v2.0 : B_int \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f [ leq ?v1.0 ?v2.0 ]\<^sup>e : B_bool
\<lbrakk> ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f ?\<Phi> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : ?b ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v2.0 : ?b ; ?b \<in> {B_bool, B_int, B_unit}\<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f [ eq ?v1.0 ?v2.0 ]\<^sup>e : B_bool
\<lbrakk> ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f ?\<Phi> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : [ ?b1.0 , ?b2.0 ]\<^sup>b \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f [#1?v1.0 ]\<^sup>e : ?b1.0
\<lbrakk> ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f ?\<Phi> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : [ ?b1.0 , ?b2.0 ]\<^sup>b \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f [#2?v1.0 ]\<^sup>e : ?b2.0
\<lbrakk> ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f ?\<Phi> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : B_bitvec ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v2.0 : B_bitvec \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f [ ?v1.0 @@ ?v2.0 ]\<^sup>e : B_bitvec
\<lbrakk> ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f ?\<Phi> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : B_bitvec ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v2.0 : B_int \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f [ ?v1.0  ?v2.0 ]\<^sup>e : [ B_bitvec , B_bitvec ]\<^sup>b
\<lbrakk> ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f ?\<Phi> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : B_bitvec \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f [| ?v1.0 |]\<^sup>e : B_int
\<lbrakk> ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f ?\<Phi> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta> ; Some (AF_fundef ?f (AF_fun_typ_none (AF_fun_typ ?x ?b ?c ?\<tau> ?s))) = lookup_fun ?\<Phi> ?f;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v : ?b \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f [ ?f  ?v  ]\<^sup>e : b_of ?\<tau>
\<lbrakk> ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f ?\<Phi> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta> ;  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?b' ; atom ?bv \<sharp> (?\<Phi>, ?\<Theta>, ?\<B>, ?\<Gamma>, ?\<Delta>, ?b', ?v, (b_of ?\<tau>)[?bv::=?b']\<^sub>b); Some (AF_fundef ?f (AF_fun_typ_some ?bv (AF_fun_typ ?x ?b ?c ?\<tau> ?s))) = lookup_fun ?\<Phi> ?f;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v : ?b[?bv::=?b']\<^sub>b \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f [?f [ ?b' ]  ?v ]\<^sup>e : (b_of ?\<tau>)[?bv::=?b']\<^sub>b
\<lbrakk> ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f ?\<Phi> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta> ; (?u, ?\<tau>) \<in> setD ?\<Delta>\<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f [ ?u ]\<^sup>e : b_of ?\<tau>
\<lbrakk> ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f ?\<Phi> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v : ?b ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta> \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f [?v]\<^sup>s : ?b
\<lbrakk> ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f ?e : ?b' ;  ?\<Theta> ; ?\<Phi> ; ?\<B> ; (?x, ?b', TRUE) #\<^sub>\<Gamma> ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f ?s : ?b ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta> ; atom ?x \<sharp> (?\<Phi>, ?\<Theta>, ?\<B>, ?\<Gamma>, ?\<Delta>, ?e, ?b)\<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f LET ?x = ?e IN ?s : ?b
\<lbrakk> ?\<Theta> ; ?\<Phi> ; ?\<B> ; (?x, B_bool, ?c) #\<^sub>\<Gamma> ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f ?s : ?b ;  ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?c ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta> ; atom ?x \<sharp> (?\<Phi>, ?\<Theta>, ?\<B>, ?\<Gamma>, ?\<Delta>, ?c, ?b, ?s)\<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f ASSERT ?c IN ?s  : ?b
\<lbrakk> ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f ?s1.0 : b_of ?\<tau> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?\<tau> ;  ?\<Theta> ; ?\<Phi> ; ?\<B> ; (?x, b_of ?\<tau>, TRUE) #\<^sub>\<Gamma> ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f ?s2.0 : ?b ; atom ?x \<sharp> (?\<Phi>, ?\<Theta>, ?\<B>, ?\<Gamma>, ?\<Delta>, ?s1.0, ?b, ?\<tau>)\<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f LET ?x : ?\<tau> = ?s1.0 IN ?s2.0 : ?b
\<lbrakk> ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v : B_bool ;  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f ?s1.0 : ?b ;  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f ?s2.0 : ?b \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f IF ?v THEN ?s1.0 ELSE ?s2.0 : ?b
\<lbrakk> ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?\<tau> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v : b_of ?\<tau> ; atom ?u \<sharp> (?\<Phi>, ?\<Theta>, ?\<B>, ?\<Gamma>, ?\<Delta>, ?\<tau>, ?v, ?b);  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; (?u, ?\<tau>) #\<^sub>\<Delta> ?\<Delta> \<turnstile>\<^sub>w\<^sub>f ?s : ?b \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f VAR ?u : ?\<tau> = ?v IN ?s : ?b
\<lbrakk>(?u, ?\<tau>) \<in> setD ?\<Delta>;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta> ;  ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f ?\<Phi> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v : b_of ?\<tau> \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f ?u ::= ?v : B_unit
\<lbrakk> ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f ?s1.0 : B_bool ;  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f ?s2.0 : ?b \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f WHILE ?s1.0 DO { ?s2.0 }  : ?b
\<lbrakk> ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f ?s1.0 : B_unit ;  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f ?s2.0 : ?b \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f  ?s1.0 ;; ?s2.0  : ?b
\<lbrakk> ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v : B_id ?tid ; AF_typedef ?tid ?dclist \<in> set ?\<Theta>;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta> ;  ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f ?\<Phi> ;  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> ; ?tid ; ?dclist \<turnstile>\<^sub>w\<^sub>f ?cs : ?b \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f MATCH ?v WITH { ?cs } : ?b
\<lbrakk> ?\<Theta> ; ?\<Phi> ; ?\<B> ; (?x, b_of ?\<tau>, TRUE) #\<^sub>\<Gamma> ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f ?s : ?b ; atom ?x \<sharp> (?\<Phi>, ?\<Theta>, ?\<B>, ?\<Gamma>, ?\<Delta>, ?\<Gamma>, ?\<tau>);  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta> \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> ; ?tid ; ?dc ; ?\<tau> \<turnstile>\<^sub>w\<^sub>f  ?dc ?x \<Rightarrow> ?s  : ?b
 ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> ; ?tid ; ?dc ; ?t \<turnstile>\<^sub>w\<^sub>f ?cs : ?b  \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> ; ?tid ; [(?dc, ?t)] \<turnstile>\<^sub>w\<^sub>f { ?cs } : ?b
\<lbrakk> ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> ; ?tid ; ?dc ; ?t \<turnstile>\<^sub>w\<^sub>f ?cs : ?b ;  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> ; ?tid ; ?dclist \<turnstile>\<^sub>w\<^sub>f ?css : ?b \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> ; ?tid ; (?dc, ?t) # ?dclist \<turnstile>\<^sub>w\<^sub>f  ?cs | ?css   : ?b
 ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?\<Gamma>  \<Longrightarrow>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f []\<^sub>\<Delta>
\<lbrakk> ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta> ;  ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?\<tau> ; ?u \<notin> fst ` setD ?\<Delta>\<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f (?u, ?\<tau>) #\<^sub>\<Delta> ?\<Delta>
   \<turnstile>\<^sub>w\<^sub>f ?\<Theta>  \<Longrightarrow>  ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f []
\<lbrakk>?f \<notin> name_of_fun ` set ?\<Phi>;  ?\<Theta>  ; ?\<Phi> \<turnstile>\<^sub>w\<^sub>f ?ft ;  ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f ?\<Phi> \<rbrakk> \<Longrightarrow>  ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f AF_fundef ?f ?ft # ?\<Phi>
 ?\<Theta> ; ?\<Phi> ; {||} \<turnstile>\<^sub>w\<^sub>f ?ft  \<Longrightarrow>  ?\<Theta>  ; ?\<Phi> \<turnstile>\<^sub>w\<^sub>f AF_fun_typ_none ?ft
 ?\<Theta> ; ?\<Phi> ; {|?bv|} \<turnstile>\<^sub>w\<^sub>f ?ft  \<Longrightarrow>  ?\<Theta>  ; ?\<Phi> \<turnstile>\<^sub>w\<^sub>f AF_fun_typ_some ?bv ?ft
\<lbrakk> ?\<Theta> ; ?B  \<turnstile>\<^sub>w\<^sub>f ?b ; supp ?s \<subseteq> {atom ?x} \<union> supp ?B; supp ?c \<subseteq> {atom ?x};  ?\<Theta> ; ?B ; (?x, ?b, ?c) #\<^sub>\<Gamma> GNil   \<turnstile>\<^sub>w\<^sub>f ?\<tau> ;  ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f ?\<Phi> \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<Phi> ; ?B \<turnstile>\<^sub>w\<^sub>f AF_fun_typ ?x ?b ?c ?\<tau> ?s

goal (1 subgoal):
 1.  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta>' \<turnstile>\<^sub>w\<^sub>f [ v1 @@ v2 ]\<^sup>e : b_of \<lbrace> z3 : B_bitvec  | [ [ z3 ]\<^sup>v ]\<^sup>c\<^sup>e  ==  [ [ v1 ]\<^sup>c\<^sup>e @@ [ v2 ]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e  \<rbrace>
[PROOF STEP]
by metis
[PROOF STATE]
proof (state)
this:
 \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta>' \<turnstile>\<^sub>w\<^sub>f [ v1 @@ v2 ]\<^sup>e : b_of \<lbrace> z3 : B_bitvec  | [ [ z3 ]\<^sup>v ]\<^sup>c\<^sup>e  ==  [ [ v1 ]\<^sup>c\<^sup>e @@ [ v2 ]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e  \<rbrace>

goal (1 subgoal):
 1. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> v1 z1 c1 v2 z2 z3 \<tau>. \<lbrakk>atom z3 \<sharp> \<tau>; atom z1 \<sharp> \<tau>; atom z2 \<sharp> \<tau>;  \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v1 \<Rightarrow> \<lbrace> z1 : B_bitvec  | c1 \<rbrace>; \<Theta> ; \<B> ; \<Gamma>  \<turnstile> v2 \<Leftarrow> \<lbrace> z2 : B_int  | [ leq [ [ L_num 0 ]\<^sup>v ]\<^sup>c\<^sup>e [ [ z2 ]\<^sup>v ]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e  ==  [ [ L_true ]\<^sup>v ]\<^sup>c\<^sup>e   AND  [ leq [ [ z2 ]\<^sup>v ]\<^sup>c\<^sup>e [| [ v1 ]\<^sup>c\<^sup>e |]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e  ==  [ [ L_true ]\<^sup>v ]\<^sup>c\<^sup>e   \<rbrace>; atom z1 \<sharp> [ v1  v2 ]\<^sup>e; atom z1 \<sharp> \<Gamma>; atom z2 \<sharp> [ v1  v2 ]\<^sup>e; atom z2 \<sharp> \<Gamma>; atom z3 \<sharp> [ v1  v2 ]\<^sup>e; atom z3 \<sharp> \<Gamma>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [ v1  v2 ]\<^sup>e : b_of \<lbrace> z3 : [ B_bitvec , B_bitvec ]\<^sup>b  | [ v1 ]\<^sup>c\<^sup>e  ==  [ [#1[ [ z3 ]\<^sup>v ]\<^sup>c\<^sup>e]\<^sup>c\<^sup>e @@ [#2[ [ z3 ]\<^sup>v ]\<^sup>c\<^sup>e]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e   AND  [| [#1[ [ z3 ]\<^sup>v ]\<^sup>c\<^sup>e]\<^sup>c\<^sup>e |]\<^sup>c\<^sup>e  ==  [ v2 ]\<^sup>c\<^sup>e   \<rbrace>
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> v1 z1 c1 v2 z2 z3 \<tau>. \<lbrakk>atom z3 \<sharp> \<tau>; atom z1 \<sharp> \<tau>; atom z2 \<sharp> \<tau>;  \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v1 \<Rightarrow> \<lbrace> z1 : B_bitvec  | c1 \<rbrace>; \<Theta> ; \<B> ; \<Gamma>  \<turnstile> v2 \<Leftarrow> \<lbrace> z2 : B_int  | [ leq [ [ L_num 0 ]\<^sup>v ]\<^sup>c\<^sup>e [ [ z2 ]\<^sup>v ]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e  ==  [ [ L_true ]\<^sup>v ]\<^sup>c\<^sup>e   AND  [ leq [ [ z2 ]\<^sup>v ]\<^sup>c\<^sup>e [| [ v1 ]\<^sup>c\<^sup>e |]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e  ==  [ [ L_true ]\<^sup>v ]\<^sup>c\<^sup>e   \<rbrace>; atom z1 \<sharp> [ v1  v2 ]\<^sup>e; atom z1 \<sharp> \<Gamma>; atom z2 \<sharp> [ v1  v2 ]\<^sup>e; atom z2 \<sharp> \<Gamma>; atom z3 \<sharp> [ v1  v2 ]\<^sup>e; atom z3 \<sharp> \<Gamma>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [ v1  v2 ]\<^sup>e : b_of \<lbrace> z3 : [ B_bitvec , B_bitvec ]\<^sup>b  | [ v1 ]\<^sup>c\<^sup>e  ==  [ [#1[ [ z3 ]\<^sup>v ]\<^sup>c\<^sup>e]\<^sup>c\<^sup>e @@ [#2[ [ z3 ]\<^sup>v ]\<^sup>c\<^sup>e]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e   AND  [| [#1[ [ z3 ]\<^sup>v ]\<^sup>c\<^sup>e]\<^sup>c\<^sup>e |]\<^sup>c\<^sup>e  ==  [ v2 ]\<^sup>c\<^sup>e   \<rbrace>
[PROOF STEP]
case (infer_e_splitI \<Theta> \<B> \<Gamma> \<Delta> \<Phi> v1 z1 c1 v2 z2 z3)
[PROOF STATE]
proof (state)
this:
atom z3 \<sharp> \<tau>
atom z1 \<sharp> \<tau>
atom z2 \<sharp> \<tau>
 \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta>
 \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi>
 \<Theta> ; \<B> ; \<Gamma> \<turnstile> v1 \<Rightarrow> \<lbrace> z1 : B_bitvec  | c1 \<rbrace>
\<Theta> ; \<B> ; \<Gamma>  \<turnstile> v2 \<Leftarrow> \<lbrace> z2 : B_int  | [ leq [ [ L_num 0 ]\<^sup>v ]\<^sup>c\<^sup>e [ [ z2 ]\<^sup>v ]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e  ==  [ [ L_true ]\<^sup>v ]\<^sup>c\<^sup>e   AND  [ leq [ [ z2 ]\<^sup>v ]\<^sup>c\<^sup>e [| [ v1 ]\<^sup>c\<^sup>e |]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e  ==  [ [ L_true ]\<^sup>v ]\<^sup>c\<^sup>e   \<rbrace>
atom z1 \<sharp> [ v1  v2 ]\<^sup>e
atom z1 \<sharp> \<Gamma>
atom z2 \<sharp> [ v1  v2 ]\<^sup>e
atom z2 \<sharp> \<Gamma>
atom z3 \<sharp> [ v1  v2 ]\<^sup>e
atom z3 \<sharp> \<Gamma>

goal (1 subgoal):
 1. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> v1 z1 c1 v2 z2 z3 \<tau>. \<lbrakk>atom z3 \<sharp> \<tau>; atom z1 \<sharp> \<tau>; atom z2 \<sharp> \<tau>;  \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v1 \<Rightarrow> \<lbrace> z1 : B_bitvec  | c1 \<rbrace>; \<Theta> ; \<B> ; \<Gamma>  \<turnstile> v2 \<Leftarrow> \<lbrace> z2 : B_int  | [ leq [ [ L_num 0 ]\<^sup>v ]\<^sup>c\<^sup>e [ [ z2 ]\<^sup>v ]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e  ==  [ [ L_true ]\<^sup>v ]\<^sup>c\<^sup>e   AND  [ leq [ [ z2 ]\<^sup>v ]\<^sup>c\<^sup>e [| [ v1 ]\<^sup>c\<^sup>e |]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e  ==  [ [ L_true ]\<^sup>v ]\<^sup>c\<^sup>e   \<rbrace>; atom z1 \<sharp> [ v1  v2 ]\<^sup>e; atom z1 \<sharp> \<Gamma>; atom z2 \<sharp> [ v1  v2 ]\<^sup>e; atom z2 \<sharp> \<Gamma>; atom z3 \<sharp> [ v1  v2 ]\<^sup>e; atom z3 \<sharp> \<Gamma>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [ v1  v2 ]\<^sup>e : b_of \<lbrace> z3 : [ B_bitvec , B_bitvec ]\<^sup>b  | [ v1 ]\<^sup>c\<^sup>e  ==  [ [#1[ [ z3 ]\<^sup>v ]\<^sup>c\<^sup>e]\<^sup>c\<^sup>e @@ [#2[ [ z3 ]\<^sup>v ]\<^sup>c\<^sup>e]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e   AND  [| [#1[ [ z3 ]\<^sup>v ]\<^sup>c\<^sup>e]\<^sup>c\<^sup>e |]\<^sup>c\<^sup>e  ==  [ v2 ]\<^sup>c\<^sup>e   \<rbrace>
[PROOF STEP]
have " \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f AE_split v1 v2  : B_pair B_bitvec B_bitvec"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1.  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [ v1  v2 ]\<^sup>e : [ B_bitvec , B_bitvec ]\<^sup>b
[PROOF STEP]
proof
[PROOF STATE]
proof (state)
goal (4 subgoals):
 1.  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi>
 2.  \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta>
 3.  \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f v1 : B_bitvec
 4.  \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f v2 : B_int
[PROOF STEP]
show "\<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi>"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1.  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi>
[PROOF STEP]
using infer_e_splitI
[PROOF STATE]
proof (prove)
using this:
atom z3 \<sharp> \<tau>
atom z1 \<sharp> \<tau>
atom z2 \<sharp> \<tau>
 \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta>
 \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi>
 \<Theta> ; \<B> ; \<Gamma> \<turnstile> v1 \<Rightarrow> \<lbrace> z1 : B_bitvec  | c1 \<rbrace>
\<Theta> ; \<B> ; \<Gamma>  \<turnstile> v2 \<Leftarrow> \<lbrace> z2 : B_int  | [ leq [ [ L_num 0 ]\<^sup>v ]\<^sup>c\<^sup>e [ [ z2 ]\<^sup>v ]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e  ==  [ [ L_true ]\<^sup>v ]\<^sup>c\<^sup>e   AND  [ leq [ [ z2 ]\<^sup>v ]\<^sup>c\<^sup>e [| [ v1 ]\<^sup>c\<^sup>e |]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e  ==  [ [ L_true ]\<^sup>v ]\<^sup>c\<^sup>e   \<rbrace>
atom z1 \<sharp> [ v1  v2 ]\<^sup>e
atom z1 \<sharp> \<Gamma>
atom z2 \<sharp> [ v1  v2 ]\<^sup>e
atom z2 \<sharp> \<Gamma>
atom z3 \<sharp> [ v1  v2 ]\<^sup>e
atom z3 \<sharp> \<Gamma>

goal (1 subgoal):
 1.  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi>
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
 \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi>

goal (3 subgoals):
 1.  \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta>
 2.  \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f v1 : B_bitvec
 3.  \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f v2 : B_int
[PROOF STEP]
show "\<Theta>; \<B>; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta>"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1.  \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta>
[PROOF STEP]
using infer_e_splitI
[PROOF STATE]
proof (prove)
using this:
atom z3 \<sharp> \<tau>
atom z1 \<sharp> \<tau>
atom z2 \<sharp> \<tau>
 \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta>
 \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi>
 \<Theta> ; \<B> ; \<Gamma> \<turnstile> v1 \<Rightarrow> \<lbrace> z1 : B_bitvec  | c1 \<rbrace>
\<Theta> ; \<B> ; \<Gamma>  \<turnstile> v2 \<Leftarrow> \<lbrace> z2 : B_int  | [ leq [ [ L_num 0 ]\<^sup>v ]\<^sup>c\<^sup>e [ [ z2 ]\<^sup>v ]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e  ==  [ [ L_true ]\<^sup>v ]\<^sup>c\<^sup>e   AND  [ leq [ [ z2 ]\<^sup>v ]\<^sup>c\<^sup>e [| [ v1 ]\<^sup>c\<^sup>e |]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e  ==  [ [ L_true ]\<^sup>v ]\<^sup>c\<^sup>e   \<rbrace>
atom z1 \<sharp> [ v1  v2 ]\<^sup>e
atom z1 \<sharp> \<Gamma>
atom z2 \<sharp> [ v1  v2 ]\<^sup>e
atom z2 \<sharp> \<Gamma>
atom z3 \<sharp> [ v1  v2 ]\<^sup>e
atom z3 \<sharp> \<Gamma>

goal (1 subgoal):
 1.  \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta>
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
 \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta>

goal (2 subgoals):
 1.  \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f v1 : B_bitvec
 2.  \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f v2 : B_int
[PROOF STEP]
show "\<Theta>; \<B>; \<Gamma> \<turnstile>\<^sub>w\<^sub>f v1 : B_bitvec"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1.  \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f v1 : B_bitvec
[PROOF STEP]
using infer_e_splitI b_of.simps infer_v_wf
[PROOF STATE]
proof (prove)
using this:
atom z3 \<sharp> \<tau>
atom z1 \<sharp> \<tau>
atom z2 \<sharp> \<tau>
 \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta>
 \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi>
 \<Theta> ; \<B> ; \<Gamma> \<turnstile> v1 \<Rightarrow> \<lbrace> z1 : B_bitvec  | c1 \<rbrace>
\<Theta> ; \<B> ; \<Gamma>  \<turnstile> v2 \<Leftarrow> \<lbrace> z2 : B_int  | [ leq [ [ L_num 0 ]\<^sup>v ]\<^sup>c\<^sup>e [ [ z2 ]\<^sup>v ]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e  ==  [ [ L_true ]\<^sup>v ]\<^sup>c\<^sup>e   AND  [ leq [ [ z2 ]\<^sup>v ]\<^sup>c\<^sup>e [| [ v1 ]\<^sup>c\<^sup>e |]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e  ==  [ [ L_true ]\<^sup>v ]\<^sup>c\<^sup>e   \<rbrace>
atom z1 \<sharp> [ v1  v2 ]\<^sup>e
atom z1 \<sharp> \<Gamma>
atom z2 \<sharp> [ v1  v2 ]\<^sup>e
atom z2 \<sharp> \<Gamma>
atom z3 \<sharp> [ v1  v2 ]\<^sup>e
atom z3 \<sharp> \<Gamma>
b_of \<lbrace> ?z : ?b  | ?c \<rbrace> = ?b
 ?\<Theta> ; ?\<B> ; ?G \<turnstile> ?v \<Rightarrow> ?\<tau> \<Longrightarrow>  ?\<Theta> ; ?\<B> ; ?G \<turnstile>\<^sub>w\<^sub>f ?v : b_of ?\<tau>
 ?\<Theta> ; ?\<B> ; ?G \<turnstile> ?v \<Rightarrow> ?\<tau> \<Longrightarrow>  ?\<Theta> ; ?\<B> ; ?G   \<turnstile>\<^sub>w\<^sub>f ?\<tau>
 ?\<Theta> ; ?\<B> ; ?G \<turnstile> ?v \<Rightarrow> ?\<tau> \<Longrightarrow>    \<turnstile>\<^sub>w\<^sub>f ?\<Theta>
 ?\<Theta> ; ?\<B> ; ?G \<turnstile> ?v \<Rightarrow> ?\<tau> \<Longrightarrow>  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?G

goal (1 subgoal):
 1.  \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f v1 : B_bitvec
[PROOF STEP]
by metis
[PROOF STATE]
proof (state)
this:
 \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f v1 : B_bitvec

goal (1 subgoal):
 1.  \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f v2 : B_int
[PROOF STEP]
show "\<Theta>; \<B>; \<Gamma> \<turnstile>\<^sub>w\<^sub>f v2 : B_int"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1.  \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f v2 : B_int
[PROOF STEP]
using infer_e_splitI b_of.simps check_v_wf
[PROOF STATE]
proof (prove)
using this:
atom z3 \<sharp> \<tau>
atom z1 \<sharp> \<tau>
atom z2 \<sharp> \<tau>
 \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta>
 \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi>
 \<Theta> ; \<B> ; \<Gamma> \<turnstile> v1 \<Rightarrow> \<lbrace> z1 : B_bitvec  | c1 \<rbrace>
\<Theta> ; \<B> ; \<Gamma>  \<turnstile> v2 \<Leftarrow> \<lbrace> z2 : B_int  | [ leq [ [ L_num 0 ]\<^sup>v ]\<^sup>c\<^sup>e [ [ z2 ]\<^sup>v ]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e  ==  [ [ L_true ]\<^sup>v ]\<^sup>c\<^sup>e   AND  [ leq [ [ z2 ]\<^sup>v ]\<^sup>c\<^sup>e [| [ v1 ]\<^sup>c\<^sup>e |]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e  ==  [ [ L_true ]\<^sup>v ]\<^sup>c\<^sup>e   \<rbrace>
atom z1 \<sharp> [ v1  v2 ]\<^sup>e
atom z1 \<sharp> \<Gamma>
atom z2 \<sharp> [ v1  v2 ]\<^sup>e
atom z2 \<sharp> \<Gamma>
atom z3 \<sharp> [ v1  v2 ]\<^sup>e
atom z3 \<sharp> \<Gamma>
b_of \<lbrace> ?z : ?b  | ?c \<rbrace> = ?b
?\<Theta> ; ?\<B> ; ?\<Gamma>  \<turnstile> ?v \<Leftarrow> ?\<tau> \<Longrightarrow>  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?\<Gamma>
?\<Theta> ; ?\<B> ; ?\<Gamma>  \<turnstile> ?v \<Leftarrow> ?\<tau> \<Longrightarrow>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v : b_of ?\<tau>
?\<Theta> ; ?\<B> ; ?\<Gamma>  \<turnstile> ?v \<Leftarrow> ?\<tau> \<Longrightarrow>  ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?\<tau>

goal (1 subgoal):
 1.  \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f v2 : B_int
[PROOF STEP]
by metis
[PROOF STATE]
proof (state)
this:
 \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f v2 : B_int

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
 \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [ v1  v2 ]\<^sup>e : [ B_bitvec , B_bitvec ]\<^sup>b

goal (1 subgoal):
 1. \<And>\<Theta> \<B> \<Gamma> \<Delta> \<Phi> v1 z1 c1 v2 z2 z3 \<tau>. \<lbrakk>atom z3 \<sharp> \<tau>; atom z1 \<sharp> \<tau>; atom z2 \<sharp> \<tau>;  \<Theta> ; \<B> ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma> \<turnstile> v1 \<Rightarrow> \<lbrace> z1 : B_bitvec  | c1 \<rbrace>; \<Theta> ; \<B> ; \<Gamma>  \<turnstile> v2 \<Leftarrow> \<lbrace> z2 : B_int  | [ leq [ [ L_num 0 ]\<^sup>v ]\<^sup>c\<^sup>e [ [ z2 ]\<^sup>v ]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e  ==  [ [ L_true ]\<^sup>v ]\<^sup>c\<^sup>e   AND  [ leq [ [ z2 ]\<^sup>v ]\<^sup>c\<^sup>e [| [ v1 ]\<^sup>c\<^sup>e |]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e  ==  [ [ L_true ]\<^sup>v ]\<^sup>c\<^sup>e   \<rbrace>; atom z1 \<sharp> [ v1  v2 ]\<^sup>e; atom z1 \<sharp> \<Gamma>; atom z2 \<sharp> [ v1  v2 ]\<^sup>e; atom z2 \<sharp> \<Gamma>; atom z3 \<sharp> [ v1  v2 ]\<^sup>e; atom z3 \<sharp> \<Gamma>\<rbrakk> \<Longrightarrow>  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [ v1  v2 ]\<^sup>e : b_of \<lbrace> z3 : [ B_bitvec , B_bitvec ]\<^sup>b  | [ v1 ]\<^sup>c\<^sup>e  ==  [ [#1[ [ z3 ]\<^sup>v ]\<^sup>c\<^sup>e]\<^sup>c\<^sup>e @@ [#2[ [ z3 ]\<^sup>v ]\<^sup>c\<^sup>e]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e   AND  [| [#1[ [ z3 ]\<^sup>v ]\<^sup>c\<^sup>e]\<^sup>c\<^sup>e |]\<^sup>c\<^sup>e  ==  [ v2 ]\<^sup>c\<^sup>e   \<rbrace>
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
 \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [ v1  v2 ]\<^sup>e : [ B_bitvec , B_bitvec ]\<^sup>b
[PROOF STEP]
show ?case
[PROOF STATE]
proof (prove)
using this:
 \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [ v1  v2 ]\<^sup>e : [ B_bitvec , B_bitvec ]\<^sup>b

goal (1 subgoal):
 1.  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [ v1  v2 ]\<^sup>e : b_of \<lbrace> z3 : [ B_bitvec , B_bitvec ]\<^sup>b  | [ v1 ]\<^sup>c\<^sup>e  ==  [ [#1[ [ z3 ]\<^sup>v ]\<^sup>c\<^sup>e]\<^sup>c\<^sup>e @@ [#2[ [ z3 ]\<^sup>v ]\<^sup>c\<^sup>e]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e   AND  [| [#1[ [ z3 ]\<^sup>v ]\<^sup>c\<^sup>e]\<^sup>c\<^sup>e |]\<^sup>c\<^sup>e  ==  [ v2 ]\<^sup>c\<^sup>e   \<rbrace>
[PROOF STEP]
using  b_of.simps
[PROOF STATE]
proof (prove)
using this:
 \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [ v1  v2 ]\<^sup>e : [ B_bitvec , B_bitvec ]\<^sup>b
b_of \<lbrace> ?z : ?b  | ?c \<rbrace> = ?b

goal (1 subgoal):
 1.  \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [ v1  v2 ]\<^sup>e : b_of \<lbrace> z3 : [ B_bitvec , B_bitvec ]\<^sup>b  | [ v1 ]\<^sup>c\<^sup>e  ==  [ [#1[ [ z3 ]\<^sup>v ]\<^sup>c\<^sup>e]\<^sup>c\<^sup>e @@ [#2[ [ z3 ]\<^sup>v ]\<^sup>c\<^sup>e]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e   AND  [| [#1[ [ z3 ]\<^sup>v ]\<^sup>c\<^sup>e]\<^sup>c\<^sup>e |]\<^sup>c\<^sup>e  ==  [ v2 ]\<^sup>c\<^sup>e   \<rbrace>
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
 \<Theta> ; \<Phi> ; \<B> ; \<Gamma> ; \<Delta> \<turnstile>\<^sub>w\<^sub>f [ v1  v2 ]\<^sup>e : b_of \<lbrace> z3 : [ B_bitvec , B_bitvec ]\<^sup>b  | [ v1 ]\<^sup>c\<^sup>e  ==  [ [#1[ [ z3 ]\<^sup>v ]\<^sup>c\<^sup>e]\<^sup>c\<^sup>e @@ [#2[ [ z3 ]\<^sup>v ]\<^sup>c\<^sup>e]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e   AND  [| [#1[ [ z3 ]\<^sup>v ]\<^sup>c\<^sup>e]\<^sup>c\<^sup>e |]\<^sup>c\<^sup>e  ==  [ v2 ]\<^sup>c\<^sup>e   \<rbrace>

goal:
No subgoals!
[PROOF STEP]
qed