[STATEMENT]
lemma ctx_subtype_e_eq:
  fixes G::\<Gamma>
  assumes
    "\<Theta> ; \<Phi> ; \<B> ; G ; \<Delta> \<turnstile> e \<Rightarrow> t1" and "G =  \<Gamma>'@((x,b0,c0')#\<^sub>\<Gamma>\<Gamma>)"
    "\<Theta>; \<B>; \<Gamma>'@(x,b0,c0)#\<^sub>\<Gamma>\<Gamma> \<Turnstile> c0'"
  shows "\<Theta> ; \<Phi> ; \<B> ; \<Gamma>'@((x,b0,c0)#\<^sub>\<Gamma>\<Gamma>) ; \<Delta> \<turnstile> e \<Rightarrow> t1"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> e \<Rightarrow> t1
[PROOF STEP]
using assms
[PROOF STATE]
proof (prove)
using this:
\<Theta> ; \<Phi> ; \<B> ; G ; \<Delta>  \<turnstile> e \<Rightarrow> t1
G = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>
\<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0'

goal (1 subgoal):
 1. \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> e \<Rightarrow> t1
[PROOF STEP]
proof(nominal_induct t1 avoiding: c0 rule: infer_e.strong_induct)
[PROOF STATE]
proof (state)
goal (12 subgoals):
 1. \<And>\<Theta> \<B> \<Gamma>'' \<Delta> \<Phi> v \<tau> c0. \<lbrakk> \<Theta> ; \<B> ; \<Gamma>'' \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma>'' \<turnstile> v \<Rightarrow> \<tau>; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [ v ]\<^sup>e \<Rightarrow> \<tau>
 2. \<And>\<Theta> \<B> \<Gamma>'' \<Delta> \<Phi> v1 z1 c1 v2 z2 c2 z3 c0. \<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>''; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [ plus v1 v2 ]\<^sup>e \<Rightarrow> \<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 c0. \<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>''; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [ leq v1 v2 ]\<^sup>e \<Rightarrow> \<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 c0. \<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}; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [ eq v1 v2 ]\<^sup>e \<Rightarrow> \<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 xa b c \<tau>' s' v \<tau> c0. \<lbrakk>atom xa \<sharp> c0;  \<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 xa b c \<tau>' s'))) = lookup_fun \<Phi> f; \<Theta> ; \<B> ; \<Gamma>''  \<turnstile> v \<Leftarrow> \<lbrace> xa : b  | c \<rbrace>; atom xa \<sharp> \<Theta>; atom xa \<sharp> \<Phi>; atom xa \<sharp> \<B>; atom xa \<sharp> \<Gamma>''; atom xa \<sharp> \<Delta>; atom xa \<sharp> v; atom xa \<sharp> \<tau>; \<tau>'[xa::=v]\<^sub>v = \<tau>; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [ f  v  ]\<^sup>e \<Rightarrow> \<tau>
 6. \<And>\<Theta> \<B> \<Gamma>'' \<Delta> \<Phi> b' f bv xa b c \<tau>' s' v \<tau> c0. \<lbrakk>atom bv \<sharp> c0;  \<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 xa b c \<tau>' s'))) = lookup_fun \<Phi> f; \<Theta> ; \<B> ; \<Gamma>''  \<turnstile> v \<Leftarrow> \<lbrace> xa : b[bv::=b']\<^sub>b  | c[bv::=b']\<^sub>b \<rbrace>; atom xa \<sharp> \<Gamma>''; \<tau>'[bv::=b']\<^sub>b[xa::=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>; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [f [ b' ]  v ]\<^sup>e \<Rightarrow> \<tau>
 7. \<And>\<Theta> \<B> \<Gamma>'' \<Delta> \<Phi> v z' b1 b2 c z c0. \<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>''; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [#1v ]\<^sup>e \<Rightarrow> \<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 c0. \<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>''; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [#2v ]\<^sup>e \<Rightarrow> \<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 c0. \<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>''; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [| v |]\<^sup>e \<Rightarrow> \<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> c0. \<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>; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [ u ]\<^sup>e \<Rightarrow> \<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>
\<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>
\<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0'

goal (12 subgoals):
 1. \<And>\<Theta> \<B> \<Gamma>'' \<Delta> \<Phi> v \<tau> c0. \<lbrakk> \<Theta> ; \<B> ; \<Gamma>'' \<turnstile>\<^sub>w\<^sub>f \<Delta> ;  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi> ;  \<Theta> ; \<B> ; \<Gamma>'' \<turnstile> v \<Rightarrow> \<tau>; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [ v ]\<^sup>e \<Rightarrow> \<tau>
 2. \<And>\<Theta> \<B> \<Gamma>'' \<Delta> \<Phi> v1 z1 c1 v2 z2 c2 z3 c0. \<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>''; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [ plus v1 v2 ]\<^sup>e \<Rightarrow> \<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 c0. \<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>''; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [ leq v1 v2 ]\<^sup>e \<Rightarrow> \<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 c0. \<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}; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [ eq v1 v2 ]\<^sup>e \<Rightarrow> \<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 xa b c \<tau>' s' v \<tau> c0. \<lbrakk>atom xa \<sharp> c0;  \<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 xa b c \<tau>' s'))) = lookup_fun \<Phi> f; \<Theta> ; \<B> ; \<Gamma>''  \<turnstile> v \<Leftarrow> \<lbrace> xa : b  | c \<rbrace>; atom xa \<sharp> \<Theta>; atom xa \<sharp> \<Phi>; atom xa \<sharp> \<B>; atom xa \<sharp> \<Gamma>''; atom xa \<sharp> \<Delta>; atom xa \<sharp> v; atom xa \<sharp> \<tau>; \<tau>'[xa::=v]\<^sub>v = \<tau>; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [ f  v  ]\<^sup>e \<Rightarrow> \<tau>
 6. \<And>\<Theta> \<B> \<Gamma>'' \<Delta> \<Phi> b' f bv xa b c \<tau>' s' v \<tau> c0. \<lbrakk>atom bv \<sharp> c0;  \<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 xa b c \<tau>' s'))) = lookup_fun \<Phi> f; \<Theta> ; \<B> ; \<Gamma>''  \<turnstile> v \<Leftarrow> \<lbrace> xa : b[bv::=b']\<^sub>b  | c[bv::=b']\<^sub>b \<rbrace>; atom xa \<sharp> \<Gamma>''; \<tau>'[bv::=b']\<^sub>b[xa::=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>; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [f [ b' ]  v ]\<^sup>e \<Rightarrow> \<tau>
 7. \<And>\<Theta> \<B> \<Gamma>'' \<Delta> \<Phi> v z' b1 b2 c z c0. \<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>''; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [#1v ]\<^sup>e \<Rightarrow> \<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 c0. \<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>''; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [#2v ]\<^sup>e \<Rightarrow> \<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 c0. \<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>''; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [| v |]\<^sup>e \<Rightarrow> \<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> c0. \<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>; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [ u ]\<^sup>e \<Rightarrow> \<tau>
A total of 12 subgoals...
[PROOF STEP]
show ?case
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [ v ]\<^sup>e \<Rightarrow> \<tau>
[PROOF STEP]
proof
[PROOF STATE]
proof (state)
goal (3 subgoals):
 1.  \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta>
 2.  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi>
 3.  \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> \<turnstile> v \<Rightarrow> \<tau>
[PROOF STEP]
show \<open> \<Theta>; \<B>; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<turnstile>\<^sub>w\<^sub>f \<Delta> \<close>
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1.  \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta>
[PROOF STEP]
using wf_replace_inside2(6) valid_wfC infer_e_valI
[PROOF STATE]
proof (prove)
using this:
\<lbrakk> ?\<Theta> ; ?\<B> ; ?G \<turnstile>\<^sub>w\<^sub>f ?\<Delta> ; ?G = ?\<Gamma>' @ (?x, ?b, ?c') #\<^sub>\<Gamma> ?\<Gamma>;  ?\<Theta> ; ?\<B> ; (?x, ?b, TRUE) #\<^sub>\<Gamma> ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?c \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<B> ; ?\<Gamma>' @ (?x, ?b, ?c) #\<^sub>\<Gamma> ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta>
?\<Theta> ; ?\<B> ; ?\<Gamma>' @ (?x, ?b0.0, ?c0.0) #\<^sub>\<Gamma> ?\<Gamma>  \<Turnstile> ?c0'  \<Longrightarrow>  ?\<Theta> ; ?\<B> ; (?x, ?b0.0, TRUE) #\<^sub>\<Gamma> ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?c0.0
 \<Theta> ; \<B> ; \<Gamma>'' \<turnstile>\<^sub>w\<^sub>f \<Delta>
 \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi>
 \<Theta> ; \<B> ; \<Gamma>'' \<turnstile> v \<Rightarrow> \<tau>
\<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>
\<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0'

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

goal (2 subgoals):
 1.  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi>
 2.  \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> \<turnstile> v \<Rightarrow> \<tau>
[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_valI
[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>
\<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>
\<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0'

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 (1 subgoal):
 1.  \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> \<turnstile> v \<Rightarrow> \<tau>
[PROOF STEP]
show \<open> \<Theta>; \<B>; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<turnstile> v \<Rightarrow> \<tau>\<close>
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1.  \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> \<turnstile> v \<Rightarrow> \<tau>
[PROOF STEP]
using infer_e_valI ctx_subtype_v_eq
[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>
\<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>
\<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0'
\<lbrakk> ?\<Theta> ; ?\<B> ; ?\<Gamma>' @ (?x, ?b0.0, ?c0') #\<^sub>\<Gamma> ?\<Gamma> \<turnstile> ?v \<Rightarrow> ?t1.0; ?\<Theta> ; ?\<B> ; ?\<Gamma>' @ (?x, ?b0.0, ?c0.0) #\<^sub>\<Gamma> ?\<Gamma>  \<Turnstile> ?c0' \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<B> ; ?\<Gamma>' @ (?x, ?b0.0, ?c0.0) #\<^sub>\<Gamma> ?\<Gamma> \<turnstile> ?v \<Rightarrow> ?t1.0

goal (1 subgoal):
 1.  \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> \<turnstile> v \<Rightarrow> \<tau>
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
 \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> \<turnstile> v \<Rightarrow> \<tau>

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
\<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [ v ]\<^sup>e \<Rightarrow> \<tau>

goal (11 subgoals):
 1. \<And>\<Theta> \<B> \<Gamma>'' \<Delta> \<Phi> v1 z1 c1 v2 z2 c2 z3 c0. \<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>''; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [ plus v1 v2 ]\<^sup>e \<Rightarrow> \<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 c0. \<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>''; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [ leq v1 v2 ]\<^sup>e \<Rightarrow> \<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 c0. \<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}; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [ eq v1 v2 ]\<^sup>e \<Rightarrow> \<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 xa b c \<tau>' s' v \<tau> c0. \<lbrakk>atom xa \<sharp> c0;  \<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 xa b c \<tau>' s'))) = lookup_fun \<Phi> f; \<Theta> ; \<B> ; \<Gamma>''  \<turnstile> v \<Leftarrow> \<lbrace> xa : b  | c \<rbrace>; atom xa \<sharp> \<Theta>; atom xa \<sharp> \<Phi>; atom xa \<sharp> \<B>; atom xa \<sharp> \<Gamma>''; atom xa \<sharp> \<Delta>; atom xa \<sharp> v; atom xa \<sharp> \<tau>; \<tau>'[xa::=v]\<^sub>v = \<tau>; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [ f  v  ]\<^sup>e \<Rightarrow> \<tau>
 5. \<And>\<Theta> \<B> \<Gamma>'' \<Delta> \<Phi> b' f bv xa b c \<tau>' s' v \<tau> c0. \<lbrakk>atom bv \<sharp> c0;  \<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 xa b c \<tau>' s'))) = lookup_fun \<Phi> f; \<Theta> ; \<B> ; \<Gamma>''  \<turnstile> v \<Leftarrow> \<lbrace> xa : b[bv::=b']\<^sub>b  | c[bv::=b']\<^sub>b \<rbrace>; atom xa \<sharp> \<Gamma>''; \<tau>'[bv::=b']\<^sub>b[xa::=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>; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [f [ b' ]  v ]\<^sup>e \<Rightarrow> \<tau>
 6. \<And>\<Theta> \<B> \<Gamma>'' \<Delta> \<Phi> v z' b1 b2 c z c0. \<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>''; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [#1v ]\<^sup>e \<Rightarrow> \<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 c0. \<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>''; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [#2v ]\<^sup>e \<Rightarrow> \<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 c0. \<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>''; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [| v |]\<^sup>e \<Rightarrow> \<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> c0. \<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>; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [ u ]\<^sup>e \<Rightarrow> \<tau>
 10. \<And>\<Theta> \<B> \<Gamma>'' \<Delta> \<Phi> v1 z1 c1 v2 z2 c2 z3 c0. \<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>''; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [ v1 @@ v2 ]\<^sup>e \<Rightarrow> \<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 c0. \<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>''; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [ plus v1 v2 ]\<^sup>e \<Rightarrow> \<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 c0. \<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>''; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [ leq v1 v2 ]\<^sup>e \<Rightarrow> \<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 c0. \<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}; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [ eq v1 v2 ]\<^sup>e \<Rightarrow> \<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 xa b c \<tau>' s' v \<tau> c0. \<lbrakk>atom xa \<sharp> c0;  \<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 xa b c \<tau>' s'))) = lookup_fun \<Phi> f; \<Theta> ; \<B> ; \<Gamma>''  \<turnstile> v \<Leftarrow> \<lbrace> xa : b  | c \<rbrace>; atom xa \<sharp> \<Theta>; atom xa \<sharp> \<Phi>; atom xa \<sharp> \<B>; atom xa \<sharp> \<Gamma>''; atom xa \<sharp> \<Delta>; atom xa \<sharp> v; atom xa \<sharp> \<tau>; \<tau>'[xa::=v]\<^sub>v = \<tau>; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [ f  v  ]\<^sup>e \<Rightarrow> \<tau>
 5. \<And>\<Theta> \<B> \<Gamma>'' \<Delta> \<Phi> b' f bv xa b c \<tau>' s' v \<tau> c0. \<lbrakk>atom bv \<sharp> c0;  \<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 xa b c \<tau>' s'))) = lookup_fun \<Phi> f; \<Theta> ; \<B> ; \<Gamma>''  \<turnstile> v \<Leftarrow> \<lbrace> xa : b[bv::=b']\<^sub>b  | c[bv::=b']\<^sub>b \<rbrace>; atom xa \<sharp> \<Gamma>''; \<tau>'[bv::=b']\<^sub>b[xa::=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>; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [f [ b' ]  v ]\<^sup>e \<Rightarrow> \<tau>
 6. \<And>\<Theta> \<B> \<Gamma>'' \<Delta> \<Phi> v z' b1 b2 c z c0. \<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>''; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [#1v ]\<^sup>e \<Rightarrow> \<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 c0. \<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>''; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [#2v ]\<^sup>e \<Rightarrow> \<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 c0. \<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>''; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [| v |]\<^sup>e \<Rightarrow> \<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> c0. \<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>; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [ u ]\<^sup>e \<Rightarrow> \<tau>
 10. \<And>\<Theta> \<B> \<Gamma>'' \<Delta> \<Phi> v1 z1 c1 v2 z2 c2 z3 c0. \<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>''; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [ v1 @@ v2 ]\<^sup>e \<Rightarrow> \<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>''
\<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>
\<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0'

goal (11 subgoals):
 1. \<And>\<Theta> \<B> \<Gamma>'' \<Delta> \<Phi> v1 z1 c1 v2 z2 c2 z3 c0. \<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>''; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [ plus v1 v2 ]\<^sup>e \<Rightarrow> \<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 c0. \<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>''; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [ leq v1 v2 ]\<^sup>e \<Rightarrow> \<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 c0. \<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}; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [ eq v1 v2 ]\<^sup>e \<Rightarrow> \<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 xa b c \<tau>' s' v \<tau> c0. \<lbrakk>atom xa \<sharp> c0;  \<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 xa b c \<tau>' s'))) = lookup_fun \<Phi> f; \<Theta> ; \<B> ; \<Gamma>''  \<turnstile> v \<Leftarrow> \<lbrace> xa : b  | c \<rbrace>; atom xa \<sharp> \<Theta>; atom xa \<sharp> \<Phi>; atom xa \<sharp> \<B>; atom xa \<sharp> \<Gamma>''; atom xa \<sharp> \<Delta>; atom xa \<sharp> v; atom xa \<sharp> \<tau>; \<tau>'[xa::=v]\<^sub>v = \<tau>; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [ f  v  ]\<^sup>e \<Rightarrow> \<tau>
 5. \<And>\<Theta> \<B> \<Gamma>'' \<Delta> \<Phi> b' f bv xa b c \<tau>' s' v \<tau> c0. \<lbrakk>atom bv \<sharp> c0;  \<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 xa b c \<tau>' s'))) = lookup_fun \<Phi> f; \<Theta> ; \<B> ; \<Gamma>''  \<turnstile> v \<Leftarrow> \<lbrace> xa : b[bv::=b']\<^sub>b  | c[bv::=b']\<^sub>b \<rbrace>; atom xa \<sharp> \<Gamma>''; \<tau>'[bv::=b']\<^sub>b[xa::=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>; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [f [ b' ]  v ]\<^sup>e \<Rightarrow> \<tau>
 6. \<And>\<Theta> \<B> \<Gamma>'' \<Delta> \<Phi> v z' b1 b2 c z c0. \<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>''; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [#1v ]\<^sup>e \<Rightarrow> \<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 c0. \<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>''; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [#2v ]\<^sup>e \<Rightarrow> \<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 c0. \<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>''; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [| v |]\<^sup>e \<Rightarrow> \<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> c0. \<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>; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [ u ]\<^sup>e \<Rightarrow> \<tau>
 10. \<And>\<Theta> \<B> \<Gamma>'' \<Delta> \<Phi> v1 z1 c1 v2 z2 c2 z3 c0. \<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>''; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [ v1 @@ v2 ]\<^sup>e \<Rightarrow> \<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]
show ?case
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [ plus v1 v2 ]\<^sup>e \<Rightarrow> \<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]
proof
[PROOF STATE]
proof (state)
goal (6 subgoals):
 1.  \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta>
 2.  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi>
 3.  \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> \<turnstile> v1 \<Rightarrow> \<lbrace> ?z1.0 : B_int  | ?c1.0 \<rbrace>
 4.  \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> \<turnstile> v2 \<Rightarrow> \<lbrace> ?z2.0 : B_int  | ?c2.0 \<rbrace>
 5. atom z3 \<sharp> [ plus v1 v2 ]\<^sup>e
 6. atom z3 \<sharp> \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>
[PROOF STEP]
show \<open> \<Theta>; \<B>; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<turnstile>\<^sub>w\<^sub>f \<Delta> \<close>
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1.  \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta>
[PROOF STEP]
using wf_replace_inside2(6) valid_wfC infer_e_plusI
[PROOF STATE]
proof (prove)
using this:
\<lbrakk> ?\<Theta> ; ?\<B> ; ?G \<turnstile>\<^sub>w\<^sub>f ?\<Delta> ; ?G = ?\<Gamma>' @ (?x, ?b, ?c') #\<^sub>\<Gamma> ?\<Gamma>;  ?\<Theta> ; ?\<B> ; (?x, ?b, TRUE) #\<^sub>\<Gamma> ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?c \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<B> ; ?\<Gamma>' @ (?x, ?b, ?c) #\<^sub>\<Gamma> ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta>
?\<Theta> ; ?\<B> ; ?\<Gamma>' @ (?x, ?b0.0, ?c0.0) #\<^sub>\<Gamma> ?\<Gamma>  \<Turnstile> ?c0'  \<Longrightarrow>  ?\<Theta> ; ?\<B> ; (?x, ?b0.0, TRUE) #\<^sub>\<Gamma> ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?c0.0
 \<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>''
\<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>
\<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0'

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

goal (5 subgoals):
 1.  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi>
 2.  \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> \<turnstile> v1 \<Rightarrow> \<lbrace> ?z1.0 : B_int  | ?c1.0 \<rbrace>
 3.  \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> \<turnstile> v2 \<Rightarrow> \<lbrace> ?z2.0 : B_int  | ?c2.0 \<rbrace>
 4. atom z3 \<sharp> [ plus v1 v2 ]\<^sup>e
 5. atom z3 \<sharp> \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>
