[STATEMENT]
lemma boxed_i_eval_ce_boxed_b:
  fixes e::ce
  assumes "i' \<lbrakk> e \<rbrakk> ~  s'" and "i \<lbrakk> e[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s" and "wfCE \<Theta> B \<Gamma> e b" and "boxed_i \<Theta> \<Gamma> b' bv i i'" and "wfI \<Theta> \<Gamma> i'"
  shows "boxed_b \<Theta> s b bv b' s'"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1.  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s'
[PROOF STEP]
using assms
[PROOF STATE]
proof (prove)
using this:
i' \<lbrakk> e \<rbrakk> ~ s'
i \<lbrakk> e[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s
  \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f e : b
 \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i'
 \<Theta> ; \<Gamma> \<turnstile> i'

goal (1 subgoal):
 1.  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s'
[PROOF STEP]
proof(nominal_induct e arbitrary: s s' b b' rule: ce.strong_induct)
[PROOF STATE]
proof (state)
goal (6 subgoals):
 1. \<And>x s s' b b'. \<lbrakk>i' \<lbrakk> [ x ]\<^sup>c\<^sup>e \<rbrakk> ~ s' ; i \<lbrakk> [ x ]\<^sup>c\<^sup>e[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f [ x ]\<^sup>c\<^sup>e : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s'
 2. \<And>x1a x2 x3 s s' b b'. \<lbrakk>\<And>s s' b b'. \<lbrakk>i' \<lbrakk> x2 \<rbrakk> ~ s' ; i \<lbrakk> x2[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f x2 : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s' ; \<And>s s' b b'. \<lbrakk>i' \<lbrakk> x3 \<rbrakk> ~ s' ; i \<lbrakk> x3[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f x3 : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s' ; i' \<lbrakk> [ x1a x2 x3 ]\<^sup>c\<^sup>e \<rbrakk> ~ s' ; i \<lbrakk> [ x1a x2 x3 ]\<^sup>c\<^sup>e[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f [ x1a x2 x3 ]\<^sup>c\<^sup>e : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s'
 3. \<And>x1a x2 s s' b b'. \<lbrakk>\<And>s s' b b'. \<lbrakk>i' \<lbrakk> x1a \<rbrakk> ~ s' ; i \<lbrakk> x1a[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f x1a : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s' ; \<And>s s' b b'. \<lbrakk>i' \<lbrakk> x2 \<rbrakk> ~ s' ; i \<lbrakk> x2[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f x2 : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s' ; i' \<lbrakk> [ x1a @@ x2 ]\<^sup>c\<^sup>e \<rbrakk> ~ s' ; i \<lbrakk> [ x1a @@ x2 ]\<^sup>c\<^sup>e[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f [ x1a @@ x2 ]\<^sup>c\<^sup>e : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s'
 4. \<And>x s s' b b'. \<lbrakk>\<And>s s' b b'. \<lbrakk>i' \<lbrakk> x \<rbrakk> ~ s' ; i \<lbrakk> x[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f x : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s' ; i' \<lbrakk> [#1x]\<^sup>c\<^sup>e \<rbrakk> ~ s' ; i \<lbrakk> [#1x]\<^sup>c\<^sup>e[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f [#1x]\<^sup>c\<^sup>e : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s'
 5. \<And>x s s' b b'. \<lbrakk>\<And>s s' b b'. \<lbrakk>i' \<lbrakk> x \<rbrakk> ~ s' ; i \<lbrakk> x[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f x : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s' ; i' \<lbrakk> [#2x]\<^sup>c\<^sup>e \<rbrakk> ~ s' ; i \<lbrakk> [#2x]\<^sup>c\<^sup>e[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f [#2x]\<^sup>c\<^sup>e : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s'
 6. \<And>x s s' b b'. \<lbrakk>\<And>s s' b b'. \<lbrakk>i' \<lbrakk> x \<rbrakk> ~ s' ; i \<lbrakk> x[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f x : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s' ; i' \<lbrakk> [| x |]\<^sup>c\<^sup>e \<rbrakk> ~ s' ; i \<lbrakk> [| x |]\<^sup>c\<^sup>e[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f [| x |]\<^sup>c\<^sup>e : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s'
[PROOF STEP]
case (CE_val x)
[PROOF STATE]
proof (state)
this:
i' \<lbrakk> [ x ]\<^sup>c\<^sup>e \<rbrakk> ~ s'
i \<lbrakk> [ x ]\<^sup>c\<^sup>e[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s
  \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f [ x ]\<^sup>c\<^sup>e : b
 \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i'
 \<Theta> ; \<Gamma> \<turnstile> i'

goal (6 subgoals):
 1. \<And>x s s' b b'. \<lbrakk>i' \<lbrakk> [ x ]\<^sup>c\<^sup>e \<rbrakk> ~ s' ; i \<lbrakk> [ x ]\<^sup>c\<^sup>e[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f [ x ]\<^sup>c\<^sup>e : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s'
 2. \<And>x1a x2 x3 s s' b b'. \<lbrakk>\<And>s s' b b'. \<lbrakk>i' \<lbrakk> x2 \<rbrakk> ~ s' ; i \<lbrakk> x2[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f x2 : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s' ; \<And>s s' b b'. \<lbrakk>i' \<lbrakk> x3 \<rbrakk> ~ s' ; i \<lbrakk> x3[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f x3 : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s' ; i' \<lbrakk> [ x1a x2 x3 ]\<^sup>c\<^sup>e \<rbrakk> ~ s' ; i \<lbrakk> [ x1a x2 x3 ]\<^sup>c\<^sup>e[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f [ x1a x2 x3 ]\<^sup>c\<^sup>e : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s'
 3. \<And>x1a x2 s s' b b'. \<lbrakk>\<And>s s' b b'. \<lbrakk>i' \<lbrakk> x1a \<rbrakk> ~ s' ; i \<lbrakk> x1a[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f x1a : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s' ; \<And>s s' b b'. \<lbrakk>i' \<lbrakk> x2 \<rbrakk> ~ s' ; i \<lbrakk> x2[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f x2 : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s' ; i' \<lbrakk> [ x1a @@ x2 ]\<^sup>c\<^sup>e \<rbrakk> ~ s' ; i \<lbrakk> [ x1a @@ x2 ]\<^sup>c\<^sup>e[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f [ x1a @@ x2 ]\<^sup>c\<^sup>e : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s'
 4. \<And>x s s' b b'. \<lbrakk>\<And>s s' b b'. \<lbrakk>i' \<lbrakk> x \<rbrakk> ~ s' ; i \<lbrakk> x[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f x : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s' ; i' \<lbrakk> [#1x]\<^sup>c\<^sup>e \<rbrakk> ~ s' ; i \<lbrakk> [#1x]\<^sup>c\<^sup>e[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f [#1x]\<^sup>c\<^sup>e : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s'
 5. \<And>x s s' b b'. \<lbrakk>\<And>s s' b b'. \<lbrakk>i' \<lbrakk> x \<rbrakk> ~ s' ; i \<lbrakk> x[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f x : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s' ; i' \<lbrakk> [#2x]\<^sup>c\<^sup>e \<rbrakk> ~ s' ; i \<lbrakk> [#2x]\<^sup>c\<^sup>e[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f [#2x]\<^sup>c\<^sup>e : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s'
 6. \<And>x s s' b b'. \<lbrakk>\<And>s s' b b'. \<lbrakk>i' \<lbrakk> x \<rbrakk> ~ s' ; i \<lbrakk> x[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f x : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s' ; i' \<lbrakk> [| x |]\<^sup>c\<^sup>e \<rbrakk> ~ s' ; i \<lbrakk> [| x |]\<^sup>c\<^sup>e[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f [| x |]\<^sup>c\<^sup>e : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s'
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
i' \<lbrakk> [ x ]\<^sup>c\<^sup>e \<rbrakk> ~ s'
i \<lbrakk> [ x ]\<^sup>c\<^sup>e[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s
  \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f [ x ]\<^sup>c\<^sup>e : b
 \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i'
 \<Theta> ; \<Gamma> \<turnstile> i'
[PROOF STEP]
show ?case
[PROOF STATE]
proof (prove)
using this:
i' \<lbrakk> [ x ]\<^sup>c\<^sup>e \<rbrakk> ~ s'
i \<lbrakk> [ x ]\<^sup>c\<^sup>e[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s
  \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f [ x ]\<^sup>c\<^sup>e : b
 \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i'
 \<Theta> ; \<Gamma> \<turnstile> i'

goal (1 subgoal):
 1.  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s'
[PROOF STEP]
using boxed_i_eval_v_boxed_b eval_e_elims wfCE_elims subst_ceb.simps
[PROOF STATE]
proof (prove)
using this:
i' \<lbrakk> [ x ]\<^sup>c\<^sup>e \<rbrakk> ~ s'
i \<lbrakk> [ x ]\<^sup>c\<^sup>e[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s
  \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f [ x ]\<^sup>c\<^sup>e : b
 \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i'
 \<Theta> ; \<Gamma> \<turnstile> i'
\<lbrakk> ?\<Theta>  ; ?\<Gamma> ; ?b' , ?bv \<turnstile> ?i \<approx> ?i'; ?i \<lbrakk> ?v[?bv::=?b']\<^sub>v\<^sub>b \<rbrakk> ~ ?s ; ?i' \<lbrakk> ?v \<rbrakk> ~ ?s' ;  ?\<Theta> ; ?B ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v : ?b ;  ?\<Theta> ; ?\<Gamma> \<turnstile> ?i'\<rbrakk> \<Longrightarrow>  ?\<Theta>  \<turnstile> ?s ~ ?b [ ?bv ::= ?b' ] \<setminus> ?s'
\<lbrakk>?i \<lbrakk> [ ?v ]\<^sup>c\<^sup>e \<rbrakk> ~ ?s ; ?i \<lbrakk> ?v \<rbrakk> ~ ?s  \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>?i \<lbrakk> [ plus ?v1.0 ?v2.0 ]\<^sup>c\<^sup>e \<rbrakk> ~ ?s ; \<And>n1 n2. \<lbrakk>?s = SNum (n1 + n2); ?i \<lbrakk> ?v1.0 \<rbrakk> ~ SNum n1 ; ?i \<lbrakk> ?v2.0 \<rbrakk> ~ SNum n2 \<rbrakk> \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>?i \<lbrakk> [ leq ?v1.0 ?v2.0 ]\<^sup>c\<^sup>e \<rbrakk> ~ ?s ; \<And>n1 n2. \<lbrakk>?s = SBool (n1 \<le> n2); ?i \<lbrakk> ?v1.0 \<rbrakk> ~ SNum n1 ; ?i \<lbrakk> ?v2.0 \<rbrakk> ~ SNum n2 \<rbrakk> \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>?i \<lbrakk> [ eq ?v1.0 ?v2.0 ]\<^sup>c\<^sup>e \<rbrakk> ~ ?s ; \<And>s1 s2. \<lbrakk>?s = SBool (s1 = s2); ?i \<lbrakk> ?v1.0 \<rbrakk> ~ s1 ; ?i \<lbrakk> ?v2.0 \<rbrakk> ~ s2 \<rbrakk> \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>?i \<lbrakk> [#1?v]\<^sup>c\<^sup>e \<rbrakk> ~ ?s ; \<And>v2. ?i \<lbrakk> ?v \<rbrakk> ~ SPair ?s v2  \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>?i \<lbrakk> [#2?v]\<^sup>c\<^sup>e \<rbrakk> ~ ?s ; \<And>v1. ?i \<lbrakk> ?v \<rbrakk> ~ SPair v1 ?s  \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>?i \<lbrakk> [ ?v1.0 @@ ?v2.0 ]\<^sup>c\<^sup>e \<rbrakk> ~ ?s ; \<And>bv1 bv2. \<lbrakk>?s = SBitvec (bv1 @ bv2); ?i \<lbrakk> ?v1.0 \<rbrakk> ~ SBitvec bv1 ; ?i \<lbrakk> ?v2.0 \<rbrakk> ~ SBitvec bv2 \<rbrakk> \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>?i \<lbrakk> [| ?v |]\<^sup>c\<^sup>e \<rbrakk> ~ ?s ; \<And>bv. \<lbrakk>?s = SNum (int (length bv)); ?i \<lbrakk> ?v \<rbrakk> ~ SBitvec bv \<rbrakk> \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [ ?v ]\<^sup>c\<^sup>e : ?b ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v : ?b  \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [ plus ?v1.0 ?v2.0 ]\<^sup>c\<^sup>e : ?b ; \<lbrakk>?b = B_int;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : B_int ;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v2.0 : B_int \<rbrakk> \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [ leq ?v1.0 ?v2.0 ]\<^sup>c\<^sup>e : ?b ; \<lbrakk>?b = B_bool;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : B_int ;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v2.0 : B_int \<rbrakk> \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [#1?v1.0]\<^sup>c\<^sup>e : ?b ; \<And>b2.   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : [ ?b , b2 ]\<^sup>b  \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [#2?v1.0]\<^sup>c\<^sup>e : ?b ; \<And>b1.   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : [ b1 , ?b ]\<^sup>b  \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [ ?v1.0 @@ ?v2.0 ]\<^sup>c\<^sup>e : ?b ; \<lbrakk>?b = B_bitvec;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : B_bitvec ;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v2.0 : B_bitvec \<rbrakk> \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [| ?v1.0 |]\<^sup>c\<^sup>e : ?b ; \<lbrakk>?b = B_int;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : B_bitvec \<rbrakk> \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [ ?opp ?v1.0 ?v2.0 ]\<^sup>c\<^sup>e : ?b ; \<lbrakk>?opp = plus; ?b = B_int;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : B_int ;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v2.0 : B_int \<rbrakk> \<Longrightarrow> ?P; \<lbrakk>?opp = leq; ?b = B_bool;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : B_int ;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v2.0 : B_int \<rbrakk> \<Longrightarrow> ?P; \<And>b. \<lbrakk>?opp = eq; ?b = B_bool;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : b ;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v2.0 : b \<rbrakk> \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [ eq ?v1.0 ?v2.0 ]\<^sup>c\<^sup>e : ?b ; \<And>b. \<lbrakk>?b = B_bool;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : b ;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v2.0 : b \<rbrakk> \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
[ ?v' ]\<^sup>c\<^sup>e[?bv::=?b]\<^sub>c\<^sub>e\<^sub>b = [ ?v'[?bv::=?b]\<^sub>v\<^sub>b ]\<^sup>c\<^sup>e
[ ?opp ?v1.0 ?v2.0 ]\<^sup>c\<^sup>e[?bv::=?b]\<^sub>c\<^sub>e\<^sub>b = [ ?opp ?v1.0[?bv::=?b]\<^sub>c\<^sub>e\<^sub>b ?v2.0[?bv::=?b]\<^sub>c\<^sub>e\<^sub>b ]\<^sup>c\<^sup>e
[#1?v']\<^sup>c\<^sup>e[?bv::=?b]\<^sub>c\<^sub>e\<^sub>b = [#1?v'[?bv::=?b]\<^sub>c\<^sub>e\<^sub>b]\<^sup>c\<^sup>e
[#2?v']\<^sup>c\<^sup>e[?bv::=?b]\<^sub>c\<^sub>e\<^sub>b = [#2?v'[?bv::=?b]\<^sub>c\<^sub>e\<^sub>b]\<^sup>c\<^sup>e
[| ?v' |]\<^sup>c\<^sup>e[?bv::=?b]\<^sub>c\<^sub>e\<^sub>b = [| ?v'[?bv::=?b]\<^sub>c\<^sub>e\<^sub>b |]\<^sup>c\<^sup>e
[ ?v1.0 @@ ?v2.0 ]\<^sup>c\<^sup>e[?bv::=?b]\<^sub>c\<^sub>e\<^sub>b = [ ?v1.0[?bv::=?b]\<^sub>c\<^sub>e\<^sub>b @@ ?v2.0[?bv::=?b]\<^sub>c\<^sub>e\<^sub>b ]\<^sup>c\<^sup>e

goal (1 subgoal):
 1.  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s'
[PROOF STEP]
by metis
[PROOF STATE]
proof (state)
this:
 \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s'

goal (5 subgoals):
 1. \<And>x1a x2 x3 s s' b b'. \<lbrakk>\<And>s s' b b'. \<lbrakk>i' \<lbrakk> x2 \<rbrakk> ~ s' ; i \<lbrakk> x2[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f x2 : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s' ; \<And>s s' b b'. \<lbrakk>i' \<lbrakk> x3 \<rbrakk> ~ s' ; i \<lbrakk> x3[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f x3 : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s' ; i' \<lbrakk> [ x1a x2 x3 ]\<^sup>c\<^sup>e \<rbrakk> ~ s' ; i \<lbrakk> [ x1a x2 x3 ]\<^sup>c\<^sup>e[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f [ x1a x2 x3 ]\<^sup>c\<^sup>e : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s'
 2. \<And>x1a x2 s s' b b'. \<lbrakk>\<And>s s' b b'. \<lbrakk>i' \<lbrakk> x1a \<rbrakk> ~ s' ; i \<lbrakk> x1a[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f x1a : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s' ; \<And>s s' b b'. \<lbrakk>i' \<lbrakk> x2 \<rbrakk> ~ s' ; i \<lbrakk> x2[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f x2 : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s' ; i' \<lbrakk> [ x1a @@ x2 ]\<^sup>c\<^sup>e \<rbrakk> ~ s' ; i \<lbrakk> [ x1a @@ x2 ]\<^sup>c\<^sup>e[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f [ x1a @@ x2 ]\<^sup>c\<^sup>e : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s'
 3. \<And>x s s' b b'. \<lbrakk>\<And>s s' b b'. \<lbrakk>i' \<lbrakk> x \<rbrakk> ~ s' ; i \<lbrakk> x[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f x : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s' ; i' \<lbrakk> [#1x]\<^sup>c\<^sup>e \<rbrakk> ~ s' ; i \<lbrakk> [#1x]\<^sup>c\<^sup>e[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f [#1x]\<^sup>c\<^sup>e : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s'
 4. \<And>x s s' b b'. \<lbrakk>\<And>s s' b b'. \<lbrakk>i' \<lbrakk> x \<rbrakk> ~ s' ; i \<lbrakk> x[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f x : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s' ; i' \<lbrakk> [#2x]\<^sup>c\<^sup>e \<rbrakk> ~ s' ; i \<lbrakk> [#2x]\<^sup>c\<^sup>e[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f [#2x]\<^sup>c\<^sup>e : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s'
 5. \<And>x s s' b b'. \<lbrakk>\<And>s s' b b'. \<lbrakk>i' \<lbrakk> x \<rbrakk> ~ s' ; i \<lbrakk> x[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f x : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s' ; i' \<lbrakk> [| x |]\<^sup>c\<^sup>e \<rbrakk> ~ s' ; i \<lbrakk> [| x |]\<^sup>c\<^sup>e[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f [| x |]\<^sup>c\<^sup>e : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s'
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (5 subgoals):
 1. \<And>x1a x2 x3 s s' b b'. \<lbrakk>\<And>s s' b b'. \<lbrakk>i' \<lbrakk> x2 \<rbrakk> ~ s' ; i \<lbrakk> x2[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f x2 : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s' ; \<And>s s' b b'. \<lbrakk>i' \<lbrakk> x3 \<rbrakk> ~ s' ; i \<lbrakk> x3[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f x3 : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s' ; i' \<lbrakk> [ x1a x2 x3 ]\<^sup>c\<^sup>e \<rbrakk> ~ s' ; i \<lbrakk> [ x1a x2 x3 ]\<^sup>c\<^sup>e[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f [ x1a x2 x3 ]\<^sup>c\<^sup>e : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s'
 2. \<And>x1a x2 s s' b b'. \<lbrakk>\<And>s s' b b'. \<lbrakk>i' \<lbrakk> x1a \<rbrakk> ~ s' ; i \<lbrakk> x1a[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f x1a : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s' ; \<And>s s' b b'. \<lbrakk>i' \<lbrakk> x2 \<rbrakk> ~ s' ; i \<lbrakk> x2[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f x2 : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s' ; i' \<lbrakk> [ x1a @@ x2 ]\<^sup>c\<^sup>e \<rbrakk> ~ s' ; i \<lbrakk> [ x1a @@ x2 ]\<^sup>c\<^sup>e[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f [ x1a @@ x2 ]\<^sup>c\<^sup>e : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s'
 3. \<And>x s s' b b'. \<lbrakk>\<And>s s' b b'. \<lbrakk>i' \<lbrakk> x \<rbrakk> ~ s' ; i \<lbrakk> x[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f x : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s' ; i' \<lbrakk> [#1x]\<^sup>c\<^sup>e \<rbrakk> ~ s' ; i \<lbrakk> [#1x]\<^sup>c\<^sup>e[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f [#1x]\<^sup>c\<^sup>e : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s'
 4. \<And>x s s' b b'. \<lbrakk>\<And>s s' b b'. \<lbrakk>i' \<lbrakk> x \<rbrakk> ~ s' ; i \<lbrakk> x[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f x : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s' ; i' \<lbrakk> [#2x]\<^sup>c\<^sup>e \<rbrakk> ~ s' ; i \<lbrakk> [#2x]\<^sup>c\<^sup>e[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f [#2x]\<^sup>c\<^sup>e : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s'
 5. \<And>x s s' b b'. \<lbrakk>\<And>s s' b b'. \<lbrakk>i' \<lbrakk> x \<rbrakk> ~ s' ; i \<lbrakk> x[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f x : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s' ; i' \<lbrakk> [| x |]\<^sup>c\<^sup>e \<rbrakk> ~ s' ; i \<lbrakk> [| x |]\<^sup>c\<^sup>e[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f [| x |]\<^sup>c\<^sup>e : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s'
[PROOF STEP]
case (CE_op opp v1 v2)
[PROOF STATE]
proof (state)
this:
\<lbrakk>i' \<lbrakk> v1 \<rbrakk> ~ ?s' ; i \<lbrakk> v1[bv::=?b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ ?s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f v1 : ?b ;  \<Theta>  ; \<Gamma> ; ?b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> ?s ~ ?b [ bv ::= ?b' ] \<setminus> ?s'
\<lbrakk>i' \<lbrakk> v2 \<rbrakk> ~ ?s' ; i \<lbrakk> v2[bv::=?b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ ?s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f v2 : ?b ;  \<Theta>  ; \<Gamma> ; ?b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> ?s ~ ?b [ bv ::= ?b' ] \<setminus> ?s'
i' \<lbrakk> [ opp v1 v2 ]\<^sup>c\<^sup>e \<rbrakk> ~ s'
i \<lbrakk> [ opp v1 v2 ]\<^sup>c\<^sup>e[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s
  \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f [ opp v1 v2 ]\<^sup>c\<^sup>e : b
 \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i'
 \<Theta> ; \<Gamma> \<turnstile> i'

goal (5 subgoals):
 1. \<And>x1a x2 x3 s s' b b'. \<lbrakk>\<And>s s' b b'. \<lbrakk>i' \<lbrakk> x2 \<rbrakk> ~ s' ; i \<lbrakk> x2[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f x2 : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s' ; \<And>s s' b b'. \<lbrakk>i' \<lbrakk> x3 \<rbrakk> ~ s' ; i \<lbrakk> x3[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f x3 : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s' ; i' \<lbrakk> [ x1a x2 x3 ]\<^sup>c\<^sup>e \<rbrakk> ~ s' ; i \<lbrakk> [ x1a x2 x3 ]\<^sup>c\<^sup>e[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f [ x1a x2 x3 ]\<^sup>c\<^sup>e : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s'
 2. \<And>x1a x2 s s' b b'. \<lbrakk>\<And>s s' b b'. \<lbrakk>i' \<lbrakk> x1a \<rbrakk> ~ s' ; i \<lbrakk> x1a[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f x1a : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s' ; \<And>s s' b b'. \<lbrakk>i' \<lbrakk> x2 \<rbrakk> ~ s' ; i \<lbrakk> x2[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f x2 : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s' ; i' \<lbrakk> [ x1a @@ x2 ]\<^sup>c\<^sup>e \<rbrakk> ~ s' ; i \<lbrakk> [ x1a @@ x2 ]\<^sup>c\<^sup>e[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f [ x1a @@ x2 ]\<^sup>c\<^sup>e : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s'
 3. \<And>x s s' b b'. \<lbrakk>\<And>s s' b b'. \<lbrakk>i' \<lbrakk> x \<rbrakk> ~ s' ; i \<lbrakk> x[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f x : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s' ; i' \<lbrakk> [#1x]\<^sup>c\<^sup>e \<rbrakk> ~ s' ; i \<lbrakk> [#1x]\<^sup>c\<^sup>e[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f [#1x]\<^sup>c\<^sup>e : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s'
 4. \<And>x s s' b b'. \<lbrakk>\<And>s s' b b'. \<lbrakk>i' \<lbrakk> x \<rbrakk> ~ s' ; i \<lbrakk> x[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f x : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s' ; i' \<lbrakk> [#2x]\<^sup>c\<^sup>e \<rbrakk> ~ s' ; i \<lbrakk> [#2x]\<^sup>c\<^sup>e[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f [#2x]\<^sup>c\<^sup>e : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s'
 5. \<And>x s s' b b'. \<lbrakk>\<And>s s' b b'. \<lbrakk>i' \<lbrakk> x \<rbrakk> ~ s' ; i \<lbrakk> x[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f x : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s' ; i' \<lbrakk> [| x |]\<^sup>c\<^sup>e \<rbrakk> ~ s' ; i \<lbrakk> [| x |]\<^sup>c\<^sup>e[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f [| x |]\<^sup>c\<^sup>e : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s'
[PROOF STEP]
show ?case
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1.  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s'
[PROOF STEP]
proof(rule opp.exhaust)
[PROOF STATE]
proof (state)
goal (3 subgoals):
 1. ?y = plus \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s'
 2. ?y = leq \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s'
 3. ?y = eq \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s'
[PROOF STEP]
assume \<open>opp = Plus\<close>
[PROOF STATE]
proof (state)
this:
opp = plus

goal (3 subgoals):
 1. ?y = plus \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s'
 2. ?y = leq \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s'
 3. ?y = eq \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s'
[PROOF STEP]
have 1:"wfCE \<Theta> B \<Gamma> v1 (B_int)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1.   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f v1 : B_int
[PROOF STEP]
using wfCE_elims CE_op  \<open>opp = Plus\<close>
[PROOF STATE]
proof (prove)
using this:
\<lbrakk>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [ ?v ]\<^sup>c\<^sup>e : ?b ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v : ?b  \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [ plus ?v1.0 ?v2.0 ]\<^sup>c\<^sup>e : ?b ; \<lbrakk>?b = B_int;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : B_int ;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v2.0 : B_int \<rbrakk> \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [ leq ?v1.0 ?v2.0 ]\<^sup>c\<^sup>e : ?b ; \<lbrakk>?b = B_bool;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : B_int ;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v2.0 : B_int \<rbrakk> \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [#1?v1.0]\<^sup>c\<^sup>e : ?b ; \<And>b2.   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : [ ?b , b2 ]\<^sup>b  \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [#2?v1.0]\<^sup>c\<^sup>e : ?b ; \<And>b1.   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : [ b1 , ?b ]\<^sup>b  \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [ ?v1.0 @@ ?v2.0 ]\<^sup>c\<^sup>e : ?b ; \<lbrakk>?b = B_bitvec;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : B_bitvec ;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v2.0 : B_bitvec \<rbrakk> \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [| ?v1.0 |]\<^sup>c\<^sup>e : ?b ; \<lbrakk>?b = B_int;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : B_bitvec \<rbrakk> \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [ ?opp ?v1.0 ?v2.0 ]\<^sup>c\<^sup>e : ?b ; \<lbrakk>?opp = plus; ?b = B_int;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : B_int ;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v2.0 : B_int \<rbrakk> \<Longrightarrow> ?P; \<lbrakk>?opp = leq; ?b = B_bool;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : B_int ;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v2.0 : B_int \<rbrakk> \<Longrightarrow> ?P; \<And>b. \<lbrakk>?opp = eq; ?b = B_bool;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : b ;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v2.0 : b \<rbrakk> \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [ eq ?v1.0 ?v2.0 ]\<^sup>c\<^sup>e : ?b ; \<And>b. \<lbrakk>?b = B_bool;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : b ;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v2.0 : b \<rbrakk> \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>i' \<lbrakk> v1 \<rbrakk> ~ ?s' ; i \<lbrakk> v1[bv::=?b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ ?s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f v1 : ?b ;  \<Theta>  ; \<Gamma> ; ?b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> ?s ~ ?b [ bv ::= ?b' ] \<setminus> ?s'
\<lbrakk>i' \<lbrakk> v2 \<rbrakk> ~ ?s' ; i \<lbrakk> v2[bv::=?b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ ?s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f v2 : ?b ;  \<Theta>  ; \<Gamma> ; ?b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> ?s ~ ?b [ bv ::= ?b' ] \<setminus> ?s'
i' \<lbrakk> [ opp v1 v2 ]\<^sup>c\<^sup>e \<rbrakk> ~ s'
i \<lbrakk> [ opp v1 v2 ]\<^sup>c\<^sup>e[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s
  \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f [ opp v1 v2 ]\<^sup>c\<^sup>e : b
 \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i'
 \<Theta> ; \<Gamma> \<turnstile> i'
opp = plus

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

goal (3 subgoals):
 1. ?y = plus \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s'
 2. ?y = leq \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s'
 3. ?y = eq \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s'
[PROOF STEP]
have 2:"wfCE \<Theta> B \<Gamma> v2 (B_int)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1.   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f v2 : B_int
[PROOF STEP]
using wfCE_elims CE_op  \<open>opp = Plus\<close>
[PROOF STATE]
proof (prove)
using this:
\<lbrakk>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [ ?v ]\<^sup>c\<^sup>e : ?b ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v : ?b  \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [ plus ?v1.0 ?v2.0 ]\<^sup>c\<^sup>e : ?b ; \<lbrakk>?b = B_int;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : B_int ;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v2.0 : B_int \<rbrakk> \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [ leq ?v1.0 ?v2.0 ]\<^sup>c\<^sup>e : ?b ; \<lbrakk>?b = B_bool;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : B_int ;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v2.0 : B_int \<rbrakk> \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [#1?v1.0]\<^sup>c\<^sup>e : ?b ; \<And>b2.   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : [ ?b , b2 ]\<^sup>b  \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [#2?v1.0]\<^sup>c\<^sup>e : ?b ; \<And>b1.   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : [ b1 , ?b ]\<^sup>b  \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [ ?v1.0 @@ ?v2.0 ]\<^sup>c\<^sup>e : ?b ; \<lbrakk>?b = B_bitvec;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : B_bitvec ;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v2.0 : B_bitvec \<rbrakk> \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [| ?v1.0 |]\<^sup>c\<^sup>e : ?b ; \<lbrakk>?b = B_int;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : B_bitvec \<rbrakk> \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [ ?opp ?v1.0 ?v2.0 ]\<^sup>c\<^sup>e : ?b ; \<lbrakk>?opp = plus; ?b = B_int;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : B_int ;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v2.0 : B_int \<rbrakk> \<Longrightarrow> ?P; \<lbrakk>?opp = leq; ?b = B_bool;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : B_int ;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v2.0 : B_int \<rbrakk> \<Longrightarrow> ?P; \<And>b. \<lbrakk>?opp = eq; ?b = B_bool;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : b ;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v2.0 : b \<rbrakk> \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [ eq ?v1.0 ?v2.0 ]\<^sup>c\<^sup>e : ?b ; \<And>b. \<lbrakk>?b = B_bool;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : b ;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v2.0 : b \<rbrakk> \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>i' \<lbrakk> v1 \<rbrakk> ~ ?s' ; i \<lbrakk> v1[bv::=?b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ ?s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f v1 : ?b ;  \<Theta>  ; \<Gamma> ; ?b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> ?s ~ ?b [ bv ::= ?b' ] \<setminus> ?s'
\<lbrakk>i' \<lbrakk> v2 \<rbrakk> ~ ?s' ; i \<lbrakk> v2[bv::=?b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ ?s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f v2 : ?b ;  \<Theta>  ; \<Gamma> ; ?b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> ?s ~ ?b [ bv ::= ?b' ] \<setminus> ?s'
i' \<lbrakk> [ opp v1 v2 ]\<^sup>c\<^sup>e \<rbrakk> ~ s'
i \<lbrakk> [ opp v1 v2 ]\<^sup>c\<^sup>e[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s
  \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f [ opp v1 v2 ]\<^sup>c\<^sup>e : b
 \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i'
 \<Theta> ; \<Gamma> \<turnstile> i'
opp = plus

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

goal (3 subgoals):
 1. ?y = plus \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s'
 2. ?y = leq \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s'
 3. ?y = eq \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s'
[PROOF STEP]
have *:"b = B_int"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. b = B_int
[PROOF STEP]
using CE_op wfCE_elims
[PROOF STATE]
proof (prove)
using this:
\<lbrakk>i' \<lbrakk> v1 \<rbrakk> ~ ?s' ; i \<lbrakk> v1[bv::=?b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ ?s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f v1 : ?b ;  \<Theta>  ; \<Gamma> ; ?b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> ?s ~ ?b [ bv ::= ?b' ] \<setminus> ?s'
\<lbrakk>i' \<lbrakk> v2 \<rbrakk> ~ ?s' ; i \<lbrakk> v2[bv::=?b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ ?s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f v2 : ?b ;  \<Theta>  ; \<Gamma> ; ?b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> ?s ~ ?b [ bv ::= ?b' ] \<setminus> ?s'
i' \<lbrakk> [ opp v1 v2 ]\<^sup>c\<^sup>e \<rbrakk> ~ s'
i \<lbrakk> [ opp v1 v2 ]\<^sup>c\<^sup>e[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s
  \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f [ opp v1 v2 ]\<^sup>c\<^sup>e : b
 \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i'
 \<Theta> ; \<Gamma> \<turnstile> i'
\<lbrakk>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [ ?v ]\<^sup>c\<^sup>e : ?b ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v : ?b  \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [ plus ?v1.0 ?v2.0 ]\<^sup>c\<^sup>e : ?b ; \<lbrakk>?b = B_int;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : B_int ;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v2.0 : B_int \<rbrakk> \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [ leq ?v1.0 ?v2.0 ]\<^sup>c\<^sup>e : ?b ; \<lbrakk>?b = B_bool;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : B_int ;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v2.0 : B_int \<rbrakk> \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [#1?v1.0]\<^sup>c\<^sup>e : ?b ; \<And>b2.   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : [ ?b , b2 ]\<^sup>b  \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [#2?v1.0]\<^sup>c\<^sup>e : ?b ; \<And>b1.   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : [ b1 , ?b ]\<^sup>b  \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [ ?v1.0 @@ ?v2.0 ]\<^sup>c\<^sup>e : ?b ; \<lbrakk>?b = B_bitvec;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : B_bitvec ;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v2.0 : B_bitvec \<rbrakk> \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [| ?v1.0 |]\<^sup>c\<^sup>e : ?b ; \<lbrakk>?b = B_int;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : B_bitvec \<rbrakk> \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [ ?opp ?v1.0 ?v2.0 ]\<^sup>c\<^sup>e : ?b ; \<lbrakk>?opp = plus; ?b = B_int;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : B_int ;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v2.0 : B_int \<rbrakk> \<Longrightarrow> ?P; \<lbrakk>?opp = leq; ?b = B_bool;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : B_int ;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v2.0 : B_int \<rbrakk> \<Longrightarrow> ?P; \<And>b. \<lbrakk>?opp = eq; ?b = B_bool;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : b ;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v2.0 : b \<rbrakk> \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [ eq ?v1.0 ?v2.0 ]\<^sup>c\<^sup>e : ?b ; \<And>b. \<lbrakk>?b = B_bool;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : b ;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v2.0 : b \<rbrakk> \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P

goal (1 subgoal):
 1. b = B_int
[PROOF STEP]
by (metis \<open>opp = plus\<close>)
[PROOF STATE]
proof (state)
this:
b = B_int

goal (3 subgoals):
 1. ?y = plus \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s'
 2. ?y = leq \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s'
 3. ?y = eq \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s'
[PROOF STEP]
obtain n1 and n2 where n:"s = SNum (n1 + n2) \<and> i \<lbrakk> v1[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ SNum n1 \<and> i \<lbrakk> v2[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ SNum n2"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (\<And>n1 n2. s = SNum (n1 + n2) \<and> i \<lbrakk> v1[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ SNum n1  \<and> i \<lbrakk> v2[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ SNum n2  \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
using eval_e_elims CE_op subst_ceb.simps \<open>opp = plus\<close>
[PROOF STATE]
proof (prove)
using this:
\<lbrakk>?i \<lbrakk> [ ?v ]\<^sup>c\<^sup>e \<rbrakk> ~ ?s ; ?i \<lbrakk> ?v \<rbrakk> ~ ?s  \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>?i \<lbrakk> [ plus ?v1.0 ?v2.0 ]\<^sup>c\<^sup>e \<rbrakk> ~ ?s ; \<And>n1 n2. \<lbrakk>?s = SNum (n1 + n2); ?i \<lbrakk> ?v1.0 \<rbrakk> ~ SNum n1 ; ?i \<lbrakk> ?v2.0 \<rbrakk> ~ SNum n2 \<rbrakk> \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>?i \<lbrakk> [ leq ?v1.0 ?v2.0 ]\<^sup>c\<^sup>e \<rbrakk> ~ ?s ; \<And>n1 n2. \<lbrakk>?s = SBool (n1 \<le> n2); ?i \<lbrakk> ?v1.0 \<rbrakk> ~ SNum n1 ; ?i \<lbrakk> ?v2.0 \<rbrakk> ~ SNum n2 \<rbrakk> \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>?i \<lbrakk> [ eq ?v1.0 ?v2.0 ]\<^sup>c\<^sup>e \<rbrakk> ~ ?s ; \<And>s1 s2. \<lbrakk>?s = SBool (s1 = s2); ?i \<lbrakk> ?v1.0 \<rbrakk> ~ s1 ; ?i \<lbrakk> ?v2.0 \<rbrakk> ~ s2 \<rbrakk> \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>?i \<lbrakk> [#1?v]\<^sup>c\<^sup>e \<rbrakk> ~ ?s ; \<And>v2. ?i \<lbrakk> ?v \<rbrakk> ~ SPair ?s v2  \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>?i \<lbrakk> [#2?v]\<^sup>c\<^sup>e \<rbrakk> ~ ?s ; \<And>v1. ?i \<lbrakk> ?v \<rbrakk> ~ SPair v1 ?s  \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>?i \<lbrakk> [ ?v1.0 @@ ?v2.0 ]\<^sup>c\<^sup>e \<rbrakk> ~ ?s ; \<And>bv1 bv2. \<lbrakk>?s = SBitvec (bv1 @ bv2); ?i \<lbrakk> ?v1.0 \<rbrakk> ~ SBitvec bv1 ; ?i \<lbrakk> ?v2.0 \<rbrakk> ~ SBitvec bv2 \<rbrakk> \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>?i \<lbrakk> [| ?v |]\<^sup>c\<^sup>e \<rbrakk> ~ ?s ; \<And>bv. \<lbrakk>?s = SNum (int (length bv)); ?i \<lbrakk> ?v \<rbrakk> ~ SBitvec bv \<rbrakk> \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>i' \<lbrakk> v1 \<rbrakk> ~ ?s' ; i \<lbrakk> v1[bv::=?b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ ?s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f v1 : ?b ;  \<Theta>  ; \<Gamma> ; ?b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> ?s ~ ?b [ bv ::= ?b' ] \<setminus> ?s'
\<lbrakk>i' \<lbrakk> v2 \<rbrakk> ~ ?s' ; i \<lbrakk> v2[bv::=?b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ ?s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f v2 : ?b ;  \<Theta>  ; \<Gamma> ; ?b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> ?s ~ ?b [ bv ::= ?b' ] \<setminus> ?s'
i' \<lbrakk> [ opp v1 v2 ]\<^sup>c\<^sup>e \<rbrakk> ~ s'
i \<lbrakk> [ opp v1 v2 ]\<^sup>c\<^sup>e[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s
  \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f [ opp v1 v2 ]\<^sup>c\<^sup>e : b
 \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i'
 \<Theta> ; \<Gamma> \<turnstile> i'
[ ?v' ]\<^sup>c\<^sup>e[?bv::=?b]\<^sub>c\<^sub>e\<^sub>b = [ ?v'[?bv::=?b]\<^sub>v\<^sub>b ]\<^sup>c\<^sup>e
[ ?opp ?v1.0 ?v2.0 ]\<^sup>c\<^sup>e[?bv::=?b]\<^sub>c\<^sub>e\<^sub>b = [ ?opp ?v1.0[?bv::=?b]\<^sub>c\<^sub>e\<^sub>b ?v2.0[?bv::=?b]\<^sub>c\<^sub>e\<^sub>b ]\<^sup>c\<^sup>e
[#1?v']\<^sup>c\<^sup>e[?bv::=?b]\<^sub>c\<^sub>e\<^sub>b = [#1?v'[?bv::=?b]\<^sub>c\<^sub>e\<^sub>b]\<^sup>c\<^sup>e
[#2?v']\<^sup>c\<^sup>e[?bv::=?b]\<^sub>c\<^sub>e\<^sub>b = [#2?v'[?bv::=?b]\<^sub>c\<^sub>e\<^sub>b]\<^sup>c\<^sup>e
[| ?v' |]\<^sup>c\<^sup>e[?bv::=?b]\<^sub>c\<^sub>e\<^sub>b = [| ?v'[?bv::=?b]\<^sub>c\<^sub>e\<^sub>b |]\<^sup>c\<^sup>e
[ ?v1.0 @@ ?v2.0 ]\<^sup>c\<^sup>e[?bv::=?b]\<^sub>c\<^sub>e\<^sub>b = [ ?v1.0[?bv::=?b]\<^sub>c\<^sub>e\<^sub>b @@ ?v2.0[?bv::=?b]\<^sub>c\<^sub>e\<^sub>b ]\<^sup>c\<^sup>e
opp = plus

goal (1 subgoal):
 1. (\<And>n1 n2. s = SNum (n1 + n2) \<and> i \<lbrakk> v1[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ SNum n1  \<and> i \<lbrakk> v2[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ SNum n2  \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by metis
[PROOF STATE]
proof (state)
this:
s = SNum (n1 + n2) \<and> i \<lbrakk> v1[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ SNum n1  \<and> i \<lbrakk> v2[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ SNum n2

goal (3 subgoals):
 1. ?y = plus \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s'
 2. ?y = leq \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s'
 3. ?y = eq \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s'
[PROOF STEP]
obtain n1' and n2' where n':"s' = SNum (n1' + n2') \<and> i' \<lbrakk> v1 \<rbrakk> ~ SNum n1' \<and> i' \<lbrakk> v2 \<rbrakk> ~ SNum n2'"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (\<And>n1' n2'. s' = SNum (n1' + n2') \<and> i' \<lbrakk> v1 \<rbrakk> ~ SNum n1'  \<and> i' \<lbrakk> v2 \<rbrakk> ~ SNum n2'  \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
using eval_e_elims Plus CE_op \<open>opp = plus\<close>
[PROOF STATE]
proof (prove)
using this:
\<lbrakk>?i \<lbrakk> [ ?v ]\<^sup>c\<^sup>e \<rbrakk> ~ ?s ; ?i \<lbrakk> ?v \<rbrakk> ~ ?s  \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>?i \<lbrakk> [ plus ?v1.0 ?v2.0 ]\<^sup>c\<^sup>e \<rbrakk> ~ ?s ; \<And>n1 n2. \<lbrakk>?s = SNum (n1 + n2); ?i \<lbrakk> ?v1.0 \<rbrakk> ~ SNum n1 ; ?i \<lbrakk> ?v2.0 \<rbrakk> ~ SNum n2 \<rbrakk> \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>?i \<lbrakk> [ leq ?v1.0 ?v2.0 ]\<^sup>c\<^sup>e \<rbrakk> ~ ?s ; \<And>n1 n2. \<lbrakk>?s = SBool (n1 \<le> n2); ?i \<lbrakk> ?v1.0 \<rbrakk> ~ SNum n1 ; ?i \<lbrakk> ?v2.0 \<rbrakk> ~ SNum n2 \<rbrakk> \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>?i \<lbrakk> [ eq ?v1.0 ?v2.0 ]\<^sup>c\<^sup>e \<rbrakk> ~ ?s ; \<And>s1 s2. \<lbrakk>?s = SBool (s1 = s2); ?i \<lbrakk> ?v1.0 \<rbrakk> ~ s1 ; ?i \<lbrakk> ?v2.0 \<rbrakk> ~ s2 \<rbrakk> \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>?i \<lbrakk> [#1?v]\<^sup>c\<^sup>e \<rbrakk> ~ ?s ; \<And>v2. ?i \<lbrakk> ?v \<rbrakk> ~ SPair ?s v2  \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>?i \<lbrakk> [#2?v]\<^sup>c\<^sup>e \<rbrakk> ~ ?s ; \<And>v1. ?i \<lbrakk> ?v \<rbrakk> ~ SPair v1 ?s  \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>?i \<lbrakk> [ ?v1.0 @@ ?v2.0 ]\<^sup>c\<^sup>e \<rbrakk> ~ ?s ; \<And>bv1 bv2. \<lbrakk>?s = SBitvec (bv1 @ bv2); ?i \<lbrakk> ?v1.0 \<rbrakk> ~ SBitvec bv1 ; ?i \<lbrakk> ?v2.0 \<rbrakk> ~ SBitvec bv2 \<rbrakk> \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>?i \<lbrakk> [| ?v |]\<^sup>c\<^sup>e \<rbrakk> ~ ?s ; \<And>bv. \<lbrakk>?s = SNum (int (length bv)); ?i \<lbrakk> ?v \<rbrakk> ~ SBitvec bv \<rbrakk> \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>?R ?a ?b; rel_mset' ?R ?M ?N\<rbrakk> \<Longrightarrow> rel_mset' ?R (add_mset ?a ?M) (add_mset ?b ?N)
\<lbrakk>i' \<lbrakk> v1 \<rbrakk> ~ ?s' ; i \<lbrakk> v1[bv::=?b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ ?s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f v1 : ?b ;  \<Theta>  ; \<Gamma> ; ?b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> ?s ~ ?b [ bv ::= ?b' ] \<setminus> ?s'
\<lbrakk>i' \<lbrakk> v2 \<rbrakk> ~ ?s' ; i \<lbrakk> v2[bv::=?b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ ?s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f v2 : ?b ;  \<Theta>  ; \<Gamma> ; ?b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> ?s ~ ?b [ bv ::= ?b' ] \<setminus> ?s'
i' \<lbrakk> [ opp v1 v2 ]\<^sup>c\<^sup>e \<rbrakk> ~ s'
i \<lbrakk> [ opp v1 v2 ]\<^sup>c\<^sup>e[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s
  \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f [ opp v1 v2 ]\<^sup>c\<^sup>e : b
 \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i'
 \<Theta> ; \<Gamma> \<turnstile> i'
opp = plus

goal (1 subgoal):
 1. (\<And>n1' n2'. s' = SNum (n1' + n2') \<and> i' \<lbrakk> v1 \<rbrakk> ~ SNum n1'  \<and> i' \<lbrakk> v2 \<rbrakk> ~ SNum n2'  \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by metis
[PROOF STATE]
proof (state)
this:
s' = SNum (n1' + n2') \<and> i' \<lbrakk> v1 \<rbrakk> ~ SNum n1'  \<and> i' \<lbrakk> v2 \<rbrakk> ~ SNum n2'

goal (3 subgoals):
 1. ?y = plus \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s'
 2. ?y = leq \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s'
 3. ?y = eq \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s'
[PROOF STEP]
have "boxed_b \<Theta> (SNum n1) B_int bv b' (SNum n1')"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1.  \<Theta>  \<turnstile> SNum n1 ~ B_int [ bv ::= b' ] \<setminus> SNum n1'
[PROOF STEP]
using boxed_i_eval_v_boxed_b 1 2 n n' CE_op \<open>opp = plus\<close>
[PROOF STATE]
proof (prove)
using this:
\<lbrakk> ?\<Theta>  ; ?\<Gamma> ; ?b' , ?bv \<turnstile> ?i \<approx> ?i'; ?i \<lbrakk> ?v[?bv::=?b']\<^sub>v\<^sub>b \<rbrakk> ~ ?s ; ?i' \<lbrakk> ?v \<rbrakk> ~ ?s' ;  ?\<Theta> ; ?B ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v : ?b ;  ?\<Theta> ; ?\<Gamma> \<turnstile> ?i'\<rbrakk> \<Longrightarrow>  ?\<Theta>  \<turnstile> ?s ~ ?b [ ?bv ::= ?b' ] \<setminus> ?s'
  \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f v1 : B_int
  \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f v2 : B_int
s = SNum (n1 + n2) \<and> i \<lbrakk> v1[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ SNum n1  \<and> i \<lbrakk> v2[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ SNum n2
s' = SNum (n1' + n2') \<and> i' \<lbrakk> v1 \<rbrakk> ~ SNum n1'  \<and> i' \<lbrakk> v2 \<rbrakk> ~ SNum n2'
\<lbrakk>i' \<lbrakk> v1 \<rbrakk> ~ ?s' ; i \<lbrakk> v1[bv::=?b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ ?s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f v1 : ?b ;  \<Theta>  ; \<Gamma> ; ?b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> ?s ~ ?b [ bv ::= ?b' ] \<setminus> ?s'
\<lbrakk>i' \<lbrakk> v2 \<rbrakk> ~ ?s' ; i \<lbrakk> v2[bv::=?b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ ?s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f v2 : ?b ;  \<Theta>  ; \<Gamma> ; ?b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> ?s ~ ?b [ bv ::= ?b' ] \<setminus> ?s'
i' \<lbrakk> [ opp v1 v2 ]\<^sup>c\<^sup>e \<rbrakk> ~ s'
i \<lbrakk> [ opp v1 v2 ]\<^sup>c\<^sup>e[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s
  \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f [ opp v1 v2 ]\<^sup>c\<^sup>e : b
 \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i'
 \<Theta> ; \<Gamma> \<turnstile> i'
opp = plus

goal (1 subgoal):
 1.  \<Theta>  \<turnstile> SNum n1 ~ B_int [ bv ::= b' ] \<setminus> SNum n1'
[PROOF STEP]
by metis
[PROOF STATE]
proof (state)
this:
 \<Theta>  \<turnstile> SNum n1 ~ B_int [ bv ::= b' ] \<setminus> SNum n1'

goal (3 subgoals):
 1. ?y = plus \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s'
 2. ?y = leq \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s'
 3. ?y = eq \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s'
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
 \<Theta>  \<turnstile> SNum n1 ~ B_int [ bv ::= b' ] \<setminus> SNum n1'

goal (3 subgoals):
 1. ?y = plus \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s'
 2. ?y = leq \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s'
 3. ?y = eq \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s'
[PROOF STEP]
have "boxed_b \<Theta> (SNum n2) B_int bv b' (SNum n2')"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1.  \<Theta>  \<turnstile> SNum n2 ~ B_int [ bv ::= b' ] \<setminus> SNum n2'
[PROOF STEP]
using boxed_i_eval_v_boxed_b 1 2 n n' CE_op
[PROOF STATE]
proof (prove)
using this:
\<lbrakk> ?\<Theta>  ; ?\<Gamma> ; ?b' , ?bv \<turnstile> ?i \<approx> ?i'; ?i \<lbrakk> ?v[?bv::=?b']\<^sub>v\<^sub>b \<rbrakk> ~ ?s ; ?i' \<lbrakk> ?v \<rbrakk> ~ ?s' ;  ?\<Theta> ; ?B ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v : ?b ;  ?\<Theta> ; ?\<Gamma> \<turnstile> ?i'\<rbrakk> \<Longrightarrow>  ?\<Theta>  \<turnstile> ?s ~ ?b [ ?bv ::= ?b' ] \<setminus> ?s'
  \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f v1 : B_int
  \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f v2 : B_int
s = SNum (n1 + n2) \<and> i \<lbrakk> v1[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ SNum n1  \<and> i \<lbrakk> v2[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ SNum n2
s' = SNum (n1' + n2') \<and> i' \<lbrakk> v1 \<rbrakk> ~ SNum n1'  \<and> i' \<lbrakk> v2 \<rbrakk> ~ SNum n2'
\<lbrakk>i' \<lbrakk> v1 \<rbrakk> ~ ?s' ; i \<lbrakk> v1[bv::=?b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ ?s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f v1 : ?b ;  \<Theta>  ; \<Gamma> ; ?b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> ?s ~ ?b [ bv ::= ?b' ] \<setminus> ?s'
\<lbrakk>i' \<lbrakk> v2 \<rbrakk> ~ ?s' ; i \<lbrakk> v2[bv::=?b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ ?s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f v2 : ?b ;  \<Theta>  ; \<Gamma> ; ?b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> ?s ~ ?b [ bv ::= ?b' ] \<setminus> ?s'
i' \<lbrakk> [ opp v1 v2 ]\<^sup>c\<^sup>e \<rbrakk> ~ s'
i \<lbrakk> [ opp v1 v2 ]\<^sup>c\<^sup>e[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s
  \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f [ opp v1 v2 ]\<^sup>c\<^sup>e : b
 \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i'
 \<Theta> ; \<Gamma> \<turnstile> i'

goal (1 subgoal):
 1.  \<Theta>  \<turnstile> SNum n2 ~ B_int [ bv ::= b' ] \<setminus> SNum n2'
[PROOF STEP]
by metis
[PROOF STATE]
proof (state)
this:
 \<Theta>  \<turnstile> SNum n2 ~ B_int [ bv ::= b' ] \<setminus> SNum n2'

goal (3 subgoals):
 1. ?y = plus \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s'
 2. ?y = leq \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s'
 3. ?y = eq \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s'
[PROOF STEP]
ultimately
[PROOF STATE]
proof (chain)
picking this:
 \<Theta>  \<turnstile> SNum n1 ~ B_int [ bv ::= b' ] \<setminus> SNum n1'
 \<Theta>  \<turnstile> SNum n2 ~ B_int [ bv ::= b' ] \<setminus> SNum n2'
[PROOF STEP]
have "s=s'"
[PROOF STATE]
proof (prove)
using this:
 \<Theta>  \<turnstile> SNum n1 ~ B_int [ bv ::= b' ] \<setminus> SNum n1'
 \<Theta>  \<turnstile> SNum n2 ~ B_int [ bv ::= b' ] \<setminus> SNum n2'

goal (1 subgoal):
 1. s = s'
[PROOF STEP]
using n' n boxed_b_elims(2)
[PROOF STATE]
proof (prove)
using this:
 \<Theta>  \<turnstile> SNum n1 ~ B_int [ bv ::= b' ] \<setminus> SNum n1'
 \<Theta>  \<turnstile> SNum n2 ~ B_int [ bv ::= b' ] \<setminus> SNum n2'
s' = SNum (n1' + n2') \<and> i' \<lbrakk> v1 \<rbrakk> ~ SNum n1'  \<and> i' \<lbrakk> v2 \<rbrakk> ~ SNum n2'
s = SNum (n1 + n2) \<and> i \<lbrakk> v1[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ SNum n1  \<and> i \<lbrakk> v2[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ SNum n2
\<lbrakk> ?P  \<turnstile> ?s ~ B_int [ ?bv ::= ?b ] \<setminus> ?s' ; \<lbrakk>?s' = ?s;  ?P  \<turnstile> ?s : B_int\<rbrakk> \<Longrightarrow> ?Pa\<rbrakk> \<Longrightarrow> ?Pa

goal (1 subgoal):
 1. s = s'
[PROOF STEP]
by (metis rcl_val.eq_iff(2))
[PROOF STATE]
proof (state)
this:
s = s'

goal (3 subgoals):
 1. ?y = plus \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s'
 2. ?y = leq \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s'
 3. ?y = eq \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s'
[PROOF STEP]
thus ?thesis
[PROOF STATE]
proof (prove)
using this:
s = s'

goal (1 subgoal):
 1.  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s'
[PROOF STEP]
using  * n n' boxed_b_BIntI CE_op wfRCV.intros Plus
[PROOF STATE]
proof (prove)
using this:
s = s'
b = B_int
s = SNum (n1 + n2) \<and> i \<lbrakk> v1[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ SNum n1  \<and> i \<lbrakk> v2[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ SNum n2
s' = SNum (n1' + n2') \<and> i' \<lbrakk> v1 \<rbrakk> ~ SNum n1'  \<and> i' \<lbrakk> v2 \<rbrakk> ~ SNum n2'
 ?P  \<turnstile> ?s : B_int \<Longrightarrow>  ?P  \<turnstile> ?s ~ B_int [ ?uu ::= ?uv ] \<setminus> ?s
\<lbrakk>i' \<lbrakk> v1 \<rbrakk> ~ ?s' ; i \<lbrakk> v1[bv::=?b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ ?s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f v1 : ?b ;  \<Theta>  ; \<Gamma> ; ?b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> ?s ~ ?b [ bv ::= ?b' ] \<setminus> ?s'
\<lbrakk>i' \<lbrakk> v2 \<rbrakk> ~ ?s' ; i \<lbrakk> v2[bv::=?b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ ?s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f v2 : ?b ;  \<Theta>  ; \<Gamma> ; ?b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> ?s ~ ?b [ bv ::= ?b' ] \<setminus> ?s'
i' \<lbrakk> [ opp v1 v2 ]\<^sup>c\<^sup>e \<rbrakk> ~ s'
i \<lbrakk> [ opp v1 v2 ]\<^sup>c\<^sup>e[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s
  \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f [ opp v1 v2 ]\<^sup>c\<^sup>e : b
 \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i'
 \<Theta> ; \<Gamma> \<turnstile> i'
 ?P  \<turnstile> SBitvec ?bv : B_bitvec
 ?P  \<turnstile> SNum ?n : B_int
 ?P  \<turnstile> SBool ?b : B_bool
\<lbrakk> ?P  \<turnstile> ?s1.0 : ?b1.0;  ?P  \<turnstile> ?s2.0 : ?b2.0\<rbrakk> \<Longrightarrow>  ?P  \<turnstile> SPair ?s1.0 ?s2.0 : [ ?b1.0 , ?b2.0 ]\<^sup>b
\<lbrakk>AF_typedef ?s ?dclist \<in> set ?\<Theta>; (?dc, \<lbrace> ?x : ?b  | ?c \<rbrace>) \<in> set ?dclist;  ?\<Theta>  \<turnstile> ?s1.0 : ?b\<rbrakk> \<Longrightarrow>  ?\<Theta>  \<turnstile> SCons ?s ?dc ?s1.0 : B_id ?s
\<lbrakk>AF_typedef_poly ?s ?bv ?dclist \<in> set ?\<Theta>; (?dc, \<lbrace> ?x : ?b  | ?c \<rbrace>) \<in> set ?dclist; atom ?bv \<sharp> (?\<Theta>, SConsp ?s ?dc ?b' ?s1.0, B_app ?s ?b');  ?\<Theta>  \<turnstile> ?s1.0 : ?b[?bv::=?b']\<^sub>b\<^sub>b\<rbrakk> \<Longrightarrow>  ?\<Theta>  \<turnstile> SConsp ?s ?dc ?b' ?s1.0 : B_app ?s ?b'
 ?P  \<turnstile> SUnit : B_unit
 ?P  \<turnstile> SUt ?n : B_var ?bv
\<lbrakk>?R ?a ?b; rel_mset' ?R ?M ?N\<rbrakk> \<Longrightarrow> rel_mset' ?R (add_mset ?a ?M) (add_mset ?b ?N)

goal (1 subgoal):
 1.  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s'
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
 \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s'

goal (2 subgoals):
 1. opp = leq \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s'
 2. opp = eq \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s'
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (2 subgoals):
 1. opp = leq \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s'
 2. opp = eq \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s'
[PROOF STEP]
assume \<open>opp = LEq\<close>
[PROOF STATE]
proof (state)
this:
opp = leq

goal (2 subgoals):
 1. opp = leq \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s'
 2. opp = eq \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s'
[PROOF STEP]
have 1:"wfCE \<Theta> B \<Gamma> v1 (B_int)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1.   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f v1 : B_int
[PROOF STEP]
using wfCE_elims CE_op  \<open>opp = LEq\<close>
[PROOF STATE]
proof (prove)
using this:
\<lbrakk>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [ ?v ]\<^sup>c\<^sup>e : ?b ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v : ?b  \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [ plus ?v1.0 ?v2.0 ]\<^sup>c\<^sup>e : ?b ; \<lbrakk>?b = B_int;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : B_int ;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v2.0 : B_int \<rbrakk> \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [ leq ?v1.0 ?v2.0 ]\<^sup>c\<^sup>e : ?b ; \<lbrakk>?b = B_bool;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : B_int ;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v2.0 : B_int \<rbrakk> \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [#1?v1.0]\<^sup>c\<^sup>e : ?b ; \<And>b2.   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : [ ?b , b2 ]\<^sup>b  \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [#2?v1.0]\<^sup>c\<^sup>e : ?b ; \<And>b1.   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : [ b1 , ?b ]\<^sup>b  \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [ ?v1.0 @@ ?v2.0 ]\<^sup>c\<^sup>e : ?b ; \<lbrakk>?b = B_bitvec;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : B_bitvec ;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v2.0 : B_bitvec \<rbrakk> \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [| ?v1.0 |]\<^sup>c\<^sup>e : ?b ; \<lbrakk>?b = B_int;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : B_bitvec \<rbrakk> \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [ ?opp ?v1.0 ?v2.0 ]\<^sup>c\<^sup>e : ?b ; \<lbrakk>?opp = plus; ?b = B_int;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : B_int ;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v2.0 : B_int \<rbrakk> \<Longrightarrow> ?P; \<lbrakk>?opp = leq; ?b = B_bool;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : B_int ;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v2.0 : B_int \<rbrakk> \<Longrightarrow> ?P; \<And>b. \<lbrakk>?opp = eq; ?b = B_bool;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : b ;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v2.0 : b \<rbrakk> \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [ eq ?v1.0 ?v2.0 ]\<^sup>c\<^sup>e : ?b ; \<And>b. \<lbrakk>?b = B_bool;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : b ;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v2.0 : b \<rbrakk> \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>i' \<lbrakk> v1 \<rbrakk> ~ ?s' ; i \<lbrakk> v1[bv::=?b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ ?s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f v1 : ?b ;  \<Theta>  ; \<Gamma> ; ?b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> ?s ~ ?b [ bv ::= ?b' ] \<setminus> ?s'
\<lbrakk>i' \<lbrakk> v2 \<rbrakk> ~ ?s' ; i \<lbrakk> v2[bv::=?b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ ?s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f v2 : ?b ;  \<Theta>  ; \<Gamma> ; ?b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> ?s ~ ?b [ bv ::= ?b' ] \<setminus> ?s'
i' \<lbrakk> [ opp v1 v2 ]\<^sup>c\<^sup>e \<rbrakk> ~ s'
i \<lbrakk> [ opp v1 v2 ]\<^sup>c\<^sup>e[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s
  \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f [ opp v1 v2 ]\<^sup>c\<^sup>e : b
 \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i'
 \<Theta> ; \<Gamma> \<turnstile> i'
opp = leq

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

goal (2 subgoals):
 1. opp = leq \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s'
 2. opp = eq \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s'
[PROOF STEP]
have 2:"wfCE \<Theta> B \<Gamma> v2 (B_int)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1.   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f v2 : B_int
[PROOF STEP]
using wfCE_elims CE_op  \<open>opp = LEq\<close>
[PROOF STATE]
proof (prove)
using this:
\<lbrakk>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [ ?v ]\<^sup>c\<^sup>e : ?b ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v : ?b  \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [ plus ?v1.0 ?v2.0 ]\<^sup>c\<^sup>e : ?b ; \<lbrakk>?b = B_int;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : B_int ;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v2.0 : B_int \<rbrakk> \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [ leq ?v1.0 ?v2.0 ]\<^sup>c\<^sup>e : ?b ; \<lbrakk>?b = B_bool;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : B_int ;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v2.0 : B_int \<rbrakk> \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [#1?v1.0]\<^sup>c\<^sup>e : ?b ; \<And>b2.   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : [ ?b , b2 ]\<^sup>b  \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [#2?v1.0]\<^sup>c\<^sup>e : ?b ; \<And>b1.   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : [ b1 , ?b ]\<^sup>b  \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [ ?v1.0 @@ ?v2.0 ]\<^sup>c\<^sup>e : ?b ; \<lbrakk>?b = B_bitvec;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : B_bitvec ;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v2.0 : B_bitvec \<rbrakk> \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [| ?v1.0 |]\<^sup>c\<^sup>e : ?b ; \<lbrakk>?b = B_int;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : B_bitvec \<rbrakk> \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [ ?opp ?v1.0 ?v2.0 ]\<^sup>c\<^sup>e : ?b ; \<lbrakk>?opp = plus; ?b = B_int;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : B_int ;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v2.0 : B_int \<rbrakk> \<Longrightarrow> ?P; \<lbrakk>?opp = leq; ?b = B_bool;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : B_int ;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v2.0 : B_int \<rbrakk> \<Longrightarrow> ?P; \<And>b. \<lbrakk>?opp = eq; ?b = B_bool;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : b ;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v2.0 : b \<rbrakk> \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [ eq ?v1.0 ?v2.0 ]\<^sup>c\<^sup>e : ?b ; \<And>b. \<lbrakk>?b = B_bool;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : b ;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v2.0 : b \<rbrakk> \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>i' \<lbrakk> v1 \<rbrakk> ~ ?s' ; i \<lbrakk> v1[bv::=?b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ ?s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f v1 : ?b ;  \<Theta>  ; \<Gamma> ; ?b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> ?s ~ ?b [ bv ::= ?b' ] \<setminus> ?s'
\<lbrakk>i' \<lbrakk> v2 \<rbrakk> ~ ?s' ; i \<lbrakk> v2[bv::=?b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ ?s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f v2 : ?b ;  \<Theta>  ; \<Gamma> ; ?b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> ?s ~ ?b [ bv ::= ?b' ] \<setminus> ?s'
i' \<lbrakk> [ opp v1 v2 ]\<^sup>c\<^sup>e \<rbrakk> ~ s'
i \<lbrakk> [ opp v1 v2 ]\<^sup>c\<^sup>e[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s
  \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f [ opp v1 v2 ]\<^sup>c\<^sup>e : b
 \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i'
 \<Theta> ; \<Gamma> \<turnstile> i'
opp = leq

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

goal (2 subgoals):
 1. opp = leq \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s'
 2. opp = eq \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s'
[PROOF STEP]
hence *:"b = B_bool"
[PROOF STATE]
proof (prove)
using this:
  \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f v2 : B_int

goal (1 subgoal):
 1. b = B_bool
[PROOF STEP]
using CE_op wfCE_elims \<open>opp = LEq\<close>
[PROOF STATE]
proof (prove)
using this:
  \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f v2 : B_int
\<lbrakk>i' \<lbrakk> v1 \<rbrakk> ~ ?s' ; i \<lbrakk> v1[bv::=?b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ ?s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f v1 : ?b ;  \<Theta>  ; \<Gamma> ; ?b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> ?s ~ ?b [ bv ::= ?b' ] \<setminus> ?s'
\<lbrakk>i' \<lbrakk> v2 \<rbrakk> ~ ?s' ; i \<lbrakk> v2[bv::=?b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ ?s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f v2 : ?b ;  \<Theta>  ; \<Gamma> ; ?b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> ?s ~ ?b [ bv ::= ?b' ] \<setminus> ?s'
i' \<lbrakk> [ opp v1 v2 ]\<^sup>c\<^sup>e \<rbrakk> ~ s'
i \<lbrakk> [ opp v1 v2 ]\<^sup>c\<^sup>e[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s
  \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f [ opp v1 v2 ]\<^sup>c\<^sup>e : b
 \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i'
 \<Theta> ; \<Gamma> \<turnstile> i'
\<lbrakk>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [ ?v ]\<^sup>c\<^sup>e : ?b ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v : ?b  \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [ plus ?v1.0 ?v2.0 ]\<^sup>c\<^sup>e : ?b ; \<lbrakk>?b = B_int;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : B_int ;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v2.0 : B_int \<rbrakk> \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [ leq ?v1.0 ?v2.0 ]\<^sup>c\<^sup>e : ?b ; \<lbrakk>?b = B_bool;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : B_int ;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v2.0 : B_int \<rbrakk> \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [#1?v1.0]\<^sup>c\<^sup>e : ?b ; \<And>b2.   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : [ ?b , b2 ]\<^sup>b  \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [#2?v1.0]\<^sup>c\<^sup>e : ?b ; \<And>b1.   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : [ b1 , ?b ]\<^sup>b  \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [ ?v1.0 @@ ?v2.0 ]\<^sup>c\<^sup>e : ?b ; \<lbrakk>?b = B_bitvec;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : B_bitvec ;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v2.0 : B_bitvec \<rbrakk> \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [| ?v1.0 |]\<^sup>c\<^sup>e : ?b ; \<lbrakk>?b = B_int;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : B_bitvec \<rbrakk> \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [ ?opp ?v1.0 ?v2.0 ]\<^sup>c\<^sup>e : ?b ; \<lbrakk>?opp = plus; ?b = B_int;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : B_int ;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v2.0 : B_int \<rbrakk> \<Longrightarrow> ?P; \<lbrakk>?opp = leq; ?b = B_bool;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : B_int ;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v2.0 : B_int \<rbrakk> \<Longrightarrow> ?P; \<And>b. \<lbrakk>?opp = eq; ?b = B_bool;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : b ;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v2.0 : b \<rbrakk> \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [ eq ?v1.0 ?v2.0 ]\<^sup>c\<^sup>e : ?b ; \<And>b. \<lbrakk>?b = B_bool;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : b ;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v2.0 : b \<rbrakk> \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
opp = leq

goal (1 subgoal):
 1. b = B_bool
[PROOF STEP]
by metis
[PROOF STATE]
proof (state)
this:
b = B_bool

goal (2 subgoals):
 1. opp = leq \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s'
 2. opp = eq \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s'
[PROOF STEP]
obtain n1 and n2 where n:"s = SBool (n1 \<le> n2) \<and> i \<lbrakk> v1[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ SNum n1 \<and> i \<lbrakk> v2[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ SNum n2"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (\<And>n1 n2. s = SBool (n1 \<le> n2) \<and> i \<lbrakk> v1[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ SNum n1  \<and> i \<lbrakk> v2[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ SNum n2  \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
using eval_e_elims subst_ceb.simps CE_op \<open>opp = LEq\<close>
[PROOF STATE]
proof (prove)
using this:
\<lbrakk>?i \<lbrakk> [ ?v ]\<^sup>c\<^sup>e \<rbrakk> ~ ?s ; ?i \<lbrakk> ?v \<rbrakk> ~ ?s  \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>?i \<lbrakk> [ plus ?v1.0 ?v2.0 ]\<^sup>c\<^sup>e \<rbrakk> ~ ?s ; \<And>n1 n2. \<lbrakk>?s = SNum (n1 + n2); ?i \<lbrakk> ?v1.0 \<rbrakk> ~ SNum n1 ; ?i \<lbrakk> ?v2.0 \<rbrakk> ~ SNum n2 \<rbrakk> \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>?i \<lbrakk> [ leq ?v1.0 ?v2.0 ]\<^sup>c\<^sup>e \<rbrakk> ~ ?s ; \<And>n1 n2. \<lbrakk>?s = SBool (n1 \<le> n2); ?i \<lbrakk> ?v1.0 \<rbrakk> ~ SNum n1 ; ?i \<lbrakk> ?v2.0 \<rbrakk> ~ SNum n2 \<rbrakk> \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>?i \<lbrakk> [ eq ?v1.0 ?v2.0 ]\<^sup>c\<^sup>e \<rbrakk> ~ ?s ; \<And>s1 s2. \<lbrakk>?s = SBool (s1 = s2); ?i \<lbrakk> ?v1.0 \<rbrakk> ~ s1 ; ?i \<lbrakk> ?v2.0 \<rbrakk> ~ s2 \<rbrakk> \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>?i \<lbrakk> [#1?v]\<^sup>c\<^sup>e \<rbrakk> ~ ?s ; \<And>v2. ?i \<lbrakk> ?v \<rbrakk> ~ SPair ?s v2  \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>?i \<lbrakk> [#2?v]\<^sup>c\<^sup>e \<rbrakk> ~ ?s ; \<And>v1. ?i \<lbrakk> ?v \<rbrakk> ~ SPair v1 ?s  \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>?i \<lbrakk> [ ?v1.0 @@ ?v2.0 ]\<^sup>c\<^sup>e \<rbrakk> ~ ?s ; \<And>bv1 bv2. \<lbrakk>?s = SBitvec (bv1 @ bv2); ?i \<lbrakk> ?v1.0 \<rbrakk> ~ SBitvec bv1 ; ?i \<lbrakk> ?v2.0 \<rbrakk> ~ SBitvec bv2 \<rbrakk> \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>?i \<lbrakk> [| ?v |]\<^sup>c\<^sup>e \<rbrakk> ~ ?s ; \<And>bv. \<lbrakk>?s = SNum (int (length bv)); ?i \<lbrakk> ?v \<rbrakk> ~ SBitvec bv \<rbrakk> \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
[ ?v' ]\<^sup>c\<^sup>e[?bv::=?b]\<^sub>c\<^sub>e\<^sub>b = [ ?v'[?bv::=?b]\<^sub>v\<^sub>b ]\<^sup>c\<^sup>e
[ ?opp ?v1.0 ?v2.0 ]\<^sup>c\<^sup>e[?bv::=?b]\<^sub>c\<^sub>e\<^sub>b = [ ?opp ?v1.0[?bv::=?b]\<^sub>c\<^sub>e\<^sub>b ?v2.0[?bv::=?b]\<^sub>c\<^sub>e\<^sub>b ]\<^sup>c\<^sup>e
[#1?v']\<^sup>c\<^sup>e[?bv::=?b]\<^sub>c\<^sub>e\<^sub>b = [#1?v'[?bv::=?b]\<^sub>c\<^sub>e\<^sub>b]\<^sup>c\<^sup>e
[#2?v']\<^sup>c\<^sup>e[?bv::=?b]\<^sub>c\<^sub>e\<^sub>b = [#2?v'[?bv::=?b]\<^sub>c\<^sub>e\<^sub>b]\<^sup>c\<^sup>e
[| ?v' |]\<^sup>c\<^sup>e[?bv::=?b]\<^sub>c\<^sub>e\<^sub>b = [| ?v'[?bv::=?b]\<^sub>c\<^sub>e\<^sub>b |]\<^sup>c\<^sup>e
[ ?v1.0 @@ ?v2.0 ]\<^sup>c\<^sup>e[?bv::=?b]\<^sub>c\<^sub>e\<^sub>b = [ ?v1.0[?bv::=?b]\<^sub>c\<^sub>e\<^sub>b @@ ?v2.0[?bv::=?b]\<^sub>c\<^sub>e\<^sub>b ]\<^sup>c\<^sup>e
\<lbrakk>i' \<lbrakk> v1 \<rbrakk> ~ ?s' ; i \<lbrakk> v1[bv::=?b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ ?s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f v1 : ?b ;  \<Theta>  ; \<Gamma> ; ?b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> ?s ~ ?b [ bv ::= ?b' ] \<setminus> ?s'
\<lbrakk>i' \<lbrakk> v2 \<rbrakk> ~ ?s' ; i \<lbrakk> v2[bv::=?b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ ?s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f v2 : ?b ;  \<Theta>  ; \<Gamma> ; ?b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> ?s ~ ?b [ bv ::= ?b' ] \<setminus> ?s'
i' \<lbrakk> [ opp v1 v2 ]\<^sup>c\<^sup>e \<rbrakk> ~ s'
i \<lbrakk> [ opp v1 v2 ]\<^sup>c\<^sup>e[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s
  \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f [ opp v1 v2 ]\<^sup>c\<^sup>e : b
 \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i'
 \<Theta> ; \<Gamma> \<turnstile> i'
opp = leq

goal (1 subgoal):
 1. (\<And>n1 n2. s = SBool (n1 \<le> n2) \<and> i \<lbrakk> v1[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ SNum n1  \<and> i \<lbrakk> v2[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ SNum n2  \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by metis
[PROOF STATE]
proof (state)
this:
s = SBool (n1 \<le> n2) \<and> i \<lbrakk> v1[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ SNum n1  \<and> i \<lbrakk> v2[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ SNum n2

goal (2 subgoals):
 1. opp = leq \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s'
 2. opp = eq \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s'
[PROOF STEP]
obtain n1' and n2' where n':"s' = SBool (n1' \<le> n2') \<and> i' \<lbrakk> v1 \<rbrakk> ~ SNum n1' \<and> i' \<lbrakk> v2 \<rbrakk> ~ SNum n2'"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (\<And>n1' n2'. s' = SBool (n1' \<le> n2') \<and> i' \<lbrakk> v1 \<rbrakk> ~ SNum n1'  \<and> i' \<lbrakk> v2 \<rbrakk> ~ SNum n2'  \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
using eval_e_elims CE_op \<open>opp = LEq\<close>
[PROOF STATE]
proof (prove)
using this:
\<lbrakk>?i \<lbrakk> [ ?v ]\<^sup>c\<^sup>e \<rbrakk> ~ ?s ; ?i \<lbrakk> ?v \<rbrakk> ~ ?s  \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>?i \<lbrakk> [ plus ?v1.0 ?v2.0 ]\<^sup>c\<^sup>e \<rbrakk> ~ ?s ; \<And>n1 n2. \<lbrakk>?s = SNum (n1 + n2); ?i \<lbrakk> ?v1.0 \<rbrakk> ~ SNum n1 ; ?i \<lbrakk> ?v2.0 \<rbrakk> ~ SNum n2 \<rbrakk> \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>?i \<lbrakk> [ leq ?v1.0 ?v2.0 ]\<^sup>c\<^sup>e \<rbrakk> ~ ?s ; \<And>n1 n2. \<lbrakk>?s = SBool (n1 \<le> n2); ?i \<lbrakk> ?v1.0 \<rbrakk> ~ SNum n1 ; ?i \<lbrakk> ?v2.0 \<rbrakk> ~ SNum n2 \<rbrakk> \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>?i \<lbrakk> [ eq ?v1.0 ?v2.0 ]\<^sup>c\<^sup>e \<rbrakk> ~ ?s ; \<And>s1 s2. \<lbrakk>?s = SBool (s1 = s2); ?i \<lbrakk> ?v1.0 \<rbrakk> ~ s1 ; ?i \<lbrakk> ?v2.0 \<rbrakk> ~ s2 \<rbrakk> \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>?i \<lbrakk> [#1?v]\<^sup>c\<^sup>e \<rbrakk> ~ ?s ; \<And>v2. ?i \<lbrakk> ?v \<rbrakk> ~ SPair ?s v2  \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>?i \<lbrakk> [#2?v]\<^sup>c\<^sup>e \<rbrakk> ~ ?s ; \<And>v1. ?i \<lbrakk> ?v \<rbrakk> ~ SPair v1 ?s  \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>?i \<lbrakk> [ ?v1.0 @@ ?v2.0 ]\<^sup>c\<^sup>e \<rbrakk> ~ ?s ; \<And>bv1 bv2. \<lbrakk>?s = SBitvec (bv1 @ bv2); ?i \<lbrakk> ?v1.0 \<rbrakk> ~ SBitvec bv1 ; ?i \<lbrakk> ?v2.0 \<rbrakk> ~ SBitvec bv2 \<rbrakk> \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>?i \<lbrakk> [| ?v |]\<^sup>c\<^sup>e \<rbrakk> ~ ?s ; \<And>bv. \<lbrakk>?s = SNum (int (length bv)); ?i \<lbrakk> ?v \<rbrakk> ~ SBitvec bv \<rbrakk> \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>i' \<lbrakk> v1 \<rbrakk> ~ ?s' ; i \<lbrakk> v1[bv::=?b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ ?s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f v1 : ?b ;  \<Theta>  ; \<Gamma> ; ?b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> ?s ~ ?b [ bv ::= ?b' ] \<setminus> ?s'
\<lbrakk>i' \<lbrakk> v2 \<rbrakk> ~ ?s' ; i \<lbrakk> v2[bv::=?b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ ?s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f v2 : ?b ;  \<Theta>  ; \<Gamma> ; ?b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> ?s ~ ?b [ bv ::= ?b' ] \<setminus> ?s'
i' \<lbrakk> [ opp v1 v2 ]\<^sup>c\<^sup>e \<rbrakk> ~ s'
i \<lbrakk> [ opp v1 v2 ]\<^sup>c\<^sup>e[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s
  \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f [ opp v1 v2 ]\<^sup>c\<^sup>e : b
 \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i'
 \<Theta> ; \<Gamma> \<turnstile> i'
opp = leq

goal (1 subgoal):
 1. (\<And>n1' n2'. s' = SBool (n1' \<le> n2') \<and> i' \<lbrakk> v1 \<rbrakk> ~ SNum n1'  \<and> i' \<lbrakk> v2 \<rbrakk> ~ SNum n2'  \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by metis
[PROOF STATE]
proof (state)
this:
s' = SBool (n1' \<le> n2') \<and> i' \<lbrakk> v1 \<rbrakk> ~ SNum n1'  \<and> i' \<lbrakk> v2 \<rbrakk> ~ SNum n2'

goal (2 subgoals):
 1. opp = leq \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s'
 2. opp = eq \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s'
[PROOF STEP]
have "boxed_b \<Theta> (SNum n1) B_int bv b' (SNum n1')"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1.  \<Theta>  \<turnstile> SNum n1 ~ B_int [ bv ::= b' ] \<setminus> SNum n1'
[PROOF STEP]
using boxed_i_eval_v_boxed_b 1 2 n n' CE_op
[PROOF STATE]
proof (prove)
using this:
\<lbrakk> ?\<Theta>  ; ?\<Gamma> ; ?b' , ?bv \<turnstile> ?i \<approx> ?i'; ?i \<lbrakk> ?v[?bv::=?b']\<^sub>v\<^sub>b \<rbrakk> ~ ?s ; ?i' \<lbrakk> ?v \<rbrakk> ~ ?s' ;  ?\<Theta> ; ?B ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v : ?b ;  ?\<Theta> ; ?\<Gamma> \<turnstile> ?i'\<rbrakk> \<Longrightarrow>  ?\<Theta>  \<turnstile> ?s ~ ?b [ ?bv ::= ?b' ] \<setminus> ?s'
  \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f v1 : B_int
  \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f v2 : B_int
s = SBool (n1 \<le> n2) \<and> i \<lbrakk> v1[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ SNum n1  \<and> i \<lbrakk> v2[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ SNum n2
s' = SBool (n1' \<le> n2') \<and> i' \<lbrakk> v1 \<rbrakk> ~ SNum n1'  \<and> i' \<lbrakk> v2 \<rbrakk> ~ SNum n2'
\<lbrakk>i' \<lbrakk> v1 \<rbrakk> ~ ?s' ; i \<lbrakk> v1[bv::=?b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ ?s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f v1 : ?b ;  \<Theta>  ; \<Gamma> ; ?b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> ?s ~ ?b [ bv ::= ?b' ] \<setminus> ?s'
\<lbrakk>i' \<lbrakk> v2 \<rbrakk> ~ ?s' ; i \<lbrakk> v2[bv::=?b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ ?s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f v2 : ?b ;  \<Theta>  ; \<Gamma> ; ?b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> ?s ~ ?b [ bv ::= ?b' ] \<setminus> ?s'
i' \<lbrakk> [ opp v1 v2 ]\<^sup>c\<^sup>e \<rbrakk> ~ s'
i \<lbrakk> [ opp v1 v2 ]\<^sup>c\<^sup>e[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s
  \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f [ opp v1 v2 ]\<^sup>c\<^sup>e : b
 \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i'
 \<Theta> ; \<Gamma> \<turnstile> i'

goal (1 subgoal):
 1.  \<Theta>  \<turnstile> SNum n1 ~ B_int [ bv ::= b' ] \<setminus> SNum n1'
[PROOF STEP]
by metis
[PROOF STATE]
proof (state)
this:
 \<Theta>  \<turnstile> SNum n1 ~ B_int [ bv ::= b' ] \<setminus> SNum n1'

goal (2 subgoals):
 1. opp = leq \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s'
 2. opp = eq \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s'
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
 \<Theta>  \<turnstile> SNum n1 ~ B_int [ bv ::= b' ] \<setminus> SNum n1'

goal (2 subgoals):
 1. opp = leq \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s'
 2. opp = eq \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s'
[PROOF STEP]
have "boxed_b \<Theta> (SNum n2) B_int bv b' (SNum n2')"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1.  \<Theta>  \<turnstile> SNum n2 ~ B_int [ bv ::= b' ] \<setminus> SNum n2'
[PROOF STEP]
using boxed_i_eval_v_boxed_b 1 2 n n' CE_op
[PROOF STATE]
proof (prove)
using this:
\<lbrakk> ?\<Theta>  ; ?\<Gamma> ; ?b' , ?bv \<turnstile> ?i \<approx> ?i'; ?i \<lbrakk> ?v[?bv::=?b']\<^sub>v\<^sub>b \<rbrakk> ~ ?s ; ?i' \<lbrakk> ?v \<rbrakk> ~ ?s' ;  ?\<Theta> ; ?B ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v : ?b ;  ?\<Theta> ; ?\<Gamma> \<turnstile> ?i'\<rbrakk> \<Longrightarrow>  ?\<Theta>  \<turnstile> ?s ~ ?b [ ?bv ::= ?b' ] \<setminus> ?s'
  \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f v1 : B_int
  \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f v2 : B_int
s = SBool (n1 \<le> n2) \<and> i \<lbrakk> v1[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ SNum n1  \<and> i \<lbrakk> v2[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ SNum n2
s' = SBool (n1' \<le> n2') \<and> i' \<lbrakk> v1 \<rbrakk> ~ SNum n1'  \<and> i' \<lbrakk> v2 \<rbrakk> ~ SNum n2'
\<lbrakk>i' \<lbrakk> v1 \<rbrakk> ~ ?s' ; i \<lbrakk> v1[bv::=?b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ ?s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f v1 : ?b ;  \<Theta>  ; \<Gamma> ; ?b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> ?s ~ ?b [ bv ::= ?b' ] \<setminus> ?s'
\<lbrakk>i' \<lbrakk> v2 \<rbrakk> ~ ?s' ; i \<lbrakk> v2[bv::=?b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ ?s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f v2 : ?b ;  \<Theta>  ; \<Gamma> ; ?b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> ?s ~ ?b [ bv ::= ?b' ] \<setminus> ?s'
i' \<lbrakk> [ opp v1 v2 ]\<^sup>c\<^sup>e \<rbrakk> ~ s'
i \<lbrakk> [ opp v1 v2 ]\<^sup>c\<^sup>e[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s
  \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f [ opp v1 v2 ]\<^sup>c\<^sup>e : b
 \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i'
 \<Theta> ; \<Gamma> \<turnstile> i'

goal (1 subgoal):
 1.  \<Theta>  \<turnstile> SNum n2 ~ B_int [ bv ::= b' ] \<setminus> SNum n2'
[PROOF STEP]
by metis
[PROOF STATE]
proof (state)
this:
 \<Theta>  \<turnstile> SNum n2 ~ B_int [ bv ::= b' ] \<setminus> SNum n2'

goal (2 subgoals):
 1. opp = leq \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s'
 2. opp = eq \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s'
[PROOF STEP]
ultimately
[PROOF STATE]
proof (chain)
picking this:
 \<Theta>  \<turnstile> SNum n1 ~ B_int [ bv ::= b' ] \<setminus> SNum n1'
 \<Theta>  \<turnstile> SNum n2 ~ B_int [ bv ::= b' ] \<setminus> SNum n2'
[PROOF STEP]
have "s=s'"
[PROOF STATE]
proof (prove)
using this:
 \<Theta>  \<turnstile> SNum n1 ~ B_int [ bv ::= b' ] \<setminus> SNum n1'
 \<Theta>  \<turnstile> SNum n2 ~ B_int [ bv ::= b' ] \<setminus> SNum n2'

goal (1 subgoal):
 1. s = s'
[PROOF STEP]
using n' n boxed_b_elims(2)
[PROOF STATE]
proof (prove)
using this:
 \<Theta>  \<turnstile> SNum n1 ~ B_int [ bv ::= b' ] \<setminus> SNum n1'
 \<Theta>  \<turnstile> SNum n2 ~ B_int [ bv ::= b' ] \<setminus> SNum n2'
s' = SBool (n1' \<le> n2') \<and> i' \<lbrakk> v1 \<rbrakk> ~ SNum n1'  \<and> i' \<lbrakk> v2 \<rbrakk> ~ SNum n2'
s = SBool (n1 \<le> n2) \<and> i \<lbrakk> v1[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ SNum n1  \<and> i \<lbrakk> v2[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ SNum n2
\<lbrakk> ?P  \<turnstile> ?s ~ B_int [ ?bv ::= ?b ] \<setminus> ?s' ; \<lbrakk>?s' = ?s;  ?P  \<turnstile> ?s : B_int\<rbrakk> \<Longrightarrow> ?Pa\<rbrakk> \<Longrightarrow> ?Pa

goal (1 subgoal):
 1. s = s'
[PROOF STEP]
by (metis rcl_val.eq_iff(2))
[PROOF STATE]
proof (state)
this:
s = s'

goal (2 subgoals):
 1. opp = leq \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s'
 2. opp = eq \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s'
[PROOF STEP]
thus ?thesis
[PROOF STATE]
proof (prove)
using this:
s = s'

goal (1 subgoal):
 1.  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s'
[PROOF STEP]
using  * n n' boxed_b_BBoolI CE_op wfRCV.intros \<open>opp = LEq\<close>
[PROOF STATE]
proof (prove)
using this:
s = s'
b = B_bool
s = SBool (n1 \<le> n2) \<and> i \<lbrakk> v1[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ SNum n1  \<and> i \<lbrakk> v2[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ SNum n2
s' = SBool (n1' \<le> n2') \<and> i' \<lbrakk> v1 \<rbrakk> ~ SNum n1'  \<and> i' \<lbrakk> v2 \<rbrakk> ~ SNum n2'
 ?P  \<turnstile> ?s : B_bool \<Longrightarrow>  ?P  \<turnstile> ?s ~ B_bool [ ?uw ::= ?ux ] \<setminus> ?s
\<lbrakk>i' \<lbrakk> v1 \<rbrakk> ~ ?s' ; i \<lbrakk> v1[bv::=?b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ ?s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f v1 : ?b ;  \<Theta>  ; \<Gamma> ; ?b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> ?s ~ ?b [ bv ::= ?b' ] \<setminus> ?s'
\<lbrakk>i' \<lbrakk> v2 \<rbrakk> ~ ?s' ; i \<lbrakk> v2[bv::=?b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ ?s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f v2 : ?b ;  \<Theta>  ; \<Gamma> ; ?b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> ?s ~ ?b [ bv ::= ?b' ] \<setminus> ?s'
i' \<lbrakk> [ opp v1 v2 ]\<^sup>c\<^sup>e \<rbrakk> ~ s'
i \<lbrakk> [ opp v1 v2 ]\<^sup>c\<^sup>e[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s
  \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f [ opp v1 v2 ]\<^sup>c\<^sup>e : b
 \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i'
 \<Theta> ; \<Gamma> \<turnstile> i'
 ?P  \<turnstile> SBitvec ?bv : B_bitvec
 ?P  \<turnstile> SNum ?n : B_int
 ?P  \<turnstile> SBool ?b : B_bool
\<lbrakk> ?P  \<turnstile> ?s1.0 : ?b1.0;  ?P  \<turnstile> ?s2.0 : ?b2.0\<rbrakk> \<Longrightarrow>  ?P  \<turnstile> SPair ?s1.0 ?s2.0 : [ ?b1.0 , ?b2.0 ]\<^sup>b
\<lbrakk>AF_typedef ?s ?dclist \<in> set ?\<Theta>; (?dc, \<lbrace> ?x : ?b  | ?c \<rbrace>) \<in> set ?dclist;  ?\<Theta>  \<turnstile> ?s1.0 : ?b\<rbrakk> \<Longrightarrow>  ?\<Theta>  \<turnstile> SCons ?s ?dc ?s1.0 : B_id ?s
\<lbrakk>AF_typedef_poly ?s ?bv ?dclist \<in> set ?\<Theta>; (?dc, \<lbrace> ?x : ?b  | ?c \<rbrace>) \<in> set ?dclist; atom ?bv \<sharp> (?\<Theta>, SConsp ?s ?dc ?b' ?s1.0, B_app ?s ?b');  ?\<Theta>  \<turnstile> ?s1.0 : ?b[?bv::=?b']\<^sub>b\<^sub>b\<rbrakk> \<Longrightarrow>  ?\<Theta>  \<turnstile> SConsp ?s ?dc ?b' ?s1.0 : B_app ?s ?b'
 ?P  \<turnstile> SUnit : B_unit
 ?P  \<turnstile> SUt ?n : B_var ?bv
opp = leq

goal (1 subgoal):
 1.  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s'
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
 \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s'

goal (1 subgoal):
 1. opp = eq \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s'
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. opp = eq \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s'
[PROOF STEP]
assume \<open>opp = Eq\<close>
[PROOF STATE]
proof (state)
this:
opp = eq

goal (1 subgoal):
 1. opp = eq \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s'
[PROOF STEP]
obtain b1 where b1:"wfCE \<Theta> B \<Gamma> v1 b1 \<and> wfCE \<Theta> B \<Gamma> v2 b1"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (\<And>b1.   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f v1 : b1  \<and>   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f v2 : b1  \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
using wfCE_elims CE_op  \<open>opp = Eq\<close>
[PROOF STATE]
proof (prove)
using this:
\<lbrakk>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [ ?v ]\<^sup>c\<^sup>e : ?b ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v : ?b  \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [ plus ?v1.0 ?v2.0 ]\<^sup>c\<^sup>e : ?b ; \<lbrakk>?b = B_int;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : B_int ;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v2.0 : B_int \<rbrakk> \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [ leq ?v1.0 ?v2.0 ]\<^sup>c\<^sup>e : ?b ; \<lbrakk>?b = B_bool;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : B_int ;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v2.0 : B_int \<rbrakk> \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [#1?v1.0]\<^sup>c\<^sup>e : ?b ; \<And>b2.   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : [ ?b , b2 ]\<^sup>b  \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [#2?v1.0]\<^sup>c\<^sup>e : ?b ; \<And>b1.   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : [ b1 , ?b ]\<^sup>b  \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [ ?v1.0 @@ ?v2.0 ]\<^sup>c\<^sup>e : ?b ; \<lbrakk>?b = B_bitvec;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : B_bitvec ;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v2.0 : B_bitvec \<rbrakk> \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [| ?v1.0 |]\<^sup>c\<^sup>e : ?b ; \<lbrakk>?b = B_int;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : B_bitvec \<rbrakk> \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [ ?opp ?v1.0 ?v2.0 ]\<^sup>c\<^sup>e : ?b ; \<lbrakk>?opp = plus; ?b = B_int;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : B_int ;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v2.0 : B_int \<rbrakk> \<Longrightarrow> ?P; \<lbrakk>?opp = leq; ?b = B_bool;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : B_int ;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v2.0 : B_int \<rbrakk> \<Longrightarrow> ?P; \<And>b. \<lbrakk>?opp = eq; ?b = B_bool;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : b ;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v2.0 : b \<rbrakk> \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [ eq ?v1.0 ?v2.0 ]\<^sup>c\<^sup>e : ?b ; \<And>b. \<lbrakk>?b = B_bool;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : b ;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v2.0 : b \<rbrakk> \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>i' \<lbrakk> v1 \<rbrakk> ~ ?s' ; i \<lbrakk> v1[bv::=?b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ ?s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f v1 : ?b ;  \<Theta>  ; \<Gamma> ; ?b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> ?s ~ ?b [ bv ::= ?b' ] \<setminus> ?s'
\<lbrakk>i' \<lbrakk> v2 \<rbrakk> ~ ?s' ; i \<lbrakk> v2[bv::=?b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ ?s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f v2 : ?b ;  \<Theta>  ; \<Gamma> ; ?b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> ?s ~ ?b [ bv ::= ?b' ] \<setminus> ?s'
i' \<lbrakk> [ opp v1 v2 ]\<^sup>c\<^sup>e \<rbrakk> ~ s'
i \<lbrakk> [ opp v1 v2 ]\<^sup>c\<^sup>e[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s
  \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f [ opp v1 v2 ]\<^sup>c\<^sup>e : b
 \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i'
 \<Theta> ; \<Gamma> \<turnstile> i'
opp = eq

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

goal (1 subgoal):
 1. opp = eq \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s'
[PROOF STEP]
hence *:"b = B_bool"
[PROOF STATE]
proof (prove)
using this:
  \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f v1 : b1  \<and>   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f v2 : b1

goal (1 subgoal):
 1. b = B_bool
[PROOF STEP]
using CE_op wfCE_elims \<open>opp = Eq\<close>
[PROOF STATE]
proof (prove)
using this:
  \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f v1 : b1  \<and>   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f v2 : b1
\<lbrakk>i' \<lbrakk> v1 \<rbrakk> ~ ?s' ; i \<lbrakk> v1[bv::=?b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ ?s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f v1 : ?b ;  \<Theta>  ; \<Gamma> ; ?b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> ?s ~ ?b [ bv ::= ?b' ] \<setminus> ?s'
\<lbrakk>i' \<lbrakk> v2 \<rbrakk> ~ ?s' ; i \<lbrakk> v2[bv::=?b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ ?s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f v2 : ?b ;  \<Theta>  ; \<Gamma> ; ?b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> ?s ~ ?b [ bv ::= ?b' ] \<setminus> ?s'
i' \<lbrakk> [ opp v1 v2 ]\<^sup>c\<^sup>e \<rbrakk> ~ s'
i \<lbrakk> [ opp v1 v2 ]\<^sup>c\<^sup>e[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s
  \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f [ opp v1 v2 ]\<^sup>c\<^sup>e : b
 \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i'
 \<Theta> ; \<Gamma> \<turnstile> i'
\<lbrakk>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [ ?v ]\<^sup>c\<^sup>e : ?b ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v : ?b  \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [ plus ?v1.0 ?v2.0 ]\<^sup>c\<^sup>e : ?b ; \<lbrakk>?b = B_int;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : B_int ;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v2.0 : B_int \<rbrakk> \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [ leq ?v1.0 ?v2.0 ]\<^sup>c\<^sup>e : ?b ; \<lbrakk>?b = B_bool;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : B_int ;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v2.0 : B_int \<rbrakk> \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [#1?v1.0]\<^sup>c\<^sup>e : ?b ; \<And>b2.   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : [ ?b , b2 ]\<^sup>b  \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [#2?v1.0]\<^sup>c\<^sup>e : ?b ; \<And>b1.   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : [ b1 , ?b ]\<^sup>b  \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [ ?v1.0 @@ ?v2.0 ]\<^sup>c\<^sup>e : ?b ; \<lbrakk>?b = B_bitvec;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : B_bitvec ;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v2.0 : B_bitvec \<rbrakk> \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [| ?v1.0 |]\<^sup>c\<^sup>e : ?b ; \<lbrakk>?b = B_int;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : B_bitvec \<rbrakk> \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [ ?opp ?v1.0 ?v2.0 ]\<^sup>c\<^sup>e : ?b ; \<lbrakk>?opp = plus; ?b = B_int;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : B_int ;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v2.0 : B_int \<rbrakk> \<Longrightarrow> ?P; \<lbrakk>?opp = leq; ?b = B_bool;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : B_int ;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v2.0 : B_int \<rbrakk> \<Longrightarrow> ?P; \<And>b. \<lbrakk>?opp = eq; ?b = B_bool;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : b ;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v2.0 : b \<rbrakk> \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [ eq ?v1.0 ?v2.0 ]\<^sup>c\<^sup>e : ?b ; \<And>b. \<lbrakk>?b = B_bool;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : b ;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v2.0 : b \<rbrakk> \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
opp = eq

goal (1 subgoal):
 1. b = B_bool
[PROOF STEP]
by metis
[PROOF STATE]
proof (state)
this:
b = B_bool

goal (1 subgoal):
 1. opp = eq \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s'
[PROOF STEP]
obtain n1 and n2 where n:"s = SBool (n1 = n2) \<and> i \<lbrakk> v1[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ n1 \<and> i \<lbrakk> v2[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ n2"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (\<And>n1 n2. s = SBool (n1 = n2) \<and> i \<lbrakk> v1[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ n1  \<and> i \<lbrakk> v2[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ n2  \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
using eval_e_elims subst_ceb.simps CE_op \<open>opp = Eq\<close>
[PROOF STATE]
proof (prove)
using this:
\<lbrakk>?i \<lbrakk> [ ?v ]\<^sup>c\<^sup>e \<rbrakk> ~ ?s ; ?i \<lbrakk> ?v \<rbrakk> ~ ?s  \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>?i \<lbrakk> [ plus ?v1.0 ?v2.0 ]\<^sup>c\<^sup>e \<rbrakk> ~ ?s ; \<And>n1 n2. \<lbrakk>?s = SNum (n1 + n2); ?i \<lbrakk> ?v1.0 \<rbrakk> ~ SNum n1 ; ?i \<lbrakk> ?v2.0 \<rbrakk> ~ SNum n2 \<rbrakk> \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>?i \<lbrakk> [ leq ?v1.0 ?v2.0 ]\<^sup>c\<^sup>e \<rbrakk> ~ ?s ; \<And>n1 n2. \<lbrakk>?s = SBool (n1 \<le> n2); ?i \<lbrakk> ?v1.0 \<rbrakk> ~ SNum n1 ; ?i \<lbrakk> ?v2.0 \<rbrakk> ~ SNum n2 \<rbrakk> \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>?i \<lbrakk> [ eq ?v1.0 ?v2.0 ]\<^sup>c\<^sup>e \<rbrakk> ~ ?s ; \<And>s1 s2. \<lbrakk>?s = SBool (s1 = s2); ?i \<lbrakk> ?v1.0 \<rbrakk> ~ s1 ; ?i \<lbrakk> ?v2.0 \<rbrakk> ~ s2 \<rbrakk> \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>?i \<lbrakk> [#1?v]\<^sup>c\<^sup>e \<rbrakk> ~ ?s ; \<And>v2. ?i \<lbrakk> ?v \<rbrakk> ~ SPair ?s v2  \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>?i \<lbrakk> [#2?v]\<^sup>c\<^sup>e \<rbrakk> ~ ?s ; \<And>v1. ?i \<lbrakk> ?v \<rbrakk> ~ SPair v1 ?s  \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>?i \<lbrakk> [ ?v1.0 @@ ?v2.0 ]\<^sup>c\<^sup>e \<rbrakk> ~ ?s ; \<And>bv1 bv2. \<lbrakk>?s = SBitvec (bv1 @ bv2); ?i \<lbrakk> ?v1.0 \<rbrakk> ~ SBitvec bv1 ; ?i \<lbrakk> ?v2.0 \<rbrakk> ~ SBitvec bv2 \<rbrakk> \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>?i \<lbrakk> [| ?v |]\<^sup>c\<^sup>e \<rbrakk> ~ ?s ; \<And>bv. \<lbrakk>?s = SNum (int (length bv)); ?i \<lbrakk> ?v \<rbrakk> ~ SBitvec bv \<rbrakk> \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
[ ?v' ]\<^sup>c\<^sup>e[?bv::=?b]\<^sub>c\<^sub>e\<^sub>b = [ ?v'[?bv::=?b]\<^sub>v\<^sub>b ]\<^sup>c\<^sup>e
[ ?opp ?v1.0 ?v2.0 ]\<^sup>c\<^sup>e[?bv::=?b]\<^sub>c\<^sub>e\<^sub>b = [ ?opp ?v1.0[?bv::=?b]\<^sub>c\<^sub>e\<^sub>b ?v2.0[?bv::=?b]\<^sub>c\<^sub>e\<^sub>b ]\<^sup>c\<^sup>e
[#1?v']\<^sup>c\<^sup>e[?bv::=?b]\<^sub>c\<^sub>e\<^sub>b = [#1?v'[?bv::=?b]\<^sub>c\<^sub>e\<^sub>b]\<^sup>c\<^sup>e
[#2?v']\<^sup>c\<^sup>e[?bv::=?b]\<^sub>c\<^sub>e\<^sub>b = [#2?v'[?bv::=?b]\<^sub>c\<^sub>e\<^sub>b]\<^sup>c\<^sup>e
[| ?v' |]\<^sup>c\<^sup>e[?bv::=?b]\<^sub>c\<^sub>e\<^sub>b = [| ?v'[?bv::=?b]\<^sub>c\<^sub>e\<^sub>b |]\<^sup>c\<^sup>e
[ ?v1.0 @@ ?v2.0 ]\<^sup>c\<^sup>e[?bv::=?b]\<^sub>c\<^sub>e\<^sub>b = [ ?v1.0[?bv::=?b]\<^sub>c\<^sub>e\<^sub>b @@ ?v2.0[?bv::=?b]\<^sub>c\<^sub>e\<^sub>b ]\<^sup>c\<^sup>e
\<lbrakk>i' \<lbrakk> v1 \<rbrakk> ~ ?s' ; i \<lbrakk> v1[bv::=?b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ ?s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f v1 : ?b ;  \<Theta>  ; \<Gamma> ; ?b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> ?s ~ ?b [ bv ::= ?b' ] \<setminus> ?s'
\<lbrakk>i' \<lbrakk> v2 \<rbrakk> ~ ?s' ; i \<lbrakk> v2[bv::=?b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ ?s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f v2 : ?b ;  \<Theta>  ; \<Gamma> ; ?b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> ?s ~ ?b [ bv ::= ?b' ] \<setminus> ?s'
i' \<lbrakk> [ opp v1 v2 ]\<^sup>c\<^sup>e \<rbrakk> ~ s'
i \<lbrakk> [ opp v1 v2 ]\<^sup>c\<^sup>e[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s
  \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f [ opp v1 v2 ]\<^sup>c\<^sup>e : b
 \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i'
 \<Theta> ; \<Gamma> \<turnstile> i'
opp = eq

goal (1 subgoal):
 1. (\<And>n1 n2. s = SBool (n1 = n2) \<and> i \<lbrakk> v1[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ n1  \<and> i \<lbrakk> v2[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ n2  \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by metis
[PROOF STATE]
proof (state)
this:
s = SBool (n1 = n2) \<and> i \<lbrakk> v1[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ n1  \<and> i \<lbrakk> v2[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ n2

goal (1 subgoal):
 1. opp = eq \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s'
[PROOF STEP]
obtain n1' and n2' where n':"s' = SBool (n1' = n2') \<and> i' \<lbrakk> v1 \<rbrakk> ~ n1' \<and> i' \<lbrakk> v2 \<rbrakk> ~ n2'"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (\<And>n1' n2'. s' = SBool (n1' = n2') \<and> i' \<lbrakk> v1 \<rbrakk> ~ n1'  \<and> i' \<lbrakk> v2 \<rbrakk> ~ n2'  \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
using eval_e_elims CE_op \<open>opp = Eq\<close>
[PROOF STATE]
proof (prove)
using this:
\<lbrakk>?i \<lbrakk> [ ?v ]\<^sup>c\<^sup>e \<rbrakk> ~ ?s ; ?i \<lbrakk> ?v \<rbrakk> ~ ?s  \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>?i \<lbrakk> [ plus ?v1.0 ?v2.0 ]\<^sup>c\<^sup>e \<rbrakk> ~ ?s ; \<And>n1 n2. \<lbrakk>?s = SNum (n1 + n2); ?i \<lbrakk> ?v1.0 \<rbrakk> ~ SNum n1 ; ?i \<lbrakk> ?v2.0 \<rbrakk> ~ SNum n2 \<rbrakk> \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>?i \<lbrakk> [ leq ?v1.0 ?v2.0 ]\<^sup>c\<^sup>e \<rbrakk> ~ ?s ; \<And>n1 n2. \<lbrakk>?s = SBool (n1 \<le> n2); ?i \<lbrakk> ?v1.0 \<rbrakk> ~ SNum n1 ; ?i \<lbrakk> ?v2.0 \<rbrakk> ~ SNum n2 \<rbrakk> \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>?i \<lbrakk> [ eq ?v1.0 ?v2.0 ]\<^sup>c\<^sup>e \<rbrakk> ~ ?s ; \<And>s1 s2. \<lbrakk>?s = SBool (s1 = s2); ?i \<lbrakk> ?v1.0 \<rbrakk> ~ s1 ; ?i \<lbrakk> ?v2.0 \<rbrakk> ~ s2 \<rbrakk> \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>?i \<lbrakk> [#1?v]\<^sup>c\<^sup>e \<rbrakk> ~ ?s ; \<And>v2. ?i \<lbrakk> ?v \<rbrakk> ~ SPair ?s v2  \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>?i \<lbrakk> [#2?v]\<^sup>c\<^sup>e \<rbrakk> ~ ?s ; \<And>v1. ?i \<lbrakk> ?v \<rbrakk> ~ SPair v1 ?s  \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>?i \<lbrakk> [ ?v1.0 @@ ?v2.0 ]\<^sup>c\<^sup>e \<rbrakk> ~ ?s ; \<And>bv1 bv2. \<lbrakk>?s = SBitvec (bv1 @ bv2); ?i \<lbrakk> ?v1.0 \<rbrakk> ~ SBitvec bv1 ; ?i \<lbrakk> ?v2.0 \<rbrakk> ~ SBitvec bv2 \<rbrakk> \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>?i \<lbrakk> [| ?v |]\<^sup>c\<^sup>e \<rbrakk> ~ ?s ; \<And>bv. \<lbrakk>?s = SNum (int (length bv)); ?i \<lbrakk> ?v \<rbrakk> ~ SBitvec bv \<rbrakk> \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>i' \<lbrakk> v1 \<rbrakk> ~ ?s' ; i \<lbrakk> v1[bv::=?b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ ?s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f v1 : ?b ;  \<Theta>  ; \<Gamma> ; ?b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> ?s ~ ?b [ bv ::= ?b' ] \<setminus> ?s'
\<lbrakk>i' \<lbrakk> v2 \<rbrakk> ~ ?s' ; i \<lbrakk> v2[bv::=?b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ ?s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f v2 : ?b ;  \<Theta>  ; \<Gamma> ; ?b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> ?s ~ ?b [ bv ::= ?b' ] \<setminus> ?s'
i' \<lbrakk> [ opp v1 v2 ]\<^sup>c\<^sup>e \<rbrakk> ~ s'
i \<lbrakk> [ opp v1 v2 ]\<^sup>c\<^sup>e[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s
  \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f [ opp v1 v2 ]\<^sup>c\<^sup>e : b
 \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i'
 \<Theta> ; \<Gamma> \<turnstile> i'
opp = eq

goal (1 subgoal):
 1. (\<And>n1' n2'. s' = SBool (n1' = n2') \<and> i' \<lbrakk> v1 \<rbrakk> ~ n1'  \<and> i' \<lbrakk> v2 \<rbrakk> ~ n2'  \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by metis
[PROOF STATE]
proof (state)
this:
s' = SBool (n1' = n2') \<and> i' \<lbrakk> v1 \<rbrakk> ~ n1'  \<and> i' \<lbrakk> v2 \<rbrakk> ~ n2'

goal (1 subgoal):
 1. opp = eq \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s'
[PROOF STEP]
have "boxed_b \<Theta> n1 b1 bv b' n1'"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1.  \<Theta>  \<turnstile> n1 ~ b1 [ bv ::= b' ] \<setminus> n1'
[PROOF STEP]
using boxed_i_eval_v_boxed_b b1  n n' CE_op
[PROOF STATE]
proof (prove)
using this:
\<lbrakk> ?\<Theta>  ; ?\<Gamma> ; ?b' , ?bv \<turnstile> ?i \<approx> ?i'; ?i \<lbrakk> ?v[?bv::=?b']\<^sub>v\<^sub>b \<rbrakk> ~ ?s ; ?i' \<lbrakk> ?v \<rbrakk> ~ ?s' ;  ?\<Theta> ; ?B ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v : ?b ;  ?\<Theta> ; ?\<Gamma> \<turnstile> ?i'\<rbrakk> \<Longrightarrow>  ?\<Theta>  \<turnstile> ?s ~ ?b [ ?bv ::= ?b' ] \<setminus> ?s'
  \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f v1 : b1  \<and>   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f v2 : b1
s = SBool (n1 = n2) \<and> i \<lbrakk> v1[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ n1  \<and> i \<lbrakk> v2[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ n2
s' = SBool (n1' = n2') \<and> i' \<lbrakk> v1 \<rbrakk> ~ n1'  \<and> i' \<lbrakk> v2 \<rbrakk> ~ n2'
\<lbrakk>i' \<lbrakk> v1 \<rbrakk> ~ ?s' ; i \<lbrakk> v1[bv::=?b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ ?s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f v1 : ?b ;  \<Theta>  ; \<Gamma> ; ?b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> ?s ~ ?b [ bv ::= ?b' ] \<setminus> ?s'
\<lbrakk>i' \<lbrakk> v2 \<rbrakk> ~ ?s' ; i \<lbrakk> v2[bv::=?b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ ?s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f v2 : ?b ;  \<Theta>  ; \<Gamma> ; ?b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> ?s ~ ?b [ bv ::= ?b' ] \<setminus> ?s'
i' \<lbrakk> [ opp v1 v2 ]\<^sup>c\<^sup>e \<rbrakk> ~ s'
i \<lbrakk> [ opp v1 v2 ]\<^sup>c\<^sup>e[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s
  \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f [ opp v1 v2 ]\<^sup>c\<^sup>e : b
 \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i'
 \<Theta> ; \<Gamma> \<turnstile> i'

goal (1 subgoal):
 1.  \<Theta>  \<turnstile> n1 ~ b1 [ bv ::= b' ] \<setminus> n1'
[PROOF STEP]
by metis
[PROOF STATE]
proof (state)
this:
 \<Theta>  \<turnstile> n1 ~ b1 [ bv ::= b' ] \<setminus> n1'

goal (1 subgoal):
 1. opp = eq \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s'
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
 \<Theta>  \<turnstile> n1 ~ b1 [ bv ::= b' ] \<setminus> n1'

goal (1 subgoal):
 1. opp = eq \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s'
[PROOF STEP]
have "boxed_b \<Theta> n2 b1 bv b' n2'"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1.  \<Theta>  \<turnstile> n2 ~ b1 [ bv ::= b' ] \<setminus> n2'
[PROOF STEP]
using boxed_i_eval_v_boxed_b b1  n n' CE_op
[PROOF STATE]
proof (prove)
using this:
\<lbrakk> ?\<Theta>  ; ?\<Gamma> ; ?b' , ?bv \<turnstile> ?i \<approx> ?i'; ?i \<lbrakk> ?v[?bv::=?b']\<^sub>v\<^sub>b \<rbrakk> ~ ?s ; ?i' \<lbrakk> ?v \<rbrakk> ~ ?s' ;  ?\<Theta> ; ?B ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v : ?b ;  ?\<Theta> ; ?\<Gamma> \<turnstile> ?i'\<rbrakk> \<Longrightarrow>  ?\<Theta>  \<turnstile> ?s ~ ?b [ ?bv ::= ?b' ] \<setminus> ?s'
  \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f v1 : b1  \<and>   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f v2 : b1
s = SBool (n1 = n2) \<and> i \<lbrakk> v1[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ n1  \<and> i \<lbrakk> v2[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ n2
s' = SBool (n1' = n2') \<and> i' \<lbrakk> v1 \<rbrakk> ~ n1'  \<and> i' \<lbrakk> v2 \<rbrakk> ~ n2'
\<lbrakk>i' \<lbrakk> v1 \<rbrakk> ~ ?s' ; i \<lbrakk> v1[bv::=?b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ ?s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f v1 : ?b ;  \<Theta>  ; \<Gamma> ; ?b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> ?s ~ ?b [ bv ::= ?b' ] \<setminus> ?s'
\<lbrakk>i' \<lbrakk> v2 \<rbrakk> ~ ?s' ; i \<lbrakk> v2[bv::=?b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ ?s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f v2 : ?b ;  \<Theta>  ; \<Gamma> ; ?b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> ?s ~ ?b [ bv ::= ?b' ] \<setminus> ?s'
i' \<lbrakk> [ opp v1 v2 ]\<^sup>c\<^sup>e \<rbrakk> ~ s'
i \<lbrakk> [ opp v1 v2 ]\<^sup>c\<^sup>e[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s
  \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f [ opp v1 v2 ]\<^sup>c\<^sup>e : b
 \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i'
 \<Theta> ; \<Gamma> \<turnstile> i'

goal (1 subgoal):
 1.  \<Theta>  \<turnstile> n2 ~ b1 [ bv ::= b' ] \<setminus> n2'
[PROOF STEP]
by metis
[PROOF STATE]
proof (state)
this:
 \<Theta>  \<turnstile> n2 ~ b1 [ bv ::= b' ] \<setminus> n2'

goal (1 subgoal):
 1. opp = eq \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s'
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
 \<Theta>  \<turnstile> n2 ~ b1 [ bv ::= b' ] \<setminus> n2'

goal (1 subgoal):
 1. opp = eq \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s'
[PROOF STEP]
have "\<turnstile>\<^sub>w\<^sub>f \<Theta>"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1.    \<turnstile>\<^sub>w\<^sub>f \<Theta>
[PROOF STEP]
using b1 wfX_wfY
[PROOF STATE]
proof (prove)
using this:
  \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f v1 : b1  \<and>   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f v2 : b1
 ?\<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.    \<turnstile>\<^sub>w\<^sub>f \<Theta>
[PROOF STEP]
by metis
[PROOF STATE]
proof (state)
this:
   \<turnstile>\<^sub>w\<^sub>f \<Theta>

goal (1 subgoal):
 1. opp = eq \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s'
[PROOF STEP]
ultimately
[PROOF STATE]
proof (chain)
picking this:
 \<Theta>  \<turnstile> n1 ~ b1 [ bv ::= b' ] \<setminus> n1'
 \<Theta>  \<turnstile> n2 ~ b1 [ bv ::= b' ] \<setminus> n2'
   \<turnstile>\<^sub>w\<^sub>f \<Theta>
[PROOF STEP]
have "s=s'"
[PROOF STATE]
proof (prove)
using this:
 \<Theta>  \<turnstile> n1 ~ b1 [ bv ::= b' ] \<setminus> n1'
 \<Theta>  \<turnstile> n2 ~ b1 [ bv ::= b' ] \<setminus> n2'
   \<turnstile>\<^sub>w\<^sub>f \<Theta>

goal (1 subgoal):
 1. s = s'
[PROOF STEP]
using n' n boxed_b_elims
        boxed_b_eq_eq
[PROOF STATE]
proof (prove)
using this:
 \<Theta>  \<turnstile> n1 ~ b1 [ bv ::= b' ] \<setminus> n1'
 \<Theta>  \<turnstile> n2 ~ b1 [ bv ::= b' ] \<setminus> n2'
   \<turnstile>\<^sub>w\<^sub>f \<Theta>
s' = SBool (n1' = n2') \<and> i' \<lbrakk> v1 \<rbrakk> ~ n1'  \<and> i' \<lbrakk> v2 \<rbrakk> ~ n2'
s = SBool (n1 = n2) \<and> i \<lbrakk> v1[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ n1  \<and> i \<lbrakk> v2[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ n2
\<lbrakk> ?P  \<turnstile> ?s ~ B_var ?bv [ ?bv' ::= ?b ] \<setminus> ?s' ; \<lbrakk>?bv' = ?bv; ?s' = SUt ?s;  ?P  \<turnstile> ?s : ?b\<rbrakk> \<Longrightarrow> ?Pa; \<lbrakk>?s' = ?s; ?bv' \<noteq> ?bv;  ?P  \<turnstile> ?s : B_var ?bv\<rbrakk> \<Longrightarrow> ?Pa\<rbrakk> \<Longrightarrow> ?Pa
\<lbrakk> ?P  \<turnstile> ?s ~ B_int [ ?bv ::= ?b ] \<setminus> ?s' ; \<lbrakk>?s' = ?s;  ?P  \<turnstile> ?s : B_int\<rbrakk> \<Longrightarrow> ?Pa\<rbrakk> \<Longrightarrow> ?Pa
\<lbrakk> ?P  \<turnstile> ?s ~ B_bool [ ?bv ::= ?b ] \<setminus> ?s' ; \<lbrakk>?s' = ?s;  ?P  \<turnstile> ?s : B_bool\<rbrakk> \<Longrightarrow> ?Pa\<rbrakk> \<Longrightarrow> ?Pa
\<lbrakk> ?P  \<turnstile> ?s ~ B_unit [ ?bv ::= ?b ] \<setminus> ?s' ; \<lbrakk>?s' = ?s;  ?P  \<turnstile> ?s : B_unit\<rbrakk> \<Longrightarrow> ?Pa\<rbrakk> \<Longrightarrow> ?Pa
\<lbrakk> ?P  \<turnstile> ?s ~ [ ?b1.0 , ?b2.0 ]\<^sup>b [ ?bv ::= ?b ] \<setminus> ?s' ; \<And>s1 s1' s2 s2'. \<lbrakk>?s = SPair s1 s2; ?s' = SPair s1' s2';  ?P  \<turnstile> s1 ~ ?b1.0 [ ?bv ::= ?b ] \<setminus> s1' ;  ?P  \<turnstile> s2 ~ ?b2.0 [ ?bv ::= ?b ] \<setminus> s2' \<rbrakk> \<Longrightarrow> ?Pa\<rbrakk> \<Longrightarrow> ?Pa
\<lbrakk> ?P  \<turnstile> ?s ~ B_id ?dc [ ?bv ::= ?b ] \<setminus> ?s' ; \<And>dclist dc x b c s1 s1'. \<lbrakk>?s = SCons ?dc dc s1; ?s' = SCons ?dc dc s1'; AF_typedef ?dc dclist \<in> set ?P; (dc, \<lbrace> x : b  | c \<rbrace>) \<in> set dclist;  ?P  \<turnstile> s1 ~ b [ ?bv ::= ?b ] \<setminus> s1' \<rbrakk> \<Longrightarrow> ?Pa\<rbrakk> \<Longrightarrow> ?Pa
\<lbrakk> ?P  \<turnstile> ?s ~ B_bitvec [ ?bv ::= ?b ] \<setminus> ?s' ; \<lbrakk>?s' = ?s;  ?P  \<turnstile> ?s : B_bitvec\<rbrakk> \<Longrightarrow> ?Pa\<rbrakk> \<Longrightarrow> ?Pa
\<lbrakk> ?P  \<turnstile> ?s ~ B_app ?dc ?b' [ ?bv ::= ?b ] \<setminus> ?s' ; \<And>bva dclist s1 s1' dc x b c. \<lbrakk>?s = SConsp ?dc dc ?b'[?bv::=?b]\<^sub>b\<^sub>b s1; ?s' = SConsp ?dc dc ?b' s1'; AF_typedef_poly ?dc bva dclist \<in> set ?P; atom bva \<sharp> (?b', ?bv, ?b, s1, s1'); (dc, \<lbrace> x : b  | c \<rbrace>) \<in> set dclist;  ?P  \<turnstile> s1 ~ b[bva::=?b']\<^sub>b\<^sub>b [ ?bv ::= ?b ] \<setminus> s1' \<rbrakk> \<Longrightarrow> ?Pa\<rbrakk> \<Longrightarrow> ?Pa
\<lbrakk> ?\<Theta>  \<turnstile> ?n1.0 ~ ?b1.0 [ ?bv ::= ?b' ] \<setminus> ?n1' ;  ?\<Theta>  \<turnstile> ?n2.0 ~ ?b1.0 [ ?bv ::= ?b' ] \<setminus> ?n2' ; ?s = SBool (?n1.0 = ?n2.0);    \<turnstile>\<^sub>w\<^sub>f ?\<Theta> ; ?s' = SBool (?n1' = ?n2')\<rbrakk> \<Longrightarrow> ?s = ?s'

goal (1 subgoal):
 1. s = s'
[PROOF STEP]
by metis
[PROOF STATE]
proof (state)
this:
s = s'

goal (1 subgoal):
 1. opp = eq \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s'
[PROOF STEP]
thus ?thesis
[PROOF STATE]
proof (prove)
using this:
s = s'

goal (1 subgoal):
 1.  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s'
[PROOF STEP]
using  * n n' boxed_b_BBoolI CE_op wfRCV.intros \<open>opp = Eq\<close>
[PROOF STATE]
proof (prove)
using this:
s = s'
b = B_bool
s = SBool (n1 = n2) \<and> i \<lbrakk> v1[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ n1  \<and> i \<lbrakk> v2[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ n2
s' = SBool (n1' = n2') \<and> i' \<lbrakk> v1 \<rbrakk> ~ n1'  \<and> i' \<lbrakk> v2 \<rbrakk> ~ n2'
 ?P  \<turnstile> ?s : B_bool \<Longrightarrow>  ?P  \<turnstile> ?s ~ B_bool [ ?uw ::= ?ux ] \<setminus> ?s
\<lbrakk>i' \<lbrakk> v1 \<rbrakk> ~ ?s' ; i \<lbrakk> v1[bv::=?b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ ?s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f v1 : ?b ;  \<Theta>  ; \<Gamma> ; ?b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> ?s ~ ?b [ bv ::= ?b' ] \<setminus> ?s'
\<lbrakk>i' \<lbrakk> v2 \<rbrakk> ~ ?s' ; i \<lbrakk> v2[bv::=?b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ ?s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f v2 : ?b ;  \<Theta>  ; \<Gamma> ; ?b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> ?s ~ ?b [ bv ::= ?b' ] \<setminus> ?s'
i' \<lbrakk> [ opp v1 v2 ]\<^sup>c\<^sup>e \<rbrakk> ~ s'
i \<lbrakk> [ opp v1 v2 ]\<^sup>c\<^sup>e[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s
  \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f [ opp v1 v2 ]\<^sup>c\<^sup>e : b
 \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i'
 \<Theta> ; \<Gamma> \<turnstile> i'
 ?P  \<turnstile> SBitvec ?bv : B_bitvec
 ?P  \<turnstile> SNum ?n : B_int
 ?P  \<turnstile> SBool ?b : B_bool
\<lbrakk> ?P  \<turnstile> ?s1.0 : ?b1.0;  ?P  \<turnstile> ?s2.0 : ?b2.0\<rbrakk> \<Longrightarrow>  ?P  \<turnstile> SPair ?s1.0 ?s2.0 : [ ?b1.0 , ?b2.0 ]\<^sup>b
\<lbrakk>AF_typedef ?s ?dclist \<in> set ?\<Theta>; (?dc, \<lbrace> ?x : ?b  | ?c \<rbrace>) \<in> set ?dclist;  ?\<Theta>  \<turnstile> ?s1.0 : ?b\<rbrakk> \<Longrightarrow>  ?\<Theta>  \<turnstile> SCons ?s ?dc ?s1.0 : B_id ?s
\<lbrakk>AF_typedef_poly ?s ?bv ?dclist \<in> set ?\<Theta>; (?dc, \<lbrace> ?x : ?b  | ?c \<rbrace>) \<in> set ?dclist; atom ?bv \<sharp> (?\<Theta>, SConsp ?s ?dc ?b' ?s1.0, B_app ?s ?b');  ?\<Theta>  \<turnstile> ?s1.0 : ?b[?bv::=?b']\<^sub>b\<^sub>b\<rbrakk> \<Longrightarrow>  ?\<Theta>  \<turnstile> SConsp ?s ?dc ?b' ?s1.0 : B_app ?s ?b'
 ?P  \<turnstile> SUnit : B_unit
 ?P  \<turnstile> SUt ?n : B_var ?bv
opp = eq

goal (1 subgoal):
 1.  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s'
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
 \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s'

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
 \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s'

goal (4 subgoals):
 1. \<And>x1a x2 s s' b b'. \<lbrakk>\<And>s s' b b'. \<lbrakk>i' \<lbrakk> x1a \<rbrakk> ~ s' ; i \<lbrakk> x1a[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f x1a : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s' ; \<And>s s' b b'. \<lbrakk>i' \<lbrakk> x2 \<rbrakk> ~ s' ; i \<lbrakk> x2[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f x2 : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s' ; i' \<lbrakk> [ x1a @@ x2 ]\<^sup>c\<^sup>e \<rbrakk> ~ s' ; i \<lbrakk> [ x1a @@ x2 ]\<^sup>c\<^sup>e[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f [ x1a @@ x2 ]\<^sup>c\<^sup>e : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s'
 2. \<And>x s s' b b'. \<lbrakk>\<And>s s' b b'. \<lbrakk>i' \<lbrakk> x \<rbrakk> ~ s' ; i \<lbrakk> x[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f x : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s' ; i' \<lbrakk> [#1x]\<^sup>c\<^sup>e \<rbrakk> ~ s' ; i \<lbrakk> [#1x]\<^sup>c\<^sup>e[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f [#1x]\<^sup>c\<^sup>e : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s'
 3. \<And>x s s' b b'. \<lbrakk>\<And>s s' b b'. \<lbrakk>i' \<lbrakk> x \<rbrakk> ~ s' ; i \<lbrakk> x[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f x : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s' ; i' \<lbrakk> [#2x]\<^sup>c\<^sup>e \<rbrakk> ~ s' ; i \<lbrakk> [#2x]\<^sup>c\<^sup>e[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f [#2x]\<^sup>c\<^sup>e : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s'
 4. \<And>x s s' b b'. \<lbrakk>\<And>s s' b b'. \<lbrakk>i' \<lbrakk> x \<rbrakk> ~ s' ; i \<lbrakk> x[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f x : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s' ; i' \<lbrakk> [| x |]\<^sup>c\<^sup>e \<rbrakk> ~ s' ; i \<lbrakk> [| x |]\<^sup>c\<^sup>e[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f [| x |]\<^sup>c\<^sup>e : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s'
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (4 subgoals):
 1. \<And>x1a x2 s s' b b'. \<lbrakk>\<And>s s' b b'. \<lbrakk>i' \<lbrakk> x1a \<rbrakk> ~ s' ; i \<lbrakk> x1a[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f x1a : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s' ; \<And>s s' b b'. \<lbrakk>i' \<lbrakk> x2 \<rbrakk> ~ s' ; i \<lbrakk> x2[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f x2 : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s' ; i' \<lbrakk> [ x1a @@ x2 ]\<^sup>c\<^sup>e \<rbrakk> ~ s' ; i \<lbrakk> [ x1a @@ x2 ]\<^sup>c\<^sup>e[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f [ x1a @@ x2 ]\<^sup>c\<^sup>e : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s'
 2. \<And>x s s' b b'. \<lbrakk>\<And>s s' b b'. \<lbrakk>i' \<lbrakk> x \<rbrakk> ~ s' ; i \<lbrakk> x[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f x : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s' ; i' \<lbrakk> [#1x]\<^sup>c\<^sup>e \<rbrakk> ~ s' ; i \<lbrakk> [#1x]\<^sup>c\<^sup>e[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f [#1x]\<^sup>c\<^sup>e : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s'
 3. \<And>x s s' b b'. \<lbrakk>\<And>s s' b b'. \<lbrakk>i' \<lbrakk> x \<rbrakk> ~ s' ; i \<lbrakk> x[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f x : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s' ; i' \<lbrakk> [#2x]\<^sup>c\<^sup>e \<rbrakk> ~ s' ; i \<lbrakk> [#2x]\<^sup>c\<^sup>e[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f [#2x]\<^sup>c\<^sup>e : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s'
 4. \<And>x s s' b b'. \<lbrakk>\<And>s s' b b'. \<lbrakk>i' \<lbrakk> x \<rbrakk> ~ s' ; i \<lbrakk> x[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f x : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s' ; i' \<lbrakk> [| x |]\<^sup>c\<^sup>e \<rbrakk> ~ s' ; i \<lbrakk> [| x |]\<^sup>c\<^sup>e[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f [| x |]\<^sup>c\<^sup>e : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s'
[PROOF STEP]
case (CE_concat v1 v2)
[PROOF STATE]
proof (state)
this:
\<lbrakk>i' \<lbrakk> v1 \<rbrakk> ~ ?s' ; i \<lbrakk> v1[bv::=?b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ ?s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f v1 : ?b ;  \<Theta>  ; \<Gamma> ; ?b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> ?s ~ ?b [ bv ::= ?b' ] \<setminus> ?s'
\<lbrakk>i' \<lbrakk> v2 \<rbrakk> ~ ?s' ; i \<lbrakk> v2[bv::=?b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ ?s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f v2 : ?b ;  \<Theta>  ; \<Gamma> ; ?b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> ?s ~ ?b [ bv ::= ?b' ] \<setminus> ?s'
i' \<lbrakk> [ v1 @@ v2 ]\<^sup>c\<^sup>e \<rbrakk> ~ s'
i \<lbrakk> [ v1 @@ v2 ]\<^sup>c\<^sup>e[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s
  \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f [ v1 @@ v2 ]\<^sup>c\<^sup>e : b
 \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i'
 \<Theta> ; \<Gamma> \<turnstile> i'

goal (4 subgoals):
 1. \<And>x1a x2 s s' b b'. \<lbrakk>\<And>s s' b b'. \<lbrakk>i' \<lbrakk> x1a \<rbrakk> ~ s' ; i \<lbrakk> x1a[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f x1a : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s' ; \<And>s s' b b'. \<lbrakk>i' \<lbrakk> x2 \<rbrakk> ~ s' ; i \<lbrakk> x2[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f x2 : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s' ; i' \<lbrakk> [ x1a @@ x2 ]\<^sup>c\<^sup>e \<rbrakk> ~ s' ; i \<lbrakk> [ x1a @@ x2 ]\<^sup>c\<^sup>e[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f [ x1a @@ x2 ]\<^sup>c\<^sup>e : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s'
 2. \<And>x s s' b b'. \<lbrakk>\<And>s s' b b'. \<lbrakk>i' \<lbrakk> x \<rbrakk> ~ s' ; i \<lbrakk> x[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f x : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s' ; i' \<lbrakk> [#1x]\<^sup>c\<^sup>e \<rbrakk> ~ s' ; i \<lbrakk> [#1x]\<^sup>c\<^sup>e[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f [#1x]\<^sup>c\<^sup>e : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s'
 3. \<And>x s s' b b'. \<lbrakk>\<And>s s' b b'. \<lbrakk>i' \<lbrakk> x \<rbrakk> ~ s' ; i \<lbrakk> x[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f x : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s' ; i' \<lbrakk> [#2x]\<^sup>c\<^sup>e \<rbrakk> ~ s' ; i \<lbrakk> [#2x]\<^sup>c\<^sup>e[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f [#2x]\<^sup>c\<^sup>e : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s'
 4. \<And>x s s' b b'. \<lbrakk>\<And>s s' b b'. \<lbrakk>i' \<lbrakk> x \<rbrakk> ~ s' ; i \<lbrakk> x[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f x : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s' ; i' \<lbrakk> [| x |]\<^sup>c\<^sup>e \<rbrakk> ~ s' ; i \<lbrakk> [| x |]\<^sup>c\<^sup>e[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f [| x |]\<^sup>c\<^sup>e : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s'
[PROOF STEP]
obtain bv1 and bv2 where s : "s = SBitvec (bv1 @ bv2) \<and> (i \<lbrakk> v1[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ SBitvec bv1)  \<and> i \<lbrakk> v2[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ SBitvec bv2"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (\<And>bv1 bv2. s = SBitvec (bv1 @ bv2) \<and> i \<lbrakk> v1[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ SBitvec bv1  \<and> i \<lbrakk> v2[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ SBitvec bv2  \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
using eval_e_elims(7) subst_ceb.simps CE_concat.prems(2) eval_e_elims(6) subst_ceb.simps(6)
[PROOF STATE]
proof (prove)
using this:
\<lbrakk>?i \<lbrakk> [ ?v1.0 @@ ?v2.0 ]\<^sup>c\<^sup>e \<rbrakk> ~ ?s ; \<And>bv1 bv2. \<lbrakk>?s = SBitvec (bv1 @ bv2); ?i \<lbrakk> ?v1.0 \<rbrakk> ~ SBitvec bv1 ; ?i \<lbrakk> ?v2.0 \<rbrakk> ~ SBitvec bv2 \<rbrakk> \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
[ ?v' ]\<^sup>c\<^sup>e[?bv::=?b]\<^sub>c\<^sub>e\<^sub>b = [ ?v'[?bv::=?b]\<^sub>v\<^sub>b ]\<^sup>c\<^sup>e
[ ?opp ?v1.0 ?v2.0 ]\<^sup>c\<^sup>e[?bv::=?b]\<^sub>c\<^sub>e\<^sub>b = [ ?opp ?v1.0[?bv::=?b]\<^sub>c\<^sub>e\<^sub>b ?v2.0[?bv::=?b]\<^sub>c\<^sub>e\<^sub>b ]\<^sup>c\<^sup>e
[#1?v']\<^sup>c\<^sup>e[?bv::=?b]\<^sub>c\<^sub>e\<^sub>b = [#1?v'[?bv::=?b]\<^sub>c\<^sub>e\<^sub>b]\<^sup>c\<^sup>e
[#2?v']\<^sup>c\<^sup>e[?bv::=?b]\<^sub>c\<^sub>e\<^sub>b = [#2?v'[?bv::=?b]\<^sub>c\<^sub>e\<^sub>b]\<^sup>c\<^sup>e
[| ?v' |]\<^sup>c\<^sup>e[?bv::=?b]\<^sub>c\<^sub>e\<^sub>b = [| ?v'[?bv::=?b]\<^sub>c\<^sub>e\<^sub>b |]\<^sup>c\<^sup>e
[ ?v1.0 @@ ?v2.0 ]\<^sup>c\<^sup>e[?bv::=?b]\<^sub>c\<^sub>e\<^sub>b = [ ?v1.0[?bv::=?b]\<^sub>c\<^sub>e\<^sub>b @@ ?v2.0[?bv::=?b]\<^sub>c\<^sub>e\<^sub>b ]\<^sup>c\<^sup>e
i \<lbrakk> [ v1 @@ v2 ]\<^sup>c\<^sup>e[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s
\<lbrakk>?i \<lbrakk> [#2?v]\<^sup>c\<^sup>e \<rbrakk> ~ ?s ; \<And>v1. ?i \<lbrakk> ?v \<rbrakk> ~ SPair v1 ?s  \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
[ ?v1.0 @@ ?v2.0 ]\<^sup>c\<^sup>e[?bv::=?b]\<^sub>c\<^sub>e\<^sub>b = [ ?v1.0[?bv::=?b]\<^sub>c\<^sub>e\<^sub>b @@ ?v2.0[?bv::=?b]\<^sub>c\<^sub>e\<^sub>b ]\<^sup>c\<^sup>e

goal (1 subgoal):
 1. (\<And>bv1 bv2. s = SBitvec (bv1 @ bv2) \<and> i \<lbrakk> v1[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ SBitvec bv1  \<and> i \<lbrakk> v2[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ SBitvec bv2  \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by metis
[PROOF STATE]
proof (state)
this:
s = SBitvec (bv1 @ bv2) \<and> i \<lbrakk> v1[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ SBitvec bv1  \<and> i \<lbrakk> v2[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ SBitvec bv2

goal (4 subgoals):
 1. \<And>x1a x2 s s' b b'. \<lbrakk>\<And>s s' b b'. \<lbrakk>i' \<lbrakk> x1a \<rbrakk> ~ s' ; i \<lbrakk> x1a[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f x1a : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s' ; \<And>s s' b b'. \<lbrakk>i' \<lbrakk> x2 \<rbrakk> ~ s' ; i \<lbrakk> x2[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f x2 : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s' ; i' \<lbrakk> [ x1a @@ x2 ]\<^sup>c\<^sup>e \<rbrakk> ~ s' ; i \<lbrakk> [ x1a @@ x2 ]\<^sup>c\<^sup>e[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f [ x1a @@ x2 ]\<^sup>c\<^sup>e : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s'
 2. \<And>x s s' b b'. \<lbrakk>\<And>s s' b b'. \<lbrakk>i' \<lbrakk> x \<rbrakk> ~ s' ; i \<lbrakk> x[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f x : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s' ; i' \<lbrakk> [#1x]\<^sup>c\<^sup>e \<rbrakk> ~ s' ; i \<lbrakk> [#1x]\<^sup>c\<^sup>e[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f [#1x]\<^sup>c\<^sup>e : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s'
 3. \<And>x s s' b b'. \<lbrakk>\<And>s s' b b'. \<lbrakk>i' \<lbrakk> x \<rbrakk> ~ s' ; i \<lbrakk> x[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f x : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s' ; i' \<lbrakk> [#2x]\<^sup>c\<^sup>e \<rbrakk> ~ s' ; i \<lbrakk> [#2x]\<^sup>c\<^sup>e[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f [#2x]\<^sup>c\<^sup>e : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s'
 4. \<And>x s s' b b'. \<lbrakk>\<And>s s' b b'. \<lbrakk>i' \<lbrakk> x \<rbrakk> ~ s' ; i \<lbrakk> x[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f x : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s' ; i' \<lbrakk> [| x |]\<^sup>c\<^sup>e \<rbrakk> ~ s' ; i \<lbrakk> [| x |]\<^sup>c\<^sup>e[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f [| x |]\<^sup>c\<^sup>e : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s'
[PROOF STEP]
obtain bv1' and bv2' where s' : "s' = SBitvec (bv1' @ bv2') \<and> i' \<lbrakk> v1 \<rbrakk> ~ SBitvec bv1'  \<and> i' \<lbrakk> v2 \<rbrakk> ~ SBitvec bv2'"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (\<And>bv1' bv2'. s' = SBitvec (bv1' @ bv2') \<and> i' \<lbrakk> v1 \<rbrakk> ~ SBitvec bv1'  \<and> i' \<lbrakk> v2 \<rbrakk> ~ SBitvec bv2'  \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
using eval_e_elims(7) CE_concat
[PROOF STATE]
proof (prove)
using this:
\<lbrakk>?i \<lbrakk> [ ?v1.0 @@ ?v2.0 ]\<^sup>c\<^sup>e \<rbrakk> ~ ?s ; \<And>bv1 bv2. \<lbrakk>?s = SBitvec (bv1 @ bv2); ?i \<lbrakk> ?v1.0 \<rbrakk> ~ SBitvec bv1 ; ?i \<lbrakk> ?v2.0 \<rbrakk> ~ SBitvec bv2 \<rbrakk> \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>i' \<lbrakk> v1 \<rbrakk> ~ ?s' ; i \<lbrakk> v1[bv::=?b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ ?s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f v1 : ?b ;  \<Theta>  ; \<Gamma> ; ?b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> ?s ~ ?b [ bv ::= ?b' ] \<setminus> ?s'
\<lbrakk>i' \<lbrakk> v2 \<rbrakk> ~ ?s' ; i \<lbrakk> v2[bv::=?b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ ?s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f v2 : ?b ;  \<Theta>  ; \<Gamma> ; ?b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> ?s ~ ?b [ bv ::= ?b' ] \<setminus> ?s'
i' \<lbrakk> [ v1 @@ v2 ]\<^sup>c\<^sup>e \<rbrakk> ~ s'
i \<lbrakk> [ v1 @@ v2 ]\<^sup>c\<^sup>e[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s
  \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f [ v1 @@ v2 ]\<^sup>c\<^sup>e : b
 \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i'
 \<Theta> ; \<Gamma> \<turnstile> i'

goal (1 subgoal):
 1. (\<And>bv1' bv2'. s' = SBitvec (bv1' @ bv2') \<and> i' \<lbrakk> v1 \<rbrakk> ~ SBitvec bv1'  \<and> i' \<lbrakk> v2 \<rbrakk> ~ SBitvec bv2'  \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by metis
[PROOF STATE]
proof (state)
this:
s' = SBitvec (bv1' @ bv2') \<and> i' \<lbrakk> v1 \<rbrakk> ~ SBitvec bv1'  \<and> i' \<lbrakk> v2 \<rbrakk> ~ SBitvec bv2'

goal (4 subgoals):
 1. \<And>x1a x2 s s' b b'. \<lbrakk>\<And>s s' b b'. \<lbrakk>i' \<lbrakk> x1a \<rbrakk> ~ s' ; i \<lbrakk> x1a[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f x1a : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s' ; \<And>s s' b b'. \<lbrakk>i' \<lbrakk> x2 \<rbrakk> ~ s' ; i \<lbrakk> x2[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f x2 : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s' ; i' \<lbrakk> [ x1a @@ x2 ]\<^sup>c\<^sup>e \<rbrakk> ~ s' ; i \<lbrakk> [ x1a @@ x2 ]\<^sup>c\<^sup>e[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f [ x1a @@ x2 ]\<^sup>c\<^sup>e : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s'
 2. \<And>x s s' b b'. \<lbrakk>\<And>s s' b b'. \<lbrakk>i' \<lbrakk> x \<rbrakk> ~ s' ; i \<lbrakk> x[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f x : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s' ; i' \<lbrakk> [#1x]\<^sup>c\<^sup>e \<rbrakk> ~ s' ; i \<lbrakk> [#1x]\<^sup>c\<^sup>e[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f [#1x]\<^sup>c\<^sup>e : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s'
 3. \<And>x s s' b b'. \<lbrakk>\<And>s s' b b'. \<lbrakk>i' \<lbrakk> x \<rbrakk> ~ s' ; i \<lbrakk> x[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f x : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s' ; i' \<lbrakk> [#2x]\<^sup>c\<^sup>e \<rbrakk> ~ s' ; i \<lbrakk> [#2x]\<^sup>c\<^sup>e[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f [#2x]\<^sup>c\<^sup>e : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s'
 4. \<And>x s s' b b'. \<lbrakk>\<And>s s' b b'. \<lbrakk>i' \<lbrakk> x \<rbrakk> ~ s' ; i \<lbrakk> x[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f x : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s' ; i' \<lbrakk> [| x |]\<^sup>c\<^sup>e \<rbrakk> ~ s' ; i \<lbrakk> [| x |]\<^sup>c\<^sup>e[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f [| x |]\<^sup>c\<^sup>e : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s'
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
s' = SBitvec (bv1' @ bv2') \<and> i' \<lbrakk> v1 \<rbrakk> ~ SBitvec bv1'  \<and> i' \<lbrakk> v2 \<rbrakk> ~ SBitvec bv2'
[PROOF STEP]
show ?case
[PROOF STATE]
proof (prove)
using this:
s' = SBitvec (bv1' @ bv2') \<and> i' \<lbrakk> v1 \<rbrakk> ~ SBitvec bv1'  \<and> i' \<lbrakk> v2 \<rbrakk> ~ SBitvec bv2'

goal (1 subgoal):
 1.  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s'
[PROOF STEP]
using boxed_i_eval_v_boxed_b wfCE_elims s s' CE_concat
[PROOF STATE]
proof (prove)
using this:
s' = SBitvec (bv1' @ bv2') \<and> i' \<lbrakk> v1 \<rbrakk> ~ SBitvec bv1'  \<and> i' \<lbrakk> v2 \<rbrakk> ~ SBitvec bv2'
\<lbrakk> ?\<Theta>  ; ?\<Gamma> ; ?b' , ?bv \<turnstile> ?i \<approx> ?i'; ?i \<lbrakk> ?v[?bv::=?b']\<^sub>v\<^sub>b \<rbrakk> ~ ?s ; ?i' \<lbrakk> ?v \<rbrakk> ~ ?s' ;  ?\<Theta> ; ?B ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v : ?b ;  ?\<Theta> ; ?\<Gamma> \<turnstile> ?i'\<rbrakk> \<Longrightarrow>  ?\<Theta>  \<turnstile> ?s ~ ?b [ ?bv ::= ?b' ] \<setminus> ?s'
\<lbrakk>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [ ?v ]\<^sup>c\<^sup>e : ?b ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v : ?b  \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [ plus ?v1.0 ?v2.0 ]\<^sup>c\<^sup>e : ?b ; \<lbrakk>?b = B_int;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : B_int ;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v2.0 : B_int \<rbrakk> \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [ leq ?v1.0 ?v2.0 ]\<^sup>c\<^sup>e : ?b ; \<lbrakk>?b = B_bool;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : B_int ;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v2.0 : B_int \<rbrakk> \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [#1?v1.0]\<^sup>c\<^sup>e : ?b ; \<And>b2.   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : [ ?b , b2 ]\<^sup>b  \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [#2?v1.0]\<^sup>c\<^sup>e : ?b ; \<And>b1.   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : [ b1 , ?b ]\<^sup>b  \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [ ?v1.0 @@ ?v2.0 ]\<^sup>c\<^sup>e : ?b ; \<lbrakk>?b = B_bitvec;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : B_bitvec ;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v2.0 : B_bitvec \<rbrakk> \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [| ?v1.0 |]\<^sup>c\<^sup>e : ?b ; \<lbrakk>?b = B_int;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : B_bitvec \<rbrakk> \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [ ?opp ?v1.0 ?v2.0 ]\<^sup>c\<^sup>e : ?b ; \<lbrakk>?opp = plus; ?b = B_int;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : B_int ;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v2.0 : B_int \<rbrakk> \<Longrightarrow> ?P; \<lbrakk>?opp = leq; ?b = B_bool;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : B_int ;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v2.0 : B_int \<rbrakk> \<Longrightarrow> ?P; \<And>b. \<lbrakk>?opp = eq; ?b = B_bool;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : b ;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v2.0 : b \<rbrakk> \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [ eq ?v1.0 ?v2.0 ]\<^sup>c\<^sup>e : ?b ; \<And>b. \<lbrakk>?b = B_bool;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : b ;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v2.0 : b \<rbrakk> \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
s = SBitvec (bv1 @ bv2) \<and> i \<lbrakk> v1[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ SBitvec bv1  \<and> i \<lbrakk> v2[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ SBitvec bv2
s' = SBitvec (bv1' @ bv2') \<and> i' \<lbrakk> v1 \<rbrakk> ~ SBitvec bv1'  \<and> i' \<lbrakk> v2 \<rbrakk> ~ SBitvec bv2'
\<lbrakk>i' \<lbrakk> v1 \<rbrakk> ~ ?s' ; i \<lbrakk> v1[bv::=?b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ ?s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f v1 : ?b ;  \<Theta>  ; \<Gamma> ; ?b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> ?s ~ ?b [ bv ::= ?b' ] \<setminus> ?s'
\<lbrakk>i' \<lbrakk> v2 \<rbrakk> ~ ?s' ; i \<lbrakk> v2[bv::=?b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ ?s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f v2 : ?b ;  \<Theta>  ; \<Gamma> ; ?b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> ?s ~ ?b [ bv ::= ?b' ] \<setminus> ?s'
i' \<lbrakk> [ v1 @@ v2 ]\<^sup>c\<^sup>e \<rbrakk> ~ s'
i \<lbrakk> [ v1 @@ v2 ]\<^sup>c\<^sup>e[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s
  \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f [ v1 @@ v2 ]\<^sup>c\<^sup>e : b
 \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i'
 \<Theta> ; \<Gamma> \<turnstile> i'

goal (1 subgoal):
 1.  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s'
[PROOF STEP]
by (metis CE_concat.prems(3) assms assms(5) wfRCV_BBitvecI boxed_b_Bbitvec boxed_b_elims(7) eval_e_concatI eval_e_uniqueness)
[PROOF STATE]
proof (state)
this:
 \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s'

goal (3 subgoals):
 1. \<And>x s s' b b'. \<lbrakk>\<And>s s' b b'. \<lbrakk>i' \<lbrakk> x \<rbrakk> ~ s' ; i \<lbrakk> x[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f x : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s' ; i' \<lbrakk> [#1x]\<^sup>c\<^sup>e \<rbrakk> ~ s' ; i \<lbrakk> [#1x]\<^sup>c\<^sup>e[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f [#1x]\<^sup>c\<^sup>e : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s'
 2. \<And>x s s' b b'. \<lbrakk>\<And>s s' b b'. \<lbrakk>i' \<lbrakk> x \<rbrakk> ~ s' ; i \<lbrakk> x[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f x : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s' ; i' \<lbrakk> [#2x]\<^sup>c\<^sup>e \<rbrakk> ~ s' ; i \<lbrakk> [#2x]\<^sup>c\<^sup>e[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f [#2x]\<^sup>c\<^sup>e : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s'
 3. \<And>x s s' b b'. \<lbrakk>\<And>s s' b b'. \<lbrakk>i' \<lbrakk> x \<rbrakk> ~ s' ; i \<lbrakk> x[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f x : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s' ; i' \<lbrakk> [| x |]\<^sup>c\<^sup>e \<rbrakk> ~ s' ; i \<lbrakk> [| x |]\<^sup>c\<^sup>e[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f [| x |]\<^sup>c\<^sup>e : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s'
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (3 subgoals):
 1. \<And>x s s' b b'. \<lbrakk>\<And>s s' b b'. \<lbrakk>i' \<lbrakk> x \<rbrakk> ~ s' ; i \<lbrakk> x[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f x : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s' ; i' \<lbrakk> [#1x]\<^sup>c\<^sup>e \<rbrakk> ~ s' ; i \<lbrakk> [#1x]\<^sup>c\<^sup>e[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f [#1x]\<^sup>c\<^sup>e : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s'
 2. \<And>x s s' b b'. \<lbrakk>\<And>s s' b b'. \<lbrakk>i' \<lbrakk> x \<rbrakk> ~ s' ; i \<lbrakk> x[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f x : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s' ; i' \<lbrakk> [#2x]\<^sup>c\<^sup>e \<rbrakk> ~ s' ; i \<lbrakk> [#2x]\<^sup>c\<^sup>e[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f [#2x]\<^sup>c\<^sup>e : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s'
 3. \<And>x s s' b b'. \<lbrakk>\<And>s s' b b'. \<lbrakk>i' \<lbrakk> x \<rbrakk> ~ s' ; i \<lbrakk> x[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f x : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s' ; i' \<lbrakk> [| x |]\<^sup>c\<^sup>e \<rbrakk> ~ s' ; i \<lbrakk> [| x |]\<^sup>c\<^sup>e[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f [| x |]\<^sup>c\<^sup>e : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s'
[PROOF STEP]
case (CE_fst ce)
[PROOF STATE]
proof (state)
this:
\<lbrakk>i' \<lbrakk> ce \<rbrakk> ~ ?s' ; i \<lbrakk> ce[bv::=?b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ ?s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f ce : ?b ;  \<Theta>  ; \<Gamma> ; ?b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> ?s ~ ?b [ bv ::= ?b' ] \<setminus> ?s'
i' \<lbrakk> [#1ce]\<^sup>c\<^sup>e \<rbrakk> ~ s'
i \<lbrakk> [#1ce]\<^sup>c\<^sup>e[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s
  \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f [#1ce]\<^sup>c\<^sup>e : b
 \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i'
 \<Theta> ; \<Gamma> \<turnstile> i'

goal (3 subgoals):
 1. \<And>x s s' b b'. \<lbrakk>\<And>s s' b b'. \<lbrakk>i' \<lbrakk> x \<rbrakk> ~ s' ; i \<lbrakk> x[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f x : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s' ; i' \<lbrakk> [#1x]\<^sup>c\<^sup>e \<rbrakk> ~ s' ; i \<lbrakk> [#1x]\<^sup>c\<^sup>e[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f [#1x]\<^sup>c\<^sup>e : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s'
 2. \<And>x s s' b b'. \<lbrakk>\<And>s s' b b'. \<lbrakk>i' \<lbrakk> x \<rbrakk> ~ s' ; i \<lbrakk> x[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f x : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s' ; i' \<lbrakk> [#2x]\<^sup>c\<^sup>e \<rbrakk> ~ s' ; i \<lbrakk> [#2x]\<^sup>c\<^sup>e[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f [#2x]\<^sup>c\<^sup>e : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s'
 3. \<And>x s s' b b'. \<lbrakk>\<And>s s' b b'. \<lbrakk>i' \<lbrakk> x \<rbrakk> ~ s' ; i \<lbrakk> x[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f x : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s' ; i' \<lbrakk> [| x |]\<^sup>c\<^sup>e \<rbrakk> ~ s' ; i \<lbrakk> [| x |]\<^sup>c\<^sup>e[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f [| x |]\<^sup>c\<^sup>e : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s'
[PROOF STEP]
obtain  s2 where 1:"i \<lbrakk> ce[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ SPair s s2"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (\<And>s2. i \<lbrakk> ce[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ SPair s s2  \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
using CE_fst eval_e_elims subst_ceb.simps
[PROOF STATE]
proof (prove)
using this:
\<lbrakk>i' \<lbrakk> ce \<rbrakk> ~ ?s' ; i \<lbrakk> ce[bv::=?b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ ?s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f ce : ?b ;  \<Theta>  ; \<Gamma> ; ?b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> ?s ~ ?b [ bv ::= ?b' ] \<setminus> ?s'
i' \<lbrakk> [#1ce]\<^sup>c\<^sup>e \<rbrakk> ~ s'
i \<lbrakk> [#1ce]\<^sup>c\<^sup>e[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s
  \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f [#1ce]\<^sup>c\<^sup>e : b
 \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i'
 \<Theta> ; \<Gamma> \<turnstile> i'
\<lbrakk>?i \<lbrakk> [ ?v ]\<^sup>c\<^sup>e \<rbrakk> ~ ?s ; ?i \<lbrakk> ?v \<rbrakk> ~ ?s  \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>?i \<lbrakk> [ plus ?v1.0 ?v2.0 ]\<^sup>c\<^sup>e \<rbrakk> ~ ?s ; \<And>n1 n2. \<lbrakk>?s = SNum (n1 + n2); ?i \<lbrakk> ?v1.0 \<rbrakk> ~ SNum n1 ; ?i \<lbrakk> ?v2.0 \<rbrakk> ~ SNum n2 \<rbrakk> \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>?i \<lbrakk> [ leq ?v1.0 ?v2.0 ]\<^sup>c\<^sup>e \<rbrakk> ~ ?s ; \<And>n1 n2. \<lbrakk>?s = SBool (n1 \<le> n2); ?i \<lbrakk> ?v1.0 \<rbrakk> ~ SNum n1 ; ?i \<lbrakk> ?v2.0 \<rbrakk> ~ SNum n2 \<rbrakk> \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>?i \<lbrakk> [ eq ?v1.0 ?v2.0 ]\<^sup>c\<^sup>e \<rbrakk> ~ ?s ; \<And>s1 s2. \<lbrakk>?s = SBool (s1 = s2); ?i \<lbrakk> ?v1.0 \<rbrakk> ~ s1 ; ?i \<lbrakk> ?v2.0 \<rbrakk> ~ s2 \<rbrakk> \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>?i \<lbrakk> [#1?v]\<^sup>c\<^sup>e \<rbrakk> ~ ?s ; \<And>v2. ?i \<lbrakk> ?v \<rbrakk> ~ SPair ?s v2  \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>?i \<lbrakk> [#2?v]\<^sup>c\<^sup>e \<rbrakk> ~ ?s ; \<And>v1. ?i \<lbrakk> ?v \<rbrakk> ~ SPair v1 ?s  \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>?i \<lbrakk> [ ?v1.0 @@ ?v2.0 ]\<^sup>c\<^sup>e \<rbrakk> ~ ?s ; \<And>bv1 bv2. \<lbrakk>?s = SBitvec (bv1 @ bv2); ?i \<lbrakk> ?v1.0 \<rbrakk> ~ SBitvec bv1 ; ?i \<lbrakk> ?v2.0 \<rbrakk> ~ SBitvec bv2 \<rbrakk> \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>?i \<lbrakk> [| ?v |]\<^sup>c\<^sup>e \<rbrakk> ~ ?s ; \<And>bv. \<lbrakk>?s = SNum (int (length bv)); ?i \<lbrakk> ?v \<rbrakk> ~ SBitvec bv \<rbrakk> \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
[ ?v' ]\<^sup>c\<^sup>e[?bv::=?b]\<^sub>c\<^sub>e\<^sub>b = [ ?v'[?bv::=?b]\<^sub>v\<^sub>b ]\<^sup>c\<^sup>e
[ ?opp ?v1.0 ?v2.0 ]\<^sup>c\<^sup>e[?bv::=?b]\<^sub>c\<^sub>e\<^sub>b = [ ?opp ?v1.0[?bv::=?b]\<^sub>c\<^sub>e\<^sub>b ?v2.0[?bv::=?b]\<^sub>c\<^sub>e\<^sub>b ]\<^sup>c\<^sup>e
[#1?v']\<^sup>c\<^sup>e[?bv::=?b]\<^sub>c\<^sub>e\<^sub>b = [#1?v'[?bv::=?b]\<^sub>c\<^sub>e\<^sub>b]\<^sup>c\<^sup>e
[#2?v']\<^sup>c\<^sup>e[?bv::=?b]\<^sub>c\<^sub>e\<^sub>b = [#2?v'[?bv::=?b]\<^sub>c\<^sub>e\<^sub>b]\<^sup>c\<^sup>e
[| ?v' |]\<^sup>c\<^sup>e[?bv::=?b]\<^sub>c\<^sub>e\<^sub>b = [| ?v'[?bv::=?b]\<^sub>c\<^sub>e\<^sub>b |]\<^sup>c\<^sup>e
[ ?v1.0 @@ ?v2.0 ]\<^sup>c\<^sup>e[?bv::=?b]\<^sub>c\<^sub>e\<^sub>b = [ ?v1.0[?bv::=?b]\<^sub>c\<^sub>e\<^sub>b @@ ?v2.0[?bv::=?b]\<^sub>c\<^sub>e\<^sub>b ]\<^sup>c\<^sup>e

goal (1 subgoal):
 1. (\<And>s2. i \<lbrakk> ce[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ SPair s s2  \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by metis
[PROOF STATE]
proof (state)
this:
i \<lbrakk> ce[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ SPair s s2

goal (3 subgoals):
 1. \<And>x s s' b b'. \<lbrakk>\<And>s s' b b'. \<lbrakk>i' \<lbrakk> x \<rbrakk> ~ s' ; i \<lbrakk> x[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f x : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s' ; i' \<lbrakk> [#1x]\<^sup>c\<^sup>e \<rbrakk> ~ s' ; i \<lbrakk> [#1x]\<^sup>c\<^sup>e[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f [#1x]\<^sup>c\<^sup>e : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s'
 2. \<And>x s s' b b'. \<lbrakk>\<And>s s' b b'. \<lbrakk>i' \<lbrakk> x \<rbrakk> ~ s' ; i \<lbrakk> x[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f x : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s' ; i' \<lbrakk> [#2x]\<^sup>c\<^sup>e \<rbrakk> ~ s' ; i \<lbrakk> [#2x]\<^sup>c\<^sup>e[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f [#2x]\<^sup>c\<^sup>e : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s'
 3. \<And>x s s' b b'. \<lbrakk>\<And>s s' b b'. \<lbrakk>i' \<lbrakk> x \<rbrakk> ~ s' ; i \<lbrakk> x[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f x : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s' ; i' \<lbrakk> [| x |]\<^sup>c\<^sup>e \<rbrakk> ~ s' ; i \<lbrakk> [| x |]\<^sup>c\<^sup>e[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f [| x |]\<^sup>c\<^sup>e : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s'
[PROOF STEP]
obtain  s2' where 2:"i' \<lbrakk> ce \<rbrakk> ~ SPair s' s2'"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (\<And>s2'. i' \<lbrakk> ce \<rbrakk> ~ SPair s' s2'  \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
using CE_fst eval_e_elims
[PROOF STATE]
proof (prove)
using this:
\<lbrakk>i' \<lbrakk> ce \<rbrakk> ~ ?s' ; i \<lbrakk> ce[bv::=?b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ ?s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f ce : ?b ;  \<Theta>  ; \<Gamma> ; ?b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> ?s ~ ?b [ bv ::= ?b' ] \<setminus> ?s'
i' \<lbrakk> [#1ce]\<^sup>c\<^sup>e \<rbrakk> ~ s'
i \<lbrakk> [#1ce]\<^sup>c\<^sup>e[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s
  \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f [#1ce]\<^sup>c\<^sup>e : b
 \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i'
 \<Theta> ; \<Gamma> \<turnstile> i'
\<lbrakk>?i \<lbrakk> [ ?v ]\<^sup>c\<^sup>e \<rbrakk> ~ ?s ; ?i \<lbrakk> ?v \<rbrakk> ~ ?s  \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>?i \<lbrakk> [ plus ?v1.0 ?v2.0 ]\<^sup>c\<^sup>e \<rbrakk> ~ ?s ; \<And>n1 n2. \<lbrakk>?s = SNum (n1 + n2); ?i \<lbrakk> ?v1.0 \<rbrakk> ~ SNum n1 ; ?i \<lbrakk> ?v2.0 \<rbrakk> ~ SNum n2 \<rbrakk> \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>?i \<lbrakk> [ leq ?v1.0 ?v2.0 ]\<^sup>c\<^sup>e \<rbrakk> ~ ?s ; \<And>n1 n2. \<lbrakk>?s = SBool (n1 \<le> n2); ?i \<lbrakk> ?v1.0 \<rbrakk> ~ SNum n1 ; ?i \<lbrakk> ?v2.0 \<rbrakk> ~ SNum n2 \<rbrakk> \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>?i \<lbrakk> [ eq ?v1.0 ?v2.0 ]\<^sup>c\<^sup>e \<rbrakk> ~ ?s ; \<And>s1 s2. \<lbrakk>?s = SBool (s1 = s2); ?i \<lbrakk> ?v1.0 \<rbrakk> ~ s1 ; ?i \<lbrakk> ?v2.0 \<rbrakk> ~ s2 \<rbrakk> \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>?i \<lbrakk> [#1?v]\<^sup>c\<^sup>e \<rbrakk> ~ ?s ; \<And>v2. ?i \<lbrakk> ?v \<rbrakk> ~ SPair ?s v2  \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>?i \<lbrakk> [#2?v]\<^sup>c\<^sup>e \<rbrakk> ~ ?s ; \<And>v1. ?i \<lbrakk> ?v \<rbrakk> ~ SPair v1 ?s  \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>?i \<lbrakk> [ ?v1.0 @@ ?v2.0 ]\<^sup>c\<^sup>e \<rbrakk> ~ ?s ; \<And>bv1 bv2. \<lbrakk>?s = SBitvec (bv1 @ bv2); ?i \<lbrakk> ?v1.0 \<rbrakk> ~ SBitvec bv1 ; ?i \<lbrakk> ?v2.0 \<rbrakk> ~ SBitvec bv2 \<rbrakk> \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>?i \<lbrakk> [| ?v |]\<^sup>c\<^sup>e \<rbrakk> ~ ?s ; \<And>bv. \<lbrakk>?s = SNum (int (length bv)); ?i \<lbrakk> ?v \<rbrakk> ~ SBitvec bv \<rbrakk> \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P

goal (1 subgoal):
 1. (\<And>s2'. i' \<lbrakk> ce \<rbrakk> ~ SPair s' s2'  \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by metis
[PROOF STATE]
proof (state)
this:
i' \<lbrakk> ce \<rbrakk> ~ SPair s' s2'

goal (3 subgoals):
 1. \<And>x s s' b b'. \<lbrakk>\<And>s s' b b'. \<lbrakk>i' \<lbrakk> x \<rbrakk> ~ s' ; i \<lbrakk> x[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f x : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s' ; i' \<lbrakk> [#1x]\<^sup>c\<^sup>e \<rbrakk> ~ s' ; i \<lbrakk> [#1x]\<^sup>c\<^sup>e[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f [#1x]\<^sup>c\<^sup>e : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s'
 2. \<And>x s s' b b'. \<lbrakk>\<And>s s' b b'. \<lbrakk>i' \<lbrakk> x \<rbrakk> ~ s' ; i \<lbrakk> x[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f x : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s' ; i' \<lbrakk> [#2x]\<^sup>c\<^sup>e \<rbrakk> ~ s' ; i \<lbrakk> [#2x]\<^sup>c\<^sup>e[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f [#2x]\<^sup>c\<^sup>e : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s'
 3. \<And>x s s' b b'. \<lbrakk>\<And>s s' b b'. \<lbrakk>i' \<lbrakk> x \<rbrakk> ~ s' ; i \<lbrakk> x[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f x : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s' ; i' \<lbrakk> [| x |]\<^sup>c\<^sup>e \<rbrakk> ~ s' ; i \<lbrakk> [| x |]\<^sup>c\<^sup>e[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f [| x |]\<^sup>c\<^sup>e : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s'
[PROOF STEP]
obtain b2 where 3:"wfCE \<Theta> B \<Gamma> ce (B_pair b b2)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (\<And>b2.   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f ce : [ b , b2 ]\<^sup>b  \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
using wfCE_elims(4) CE_fst
[PROOF STATE]
proof (prove)
using this:
\<lbrakk>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [#1?v1.0]\<^sup>c\<^sup>e : ?b ; \<And>b2.   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : [ ?b , b2 ]\<^sup>b  \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>i' \<lbrakk> ce \<rbrakk> ~ ?s' ; i \<lbrakk> ce[bv::=?b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ ?s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f ce : ?b ;  \<Theta>  ; \<Gamma> ; ?b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> ?s ~ ?b [ bv ::= ?b' ] \<setminus> ?s'
i' \<lbrakk> [#1ce]\<^sup>c\<^sup>e \<rbrakk> ~ s'
i \<lbrakk> [#1ce]\<^sup>c\<^sup>e[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s
  \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f [#1ce]\<^sup>c\<^sup>e : b
 \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i'
 \<Theta> ; \<Gamma> \<turnstile> i'

goal (1 subgoal):
 1. (\<And>b2.   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f ce : [ b , b2 ]\<^sup>b  \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by metis
[PROOF STATE]
proof (state)
this:
  \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f ce : [ b , b2 ]\<^sup>b

goal (3 subgoals):
 1. \<And>x s s' b b'. \<lbrakk>\<And>s s' b b'. \<lbrakk>i' \<lbrakk> x \<rbrakk> ~ s' ; i \<lbrakk> x[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f x : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s' ; i' \<lbrakk> [#1x]\<^sup>c\<^sup>e \<rbrakk> ~ s' ; i \<lbrakk> [#1x]\<^sup>c\<^sup>e[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f [#1x]\<^sup>c\<^sup>e : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s'
 2. \<And>x s s' b b'. \<lbrakk>\<And>s s' b b'. \<lbrakk>i' \<lbrakk> x \<rbrakk> ~ s' ; i \<lbrakk> x[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f x : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s' ; i' \<lbrakk> [#2x]\<^sup>c\<^sup>e \<rbrakk> ~ s' ; i \<lbrakk> [#2x]\<^sup>c\<^sup>e[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f [#2x]\<^sup>c\<^sup>e : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s'
 3. \<And>x s s' b b'. \<lbrakk>\<And>s s' b b'. \<lbrakk>i' \<lbrakk> x \<rbrakk> ~ s' ; i \<lbrakk> x[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f x : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s' ; i' \<lbrakk> [| x |]\<^sup>c\<^sup>e \<rbrakk> ~ s' ; i \<lbrakk> [| x |]\<^sup>c\<^sup>e[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f [| x |]\<^sup>c\<^sup>e : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s'
[PROOF STEP]
have "boxed_b \<Theta> (SPair s s2) (B_pair b b2) bv b' (SPair s' s2')"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1.  \<Theta>  \<turnstile> SPair s s2 ~ [ b , b2 ]\<^sup>b [ bv ::= b' ] \<setminus> SPair s' s2'
[PROOF STEP]
using 1 2 3 CE_fst boxed_i_eval_v_boxed_b boxed_b_BPairI
[PROOF STATE]
proof (prove)
using this:
i \<lbrakk> ce[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ SPair s s2
i' \<lbrakk> ce \<rbrakk> ~ SPair s' s2'
  \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f ce : [ b , b2 ]\<^sup>b
\<lbrakk>i' \<lbrakk> ce \<rbrakk> ~ ?s' ; i \<lbrakk> ce[bv::=?b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ ?s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f ce : ?b ;  \<Theta>  ; \<Gamma> ; ?b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> ?s ~ ?b [ bv ::= ?b' ] \<setminus> ?s'
i' \<lbrakk> [#1ce]\<^sup>c\<^sup>e \<rbrakk> ~ s'
i \<lbrakk> [#1ce]\<^sup>c\<^sup>e[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s
  \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f [#1ce]\<^sup>c\<^sup>e : b
 \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i'
 \<Theta> ; \<Gamma> \<turnstile> i'
\<lbrakk> ?\<Theta>  ; ?\<Gamma> ; ?b' , ?bv \<turnstile> ?i \<approx> ?i'; ?i \<lbrakk> ?v[?bv::=?b']\<^sub>v\<^sub>b \<rbrakk> ~ ?s ; ?i' \<lbrakk> ?v \<rbrakk> ~ ?s' ;  ?\<Theta> ; ?B ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v : ?b ;  ?\<Theta> ; ?\<Gamma> \<turnstile> ?i'\<rbrakk> \<Longrightarrow>  ?\<Theta>  \<turnstile> ?s ~ ?b [ ?bv ::= ?b' ] \<setminus> ?s'
\<lbrakk> ?P  \<turnstile> ?s1.0 ~ ?b1.0 [ ?bv ::= ?b ] \<setminus> ?s1' ;  ?P  \<turnstile> ?s2.0 ~ ?b2.0 [ ?bv ::= ?b ] \<setminus> ?s2' \<rbrakk> \<Longrightarrow>  ?P  \<turnstile> SPair ?s1.0 ?s2.0 ~ [ ?b1.0 , ?b2.0 ]\<^sup>b [ ?bv ::= ?b ] \<setminus> SPair ?s1' ?s2'

goal (1 subgoal):
 1.  \<Theta>  \<turnstile> SPair s s2 ~ [ b , b2 ]\<^sup>b [ bv ::= b' ] \<setminus> SPair s' s2'
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
 \<Theta>  \<turnstile> SPair s s2 ~ [ b , b2 ]\<^sup>b [ bv ::= b' ] \<setminus> SPair s' s2'

goal (3 subgoals):
 1. \<And>x s s' b b'. \<lbrakk>\<And>s s' b b'. \<lbrakk>i' \<lbrakk> x \<rbrakk> ~ s' ; i \<lbrakk> x[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f x : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s' ; i' \<lbrakk> [#1x]\<^sup>c\<^sup>e \<rbrakk> ~ s' ; i \<lbrakk> [#1x]\<^sup>c\<^sup>e[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f [#1x]\<^sup>c\<^sup>e : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s'
 2. \<And>x s s' b b'. \<lbrakk>\<And>s s' b b'. \<lbrakk>i' \<lbrakk> x \<rbrakk> ~ s' ; i \<lbrakk> x[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f x : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s' ; i' \<lbrakk> [#2x]\<^sup>c\<^sup>e \<rbrakk> ~ s' ; i \<lbrakk> [#2x]\<^sup>c\<^sup>e[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f [#2x]\<^sup>c\<^sup>e : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s'
 3. \<And>x s s' b b'. \<lbrakk>\<And>s s' b b'. \<lbrakk>i' \<lbrakk> x \<rbrakk> ~ s' ; i \<lbrakk> x[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f x : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s' ; i' \<lbrakk> [| x |]\<^sup>c\<^sup>e \<rbrakk> ~ s' ; i \<lbrakk> [| x |]\<^sup>c\<^sup>e[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f [| x |]\<^sup>c\<^sup>e : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s'
[PROOF STEP]
thus ?case
[PROOF STATE]
proof (prove)
using this:
 \<Theta>  \<turnstile> SPair s s2 ~ [ b , b2 ]\<^sup>b [ bv ::= b' ] \<setminus> SPair s' s2'

goal (1 subgoal):
 1.  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s'
[PROOF STEP]
using boxed_b_elims(5)
[PROOF STATE]
proof (prove)
using this:
 \<Theta>  \<turnstile> SPair s s2 ~ [ b , b2 ]\<^sup>b [ bv ::= b' ] \<setminus> SPair s' s2'
\<lbrakk> ?P  \<turnstile> ?s ~ [ ?b1.0 , ?b2.0 ]\<^sup>b [ ?bv ::= ?b ] \<setminus> ?s' ; \<And>s1 s1' s2 s2'. \<lbrakk>?s = SPair s1 s2; ?s' = SPair s1' s2';  ?P  \<turnstile> s1 ~ ?b1.0 [ ?bv ::= ?b ] \<setminus> s1' ;  ?P  \<turnstile> s2 ~ ?b2.0 [ ?bv ::= ?b ] \<setminus> s2' \<rbrakk> \<Longrightarrow> ?Pa\<rbrakk> \<Longrightarrow> ?Pa

goal (1 subgoal):
 1.  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s'
[PROOF STEP]
by force
[PROOF STATE]
proof (state)
this:
 \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s'

goal (2 subgoals):
 1. \<And>x s s' b b'. \<lbrakk>\<And>s s' b b'. \<lbrakk>i' \<lbrakk> x \<rbrakk> ~ s' ; i \<lbrakk> x[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f x : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s' ; i' \<lbrakk> [#2x]\<^sup>c\<^sup>e \<rbrakk> ~ s' ; i \<lbrakk> [#2x]\<^sup>c\<^sup>e[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f [#2x]\<^sup>c\<^sup>e : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s'
 2. \<And>x s s' b b'. \<lbrakk>\<And>s s' b b'. \<lbrakk>i' \<lbrakk> x \<rbrakk> ~ s' ; i \<lbrakk> x[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f x : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s' ; i' \<lbrakk> [| x |]\<^sup>c\<^sup>e \<rbrakk> ~ s' ; i \<lbrakk> [| x |]\<^sup>c\<^sup>e[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f [| x |]\<^sup>c\<^sup>e : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s'
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (2 subgoals):
 1. \<And>x s s' b b'. \<lbrakk>\<And>s s' b b'. \<lbrakk>i' \<lbrakk> x \<rbrakk> ~ s' ; i \<lbrakk> x[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f x : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s' ; i' \<lbrakk> [#2x]\<^sup>c\<^sup>e \<rbrakk> ~ s' ; i \<lbrakk> [#2x]\<^sup>c\<^sup>e[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f [#2x]\<^sup>c\<^sup>e : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s'
 2. \<And>x s s' b b'. \<lbrakk>\<And>s s' b b'. \<lbrakk>i' \<lbrakk> x \<rbrakk> ~ s' ; i \<lbrakk> x[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f x : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s' ; i' \<lbrakk> [| x |]\<^sup>c\<^sup>e \<rbrakk> ~ s' ; i \<lbrakk> [| x |]\<^sup>c\<^sup>e[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f [| x |]\<^sup>c\<^sup>e : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s'
[PROOF STEP]
case (CE_snd v)
[PROOF STATE]
proof (state)
this:
\<lbrakk>i' \<lbrakk> v \<rbrakk> ~ ?s' ; i \<lbrakk> v[bv::=?b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ ?s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f v : ?b ;  \<Theta>  ; \<Gamma> ; ?b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> ?s ~ ?b [ bv ::= ?b' ] \<setminus> ?s'
i' \<lbrakk> [#2v]\<^sup>c\<^sup>e \<rbrakk> ~ s'
i \<lbrakk> [#2v]\<^sup>c\<^sup>e[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s
  \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f [#2v]\<^sup>c\<^sup>e : b
 \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i'
 \<Theta> ; \<Gamma> \<turnstile> i'

goal (2 subgoals):
 1. \<And>x s s' b b'. \<lbrakk>\<And>s s' b b'. \<lbrakk>i' \<lbrakk> x \<rbrakk> ~ s' ; i \<lbrakk> x[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f x : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s' ; i' \<lbrakk> [#2x]\<^sup>c\<^sup>e \<rbrakk> ~ s' ; i \<lbrakk> [#2x]\<^sup>c\<^sup>e[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f [#2x]\<^sup>c\<^sup>e : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s'
 2. \<And>x s s' b b'. \<lbrakk>\<And>s s' b b'. \<lbrakk>i' \<lbrakk> x \<rbrakk> ~ s' ; i \<lbrakk> x[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f x : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s' ; i' \<lbrakk> [| x |]\<^sup>c\<^sup>e \<rbrakk> ~ s' ; i \<lbrakk> [| x |]\<^sup>c\<^sup>e[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f [| x |]\<^sup>c\<^sup>e : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s'
[PROOF STEP]
obtain s1  where 1:"i \<lbrakk> v[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ SPair s1 s"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (\<And>s1. i \<lbrakk> v[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ SPair s1 s  \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
using CE_snd eval_e_elims subst_ceb.simps
[PROOF STATE]
proof (prove)
using this:
\<lbrakk>i' \<lbrakk> v \<rbrakk> ~ ?s' ; i \<lbrakk> v[bv::=?b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ ?s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f v : ?b ;  \<Theta>  ; \<Gamma> ; ?b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> ?s ~ ?b [ bv ::= ?b' ] \<setminus> ?s'
i' \<lbrakk> [#2v]\<^sup>c\<^sup>e \<rbrakk> ~ s'
i \<lbrakk> [#2v]\<^sup>c\<^sup>e[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s
  \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f [#2v]\<^sup>c\<^sup>e : b
 \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i'
 \<Theta> ; \<Gamma> \<turnstile> i'
\<lbrakk>?i \<lbrakk> [ ?v ]\<^sup>c\<^sup>e \<rbrakk> ~ ?s ; ?i \<lbrakk> ?v \<rbrakk> ~ ?s  \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>?i \<lbrakk> [ plus ?v1.0 ?v2.0 ]\<^sup>c\<^sup>e \<rbrakk> ~ ?s ; \<And>n1 n2. \<lbrakk>?s = SNum (n1 + n2); ?i \<lbrakk> ?v1.0 \<rbrakk> ~ SNum n1 ; ?i \<lbrakk> ?v2.0 \<rbrakk> ~ SNum n2 \<rbrakk> \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>?i \<lbrakk> [ leq ?v1.0 ?v2.0 ]\<^sup>c\<^sup>e \<rbrakk> ~ ?s ; \<And>n1 n2. \<lbrakk>?s = SBool (n1 \<le> n2); ?i \<lbrakk> ?v1.0 \<rbrakk> ~ SNum n1 ; ?i \<lbrakk> ?v2.0 \<rbrakk> ~ SNum n2 \<rbrakk> \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>?i \<lbrakk> [ eq ?v1.0 ?v2.0 ]\<^sup>c\<^sup>e \<rbrakk> ~ ?s ; \<And>s1 s2. \<lbrakk>?s = SBool (s1 = s2); ?i \<lbrakk> ?v1.0 \<rbrakk> ~ s1 ; ?i \<lbrakk> ?v2.0 \<rbrakk> ~ s2 \<rbrakk> \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>?i \<lbrakk> [#1?v]\<^sup>c\<^sup>e \<rbrakk> ~ ?s ; \<And>v2. ?i \<lbrakk> ?v \<rbrakk> ~ SPair ?s v2  \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>?i \<lbrakk> [#2?v]\<^sup>c\<^sup>e \<rbrakk> ~ ?s ; \<And>v1. ?i \<lbrakk> ?v \<rbrakk> ~ SPair v1 ?s  \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>?i \<lbrakk> [ ?v1.0 @@ ?v2.0 ]\<^sup>c\<^sup>e \<rbrakk> ~ ?s ; \<And>bv1 bv2. \<lbrakk>?s = SBitvec (bv1 @ bv2); ?i \<lbrakk> ?v1.0 \<rbrakk> ~ SBitvec bv1 ; ?i \<lbrakk> ?v2.0 \<rbrakk> ~ SBitvec bv2 \<rbrakk> \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>?i \<lbrakk> [| ?v |]\<^sup>c\<^sup>e \<rbrakk> ~ ?s ; \<And>bv. \<lbrakk>?s = SNum (int (length bv)); ?i \<lbrakk> ?v \<rbrakk> ~ SBitvec bv \<rbrakk> \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
[ ?v' ]\<^sup>c\<^sup>e[?bv::=?b]\<^sub>c\<^sub>e\<^sub>b = [ ?v'[?bv::=?b]\<^sub>v\<^sub>b ]\<^sup>c\<^sup>e
[ ?opp ?v1.0 ?v2.0 ]\<^sup>c\<^sup>e[?bv::=?b]\<^sub>c\<^sub>e\<^sub>b = [ ?opp ?v1.0[?bv::=?b]\<^sub>c\<^sub>e\<^sub>b ?v2.0[?bv::=?b]\<^sub>c\<^sub>e\<^sub>b ]\<^sup>c\<^sup>e
[#1?v']\<^sup>c\<^sup>e[?bv::=?b]\<^sub>c\<^sub>e\<^sub>b = [#1?v'[?bv::=?b]\<^sub>c\<^sub>e\<^sub>b]\<^sup>c\<^sup>e
[#2?v']\<^sup>c\<^sup>e[?bv::=?b]\<^sub>c\<^sub>e\<^sub>b = [#2?v'[?bv::=?b]\<^sub>c\<^sub>e\<^sub>b]\<^sup>c\<^sup>e
[| ?v' |]\<^sup>c\<^sup>e[?bv::=?b]\<^sub>c\<^sub>e\<^sub>b = [| ?v'[?bv::=?b]\<^sub>c\<^sub>e\<^sub>b |]\<^sup>c\<^sup>e
[ ?v1.0 @@ ?v2.0 ]\<^sup>c\<^sup>e[?bv::=?b]\<^sub>c\<^sub>e\<^sub>b = [ ?v1.0[?bv::=?b]\<^sub>c\<^sub>e\<^sub>b @@ ?v2.0[?bv::=?b]\<^sub>c\<^sub>e\<^sub>b ]\<^sup>c\<^sup>e

goal (1 subgoal):
 1. (\<And>s1. i \<lbrakk> v[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ SPair s1 s  \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by metis
[PROOF STATE]
proof (state)
this:
i \<lbrakk> v[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ SPair s1 s

goal (2 subgoals):
 1. \<And>x s s' b b'. \<lbrakk>\<And>s s' b b'. \<lbrakk>i' \<lbrakk> x \<rbrakk> ~ s' ; i \<lbrakk> x[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f x : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s' ; i' \<lbrakk> [#2x]\<^sup>c\<^sup>e \<rbrakk> ~ s' ; i \<lbrakk> [#2x]\<^sup>c\<^sup>e[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f [#2x]\<^sup>c\<^sup>e : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s'
 2. \<And>x s s' b b'. \<lbrakk>\<And>s s' b b'. \<lbrakk>i' \<lbrakk> x \<rbrakk> ~ s' ; i \<lbrakk> x[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f x : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s' ; i' \<lbrakk> [| x |]\<^sup>c\<^sup>e \<rbrakk> ~ s' ; i \<lbrakk> [| x |]\<^sup>c\<^sup>e[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f [| x |]\<^sup>c\<^sup>e : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s'
[PROOF STEP]
obtain s1' where 2:"i' \<lbrakk> v \<rbrakk> ~ SPair s1' s'"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (\<And>s1'. i' \<lbrakk> v \<rbrakk> ~ SPair s1' s'  \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
using CE_snd eval_e_elims
[PROOF STATE]
proof (prove)
using this:
\<lbrakk>i' \<lbrakk> v \<rbrakk> ~ ?s' ; i \<lbrakk> v[bv::=?b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ ?s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f v : ?b ;  \<Theta>  ; \<Gamma> ; ?b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> ?s ~ ?b [ bv ::= ?b' ] \<setminus> ?s'
i' \<lbrakk> [#2v]\<^sup>c\<^sup>e \<rbrakk> ~ s'
i \<lbrakk> [#2v]\<^sup>c\<^sup>e[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s
  \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f [#2v]\<^sup>c\<^sup>e : b
 \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i'
 \<Theta> ; \<Gamma> \<turnstile> i'
\<lbrakk>?i \<lbrakk> [ ?v ]\<^sup>c\<^sup>e \<rbrakk> ~ ?s ; ?i \<lbrakk> ?v \<rbrakk> ~ ?s  \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>?i \<lbrakk> [ plus ?v1.0 ?v2.0 ]\<^sup>c\<^sup>e \<rbrakk> ~ ?s ; \<And>n1 n2. \<lbrakk>?s = SNum (n1 + n2); ?i \<lbrakk> ?v1.0 \<rbrakk> ~ SNum n1 ; ?i \<lbrakk> ?v2.0 \<rbrakk> ~ SNum n2 \<rbrakk> \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>?i \<lbrakk> [ leq ?v1.0 ?v2.0 ]\<^sup>c\<^sup>e \<rbrakk> ~ ?s ; \<And>n1 n2. \<lbrakk>?s = SBool (n1 \<le> n2); ?i \<lbrakk> ?v1.0 \<rbrakk> ~ SNum n1 ; ?i \<lbrakk> ?v2.0 \<rbrakk> ~ SNum n2 \<rbrakk> \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>?i \<lbrakk> [ eq ?v1.0 ?v2.0 ]\<^sup>c\<^sup>e \<rbrakk> ~ ?s ; \<And>s1 s2. \<lbrakk>?s = SBool (s1 = s2); ?i \<lbrakk> ?v1.0 \<rbrakk> ~ s1 ; ?i \<lbrakk> ?v2.0 \<rbrakk> ~ s2 \<rbrakk> \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>?i \<lbrakk> [#1?v]\<^sup>c\<^sup>e \<rbrakk> ~ ?s ; \<And>v2. ?i \<lbrakk> ?v \<rbrakk> ~ SPair ?s v2  \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>?i \<lbrakk> [#2?v]\<^sup>c\<^sup>e \<rbrakk> ~ ?s ; \<And>v1. ?i \<lbrakk> ?v \<rbrakk> ~ SPair v1 ?s  \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>?i \<lbrakk> [ ?v1.0 @@ ?v2.0 ]\<^sup>c\<^sup>e \<rbrakk> ~ ?s ; \<And>bv1 bv2. \<lbrakk>?s = SBitvec (bv1 @ bv2); ?i \<lbrakk> ?v1.0 \<rbrakk> ~ SBitvec bv1 ; ?i \<lbrakk> ?v2.0 \<rbrakk> ~ SBitvec bv2 \<rbrakk> \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>?i \<lbrakk> [| ?v |]\<^sup>c\<^sup>e \<rbrakk> ~ ?s ; \<And>bv. \<lbrakk>?s = SNum (int (length bv)); ?i \<lbrakk> ?v \<rbrakk> ~ SBitvec bv \<rbrakk> \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P

goal (1 subgoal):
 1. (\<And>s1'. i' \<lbrakk> v \<rbrakk> ~ SPair s1' s'  \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by metis
[PROOF STATE]
proof (state)
this:
i' \<lbrakk> v \<rbrakk> ~ SPair s1' s'

goal (2 subgoals):
 1. \<And>x s s' b b'. \<lbrakk>\<And>s s' b b'. \<lbrakk>i' \<lbrakk> x \<rbrakk> ~ s' ; i \<lbrakk> x[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f x : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s' ; i' \<lbrakk> [#2x]\<^sup>c\<^sup>e \<rbrakk> ~ s' ; i \<lbrakk> [#2x]\<^sup>c\<^sup>e[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f [#2x]\<^sup>c\<^sup>e : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s'
 2. \<And>x s s' b b'. \<lbrakk>\<And>s s' b b'. \<lbrakk>i' \<lbrakk> x \<rbrakk> ~ s' ; i \<lbrakk> x[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f x : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s' ; i' \<lbrakk> [| x |]\<^sup>c\<^sup>e \<rbrakk> ~ s' ; i \<lbrakk> [| x |]\<^sup>c\<^sup>e[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f [| x |]\<^sup>c\<^sup>e : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s'
[PROOF STEP]
obtain b1 where 3:"wfCE \<Theta> B \<Gamma> v (B_pair b1 b )"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (\<And>b1.   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f v : [ b1 , b ]\<^sup>b  \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
using wfCE_elims(5) CE_snd
[PROOF STATE]
proof (prove)
using this:
\<lbrakk>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [#2?v1.0]\<^sup>c\<^sup>e : ?b ; \<And>b1.   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : [ b1 , ?b ]\<^sup>b  \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>i' \<lbrakk> v \<rbrakk> ~ ?s' ; i \<lbrakk> v[bv::=?b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ ?s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f v : ?b ;  \<Theta>  ; \<Gamma> ; ?b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> ?s ~ ?b [ bv ::= ?b' ] \<setminus> ?s'
i' \<lbrakk> [#2v]\<^sup>c\<^sup>e \<rbrakk> ~ s'
i \<lbrakk> [#2v]\<^sup>c\<^sup>e[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s
  \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f [#2v]\<^sup>c\<^sup>e : b
 \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i'
 \<Theta> ; \<Gamma> \<turnstile> i'

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

goal (2 subgoals):
 1. \<And>x s s' b b'. \<lbrakk>\<And>s s' b b'. \<lbrakk>i' \<lbrakk> x \<rbrakk> ~ s' ; i \<lbrakk> x[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f x : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s' ; i' \<lbrakk> [#2x]\<^sup>c\<^sup>e \<rbrakk> ~ s' ; i \<lbrakk> [#2x]\<^sup>c\<^sup>e[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f [#2x]\<^sup>c\<^sup>e : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s'
 2. \<And>x s s' b b'. \<lbrakk>\<And>s s' b b'. \<lbrakk>i' \<lbrakk> x \<rbrakk> ~ s' ; i \<lbrakk> x[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f x : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s' ; i' \<lbrakk> [| x |]\<^sup>c\<^sup>e \<rbrakk> ~ s' ; i \<lbrakk> [| x |]\<^sup>c\<^sup>e[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f [| x |]\<^sup>c\<^sup>e : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s'
[PROOF STEP]
have "boxed_b \<Theta> (SPair s1 s ) (B_pair b1 b ) bv b' (SPair s1' s')"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1.  \<Theta>  \<turnstile> SPair s1 s ~ [ b1 , b ]\<^sup>b [ bv ::= b' ] \<setminus> SPair s1' s'
[PROOF STEP]
using 1 2 3 CE_snd boxed_i_eval_v_boxed_b
[PROOF STATE]
proof (prove)
using this:
i \<lbrakk> v[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ SPair s1 s
i' \<lbrakk> v \<rbrakk> ~ SPair s1' s'
  \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f v : [ b1 , b ]\<^sup>b
\<lbrakk>i' \<lbrakk> v \<rbrakk> ~ ?s' ; i \<lbrakk> v[bv::=?b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ ?s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f v : ?b ;  \<Theta>  ; \<Gamma> ; ?b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> ?s ~ ?b [ bv ::= ?b' ] \<setminus> ?s'
i' \<lbrakk> [#2v]\<^sup>c\<^sup>e \<rbrakk> ~ s'
i \<lbrakk> [#2v]\<^sup>c\<^sup>e[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s
  \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f [#2v]\<^sup>c\<^sup>e : b
 \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i'
 \<Theta> ; \<Gamma> \<turnstile> i'
\<lbrakk> ?\<Theta>  ; ?\<Gamma> ; ?b' , ?bv \<turnstile> ?i \<approx> ?i'; ?i \<lbrakk> ?v[?bv::=?b']\<^sub>v\<^sub>b \<rbrakk> ~ ?s ; ?i' \<lbrakk> ?v \<rbrakk> ~ ?s' ;  ?\<Theta> ; ?B ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v : ?b ;  ?\<Theta> ; ?\<Gamma> \<turnstile> ?i'\<rbrakk> \<Longrightarrow>  ?\<Theta>  \<turnstile> ?s ~ ?b [ ?bv ::= ?b' ] \<setminus> ?s'

goal (1 subgoal):
 1.  \<Theta>  \<turnstile> SPair s1 s ~ [ b1 , b ]\<^sup>b [ bv ::= b' ] \<setminus> SPair s1' s'
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
 \<Theta>  \<turnstile> SPair s1 s ~ [ b1 , b ]\<^sup>b [ bv ::= b' ] \<setminus> SPair s1' s'

goal (2 subgoals):
 1. \<And>x s s' b b'. \<lbrakk>\<And>s s' b b'. \<lbrakk>i' \<lbrakk> x \<rbrakk> ~ s' ; i \<lbrakk> x[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f x : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s' ; i' \<lbrakk> [#2x]\<^sup>c\<^sup>e \<rbrakk> ~ s' ; i \<lbrakk> [#2x]\<^sup>c\<^sup>e[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f [#2x]\<^sup>c\<^sup>e : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s'
 2. \<And>x s s' b b'. \<lbrakk>\<And>s s' b b'. \<lbrakk>i' \<lbrakk> x \<rbrakk> ~ s' ; i \<lbrakk> x[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f x : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s' ; i' \<lbrakk> [| x |]\<^sup>c\<^sup>e \<rbrakk> ~ s' ; i \<lbrakk> [| x |]\<^sup>c\<^sup>e[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f [| x |]\<^sup>c\<^sup>e : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s'
[PROOF STEP]
thus ?case
[PROOF STATE]
proof (prove)
using this:
 \<Theta>  \<turnstile> SPair s1 s ~ [ b1 , b ]\<^sup>b [ bv ::= b' ] \<setminus> SPair s1' s'

goal (1 subgoal):
 1.  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s'
[PROOF STEP]
using boxed_b_elims(5)
[PROOF STATE]
proof (prove)
using this:
 \<Theta>  \<turnstile> SPair s1 s ~ [ b1 , b ]\<^sup>b [ bv ::= b' ] \<setminus> SPair s1' s'
\<lbrakk> ?P  \<turnstile> ?s ~ [ ?b1.0 , ?b2.0 ]\<^sup>b [ ?bv ::= ?b ] \<setminus> ?s' ; \<And>s1 s1' s2 s2'. \<lbrakk>?s = SPair s1 s2; ?s' = SPair s1' s2';  ?P  \<turnstile> s1 ~ ?b1.0 [ ?bv ::= ?b ] \<setminus> s1' ;  ?P  \<turnstile> s2 ~ ?b2.0 [ ?bv ::= ?b ] \<setminus> s2' \<rbrakk> \<Longrightarrow> ?Pa\<rbrakk> \<Longrightarrow> ?Pa

goal (1 subgoal):
 1.  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s'
[PROOF STEP]
by force
[PROOF STATE]
proof (state)
this:
 \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s'

goal (1 subgoal):
 1. \<And>x s s' b b'. \<lbrakk>\<And>s s' b b'. \<lbrakk>i' \<lbrakk> x \<rbrakk> ~ s' ; i \<lbrakk> x[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f x : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s' ; i' \<lbrakk> [| x |]\<^sup>c\<^sup>e \<rbrakk> ~ s' ; i \<lbrakk> [| x |]\<^sup>c\<^sup>e[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f [| x |]\<^sup>c\<^sup>e : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s'
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. \<And>x s s' b b'. \<lbrakk>\<And>s s' b b'. \<lbrakk>i' \<lbrakk> x \<rbrakk> ~ s' ; i \<lbrakk> x[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f x : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s' ; i' \<lbrakk> [| x |]\<^sup>c\<^sup>e \<rbrakk> ~ s' ; i \<lbrakk> [| x |]\<^sup>c\<^sup>e[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f [| x |]\<^sup>c\<^sup>e : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s'
[PROOF STEP]
case (CE_len v)
[PROOF STATE]
proof (state)
this:
\<lbrakk>i' \<lbrakk> v \<rbrakk> ~ ?s' ; i \<lbrakk> v[bv::=?b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ ?s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f v : ?b ;  \<Theta>  ; \<Gamma> ; ?b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> ?s ~ ?b [ bv ::= ?b' ] \<setminus> ?s'
i' \<lbrakk> [| v |]\<^sup>c\<^sup>e \<rbrakk> ~ s'
i \<lbrakk> [| v |]\<^sup>c\<^sup>e[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s
  \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f [| v |]\<^sup>c\<^sup>e : b
 \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i'
 \<Theta> ; \<Gamma> \<turnstile> i'

goal (1 subgoal):
 1. \<And>x s s' b b'. \<lbrakk>\<And>s s' b b'. \<lbrakk>i' \<lbrakk> x \<rbrakk> ~ s' ; i \<lbrakk> x[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f x : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s' ; i' \<lbrakk> [| x |]\<^sup>c\<^sup>e \<rbrakk> ~ s' ; i \<lbrakk> [| x |]\<^sup>c\<^sup>e[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f [| x |]\<^sup>c\<^sup>e : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s'
[PROOF STEP]
obtain s1 where s: "i \<lbrakk> v[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ SBitvec s1"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (\<And>s1. i \<lbrakk> v[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ SBitvec s1  \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
using CE_len eval_e_elims subst_ceb.simps
[PROOF STATE]
proof (prove)
using this:
\<lbrakk>i' \<lbrakk> v \<rbrakk> ~ ?s' ; i \<lbrakk> v[bv::=?b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ ?s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f v : ?b ;  \<Theta>  ; \<Gamma> ; ?b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> ?s ~ ?b [ bv ::= ?b' ] \<setminus> ?s'
i' \<lbrakk> [| v |]\<^sup>c\<^sup>e \<rbrakk> ~ s'
i \<lbrakk> [| v |]\<^sup>c\<^sup>e[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s
  \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f [| v |]\<^sup>c\<^sup>e : b
 \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i'
 \<Theta> ; \<Gamma> \<turnstile> i'
\<lbrakk>?i \<lbrakk> [ ?v ]\<^sup>c\<^sup>e \<rbrakk> ~ ?s ; ?i \<lbrakk> ?v \<rbrakk> ~ ?s  \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>?i \<lbrakk> [ plus ?v1.0 ?v2.0 ]\<^sup>c\<^sup>e \<rbrakk> ~ ?s ; \<And>n1 n2. \<lbrakk>?s = SNum (n1 + n2); ?i \<lbrakk> ?v1.0 \<rbrakk> ~ SNum n1 ; ?i \<lbrakk> ?v2.0 \<rbrakk> ~ SNum n2 \<rbrakk> \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>?i \<lbrakk> [ leq ?v1.0 ?v2.0 ]\<^sup>c\<^sup>e \<rbrakk> ~ ?s ; \<And>n1 n2. \<lbrakk>?s = SBool (n1 \<le> n2); ?i \<lbrakk> ?v1.0 \<rbrakk> ~ SNum n1 ; ?i \<lbrakk> ?v2.0 \<rbrakk> ~ SNum n2 \<rbrakk> \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>?i \<lbrakk> [ eq ?v1.0 ?v2.0 ]\<^sup>c\<^sup>e \<rbrakk> ~ ?s ; \<And>s1 s2. \<lbrakk>?s = SBool (s1 = s2); ?i \<lbrakk> ?v1.0 \<rbrakk> ~ s1 ; ?i \<lbrakk> ?v2.0 \<rbrakk> ~ s2 \<rbrakk> \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>?i \<lbrakk> [#1?v]\<^sup>c\<^sup>e \<rbrakk> ~ ?s ; \<And>v2. ?i \<lbrakk> ?v \<rbrakk> ~ SPair ?s v2  \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>?i \<lbrakk> [#2?v]\<^sup>c\<^sup>e \<rbrakk> ~ ?s ; \<And>v1. ?i \<lbrakk> ?v \<rbrakk> ~ SPair v1 ?s  \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>?i \<lbrakk> [ ?v1.0 @@ ?v2.0 ]\<^sup>c\<^sup>e \<rbrakk> ~ ?s ; \<And>bv1 bv2. \<lbrakk>?s = SBitvec (bv1 @ bv2); ?i \<lbrakk> ?v1.0 \<rbrakk> ~ SBitvec bv1 ; ?i \<lbrakk> ?v2.0 \<rbrakk> ~ SBitvec bv2 \<rbrakk> \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>?i \<lbrakk> [| ?v |]\<^sup>c\<^sup>e \<rbrakk> ~ ?s ; \<And>bv. \<lbrakk>?s = SNum (int (length bv)); ?i \<lbrakk> ?v \<rbrakk> ~ SBitvec bv \<rbrakk> \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
[ ?v' ]\<^sup>c\<^sup>e[?bv::=?b]\<^sub>c\<^sub>e\<^sub>b = [ ?v'[?bv::=?b]\<^sub>v\<^sub>b ]\<^sup>c\<^sup>e
[ ?opp ?v1.0 ?v2.0 ]\<^sup>c\<^sup>e[?bv::=?b]\<^sub>c\<^sub>e\<^sub>b = [ ?opp ?v1.0[?bv::=?b]\<^sub>c\<^sub>e\<^sub>b ?v2.0[?bv::=?b]\<^sub>c\<^sub>e\<^sub>b ]\<^sup>c\<^sup>e
[#1?v']\<^sup>c\<^sup>e[?bv::=?b]\<^sub>c\<^sub>e\<^sub>b = [#1?v'[?bv::=?b]\<^sub>c\<^sub>e\<^sub>b]\<^sup>c\<^sup>e
[#2?v']\<^sup>c\<^sup>e[?bv::=?b]\<^sub>c\<^sub>e\<^sub>b = [#2?v'[?bv::=?b]\<^sub>c\<^sub>e\<^sub>b]\<^sup>c\<^sup>e
[| ?v' |]\<^sup>c\<^sup>e[?bv::=?b]\<^sub>c\<^sub>e\<^sub>b = [| ?v'[?bv::=?b]\<^sub>c\<^sub>e\<^sub>b |]\<^sup>c\<^sup>e
[ ?v1.0 @@ ?v2.0 ]\<^sup>c\<^sup>e[?bv::=?b]\<^sub>c\<^sub>e\<^sub>b = [ ?v1.0[?bv::=?b]\<^sub>c\<^sub>e\<^sub>b @@ ?v2.0[?bv::=?b]\<^sub>c\<^sub>e\<^sub>b ]\<^sup>c\<^sup>e

goal (1 subgoal):
 1. (\<And>s1. i \<lbrakk> v[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ SBitvec s1  \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by metis
[PROOF STATE]
proof (state)
this:
i \<lbrakk> v[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ SBitvec s1

goal (1 subgoal):
 1. \<And>x s s' b b'. \<lbrakk>\<And>s s' b b'. \<lbrakk>i' \<lbrakk> x \<rbrakk> ~ s' ; i \<lbrakk> x[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f x : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s' ; i' \<lbrakk> [| x |]\<^sup>c\<^sup>e \<rbrakk> ~ s' ; i \<lbrakk> [| x |]\<^sup>c\<^sup>e[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f [| x |]\<^sup>c\<^sup>e : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s'
[PROOF STEP]
obtain s1' where s': "i' \<lbrakk> v \<rbrakk> ~ SBitvec s1'"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (\<And>s1'. i' \<lbrakk> v \<rbrakk> ~ SBitvec s1'  \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
using CE_len eval_e_elims
[PROOF STATE]
proof (prove)
using this:
\<lbrakk>i' \<lbrakk> v \<rbrakk> ~ ?s' ; i \<lbrakk> v[bv::=?b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ ?s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f v : ?b ;  \<Theta>  ; \<Gamma> ; ?b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> ?s ~ ?b [ bv ::= ?b' ] \<setminus> ?s'
i' \<lbrakk> [| v |]\<^sup>c\<^sup>e \<rbrakk> ~ s'
i \<lbrakk> [| v |]\<^sup>c\<^sup>e[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s
  \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f [| v |]\<^sup>c\<^sup>e : b
 \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i'
 \<Theta> ; \<Gamma> \<turnstile> i'
\<lbrakk>?i \<lbrakk> [ ?v ]\<^sup>c\<^sup>e \<rbrakk> ~ ?s ; ?i \<lbrakk> ?v \<rbrakk> ~ ?s  \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>?i \<lbrakk> [ plus ?v1.0 ?v2.0 ]\<^sup>c\<^sup>e \<rbrakk> ~ ?s ; \<And>n1 n2. \<lbrakk>?s = SNum (n1 + n2); ?i \<lbrakk> ?v1.0 \<rbrakk> ~ SNum n1 ; ?i \<lbrakk> ?v2.0 \<rbrakk> ~ SNum n2 \<rbrakk> \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>?i \<lbrakk> [ leq ?v1.0 ?v2.0 ]\<^sup>c\<^sup>e \<rbrakk> ~ ?s ; \<And>n1 n2. \<lbrakk>?s = SBool (n1 \<le> n2); ?i \<lbrakk> ?v1.0 \<rbrakk> ~ SNum n1 ; ?i \<lbrakk> ?v2.0 \<rbrakk> ~ SNum n2 \<rbrakk> \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>?i \<lbrakk> [ eq ?v1.0 ?v2.0 ]\<^sup>c\<^sup>e \<rbrakk> ~ ?s ; \<And>s1 s2. \<lbrakk>?s = SBool (s1 = s2); ?i \<lbrakk> ?v1.0 \<rbrakk> ~ s1 ; ?i \<lbrakk> ?v2.0 \<rbrakk> ~ s2 \<rbrakk> \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>?i \<lbrakk> [#1?v]\<^sup>c\<^sup>e \<rbrakk> ~ ?s ; \<And>v2. ?i \<lbrakk> ?v \<rbrakk> ~ SPair ?s v2  \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>?i \<lbrakk> [#2?v]\<^sup>c\<^sup>e \<rbrakk> ~ ?s ; \<And>v1. ?i \<lbrakk> ?v \<rbrakk> ~ SPair v1 ?s  \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>?i \<lbrakk> [ ?v1.0 @@ ?v2.0 ]\<^sup>c\<^sup>e \<rbrakk> ~ ?s ; \<And>bv1 bv2. \<lbrakk>?s = SBitvec (bv1 @ bv2); ?i \<lbrakk> ?v1.0 \<rbrakk> ~ SBitvec bv1 ; ?i \<lbrakk> ?v2.0 \<rbrakk> ~ SBitvec bv2 \<rbrakk> \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>?i \<lbrakk> [| ?v |]\<^sup>c\<^sup>e \<rbrakk> ~ ?s ; \<And>bv. \<lbrakk>?s = SNum (int (length bv)); ?i \<lbrakk> ?v \<rbrakk> ~ SBitvec bv \<rbrakk> \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P

goal (1 subgoal):
 1. (\<And>s1'. i' \<lbrakk> v \<rbrakk> ~ SBitvec s1'  \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by metis
[PROOF STATE]
proof (state)
this:
i' \<lbrakk> v \<rbrakk> ~ SBitvec s1'

goal (1 subgoal):
 1. \<And>x s s' b b'. \<lbrakk>\<And>s s' b b'. \<lbrakk>i' \<lbrakk> x \<rbrakk> ~ s' ; i \<lbrakk> x[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f x : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s' ; i' \<lbrakk> [| x |]\<^sup>c\<^sup>e \<rbrakk> ~ s' ; i \<lbrakk> [| x |]\<^sup>c\<^sup>e[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f [| x |]\<^sup>c\<^sup>e : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s'
[PROOF STEP]
have "\<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f v : B_bitvec \<and> b = B_int"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1.   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f v : B_bitvec  \<and> b = B_int
[PROOF STEP]
using wfCE_elims CE_len
[PROOF STATE]
proof (prove)
using this:
\<lbrakk>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [ ?v ]\<^sup>c\<^sup>e : ?b ;  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v : ?b  \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [ plus ?v1.0 ?v2.0 ]\<^sup>c\<^sup>e : ?b ; \<lbrakk>?b = B_int;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : B_int ;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v2.0 : B_int \<rbrakk> \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [ leq ?v1.0 ?v2.0 ]\<^sup>c\<^sup>e : ?b ; \<lbrakk>?b = B_bool;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : B_int ;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v2.0 : B_int \<rbrakk> \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [#1?v1.0]\<^sup>c\<^sup>e : ?b ; \<And>b2.   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : [ ?b , b2 ]\<^sup>b  \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [#2?v1.0]\<^sup>c\<^sup>e : ?b ; \<And>b1.   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : [ b1 , ?b ]\<^sup>b  \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [ ?v1.0 @@ ?v2.0 ]\<^sup>c\<^sup>e : ?b ; \<lbrakk>?b = B_bitvec;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : B_bitvec ;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v2.0 : B_bitvec \<rbrakk> \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [| ?v1.0 |]\<^sup>c\<^sup>e : ?b ; \<lbrakk>?b = B_int;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : B_bitvec \<rbrakk> \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [ ?opp ?v1.0 ?v2.0 ]\<^sup>c\<^sup>e : ?b ; \<lbrakk>?opp = plus; ?b = B_int;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : B_int ;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v2.0 : B_int \<rbrakk> \<Longrightarrow> ?P; \<lbrakk>?opp = leq; ?b = B_bool;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : B_int ;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v2.0 : B_int \<rbrakk> \<Longrightarrow> ?P; \<And>b. \<lbrakk>?opp = eq; ?b = B_bool;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : b ;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v2.0 : b \<rbrakk> \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>  ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f [ eq ?v1.0 ?v2.0 ]\<^sup>c\<^sup>e : ?b ; \<And>b. \<lbrakk>?b = B_bool;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v1.0 : b ;   ?\<Theta> ; ?\<B> ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v2.0 : b \<rbrakk> \<Longrightarrow> ?P\<rbrakk> \<Longrightarrow> ?P
\<lbrakk>i' \<lbrakk> v \<rbrakk> ~ ?s' ; i \<lbrakk> v[bv::=?b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ ?s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f v : ?b ;  \<Theta>  ; \<Gamma> ; ?b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> ?s ~ ?b [ bv ::= ?b' ] \<setminus> ?s'
i' \<lbrakk> [| v |]\<^sup>c\<^sup>e \<rbrakk> ~ s'
i \<lbrakk> [| v |]\<^sup>c\<^sup>e[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s
  \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f [| v |]\<^sup>c\<^sup>e : b
 \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i'
 \<Theta> ; \<Gamma> \<turnstile> i'

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

goal (1 subgoal):
 1. \<And>x s s' b b'. \<lbrakk>\<And>s s' b b'. \<lbrakk>i' \<lbrakk> x \<rbrakk> ~ s' ; i \<lbrakk> x[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f x : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s' ; i' \<lbrakk> [| x |]\<^sup>c\<^sup>e \<rbrakk> ~ s' ; i \<lbrakk> [| x |]\<^sup>c\<^sup>e[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f [| x |]\<^sup>c\<^sup>e : b ;  \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s'
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
  \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f v : B_bitvec  \<and> b = B_int
[PROOF STEP]
show ?case
[PROOF STATE]
proof (prove)
using this:
  \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f v : B_bitvec  \<and> b = B_int

goal (1 subgoal):
 1.  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s'
[PROOF STEP]
using boxed_i_eval_v_boxed_b s s' CE_len
[PROOF STATE]
proof (prove)
using this:
  \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f v : B_bitvec  \<and> b = B_int
\<lbrakk> ?\<Theta>  ; ?\<Gamma> ; ?b' , ?bv \<turnstile> ?i \<approx> ?i'; ?i \<lbrakk> ?v[?bv::=?b']\<^sub>v\<^sub>b \<rbrakk> ~ ?s ; ?i' \<lbrakk> ?v \<rbrakk> ~ ?s' ;  ?\<Theta> ; ?B ; ?\<Gamma> \<turnstile>\<^sub>w\<^sub>f ?v : ?b ;  ?\<Theta> ; ?\<Gamma> \<turnstile> ?i'\<rbrakk> \<Longrightarrow>  ?\<Theta>  \<turnstile> ?s ~ ?b [ ?bv ::= ?b' ] \<setminus> ?s'
i \<lbrakk> v[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ SBitvec s1
i' \<lbrakk> v \<rbrakk> ~ SBitvec s1'
\<lbrakk>i' \<lbrakk> v \<rbrakk> ~ ?s' ; i \<lbrakk> v[bv::=?b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ ?s ;   \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f v : ?b ;  \<Theta>  ; \<Gamma> ; ?b' , bv \<turnstile> i \<approx> i';  \<Theta> ; \<Gamma> \<turnstile> i'\<rbrakk> \<Longrightarrow>  \<Theta>  \<turnstile> ?s ~ ?b [ bv ::= ?b' ] \<setminus> ?s'
i' \<lbrakk> [| v |]\<^sup>c\<^sup>e \<rbrakk> ~ s'
i \<lbrakk> [| v |]\<^sup>c\<^sup>e[bv::=b']\<^sub>c\<^sub>e\<^sub>b \<rbrakk> ~ s
  \<Theta> ; B ; \<Gamma> \<turnstile>\<^sub>w\<^sub>f [| v |]\<^sup>c\<^sup>e : b
 \<Theta>  ; \<Gamma> ; b' , bv \<turnstile> i \<approx> i'
 \<Theta> ; \<Gamma> \<turnstile> i'

goal (1 subgoal):
 1.  \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s'
[PROOF STEP]
by (metis boxed_b_BIntI boxed_b_elims(7) eval_e_lenI eval_e_uniqueness subst_ceb.simps(5) wfI_wfCE_eval_e)
[PROOF STATE]
proof (state)
this:
 \<Theta>  \<turnstile> s ~ b [ bv ::= b' ] \<setminus> s'

goal:
No subgoals!
[PROOF STEP]
qed