[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_plusI
[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>''
\<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>
\<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0'

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 (4 subgoals):
 1.  \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> \<turnstile> v1 \<Rightarrow> \<lbrace> ?z1.0 : B_int  | ?c1.0 \<rbrace>
 2.  \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> \<turnstile> v2 \<Rightarrow> \<lbrace> ?z2.0 : B_int  | ?c2.0 \<rbrace>
 3. atom z3 \<sharp> [ plus v1 v2 ]\<^sup>e
 4. atom z3 \<sharp> \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>
[PROOF STEP]
show *:\<open> \<Theta>; \<B>; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<turnstile> v1 \<Rightarrow> \<lbrace> z1 : B_int  | c1 \<rbrace>\<close>
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1.  \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> \<turnstile> v1 \<Rightarrow> \<lbrace> z1 : B_int  | c1 \<rbrace>
[PROOF STEP]
using infer_e_plusI ctx_subtype_v_eq
[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>''
\<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>
\<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0'
\<lbrakk> ?\<Theta> ; ?\<B> ; ?\<Gamma>' @ (?x, ?b0.0, ?c0') #\<^sub>\<Gamma> ?\<Gamma> \<turnstile> ?v \<Rightarrow> ?t1.0; ?\<Theta> ; ?\<B> ; ?\<Gamma>' @ (?x, ?b0.0, ?c0.0) #\<^sub>\<Gamma> ?\<Gamma>  \<Turnstile> ?c0' \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<B> ; ?\<Gamma>' @ (?x, ?b0.0, ?c0.0) #\<^sub>\<Gamma> ?\<Gamma> \<turnstile> ?v \<Rightarrow> ?t1.0

goal (1 subgoal):
 1.  \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> \<turnstile> v1 \<Rightarrow> \<lbrace> z1 : B_int  | c1 \<rbrace>
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
 \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> \<turnstile> v1 \<Rightarrow> \<lbrace> z1 : B_int  | c1 \<rbrace>

goal (3 subgoals):
 1.  \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> \<turnstile> v2 \<Rightarrow> \<lbrace> ?z2.0 : B_int  | ?c2.0 \<rbrace>
 2. atom z3 \<sharp> [ plus v1 v2 ]\<^sup>e
 3. atom z3 \<sharp> \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>
[PROOF STEP]
show \<open> \<Theta>; \<B>; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<turnstile> v2 \<Rightarrow> \<lbrace> z2 : B_int  | c2 \<rbrace>\<close>
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1.  \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> \<turnstile> v2 \<Rightarrow> \<lbrace> z2 : B_int  | c2 \<rbrace>
[PROOF STEP]
using infer_e_plusI ctx_subtype_v_eq
[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>''
\<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>
\<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0'
\<lbrakk> ?\<Theta> ; ?\<B> ; ?\<Gamma>' @ (?x, ?b0.0, ?c0') #\<^sub>\<Gamma> ?\<Gamma> \<turnstile> ?v \<Rightarrow> ?t1.0; ?\<Theta> ; ?\<B> ; ?\<Gamma>' @ (?x, ?b0.0, ?c0.0) #\<^sub>\<Gamma> ?\<Gamma>  \<Turnstile> ?c0' \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<B> ; ?\<Gamma>' @ (?x, ?b0.0, ?c0.0) #\<^sub>\<Gamma> ?\<Gamma> \<turnstile> ?v \<Rightarrow> ?t1.0

goal (1 subgoal):
 1.  \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> \<turnstile> v2 \<Rightarrow> \<lbrace> z2 : B_int  | c2 \<rbrace>
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
 \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> \<turnstile> v2 \<Rightarrow> \<lbrace> z2 : B_int  | c2 \<rbrace>

goal (2 subgoals):
 1. atom z3 \<sharp> [ plus v1 v2 ]\<^sup>e
 2. atom z3 \<sharp> \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>
[PROOF STEP]
show \<open>atom z3 \<sharp> AE_op Plus v1 v2\<close>
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. atom z3 \<sharp> [ plus v1 v2 ]\<^sup>e
[PROOF STEP]
using infer_e_plusI
[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>''
\<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>
\<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0'

goal (1 subgoal):
 1. atom z3 \<sharp> [ plus v1 v2 ]\<^sup>e
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
atom z3 \<sharp> [ plus v1 v2 ]\<^sup>e

goal (1 subgoal):
 1. atom z3 \<sharp> \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>
[PROOF STEP]
show   \<open>atom z3 \<sharp> \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>\<close>
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. atom z3 \<sharp> \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>
[PROOF STEP]
using * infer_e_plusI fresh_replace_inside  infer_v_wf
[PROOF STATE]
proof (prove)
using this:
 \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> \<turnstile> v1 \<Rightarrow> \<lbrace> z1 : B_int  | c1 \<rbrace>
 \<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>''
\<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>
\<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0'
\<lbrakk> ?P ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?\<Gamma>'' @ (?x, ?b, ?c) #\<^sub>\<Gamma> ?\<Gamma> ;  ?P ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?\<Gamma>'' @ (?x, ?b, ?c') #\<^sub>\<Gamma> ?\<Gamma> \<rbrakk> \<Longrightarrow> atom ?y \<sharp> ?\<Gamma>'' @ (?x, ?b, ?c) #\<^sub>\<Gamma> ?\<Gamma> = atom ?y \<sharp> ?\<Gamma>'' @ (?x, ?b, ?c') #\<^sub>\<Gamma> ?\<Gamma>
 ?\<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. atom z3 \<sharp> \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>
[PROOF STEP]
by metis
[PROOF STATE]
proof (state)
this:
atom z3 \<sharp> \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
\<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [ plus v1 v2 ]\<^sup>e \<Rightarrow> \<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 c0. \<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>''; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [ leq v1 v2 ]\<^sup>e \<Rightarrow> \<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 c0. \<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}; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [ eq v1 v2 ]\<^sup>e \<Rightarrow> \<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 xa b c \<tau>' s' v \<tau> c0. \<lbrakk>atom xa \<sharp> c0;  \<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 xa b c \<tau>' s'))) = lookup_fun \<Phi> f; \<Theta> ; \<B> ; \<Gamma>''  \<turnstile> v \<Leftarrow> \<lbrace> xa : b  | c \<rbrace>; atom xa \<sharp> \<Theta>; atom xa \<sharp> \<Phi>; atom xa \<sharp> \<B>; atom xa \<sharp> \<Gamma>''; atom xa \<sharp> \<Delta>; atom xa \<sharp> v; atom xa \<sharp> \<tau>; \<tau>'[xa::=v]\<^sub>v = \<tau>; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [ f  v  ]\<^sup>e \<Rightarrow> \<tau>
 4. \<And>\<Theta> \<B> \<Gamma>'' \<Delta> \<Phi> b' f bv xa b c \<tau>' s' v \<tau> c0. \<lbrakk>atom bv \<sharp> c0;  \<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 xa b c \<tau>' s'))) = lookup_fun \<Phi> f; \<Theta> ; \<B> ; \<Gamma>''  \<turnstile> v \<Leftarrow> \<lbrace> xa : b[bv::=b']\<^sub>b  | c[bv::=b']\<^sub>b \<rbrace>; atom xa \<sharp> \<Gamma>''; \<tau>'[bv::=b']\<^sub>b[xa::=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>; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [f [ b' ]  v ]\<^sup>e \<Rightarrow> \<tau>
 5. \<And>\<Theta> \<B> \<Gamma>'' \<Delta> \<Phi> v z' b1 b2 c z c0. \<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>''; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [#1v ]\<^sup>e \<Rightarrow> \<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 c0. \<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>''; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [#2v ]\<^sup>e \<Rightarrow> \<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 c0. \<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>''; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [| v |]\<^sup>e \<Rightarrow> \<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> c0. \<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>; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [ u ]\<^sup>e \<Rightarrow> \<tau>
 9. \<And>\<Theta> \<B> \<Gamma>'' \<Delta> \<Phi> v1 z1 c1 v2 z2 c2 z3 c0. \<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>''; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [ v1 @@ v2 ]\<^sup>e \<Rightarrow> \<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 c0. \<lbrakk>atom z3 \<sharp> c0; atom z1 \<sharp> c0; atom z2 \<sharp> c0;  \<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>''; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [ v1  v2 ]\<^sup>e \<Rightarrow> \<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 c0. \<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>''; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [ leq v1 v2 ]\<^sup>e \<Rightarrow> \<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 c0. \<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}; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [ eq v1 v2 ]\<^sup>e \<Rightarrow> \<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 xa b c \<tau>' s' v \<tau> c0. \<lbrakk>atom xa \<sharp> c0;  \<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 xa b c \<tau>' s'))) = lookup_fun \<Phi> f; \<Theta> ; \<B> ; \<Gamma>''  \<turnstile> v \<Leftarrow> \<lbrace> xa : b  | c \<rbrace>; atom xa \<sharp> \<Theta>; atom xa \<sharp> \<Phi>; atom xa \<sharp> \<B>; atom xa \<sharp> \<Gamma>''; atom xa \<sharp> \<Delta>; atom xa \<sharp> v; atom xa \<sharp> \<tau>; \<tau>'[xa::=v]\<^sub>v = \<tau>; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [ f  v  ]\<^sup>e \<Rightarrow> \<tau>
 4. \<And>\<Theta> \<B> \<Gamma>'' \<Delta> \<Phi> b' f bv xa b c \<tau>' s' v \<tau> c0. \<lbrakk>atom bv \<sharp> c0;  \<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 xa b c \<tau>' s'))) = lookup_fun \<Phi> f; \<Theta> ; \<B> ; \<Gamma>''  \<turnstile> v \<Leftarrow> \<lbrace> xa : b[bv::=b']\<^sub>b  | c[bv::=b']\<^sub>b \<rbrace>; atom xa \<sharp> \<Gamma>''; \<tau>'[bv::=b']\<^sub>b[xa::=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>; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [f [ b' ]  v ]\<^sup>e \<Rightarrow> \<tau>
 5. \<And>\<Theta> \<B> \<Gamma>'' \<Delta> \<Phi> v z' b1 b2 c z c0. \<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>''; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [#1v ]\<^sup>e \<Rightarrow> \<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 c0. \<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>''; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [#2v ]\<^sup>e \<Rightarrow> \<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 c0. \<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>''; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [| v |]\<^sup>e \<Rightarrow> \<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> c0. \<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>; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [ u ]\<^sup>e \<Rightarrow> \<tau>
 9. \<And>\<Theta> \<B> \<Gamma>'' \<Delta> \<Phi> v1 z1 c1 v2 z2 c2 z3 c0. \<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>''; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [ v1 @@ v2 ]\<^sup>e \<Rightarrow> \<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 c0. \<lbrakk>atom z3 \<sharp> c0; atom z1 \<sharp> c0; atom z2 \<sharp> c0;  \<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>''; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [ v1  v2 ]\<^sup>e \<Rightarrow> \<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> \<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> [ leq v1 v2 ]\<^sup>e
atom z3 \<sharp> \<Gamma>''
\<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>
\<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0'

goal (10 subgoals):
 1. \<And>\<Theta> \<B> \<Gamma>'' \<Delta> \<Phi> v1 z1 c1 v2 z2 c2 z3 c0. \<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>''; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [ leq v1 v2 ]\<^sup>e \<Rightarrow> \<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 c0. \<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}; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [ eq v1 v2 ]\<^sup>e \<Rightarrow> \<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 xa b c \<tau>' s' v \<tau> c0. \<lbrakk>atom xa \<sharp> c0;  \<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 xa b c \<tau>' s'))) = lookup_fun \<Phi> f; \<Theta> ; \<B> ; \<Gamma>''  \<turnstile> v \<Leftarrow> \<lbrace> xa : b  | c \<rbrace>; atom xa \<sharp> \<Theta>; atom xa \<sharp> \<Phi>; atom xa \<sharp> \<B>; atom xa \<sharp> \<Gamma>''; atom xa \<sharp> \<Delta>; atom xa \<sharp> v; atom xa \<sharp> \<tau>; \<tau>'[xa::=v]\<^sub>v = \<tau>; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [ f  v  ]\<^sup>e \<Rightarrow> \<tau>
 4. \<And>\<Theta> \<B> \<Gamma>'' \<Delta> \<Phi> b' f bv xa b c \<tau>' s' v \<tau> c0. \<lbrakk>atom bv \<sharp> c0;  \<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 xa b c \<tau>' s'))) = lookup_fun \<Phi> f; \<Theta> ; \<B> ; \<Gamma>''  \<turnstile> v \<Leftarrow> \<lbrace> xa : b[bv::=b']\<^sub>b  | c[bv::=b']\<^sub>b \<rbrace>; atom xa \<sharp> \<Gamma>''; \<tau>'[bv::=b']\<^sub>b[xa::=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>; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [f [ b' ]  v ]\<^sup>e \<Rightarrow> \<tau>
 5. \<And>\<Theta> \<B> \<Gamma>'' \<Delta> \<Phi> v z' b1 b2 c z c0. \<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>''; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [#1v ]\<^sup>e \<Rightarrow> \<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 c0. \<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>''; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [#2v ]\<^sup>e \<Rightarrow> \<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 c0. \<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>''; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [| v |]\<^sup>e \<Rightarrow> \<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> c0. \<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>; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [ u ]\<^sup>e \<Rightarrow> \<tau>
 9. \<And>\<Theta> \<B> \<Gamma>'' \<Delta> \<Phi> v1 z1 c1 v2 z2 c2 z3 c0. \<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>''; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [ v1 @@ v2 ]\<^sup>e \<Rightarrow> \<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 c0. \<lbrakk>atom z3 \<sharp> c0; atom z1 \<sharp> c0; atom z2 \<sharp> c0;  \<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>''; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [ v1  v2 ]\<^sup>e \<Rightarrow> \<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]
show ?case
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [ leq v1 v2 ]\<^sup>e \<Rightarrow> \<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>
[PROOF STEP]
proof
[PROOF STATE]
proof (state)
goal (6 subgoals):
 1.  \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta>
 2.  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi>
 3.  \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> \<turnstile> v1 \<Rightarrow> \<lbrace> ?z1.0 : B_int  | ?c1.0 \<rbrace>
 4.  \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> \<turnstile> v2 \<Rightarrow> \<lbrace> ?z2.0 : B_int  | ?c2.0 \<rbrace>
 5. atom z3 \<sharp> [ leq v1 v2 ]\<^sup>e
 6. atom z3 \<sharp> \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>
[PROOF STEP]
show \<open> \<Theta>; \<B>; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<turnstile>\<^sub>w\<^sub>f \<Delta> \<close>
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1.  \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta>
[PROOF STEP]
using wf_replace_inside2(6) valid_wfC infer_e_leqI
[PROOF STATE]
proof (prove)
using this:
\<lbrakk> ?\<Theta> ; ?\<B> ; ?G \<turnstile>\<^sub>w\<^sub>f ?\<Delta> ; ?G = ?\<Gamma>' @ (?x, ?b, ?c') #\<^sub>\<Gamma> ?\<Gamma>;  ?\<Theta> ; ?\<B> ; (?x, ?b, TRUE) #\<^sub>\<Gamma> ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?c \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<B> ; ?\<Gamma>' @ (?x, ?b, ?c) #\<^sub>\<Gamma> ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta>
?\<Theta> ; ?\<B> ; ?\<Gamma>' @ (?x, ?b0.0, ?c0.0) #\<^sub>\<Gamma> ?\<Gamma>  \<Turnstile> ?c0'  \<Longrightarrow>  ?\<Theta> ; ?\<B> ; (?x, ?b0.0, TRUE) #\<^sub>\<Gamma> ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?c0.0
 \<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>''
\<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>
\<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0'

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

goal (5 subgoals):
 1.  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi>
 2.  \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> \<turnstile> v1 \<Rightarrow> \<lbrace> ?z1.0 : B_int  | ?c1.0 \<rbrace>
 3.  \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> \<turnstile> v2 \<Rightarrow> \<lbrace> ?z2.0 : B_int  | ?c2.0 \<rbrace>
 4. atom z3 \<sharp> [ leq v1 v2 ]\<^sup>e
 5. atom z3 \<sharp> \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>
[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_leqI
[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> [ leq v1 v2 ]\<^sup>e
atom z3 \<sharp> \<Gamma>''
\<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>
\<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0'

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 (4 subgoals):
 1.  \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> \<turnstile> v1 \<Rightarrow> \<lbrace> ?z1.0 : B_int  | ?c1.0 \<rbrace>
 2.  \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> \<turnstile> v2 \<Rightarrow> \<lbrace> ?z2.0 : B_int  | ?c2.0 \<rbrace>
 3. atom z3 \<sharp> [ leq v1 v2 ]\<^sup>e
 4. atom z3 \<sharp> \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>
[PROOF STEP]
show *:\<open> \<Theta>; \<B>; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<turnstile> v1 \<Rightarrow> \<lbrace> z1 : B_int  | c1 \<rbrace>\<close>
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1.  \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> \<turnstile> v1 \<Rightarrow> \<lbrace> z1 : B_int  | c1 \<rbrace>
[PROOF STEP]
using infer_e_leqI ctx_subtype_v_eq
[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> [ leq v1 v2 ]\<^sup>e
atom z3 \<sharp> \<Gamma>''
\<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>
\<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0'
\<lbrakk> ?\<Theta> ; ?\<B> ; ?\<Gamma>' @ (?x, ?b0.0, ?c0') #\<^sub>\<Gamma> ?\<Gamma> \<turnstile> ?v \<Rightarrow> ?t1.0; ?\<Theta> ; ?\<B> ; ?\<Gamma>' @ (?x, ?b0.0, ?c0.0) #\<^sub>\<Gamma> ?\<Gamma>  \<Turnstile> ?c0' \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<B> ; ?\<Gamma>' @ (?x, ?b0.0, ?c0.0) #\<^sub>\<Gamma> ?\<Gamma> \<turnstile> ?v \<Rightarrow> ?t1.0

goal (1 subgoal):
 1.  \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> \<turnstile> v1 \<Rightarrow> \<lbrace> z1 : B_int  | c1 \<rbrace>
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
 \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> \<turnstile> v1 \<Rightarrow> \<lbrace> z1 : B_int  | c1 \<rbrace>

goal (3 subgoals):
 1.  \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> \<turnstile> v2 \<Rightarrow> \<lbrace> ?z2.0 : B_int  | ?c2.0 \<rbrace>
 2. atom z3 \<sharp> [ leq v1 v2 ]\<^sup>e
 3. atom z3 \<sharp> \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>
[PROOF STEP]
show \<open> \<Theta>; \<B>; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<turnstile> v2 \<Rightarrow> \<lbrace> z2 : B_int  | c2 \<rbrace>\<close>
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1.  \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> \<turnstile> v2 \<Rightarrow> \<lbrace> z2 : B_int  | c2 \<rbrace>
[PROOF STEP]
using infer_e_leqI ctx_subtype_v_eq
[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> [ leq v1 v2 ]\<^sup>e
atom z3 \<sharp> \<Gamma>''
\<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>
\<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0'
\<lbrakk> ?\<Theta> ; ?\<B> ; ?\<Gamma>' @ (?x, ?b0.0, ?c0') #\<^sub>\<Gamma> ?\<Gamma> \<turnstile> ?v \<Rightarrow> ?t1.0; ?\<Theta> ; ?\<B> ; ?\<Gamma>' @ (?x, ?b0.0, ?c0.0) #\<^sub>\<Gamma> ?\<Gamma>  \<Turnstile> ?c0' \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<B> ; ?\<Gamma>' @ (?x, ?b0.0, ?c0.0) #\<^sub>\<Gamma> ?\<Gamma> \<turnstile> ?v \<Rightarrow> ?t1.0

goal (1 subgoal):
 1.  \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> \<turnstile> v2 \<Rightarrow> \<lbrace> z2 : B_int  | c2 \<rbrace>
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
 \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> \<turnstile> v2 \<Rightarrow> \<lbrace> z2 : B_int  | c2 \<rbrace>

goal (2 subgoals):
 1. atom z3 \<sharp> [ leq v1 v2 ]\<^sup>e
 2. atom z3 \<sharp> \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>
[PROOF STEP]
show \<open>atom z3 \<sharp> AE_op LEq v1 v2\<close>
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. atom z3 \<sharp> [ leq v1 v2 ]\<^sup>e
[PROOF STEP]
using infer_e_leqI
[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> [ leq v1 v2 ]\<^sup>e
atom z3 \<sharp> \<Gamma>''
\<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>
\<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0'

goal (1 subgoal):
 1. atom z3 \<sharp> [ leq v1 v2 ]\<^sup>e
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
atom z3 \<sharp> [ leq v1 v2 ]\<^sup>e

goal (1 subgoal):
 1. atom z3 \<sharp> \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>
[PROOF STEP]
show   \<open>atom z3 \<sharp> \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>\<close>
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. atom z3 \<sharp> \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>
[PROOF STEP]
using * infer_e_leqI fresh_replace_inside  infer_v_wf
[PROOF STATE]
proof (prove)
using this:
 \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> \<turnstile> v1 \<Rightarrow> \<lbrace> z1 : B_int  | c1 \<rbrace>
 \<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>''
\<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>
\<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0'
\<lbrakk> ?P ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?\<Gamma>'' @ (?x, ?b, ?c) #\<^sub>\<Gamma> ?\<Gamma> ;  ?P ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?\<Gamma>'' @ (?x, ?b, ?c') #\<^sub>\<Gamma> ?\<Gamma> \<rbrakk> \<Longrightarrow> atom ?y \<sharp> ?\<Gamma>'' @ (?x, ?b, ?c) #\<^sub>\<Gamma> ?\<Gamma> = atom ?y \<sharp> ?\<Gamma>'' @ (?x, ?b, ?c') #\<^sub>\<Gamma> ?\<Gamma>
 ?\<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. atom z3 \<sharp> \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>
[PROOF STEP]
by metis
[PROOF STATE]
proof (state)
this:
atom z3 \<sharp> \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
\<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [ leq v1 v2 ]\<^sup>e \<Rightarrow> \<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>

goal (9 subgoals):
 1. \<And>\<Theta> \<B> \<Gamma>'' \<Delta> \<Phi> v1 z1 b c1 v2 z2 c2 z3 c0. \<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}; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [ eq v1 v2 ]\<^sup>e \<Rightarrow> \<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 xa b c \<tau>' s' v \<tau> c0. \<lbrakk>atom xa \<sharp> c0;  \<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 xa b c \<tau>' s'))) = lookup_fun \<Phi> f; \<Theta> ; \<B> ; \<Gamma>''  \<turnstile> v \<Leftarrow> \<lbrace> xa : b  | c \<rbrace>; atom xa \<sharp> \<Theta>; atom xa \<sharp> \<Phi>; atom xa \<sharp> \<B>; atom xa \<sharp> \<Gamma>''; atom xa \<sharp> \<Delta>; atom xa \<sharp> v; atom xa \<sharp> \<tau>; \<tau>'[xa::=v]\<^sub>v = \<tau>; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [ f  v  ]\<^sup>e \<Rightarrow> \<tau>
 3. \<And>\<Theta> \<B> \<Gamma>'' \<Delta> \<Phi> b' f bv xa b c \<tau>' s' v \<tau> c0. \<lbrakk>atom bv \<sharp> c0;  \<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 xa b c \<tau>' s'))) = lookup_fun \<Phi> f; \<Theta> ; \<B> ; \<Gamma>''  \<turnstile> v \<Leftarrow> \<lbrace> xa : b[bv::=b']\<^sub>b  | c[bv::=b']\<^sub>b \<rbrace>; atom xa \<sharp> \<Gamma>''; \<tau>'[bv::=b']\<^sub>b[xa::=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>; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [f [ b' ]  v ]\<^sup>e \<Rightarrow> \<tau>
 4. \<And>\<Theta> \<B> \<Gamma>'' \<Delta> \<Phi> v z' b1 b2 c z c0. \<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>''; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [#1v ]\<^sup>e \<Rightarrow> \<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 c0. \<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>''; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [#2v ]\<^sup>e \<Rightarrow> \<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 c0. \<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>''; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [| v |]\<^sup>e \<Rightarrow> \<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> c0. \<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>; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [ u ]\<^sup>e \<Rightarrow> \<tau>
 8. \<And>\<Theta> \<B> \<Gamma>'' \<Delta> \<Phi> v1 z1 c1 v2 z2 c2 z3 c0. \<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>''; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [ v1 @@ v2 ]\<^sup>e \<Rightarrow> \<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 c0. \<lbrakk>atom z3 \<sharp> c0; atom z1 \<sharp> c0; atom z2 \<sharp> c0;  \<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>''; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [ v1  v2 ]\<^sup>e \<Rightarrow> \<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 c0. \<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}; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [ eq v1 v2 ]\<^sup>e \<Rightarrow> \<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 xa b c \<tau>' s' v \<tau> c0. \<lbrakk>atom xa \<sharp> c0;  \<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 xa b c \<tau>' s'))) = lookup_fun \<Phi> f; \<Theta> ; \<B> ; \<Gamma>''  \<turnstile> v \<Leftarrow> \<lbrace> xa : b  | c \<rbrace>; atom xa \<sharp> \<Theta>; atom xa \<sharp> \<Phi>; atom xa \<sharp> \<B>; atom xa \<sharp> \<Gamma>''; atom xa \<sharp> \<Delta>; atom xa \<sharp> v; atom xa \<sharp> \<tau>; \<tau>'[xa::=v]\<^sub>v = \<tau>; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [ f  v  ]\<^sup>e \<Rightarrow> \<tau>
 3. \<And>\<Theta> \<B> \<Gamma>'' \<Delta> \<Phi> b' f bv xa b c \<tau>' s' v \<tau> c0. \<lbrakk>atom bv \<sharp> c0;  \<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 xa b c \<tau>' s'))) = lookup_fun \<Phi> f; \<Theta> ; \<B> ; \<Gamma>''  \<turnstile> v \<Leftarrow> \<lbrace> xa : b[bv::=b']\<^sub>b  | c[bv::=b']\<^sub>b \<rbrace>; atom xa \<sharp> \<Gamma>''; \<tau>'[bv::=b']\<^sub>b[xa::=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>; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [f [ b' ]  v ]\<^sup>e \<Rightarrow> \<tau>
 4. \<And>\<Theta> \<B> \<Gamma>'' \<Delta> \<Phi> v z' b1 b2 c z c0. \<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>''; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [#1v ]\<^sup>e \<Rightarrow> \<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 c0. \<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>''; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [#2v ]\<^sup>e \<Rightarrow> \<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 c0. \<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>''; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [| v |]\<^sup>e \<Rightarrow> \<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> c0. \<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>; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [ u ]\<^sup>e \<Rightarrow> \<tau>
 8. \<And>\<Theta> \<B> \<Gamma>'' \<Delta> \<Phi> v1 z1 c1 v2 z2 c2 z3 c0. \<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>''; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [ v1 @@ v2 ]\<^sup>e \<Rightarrow> \<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 c0. \<lbrakk>atom z3 \<sharp> c0; atom z1 \<sharp> c0; atom z2 \<sharp> c0;  \<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>''; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [ v1  v2 ]\<^sup>e \<Rightarrow> \<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> \<Phi> v1 z1 bb 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 : bb  | c1 \<rbrace>
 \<Theta> ; \<B> ; \<Gamma>'' \<turnstile> v2 \<Rightarrow> \<lbrace> z2 : bb  | c2 \<rbrace>
atom z3 \<sharp> [ eq v1 v2 ]\<^sup>e
atom z3 \<sharp> \<Gamma>''
bb \<in> {B_bool, B_int, B_unit}
\<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>
\<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0'

goal (9 subgoals):
 1. \<And>\<Theta> \<B> \<Gamma>'' \<Delta> \<Phi> v1 z1 b c1 v2 z2 c2 z3 c0. \<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}; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [ eq v1 v2 ]\<^sup>e \<Rightarrow> \<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 xa b c \<tau>' s' v \<tau> c0. \<lbrakk>atom xa \<sharp> c0;  \<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 xa b c \<tau>' s'))) = lookup_fun \<Phi> f; \<Theta> ; \<B> ; \<Gamma>''  \<turnstile> v \<Leftarrow> \<lbrace> xa : b  | c \<rbrace>; atom xa \<sharp> \<Theta>; atom xa \<sharp> \<Phi>; atom xa \<sharp> \<B>; atom xa \<sharp> \<Gamma>''; atom xa \<sharp> \<Delta>; atom xa \<sharp> v; atom xa \<sharp> \<tau>; \<tau>'[xa::=v]\<^sub>v = \<tau>; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [ f  v  ]\<^sup>e \<Rightarrow> \<tau>
 3. \<And>\<Theta> \<B> \<Gamma>'' \<Delta> \<Phi> b' f bv xa b c \<tau>' s' v \<tau> c0. \<lbrakk>atom bv \<sharp> c0;  \<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 xa b c \<tau>' s'))) = lookup_fun \<Phi> f; \<Theta> ; \<B> ; \<Gamma>''  \<turnstile> v \<Leftarrow> \<lbrace> xa : b[bv::=b']\<^sub>b  | c[bv::=b']\<^sub>b \<rbrace>; atom xa \<sharp> \<Gamma>''; \<tau>'[bv::=b']\<^sub>b[xa::=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>; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [f [ b' ]  v ]\<^sup>e \<Rightarrow> \<tau>
 4. \<And>\<Theta> \<B> \<Gamma>'' \<Delta> \<Phi> v z' b1 b2 c z c0. \<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>''; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [#1v ]\<^sup>e \<Rightarrow> \<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 c0. \<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>''; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [#2v ]\<^sup>e \<Rightarrow> \<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 c0. \<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>''; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [| v |]\<^sup>e \<Rightarrow> \<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> c0. \<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>; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [ u ]\<^sup>e \<Rightarrow> \<tau>
 8. \<And>\<Theta> \<B> \<Gamma>'' \<Delta> \<Phi> v1 z1 c1 v2 z2 c2 z3 c0. \<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>''; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [ v1 @@ v2 ]\<^sup>e \<Rightarrow> \<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 c0. \<lbrakk>atom z3 \<sharp> c0; atom z1 \<sharp> c0; atom z2 \<sharp> c0;  \<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>''; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [ v1  v2 ]\<^sup>e \<Rightarrow> \<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]
show ?case
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [ eq v1 v2 ]\<^sup>e \<Rightarrow> \<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>
[PROOF STEP]
proof
[PROOF STATE]
proof (state)
goal (7 subgoals):
 1.  \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta>
 2.  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi>
 3.  \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> \<turnstile> v1 \<Rightarrow> \<lbrace> ?z1.0 : ?b  | ?c1.0 \<rbrace>
 4.  \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> \<turnstile> v2 \<Rightarrow> \<lbrace> ?z2.0 : ?b  | ?c2.0 \<rbrace>
 5. atom z3 \<sharp> [ eq v1 v2 ]\<^sup>e
 6. atom z3 \<sharp> \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>
 7. ?b \<in> {B_bool, B_int, B_unit}
[PROOF STEP]
show \<open> \<Theta>; \<B>; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<turnstile>\<^sub>w\<^sub>f \<Delta> \<close>
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1.  \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta>
[PROOF STEP]
using wf_replace_inside2(6) valid_wfC infer_e_eqI
[PROOF STATE]
proof (prove)
using this:
\<lbrakk> ?\<Theta> ; ?\<B> ; ?G \<turnstile>\<^sub>w\<^sub>f ?\<Delta> ; ?G = ?\<Gamma>' @ (?x, ?b, ?c') #\<^sub>\<Gamma> ?\<Gamma>;  ?\<Theta> ; ?\<B> ; (?x, ?b, TRUE) #\<^sub>\<Gamma> ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?c \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<B> ; ?\<Gamma>' @ (?x, ?b, ?c) #\<^sub>\<Gamma> ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta>
?\<Theta> ; ?\<B> ; ?\<Gamma>' @ (?x, ?b0.0, ?c0.0) #\<^sub>\<Gamma> ?\<Gamma>  \<Turnstile> ?c0'  \<Longrightarrow>  ?\<Theta> ; ?\<B> ; (?x, ?b0.0, TRUE) #\<^sub>\<Gamma> ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?c0.0
 \<Theta> ; \<B> ; \<Gamma>'' \<turnstile>\<^sub>w\<^sub>f \<Delta>
 \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi>
 \<Theta> ; \<B> ; \<Gamma>'' \<turnstile> v1 \<Rightarrow> \<lbrace> z1 : bb  | c1 \<rbrace>
 \<Theta> ; \<B> ; \<Gamma>'' \<turnstile> v2 \<Rightarrow> \<lbrace> z2 : bb  | c2 \<rbrace>
atom z3 \<sharp> [ eq v1 v2 ]\<^sup>e
atom z3 \<sharp> \<Gamma>''
bb \<in> {B_bool, B_int, B_unit}
\<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>
\<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0'

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

goal (6 subgoals):
 1.  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi>
 2.  \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> \<turnstile> v1 \<Rightarrow> \<lbrace> ?z1.0 : ?b  | ?c1.0 \<rbrace>
 3.  \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> \<turnstile> v2 \<Rightarrow> \<lbrace> ?z2.0 : ?b  | ?c2.0 \<rbrace>
 4. atom z3 \<sharp> [ eq v1 v2 ]\<^sup>e
 5. atom z3 \<sharp> \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>
 6. ?b \<in> {B_bool, B_int, B_unit}
[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_eqI
[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 : bb  | c1 \<rbrace>
 \<Theta> ; \<B> ; \<Gamma>'' \<turnstile> v2 \<Rightarrow> \<lbrace> z2 : bb  | c2 \<rbrace>
atom z3 \<sharp> [ eq v1 v2 ]\<^sup>e
atom z3 \<sharp> \<Gamma>''
bb \<in> {B_bool, B_int, B_unit}
\<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>
\<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0'

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>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> \<turnstile> v1 \<Rightarrow> \<lbrace> ?z1.0 : ?b  | ?c1.0 \<rbrace>
 2.  \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> \<turnstile> v2 \<Rightarrow> \<lbrace> ?z2.0 : ?b  | ?c2.0 \<rbrace>
 3. atom z3 \<sharp> [ eq v1 v2 ]\<^sup>e
 4. atom z3 \<sharp> \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>
 5. ?b \<in> {B_bool, B_int, B_unit}
[PROOF STEP]
show *:\<open> \<Theta>; \<B>; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<turnstile> v1 \<Rightarrow> \<lbrace> z1 : bb  | c1 \<rbrace>\<close>
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1.  \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> \<turnstile> v1 \<Rightarrow> \<lbrace> z1 : bb  | c1 \<rbrace>
[PROOF STEP]
using infer_e_eqI ctx_subtype_v_eq
[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 : bb  | c1 \<rbrace>
 \<Theta> ; \<B> ; \<Gamma>'' \<turnstile> v2 \<Rightarrow> \<lbrace> z2 : bb  | c2 \<rbrace>
atom z3 \<sharp> [ eq v1 v2 ]\<^sup>e
atom z3 \<sharp> \<Gamma>''
bb \<in> {B_bool, B_int, B_unit}
\<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>
\<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0'
\<lbrakk> ?\<Theta> ; ?\<B> ; ?\<Gamma>' @ (?x, ?b0.0, ?c0') #\<^sub>\<Gamma> ?\<Gamma> \<turnstile> ?v \<Rightarrow> ?t1.0; ?\<Theta> ; ?\<B> ; ?\<Gamma>' @ (?x, ?b0.0, ?c0.0) #\<^sub>\<Gamma> ?\<Gamma>  \<Turnstile> ?c0' \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<B> ; ?\<Gamma>' @ (?x, ?b0.0, ?c0.0) #\<^sub>\<Gamma> ?\<Gamma> \<turnstile> ?v \<Rightarrow> ?t1.0

goal (1 subgoal):
 1.  \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> \<turnstile> v1 \<Rightarrow> \<lbrace> z1 : bb  | c1 \<rbrace>
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
 \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> \<turnstile> v1 \<Rightarrow> \<lbrace> z1 : bb  | c1 \<rbrace>

goal (4 subgoals):
 1.  \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> \<turnstile> v2 \<Rightarrow> \<lbrace> ?z2.0 : bb  | ?c2.0 \<rbrace>
 2. atom z3 \<sharp> [ eq v1 v2 ]\<^sup>e
 3. atom z3 \<sharp> \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>
 4. bb \<in> {B_bool, B_int, B_unit}
[PROOF STEP]
show \<open> \<Theta>; \<B>; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<turnstile> v2 \<Rightarrow> \<lbrace> z2 : bb  | c2 \<rbrace>\<close>
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1.  \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> \<turnstile> v2 \<Rightarrow> \<lbrace> z2 : bb  | c2 \<rbrace>
[PROOF STEP]
using infer_e_eqI ctx_subtype_v_eq
[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 : bb  | c1 \<rbrace>
 \<Theta> ; \<B> ; \<Gamma>'' \<turnstile> v2 \<Rightarrow> \<lbrace> z2 : bb  | c2 \<rbrace>
atom z3 \<sharp> [ eq v1 v2 ]\<^sup>e
atom z3 \<sharp> \<Gamma>''
bb \<in> {B_bool, B_int, B_unit}
\<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>
\<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0'
\<lbrakk> ?\<Theta> ; ?\<B> ; ?\<Gamma>' @ (?x, ?b0.0, ?c0') #\<^sub>\<Gamma> ?\<Gamma> \<turnstile> ?v \<Rightarrow> ?t1.0; ?\<Theta> ; ?\<B> ; ?\<Gamma>' @ (?x, ?b0.0, ?c0.0) #\<^sub>\<Gamma> ?\<Gamma>  \<Turnstile> ?c0' \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<B> ; ?\<Gamma>' @ (?x, ?b0.0, ?c0.0) #\<^sub>\<Gamma> ?\<Gamma> \<turnstile> ?v \<Rightarrow> ?t1.0

goal (1 subgoal):
 1.  \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> \<turnstile> v2 \<Rightarrow> \<lbrace> z2 : bb  | c2 \<rbrace>
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
 \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> \<turnstile> v2 \<Rightarrow> \<lbrace> z2 : bb  | c2 \<rbrace>

goal (3 subgoals):
 1. atom z3 \<sharp> [ eq v1 v2 ]\<^sup>e
 2. atom z3 \<sharp> \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>
 3. bb \<in> {B_bool, B_int, B_unit}
[PROOF STEP]
show \<open>atom z3 \<sharp> AE_op Eq v1 v2\<close>
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. atom z3 \<sharp> [ eq v1 v2 ]\<^sup>e
[PROOF STEP]
using infer_e_eqI
[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 : bb  | c1 \<rbrace>
 \<Theta> ; \<B> ; \<Gamma>'' \<turnstile> v2 \<Rightarrow> \<lbrace> z2 : bb  | c2 \<rbrace>
atom z3 \<sharp> [ eq v1 v2 ]\<^sup>e
atom z3 \<sharp> \<Gamma>''
bb \<in> {B_bool, B_int, B_unit}
\<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>
\<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0'

goal (1 subgoal):
 1. atom z3 \<sharp> [ eq v1 v2 ]\<^sup>e
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
atom z3 \<sharp> [ eq v1 v2 ]\<^sup>e

goal (2 subgoals):
 1. atom z3 \<sharp> \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>
 2. bb \<in> {B_bool, B_int, B_unit}
[PROOF STEP]
show   \<open>atom z3 \<sharp> \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>\<close>
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. atom z3 \<sharp> \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>
[PROOF STEP]
using * infer_e_eqI fresh_replace_inside  infer_v_wf
[PROOF STATE]
proof (prove)
using this:
 \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> \<turnstile> v1 \<Rightarrow> \<lbrace> z1 : bb  | c1 \<rbrace>
 \<Theta> ; \<B> ; \<Gamma>'' \<turnstile>\<^sub>w\<^sub>f \<Delta>
 \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi>
 \<Theta> ; \<B> ; \<Gamma>'' \<turnstile> v1 \<Rightarrow> \<lbrace> z1 : bb  | c1 \<rbrace>
 \<Theta> ; \<B> ; \<Gamma>'' \<turnstile> v2 \<Rightarrow> \<lbrace> z2 : bb  | c2 \<rbrace>
atom z3 \<sharp> [ eq v1 v2 ]\<^sup>e
atom z3 \<sharp> \<Gamma>''
bb \<in> {B_bool, B_int, B_unit}
\<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>
\<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0'
\<lbrakk> ?P ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?\<Gamma>'' @ (?x, ?b, ?c) #\<^sub>\<Gamma> ?\<Gamma> ;  ?P ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?\<Gamma>'' @ (?x, ?b, ?c') #\<^sub>\<Gamma> ?\<Gamma> \<rbrakk> \<Longrightarrow> atom ?y \<sharp> ?\<Gamma>'' @ (?x, ?b, ?c) #\<^sub>\<Gamma> ?\<Gamma> = atom ?y \<sharp> ?\<Gamma>'' @ (?x, ?b, ?c') #\<^sub>\<Gamma> ?\<Gamma>
 ?\<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. atom z3 \<sharp> \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>
[PROOF STEP]
by metis
[PROOF STATE]
proof (state)
this:
atom z3 \<sharp> \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>

goal (1 subgoal):
 1. bb \<in> {B_bool, B_int, B_unit}
[PROOF STEP]
show "bb \<in> {B_bool, B_int, B_unit}"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. bb \<in> {B_bool, B_int, B_unit}
[PROOF STEP]
using infer_e_eqI
[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 : bb  | c1 \<rbrace>
 \<Theta> ; \<B> ; \<Gamma>'' \<turnstile> v2 \<Rightarrow> \<lbrace> z2 : bb  | c2 \<rbrace>
atom z3 \<sharp> [ eq v1 v2 ]\<^sup>e
atom z3 \<sharp> \<Gamma>''
bb \<in> {B_bool, B_int, B_unit}
\<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>
\<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0'

goal (1 subgoal):
 1. bb \<in> {B_bool, B_int, B_unit}
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
bb \<in> {B_bool, B_int, B_unit}

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
\<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [ eq v1 v2 ]\<^sup>e \<Rightarrow> \<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>

goal (8 subgoals):
 1. \<And>\<Theta> \<B> \<Gamma>'' \<Delta> \<Phi> f xa b c \<tau>' s' v \<tau> c0. \<lbrakk>atom xa \<sharp> c0;  \<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 xa b c \<tau>' s'))) = lookup_fun \<Phi> f; \<Theta> ; \<B> ; \<Gamma>''  \<turnstile> v \<Leftarrow> \<lbrace> xa : b  | c \<rbrace>; atom xa \<sharp> \<Theta>; atom xa \<sharp> \<Phi>; atom xa \<sharp> \<B>; atom xa \<sharp> \<Gamma>''; atom xa \<sharp> \<Delta>; atom xa \<sharp> v; atom xa \<sharp> \<tau>; \<tau>'[xa::=v]\<^sub>v = \<tau>; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [ f  v  ]\<^sup>e \<Rightarrow> \<tau>
 2. \<And>\<Theta> \<B> \<Gamma>'' \<Delta> \<Phi> b' f bv xa b c \<tau>' s' v \<tau> c0. \<lbrakk>atom bv \<sharp> c0;  \<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 xa b c \<tau>' s'))) = lookup_fun \<Phi> f; \<Theta> ; \<B> ; \<Gamma>''  \<turnstile> v \<Leftarrow> \<lbrace> xa : b[bv::=b']\<^sub>b  | c[bv::=b']\<^sub>b \<rbrace>; atom xa \<sharp> \<Gamma>''; \<tau>'[bv::=b']\<^sub>b[xa::=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>; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [f [ b' ]  v ]\<^sup>e \<Rightarrow> \<tau>
 3. \<And>\<Theta> \<B> \<Gamma>'' \<Delta> \<Phi> v z' b1 b2 c z c0. \<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>''; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [#1v ]\<^sup>e \<Rightarrow> \<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 c0. \<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>''; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [#2v ]\<^sup>e \<Rightarrow> \<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 c0. \<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>''; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [| v |]\<^sup>e \<Rightarrow> \<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> c0. \<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>; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [ u ]\<^sup>e \<Rightarrow> \<tau>
 7. \<And>\<Theta> \<B> \<Gamma>'' \<Delta> \<Phi> v1 z1 c1 v2 z2 c2 z3 c0. \<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>''; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [ v1 @@ v2 ]\<^sup>e \<Rightarrow> \<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 c0. \<lbrakk>atom z3 \<sharp> c0; atom z1 \<sharp> c0; atom z2 \<sharp> c0;  \<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>''; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [ v1  v2 ]\<^sup>e \<Rightarrow> \<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 xa b c \<tau>' s' v \<tau> c0. \<lbrakk>atom xa \<sharp> c0;  \<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 xa b c \<tau>' s'))) = lookup_fun \<Phi> f; \<Theta> ; \<B> ; \<Gamma>''  \<turnstile> v \<Leftarrow> \<lbrace> xa : b  | c \<rbrace>; atom xa \<sharp> \<Theta>; atom xa \<sharp> \<Phi>; atom xa \<sharp> \<B>; atom xa \<sharp> \<Gamma>''; atom xa \<sharp> \<Delta>; atom xa \<sharp> v; atom xa \<sharp> \<tau>; \<tau>'[xa::=v]\<^sub>v = \<tau>; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [ f  v  ]\<^sup>e \<Rightarrow> \<tau>
 2. \<And>\<Theta> \<B> \<Gamma>'' \<Delta> \<Phi> b' f bv xa b c \<tau>' s' v \<tau> c0. \<lbrakk>atom bv \<sharp> c0;  \<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 xa b c \<tau>' s'))) = lookup_fun \<Phi> f; \<Theta> ; \<B> ; \<Gamma>''  \<turnstile> v \<Leftarrow> \<lbrace> xa : b[bv::=b']\<^sub>b  | c[bv::=b']\<^sub>b \<rbrace>; atom xa \<sharp> \<Gamma>''; \<tau>'[bv::=b']\<^sub>b[xa::=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>; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [f [ b' ]  v ]\<^sup>e \<Rightarrow> \<tau>
 3. \<And>\<Theta> \<B> \<Gamma>'' \<Delta> \<Phi> v z' b1 b2 c z c0. \<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>''; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [#1v ]\<^sup>e \<Rightarrow> \<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 c0. \<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>''; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [#2v ]\<^sup>e \<Rightarrow> \<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 c0. \<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>''; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [| v |]\<^sup>e \<Rightarrow> \<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> c0. \<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>; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [ u ]\<^sup>e \<Rightarrow> \<tau>
 7. \<And>\<Theta> \<B> \<Gamma>'' \<Delta> \<Phi> v1 z1 c1 v2 z2 c2 z3 c0. \<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>''; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [ v1 @@ v2 ]\<^sup>e \<Rightarrow> \<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 c0. \<lbrakk>atom z3 \<sharp> c0; atom z1 \<sharp> c0; atom z2 \<sharp> c0;  \<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>''; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [ v1  v2 ]\<^sup>e \<Rightarrow> \<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> c0
 \<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>
\<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>
\<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0'

goal (8 subgoals):
 1. \<And>\<Theta> \<B> \<Gamma>'' \<Delta> \<Phi> f xa b c \<tau>' s' v \<tau> c0. \<lbrakk>atom xa \<sharp> c0;  \<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 xa b c \<tau>' s'))) = lookup_fun \<Phi> f; \<Theta> ; \<B> ; \<Gamma>''  \<turnstile> v \<Leftarrow> \<lbrace> xa : b  | c \<rbrace>; atom xa \<sharp> \<Theta>; atom xa \<sharp> \<Phi>; atom xa \<sharp> \<B>; atom xa \<sharp> \<Gamma>''; atom xa \<sharp> \<Delta>; atom xa \<sharp> v; atom xa \<sharp> \<tau>; \<tau>'[xa::=v]\<^sub>v = \<tau>; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [ f  v  ]\<^sup>e \<Rightarrow> \<tau>
 2. \<And>\<Theta> \<B> \<Gamma>'' \<Delta> \<Phi> b' f bv xa b c \<tau>' s' v \<tau> c0. \<lbrakk>atom bv \<sharp> c0;  \<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 xa b c \<tau>' s'))) = lookup_fun \<Phi> f; \<Theta> ; \<B> ; \<Gamma>''  \<turnstile> v \<Leftarrow> \<lbrace> xa : b[bv::=b']\<^sub>b  | c[bv::=b']\<^sub>b \<rbrace>; atom xa \<sharp> \<Gamma>''; \<tau>'[bv::=b']\<^sub>b[xa::=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>; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [f [ b' ]  v ]\<^sup>e \<Rightarrow> \<tau>
 3. \<And>\<Theta> \<B> \<Gamma>'' \<Delta> \<Phi> v z' b1 b2 c z c0. \<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>''; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [#1v ]\<^sup>e \<Rightarrow> \<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 c0. \<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>''; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [#2v ]\<^sup>e \<Rightarrow> \<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 c0. \<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>''; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [| v |]\<^sup>e \<Rightarrow> \<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> c0. \<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>; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [ u ]\<^sup>e \<Rightarrow> \<tau>
 7. \<And>\<Theta> \<B> \<Gamma>'' \<Delta> \<Phi> v1 z1 c1 v2 z2 c2 z3 c0. \<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>''; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [ v1 @@ v2 ]\<^sup>e \<Rightarrow> \<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 c0. \<lbrakk>atom z3 \<sharp> c0; atom z1 \<sharp> c0; atom z2 \<sharp> c0;  \<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>''; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [ v1  v2 ]\<^sup>e \<Rightarrow> \<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]
show ?case
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [ f  v  ]\<^sup>e \<Rightarrow> \<tau>
[PROOF STEP]
proof
[PROOF STATE]
proof (state)
goal (6 subgoals):
 1.  \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta>
 2.  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi>
 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>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<turnstile> v \<Leftarrow> \<lbrace> ?x : ?b  | ?c \<rbrace>
 5. atom ?x \<sharp> (\<Theta>, \<Phi>, \<B>, \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>, \<Delta>, v, \<tau>)
 6. ?\<tau>'[?x::=v]\<^sub>v = \<tau>
[PROOF STEP]
show \<open> \<Theta>; \<B>; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<turnstile>\<^sub>w\<^sub>f \<Delta> \<close>
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1.  \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta>
[PROOF STEP]
using wf_replace_inside2(6) valid_wfC infer_e_appI
[PROOF STATE]
proof (prove)
using this:
\<lbrakk> ?\<Theta> ; ?\<B> ; ?G \<turnstile>\<^sub>w\<^sub>f ?\<Delta> ; ?G = ?\<Gamma>' @ (?x, ?b, ?c') #\<^sub>\<Gamma> ?\<Gamma>;  ?\<Theta> ; ?\<B> ; (?x, ?b, TRUE) #\<^sub>\<Gamma> ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?c \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<B> ; ?\<Gamma>' @ (?x, ?b, ?c) #\<^sub>\<Gamma> ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta>
?\<Theta> ; ?\<B> ; ?\<Gamma>' @ (?x, ?b0.0, ?c0.0) #\<^sub>\<Gamma> ?\<Gamma>  \<Turnstile> ?c0'  \<Longrightarrow>  ?\<Theta> ; ?\<B> ; (?x, ?b0.0, TRUE) #\<^sub>\<Gamma> ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?c0.0
atom x' \<sharp> c0
 \<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>
\<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>
\<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0'

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

goal (5 subgoals):
 1.  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi>
 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>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<turnstile> v \<Leftarrow> \<lbrace> ?x : ?b  | ?c \<rbrace>
 4. atom ?x \<sharp> (\<Theta>, \<Phi>, \<B>, \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>, \<Delta>, v, \<tau>)
 5. ?\<tau>'[?x::=v]\<^sub>v = \<tau>
[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> c0
 \<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>
\<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>
\<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0'

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 (4 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>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<turnstile> v \<Leftarrow> \<lbrace> ?x : ?b  | ?c \<rbrace>
 3. atom ?x \<sharp> (\<Theta>, \<Phi>, \<B>, \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>, \<Delta>, v, \<tau>)
 4. ?\<tau>'[?x::=v]\<^sub>v = \<tau>
[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> c0
 \<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>
\<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>
\<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0'

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 (3 subgoals):
 1. \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<turnstile> v \<Leftarrow> \<lbrace> x' : b  | c \<rbrace>
 2. atom x' \<sharp> (\<Theta>, \<Phi>, \<B>, \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>, \<Delta>, v, \<tau>)
 3. \<tau>'[x'::=v]\<^sub>v = \<tau>
[PROOF STEP]
show \<open>\<Theta>; \<B>; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<turnstile> v \<Leftarrow> \<lbrace> x' : b  | c \<rbrace>\<close>
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<turnstile> v \<Leftarrow> \<lbrace> x' : b  | c \<rbrace>
[PROOF STEP]
using infer_e_appI ctx_subtype_check_v_eq
[PROOF STATE]
proof (prove)
using this:
atom x' \<sharp> c0
 \<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>
\<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>
\<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0'
\<lbrakk>?\<Theta> ; ?\<B> ; ?\<Gamma>' @ (?x, ?b0.0, ?c0') #\<^sub>\<Gamma> ?\<Gamma>  \<turnstile> ?v \<Leftarrow> ?t1.0; ?\<Theta> ; ?\<B> ; ?\<Gamma>' @ (?x, ?b0.0, ?c0.0) #\<^sub>\<Gamma> ?\<Gamma>  \<Turnstile> ?c0' \<rbrakk> \<Longrightarrow> ?\<Theta> ; ?\<B> ; ?\<Gamma>' @ (?x, ?b0.0, ?c0.0) #\<^sub>\<Gamma> ?\<Gamma>  \<turnstile> ?v \<Leftarrow> ?t1.0

goal (1 subgoal):
 1. \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<turnstile> v \<Leftarrow> \<lbrace> x' : b  | c \<rbrace>
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
\<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<turnstile> v \<Leftarrow> \<lbrace> x' : b  | c \<rbrace>

goal (2 subgoals):
 1. atom x' \<sharp> (\<Theta>, \<Phi>, \<B>, \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>, \<Delta>, v, \<tau>)
 2. \<tau>'[x'::=v]\<^sub>v = \<tau>
[PROOF STEP]
thus \<open>atom x' \<sharp> (\<Theta>, \<Phi>, \<B>, \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>, \<Delta>, v, \<tau>)\<close>
[PROOF STATE]
proof (prove)
using this:
\<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<turnstile> v \<Leftarrow> \<lbrace> x' : b  | c \<rbrace>

goal (1 subgoal):
 1. atom x' \<sharp> (\<Theta>, \<Phi>, \<B>, \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>, \<Delta>, v, \<tau>)
[PROOF STEP]
using infer_e_appI fresh_replace_inside[of \<Theta> \<B> \<Gamma>' x b0 c0' \<Gamma> c0 x']  infer_v_wf
[PROOF STATE]
proof (prove)
using this:
\<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<turnstile> v \<Leftarrow> \<lbrace> x' : b  | c \<rbrace>
atom x' \<sharp> c0
 \<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>
\<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>
\<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0'
\<lbrakk> \<Theta> ; \<B>  \<turnstile>\<^sub>w\<^sub>f \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma> ;  \<Theta> ; \<B>  \<turnstile>\<^sub>w\<^sub>f \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> \<rbrakk> \<Longrightarrow> atom x' \<sharp> \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma> = atom x' \<sharp> \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>
 ?\<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. atom x' \<sharp> (\<Theta>, \<Phi>, \<B>, \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>, \<Delta>, v, \<tau>)
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
atom x' \<sharp> (\<Theta>, \<Phi>, \<B>, \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>, \<Delta>, v, \<tau>)

goal (1 subgoal):
 1. \<tau>'[x'::=v]\<^sub>v = \<tau>
[PROOF STEP]
show \<open>\<tau>'[x'::=v]\<^sub>v = \<tau>\<close>
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<tau>'[x'::=v]\<^sub>v = \<tau>
[PROOF STEP]
using infer_e_appI
[PROOF STATE]
proof (prove)
using this:
atom x' \<sharp> c0
 \<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>
\<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>
\<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0'

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

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
\<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [ f  v  ]\<^sup>e \<Rightarrow> \<tau>

goal (7 subgoals):
 1. \<And>\<Theta> \<B> \<Gamma>'' \<Delta> \<Phi> b' f bv xa b c \<tau>' s' v \<tau> c0. \<lbrakk>atom bv \<sharp> c0;  \<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 xa b c \<tau>' s'))) = lookup_fun \<Phi> f; \<Theta> ; \<B> ; \<Gamma>''  \<turnstile> v \<Leftarrow> \<lbrace> xa : b[bv::=b']\<^sub>b  | c[bv::=b']\<^sub>b \<rbrace>; atom xa \<sharp> \<Gamma>''; \<tau>'[bv::=b']\<^sub>b[xa::=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>; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [f [ b' ]  v ]\<^sup>e \<Rightarrow> \<tau>
 2. \<And>\<Theta> \<B> \<Gamma>'' \<Delta> \<Phi> v z' b1 b2 c z c0. \<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>''; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [#1v ]\<^sup>e \<Rightarrow> \<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 c0. \<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>''; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [#2v ]\<^sup>e \<Rightarrow> \<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 c0. \<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>''; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [| v |]\<^sup>e \<Rightarrow> \<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> c0. \<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>; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [ u ]\<^sup>e \<Rightarrow> \<tau>
 6. \<And>\<Theta> \<B> \<Gamma>'' \<Delta> \<Phi> v1 z1 c1 v2 z2 c2 z3 c0. \<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>''; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [ v1 @@ v2 ]\<^sup>e \<Rightarrow> \<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 c0. \<lbrakk>atom z3 \<sharp> c0; atom z1 \<sharp> c0; atom z2 \<sharp> c0;  \<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>''; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [ v1  v2 ]\<^sup>e \<Rightarrow> \<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 xa b c \<tau>' s' v \<tau> c0. \<lbrakk>atom bv \<sharp> c0;  \<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 xa b c \<tau>' s'))) = lookup_fun \<Phi> f; \<Theta> ; \<B> ; \<Gamma>''  \<turnstile> v \<Leftarrow> \<lbrace> xa : b[bv::=b']\<^sub>b  | c[bv::=b']\<^sub>b \<rbrace>; atom xa \<sharp> \<Gamma>''; \<tau>'[bv::=b']\<^sub>b[xa::=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>; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [f [ b' ]  v ]\<^sup>e \<Rightarrow> \<tau>
 2. \<And>\<Theta> \<B> \<Gamma>'' \<Delta> \<Phi> v z' b1 b2 c z c0. \<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>''; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [#1v ]\<^sup>e \<Rightarrow> \<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 c0. \<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>''; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [#2v ]\<^sup>e \<Rightarrow> \<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 c0. \<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>''; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [| v |]\<^sup>e \<Rightarrow> \<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> c0. \<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>; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [ u ]\<^sup>e \<Rightarrow> \<tau>
 6. \<And>\<Theta> \<B> \<Gamma>'' \<Delta> \<Phi> v1 z1 c1 v2 z2 c2 z3 c0. \<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>''; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [ v1 @@ v2 ]\<^sup>e \<Rightarrow> \<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 c0. \<lbrakk>atom z3 \<sharp> c0; atom z1 \<sharp> c0; atom z2 \<sharp> c0;  \<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>''; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [ v1  v2 ]\<^sup>e \<Rightarrow> \<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>1 \<Delta> \<Phi> b' f bv x1 b c \<tau>' s' v \<tau>)
[PROOF STATE]
proof (state)
this:
atom bv \<sharp> c0
 \<Theta> ; \<B> ; \<Gamma>1 \<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 x1 b c \<tau>' s'))) = lookup_fun \<Phi> f
\<Theta> ; \<B> ; \<Gamma>1  \<turnstile> v \<Leftarrow> \<lbrace> x1 : b[bv::=b']\<^sub>b  | c[bv::=b']\<^sub>b \<rbrace>
atom x1 \<sharp> \<Gamma>1
\<tau>'[bv::=b']\<^sub>b[x1::=v]\<^sub>v = \<tau>
atom bv \<sharp> \<Theta>
atom bv \<sharp> \<Phi>
atom bv \<sharp> \<B>
atom bv \<sharp> \<Gamma>1
atom bv \<sharp> \<Delta>
atom bv \<sharp> b'
atom bv \<sharp> v
atom bv \<sharp> \<tau>
\<Gamma>1 = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>
\<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0'

goal (7 subgoals):
 1. \<And>\<Theta> \<B> \<Gamma>'' \<Delta> \<Phi> b' f bv xa b c \<tau>' s' v \<tau> c0. \<lbrakk>atom bv \<sharp> c0;  \<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 xa b c \<tau>' s'))) = lookup_fun \<Phi> f; \<Theta> ; \<B> ; \<Gamma>''  \<turnstile> v \<Leftarrow> \<lbrace> xa : b[bv::=b']\<^sub>b  | c[bv::=b']\<^sub>b \<rbrace>; atom xa \<sharp> \<Gamma>''; \<tau>'[bv::=b']\<^sub>b[xa::=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>; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [f [ b' ]  v ]\<^sup>e \<Rightarrow> \<tau>
 2. \<And>\<Theta> \<B> \<Gamma>'' \<Delta> \<Phi> v z' b1 b2 c z c0. \<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>''; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [#1v ]\<^sup>e \<Rightarrow> \<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 c0. \<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>''; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [#2v ]\<^sup>e \<Rightarrow> \<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 c0. \<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>''; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [| v |]\<^sup>e \<Rightarrow> \<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> c0. \<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>; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [ u ]\<^sup>e \<Rightarrow> \<tau>
 6. \<And>\<Theta> \<B> \<Gamma>'' \<Delta> \<Phi> v1 z1 c1 v2 z2 c2 z3 c0. \<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>''; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [ v1 @@ v2 ]\<^sup>e \<Rightarrow> \<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 c0. \<lbrakk>atom z3 \<sharp> c0; atom z1 \<sharp> c0; atom z2 \<sharp> c0;  \<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>''; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [ v1  v2 ]\<^sup>e \<Rightarrow> \<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]
show ?case
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [f [ b' ]  v ]\<^sup>e \<Rightarrow> \<tau>
[PROOF STEP]
proof
[PROOF STATE]
proof (state)
goal (8 subgoals):
 1.  \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta>
 2.  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi>
 3.  \<Theta> ; \<B>  \<turnstile>\<^sub>w\<^sub>f 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>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<turnstile> v \<Leftarrow> \<lbrace> ?x : ?b[?bv::=b']\<^sub>b  | ?c[?bv::=b']\<^sub>b \<rbrace>
 6. atom ?x \<sharp> \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>
 7. ?\<tau>'[?bv::=b']\<^sub>b[?x::=v]\<^sub>v = \<tau>
 8. atom ?bv \<sharp> (\<Theta>, \<Phi>, \<B>, \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>, \<Delta>, b', v, \<tau>)
[PROOF STEP]
show \<open> \<Theta>; \<B>; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> \<close>
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1.  \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta>
[PROOF STEP]
using wf_replace_inside2(6) valid_wfC infer_e_appPI
[PROOF STATE]
proof (prove)
using this:
\<lbrakk> ?\<Theta> ; ?\<B> ; ?G \<turnstile>\<^sub>w\<^sub>f ?\<Delta> ; ?G = ?\<Gamma>' @ (?x, ?b, ?c') #\<^sub>\<Gamma> ?\<Gamma>;  ?\<Theta> ; ?\<B> ; (?x, ?b, TRUE) #\<^sub>\<Gamma> ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?c \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<B> ; ?\<Gamma>' @ (?x, ?b, ?c) #\<^sub>\<Gamma> ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta>
?\<Theta> ; ?\<B> ; ?\<Gamma>' @ (?x, ?b0.0, ?c0.0) #\<^sub>\<Gamma> ?\<Gamma>  \<Turnstile> ?c0'  \<Longrightarrow>  ?\<Theta> ; ?\<B> ; (?x, ?b0.0, TRUE) #\<^sub>\<Gamma> ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?c0.0
atom bv \<sharp> c0
 \<Theta> ; \<B> ; \<Gamma>1 \<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 x1 b c \<tau>' s'))) = lookup_fun \<Phi> f
\<Theta> ; \<B> ; \<Gamma>1  \<turnstile> v \<Leftarrow> \<lbrace> x1 : b[bv::=b']\<^sub>b  | c[bv::=b']\<^sub>b \<rbrace>
atom x1 \<sharp> \<Gamma>1
\<tau>'[bv::=b']\<^sub>b[x1::=v]\<^sub>v = \<tau>
atom bv \<sharp> \<Theta>
atom bv \<sharp> \<Phi>
atom bv \<sharp> \<B>
atom bv \<sharp> \<Gamma>1
atom bv \<sharp> \<Delta>
atom bv \<sharp> b'
atom bv \<sharp> v
atom bv \<sharp> \<tau>
\<Gamma>1 = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>
\<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0'

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

goal (7 subgoals):
 1.  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi>
 2.  \<Theta> ; \<B>  \<turnstile>\<^sub>w\<^sub>f 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>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<turnstile> v \<Leftarrow> \<lbrace> ?x : ?b[?bv::=b']\<^sub>b  | ?c[?bv::=b']\<^sub>b \<rbrace>
 5. atom ?x \<sharp> \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>
 6. ?\<tau>'[?bv::=b']\<^sub>b[?x::=v]\<^sub>v = \<tau>
 7. atom ?bv \<sharp> (\<Theta>, \<Phi>, \<B>, \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>, \<Delta>, b', v, \<tau>)
[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> c0
 \<Theta> ; \<B> ; \<Gamma>1 \<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 x1 b c \<tau>' s'))) = lookup_fun \<Phi> f
\<Theta> ; \<B> ; \<Gamma>1  \<turnstile> v \<Leftarrow> \<lbrace> x1 : b[bv::=b']\<^sub>b  | c[bv::=b']\<^sub>b \<rbrace>
atom x1 \<sharp> \<Gamma>1
\<tau>'[bv::=b']\<^sub>b[x1::=v]\<^sub>v = \<tau>
atom bv \<sharp> \<Theta>
atom bv \<sharp> \<Phi>
atom bv \<sharp> \<B>
atom bv \<sharp> \<Gamma>1
atom bv \<sharp> \<Delta>
atom bv \<sharp> b'
atom bv \<sharp> v
atom bv \<sharp> \<tau>
\<Gamma>1 = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>
\<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0'

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 (6 subgoals):
 1.  \<Theta> ; \<B>  \<turnstile>\<^sub>w\<^sub>f b'
 2. Some (AF_fundef f (AF_fun_typ_some ?bv (AF_fun_typ ?x ?b ?c ?\<tau>' ?s'))) = lookup_fun \<Phi> f
 3. \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<turnstile> v \<Leftarrow> \<lbrace> ?x : ?b[?bv::=b']\<^sub>b  | ?c[?bv::=b']\<^sub>b \<rbrace>
 4. atom ?x \<sharp> \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>
 5. ?\<tau>'[?bv::=b']\<^sub>b[?x::=v]\<^sub>v = \<tau>
 6. atom ?bv \<sharp> (\<Theta>, \<Phi>, \<B>, \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>, \<Delta>, b', v, \<tau>)
[PROOF STEP]
show \<open> \<Theta>; \<B>  \<turnstile>\<^sub>w\<^sub>f b' \<close>
[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> c0
 \<Theta> ; \<B> ; \<Gamma>1 \<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 x1 b c \<tau>' s'))) = lookup_fun \<Phi> f
\<Theta> ; \<B> ; \<Gamma>1  \<turnstile> v \<Leftarrow> \<lbrace> x1 : b[bv::=b']\<^sub>b  | c[bv::=b']\<^sub>b \<rbrace>
atom x1 \<sharp> \<Gamma>1
\<tau>'[bv::=b']\<^sub>b[x1::=v]\<^sub>v = \<tau>
atom bv \<sharp> \<Theta>
atom bv \<sharp> \<Phi>
atom bv \<sharp> \<B>
atom bv \<sharp> \<Gamma>1
atom bv \<sharp> \<Delta>
atom bv \<sharp> b'
atom bv \<sharp> v
atom bv \<sharp> \<tau>
\<Gamma>1 = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>
\<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0'

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 (5 subgoals):
 1. Some (AF_fundef f (AF_fun_typ_some ?bv (AF_fun_typ ?x ?b ?c ?\<tau>' ?s'))) = lookup_fun \<Phi> f
 2. \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<turnstile> v \<Leftarrow> \<lbrace> ?x : ?b[?bv::=b']\<^sub>b  | ?c[?bv::=b']\<^sub>b \<rbrace>
 3. atom ?x \<sharp> \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>
 4. ?\<tau>'[?bv::=b']\<^sub>b[?x::=v]\<^sub>v = \<tau>
 5. atom ?bv \<sharp> (\<Theta>, \<Phi>, \<B>, \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>, \<Delta>, b', v, \<tau>)
[PROOF STEP]
show \<open>Some (AF_fundef f (AF_fun_typ_some bv (AF_fun_typ x1 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 x1 b c \<tau>' s'))) = lookup_fun \<Phi> f
[PROOF STEP]
using infer_e_appPI
[PROOF STATE]
proof (prove)
using this:
atom bv \<sharp> c0
 \<Theta> ; \<B> ; \<Gamma>1 \<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 x1 b c \<tau>' s'))) = lookup_fun \<Phi> f
\<Theta> ; \<B> ; \<Gamma>1  \<turnstile> v \<Leftarrow> \<lbrace> x1 : b[bv::=b']\<^sub>b  | c[bv::=b']\<^sub>b \<rbrace>
atom x1 \<sharp> \<Gamma>1
\<tau>'[bv::=b']\<^sub>b[x1::=v]\<^sub>v = \<tau>
atom bv \<sharp> \<Theta>
atom bv \<sharp> \<Phi>
atom bv \<sharp> \<B>
atom bv \<sharp> \<Gamma>1
atom bv \<sharp> \<Delta>
atom bv \<sharp> b'
atom bv \<sharp> v
atom bv \<sharp> \<tau>
\<Gamma>1 = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>
\<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0'

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

goal (4 subgoals):
 1. \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<turnstile> v \<Leftarrow> \<lbrace> x1 : b[bv::=b']\<^sub>b  | c[bv::=b']\<^sub>b \<rbrace>
 2. atom x1 \<sharp> \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>
 3. \<tau>'[bv::=b']\<^sub>b[x1::=v]\<^sub>v = \<tau>
 4. atom bv \<sharp> (\<Theta>, \<Phi>, \<B>, \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>, \<Delta>, b', v, \<tau>)
[PROOF STEP]
show \<open>\<Theta>; \<B>; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<turnstile> v \<Leftarrow> \<lbrace> x1 : b[bv::=b']\<^sub>b  | c[bv::=b']\<^sub>b \<rbrace>\<close>
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<turnstile> v \<Leftarrow> \<lbrace> x1 : b[bv::=b']\<^sub>b  | c[bv::=b']\<^sub>b \<rbrace>
[PROOF STEP]
using infer_e_appPI  ctx_subtype_check_v_eq subst_defs
[PROOF STATE]
proof (prove)
using this:
atom bv \<sharp> c0
 \<Theta> ; \<B> ; \<Gamma>1 \<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 x1 b c \<tau>' s'))) = lookup_fun \<Phi> f
\<Theta> ; \<B> ; \<Gamma>1  \<turnstile> v \<Leftarrow> \<lbrace> x1 : b[bv::=b']\<^sub>b  | c[bv::=b']\<^sub>b \<rbrace>
atom x1 \<sharp> \<Gamma>1
\<tau>'[bv::=b']\<^sub>b[x1::=v]\<^sub>v = \<tau>
atom bv \<sharp> \<Theta>
atom bv \<sharp> \<Phi>
atom bv \<sharp> \<B>
atom bv \<sharp> \<Gamma>1
atom bv \<sharp> \<Delta>
atom bv \<sharp> b'
atom bv \<sharp> v
atom bv \<sharp> \<tau>
\<Gamma>1 = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>
\<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0'
\<lbrakk>?\<Theta> ; ?\<B> ; ?\<Gamma>' @ (?x, ?b0.0, ?c0') #\<^sub>\<Gamma> ?\<Gamma>  \<turnstile> ?v \<Leftarrow> ?t1.0; ?\<Theta> ; ?\<B> ; ?\<Gamma>' @ (?x, ?b0.0, ?c0.0) #\<^sub>\<Gamma> ?\<Gamma>  \<Turnstile> ?c0' \<rbrakk> \<Longrightarrow> ?\<Theta> ; ?\<B> ; ?\<Gamma>' @ (?x, ?b0.0, ?c0.0) #\<^sub>\<Gamma> ?\<Gamma>  \<turnstile> ?v \<Leftarrow> ?t1.0
subst_b = subst_bb_abbrev
subst_b = subst_cb_abbrev
subst_b = subst_tb_abbrev
subst_v = subst_vv_abbrev
subst_v = subst_cv_abbrev
subst_v = subst_tv_abbrev

goal (1 subgoal):
 1. \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<turnstile> v \<Leftarrow> \<lbrace> x1 : b[bv::=b']\<^sub>b  | c[bv::=b']\<^sub>b \<rbrace>
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
\<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<turnstile> v \<Leftarrow> \<lbrace> x1 : b[bv::=b']\<^sub>b  | c[bv::=b']\<^sub>b \<rbrace>

goal (3 subgoals):
 1. atom x1 \<sharp> \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>
 2. \<tau>'[bv::=b']\<^sub>b[x1::=v]\<^sub>v = \<tau>
 3. atom bv \<sharp> (\<Theta>, \<Phi>, \<B>, \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>, \<Delta>, b', v, \<tau>)
[PROOF STEP]
thus  \<open>atom x1 \<sharp> \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>\<close>
[PROOF STATE]
proof (prove)
using this:
\<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<turnstile> v \<Leftarrow> \<lbrace> x1 : b[bv::=b']\<^sub>b  | c[bv::=b']\<^sub>b \<rbrace>

goal (1 subgoal):
 1. atom x1 \<sharp> \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>
[PROOF STEP]
using  fresh_replace_inside[of \<Theta> \<B> \<Gamma>' x b0 c0' \<Gamma>  c0 x1 ] infer_v_wf infer_e_appPI
[PROOF STATE]
proof (prove)
using this:
\<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<turnstile> v \<Leftarrow> \<lbrace> x1 : b[bv::=b']\<^sub>b  | c[bv::=b']\<^sub>b \<rbrace>
\<lbrakk> \<Theta> ; \<B>  \<turnstile>\<^sub>w\<^sub>f \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma> ;  \<Theta> ; \<B>  \<turnstile>\<^sub>w\<^sub>f \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> \<rbrakk> \<Longrightarrow> atom x1 \<sharp> \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma> = atom x1 \<sharp> \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>
 ?\<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
atom bv \<sharp> c0
 \<Theta> ; \<B> ; \<Gamma>1 \<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 x1 b c \<tau>' s'))) = lookup_fun \<Phi> f
\<Theta> ; \<B> ; \<Gamma>1  \<turnstile> v \<Leftarrow> \<lbrace> x1 : b[bv::=b']\<^sub>b  | c[bv::=b']\<^sub>b \<rbrace>
atom x1 \<sharp> \<Gamma>1
\<tau>'[bv::=b']\<^sub>b[x1::=v]\<^sub>v = \<tau>
atom bv \<sharp> \<Theta>
atom bv \<sharp> \<Phi>
atom bv \<sharp> \<B>
atom bv \<sharp> \<Gamma>1
atom bv \<sharp> \<Delta>
atom bv \<sharp> b'
atom bv \<sharp> v
atom bv \<sharp> \<tau>
\<Gamma>1 = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>
\<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0'

goal (1 subgoal):
 1. atom x1 \<sharp> \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
atom x1 \<sharp> \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>

goal (2 subgoals):
 1. \<tau>'[bv::=b']\<^sub>b[x1::=v]\<^sub>v = \<tau>
 2. atom bv \<sharp> (\<Theta>, \<Phi>, \<B>, \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>, \<Delta>, b', v, \<tau>)
[PROOF STEP]
show \<open>\<tau>'[bv::=b']\<^sub>b[x1::=v]\<^sub>v = \<tau>\<close>
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<tau>'[bv::=b']\<^sub>b[x1::=v]\<^sub>v = \<tau>
[PROOF STEP]
using infer_e_appPI
[PROOF STATE]
proof (prove)
using this:
atom bv \<sharp> c0
 \<Theta> ; \<B> ; \<Gamma>1 \<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 x1 b c \<tau>' s'))) = lookup_fun \<Phi> f
\<Theta> ; \<B> ; \<Gamma>1  \<turnstile> v \<Leftarrow> \<lbrace> x1 : b[bv::=b']\<^sub>b  | c[bv::=b']\<^sub>b \<rbrace>
atom x1 \<sharp> \<Gamma>1
\<tau>'[bv::=b']\<^sub>b[x1::=v]\<^sub>v = \<tau>
atom bv \<sharp> \<Theta>
atom bv \<sharp> \<Phi>
atom bv \<sharp> \<B>
atom bv \<sharp> \<Gamma>1
atom bv \<sharp> \<Delta>
atom bv \<sharp> b'
atom bv \<sharp> v
atom bv \<sharp> \<tau>
\<Gamma>1 = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>
\<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0'

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

goal (1 subgoal):
 1. atom bv \<sharp> (\<Theta>, \<Phi>, \<B>, \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>, \<Delta>, b', v, \<tau>)
[PROOF STEP]
have "atom bv \<sharp> \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. atom bv \<sharp> \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>
[PROOF STEP]
using infer_e_appPI
[PROOF STATE]
proof (prove)
using this:
atom bv \<sharp> c0
 \<Theta> ; \<B> ; \<Gamma>1 \<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 x1 b c \<tau>' s'))) = lookup_fun \<Phi> f
\<Theta> ; \<B> ; \<Gamma>1  \<turnstile> v \<Leftarrow> \<lbrace> x1 : b[bv::=b']\<^sub>b  | c[bv::=b']\<^sub>b \<rbrace>
atom x1 \<sharp> \<Gamma>1
\<tau>'[bv::=b']\<^sub>b[x1::=v]\<^sub>v = \<tau>
atom bv \<sharp> \<Theta>
atom bv \<sharp> \<Phi>
atom bv \<sharp> \<B>
atom bv \<sharp> \<Gamma>1
atom bv \<sharp> \<Delta>
atom bv \<sharp> b'
atom bv \<sharp> v
atom bv \<sharp> \<tau>
\<Gamma>1 = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>
\<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0'

goal (1 subgoal):
 1. atom bv \<sharp> \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>
[PROOF STEP]
by metis
[PROOF STATE]
proof (state)
this:
atom bv \<sharp> \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>

goal (1 subgoal):
 1. atom bv \<sharp> (\<Theta>, \<Phi>, \<B>, \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>, \<Delta>, b', v, \<tau>)
[PROOF STEP]
hence "atom bv \<sharp>  \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>"
[PROOF STATE]
proof (prove)
using this:
atom bv \<sharp> \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>

goal (1 subgoal):
 1. atom bv \<sharp> \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>
[PROOF STEP]
unfolding fresh_append_g fresh_GCons fresh_prod3
[PROOF STATE]
proof (prove)
using this:
atom bv \<sharp> \<Gamma>' \<and> (atom bv \<sharp> x \<and> atom bv \<sharp> b0 \<and> atom bv \<sharp> c0') \<and> atom bv \<sharp> \<Gamma>

goal (1 subgoal):
 1. atom bv \<sharp> \<Gamma>' \<and> (atom bv \<sharp> x \<and> atom bv \<sharp> b0 \<and> atom bv \<sharp> c0) \<and> atom bv \<sharp> \<Gamma>
[PROOF STEP]
using  \<open>atom bv \<sharp> c0 \<close> fresh_append_g
[PROOF STATE]
proof (prove)
using this:
atom bv \<sharp> \<Gamma>' \<and> (atom bv \<sharp> x \<and> atom bv \<sharp> b0 \<and> atom bv \<sharp> c0') \<and> atom bv \<sharp> \<Gamma>
atom bv \<sharp> c0
?a \<sharp> ?xs @ ?ys = (?a \<sharp> ?xs \<and> ?a \<sharp> ?ys)

goal (1 subgoal):
 1. atom bv \<sharp> \<Gamma>' \<and> (atom bv \<sharp> x \<and> atom bv \<sharp> b0 \<and> atom bv \<sharp> c0) \<and> atom bv \<sharp> \<Gamma>
[PROOF STEP]
by metis
[PROOF STATE]
proof (state)
this:
atom bv \<sharp> \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>

goal (1 subgoal):
 1. atom bv \<sharp> (\<Theta>, \<Phi>, \<B>, \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>, \<Delta>, b', v, \<tau>)
[PROOF STEP]
thus  \<open>atom bv \<sharp>  (\<Theta>, \<Phi>, \<B>, \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>, \<Delta>, b', v, \<tau>)\<close>
[PROOF STATE]
proof (prove)
using this:
atom bv \<sharp> \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>

goal (1 subgoal):
 1. atom bv \<sharp> (\<Theta>, \<Phi>, \<B>, \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>, \<Delta>, b', v, \<tau>)
[PROOF STEP]
using infer_e_appPI
[PROOF STATE]
proof (prove)
using this:
atom bv \<sharp> \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>
atom bv \<sharp> c0
 \<Theta> ; \<B> ; \<Gamma>1 \<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 x1 b c \<tau>' s'))) = lookup_fun \<Phi> f
\<Theta> ; \<B> ; \<Gamma>1  \<turnstile> v \<Leftarrow> \<lbrace> x1 : b[bv::=b']\<^sub>b  | c[bv::=b']\<^sub>b \<rbrace>
atom x1 \<sharp> \<Gamma>1
\<tau>'[bv::=b']\<^sub>b[x1::=v]\<^sub>v = \<tau>
atom bv \<sharp> \<Theta>
atom bv \<sharp> \<Phi>
atom bv \<sharp> \<B>
atom bv \<sharp> \<Gamma>1
atom bv \<sharp> \<Delta>
atom bv \<sharp> b'
atom bv \<sharp> v
atom bv \<sharp> \<tau>
\<Gamma>1 = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>
\<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0'

goal (1 subgoal):
 1. atom bv \<sharp> (\<Theta>, \<Phi>, \<B>, \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>, \<Delta>, b', v, \<tau>)
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
atom bv \<sharp> (\<Theta>, \<Phi>, \<B>, \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>, \<Delta>, b', v, \<tau>)

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
\<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [f [ b' ]  v ]\<^sup>e \<Rightarrow> \<tau>

goal (6 subgoals):
 1. \<And>\<Theta> \<B> \<Gamma>'' \<Delta> \<Phi> v z' b1 b2 c z c0. \<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>''; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [#1v ]\<^sup>e \<Rightarrow> \<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 c0. \<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>''; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [#2v ]\<^sup>e \<Rightarrow> \<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 c0. \<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>''; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [| v |]\<^sup>e \<Rightarrow> \<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> c0. \<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>; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [ u ]\<^sup>e \<Rightarrow> \<tau>
 5. \<And>\<Theta> \<B> \<Gamma>'' \<Delta> \<Phi> v1 z1 c1 v2 z2 c2 z3 c0. \<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>''; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [ v1 @@ v2 ]\<^sup>e \<Rightarrow> \<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 c0. \<lbrakk>atom z3 \<sharp> c0; atom z1 \<sharp> c0; atom z2 \<sharp> c0;  \<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>''; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [ v1  v2 ]\<^sup>e \<Rightarrow> \<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 c0. \<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>''; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [#1v ]\<^sup>e \<Rightarrow> \<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 c0. \<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>''; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [#2v ]\<^sup>e \<Rightarrow> \<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 c0. \<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>''; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [| v |]\<^sup>e \<Rightarrow> \<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> c0. \<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>; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [ u ]\<^sup>e \<Rightarrow> \<tau>
 5. \<And>\<Theta> \<B> \<Gamma>'' \<Delta> \<Phi> v1 z1 c1 v2 z2 c2 z3 c0. \<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>''; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [ v1 @@ v2 ]\<^sup>e \<Rightarrow> \<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 c0. \<lbrakk>atom z3 \<sharp> c0; atom z1 \<sharp> c0; atom z2 \<sharp> c0;  \<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>''; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [ v1  v2 ]\<^sup>e \<Rightarrow> \<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>''
\<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>
\<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0'

goal (6 subgoals):
 1. \<And>\<Theta> \<B> \<Gamma>'' \<Delta> \<Phi> v z' b1 b2 c z c0. \<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>''; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [#1v ]\<^sup>e \<Rightarrow> \<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 c0. \<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>''; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [#2v ]\<^sup>e \<Rightarrow> \<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 c0. \<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>''; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [| v |]\<^sup>e \<Rightarrow> \<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> c0. \<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>; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [ u ]\<^sup>e \<Rightarrow> \<tau>
 5. \<And>\<Theta> \<B> \<Gamma>'' \<Delta> \<Phi> v1 z1 c1 v2 z2 c2 z3 c0. \<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>''; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [ v1 @@ v2 ]\<^sup>e \<Rightarrow> \<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 c0. \<lbrakk>atom z3 \<sharp> c0; atom z1 \<sharp> c0; atom z2 \<sharp> c0;  \<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>''; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [ v1  v2 ]\<^sup>e \<Rightarrow> \<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]
show ?case
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [#1v ]\<^sup>e \<Rightarrow> \<lbrace> z : b1  | [ [ z ]\<^sup>v ]\<^sup>c\<^sup>e  ==  [#1[ v ]\<^sup>c\<^sup>e]\<^sup>c\<^sup>e  \<rbrace>
[PROOF STEP]
proof
[PROOF STATE]
proof (state)
goal (5 subgoals):
 1.  \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta>
 2.  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi>
 3.  \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> \<turnstile> v \<Rightarrow> \<lbrace> ?z' : [ b1 , ?b2.0 ]\<^sup>b  | ?c \<rbrace>
 4. atom z \<sharp> [#1v ]\<^sup>e
 5. atom z \<sharp> \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>
[PROOF STEP]
show \<open> \<Theta>; \<B>; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<turnstile>\<^sub>w\<^sub>f \<Delta> \<close>
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1.  \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta>
[PROOF STEP]
using wf_replace_inside2(6) valid_wfC infer_e_fstI
[PROOF STATE]
proof (prove)
using this:
\<lbrakk> ?\<Theta> ; ?\<B> ; ?G \<turnstile>\<^sub>w\<^sub>f ?\<Delta> ; ?G = ?\<Gamma>' @ (?x, ?b, ?c') #\<^sub>\<Gamma> ?\<Gamma>;  ?\<Theta> ; ?\<B> ; (?x, ?b, TRUE) #\<^sub>\<Gamma> ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?c \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<B> ; ?\<Gamma>' @ (?x, ?b, ?c) #\<^sub>\<Gamma> ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta>
?\<Theta> ; ?\<B> ; ?\<Gamma>' @ (?x, ?b0.0, ?c0.0) #\<^sub>\<Gamma> ?\<Gamma>  \<Turnstile> ?c0'  \<Longrightarrow>  ?\<Theta> ; ?\<B> ; (?x, ?b0.0, TRUE) #\<^sub>\<Gamma> ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?c0.0
 \<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>''
\<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>
\<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0'

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

goal (4 subgoals):
 1.  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi>
 2.  \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> \<turnstile> v \<Rightarrow> \<lbrace> ?z' : [ b1 , ?b2.0 ]\<^sup>b  | ?c \<rbrace>
 3. atom z \<sharp> [#1v ]\<^sup>e
 4. atom z \<sharp> \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>
[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_fstI
[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>''
\<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>
\<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0'

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>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> \<turnstile> v \<Rightarrow> \<lbrace> ?z' : [ b1 , ?b2.0 ]\<^sup>b  | ?c \<rbrace>
 2. atom z \<sharp> [#1v ]\<^sup>e
 3. atom z \<sharp> \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>
[PROOF STEP]
show \<open> \<Theta>; \<B>; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<turnstile> v \<Rightarrow> \<lbrace> z' : B_pair b1 b2  | c \<rbrace>\<close>
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1.  \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> \<turnstile> v \<Rightarrow> \<lbrace> z' : [ b1 , b2 ]\<^sup>b  | c \<rbrace>
[PROOF STEP]
using infer_e_fstI ctx_subtype_v_eq
[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>''
\<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>
\<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0'
\<lbrakk> ?\<Theta> ; ?\<B> ; ?\<Gamma>' @ (?x, ?b0.0, ?c0') #\<^sub>\<Gamma> ?\<Gamma> \<turnstile> ?v \<Rightarrow> ?t1.0; ?\<Theta> ; ?\<B> ; ?\<Gamma>' @ (?x, ?b0.0, ?c0.0) #\<^sub>\<Gamma> ?\<Gamma>  \<Turnstile> ?c0' \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<B> ; ?\<Gamma>' @ (?x, ?b0.0, ?c0.0) #\<^sub>\<Gamma> ?\<Gamma> \<turnstile> ?v \<Rightarrow> ?t1.0

goal (1 subgoal):
 1.  \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> \<turnstile> v \<Rightarrow> \<lbrace> z' : [ b1 , b2 ]\<^sup>b  | c \<rbrace>
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
 \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> \<turnstile> v \<Rightarrow> \<lbrace> z' : [ b1 , b2 ]\<^sup>b  | c \<rbrace>

goal (2 subgoals):
 1. atom z \<sharp> [#1v ]\<^sup>e
 2. atom z \<sharp> \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>
[PROOF STEP]
thus \<open>atom z \<sharp> \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>\<close>
[PROOF STATE]
proof (prove)
using this:
 \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> \<turnstile> v \<Rightarrow> \<lbrace> z' : [ b1 , b2 ]\<^sup>b  | c \<rbrace>

goal (1 subgoal):
 1. atom z \<sharp> \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>
[PROOF STEP]
using infer_e_fstI fresh_replace_inside[of \<Theta> \<B> \<Gamma>' x b0 c0' \<Gamma> c0 z]  infer_v_wf
[PROOF STATE]
proof (prove)
using this:
 \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> \<turnstile> v \<Rightarrow> \<lbrace> z' : [ b1 , b2 ]\<^sup>b  | c \<rbrace>
 \<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>''
\<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>
\<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0'
\<lbrakk> \<Theta> ; \<B>  \<turnstile>\<^sub>w\<^sub>f \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma> ;  \<Theta> ; \<B>  \<turnstile>\<^sub>w\<^sub>f \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> \<rbrakk> \<Longrightarrow> atom z \<sharp> \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma> = atom z \<sharp> \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>
 ?\<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. atom z \<sharp> \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
atom z \<sharp> \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>

goal (1 subgoal):
 1. atom z \<sharp> [#1v ]\<^sup>e
[PROOF STEP]
show \<open>atom z \<sharp> AE_fst v\<close>
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. atom z \<sharp> [#1v ]\<^sup>e
[PROOF STEP]
using infer_e_fstI
[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>''
\<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>
\<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0'

goal (1 subgoal):
 1. atom z \<sharp> [#1v ]\<^sup>e
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
atom z \<sharp> [#1v ]\<^sup>e

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
\<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [#1v ]\<^sup>e \<Rightarrow> \<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 c0. \<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>''; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [#2v ]\<^sup>e \<Rightarrow> \<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 c0. \<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>''; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [| v |]\<^sup>e \<Rightarrow> \<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> c0. \<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>; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [ u ]\<^sup>e \<Rightarrow> \<tau>
 4. \<And>\<Theta> \<B> \<Gamma>'' \<Delta> \<Phi> v1 z1 c1 v2 z2 c2 z3 c0. \<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>''; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [ v1 @@ v2 ]\<^sup>e \<Rightarrow> \<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 c0. \<lbrakk>atom z3 \<sharp> c0; atom z1 \<sharp> c0; atom z2 \<sharp> c0;  \<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>''; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [ v1  v2 ]\<^sup>e \<Rightarrow> \<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 c0. \<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>''; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [#2v ]\<^sup>e \<Rightarrow> \<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 c0. \<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>''; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [| v |]\<^sup>e \<Rightarrow> \<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> c0. \<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>; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [ u ]\<^sup>e \<Rightarrow> \<tau>
 4. \<And>\<Theta> \<B> \<Gamma>'' \<Delta> \<Phi> v1 z1 c1 v2 z2 c2 z3 c0. \<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>''; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [ v1 @@ v2 ]\<^sup>e \<Rightarrow> \<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 c0. \<lbrakk>atom z3 \<sharp> c0; atom z1 \<sharp> c0; atom z2 \<sharp> c0;  \<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>''; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [ v1  v2 ]\<^sup>e \<Rightarrow> \<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>''
\<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>
\<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0'

goal (5 subgoals):
 1. \<And>\<Theta> \<B> \<Gamma>'' \<Delta> \<Phi> v z' b1 b2 c z c0. \<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>''; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [#2v ]\<^sup>e \<Rightarrow> \<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 c0. \<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>''; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [| v |]\<^sup>e \<Rightarrow> \<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> c0. \<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>; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [ u ]\<^sup>e \<Rightarrow> \<tau>
 4. \<And>\<Theta> \<B> \<Gamma>'' \<Delta> \<Phi> v1 z1 c1 v2 z2 c2 z3 c0. \<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>''; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [ v1 @@ v2 ]\<^sup>e \<Rightarrow> \<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 c0. \<lbrakk>atom z3 \<sharp> c0; atom z1 \<sharp> c0; atom z2 \<sharp> c0;  \<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>''; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [ v1  v2 ]\<^sup>e \<Rightarrow> \<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]
show ?case
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [#2v ]\<^sup>e \<Rightarrow> \<lbrace> z : b2  | [ [ z ]\<^sup>v ]\<^sup>c\<^sup>e  ==  [#2[ v ]\<^sup>c\<^sup>e]\<^sup>c\<^sup>e  \<rbrace>
[PROOF STEP]
proof
[PROOF STATE]
proof (state)
goal (5 subgoals):
 1.  \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta>
 2.  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi>
 3.  \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> \<turnstile> v \<Rightarrow> \<lbrace> ?z' : [ ?b1.0 , b2 ]\<^sup>b  | ?c \<rbrace>
 4. atom z \<sharp> [#2v ]\<^sup>e
 5. atom z \<sharp> \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>
[PROOF STEP]
show \<open> \<Theta>; \<B>; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<turnstile>\<^sub>w\<^sub>f \<Delta> \<close>
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1.  \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta>
[PROOF STEP]
using wf_replace_inside2(6) valid_wfC infer_e_sndI
[PROOF STATE]
proof (prove)
using this:
\<lbrakk> ?\<Theta> ; ?\<B> ; ?G \<turnstile>\<^sub>w\<^sub>f ?\<Delta> ; ?G = ?\<Gamma>' @ (?x, ?b, ?c') #\<^sub>\<Gamma> ?\<Gamma>;  ?\<Theta> ; ?\<B> ; (?x, ?b, TRUE) #\<^sub>\<Gamma> ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?c \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<B> ; ?\<Gamma>' @ (?x, ?b, ?c) #\<^sub>\<Gamma> ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta>
?\<Theta> ; ?\<B> ; ?\<Gamma>' @ (?x, ?b0.0, ?c0.0) #\<^sub>\<Gamma> ?\<Gamma>  \<Turnstile> ?c0'  \<Longrightarrow>  ?\<Theta> ; ?\<B> ; (?x, ?b0.0, TRUE) #\<^sub>\<Gamma> ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?c0.0
 \<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>''
\<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>
\<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0'

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

goal (4 subgoals):
 1.  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi>
 2.  \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> \<turnstile> v \<Rightarrow> \<lbrace> ?z' : [ ?b1.0 , b2 ]\<^sup>b  | ?c \<rbrace>
 3. atom z \<sharp> [#2v ]\<^sup>e
 4. atom z \<sharp> \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>
[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_sndI
[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>''
\<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>
\<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0'

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>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> \<turnstile> v \<Rightarrow> \<lbrace> ?z' : [ ?b1.0 , b2 ]\<^sup>b  | ?c \<rbrace>
 2. atom z \<sharp> [#2v ]\<^sup>e
 3. atom z \<sharp> \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>
[PROOF STEP]
show \<open> \<Theta>; \<B>; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<turnstile> v \<Rightarrow> \<lbrace> z' : B_pair b1 b2  | c \<rbrace>\<close>
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1.  \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> \<turnstile> v \<Rightarrow> \<lbrace> z' : [ b1 , b2 ]\<^sup>b  | c \<rbrace>
[PROOF STEP]
using infer_e_sndI ctx_subtype_v_eq
[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>''
\<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>
\<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0'
\<lbrakk> ?\<Theta> ; ?\<B> ; ?\<Gamma>' @ (?x, ?b0.0, ?c0') #\<^sub>\<Gamma> ?\<Gamma> \<turnstile> ?v \<Rightarrow> ?t1.0; ?\<Theta> ; ?\<B> ; ?\<Gamma>' @ (?x, ?b0.0, ?c0.0) #\<^sub>\<Gamma> ?\<Gamma>  \<Turnstile> ?c0' \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<B> ; ?\<Gamma>' @ (?x, ?b0.0, ?c0.0) #\<^sub>\<Gamma> ?\<Gamma> \<turnstile> ?v \<Rightarrow> ?t1.0

goal (1 subgoal):
 1.  \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> \<turnstile> v \<Rightarrow> \<lbrace> z' : [ b1 , b2 ]\<^sup>b  | c \<rbrace>
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
 \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> \<turnstile> v \<Rightarrow> \<lbrace> z' : [ b1 , b2 ]\<^sup>b  | c \<rbrace>

goal (2 subgoals):
 1. atom z \<sharp> [#2v ]\<^sup>e
 2. atom z \<sharp> \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>
[PROOF STEP]
thus \<open>atom z \<sharp> \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>\<close>
[PROOF STATE]
proof (prove)
using this:
 \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> \<turnstile> v \<Rightarrow> \<lbrace> z' : [ b1 , b2 ]\<^sup>b  | c \<rbrace>

goal (1 subgoal):
 1. atom z \<sharp> \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>
[PROOF STEP]
using infer_e_sndI fresh_replace_inside[of \<Theta> \<B> \<Gamma>' x b0 c0' \<Gamma> c0 z]  infer_v_wf
[PROOF STATE]
proof (prove)
using this:
 \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> \<turnstile> v \<Rightarrow> \<lbrace> z' : [ b1 , b2 ]\<^sup>b  | c \<rbrace>
 \<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>''
\<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>
\<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0'
\<lbrakk> \<Theta> ; \<B>  \<turnstile>\<^sub>w\<^sub>f \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma> ;  \<Theta> ; \<B>  \<turnstile>\<^sub>w\<^sub>f \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> \<rbrakk> \<Longrightarrow> atom z \<sharp> \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma> = atom z \<sharp> \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>
 ?\<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. atom z \<sharp> \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
atom z \<sharp> \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>

goal (1 subgoal):
 1. atom z \<sharp> [#2v ]\<^sup>e
[PROOF STEP]
show \<open>atom z \<sharp> AE_snd v\<close>
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. atom z \<sharp> [#2v ]\<^sup>e
[PROOF STEP]
using infer_e_sndI
[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>''
\<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>
\<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0'

goal (1 subgoal):
 1. atom z \<sharp> [#2v ]\<^sup>e
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
atom z \<sharp> [#2v ]\<^sup>e

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
\<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [#2v ]\<^sup>e \<Rightarrow> \<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 c0. \<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>''; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [| v |]\<^sup>e \<Rightarrow> \<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> c0. \<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>; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [ u ]\<^sup>e \<Rightarrow> \<tau>
 3. \<And>\<Theta> \<B> \<Gamma>'' \<Delta> \<Phi> v1 z1 c1 v2 z2 c2 z3 c0. \<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>''; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [ v1 @@ v2 ]\<^sup>e \<Rightarrow> \<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 c0. \<lbrakk>atom z3 \<sharp> c0; atom z1 \<sharp> c0; atom z2 \<sharp> c0;  \<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>''; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [ v1  v2 ]\<^sup>e \<Rightarrow> \<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 c0. \<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>''; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [| v |]\<^sup>e \<Rightarrow> \<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> c0. \<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>; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [ u ]\<^sup>e \<Rightarrow> \<tau>
 3. \<And>\<Theta> \<B> \<Gamma>'' \<Delta> \<Phi> v1 z1 c1 v2 z2 c2 z3 c0. \<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>''; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [ v1 @@ v2 ]\<^sup>e \<Rightarrow> \<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 c0. \<lbrakk>atom z3 \<sharp> c0; atom z1 \<sharp> c0; atom z2 \<sharp> c0;  \<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>''; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [ v1  v2 ]\<^sup>e \<Rightarrow> \<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>''
\<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>
\<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0'

goal (4 subgoals):
 1. \<And>\<Theta> \<B> \<Gamma>'' \<Delta> \<Phi> v z' c z c0. \<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>''; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [| v |]\<^sup>e \<Rightarrow> \<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> c0. \<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>; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [ u ]\<^sup>e \<Rightarrow> \<tau>
 3. \<And>\<Theta> \<B> \<Gamma>'' \<Delta> \<Phi> v1 z1 c1 v2 z2 c2 z3 c0. \<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>''; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [ v1 @@ v2 ]\<^sup>e \<Rightarrow> \<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 c0. \<lbrakk>atom z3 \<sharp> c0; atom z1 \<sharp> c0; atom z2 \<sharp> c0;  \<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>''; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [ v1  v2 ]\<^sup>e \<Rightarrow> \<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]
show ?case
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [| v |]\<^sup>e \<Rightarrow> \<lbrace> z : B_int  | [ [ z ]\<^sup>v ]\<^sup>c\<^sup>e  ==  [| [ v ]\<^sup>c\<^sup>e |]\<^sup>c\<^sup>e  \<rbrace>
[PROOF STEP]
proof
[PROOF STATE]
proof (state)
goal (5 subgoals):
 1.  \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta>
 2.  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi>
 3.  \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> \<turnstile> v \<Rightarrow> \<lbrace> ?z' : B_bitvec  | ?c \<rbrace>
 4. atom z \<sharp> [| v |]\<^sup>e
 5. atom z \<sharp> \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>
[PROOF STEP]
show \<open> \<Theta>; \<B>; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<turnstile>\<^sub>w\<^sub>f \<Delta> \<close>
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1.  \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta>
[PROOF STEP]
using wf_replace_inside2(6) valid_wfC infer_e_lenI
[PROOF STATE]
proof (prove)
using this:
\<lbrakk> ?\<Theta> ; ?\<B> ; ?G \<turnstile>\<^sub>w\<^sub>f ?\<Delta> ; ?G = ?\<Gamma>' @ (?x, ?b, ?c') #\<^sub>\<Gamma> ?\<Gamma>;  ?\<Theta> ; ?\<B> ; (?x, ?b, TRUE) #\<^sub>\<Gamma> ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?c \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<B> ; ?\<Gamma>' @ (?x, ?b, ?c) #\<^sub>\<Gamma> ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta>
?\<Theta> ; ?\<B> ; ?\<Gamma>' @ (?x, ?b0.0, ?c0.0) #\<^sub>\<Gamma> ?\<Gamma>  \<Turnstile> ?c0'  \<Longrightarrow>  ?\<Theta> ; ?\<B> ; (?x, ?b0.0, TRUE) #\<^sub>\<Gamma> ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?c0.0
 \<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>''
\<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>
\<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0'

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

goal (4 subgoals):
 1.  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi>
 2.  \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> \<turnstile> v \<Rightarrow> \<lbrace> ?z' : B_bitvec  | ?c \<rbrace>
 3. atom z \<sharp> [| v |]\<^sup>e
 4. atom z \<sharp> \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>
[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_lenI
[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>''
\<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>
\<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0'

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>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> \<turnstile> v \<Rightarrow> \<lbrace> ?z' : B_bitvec  | ?c \<rbrace>
 2. atom z \<sharp> [| v |]\<^sup>e
 3. atom z \<sharp> \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>
[PROOF STEP]
show \<open> \<Theta>; \<B>; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<turnstile> v \<Rightarrow> \<lbrace> z' : B_bitvec  | c \<rbrace>\<close>
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1.  \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> \<turnstile> v \<Rightarrow> \<lbrace> z' : B_bitvec  | c \<rbrace>
[PROOF STEP]
using infer_e_lenI ctx_subtype_v_eq
[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>''
\<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>
\<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0'
\<lbrakk> ?\<Theta> ; ?\<B> ; ?\<Gamma>' @ (?x, ?b0.0, ?c0') #\<^sub>\<Gamma> ?\<Gamma> \<turnstile> ?v \<Rightarrow> ?t1.0; ?\<Theta> ; ?\<B> ; ?\<Gamma>' @ (?x, ?b0.0, ?c0.0) #\<^sub>\<Gamma> ?\<Gamma>  \<Turnstile> ?c0' \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<B> ; ?\<Gamma>' @ (?x, ?b0.0, ?c0.0) #\<^sub>\<Gamma> ?\<Gamma> \<turnstile> ?v \<Rightarrow> ?t1.0

goal (1 subgoal):
 1.  \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> \<turnstile> v \<Rightarrow> \<lbrace> z' : B_bitvec  | c \<rbrace>
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
 \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> \<turnstile> v \<Rightarrow> \<lbrace> z' : B_bitvec  | c \<rbrace>

goal (2 subgoals):
 1. atom z \<sharp> [| v |]\<^sup>e
 2. atom z \<sharp> \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>
[PROOF STEP]
thus \<open>atom z \<sharp> \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>\<close>
[PROOF STATE]
proof (prove)
using this:
 \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> \<turnstile> v \<Rightarrow> \<lbrace> z' : B_bitvec  | c \<rbrace>

goal (1 subgoal):
 1. atom z \<sharp> \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>
[PROOF STEP]
using infer_e_lenI fresh_replace_inside[of \<Theta> \<B> \<Gamma>' x b0 c0' \<Gamma> c0 z]  infer_v_wf
[PROOF STATE]
proof (prove)
using this:
 \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> \<turnstile> v \<Rightarrow> \<lbrace> z' : B_bitvec  | c \<rbrace>
 \<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>''
\<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>
\<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0'
\<lbrakk> \<Theta> ; \<B>  \<turnstile>\<^sub>w\<^sub>f \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma> ;  \<Theta> ; \<B>  \<turnstile>\<^sub>w\<^sub>f \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> \<rbrakk> \<Longrightarrow> atom z \<sharp> \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma> = atom z \<sharp> \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>
 ?\<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. atom z \<sharp> \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
atom z \<sharp> \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>

goal (1 subgoal):
 1. atom z \<sharp> [| v |]\<^sup>e
[PROOF STEP]
show \<open>atom z \<sharp> AE_len v\<close>
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. atom z \<sharp> [| v |]\<^sup>e
[PROOF STEP]
using infer_e_lenI
[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>''
\<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>
\<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0'

goal (1 subgoal):
 1. atom z \<sharp> [| v |]\<^sup>e
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
atom z \<sharp> [| v |]\<^sup>e

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
\<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [| v |]\<^sup>e \<Rightarrow> \<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> c0. \<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>; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [ u ]\<^sup>e \<Rightarrow> \<tau>
 2. \<And>\<Theta> \<B> \<Gamma>'' \<Delta> \<Phi> v1 z1 c1 v2 z2 c2 z3 c0. \<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>''; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [ v1 @@ v2 ]\<^sup>e \<Rightarrow> \<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 c0. \<lbrakk>atom z3 \<sharp> c0; atom z1 \<sharp> c0; atom z2 \<sharp> c0;  \<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>''; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [ v1  v2 ]\<^sup>e \<Rightarrow> \<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> c0. \<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>; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [ u ]\<^sup>e \<Rightarrow> \<tau>
 2. \<And>\<Theta> \<B> \<Gamma>'' \<Delta> \<Phi> v1 z1 c1 v2 z2 c2 z3 c0. \<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>''; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [ v1 @@ v2 ]\<^sup>e \<Rightarrow> \<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 c0. \<lbrakk>atom z3 \<sharp> c0; atom z1 \<sharp> c0; atom z2 \<sharp> c0;  \<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>''; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [ v1  v2 ]\<^sup>e \<Rightarrow> \<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> \<B> \<Gamma>'' \<Phi> \<Delta> u \<tau>)
[PROOF STATE]
proof (state)
this:
 \<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>
\<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>
\<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0'

goal (3 subgoals):
 1. \<And>\<Theta> \<B> \<Gamma>'' \<Phi> \<Delta> u \<tau> c0. \<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>; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [ u ]\<^sup>e \<Rightarrow> \<tau>
 2. \<And>\<Theta> \<B> \<Gamma>'' \<Delta> \<Phi> v1 z1 c1 v2 z2 c2 z3 c0. \<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>''; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [ v1 @@ v2 ]\<^sup>e \<Rightarrow> \<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 c0. \<lbrakk>atom z3 \<sharp> c0; atom z1 \<sharp> c0; atom z2 \<sharp> c0;  \<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>''; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [ v1  v2 ]\<^sup>e \<Rightarrow> \<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]
show ?case
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [ u ]\<^sup>e \<Rightarrow> \<tau>
[PROOF STEP]
proof
[PROOF STATE]
proof (state)
goal (4 subgoals):
 1.  \<Theta> ; \<B>  \<turnstile>\<^sub>w\<^sub>f \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>
 2.  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi>
 3.  \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta>
 4. (u, \<tau>) \<in> setD \<Delta>
[PROOF STEP]
show "\<Theta>; \<B>; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<turnstile>\<^sub>w\<^sub>f \<Delta>"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1.  \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta>
[PROOF STEP]
using wf_replace_inside2(6) valid_wfC infer_e_mvarI
[PROOF STATE]
proof (prove)
using this:
\<lbrakk> ?\<Theta> ; ?\<B> ; ?G \<turnstile>\<^sub>w\<^sub>f ?\<Delta> ; ?G = ?\<Gamma>' @ (?x, ?b, ?c') #\<^sub>\<Gamma> ?\<Gamma>;  ?\<Theta> ; ?\<B> ; (?x, ?b, TRUE) #\<^sub>\<Gamma> ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?c \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<B> ; ?\<Gamma>' @ (?x, ?b, ?c) #\<^sub>\<Gamma> ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta>
?\<Theta> ; ?\<B> ; ?\<Gamma>' @ (?x, ?b0.0, ?c0.0) #\<^sub>\<Gamma> ?\<Gamma>  \<Turnstile> ?c0'  \<Longrightarrow>  ?\<Theta> ; ?\<B> ; (?x, ?b0.0, TRUE) #\<^sub>\<Gamma> ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?c0.0
 \<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>
\<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>
\<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0'

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

goal (3 subgoals):
 1.  \<Theta> ; \<B>  \<turnstile>\<^sub>w\<^sub>f \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>
 2.  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi>
 3. (u, \<tau>) \<in> setD \<Delta>
[PROOF STEP]
thus "\<Theta>; \<B> \<turnstile>\<^sub>w\<^sub>f \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>"
[PROOF STATE]
proof (prove)
using this:
 \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta>

goal (1 subgoal):
 1.  \<Theta> ; \<B>  \<turnstile>\<^sub>w\<^sub>f \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>
[PROOF STEP]
using infer_e_mvarI fresh_replace_inside  wfD_wf
[PROOF STATE]
proof (prove)
using this:
 \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta>
 \<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>
\<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>
\<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0'
\<lbrakk> ?P ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?\<Gamma>'' @ (?x, ?b, ?c) #\<^sub>\<Gamma> ?\<Gamma> ;  ?P ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?\<Gamma>'' @ (?x, ?b, ?c') #\<^sub>\<Gamma> ?\<Gamma> \<rbrakk> \<Longrightarrow> atom ?y \<sharp> ?\<Gamma>'' @ (?x, ?b, ?c) #\<^sub>\<Gamma> ?\<Gamma> = atom ?y \<sharp> ?\<Gamma>'' @ (?x, ?b, ?c') #\<^sub>\<Gamma> ?\<Gamma>
 ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta>  \<Longrightarrow>  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?\<Gamma>  \<and>    \<turnstile>\<^sub>w\<^sub>f ?\<Theta>

goal (1 subgoal):
 1.  \<Theta> ; \<B>  \<turnstile>\<^sub>w\<^sub>f \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>
[PROOF STEP]
by blast
[PROOF STATE]
proof (state)
this:
 \<Theta> ; \<B>  \<turnstile>\<^sub>w\<^sub>f \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>

goal (2 subgoals):
 1.  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi>
 2. (u, \<tau>) \<in> setD \<Delta>
[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_mvarI
[PROOF STATE]
proof (prove)
using this:
 \<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>
\<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>
\<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0'

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 (1 subgoal):
 1. (u, \<tau>) \<in> setD \<Delta>
[PROOF STEP]
show "(u, \<tau>) \<in> setD \<Delta>"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (u, \<tau>) \<in> setD \<Delta>
[PROOF STEP]
using infer_e_mvarI
[PROOF STATE]
proof (prove)
using this:
 \<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>
\<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>
\<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0'

goal (1 subgoal):
 1. (u, \<tau>) \<in> setD \<Delta>
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
(u, \<tau>) \<in> setD \<Delta>

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
\<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [ u ]\<^sup>e \<Rightarrow> \<tau>

goal (2 subgoals):
 1. \<And>\<Theta> \<B> \<Gamma>'' \<Delta> \<Phi> v1 z1 c1 v2 z2 c2 z3 c0. \<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>''; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [ v1 @@ v2 ]\<^sup>e \<Rightarrow> \<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 c0. \<lbrakk>atom z3 \<sharp> c0; atom z1 \<sharp> c0; atom z2 \<sharp> c0;  \<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>''; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [ v1  v2 ]\<^sup>e \<Rightarrow> \<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 c0. \<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>''; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [ v1 @@ v2 ]\<^sup>e \<Rightarrow> \<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 c0. \<lbrakk>atom z3 \<sharp> c0; atom z1 \<sharp> c0; atom z2 \<sharp> c0;  \<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>''; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [ v1  v2 ]\<^sup>e \<Rightarrow> \<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>''
\<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>
\<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0'

goal (2 subgoals):
 1. \<And>\<Theta> \<B> \<Gamma>'' \<Delta> \<Phi> v1 z1 c1 v2 z2 c2 z3 c0. \<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>''; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [ v1 @@ v2 ]\<^sup>e \<Rightarrow> \<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 c0. \<lbrakk>atom z3 \<sharp> c0; atom z1 \<sharp> c0; atom z2 \<sharp> c0;  \<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>''; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [ v1  v2 ]\<^sup>e \<Rightarrow> \<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]
show ?case
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [ v1 @@ v2 ]\<^sup>e \<Rightarrow> \<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]
proof
[PROOF STATE]
proof (state)
goal (6 subgoals):
 1.  \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta>
 2.  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi>
 3.  \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> \<turnstile> v1 \<Rightarrow> \<lbrace> ?z1.0 : B_bitvec  | ?c1.0 \<rbrace>
 4.  \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> \<turnstile> v2 \<Rightarrow> \<lbrace> ?z2.0 : B_bitvec  | ?c2.0 \<rbrace>
 5. atom z3 \<sharp> [ v1 @@ v2 ]\<^sup>e
 6. atom z3 \<sharp> \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>
[PROOF STEP]
show \<open> \<Theta>; \<B>; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<turnstile>\<^sub>w\<^sub>f \<Delta> \<close>
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1.  \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta>
[PROOF STEP]
using wf_replace_inside2(6) valid_wfC infer_e_concatI
[PROOF STATE]
proof (prove)
using this:
\<lbrakk> ?\<Theta> ; ?\<B> ; ?G \<turnstile>\<^sub>w\<^sub>f ?\<Delta> ; ?G = ?\<Gamma>' @ (?x, ?b, ?c') #\<^sub>\<Gamma> ?\<Gamma>;  ?\<Theta> ; ?\<B> ; (?x, ?b, TRUE) #\<^sub>\<Gamma> ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?c \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<B> ; ?\<Gamma>' @ (?x, ?b, ?c) #\<^sub>\<Gamma> ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta>
?\<Theta> ; ?\<B> ; ?\<Gamma>' @ (?x, ?b0.0, ?c0.0) #\<^sub>\<Gamma> ?\<Gamma>  \<Turnstile> ?c0'  \<Longrightarrow>  ?\<Theta> ; ?\<B> ; (?x, ?b0.0, TRUE) #\<^sub>\<Gamma> ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?c0.0
 \<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>''
\<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>
\<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0'

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

goal (5 subgoals):
 1.  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi>
 2.  \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> \<turnstile> v1 \<Rightarrow> \<lbrace> ?z1.0 : B_bitvec  | ?c1.0 \<rbrace>
 3.  \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> \<turnstile> v2 \<Rightarrow> \<lbrace> ?z2.0 : B_bitvec  | ?c2.0 \<rbrace>
 4. atom z3 \<sharp> [ v1 @@ v2 ]\<^sup>e
 5. atom z3 \<sharp> \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>
[PROOF STEP]
thus  \<open>atom z3 \<sharp> \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>\<close>
[PROOF STATE]
proof (prove)
using this:
 \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta>

goal (1 subgoal):
 1. atom z3 \<sharp> \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>
[PROOF STEP]
using infer_e_concatI fresh_replace_inside[of \<Theta> \<B> \<Gamma>' x b0 c0' \<Gamma> c0 z3]  infer_v_wf wfX_wfY
[PROOF STATE]
proof (prove)
using this:
 \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta>
 \<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>''
\<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>
\<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0'
\<lbrakk> \<Theta> ; \<B>  \<turnstile>\<^sub>w\<^sub>f \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma> ;  \<Theta> ; \<B>  \<turnstile>\<^sub>w\<^sub>f \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> \<rbrakk> \<Longrightarrow> atom z3 \<sharp> \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma> = atom z3 \<sharp> \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>
 ?\<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
 ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v : ?b  \<Longrightarrow>  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?\<Gamma>  \<and>    \<turnstile>\<^sub>w\<^sub>f ?\<Theta>
 ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?c  \<Longrightarrow>  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?\<Gamma>  \<and>    \<turnstile>\<^sub>w\<^sub>f ?\<Theta>
 ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?\<Gamma>  \<Longrightarrow>    \<turnstile>\<^sub>w\<^sub>f ?\<Theta>
 ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?\<tau>  \<Longrightarrow>  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?\<Gamma>  \<and>    \<turnstile>\<^sub>w\<^sub>f ?\<Theta>  \<and>  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f b_of ?\<tau>
 ?\<Theta> ; ?\<B>  ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?ts  \<Longrightarrow>  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?\<Gamma>  \<and>    \<turnstile>\<^sub>w\<^sub>f ?\<Theta>
   \<turnstile>\<^sub>w\<^sub>f ?\<Theta>  \<Longrightarrow> True
 ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?b  \<Longrightarrow>    \<turnstile>\<^sub>w\<^sub>f ?\<Theta>
  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?ce : ?b  \<Longrightarrow>  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?\<Gamma>  \<and>    \<turnstile>\<^sub>w\<^sub>f ?\<Theta>
 ?\<Theta> \<turnstile>\<^sub>w\<^sub>f ?td  \<Longrightarrow>    \<turnstile>\<^sub>w\<^sub>f ?\<Theta>
 ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f ?e : ?b  \<Longrightarrow>  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?\<Gamma>  \<and>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta>  \<and>    \<turnstile>\<^sub>w\<^sub>f ?\<Theta>  \<and>  ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f ?\<Phi>
 ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f ?s : ?b  \<Longrightarrow>  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?\<Gamma>  \<and>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta>  \<and>    \<turnstile>\<^sub>w\<^sub>f ?\<Theta>  \<and>  ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f ?\<Phi>
 ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> ; ?tid ; ?dc ; ?t \<turnstile>\<^sub>w\<^sub>f ?cs : ?b  \<Longrightarrow>  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?\<Gamma>  \<and>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta>  \<and>    \<turnstile>\<^sub>w\<^sub>f ?\<Theta>  \<and>  ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f ?\<Phi>
 ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> ; ?tid ; ?dclist \<turnstile>\<^sub>w\<^sub>f ?css : ?b  \<Longrightarrow>  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?\<Gamma>  \<and>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta>  \<and>    \<turnstile>\<^sub>w\<^sub>f ?\<Theta>  \<and>  ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f ?\<Phi>
 ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f ?\<Phi>  \<Longrightarrow>    \<turnstile>\<^sub>w\<^sub>f ?\<Theta>
 ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta>  \<Longrightarrow>  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?\<Gamma>  \<and>    \<turnstile>\<^sub>w\<^sub>f ?\<Theta>
 ?\<Theta>  ; ?\<Phi> \<turnstile>\<^sub>w\<^sub>f ?ftq  \<Longrightarrow>  ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f ?\<Phi>  \<and>    \<turnstile>\<^sub>w\<^sub>f ?\<Theta>
 ?\<Theta> ; ?\<Phi> ; ?\<B> \<turnstile>\<^sub>w\<^sub>f ?ft  \<Longrightarrow>  ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f ?\<Phi>  \<and>    \<turnstile>\<^sub>w\<^sub>f ?\<Theta>

goal (1 subgoal):
 1. atom z3 \<sharp> \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>
[PROOF STEP]
by metis
[PROOF STATE]
proof (state)
this:
atom z3 \<sharp> \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>

goal (4 subgoals):
 1.  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi>
 2.  \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> \<turnstile> v1 \<Rightarrow> \<lbrace> ?z1.0 : B_bitvec  | ?c1.0 \<rbrace>
 3.  \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> \<turnstile> v2 \<Rightarrow> \<lbrace> ?z2.0 : B_bitvec  | ?c2.0 \<rbrace>
 4. atom z3 \<sharp> [ v1 @@ v2 ]\<^sup>e
[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_concatI
[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>''
\<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>
\<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0'

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>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> \<turnstile> v1 \<Rightarrow> \<lbrace> ?z1.0 : B_bitvec  | ?c1.0 \<rbrace>
 2.  \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> \<turnstile> v2 \<Rightarrow> \<lbrace> ?z2.0 : B_bitvec  | ?c2.0 \<rbrace>
 3. atom z3 \<sharp> [ v1 @@ v2 ]\<^sup>e
[PROOF STEP]
show \<open> \<Theta>; \<B>; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<turnstile> v1 \<Rightarrow> \<lbrace> z1 : B_bitvec  | c1 \<rbrace>\<close>
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1.  \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> \<turnstile> v1 \<Rightarrow> \<lbrace> z1 : B_bitvec  | c1 \<rbrace>
[PROOF STEP]
using infer_e_concatI ctx_subtype_v_eq
[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>''
\<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>
\<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0'
\<lbrakk> ?\<Theta> ; ?\<B> ; ?\<Gamma>' @ (?x, ?b0.0, ?c0') #\<^sub>\<Gamma> ?\<Gamma> \<turnstile> ?v \<Rightarrow> ?t1.0; ?\<Theta> ; ?\<B> ; ?\<Gamma>' @ (?x, ?b0.0, ?c0.0) #\<^sub>\<Gamma> ?\<Gamma>  \<Turnstile> ?c0' \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<B> ; ?\<Gamma>' @ (?x, ?b0.0, ?c0.0) #\<^sub>\<Gamma> ?\<Gamma> \<turnstile> ?v \<Rightarrow> ?t1.0

goal (1 subgoal):
 1.  \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> \<turnstile> v1 \<Rightarrow> \<lbrace> z1 : B_bitvec  | c1 \<rbrace>
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
 \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> \<turnstile> v1 \<Rightarrow> \<lbrace> z1 : B_bitvec  | c1 \<rbrace>

goal (2 subgoals):
 1.  \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> \<turnstile> v2 \<Rightarrow> \<lbrace> ?z2.0 : B_bitvec  | ?c2.0 \<rbrace>
 2. atom z3 \<sharp> [ v1 @@ v2 ]\<^sup>e
[PROOF STEP]
show \<open> \<Theta>; \<B>; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<turnstile> v2 \<Rightarrow> \<lbrace> z2 : B_bitvec  | c2 \<rbrace>\<close>
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1.  \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> \<turnstile> v2 \<Rightarrow> \<lbrace> z2 : B_bitvec  | c2 \<rbrace>
[PROOF STEP]
using infer_e_concatI ctx_subtype_v_eq
[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>''
\<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>
\<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0'
\<lbrakk> ?\<Theta> ; ?\<B> ; ?\<Gamma>' @ (?x, ?b0.0, ?c0') #\<^sub>\<Gamma> ?\<Gamma> \<turnstile> ?v \<Rightarrow> ?t1.0; ?\<Theta> ; ?\<B> ; ?\<Gamma>' @ (?x, ?b0.0, ?c0.0) #\<^sub>\<Gamma> ?\<Gamma>  \<Turnstile> ?c0' \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<B> ; ?\<Gamma>' @ (?x, ?b0.0, ?c0.0) #\<^sub>\<Gamma> ?\<Gamma> \<turnstile> ?v \<Rightarrow> ?t1.0

goal (1 subgoal):
 1.  \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> \<turnstile> v2 \<Rightarrow> \<lbrace> z2 : B_bitvec  | c2 \<rbrace>
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
 \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> \<turnstile> v2 \<Rightarrow> \<lbrace> z2 : B_bitvec  | c2 \<rbrace>

goal (1 subgoal):
 1. atom z3 \<sharp> [ v1 @@ v2 ]\<^sup>e
[PROOF STEP]
show \<open>atom z3 \<sharp> AE_concat v1 v2\<close>
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. atom z3 \<sharp> [ v1 @@ v2 ]\<^sup>e
[PROOF STEP]
using infer_e_concatI
[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>''
\<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>
\<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0'

goal (1 subgoal):
 1. atom z3 \<sharp> [ v1 @@ v2 ]\<^sup>e
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
atom z3 \<sharp> [ v1 @@ v2 ]\<^sup>e

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
\<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [ v1 @@ v2 ]\<^sup>e \<Rightarrow> \<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 c0. \<lbrakk>atom z3 \<sharp> c0; atom z1 \<sharp> c0; atom z2 \<sharp> c0;  \<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>''; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [ v1  v2 ]\<^sup>e \<Rightarrow> \<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 c0. \<lbrakk>atom z3 \<sharp> c0; atom z1 \<sharp> c0; atom z2 \<sharp> c0;  \<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>''; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [ v1  v2 ]\<^sup>e \<Rightarrow> \<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> c0
atom z1 \<sharp> c0
atom z2 \<sharp> c0
 \<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>''
\<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>
\<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0'

goal (1 subgoal):
 1. \<And>\<Theta> \<B> \<Gamma>'' \<Delta> \<Phi> v1 z1 c1 v2 z2 z3 c0. \<lbrakk>atom z3 \<sharp> c0; atom z1 \<sharp> c0; atom z2 \<sharp> c0;  \<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>''; \<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>; \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0' \<rbrakk> \<Longrightarrow> \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [ v1  v2 ]\<^sup>e \<Rightarrow> \<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]
show ?case
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [ v1  v2 ]\<^sup>e \<Rightarrow> \<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]
proof
[PROOF STATE]
proof (state)
goal (10 subgoals):
 1.  \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta>
 2.  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi>
 3.  \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> \<turnstile> v1 \<Rightarrow> \<lbrace> ?z1.0 : B_bitvec  | ?c1.0 \<rbrace>
 4. \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<turnstile> v2 \<Leftarrow> \<lbrace> ?z2.0 : B_int  | [ leq [ [ L_num 0 ]\<^sup>v ]\<^sup>c\<^sup>e [ [ ?z2.0 ]\<^sup>v ]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e  ==  [ [ L_true ]\<^sup>v ]\<^sup>c\<^sup>e   AND  [ leq [ [ ?z2.0 ]\<^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>
 5. atom ?z1.0 \<sharp> [ v1  v2 ]\<^sup>e
 6. atom ?z1.0 \<sharp> \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>
 7. atom ?z2.0 \<sharp> [ v1  v2 ]\<^sup>e
 8. atom ?z2.0 \<sharp> \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>
 9. atom z3 \<sharp> [ v1  v2 ]\<^sup>e
 10. atom z3 \<sharp> \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>
[PROOF STEP]
show *:\<open> \<Theta>; \<B>; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta> \<close>
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1.  \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta>
[PROOF STEP]
using wf_replace_inside2(6) valid_wfC infer_e_splitI
[PROOF STATE]
proof (prove)
using this:
\<lbrakk> ?\<Theta> ; ?\<B> ; ?G \<turnstile>\<^sub>w\<^sub>f ?\<Delta> ; ?G = ?\<Gamma>' @ (?x, ?b, ?c') #\<^sub>\<Gamma> ?\<Gamma>;  ?\<Theta> ; ?\<B> ; (?x, ?b, TRUE) #\<^sub>\<Gamma> ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?c \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<B> ; ?\<Gamma>' @ (?x, ?b, ?c) #\<^sub>\<Gamma> ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta>
?\<Theta> ; ?\<B> ; ?\<Gamma>' @ (?x, ?b0.0, ?c0.0) #\<^sub>\<Gamma> ?\<Gamma>  \<Turnstile> ?c0'  \<Longrightarrow>  ?\<Theta> ; ?\<B> ; (?x, ?b0.0, TRUE) #\<^sub>\<Gamma> ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?c0.0
atom z3 \<sharp> c0
atom z1 \<sharp> c0
atom z2 \<sharp> c0
 \<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>''
\<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>
\<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0'

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

goal (9 subgoals):
 1.  \<Theta>  \<turnstile>\<^sub>w\<^sub>f \<Phi>
 2.  \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> \<turnstile> v1 \<Rightarrow> \<lbrace> ?z1.0 : B_bitvec  | ?c1.0 \<rbrace>
 3. \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<turnstile> v2 \<Leftarrow> \<lbrace> ?z2.0 : B_int  | [ leq [ [ L_num 0 ]\<^sup>v ]\<^sup>c\<^sup>e [ [ ?z2.0 ]\<^sup>v ]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e  ==  [ [ L_true ]\<^sup>v ]\<^sup>c\<^sup>e   AND  [ leq [ [ ?z2.0 ]\<^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>
 4. atom ?z1.0 \<sharp> [ v1  v2 ]\<^sup>e
 5. atom ?z1.0 \<sharp> \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>
 6. atom ?z2.0 \<sharp> [ v1  v2 ]\<^sup>e
 7. atom ?z2.0 \<sharp> \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>
 8. atom z3 \<sharp> [ v1  v2 ]\<^sup>e
 9. atom z3 \<sharp> \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>
[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_splitI
[PROOF STATE]
proof (prove)
using this:
atom z3 \<sharp> c0
atom z1 \<sharp> c0
atom z2 \<sharp> c0
 \<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>''
\<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>
\<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0'

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 (8 subgoals):
 1.  \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> \<turnstile> v1 \<Rightarrow> \<lbrace> ?z1.0 : B_bitvec  | ?c1.0 \<rbrace>
 2. \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<turnstile> v2 \<Leftarrow> \<lbrace> ?z2.0 : B_int  | [ leq [ [ L_num 0 ]\<^sup>v ]\<^sup>c\<^sup>e [ [ ?z2.0 ]\<^sup>v ]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e  ==  [ [ L_true ]\<^sup>v ]\<^sup>c\<^sup>e   AND  [ leq [ [ ?z2.0 ]\<^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>
 3. atom ?z1.0 \<sharp> [ v1  v2 ]\<^sup>e
 4. atom ?z1.0 \<sharp> \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>
 5. atom ?z2.0 \<sharp> [ v1  v2 ]\<^sup>e
 6. atom ?z2.0 \<sharp> \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>
 7. atom z3 \<sharp> [ v1  v2 ]\<^sup>e
 8. atom z3 \<sharp> \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>
[PROOF STEP]
show \<open> \<Theta>; \<B>; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> \<turnstile> v1 \<Rightarrow> \<lbrace> z1 : B_bitvec  | c1 \<rbrace>\<close>
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1.  \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> \<turnstile> v1 \<Rightarrow> \<lbrace> z1 : B_bitvec  | c1 \<rbrace>
[PROOF STEP]
using infer_e_splitI  ctx_subtype_v_eq
[PROOF STATE]
proof (prove)
using this:
atom z3 \<sharp> c0
atom z1 \<sharp> c0
atom z2 \<sharp> c0
 \<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>''
\<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>
\<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0'
\<lbrakk> ?\<Theta> ; ?\<B> ; ?\<Gamma>' @ (?x, ?b0.0, ?c0') #\<^sub>\<Gamma> ?\<Gamma> \<turnstile> ?v \<Rightarrow> ?t1.0; ?\<Theta> ; ?\<B> ; ?\<Gamma>' @ (?x, ?b0.0, ?c0.0) #\<^sub>\<Gamma> ?\<Gamma>  \<Turnstile> ?c0' \<rbrakk> \<Longrightarrow>  ?\<Theta> ; ?\<B> ; ?\<Gamma>' @ (?x, ?b0.0, ?c0.0) #\<^sub>\<Gamma> ?\<Gamma> \<turnstile> ?v \<Rightarrow> ?t1.0

goal (1 subgoal):
 1.  \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> \<turnstile> v1 \<Rightarrow> \<lbrace> z1 : B_bitvec  | c1 \<rbrace>
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
 \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> \<turnstile> v1 \<Rightarrow> \<lbrace> z1 : B_bitvec  | c1 \<rbrace>

goal (7 subgoals):
 1. \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<turnstile> v2 \<Leftarrow> \<lbrace> ?z2.0 : B_int  | [ leq [ [ L_num 0 ]\<^sup>v ]\<^sup>c\<^sup>e [ [ ?z2.0 ]\<^sup>v ]\<^sup>c\<^sup>e ]\<^sup>c\<^sup>e  ==  [ [ L_true ]\<^sup>v ]\<^sup>c\<^sup>e   AND  [ leq [ [ ?z2.0 ]\<^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>
 2. atom z1 \<sharp> [ v1  v2 ]\<^sup>e
 3. atom z1 \<sharp> \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>
 4. atom ?z2.0 \<sharp> [ v1  v2 ]\<^sup>e
 5. atom ?z2.0 \<sharp> \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>
 6. atom z3 \<sharp> [ v1  v2 ]\<^sup>e
 7. atom z3 \<sharp> \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>
[PROOF STEP]
show \<open>\<Theta>; \<B>; \<Gamma>' @
                 (x, b0, c0) #\<^sub>\<Gamma>
                 \<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>\<close>
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<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>
[PROOF STEP]
using infer_e_splitI  ctx_subtype_check_v_eq
[PROOF STATE]
proof (prove)
using this:
atom z3 \<sharp> c0
atom z1 \<sharp> c0
atom z2 \<sharp> c0
 \<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>''
\<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>
\<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0'
\<lbrakk>?\<Theta> ; ?\<B> ; ?\<Gamma>' @ (?x, ?b0.0, ?c0') #\<^sub>\<Gamma> ?\<Gamma>  \<turnstile> ?v \<Leftarrow> ?t1.0; ?\<Theta> ; ?\<B> ; ?\<Gamma>' @ (?x, ?b0.0, ?c0.0) #\<^sub>\<Gamma> ?\<Gamma>  \<Turnstile> ?c0' \<rbrakk> \<Longrightarrow> ?\<Theta> ; ?\<B> ; ?\<Gamma>' @ (?x, ?b0.0, ?c0.0) #\<^sub>\<Gamma> ?\<Gamma>  \<turnstile> ?v \<Leftarrow> ?t1.0

goal (1 subgoal):
 1. \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<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>
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
\<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<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>

goal (6 subgoals):
 1. atom z1 \<sharp> [ v1  v2 ]\<^sup>e
 2. atom z1 \<sharp> \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>
 3. atom z2 \<sharp> [ v1  v2 ]\<^sup>e
 4. atom z2 \<sharp> \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>
 5. atom z3 \<sharp> [ v1  v2 ]\<^sup>e
 6. atom z3 \<sharp> \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>
[PROOF STEP]
show  \<open>atom z1 \<sharp> \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>\<close>
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. atom z1 \<sharp> \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>
[PROOF STEP]
using  fresh_replace_inside[of \<Theta> \<B> \<Gamma>' x b0 c0' \<Gamma> c0 z1] infer_e_splitI  infer_v_wf wfX_wfY *
[PROOF STATE]
proof (prove)
using this:
\<lbrakk> \<Theta> ; \<B>  \<turnstile>\<^sub>w\<^sub>f \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma> ;  \<Theta> ; \<B>  \<turnstile>\<^sub>w\<^sub>f \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> \<rbrakk> \<Longrightarrow> atom z1 \<sharp> \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma> = atom z1 \<sharp> \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>
atom z3 \<sharp> c0
atom z1 \<sharp> c0
atom z2 \<sharp> c0
 \<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>''
\<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>
\<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0'
 ?\<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
 ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v : ?b  \<Longrightarrow>  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?\<Gamma>  \<and>    \<turnstile>\<^sub>w\<^sub>f ?\<Theta>
 ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?c  \<Longrightarrow>  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?\<Gamma>  \<and>    \<turnstile>\<^sub>w\<^sub>f ?\<Theta>
 ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?\<Gamma>  \<Longrightarrow>    \<turnstile>\<^sub>w\<^sub>f ?\<Theta>
 ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?\<tau>  \<Longrightarrow>  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?\<Gamma>  \<and>    \<turnstile>\<^sub>w\<^sub>f ?\<Theta>  \<and>  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f b_of ?\<tau>
 ?\<Theta> ; ?\<B>  ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?ts  \<Longrightarrow>  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?\<Gamma>  \<and>    \<turnstile>\<^sub>w\<^sub>f ?\<Theta>
   \<turnstile>\<^sub>w\<^sub>f ?\<Theta>  \<Longrightarrow> True
 ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?b  \<Longrightarrow>    \<turnstile>\<^sub>w\<^sub>f ?\<Theta>
  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?ce : ?b  \<Longrightarrow>  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?\<Gamma>  \<and>    \<turnstile>\<^sub>w\<^sub>f ?\<Theta>
 ?\<Theta> \<turnstile>\<^sub>w\<^sub>f ?td  \<Longrightarrow>    \<turnstile>\<^sub>w\<^sub>f ?\<Theta>
 ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f ?e : ?b  \<Longrightarrow>  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?\<Gamma>  \<and>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta>  \<and>    \<turnstile>\<^sub>w\<^sub>f ?\<Theta>  \<and>  ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f ?\<Phi>
 ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f ?s : ?b  \<Longrightarrow>  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?\<Gamma>  \<and>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta>  \<and>    \<turnstile>\<^sub>w\<^sub>f ?\<Theta>  \<and>  ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f ?\<Phi>
 ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> ; ?tid ; ?dc ; ?t \<turnstile>\<^sub>w\<^sub>f ?cs : ?b  \<Longrightarrow>  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?\<Gamma>  \<and>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta>  \<and>    \<turnstile>\<^sub>w\<^sub>f ?\<Theta>  \<and>  ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f ?\<Phi>
 ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> ; ?tid ; ?dclist \<turnstile>\<^sub>w\<^sub>f ?css : ?b  \<Longrightarrow>  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?\<Gamma>  \<and>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta>  \<and>    \<turnstile>\<^sub>w\<^sub>f ?\<Theta>  \<and>  ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f ?\<Phi>
 ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f ?\<Phi>  \<Longrightarrow>    \<turnstile>\<^sub>w\<^sub>f ?\<Theta>
 ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta>  \<Longrightarrow>  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?\<Gamma>  \<and>    \<turnstile>\<^sub>w\<^sub>f ?\<Theta>
 ?\<Theta>  ; ?\<Phi> \<turnstile>\<^sub>w\<^sub>f ?ftq  \<Longrightarrow>  ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f ?\<Phi>  \<and>    \<turnstile>\<^sub>w\<^sub>f ?\<Theta>
 ?\<Theta> ; ?\<Phi> ; ?\<B> \<turnstile>\<^sub>w\<^sub>f ?ft  \<Longrightarrow>  ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f ?\<Phi>  \<and>    \<turnstile>\<^sub>w\<^sub>f ?\<Theta>
 \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta>

goal (1 subgoal):
 1. atom z1 \<sharp> \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>
[PROOF STEP]
by metis
[PROOF STATE]
proof (state)
this:
atom z1 \<sharp> \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>

goal (5 subgoals):
 1. atom z1 \<sharp> [ v1  v2 ]\<^sup>e
 2. atom z2 \<sharp> [ v1  v2 ]\<^sup>e
 3. atom z2 \<sharp> \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>
 4. atom z3 \<sharp> [ v1  v2 ]\<^sup>e
 5. atom z3 \<sharp> \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>
[PROOF STEP]
show  \<open>atom z2 \<sharp> \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>\<close>
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. atom z2 \<sharp> \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>
[PROOF STEP]
using  fresh_replace_inside[of \<Theta> \<B> \<Gamma>' x b0 c0' \<Gamma> c0 ] infer_e_splitI  infer_v_wf wfX_wfY *
[PROOF STATE]
proof (prove)
using this:
\<lbrakk> \<Theta> ; \<B>  \<turnstile>\<^sub>w\<^sub>f \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma> ;  \<Theta> ; \<B>  \<turnstile>\<^sub>w\<^sub>f \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> \<rbrakk> \<Longrightarrow> atom ?y \<sharp> \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma> = atom ?y \<sharp> \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>
atom z3 \<sharp> c0
atom z1 \<sharp> c0
atom z2 \<sharp> c0
 \<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>''
\<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>
\<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0'
 ?\<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
 ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v : ?b  \<Longrightarrow>  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?\<Gamma>  \<and>    \<turnstile>\<^sub>w\<^sub>f ?\<Theta>
 ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?c  \<Longrightarrow>  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?\<Gamma>  \<and>    \<turnstile>\<^sub>w\<^sub>f ?\<Theta>
 ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?\<Gamma>  \<Longrightarrow>    \<turnstile>\<^sub>w\<^sub>f ?\<Theta>
 ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?\<tau>  \<Longrightarrow>  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?\<Gamma>  \<and>    \<turnstile>\<^sub>w\<^sub>f ?\<Theta>  \<and>  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f b_of ?\<tau>
 ?\<Theta> ; ?\<B>  ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?ts  \<Longrightarrow>  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?\<Gamma>  \<and>    \<turnstile>\<^sub>w\<^sub>f ?\<Theta>
   \<turnstile>\<^sub>w\<^sub>f ?\<Theta>  \<Longrightarrow> True
 ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?b  \<Longrightarrow>    \<turnstile>\<^sub>w\<^sub>f ?\<Theta>
  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?ce : ?b  \<Longrightarrow>  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?\<Gamma>  \<and>    \<turnstile>\<^sub>w\<^sub>f ?\<Theta>
 ?\<Theta> \<turnstile>\<^sub>w\<^sub>f ?td  \<Longrightarrow>    \<turnstile>\<^sub>w\<^sub>f ?\<Theta>
 ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f ?e : ?b  \<Longrightarrow>  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?\<Gamma>  \<and>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta>  \<and>    \<turnstile>\<^sub>w\<^sub>f ?\<Theta>  \<and>  ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f ?\<Phi>
 ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f ?s : ?b  \<Longrightarrow>  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?\<Gamma>  \<and>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta>  \<and>    \<turnstile>\<^sub>w\<^sub>f ?\<Theta>  \<and>  ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f ?\<Phi>
 ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> ; ?tid ; ?dc ; ?t \<turnstile>\<^sub>w\<^sub>f ?cs : ?b  \<Longrightarrow>  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?\<Gamma>  \<and>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta>  \<and>    \<turnstile>\<^sub>w\<^sub>f ?\<Theta>  \<and>  ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f ?\<Phi>
 ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> ; ?tid ; ?dclist \<turnstile>\<^sub>w\<^sub>f ?css : ?b  \<Longrightarrow>  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?\<Gamma>  \<and>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta>  \<and>    \<turnstile>\<^sub>w\<^sub>f ?\<Theta>  \<and>  ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f ?\<Phi>
 ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f ?\<Phi>  \<Longrightarrow>    \<turnstile>\<^sub>w\<^sub>f ?\<Theta>
 ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta>  \<Longrightarrow>  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?\<Gamma>  \<and>    \<turnstile>\<^sub>w\<^sub>f ?\<Theta>
 ?\<Theta>  ; ?\<Phi> \<turnstile>\<^sub>w\<^sub>f ?ftq  \<Longrightarrow>  ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f ?\<Phi>  \<and>    \<turnstile>\<^sub>w\<^sub>f ?\<Theta>
 ?\<Theta> ; ?\<Phi> ; ?\<B> \<turnstile>\<^sub>w\<^sub>f ?ft  \<Longrightarrow>  ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f ?\<Phi>  \<and>    \<turnstile>\<^sub>w\<^sub>f ?\<Theta>
 \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta>

goal (1 subgoal):
 1. atom z2 \<sharp> \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>
[PROOF STEP]
by metis
[PROOF STATE]
proof (state)
this:
atom z2 \<sharp> \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>

goal (4 subgoals):
 1. atom z1 \<sharp> [ v1  v2 ]\<^sup>e
 2. atom z2 \<sharp> [ v1  v2 ]\<^sup>e
 3. atom z3 \<sharp> [ v1  v2 ]\<^sup>e
 4. atom z3 \<sharp> \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>
[PROOF STEP]
show  \<open>atom z3 \<sharp> \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>\<close>
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. atom z3 \<sharp> \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>
[PROOF STEP]
using  fresh_replace_inside[of \<Theta> \<B> \<Gamma>' x b0 c0' \<Gamma> c0 ] infer_e_splitI  infer_v_wf wfX_wfY *
[PROOF STATE]
proof (prove)
using this:
\<lbrakk> \<Theta> ; \<B>  \<turnstile>\<^sub>w\<^sub>f \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma> ;  \<Theta> ; \<B>  \<turnstile>\<^sub>w\<^sub>f \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> \<rbrakk> \<Longrightarrow> atom ?y \<sharp> \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma> = atom ?y \<sharp> \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>
atom z3 \<sharp> c0
atom z1 \<sharp> c0
atom z2 \<sharp> c0
 \<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>''
\<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>
\<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0'
 ?\<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
 ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v : ?b  \<Longrightarrow>  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?\<Gamma>  \<and>    \<turnstile>\<^sub>w\<^sub>f ?\<Theta>
 ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?c  \<Longrightarrow>  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?\<Gamma>  \<and>    \<turnstile>\<^sub>w\<^sub>f ?\<Theta>
 ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?\<Gamma>  \<Longrightarrow>    \<turnstile>\<^sub>w\<^sub>f ?\<Theta>
 ?\<Theta> ; ?\<B> ; ?\<Gamma>   \<turnstile>\<^sub>w\<^sub>f ?\<tau>  \<Longrightarrow>  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?\<Gamma>  \<and>    \<turnstile>\<^sub>w\<^sub>f ?\<Theta>  \<and>  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f b_of ?\<tau>
 ?\<Theta> ; ?\<B>  ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?ts  \<Longrightarrow>  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?\<Gamma>  \<and>    \<turnstile>\<^sub>w\<^sub>f ?\<Theta>
   \<turnstile>\<^sub>w\<^sub>f ?\<Theta>  \<Longrightarrow> True
 ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?b  \<Longrightarrow>    \<turnstile>\<^sub>w\<^sub>f ?\<Theta>
  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?ce : ?b  \<Longrightarrow>  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?\<Gamma>  \<and>    \<turnstile>\<^sub>w\<^sub>f ?\<Theta>
 ?\<Theta> \<turnstile>\<^sub>w\<^sub>f ?td  \<Longrightarrow>    \<turnstile>\<^sub>w\<^sub>f ?\<Theta>
 ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f ?e : ?b  \<Longrightarrow>  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?\<Gamma>  \<and>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta>  \<and>    \<turnstile>\<^sub>w\<^sub>f ?\<Theta>  \<and>  ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f ?\<Phi>
 ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> \<turnstile>\<^sub>w\<^sub>f ?s : ?b  \<Longrightarrow>  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?\<Gamma>  \<and>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta>  \<and>    \<turnstile>\<^sub>w\<^sub>f ?\<Theta>  \<and>  ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f ?\<Phi>
 ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> ; ?tid ; ?dc ; ?t \<turnstile>\<^sub>w\<^sub>f ?cs : ?b  \<Longrightarrow>  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?\<Gamma>  \<and>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta>  \<and>    \<turnstile>\<^sub>w\<^sub>f ?\<Theta>  \<and>  ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f ?\<Phi>
 ?\<Theta> ; ?\<Phi> ; ?\<B> ; ?\<Gamma> ; ?\<Delta> ; ?tid ; ?dclist \<turnstile>\<^sub>w\<^sub>f ?css : ?b  \<Longrightarrow>  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?\<Gamma>  \<and>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta>  \<and>    \<turnstile>\<^sub>w\<^sub>f ?\<Theta>  \<and>  ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f ?\<Phi>
 ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f ?\<Phi>  \<Longrightarrow>    \<turnstile>\<^sub>w\<^sub>f ?\<Theta>
 ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?\<Delta>  \<Longrightarrow>  ?\<Theta> ; ?\<B>  \<turnstile>\<^sub>w\<^sub>f ?\<Gamma>  \<and>    \<turnstile>\<^sub>w\<^sub>f ?\<Theta>
 ?\<Theta>  ; ?\<Phi> \<turnstile>\<^sub>w\<^sub>f ?ftq  \<Longrightarrow>  ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f ?\<Phi>  \<and>    \<turnstile>\<^sub>w\<^sub>f ?\<Theta>
 ?\<Theta> ; ?\<Phi> ; ?\<B> \<turnstile>\<^sub>w\<^sub>f ?ft  \<Longrightarrow>  ?\<Theta>  \<turnstile>\<^sub>w\<^sub>f ?\<Phi>  \<and>    \<turnstile>\<^sub>w\<^sub>f ?\<Theta>
 \<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> \<turnstile>\<^sub>w\<^sub>f \<Delta>

goal (1 subgoal):
 1. atom z3 \<sharp> \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>
[PROOF STEP]
by metis
[PROOF STATE]
proof (state)
this:
atom z3 \<sharp> \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>

goal (3 subgoals):
 1. atom z1 \<sharp> [ v1  v2 ]\<^sup>e
 2. atom z2 \<sharp> [ v1  v2 ]\<^sup>e
 3. atom z3 \<sharp> [ v1  v2 ]\<^sup>e
[PROOF STEP]
show \<open>atom z1 \<sharp> AE_split v1 v2\<close>
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. atom z1 \<sharp> [ v1  v2 ]\<^sup>e
[PROOF STEP]
using infer_e_splitI
[PROOF STATE]
proof (prove)
using this:
atom z3 \<sharp> c0
atom z1 \<sharp> c0
atom z2 \<sharp> c0
 \<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>''
\<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>
\<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0'

goal (1 subgoal):
 1. atom z1 \<sharp> [ v1  v2 ]\<^sup>e
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
atom z1 \<sharp> [ v1  v2 ]\<^sup>e

goal (2 subgoals):
 1. atom z2 \<sharp> [ v1  v2 ]\<^sup>e
 2. atom z3 \<sharp> [ v1  v2 ]\<^sup>e
[PROOF STEP]
show \<open>atom z2 \<sharp> AE_split v1 v2\<close>
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. atom z2 \<sharp> [ v1  v2 ]\<^sup>e
[PROOF STEP]
using infer_e_splitI
[PROOF STATE]
proof (prove)
using this:
atom z3 \<sharp> c0
atom z1 \<sharp> c0
atom z2 \<sharp> c0
 \<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>''
\<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>
\<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0'

goal (1 subgoal):
 1. atom z2 \<sharp> [ v1  v2 ]\<^sup>e
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
atom z2 \<sharp> [ v1  v2 ]\<^sup>e

goal (1 subgoal):
 1. atom z3 \<sharp> [ v1  v2 ]\<^sup>e
[PROOF STEP]
show \<open>atom z3 \<sharp> AE_split v1 v2\<close>
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. atom z3 \<sharp> [ v1  v2 ]\<^sup>e
[PROOF STEP]
using infer_e_splitI
[PROOF STATE]
proof (prove)
using this:
atom z3 \<sharp> c0
atom z1 \<sharp> c0
atom z2 \<sharp> c0
 \<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>''
\<Gamma>'' = \<Gamma>' @ (x, b0, c0') #\<^sub>\<Gamma> \<Gamma>
\<Theta> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma>  \<Turnstile> c0'

goal (1 subgoal):
 1. atom z3 \<sharp> [ v1  v2 ]\<^sup>e
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
atom z3 \<sharp> [ v1  v2 ]\<^sup>e

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
\<Theta> ; \<Phi> ; \<B> ; \<Gamma>' @ (x, b0, c0) #\<^sub>\<Gamma> \<Gamma> ; \<Delta>  \<turnstile> [ v1  v2 ]\<^sup>e \<Rightarrow> \<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