[STATEMENT]
lemma subst_e_eval_v[simp]:
  fixes y::x and e::ce and v::v and e'::ce
  assumes  "i \<lbrakk> e' \<rbrakk> ~  s'" and "e'=(e[y::=v]\<^sub>c\<^sub>e\<^sub>v)" and "i \<lbrakk> v \<rbrakk> ~  s"
  shows "(i ( y \<mapsto> s )) \<lbrakk> e \<rbrakk> ~ s'"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ s'
[PROOF STEP]
using assms
[PROOF STATE]
proof (prove)
using this:
i \<lbrakk> e' \<rbrakk> ~ s'
e' = e[y::=v]\<^sub>c\<^sub>e\<^sub>v
i \<lbrakk> v \<rbrakk> ~ s

goal (1 subgoal):
 1. i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ s'
[PROOF STEP]
proof(induct arbitrary: e rule: eval_e.induct)
[PROOF STATE]
proof (state)
goal (8 subgoals):
 1. \<And>i va sv e. \<lbrakk>i \<lbrakk> va \<rbrakk> ~ sv ; [ va ]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ sv
 2. \<And>i v1 n1 v2 n2 e. \<lbrakk>i \<lbrakk> v1 \<rbrakk> ~ SNum n1 ; \<And>e. \<lbrakk>v1 = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SNum n1 ; i \<lbrakk> v2 \<rbrakk> ~ SNum n2 ; \<And>e. \<lbrakk>v2 = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SNum n2 ; [ plus v1 v2 ]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SNum (n1 + n2)
 3. \<And>i v1 n1 v2 n2 e. \<lbrakk>i \<lbrakk> v1 \<rbrakk> ~ SNum n1 ; \<And>e. \<lbrakk>v1 = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SNum n1 ; i \<lbrakk> v2 \<rbrakk> ~ SNum n2 ; \<And>e. \<lbrakk>v2 = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SNum n2 ; [ leq v1 v2 ]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBool (n1 \<le> n2)
 4. \<And>i v1 s1 v2 s2 e. \<lbrakk>i \<lbrakk> v1 \<rbrakk> ~ s1 ; \<And>e. \<lbrakk>v1 = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ s1 ; i \<lbrakk> v2 \<rbrakk> ~ s2 ; \<And>e. \<lbrakk>v2 = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ s2 ; [ eq v1 v2 ]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBool (s1 = s2)
 5. \<And>i va v1 v2 e. \<lbrakk>i \<lbrakk> va \<rbrakk> ~ SPair v1 v2 ; \<And>e. \<lbrakk>va = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SPair v1 v2 ; [#1va]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ v1
 6. \<And>i va v1 v2 e. \<lbrakk>i \<lbrakk> va \<rbrakk> ~ SPair v1 v2 ; \<And>e. \<lbrakk>va = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SPair v1 v2 ; [#2va]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ v2
 7. \<And>i v1 bv1 v2 bv2 e. \<lbrakk>i \<lbrakk> v1 \<rbrakk> ~ SBitvec bv1 ; \<And>e. \<lbrakk>v1 = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBitvec bv1 ; i \<lbrakk> v2 \<rbrakk> ~ SBitvec bv2 ; \<And>e. \<lbrakk>v2 = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBitvec bv2 ; [ v1 @@ v2 ]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBitvec (bv1 @ bv2)
 8. \<And>i va bv e. \<lbrakk>i \<lbrakk> va \<rbrakk> ~ SBitvec bv ; \<And>e. \<lbrakk>va = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBitvec bv ; [| va |]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SNum (int (length bv))
[PROOF STEP]
case (eval_e_valI i v1 sv)
[PROOF STATE]
proof (state)
this:
i \<lbrakk> v1 \<rbrakk> ~ sv
[ v1 ]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v
i \<lbrakk> v \<rbrakk> ~ s

goal (8 subgoals):
 1. \<And>i va sv e. \<lbrakk>i \<lbrakk> va \<rbrakk> ~ sv ; [ va ]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ sv
 2. \<And>i v1 n1 v2 n2 e. \<lbrakk>i \<lbrakk> v1 \<rbrakk> ~ SNum n1 ; \<And>e. \<lbrakk>v1 = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SNum n1 ; i \<lbrakk> v2 \<rbrakk> ~ SNum n2 ; \<And>e. \<lbrakk>v2 = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SNum n2 ; [ plus v1 v2 ]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SNum (n1 + n2)
 3. \<And>i v1 n1 v2 n2 e. \<lbrakk>i \<lbrakk> v1 \<rbrakk> ~ SNum n1 ; \<And>e. \<lbrakk>v1 = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SNum n1 ; i \<lbrakk> v2 \<rbrakk> ~ SNum n2 ; \<And>e. \<lbrakk>v2 = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SNum n2 ; [ leq v1 v2 ]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBool (n1 \<le> n2)
 4. \<And>i v1 s1 v2 s2 e. \<lbrakk>i \<lbrakk> v1 \<rbrakk> ~ s1 ; \<And>e. \<lbrakk>v1 = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ s1 ; i \<lbrakk> v2 \<rbrakk> ~ s2 ; \<And>e. \<lbrakk>v2 = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ s2 ; [ eq v1 v2 ]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBool (s1 = s2)
 5. \<And>i va v1 v2 e. \<lbrakk>i \<lbrakk> va \<rbrakk> ~ SPair v1 v2 ; \<And>e. \<lbrakk>va = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SPair v1 v2 ; [#1va]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ v1
 6. \<And>i va v1 v2 e. \<lbrakk>i \<lbrakk> va \<rbrakk> ~ SPair v1 v2 ; \<And>e. \<lbrakk>va = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SPair v1 v2 ; [#2va]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ v2
 7. \<And>i v1 bv1 v2 bv2 e. \<lbrakk>i \<lbrakk> v1 \<rbrakk> ~ SBitvec bv1 ; \<And>e. \<lbrakk>v1 = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBitvec bv1 ; i \<lbrakk> v2 \<rbrakk> ~ SBitvec bv2 ; \<And>e. \<lbrakk>v2 = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBitvec bv2 ; [ v1 @@ v2 ]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBitvec (bv1 @ bv2)
 8. \<And>i va bv e. \<lbrakk>i \<lbrakk> va \<rbrakk> ~ SBitvec bv ; \<And>e. \<lbrakk>va = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBitvec bv ; [| va |]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SNum (int (length bv))
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
i \<lbrakk> v1 \<rbrakk> ~ sv
[ v1 ]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v
i \<lbrakk> v \<rbrakk> ~ s
[PROOF STEP]
obtain v1' where *:"e = CE_val v1' \<and> v1 = v1'[y::=v]\<^sub>v\<^sub>v"
[PROOF STATE]
proof (prove)
using this:
i \<lbrakk> v1 \<rbrakk> ~ sv
[ v1 ]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v
i \<lbrakk> v \<rbrakk> ~ s

goal (1 subgoal):
 1. (\<And>v1'. e = [ v1' ]\<^sup>c\<^sup>e \<and> v1 = v1'[y::=v]\<^sub>v\<^sub>v \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
using assms
[PROOF STATE]
proof (prove)
using this:
i \<lbrakk> v1 \<rbrakk> ~ sv
[ v1 ]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v
i \<lbrakk> v \<rbrakk> ~ s
i \<lbrakk> e' \<rbrakk> ~ s'
e' = e[y::=v]\<^sub>c\<^sub>e\<^sub>v
i \<lbrakk> v \<rbrakk> ~ s

goal (1 subgoal):
 1. (\<And>v1'. e = [ v1' ]\<^sup>c\<^sup>e \<and> v1 = v1'[y::=v]\<^sub>v\<^sub>v \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by(nominal_induct e rule:ce.strong_induct,simp+)
[PROOF STATE]
proof (state)
this:
e = [ v1' ]\<^sup>c\<^sup>e \<and> v1 = v1'[y::=v]\<^sub>v\<^sub>v

goal (8 subgoals):
 1. \<And>i va sv e. \<lbrakk>i \<lbrakk> va \<rbrakk> ~ sv ; [ va ]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ sv
 2. \<And>i v1 n1 v2 n2 e. \<lbrakk>i \<lbrakk> v1 \<rbrakk> ~ SNum n1 ; \<And>e. \<lbrakk>v1 = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SNum n1 ; i \<lbrakk> v2 \<rbrakk> ~ SNum n2 ; \<And>e. \<lbrakk>v2 = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SNum n2 ; [ plus v1 v2 ]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SNum (n1 + n2)
 3. \<And>i v1 n1 v2 n2 e. \<lbrakk>i \<lbrakk> v1 \<rbrakk> ~ SNum n1 ; \<And>e. \<lbrakk>v1 = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SNum n1 ; i \<lbrakk> v2 \<rbrakk> ~ SNum n2 ; \<And>e. \<lbrakk>v2 = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SNum n2 ; [ leq v1 v2 ]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBool (n1 \<le> n2)
 4. \<And>i v1 s1 v2 s2 e. \<lbrakk>i \<lbrakk> v1 \<rbrakk> ~ s1 ; \<And>e. \<lbrakk>v1 = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ s1 ; i \<lbrakk> v2 \<rbrakk> ~ s2 ; \<And>e. \<lbrakk>v2 = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ s2 ; [ eq v1 v2 ]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBool (s1 = s2)
 5. \<And>i va v1 v2 e. \<lbrakk>i \<lbrakk> va \<rbrakk> ~ SPair v1 v2 ; \<And>e. \<lbrakk>va = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SPair v1 v2 ; [#1va]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ v1
 6. \<And>i va v1 v2 e. \<lbrakk>i \<lbrakk> va \<rbrakk> ~ SPair v1 v2 ; \<And>e. \<lbrakk>va = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SPair v1 v2 ; [#2va]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ v2
 7. \<And>i v1 bv1 v2 bv2 e. \<lbrakk>i \<lbrakk> v1 \<rbrakk> ~ SBitvec bv1 ; \<And>e. \<lbrakk>v1 = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBitvec bv1 ; i \<lbrakk> v2 \<rbrakk> ~ SBitvec bv2 ; \<And>e. \<lbrakk>v2 = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBitvec bv2 ; [ v1 @@ v2 ]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBitvec (bv1 @ bv2)
 8. \<And>i va bv e. \<lbrakk>i \<lbrakk> va \<rbrakk> ~ SBitvec bv ; \<And>e. \<lbrakk>va = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBitvec bv ; [| va |]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SNum (int (length bv))
[PROOF STEP]
hence "eval_v i (v1'[y::=v]\<^sub>v\<^sub>v) sv"
[PROOF STATE]
proof (prove)
using this:
e = [ v1' ]\<^sup>c\<^sup>e \<and> v1 = v1'[y::=v]\<^sub>v\<^sub>v

goal (1 subgoal):
 1. i \<lbrakk> v1'[y::=v]\<^sub>v\<^sub>v \<rbrakk> ~ sv
[PROOF STEP]
using eval_e_valI
[PROOF STATE]
proof (prove)
using this:
e = [ v1' ]\<^sup>c\<^sup>e \<and> v1 = v1'[y::=v]\<^sub>v\<^sub>v
i \<lbrakk> v1 \<rbrakk> ~ sv
[ v1 ]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v
i \<lbrakk> v \<rbrakk> ~ s

goal (1 subgoal):
 1. i \<lbrakk> v1'[y::=v]\<^sub>v\<^sub>v \<rbrakk> ~ sv
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
i \<lbrakk> v1'[y::=v]\<^sub>v\<^sub>v \<rbrakk> ~ sv

goal (8 subgoals):
 1. \<And>i va sv e. \<lbrakk>i \<lbrakk> va \<rbrakk> ~ sv ; [ va ]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ sv
 2. \<And>i v1 n1 v2 n2 e. \<lbrakk>i \<lbrakk> v1 \<rbrakk> ~ SNum n1 ; \<And>e. \<lbrakk>v1 = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SNum n1 ; i \<lbrakk> v2 \<rbrakk> ~ SNum n2 ; \<And>e. \<lbrakk>v2 = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SNum n2 ; [ plus v1 v2 ]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SNum (n1 + n2)
 3. \<And>i v1 n1 v2 n2 e. \<lbrakk>i \<lbrakk> v1 \<rbrakk> ~ SNum n1 ; \<And>e. \<lbrakk>v1 = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SNum n1 ; i \<lbrakk> v2 \<rbrakk> ~ SNum n2 ; \<And>e. \<lbrakk>v2 = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SNum n2 ; [ leq v1 v2 ]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBool (n1 \<le> n2)
 4. \<And>i v1 s1 v2 s2 e. \<lbrakk>i \<lbrakk> v1 \<rbrakk> ~ s1 ; \<And>e. \<lbrakk>v1 = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ s1 ; i \<lbrakk> v2 \<rbrakk> ~ s2 ; \<And>e. \<lbrakk>v2 = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ s2 ; [ eq v1 v2 ]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBool (s1 = s2)
 5. \<And>i va v1 v2 e. \<lbrakk>i \<lbrakk> va \<rbrakk> ~ SPair v1 v2 ; \<And>e. \<lbrakk>va = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SPair v1 v2 ; [#1va]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ v1
 6. \<And>i va v1 v2 e. \<lbrakk>i \<lbrakk> va \<rbrakk> ~ SPair v1 v2 ; \<And>e. \<lbrakk>va = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SPair v1 v2 ; [#2va]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ v2
 7. \<And>i v1 bv1 v2 bv2 e. \<lbrakk>i \<lbrakk> v1 \<rbrakk> ~ SBitvec bv1 ; \<And>e. \<lbrakk>v1 = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBitvec bv1 ; i \<lbrakk> v2 \<rbrakk> ~ SBitvec bv2 ; \<And>e. \<lbrakk>v2 = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBitvec bv2 ; [ v1 @@ v2 ]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBitvec (bv1 @ bv2)
 8. \<And>i va bv e. \<lbrakk>i \<lbrakk> va \<rbrakk> ~ SBitvec bv ; \<And>e. \<lbrakk>va = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBitvec bv ; [| va |]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SNum (int (length bv))
[PROOF STEP]
hence "eval_v (i ( y \<mapsto> s )) v1' sv"
[PROOF STATE]
proof (prove)
using this:
i \<lbrakk> v1'[y::=v]\<^sub>v\<^sub>v \<rbrakk> ~ sv

goal (1 subgoal):
 1. i(y \<mapsto> s) \<lbrakk> v1' \<rbrakk> ~ sv
[PROOF STEP]
using subst_v_eval_v eval_e_valI
[PROOF STATE]
proof (prove)
using this:
i \<lbrakk> v1'[y::=v]\<^sub>v\<^sub>v \<rbrakk> ~ sv
\<lbrakk>?i \<lbrakk> ?v \<rbrakk> ~ ?s ; ?i \<lbrakk> ?v'[?x::=?v]\<^sub>v\<^sub>v \<rbrakk> ~ ?s' \<rbrakk> \<Longrightarrow> ?i(?x \<mapsto> ?s) \<lbrakk> ?v' \<rbrakk> ~ ?s'
i \<lbrakk> v1 \<rbrakk> ~ sv
[ v1 ]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v
i \<lbrakk> v \<rbrakk> ~ s

goal (1 subgoal):
 1. i(y \<mapsto> s) \<lbrakk> v1' \<rbrakk> ~ sv
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
i(y \<mapsto> s) \<lbrakk> v1' \<rbrakk> ~ sv

goal (8 subgoals):
 1. \<And>i va sv e. \<lbrakk>i \<lbrakk> va \<rbrakk> ~ sv ; [ va ]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ sv
 2. \<And>i v1 n1 v2 n2 e. \<lbrakk>i \<lbrakk> v1 \<rbrakk> ~ SNum n1 ; \<And>e. \<lbrakk>v1 = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SNum n1 ; i \<lbrakk> v2 \<rbrakk> ~ SNum n2 ; \<And>e. \<lbrakk>v2 = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SNum n2 ; [ plus v1 v2 ]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SNum (n1 + n2)
 3. \<And>i v1 n1 v2 n2 e. \<lbrakk>i \<lbrakk> v1 \<rbrakk> ~ SNum n1 ; \<And>e. \<lbrakk>v1 = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SNum n1 ; i \<lbrakk> v2 \<rbrakk> ~ SNum n2 ; \<And>e. \<lbrakk>v2 = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SNum n2 ; [ leq v1 v2 ]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBool (n1 \<le> n2)
 4. \<And>i v1 s1 v2 s2 e. \<lbrakk>i \<lbrakk> v1 \<rbrakk> ~ s1 ; \<And>e. \<lbrakk>v1 = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ s1 ; i \<lbrakk> v2 \<rbrakk> ~ s2 ; \<And>e. \<lbrakk>v2 = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ s2 ; [ eq v1 v2 ]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBool (s1 = s2)
 5. \<And>i va v1 v2 e. \<lbrakk>i \<lbrakk> va \<rbrakk> ~ SPair v1 v2 ; \<And>e. \<lbrakk>va = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SPair v1 v2 ; [#1va]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ v1
 6. \<And>i va v1 v2 e. \<lbrakk>i \<lbrakk> va \<rbrakk> ~ SPair v1 v2 ; \<And>e. \<lbrakk>va = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SPair v1 v2 ; [#2va]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ v2
 7. \<And>i v1 bv1 v2 bv2 e. \<lbrakk>i \<lbrakk> v1 \<rbrakk> ~ SBitvec bv1 ; \<And>e. \<lbrakk>v1 = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBitvec bv1 ; i \<lbrakk> v2 \<rbrakk> ~ SBitvec bv2 ; \<And>e. \<lbrakk>v2 = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBitvec bv2 ; [ v1 @@ v2 ]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBitvec (bv1 @ bv2)
 8. \<And>i va bv e. \<lbrakk>i \<lbrakk> va \<rbrakk> ~ SBitvec bv ; \<And>e. \<lbrakk>va = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBitvec bv ; [| va |]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SNum (int (length bv))
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
i(y \<mapsto> s) \<lbrakk> v1' \<rbrakk> ~ sv
[PROOF STEP]
show ?case
[PROOF STATE]
proof (prove)
using this:
i(y \<mapsto> s) \<lbrakk> v1' \<rbrakk> ~ sv

goal (1 subgoal):
 1. i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ sv
[PROOF STEP]
using RCLogic.eval_e_valI *
[PROOF STATE]
proof (prove)
using this:
i(y \<mapsto> s) \<lbrakk> v1' \<rbrakk> ~ sv
?i \<lbrakk> ?v \<rbrakk> ~ ?sv  \<Longrightarrow> ?i \<lbrakk> [ ?v ]\<^sup>c\<^sup>e \<rbrakk> ~ ?sv
e = [ v1' ]\<^sup>c\<^sup>e \<and> v1 = v1'[y::=v]\<^sub>v\<^sub>v

goal (1 subgoal):
 1. i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ sv
[PROOF STEP]
by meson
[PROOF STATE]
proof (state)
this:
i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ sv

goal (7 subgoals):
 1. \<And>i v1 n1 v2 n2 e. \<lbrakk>i \<lbrakk> v1 \<rbrakk> ~ SNum n1 ; \<And>e. \<lbrakk>v1 = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SNum n1 ; i \<lbrakk> v2 \<rbrakk> ~ SNum n2 ; \<And>e. \<lbrakk>v2 = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SNum n2 ; [ plus v1 v2 ]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SNum (n1 + n2)
 2. \<And>i v1 n1 v2 n2 e. \<lbrakk>i \<lbrakk> v1 \<rbrakk> ~ SNum n1 ; \<And>e. \<lbrakk>v1 = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SNum n1 ; i \<lbrakk> v2 \<rbrakk> ~ SNum n2 ; \<And>e. \<lbrakk>v2 = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SNum n2 ; [ leq v1 v2 ]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBool (n1 \<le> n2)
 3. \<And>i v1 s1 v2 s2 e. \<lbrakk>i \<lbrakk> v1 \<rbrakk> ~ s1 ; \<And>e. \<lbrakk>v1 = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ s1 ; i \<lbrakk> v2 \<rbrakk> ~ s2 ; \<And>e. \<lbrakk>v2 = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ s2 ; [ eq v1 v2 ]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBool (s1 = s2)
 4. \<And>i va v1 v2 e. \<lbrakk>i \<lbrakk> va \<rbrakk> ~ SPair v1 v2 ; \<And>e. \<lbrakk>va = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SPair v1 v2 ; [#1va]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ v1
 5. \<And>i va v1 v2 e. \<lbrakk>i \<lbrakk> va \<rbrakk> ~ SPair v1 v2 ; \<And>e. \<lbrakk>va = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SPair v1 v2 ; [#2va]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ v2
 6. \<And>i v1 bv1 v2 bv2 e. \<lbrakk>i \<lbrakk> v1 \<rbrakk> ~ SBitvec bv1 ; \<And>e. \<lbrakk>v1 = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBitvec bv1 ; i \<lbrakk> v2 \<rbrakk> ~ SBitvec bv2 ; \<And>e. \<lbrakk>v2 = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBitvec bv2 ; [ v1 @@ v2 ]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBitvec (bv1 @ bv2)
 7. \<And>i va bv e. \<lbrakk>i \<lbrakk> va \<rbrakk> ~ SBitvec bv ; \<And>e. \<lbrakk>va = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBitvec bv ; [| va |]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SNum (int (length bv))
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (7 subgoals):
 1. \<And>i v1 n1 v2 n2 e. \<lbrakk>i \<lbrakk> v1 \<rbrakk> ~ SNum n1 ; \<And>e. \<lbrakk>v1 = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SNum n1 ; i \<lbrakk> v2 \<rbrakk> ~ SNum n2 ; \<And>e. \<lbrakk>v2 = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SNum n2 ; [ plus v1 v2 ]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SNum (n1 + n2)
 2. \<And>i v1 n1 v2 n2 e. \<lbrakk>i \<lbrakk> v1 \<rbrakk> ~ SNum n1 ; \<And>e. \<lbrakk>v1 = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SNum n1 ; i \<lbrakk> v2 \<rbrakk> ~ SNum n2 ; \<And>e. \<lbrakk>v2 = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SNum n2 ; [ leq v1 v2 ]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBool (n1 \<le> n2)
 3. \<And>i v1 s1 v2 s2 e. \<lbrakk>i \<lbrakk> v1 \<rbrakk> ~ s1 ; \<And>e. \<lbrakk>v1 = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ s1 ; i \<lbrakk> v2 \<rbrakk> ~ s2 ; \<And>e. \<lbrakk>v2 = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ s2 ; [ eq v1 v2 ]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBool (s1 = s2)
 4. \<And>i va v1 v2 e. \<lbrakk>i \<lbrakk> va \<rbrakk> ~ SPair v1 v2 ; \<And>e. \<lbrakk>va = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SPair v1 v2 ; [#1va]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ v1
 5. \<And>i va v1 v2 e. \<lbrakk>i \<lbrakk> va \<rbrakk> ~ SPair v1 v2 ; \<And>e. \<lbrakk>va = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SPair v1 v2 ; [#2va]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ v2
 6. \<And>i v1 bv1 v2 bv2 e. \<lbrakk>i \<lbrakk> v1 \<rbrakk> ~ SBitvec bv1 ; \<And>e. \<lbrakk>v1 = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBitvec bv1 ; i \<lbrakk> v2 \<rbrakk> ~ SBitvec bv2 ; \<And>e. \<lbrakk>v2 = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBitvec bv2 ; [ v1 @@ v2 ]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBitvec (bv1 @ bv2)
 7. \<And>i va bv e. \<lbrakk>i \<lbrakk> va \<rbrakk> ~ SBitvec bv ; \<And>e. \<lbrakk>va = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBitvec bv ; [| va |]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SNum (int (length bv))
[PROOF STEP]
case (eval_e_plusI i v1 n1 v2 n2)
[PROOF STATE]
proof (state)
this:
i \<lbrakk> v1 \<rbrakk> ~ SNum n1
\<lbrakk>v1 = ?e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> ?e \<rbrakk> ~ SNum n1
i \<lbrakk> v2 \<rbrakk> ~ SNum n2
\<lbrakk>v2 = ?e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> ?e \<rbrakk> ~ SNum n2
[ plus v1 v2 ]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v
i \<lbrakk> v \<rbrakk> ~ s

goal (7 subgoals):
 1. \<And>i v1 n1 v2 n2 e. \<lbrakk>i \<lbrakk> v1 \<rbrakk> ~ SNum n1 ; \<And>e. \<lbrakk>v1 = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SNum n1 ; i \<lbrakk> v2 \<rbrakk> ~ SNum n2 ; \<And>e. \<lbrakk>v2 = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SNum n2 ; [ plus v1 v2 ]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SNum (n1 + n2)
 2. \<And>i v1 n1 v2 n2 e. \<lbrakk>i \<lbrakk> v1 \<rbrakk> ~ SNum n1 ; \<And>e. \<lbrakk>v1 = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SNum n1 ; i \<lbrakk> v2 \<rbrakk> ~ SNum n2 ; \<And>e. \<lbrakk>v2 = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SNum n2 ; [ leq v1 v2 ]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBool (n1 \<le> n2)
 3. \<And>i v1 s1 v2 s2 e. \<lbrakk>i \<lbrakk> v1 \<rbrakk> ~ s1 ; \<And>e. \<lbrakk>v1 = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ s1 ; i \<lbrakk> v2 \<rbrakk> ~ s2 ; \<And>e. \<lbrakk>v2 = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ s2 ; [ eq v1 v2 ]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBool (s1 = s2)
 4. \<And>i va v1 v2 e. \<lbrakk>i \<lbrakk> va \<rbrakk> ~ SPair v1 v2 ; \<And>e. \<lbrakk>va = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SPair v1 v2 ; [#1va]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ v1
 5. \<And>i va v1 v2 e. \<lbrakk>i \<lbrakk> va \<rbrakk> ~ SPair v1 v2 ; \<And>e. \<lbrakk>va = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SPair v1 v2 ; [#2va]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ v2
 6. \<And>i v1 bv1 v2 bv2 e. \<lbrakk>i \<lbrakk> v1 \<rbrakk> ~ SBitvec bv1 ; \<And>e. \<lbrakk>v1 = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBitvec bv1 ; i \<lbrakk> v2 \<rbrakk> ~ SBitvec bv2 ; \<And>e. \<lbrakk>v2 = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBitvec bv2 ; [ v1 @@ v2 ]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBitvec (bv1 @ bv2)
 7. \<And>i va bv e. \<lbrakk>i \<lbrakk> va \<rbrakk> ~ SBitvec bv ; \<And>e. \<lbrakk>va = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBitvec bv ; [| va |]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SNum (int (length bv))
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
i \<lbrakk> v1 \<rbrakk> ~ SNum n1
\<lbrakk>v1 = ?e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> ?e \<rbrakk> ~ SNum n1
i \<lbrakk> v2 \<rbrakk> ~ SNum n2
\<lbrakk>v2 = ?e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> ?e \<rbrakk> ~ SNum n2
[ plus v1 v2 ]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v
i \<lbrakk> v \<rbrakk> ~ s
[PROOF STEP]
obtain v1' and v2' where *:"e = CE_op Plus v1' v2' \<and> v1 = v1'[y::=v]\<^sub>c\<^sub>e\<^sub>v \<and> v2 = v2'[y::=v]\<^sub>c\<^sub>e\<^sub>v"
[PROOF STATE]
proof (prove)
using this:
i \<lbrakk> v1 \<rbrakk> ~ SNum n1
\<lbrakk>v1 = ?e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> ?e \<rbrakk> ~ SNum n1
i \<lbrakk> v2 \<rbrakk> ~ SNum n2
\<lbrakk>v2 = ?e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> ?e \<rbrakk> ~ SNum n2
[ plus v1 v2 ]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v
i \<lbrakk> v \<rbrakk> ~ s

goal (1 subgoal):
 1. (\<And>v1' v2'. e = [ plus v1' v2' ]\<^sup>c\<^sup>e \<and> v1 = v1'[y::=v]\<^sub>c\<^sub>e\<^sub>v \<and> v2 = v2'[y::=v]\<^sub>c\<^sub>e\<^sub>v \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
using assms
[PROOF STATE]
proof (prove)
using this:
i \<lbrakk> v1 \<rbrakk> ~ SNum n1
\<lbrakk>v1 = ?e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> ?e \<rbrakk> ~ SNum n1
i \<lbrakk> v2 \<rbrakk> ~ SNum n2
\<lbrakk>v2 = ?e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> ?e \<rbrakk> ~ SNum n2
[ plus v1 v2 ]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v
i \<lbrakk> v \<rbrakk> ~ s
i \<lbrakk> e' \<rbrakk> ~ s'
e' = e[y::=v]\<^sub>c\<^sub>e\<^sub>v
i \<lbrakk> v \<rbrakk> ~ s

goal (1 subgoal):
 1. (\<And>v1' v2'. e = [ plus v1' v2' ]\<^sup>c\<^sup>e \<and> v1 = v1'[y::=v]\<^sub>c\<^sub>e\<^sub>v \<and> v2 = v2'[y::=v]\<^sub>c\<^sub>e\<^sub>v \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by(nominal_induct e rule:ce.strong_induct,simp+)
[PROOF STATE]
proof (state)
this:
e = [ plus v1' v2' ]\<^sup>c\<^sup>e \<and> v1 = v1'[y::=v]\<^sub>c\<^sub>e\<^sub>v \<and> v2 = v2'[y::=v]\<^sub>c\<^sub>e\<^sub>v

goal (7 subgoals):
 1. \<And>i v1 n1 v2 n2 e. \<lbrakk>i \<lbrakk> v1 \<rbrakk> ~ SNum n1 ; \<And>e. \<lbrakk>v1 = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SNum n1 ; i \<lbrakk> v2 \<rbrakk> ~ SNum n2 ; \<And>e. \<lbrakk>v2 = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SNum n2 ; [ plus v1 v2 ]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SNum (n1 + n2)
 2. \<And>i v1 n1 v2 n2 e. \<lbrakk>i \<lbrakk> v1 \<rbrakk> ~ SNum n1 ; \<And>e. \<lbrakk>v1 = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SNum n1 ; i \<lbrakk> v2 \<rbrakk> ~ SNum n2 ; \<And>e. \<lbrakk>v2 = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SNum n2 ; [ leq v1 v2 ]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBool (n1 \<le> n2)
 3. \<And>i v1 s1 v2 s2 e. \<lbrakk>i \<lbrakk> v1 \<rbrakk> ~ s1 ; \<And>e. \<lbrakk>v1 = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ s1 ; i \<lbrakk> v2 \<rbrakk> ~ s2 ; \<And>e. \<lbrakk>v2 = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ s2 ; [ eq v1 v2 ]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBool (s1 = s2)
 4. \<And>i va v1 v2 e. \<lbrakk>i \<lbrakk> va \<rbrakk> ~ SPair v1 v2 ; \<And>e. \<lbrakk>va = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SPair v1 v2 ; [#1va]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ v1
 5. \<And>i va v1 v2 e. \<lbrakk>i \<lbrakk> va \<rbrakk> ~ SPair v1 v2 ; \<And>e. \<lbrakk>va = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SPair v1 v2 ; [#2va]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ v2
 6. \<And>i v1 bv1 v2 bv2 e. \<lbrakk>i \<lbrakk> v1 \<rbrakk> ~ SBitvec bv1 ; \<And>e. \<lbrakk>v1 = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBitvec bv1 ; i \<lbrakk> v2 \<rbrakk> ~ SBitvec bv2 ; \<And>e. \<lbrakk>v2 = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBitvec bv2 ; [ v1 @@ v2 ]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBitvec (bv1 @ bv2)
 7. \<And>i va bv e. \<lbrakk>i \<lbrakk> va \<rbrakk> ~ SBitvec bv ; \<And>e. \<lbrakk>va = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBitvec bv ; [| va |]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SNum (int (length bv))
[PROOF STEP]
hence "eval_e i (v1'[y::=v]\<^sub>c\<^sub>e\<^sub>v) (SNum n1) \<and> eval_e i (v2'[y::=v]\<^sub>c\<^sub>e\<^sub>v) (SNum n2)"
[PROOF STATE]
proof (prove)
using this:
e = [ plus v1' v2' ]\<^sup>c\<^sup>e \<and> v1 = v1'[y::=v]\<^sub>c\<^sub>e\<^sub>v \<and> v2 = v2'[y::=v]\<^sub>c\<^sub>e\<^sub>v

goal (1 subgoal):
 1. i \<lbrakk> v1'[y::=v]\<^sub>c\<^sub>e\<^sub>v \<rbrakk> ~ SNum n1  \<and> i \<lbrakk> v2'[y::=v]\<^sub>c\<^sub>e\<^sub>v \<rbrakk> ~ SNum n2
[PROOF STEP]
using eval_e_plusI
[PROOF STATE]
proof (prove)
using this:
e = [ plus v1' v2' ]\<^sup>c\<^sup>e \<and> v1 = v1'[y::=v]\<^sub>c\<^sub>e\<^sub>v \<and> v2 = v2'[y::=v]\<^sub>c\<^sub>e\<^sub>v
i \<lbrakk> v1 \<rbrakk> ~ SNum n1
\<lbrakk>v1 = ?e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> ?e \<rbrakk> ~ SNum n1
i \<lbrakk> v2 \<rbrakk> ~ SNum n2
\<lbrakk>v2 = ?e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> ?e \<rbrakk> ~ SNum n2
[ plus v1 v2 ]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v
i \<lbrakk> v \<rbrakk> ~ s

goal (1 subgoal):
 1. i \<lbrakk> v1'[y::=v]\<^sub>c\<^sub>e\<^sub>v \<rbrakk> ~ SNum n1  \<and> i \<lbrakk> v2'[y::=v]\<^sub>c\<^sub>e\<^sub>v \<rbrakk> ~ SNum n2
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
i \<lbrakk> v1'[y::=v]\<^sub>c\<^sub>e\<^sub>v \<rbrakk> ~ SNum n1  \<and> i \<lbrakk> v2'[y::=v]\<^sub>c\<^sub>e\<^sub>v \<rbrakk> ~ SNum n2

goal (7 subgoals):
 1. \<And>i v1 n1 v2 n2 e. \<lbrakk>i \<lbrakk> v1 \<rbrakk> ~ SNum n1 ; \<And>e. \<lbrakk>v1 = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SNum n1 ; i \<lbrakk> v2 \<rbrakk> ~ SNum n2 ; \<And>e. \<lbrakk>v2 = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SNum n2 ; [ plus v1 v2 ]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SNum (n1 + n2)
 2. \<And>i v1 n1 v2 n2 e. \<lbrakk>i \<lbrakk> v1 \<rbrakk> ~ SNum n1 ; \<And>e. \<lbrakk>v1 = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SNum n1 ; i \<lbrakk> v2 \<rbrakk> ~ SNum n2 ; \<And>e. \<lbrakk>v2 = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SNum n2 ; [ leq v1 v2 ]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBool (n1 \<le> n2)
 3. \<And>i v1 s1 v2 s2 e. \<lbrakk>i \<lbrakk> v1 \<rbrakk> ~ s1 ; \<And>e. \<lbrakk>v1 = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ s1 ; i \<lbrakk> v2 \<rbrakk> ~ s2 ; \<And>e. \<lbrakk>v2 = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ s2 ; [ eq v1 v2 ]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBool (s1 = s2)
 4. \<And>i va v1 v2 e. \<lbrakk>i \<lbrakk> va \<rbrakk> ~ SPair v1 v2 ; \<And>e. \<lbrakk>va = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SPair v1 v2 ; [#1va]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ v1
 5. \<And>i va v1 v2 e. \<lbrakk>i \<lbrakk> va \<rbrakk> ~ SPair v1 v2 ; \<And>e. \<lbrakk>va = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SPair v1 v2 ; [#2va]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ v2
 6. \<And>i v1 bv1 v2 bv2 e. \<lbrakk>i \<lbrakk> v1 \<rbrakk> ~ SBitvec bv1 ; \<And>e. \<lbrakk>v1 = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBitvec bv1 ; i \<lbrakk> v2 \<rbrakk> ~ SBitvec bv2 ; \<And>e. \<lbrakk>v2 = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBitvec bv2 ; [ v1 @@ v2 ]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBitvec (bv1 @ bv2)
 7. \<And>i va bv e. \<lbrakk>i \<lbrakk> va \<rbrakk> ~ SBitvec bv ; \<And>e. \<lbrakk>va = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBitvec bv ; [| va |]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SNum (int (length bv))
[PROOF STEP]
hence "eval_e (i ( y \<mapsto> s )) v1' (SNum n1) \<and>  eval_e (i ( y \<mapsto> s )) v2' (SNum n2)"
[PROOF STATE]
proof (prove)
using this:
i \<lbrakk> v1'[y::=v]\<^sub>c\<^sub>e\<^sub>v \<rbrakk> ~ SNum n1  \<and> i \<lbrakk> v2'[y::=v]\<^sub>c\<^sub>e\<^sub>v \<rbrakk> ~ SNum n2

goal (1 subgoal):
 1. i(y \<mapsto> s) \<lbrakk> v1' \<rbrakk> ~ SNum n1  \<and> i(y \<mapsto> s) \<lbrakk> v2' \<rbrakk> ~ SNum n2
[PROOF STEP]
using subst_v_eval_v eval_e_plusI
[PROOF STATE]
proof (prove)
using this:
i \<lbrakk> v1'[y::=v]\<^sub>c\<^sub>e\<^sub>v \<rbrakk> ~ SNum n1  \<and> i \<lbrakk> v2'[y::=v]\<^sub>c\<^sub>e\<^sub>v \<rbrakk> ~ SNum n2
\<lbrakk>?i \<lbrakk> ?v \<rbrakk> ~ ?s ; ?i \<lbrakk> ?v'[?x::=?v]\<^sub>v\<^sub>v \<rbrakk> ~ ?s' \<rbrakk> \<Longrightarrow> ?i(?x \<mapsto> ?s) \<lbrakk> ?v' \<rbrakk> ~ ?s'
i \<lbrakk> v1 \<rbrakk> ~ SNum n1
\<lbrakk>v1 = ?e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> ?e \<rbrakk> ~ SNum n1
i \<lbrakk> v2 \<rbrakk> ~ SNum n2
\<lbrakk>v2 = ?e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> ?e \<rbrakk> ~ SNum n2
[ plus v1 v2 ]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v
i \<lbrakk> v \<rbrakk> ~ s

goal (1 subgoal):
 1. i(y \<mapsto> s) \<lbrakk> v1' \<rbrakk> ~ SNum n1  \<and> i(y \<mapsto> s) \<lbrakk> v2' \<rbrakk> ~ SNum n2
[PROOF STEP]
using "local.*"
[PROOF STATE]
proof (prove)
using this:
i \<lbrakk> v1'[y::=v]\<^sub>c\<^sub>e\<^sub>v \<rbrakk> ~ SNum n1  \<and> i \<lbrakk> v2'[y::=v]\<^sub>c\<^sub>e\<^sub>v \<rbrakk> ~ SNum n2
\<lbrakk>?i \<lbrakk> ?v \<rbrakk> ~ ?s ; ?i \<lbrakk> ?v'[?x::=?v]\<^sub>v\<^sub>v \<rbrakk> ~ ?s' \<rbrakk> \<Longrightarrow> ?i(?x \<mapsto> ?s) \<lbrakk> ?v' \<rbrakk> ~ ?s'
i \<lbrakk> v1 \<rbrakk> ~ SNum n1
\<lbrakk>v1 = ?e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> ?e \<rbrakk> ~ SNum n1
i \<lbrakk> v2 \<rbrakk> ~ SNum n2
\<lbrakk>v2 = ?e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> ?e \<rbrakk> ~ SNum n2
[ plus v1 v2 ]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v
i \<lbrakk> v \<rbrakk> ~ s
e = [ plus v1' v2' ]\<^sup>c\<^sup>e \<and> v1 = v1'[y::=v]\<^sub>c\<^sub>e\<^sub>v \<and> v2 = v2'[y::=v]\<^sub>c\<^sub>e\<^sub>v

goal (1 subgoal):
 1. i(y \<mapsto> s) \<lbrakk> v1' \<rbrakk> ~ SNum n1  \<and> i(y \<mapsto> s) \<lbrakk> v2' \<rbrakk> ~ SNum n2
[PROOF STEP]
by blast
[PROOF STATE]
proof (state)
this:
i(y \<mapsto> s) \<lbrakk> v1' \<rbrakk> ~ SNum n1  \<and> i(y \<mapsto> s) \<lbrakk> v2' \<rbrakk> ~ SNum n2

goal (7 subgoals):
 1. \<And>i v1 n1 v2 n2 e. \<lbrakk>i \<lbrakk> v1 \<rbrakk> ~ SNum n1 ; \<And>e. \<lbrakk>v1 = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SNum n1 ; i \<lbrakk> v2 \<rbrakk> ~ SNum n2 ; \<And>e. \<lbrakk>v2 = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SNum n2 ; [ plus v1 v2 ]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SNum (n1 + n2)
 2. \<And>i v1 n1 v2 n2 e. \<lbrakk>i \<lbrakk> v1 \<rbrakk> ~ SNum n1 ; \<And>e. \<lbrakk>v1 = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SNum n1 ; i \<lbrakk> v2 \<rbrakk> ~ SNum n2 ; \<And>e. \<lbrakk>v2 = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SNum n2 ; [ leq v1 v2 ]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBool (n1 \<le> n2)
 3. \<And>i v1 s1 v2 s2 e. \<lbrakk>i \<lbrakk> v1 \<rbrakk> ~ s1 ; \<And>e. \<lbrakk>v1 = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ s1 ; i \<lbrakk> v2 \<rbrakk> ~ s2 ; \<And>e. \<lbrakk>v2 = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ s2 ; [ eq v1 v2 ]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBool (s1 = s2)
 4. \<And>i va v1 v2 e. \<lbrakk>i \<lbrakk> va \<rbrakk> ~ SPair v1 v2 ; \<And>e. \<lbrakk>va = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SPair v1 v2 ; [#1va]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ v1
 5. \<And>i va v1 v2 e. \<lbrakk>i \<lbrakk> va \<rbrakk> ~ SPair v1 v2 ; \<And>e. \<lbrakk>va = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SPair v1 v2 ; [#2va]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ v2
 6. \<And>i v1 bv1 v2 bv2 e. \<lbrakk>i \<lbrakk> v1 \<rbrakk> ~ SBitvec bv1 ; \<And>e. \<lbrakk>v1 = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBitvec bv1 ; i \<lbrakk> v2 \<rbrakk> ~ SBitvec bv2 ; \<And>e. \<lbrakk>v2 = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBitvec bv2 ; [ v1 @@ v2 ]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBitvec (bv1 @ bv2)
 7. \<And>i va bv e. \<lbrakk>i \<lbrakk> va \<rbrakk> ~ SBitvec bv ; \<And>e. \<lbrakk>va = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBitvec bv ; [| va |]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SNum (int (length bv))
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
i(y \<mapsto> s) \<lbrakk> v1' \<rbrakk> ~ SNum n1  \<and> i(y \<mapsto> s) \<lbrakk> v2' \<rbrakk> ~ SNum n2
[PROOF STEP]
show ?case
[PROOF STATE]
proof (prove)
using this:
i(y \<mapsto> s) \<lbrakk> v1' \<rbrakk> ~ SNum n1  \<and> i(y \<mapsto> s) \<lbrakk> v2' \<rbrakk> ~ SNum n2

goal (1 subgoal):
 1. i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SNum (n1 + n2)
[PROOF STEP]
using RCLogic.eval_e_plusI *
[PROOF STATE]
proof (prove)
using this:
i(y \<mapsto> s) \<lbrakk> v1' \<rbrakk> ~ SNum n1  \<and> i(y \<mapsto> s) \<lbrakk> v2' \<rbrakk> ~ SNum n2
\<lbrakk>?i \<lbrakk> ?v1.0 \<rbrakk> ~ SNum ?n1.0 ; ?i \<lbrakk> ?v2.0 \<rbrakk> ~ SNum ?n2.0 \<rbrakk> \<Longrightarrow> ?i \<lbrakk> [ plus ?v1.0 ?v2.0 ]\<^sup>c\<^sup>e \<rbrakk> ~ SNum (?n1.0 + ?n2.0)
e = [ plus v1' v2' ]\<^sup>c\<^sup>e \<and> v1 = v1'[y::=v]\<^sub>c\<^sub>e\<^sub>v \<and> v2 = v2'[y::=v]\<^sub>c\<^sub>e\<^sub>v

goal (1 subgoal):
 1. i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SNum (n1 + n2)
[PROOF STEP]
by meson
[PROOF STATE]
proof (state)
this:
i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SNum (n1 + n2)

goal (6 subgoals):
 1. \<And>i v1 n1 v2 n2 e. \<lbrakk>i \<lbrakk> v1 \<rbrakk> ~ SNum n1 ; \<And>e. \<lbrakk>v1 = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SNum n1 ; i \<lbrakk> v2 \<rbrakk> ~ SNum n2 ; \<And>e. \<lbrakk>v2 = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SNum n2 ; [ leq v1 v2 ]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBool (n1 \<le> n2)
 2. \<And>i v1 s1 v2 s2 e. \<lbrakk>i \<lbrakk> v1 \<rbrakk> ~ s1 ; \<And>e. \<lbrakk>v1 = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ s1 ; i \<lbrakk> v2 \<rbrakk> ~ s2 ; \<And>e. \<lbrakk>v2 = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ s2 ; [ eq v1 v2 ]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBool (s1 = s2)
 3. \<And>i va v1 v2 e. \<lbrakk>i \<lbrakk> va \<rbrakk> ~ SPair v1 v2 ; \<And>e. \<lbrakk>va = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SPair v1 v2 ; [#1va]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ v1
 4. \<And>i va v1 v2 e. \<lbrakk>i \<lbrakk> va \<rbrakk> ~ SPair v1 v2 ; \<And>e. \<lbrakk>va = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SPair v1 v2 ; [#2va]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ v2
 5. \<And>i v1 bv1 v2 bv2 e. \<lbrakk>i \<lbrakk> v1 \<rbrakk> ~ SBitvec bv1 ; \<And>e. \<lbrakk>v1 = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBitvec bv1 ; i \<lbrakk> v2 \<rbrakk> ~ SBitvec bv2 ; \<And>e. \<lbrakk>v2 = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBitvec bv2 ; [ v1 @@ v2 ]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBitvec (bv1 @ bv2)
 6. \<And>i va bv e. \<lbrakk>i \<lbrakk> va \<rbrakk> ~ SBitvec bv ; \<And>e. \<lbrakk>va = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBitvec bv ; [| va |]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SNum (int (length bv))
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (6 subgoals):
 1. \<And>i v1 n1 v2 n2 e. \<lbrakk>i \<lbrakk> v1 \<rbrakk> ~ SNum n1 ; \<And>e. \<lbrakk>v1 = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SNum n1 ; i \<lbrakk> v2 \<rbrakk> ~ SNum n2 ; \<And>e. \<lbrakk>v2 = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SNum n2 ; [ leq v1 v2 ]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBool (n1 \<le> n2)
 2. \<And>i v1 s1 v2 s2 e. \<lbrakk>i \<lbrakk> v1 \<rbrakk> ~ s1 ; \<And>e. \<lbrakk>v1 = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ s1 ; i \<lbrakk> v2 \<rbrakk> ~ s2 ; \<And>e. \<lbrakk>v2 = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ s2 ; [ eq v1 v2 ]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBool (s1 = s2)
 3. \<And>i va v1 v2 e. \<lbrakk>i \<lbrakk> va \<rbrakk> ~ SPair v1 v2 ; \<And>e. \<lbrakk>va = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SPair v1 v2 ; [#1va]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ v1
 4. \<And>i va v1 v2 e. \<lbrakk>i \<lbrakk> va \<rbrakk> ~ SPair v1 v2 ; \<And>e. \<lbrakk>va = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SPair v1 v2 ; [#2va]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ v2
 5. \<And>i v1 bv1 v2 bv2 e. \<lbrakk>i \<lbrakk> v1 \<rbrakk> ~ SBitvec bv1 ; \<And>e. \<lbrakk>v1 = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBitvec bv1 ; i \<lbrakk> v2 \<rbrakk> ~ SBitvec bv2 ; \<And>e. \<lbrakk>v2 = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBitvec bv2 ; [ v1 @@ v2 ]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBitvec (bv1 @ bv2)
 6. \<And>i va bv e. \<lbrakk>i \<lbrakk> va \<rbrakk> ~ SBitvec bv ; \<And>e. \<lbrakk>va = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBitvec bv ; [| va |]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SNum (int (length bv))
[PROOF STEP]
case (eval_e_leqI i v1 n1 v2 n2)
[PROOF STATE]
proof (state)
this:
i \<lbrakk> v1 \<rbrakk> ~ SNum n1
\<lbrakk>v1 = ?e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> ?e \<rbrakk> ~ SNum n1
i \<lbrakk> v2 \<rbrakk> ~ SNum n2
\<lbrakk>v2 = ?e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> ?e \<rbrakk> ~ SNum n2
[ leq v1 v2 ]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v
i \<lbrakk> v \<rbrakk> ~ s

goal (6 subgoals):
 1. \<And>i v1 n1 v2 n2 e. \<lbrakk>i \<lbrakk> v1 \<rbrakk> ~ SNum n1 ; \<And>e. \<lbrakk>v1 = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SNum n1 ; i \<lbrakk> v2 \<rbrakk> ~ SNum n2 ; \<And>e. \<lbrakk>v2 = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SNum n2 ; [ leq v1 v2 ]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBool (n1 \<le> n2)
 2. \<And>i v1 s1 v2 s2 e. \<lbrakk>i \<lbrakk> v1 \<rbrakk> ~ s1 ; \<And>e. \<lbrakk>v1 = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ s1 ; i \<lbrakk> v2 \<rbrakk> ~ s2 ; \<And>e. \<lbrakk>v2 = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ s2 ; [ eq v1 v2 ]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBool (s1 = s2)
 3. \<And>i va v1 v2 e. \<lbrakk>i \<lbrakk> va \<rbrakk> ~ SPair v1 v2 ; \<And>e. \<lbrakk>va = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SPair v1 v2 ; [#1va]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ v1
 4. \<And>i va v1 v2 e. \<lbrakk>i \<lbrakk> va \<rbrakk> ~ SPair v1 v2 ; \<And>e. \<lbrakk>va = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SPair v1 v2 ; [#2va]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ v2
 5. \<And>i v1 bv1 v2 bv2 e. \<lbrakk>i \<lbrakk> v1 \<rbrakk> ~ SBitvec bv1 ; \<And>e. \<lbrakk>v1 = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBitvec bv1 ; i \<lbrakk> v2 \<rbrakk> ~ SBitvec bv2 ; \<And>e. \<lbrakk>v2 = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBitvec bv2 ; [ v1 @@ v2 ]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBitvec (bv1 @ bv2)
 6. \<And>i va bv e. \<lbrakk>i \<lbrakk> va \<rbrakk> ~ SBitvec bv ; \<And>e. \<lbrakk>va = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBitvec bv ; [| va |]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SNum (int (length bv))
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
i \<lbrakk> v1 \<rbrakk> ~ SNum n1
\<lbrakk>v1 = ?e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> ?e \<rbrakk> ~ SNum n1
i \<lbrakk> v2 \<rbrakk> ~ SNum n2
\<lbrakk>v2 = ?e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> ?e \<rbrakk> ~ SNum n2
[ leq v1 v2 ]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v
i \<lbrakk> v \<rbrakk> ~ s
[PROOF STEP]
obtain v1' and v2' where *:"e = CE_op LEq v1' v2' \<and> v1 = v1'[y::=v]\<^sub>c\<^sub>e\<^sub>v \<and> v2 = v2'[y::=v]\<^sub>c\<^sub>e\<^sub>v"
[PROOF STATE]
proof (prove)
using this:
i \<lbrakk> v1 \<rbrakk> ~ SNum n1
\<lbrakk>v1 = ?e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> ?e \<rbrakk> ~ SNum n1
i \<lbrakk> v2 \<rbrakk> ~ SNum n2
\<lbrakk>v2 = ?e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> ?e \<rbrakk> ~ SNum n2
[ leq v1 v2 ]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v
i \<lbrakk> v \<rbrakk> ~ s

goal (1 subgoal):
 1. (\<And>v1' v2'. e = [ leq v1' v2' ]\<^sup>c\<^sup>e \<and> v1 = v1'[y::=v]\<^sub>c\<^sub>e\<^sub>v \<and> v2 = v2'[y::=v]\<^sub>c\<^sub>e\<^sub>v \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
using assms
[PROOF STATE]
proof (prove)
using this:
i \<lbrakk> v1 \<rbrakk> ~ SNum n1
\<lbrakk>v1 = ?e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> ?e \<rbrakk> ~ SNum n1
i \<lbrakk> v2 \<rbrakk> ~ SNum n2
\<lbrakk>v2 = ?e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> ?e \<rbrakk> ~ SNum n2
[ leq v1 v2 ]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v
i \<lbrakk> v \<rbrakk> ~ s
i \<lbrakk> e' \<rbrakk> ~ s'
e' = e[y::=v]\<^sub>c\<^sub>e\<^sub>v
i \<lbrakk> v \<rbrakk> ~ s

goal (1 subgoal):
 1. (\<And>v1' v2'. e = [ leq v1' v2' ]\<^sup>c\<^sup>e \<and> v1 = v1'[y::=v]\<^sub>c\<^sub>e\<^sub>v \<and> v2 = v2'[y::=v]\<^sub>c\<^sub>e\<^sub>v \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by(nominal_induct e rule:ce.strong_induct,simp+)
[PROOF STATE]
proof (state)
this:
e = [ leq v1' v2' ]\<^sup>c\<^sup>e \<and> v1 = v1'[y::=v]\<^sub>c\<^sub>e\<^sub>v \<and> v2 = v2'[y::=v]\<^sub>c\<^sub>e\<^sub>v

goal (6 subgoals):
 1. \<And>i v1 n1 v2 n2 e. \<lbrakk>i \<lbrakk> v1 \<rbrakk> ~ SNum n1 ; \<And>e. \<lbrakk>v1 = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SNum n1 ; i \<lbrakk> v2 \<rbrakk> ~ SNum n2 ; \<And>e. \<lbrakk>v2 = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SNum n2 ; [ leq v1 v2 ]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBool (n1 \<le> n2)
 2. \<And>i v1 s1 v2 s2 e. \<lbrakk>i \<lbrakk> v1 \<rbrakk> ~ s1 ; \<And>e. \<lbrakk>v1 = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ s1 ; i \<lbrakk> v2 \<rbrakk> ~ s2 ; \<And>e. \<lbrakk>v2 = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ s2 ; [ eq v1 v2 ]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBool (s1 = s2)
 3. \<And>i va v1 v2 e. \<lbrakk>i \<lbrakk> va \<rbrakk> ~ SPair v1 v2 ; \<And>e. \<lbrakk>va = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SPair v1 v2 ; [#1va]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ v1
 4. \<And>i va v1 v2 e. \<lbrakk>i \<lbrakk> va \<rbrakk> ~ SPair v1 v2 ; \<And>e. \<lbrakk>va = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SPair v1 v2 ; [#2va]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ v2
 5. \<And>i v1 bv1 v2 bv2 e. \<lbrakk>i \<lbrakk> v1 \<rbrakk> ~ SBitvec bv1 ; \<And>e. \<lbrakk>v1 = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBitvec bv1 ; i \<lbrakk> v2 \<rbrakk> ~ SBitvec bv2 ; \<And>e. \<lbrakk>v2 = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBitvec bv2 ; [ v1 @@ v2 ]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBitvec (bv1 @ bv2)
 6. \<And>i va bv e. \<lbrakk>i \<lbrakk> va \<rbrakk> ~ SBitvec bv ; \<And>e. \<lbrakk>va = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBitvec bv ; [| va |]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SNum (int (length bv))
[PROOF STEP]
hence "eval_e i (v1'[y::=v]\<^sub>c\<^sub>e\<^sub>v) (SNum n1) \<and> eval_e i (v2'[y::=v]\<^sub>c\<^sub>e\<^sub>v) (SNum n2)"
[PROOF STATE]
proof (prove)
using this:
e = [ leq v1' v2' ]\<^sup>c\<^sup>e \<and> v1 = v1'[y::=v]\<^sub>c\<^sub>e\<^sub>v \<and> v2 = v2'[y::=v]\<^sub>c\<^sub>e\<^sub>v

goal (1 subgoal):
 1. i \<lbrakk> v1'[y::=v]\<^sub>c\<^sub>e\<^sub>v \<rbrakk> ~ SNum n1  \<and> i \<lbrakk> v2'[y::=v]\<^sub>c\<^sub>e\<^sub>v \<rbrakk> ~ SNum n2
[PROOF STEP]
using eval_e_leqI
[PROOF STATE]
proof (prove)
using this:
e = [ leq v1' v2' ]\<^sup>c\<^sup>e \<and> v1 = v1'[y::=v]\<^sub>c\<^sub>e\<^sub>v \<and> v2 = v2'[y::=v]\<^sub>c\<^sub>e\<^sub>v
i \<lbrakk> v1 \<rbrakk> ~ SNum n1
\<lbrakk>v1 = ?e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> ?e \<rbrakk> ~ SNum n1
i \<lbrakk> v2 \<rbrakk> ~ SNum n2
\<lbrakk>v2 = ?e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> ?e \<rbrakk> ~ SNum n2
[ leq v1 v2 ]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v
i \<lbrakk> v \<rbrakk> ~ s

goal (1 subgoal):
 1. i \<lbrakk> v1'[y::=v]\<^sub>c\<^sub>e\<^sub>v \<rbrakk> ~ SNum n1  \<and> i \<lbrakk> v2'[y::=v]\<^sub>c\<^sub>e\<^sub>v \<rbrakk> ~ SNum n2
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
i \<lbrakk> v1'[y::=v]\<^sub>c\<^sub>e\<^sub>v \<rbrakk> ~ SNum n1  \<and> i \<lbrakk> v2'[y::=v]\<^sub>c\<^sub>e\<^sub>v \<rbrakk> ~ SNum n2

goal (6 subgoals):
 1. \<And>i v1 n1 v2 n2 e. \<lbrakk>i \<lbrakk> v1 \<rbrakk> ~ SNum n1 ; \<And>e. \<lbrakk>v1 = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SNum n1 ; i \<lbrakk> v2 \<rbrakk> ~ SNum n2 ; \<And>e. \<lbrakk>v2 = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SNum n2 ; [ leq v1 v2 ]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBool (n1 \<le> n2)
 2. \<And>i v1 s1 v2 s2 e. \<lbrakk>i \<lbrakk> v1 \<rbrakk> ~ s1 ; \<And>e. \<lbrakk>v1 = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ s1 ; i \<lbrakk> v2 \<rbrakk> ~ s2 ; \<And>e. \<lbrakk>v2 = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ s2 ; [ eq v1 v2 ]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBool (s1 = s2)
 3. \<And>i va v1 v2 e. \<lbrakk>i \<lbrakk> va \<rbrakk> ~ SPair v1 v2 ; \<And>e. \<lbrakk>va = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SPair v1 v2 ; [#1va]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ v1
 4. \<And>i va v1 v2 e. \<lbrakk>i \<lbrakk> va \<rbrakk> ~ SPair v1 v2 ; \<And>e. \<lbrakk>va = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SPair v1 v2 ; [#2va]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ v2
 5. \<And>i v1 bv1 v2 bv2 e. \<lbrakk>i \<lbrakk> v1 \<rbrakk> ~ SBitvec bv1 ; \<And>e. \<lbrakk>v1 = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBitvec bv1 ; i \<lbrakk> v2 \<rbrakk> ~ SBitvec bv2 ; \<And>e. \<lbrakk>v2 = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBitvec bv2 ; [ v1 @@ v2 ]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBitvec (bv1 @ bv2)
 6. \<And>i va bv e. \<lbrakk>i \<lbrakk> va \<rbrakk> ~ SBitvec bv ; \<And>e. \<lbrakk>va = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBitvec bv ; [| va |]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SNum (int (length bv))
[PROOF STEP]
hence "eval_e (i ( y \<mapsto> s )) v1' (SNum n1) \<and>  eval_e (i ( y \<mapsto> s )) v2' (SNum n2)"
[PROOF STATE]
proof (prove)
using this:
i \<lbrakk> v1'[y::=v]\<^sub>c\<^sub>e\<^sub>v \<rbrakk> ~ SNum n1  \<and> i \<lbrakk> v2'[y::=v]\<^sub>c\<^sub>e\<^sub>v \<rbrakk> ~ SNum n2

goal (1 subgoal):
 1. i(y \<mapsto> s) \<lbrakk> v1' \<rbrakk> ~ SNum n1  \<and> i(y \<mapsto> s) \<lbrakk> v2' \<rbrakk> ~ SNum n2
[PROOF STEP]
using subst_v_eval_v eval_e_leqI
[PROOF STATE]
proof (prove)
using this:
i \<lbrakk> v1'[y::=v]\<^sub>c\<^sub>e\<^sub>v \<rbrakk> ~ SNum n1  \<and> i \<lbrakk> v2'[y::=v]\<^sub>c\<^sub>e\<^sub>v \<rbrakk> ~ SNum n2
\<lbrakk>?i \<lbrakk> ?v \<rbrakk> ~ ?s ; ?i \<lbrakk> ?v'[?x::=?v]\<^sub>v\<^sub>v \<rbrakk> ~ ?s' \<rbrakk> \<Longrightarrow> ?i(?x \<mapsto> ?s) \<lbrakk> ?v' \<rbrakk> ~ ?s'
i \<lbrakk> v1 \<rbrakk> ~ SNum n1
\<lbrakk>v1 = ?e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> ?e \<rbrakk> ~ SNum n1
i \<lbrakk> v2 \<rbrakk> ~ SNum n2
\<lbrakk>v2 = ?e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> ?e \<rbrakk> ~ SNum n2
[ leq v1 v2 ]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v
i \<lbrakk> v \<rbrakk> ~ s

goal (1 subgoal):
 1. i(y \<mapsto> s) \<lbrakk> v1' \<rbrakk> ~ SNum n1  \<and> i(y \<mapsto> s) \<lbrakk> v2' \<rbrakk> ~ SNum n2
[PROOF STEP]
using *
[PROOF STATE]
proof (prove)
using this:
i \<lbrakk> v1'[y::=v]\<^sub>c\<^sub>e\<^sub>v \<rbrakk> ~ SNum n1  \<and> i \<lbrakk> v2'[y::=v]\<^sub>c\<^sub>e\<^sub>v \<rbrakk> ~ SNum n2
\<lbrakk>?i \<lbrakk> ?v \<rbrakk> ~ ?s ; ?i \<lbrakk> ?v'[?x::=?v]\<^sub>v\<^sub>v \<rbrakk> ~ ?s' \<rbrakk> \<Longrightarrow> ?i(?x \<mapsto> ?s) \<lbrakk> ?v' \<rbrakk> ~ ?s'
i \<lbrakk> v1 \<rbrakk> ~ SNum n1
\<lbrakk>v1 = ?e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> ?e \<rbrakk> ~ SNum n1
i \<lbrakk> v2 \<rbrakk> ~ SNum n2
\<lbrakk>v2 = ?e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> ?e \<rbrakk> ~ SNum n2
[ leq v1 v2 ]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v
i \<lbrakk> v \<rbrakk> ~ s
e = [ leq v1' v2' ]\<^sup>c\<^sup>e \<and> v1 = v1'[y::=v]\<^sub>c\<^sub>e\<^sub>v \<and> v2 = v2'[y::=v]\<^sub>c\<^sub>e\<^sub>v

goal (1 subgoal):
 1. i(y \<mapsto> s) \<lbrakk> v1' \<rbrakk> ~ SNum n1  \<and> i(y \<mapsto> s) \<lbrakk> v2' \<rbrakk> ~ SNum n2
[PROOF STEP]
by blast
[PROOF STATE]
proof (state)
this:
i(y \<mapsto> s) \<lbrakk> v1' \<rbrakk> ~ SNum n1  \<and> i(y \<mapsto> s) \<lbrakk> v2' \<rbrakk> ~ SNum n2

goal (6 subgoals):
 1. \<And>i v1 n1 v2 n2 e. \<lbrakk>i \<lbrakk> v1 \<rbrakk> ~ SNum n1 ; \<And>e. \<lbrakk>v1 = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SNum n1 ; i \<lbrakk> v2 \<rbrakk> ~ SNum n2 ; \<And>e. \<lbrakk>v2 = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SNum n2 ; [ leq v1 v2 ]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBool (n1 \<le> n2)
 2. \<And>i v1 s1 v2 s2 e. \<lbrakk>i \<lbrakk> v1 \<rbrakk> ~ s1 ; \<And>e. \<lbrakk>v1 = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ s1 ; i \<lbrakk> v2 \<rbrakk> ~ s2 ; \<And>e. \<lbrakk>v2 = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ s2 ; [ eq v1 v2 ]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBool (s1 = s2)
 3. \<And>i va v1 v2 e. \<lbrakk>i \<lbrakk> va \<rbrakk> ~ SPair v1 v2 ; \<And>e. \<lbrakk>va = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SPair v1 v2 ; [#1va]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ v1
 4. \<And>i va v1 v2 e. \<lbrakk>i \<lbrakk> va \<rbrakk> ~ SPair v1 v2 ; \<And>e. \<lbrakk>va = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SPair v1 v2 ; [#2va]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ v2
 5. \<And>i v1 bv1 v2 bv2 e. \<lbrakk>i \<lbrakk> v1 \<rbrakk> ~ SBitvec bv1 ; \<And>e. \<lbrakk>v1 = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBitvec bv1 ; i \<lbrakk> v2 \<rbrakk> ~ SBitvec bv2 ; \<And>e. \<lbrakk>v2 = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBitvec bv2 ; [ v1 @@ v2 ]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBitvec (bv1 @ bv2)
 6. \<And>i va bv e. \<lbrakk>i \<lbrakk> va \<rbrakk> ~ SBitvec bv ; \<And>e. \<lbrakk>va = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBitvec bv ; [| va |]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SNum (int (length bv))
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
i(y \<mapsto> s) \<lbrakk> v1' \<rbrakk> ~ SNum n1  \<and> i(y \<mapsto> s) \<lbrakk> v2' \<rbrakk> ~ SNum n2
[PROOF STEP]
show ?case
[PROOF STATE]
proof (prove)
using this:
i(y \<mapsto> s) \<lbrakk> v1' \<rbrakk> ~ SNum n1  \<and> i(y \<mapsto> s) \<lbrakk> v2' \<rbrakk> ~ SNum n2

goal (1 subgoal):
 1. i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBool (n1 \<le> n2)
[PROOF STEP]
using RCLogic.eval_e_leqI *
[PROOF STATE]
proof (prove)
using this:
i(y \<mapsto> s) \<lbrakk> v1' \<rbrakk> ~ SNum n1  \<and> i(y \<mapsto> s) \<lbrakk> v2' \<rbrakk> ~ SNum n2
\<lbrakk>?i \<lbrakk> ?v1.0 \<rbrakk> ~ SNum ?n1.0 ; ?i \<lbrakk> ?v2.0 \<rbrakk> ~ SNum ?n2.0 \<rbrakk> \<Longrightarrow> ?i \<lbrakk> [ leq ?v1.0 ?v2.0 ]\<^sup>c\<^sup>e \<rbrakk> ~ SBool (?n1.0 \<le> ?n2.0)
e = [ leq v1' v2' ]\<^sup>c\<^sup>e \<and> v1 = v1'[y::=v]\<^sub>c\<^sub>e\<^sub>v \<and> v2 = v2'[y::=v]\<^sub>c\<^sub>e\<^sub>v

goal (1 subgoal):
 1. i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBool (n1 \<le> n2)
[PROOF STEP]
by meson
[PROOF STATE]
proof (state)
this:
i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBool (n1 \<le> n2)

goal (5 subgoals):
 1. \<And>i v1 s1 v2 s2 e. \<lbrakk>i \<lbrakk> v1 \<rbrakk> ~ s1 ; \<And>e. \<lbrakk>v1 = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ s1 ; i \<lbrakk> v2 \<rbrakk> ~ s2 ; \<And>e. \<lbrakk>v2 = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ s2 ; [ eq v1 v2 ]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBool (s1 = s2)
 2. \<And>i va v1 v2 e. \<lbrakk>i \<lbrakk> va \<rbrakk> ~ SPair v1 v2 ; \<And>e. \<lbrakk>va = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SPair v1 v2 ; [#1va]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ v1
 3. \<And>i va v1 v2 e. \<lbrakk>i \<lbrakk> va \<rbrakk> ~ SPair v1 v2 ; \<And>e. \<lbrakk>va = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SPair v1 v2 ; [#2va]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ v2
 4. \<And>i v1 bv1 v2 bv2 e. \<lbrakk>i \<lbrakk> v1 \<rbrakk> ~ SBitvec bv1 ; \<And>e. \<lbrakk>v1 = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBitvec bv1 ; i \<lbrakk> v2 \<rbrakk> ~ SBitvec bv2 ; \<And>e. \<lbrakk>v2 = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBitvec bv2 ; [ v1 @@ v2 ]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBitvec (bv1 @ bv2)
 5. \<And>i va bv e. \<lbrakk>i \<lbrakk> va \<rbrakk> ~ SBitvec bv ; \<And>e. \<lbrakk>va = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBitvec bv ; [| va |]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SNum (int (length bv))
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (5 subgoals):
 1. \<And>i v1 s1 v2 s2 e. \<lbrakk>i \<lbrakk> v1 \<rbrakk> ~ s1 ; \<And>e. \<lbrakk>v1 = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ s1 ; i \<lbrakk> v2 \<rbrakk> ~ s2 ; \<And>e. \<lbrakk>v2 = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ s2 ; [ eq v1 v2 ]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBool (s1 = s2)
 2. \<And>i va v1 v2 e. \<lbrakk>i \<lbrakk> va \<rbrakk> ~ SPair v1 v2 ; \<And>e. \<lbrakk>va = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SPair v1 v2 ; [#1va]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ v1
 3. \<And>i va v1 v2 e. \<lbrakk>i \<lbrakk> va \<rbrakk> ~ SPair v1 v2 ; \<And>e. \<lbrakk>va = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SPair v1 v2 ; [#2va]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ v2
 4. \<And>i v1 bv1 v2 bv2 e. \<lbrakk>i \<lbrakk> v1 \<rbrakk> ~ SBitvec bv1 ; \<And>e. \<lbrakk>v1 = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBitvec bv1 ; i \<lbrakk> v2 \<rbrakk> ~ SBitvec bv2 ; \<And>e. \<lbrakk>v2 = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBitvec bv2 ; [ v1 @@ v2 ]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBitvec (bv1 @ bv2)
 5. \<And>i va bv e. \<lbrakk>i \<lbrakk> va \<rbrakk> ~ SBitvec bv ; \<And>e. \<lbrakk>va = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBitvec bv ; [| va |]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SNum (int (length bv))
[PROOF STEP]
case (eval_e_eqI i v1 n1 v2 n2)
[PROOF STATE]
proof (state)
this:
i \<lbrakk> v1 \<rbrakk> ~ n1
\<lbrakk>v1 = ?e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> ?e \<rbrakk> ~ n1
i \<lbrakk> v2 \<rbrakk> ~ n2
\<lbrakk>v2 = ?e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> ?e \<rbrakk> ~ n2
[ eq v1 v2 ]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v
i \<lbrakk> v \<rbrakk> ~ s

goal (5 subgoals):
 1. \<And>i v1 s1 v2 s2 e. \<lbrakk>i \<lbrakk> v1 \<rbrakk> ~ s1 ; \<And>e. \<lbrakk>v1 = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ s1 ; i \<lbrakk> v2 \<rbrakk> ~ s2 ; \<And>e. \<lbrakk>v2 = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ s2 ; [ eq v1 v2 ]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBool (s1 = s2)
 2. \<And>i va v1 v2 e. \<lbrakk>i \<lbrakk> va \<rbrakk> ~ SPair v1 v2 ; \<And>e. \<lbrakk>va = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SPair v1 v2 ; [#1va]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ v1
 3. \<And>i va v1 v2 e. \<lbrakk>i \<lbrakk> va \<rbrakk> ~ SPair v1 v2 ; \<And>e. \<lbrakk>va = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SPair v1 v2 ; [#2va]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ v2
 4. \<And>i v1 bv1 v2 bv2 e. \<lbrakk>i \<lbrakk> v1 \<rbrakk> ~ SBitvec bv1 ; \<And>e. \<lbrakk>v1 = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBitvec bv1 ; i \<lbrakk> v2 \<rbrakk> ~ SBitvec bv2 ; \<And>e. \<lbrakk>v2 = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBitvec bv2 ; [ v1 @@ v2 ]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBitvec (bv1 @ bv2)
 5. \<And>i va bv e. \<lbrakk>i \<lbrakk> va \<rbrakk> ~ SBitvec bv ; \<And>e. \<lbrakk>va = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBitvec bv ; [| va |]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SNum (int (length bv))
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
i \<lbrakk> v1 \<rbrakk> ~ n1
\<lbrakk>v1 = ?e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> ?e \<rbrakk> ~ n1
i \<lbrakk> v2 \<rbrakk> ~ n2
\<lbrakk>v2 = ?e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> ?e \<rbrakk> ~ n2
[ eq v1 v2 ]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v
i \<lbrakk> v \<rbrakk> ~ s
[PROOF STEP]
obtain v1' and v2' where *:"e = CE_op Eq v1' v2' \<and> v1 = v1'[y::=v]\<^sub>c\<^sub>e\<^sub>v \<and> v2 = v2'[y::=v]\<^sub>c\<^sub>e\<^sub>v"
[PROOF STATE]
proof (prove)
using this:
i \<lbrakk> v1 \<rbrakk> ~ n1
\<lbrakk>v1 = ?e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> ?e \<rbrakk> ~ n1
i \<lbrakk> v2 \<rbrakk> ~ n2
\<lbrakk>v2 = ?e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> ?e \<rbrakk> ~ n2
[ eq v1 v2 ]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v
i \<lbrakk> v \<rbrakk> ~ s

goal (1 subgoal):
 1. (\<And>v1' v2'. e = [ eq v1' v2' ]\<^sup>c\<^sup>e \<and> v1 = v1'[y::=v]\<^sub>c\<^sub>e\<^sub>v \<and> v2 = v2'[y::=v]\<^sub>c\<^sub>e\<^sub>v \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
using assms
[PROOF STATE]
proof (prove)
using this:
i \<lbrakk> v1 \<rbrakk> ~ n1
\<lbrakk>v1 = ?e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> ?e \<rbrakk> ~ n1
i \<lbrakk> v2 \<rbrakk> ~ n2
\<lbrakk>v2 = ?e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> ?e \<rbrakk> ~ n2
[ eq v1 v2 ]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v
i \<lbrakk> v \<rbrakk> ~ s
i \<lbrakk> e' \<rbrakk> ~ s'
e' = e[y::=v]\<^sub>c\<^sub>e\<^sub>v
i \<lbrakk> v \<rbrakk> ~ s

goal (1 subgoal):
 1. (\<And>v1' v2'. e = [ eq v1' v2' ]\<^sup>c\<^sup>e \<and> v1 = v1'[y::=v]\<^sub>c\<^sub>e\<^sub>v \<and> v2 = v2'[y::=v]\<^sub>c\<^sub>e\<^sub>v \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by(nominal_induct e rule:ce.strong_induct,simp+)
[PROOF STATE]
proof (state)
this:
e = [ eq v1' v2' ]\<^sup>c\<^sup>e \<and> v1 = v1'[y::=v]\<^sub>c\<^sub>e\<^sub>v \<and> v2 = v2'[y::=v]\<^sub>c\<^sub>e\<^sub>v

goal (5 subgoals):
 1. \<And>i v1 s1 v2 s2 e. \<lbrakk>i \<lbrakk> v1 \<rbrakk> ~ s1 ; \<And>e. \<lbrakk>v1 = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ s1 ; i \<lbrakk> v2 \<rbrakk> ~ s2 ; \<And>e. \<lbrakk>v2 = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ s2 ; [ eq v1 v2 ]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBool (s1 = s2)
 2. \<And>i va v1 v2 e. \<lbrakk>i \<lbrakk> va \<rbrakk> ~ SPair v1 v2 ; \<And>e. \<lbrakk>va = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SPair v1 v2 ; [#1va]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ v1
 3. \<And>i va v1 v2 e. \<lbrakk>i \<lbrakk> va \<rbrakk> ~ SPair v1 v2 ; \<And>e. \<lbrakk>va = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SPair v1 v2 ; [#2va]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ v2
 4. \<And>i v1 bv1 v2 bv2 e. \<lbrakk>i \<lbrakk> v1 \<rbrakk> ~ SBitvec bv1 ; \<And>e. \<lbrakk>v1 = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBitvec bv1 ; i \<lbrakk> v2 \<rbrakk> ~ SBitvec bv2 ; \<And>e. \<lbrakk>v2 = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBitvec bv2 ; [ v1 @@ v2 ]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBitvec (bv1 @ bv2)
 5. \<And>i va bv e. \<lbrakk>i \<lbrakk> va \<rbrakk> ~ SBitvec bv ; \<And>e. \<lbrakk>va = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBitvec bv ; [| va |]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SNum (int (length bv))
[PROOF STEP]
hence "eval_e i (v1'[y::=v]\<^sub>c\<^sub>e\<^sub>v) n1 \<and> eval_e i (v2'[y::=v]\<^sub>c\<^sub>e\<^sub>v) n2"
[PROOF STATE]
proof (prove)
using this:
e = [ eq v1' v2' ]\<^sup>c\<^sup>e \<and> v1 = v1'[y::=v]\<^sub>c\<^sub>e\<^sub>v \<and> v2 = v2'[y::=v]\<^sub>c\<^sub>e\<^sub>v

goal (1 subgoal):
 1. i \<lbrakk> v1'[y::=v]\<^sub>c\<^sub>e\<^sub>v \<rbrakk> ~ n1  \<and> i \<lbrakk> v2'[y::=v]\<^sub>c\<^sub>e\<^sub>v \<rbrakk> ~ n2
[PROOF STEP]
using eval_e_eqI
[PROOF STATE]
proof (prove)
using this:
e = [ eq v1' v2' ]\<^sup>c\<^sup>e \<and> v1 = v1'[y::=v]\<^sub>c\<^sub>e\<^sub>v \<and> v2 = v2'[y::=v]\<^sub>c\<^sub>e\<^sub>v
i \<lbrakk> v1 \<rbrakk> ~ n1
\<lbrakk>v1 = ?e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> ?e \<rbrakk> ~ n1
i \<lbrakk> v2 \<rbrakk> ~ n2
\<lbrakk>v2 = ?e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> ?e \<rbrakk> ~ n2
[ eq v1 v2 ]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v
i \<lbrakk> v \<rbrakk> ~ s

goal (1 subgoal):
 1. i \<lbrakk> v1'[y::=v]\<^sub>c\<^sub>e\<^sub>v \<rbrakk> ~ n1  \<and> i \<lbrakk> v2'[y::=v]\<^sub>c\<^sub>e\<^sub>v \<rbrakk> ~ n2
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
i \<lbrakk> v1'[y::=v]\<^sub>c\<^sub>e\<^sub>v \<rbrakk> ~ n1  \<and> i \<lbrakk> v2'[y::=v]\<^sub>c\<^sub>e\<^sub>v \<rbrakk> ~ n2

goal (5 subgoals):
 1. \<And>i v1 s1 v2 s2 e. \<lbrakk>i \<lbrakk> v1 \<rbrakk> ~ s1 ; \<And>e. \<lbrakk>v1 = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ s1 ; i \<lbrakk> v2 \<rbrakk> ~ s2 ; \<And>e. \<lbrakk>v2 = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ s2 ; [ eq v1 v2 ]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBool (s1 = s2)
 2. \<And>i va v1 v2 e. \<lbrakk>i \<lbrakk> va \<rbrakk> ~ SPair v1 v2 ; \<And>e. \<lbrakk>va = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SPair v1 v2 ; [#1va]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ v1
 3. \<And>i va v1 v2 e. \<lbrakk>i \<lbrakk> va \<rbrakk> ~ SPair v1 v2 ; \<And>e. \<lbrakk>va = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SPair v1 v2 ; [#2va]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ v2
 4. \<And>i v1 bv1 v2 bv2 e. \<lbrakk>i \<lbrakk> v1 \<rbrakk> ~ SBitvec bv1 ; \<And>e. \<lbrakk>v1 = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBitvec bv1 ; i \<lbrakk> v2 \<rbrakk> ~ SBitvec bv2 ; \<And>e. \<lbrakk>v2 = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBitvec bv2 ; [ v1 @@ v2 ]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBitvec (bv1 @ bv2)
 5. \<And>i va bv e. \<lbrakk>i \<lbrakk> va \<rbrakk> ~ SBitvec bv ; \<And>e. \<lbrakk>va = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBitvec bv ; [| va |]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SNum (int (length bv))
[PROOF STEP]
hence "eval_e (i ( y \<mapsto> s )) v1' n1 \<and>  eval_e (i ( y \<mapsto> s )) v2' n2"
[PROOF STATE]
proof (prove)
using this:
i \<lbrakk> v1'[y::=v]\<^sub>c\<^sub>e\<^sub>v \<rbrakk> ~ n1  \<and> i \<lbrakk> v2'[y::=v]\<^sub>c\<^sub>e\<^sub>v \<rbrakk> ~ n2

goal (1 subgoal):
 1. i(y \<mapsto> s) \<lbrakk> v1' \<rbrakk> ~ n1  \<and> i(y \<mapsto> s) \<lbrakk> v2' \<rbrakk> ~ n2
[PROOF STEP]
using subst_v_eval_v eval_e_eqI
[PROOF STATE]
proof (prove)
using this:
i \<lbrakk> v1'[y::=v]\<^sub>c\<^sub>e\<^sub>v \<rbrakk> ~ n1  \<and> i \<lbrakk> v2'[y::=v]\<^sub>c\<^sub>e\<^sub>v \<rbrakk> ~ n2
\<lbrakk>?i \<lbrakk> ?v \<rbrakk> ~ ?s ; ?i \<lbrakk> ?v'[?x::=?v]\<^sub>v\<^sub>v \<rbrakk> ~ ?s' \<rbrakk> \<Longrightarrow> ?i(?x \<mapsto> ?s) \<lbrakk> ?v' \<rbrakk> ~ ?s'
i \<lbrakk> v1 \<rbrakk> ~ n1
\<lbrakk>v1 = ?e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> ?e \<rbrakk> ~ n1
i \<lbrakk> v2 \<rbrakk> ~ n2
\<lbrakk>v2 = ?e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> ?e \<rbrakk> ~ n2
[ eq v1 v2 ]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v
i \<lbrakk> v \<rbrakk> ~ s

goal (1 subgoal):
 1. i(y \<mapsto> s) \<lbrakk> v1' \<rbrakk> ~ n1  \<and> i(y \<mapsto> s) \<lbrakk> v2' \<rbrakk> ~ n2
[PROOF STEP]
using *
[PROOF STATE]
proof (prove)
using this:
i \<lbrakk> v1'[y::=v]\<^sub>c\<^sub>e\<^sub>v \<rbrakk> ~ n1  \<and> i \<lbrakk> v2'[y::=v]\<^sub>c\<^sub>e\<^sub>v \<rbrakk> ~ n2
\<lbrakk>?i \<lbrakk> ?v \<rbrakk> ~ ?s ; ?i \<lbrakk> ?v'[?x::=?v]\<^sub>v\<^sub>v \<rbrakk> ~ ?s' \<rbrakk> \<Longrightarrow> ?i(?x \<mapsto> ?s) \<lbrakk> ?v' \<rbrakk> ~ ?s'
i \<lbrakk> v1 \<rbrakk> ~ n1
\<lbrakk>v1 = ?e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> ?e \<rbrakk> ~ n1
i \<lbrakk> v2 \<rbrakk> ~ n2
\<lbrakk>v2 = ?e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> ?e \<rbrakk> ~ n2
[ eq v1 v2 ]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v
i \<lbrakk> v \<rbrakk> ~ s
e = [ eq v1' v2' ]\<^sup>c\<^sup>e \<and> v1 = v1'[y::=v]\<^sub>c\<^sub>e\<^sub>v \<and> v2 = v2'[y::=v]\<^sub>c\<^sub>e\<^sub>v

goal (1 subgoal):
 1. i(y \<mapsto> s) \<lbrakk> v1' \<rbrakk> ~ n1  \<and> i(y \<mapsto> s) \<lbrakk> v2' \<rbrakk> ~ n2
[PROOF STEP]
by blast
[PROOF STATE]
proof (state)
this:
i(y \<mapsto> s) \<lbrakk> v1' \<rbrakk> ~ n1  \<and> i(y \<mapsto> s) \<lbrakk> v2' \<rbrakk> ~ n2

goal (5 subgoals):
 1. \<And>i v1 s1 v2 s2 e. \<lbrakk>i \<lbrakk> v1 \<rbrakk> ~ s1 ; \<And>e. \<lbrakk>v1 = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ s1 ; i \<lbrakk> v2 \<rbrakk> ~ s2 ; \<And>e. \<lbrakk>v2 = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ s2 ; [ eq v1 v2 ]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBool (s1 = s2)
 2. \<And>i va v1 v2 e. \<lbrakk>i \<lbrakk> va \<rbrakk> ~ SPair v1 v2 ; \<And>e. \<lbrakk>va = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SPair v1 v2 ; [#1va]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ v1
 3. \<And>i va v1 v2 e. \<lbrakk>i \<lbrakk> va \<rbrakk> ~ SPair v1 v2 ; \<And>e. \<lbrakk>va = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SPair v1 v2 ; [#2va]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ v2
 4. \<And>i v1 bv1 v2 bv2 e. \<lbrakk>i \<lbrakk> v1 \<rbrakk> ~ SBitvec bv1 ; \<And>e. \<lbrakk>v1 = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBitvec bv1 ; i \<lbrakk> v2 \<rbrakk> ~ SBitvec bv2 ; \<And>e. \<lbrakk>v2 = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBitvec bv2 ; [ v1 @@ v2 ]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBitvec (bv1 @ bv2)
 5. \<And>i va bv e. \<lbrakk>i \<lbrakk> va \<rbrakk> ~ SBitvec bv ; \<And>e. \<lbrakk>va = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBitvec bv ; [| va |]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SNum (int (length bv))
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
i(y \<mapsto> s) \<lbrakk> v1' \<rbrakk> ~ n1  \<and> i(y \<mapsto> s) \<lbrakk> v2' \<rbrakk> ~ n2
[PROOF STEP]
show ?case
[PROOF STATE]
proof (prove)
using this:
i(y \<mapsto> s) \<lbrakk> v1' \<rbrakk> ~ n1  \<and> i(y \<mapsto> s) \<lbrakk> v2' \<rbrakk> ~ n2

goal (1 subgoal):
 1. i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBool (n1 = n2)
[PROOF STEP]
using RCLogic.eval_e_eqI *
[PROOF STATE]
proof (prove)
using this:
i(y \<mapsto> s) \<lbrakk> v1' \<rbrakk> ~ n1  \<and> i(y \<mapsto> s) \<lbrakk> v2' \<rbrakk> ~ n2
\<lbrakk>?i \<lbrakk> ?v1.0 \<rbrakk> ~ ?s1.0 ; ?i \<lbrakk> ?v2.0 \<rbrakk> ~ ?s2.0 \<rbrakk> \<Longrightarrow> ?i \<lbrakk> [ eq ?v1.0 ?v2.0 ]\<^sup>c\<^sup>e \<rbrakk> ~ SBool (?s1.0 = ?s2.0)
e = [ eq v1' v2' ]\<^sup>c\<^sup>e \<and> v1 = v1'[y::=v]\<^sub>c\<^sub>e\<^sub>v \<and> v2 = v2'[y::=v]\<^sub>c\<^sub>e\<^sub>v

goal (1 subgoal):
 1. i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBool (n1 = n2)
[PROOF STEP]
by meson
[PROOF STATE]
proof (state)
this:
i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBool (n1 = n2)

goal (4 subgoals):
 1. \<And>i va v1 v2 e. \<lbrakk>i \<lbrakk> va \<rbrakk> ~ SPair v1 v2 ; \<And>e. \<lbrakk>va = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SPair v1 v2 ; [#1va]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ v1
 2. \<And>i va v1 v2 e. \<lbrakk>i \<lbrakk> va \<rbrakk> ~ SPair v1 v2 ; \<And>e. \<lbrakk>va = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SPair v1 v2 ; [#2va]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ v2
 3. \<And>i v1 bv1 v2 bv2 e. \<lbrakk>i \<lbrakk> v1 \<rbrakk> ~ SBitvec bv1 ; \<And>e. \<lbrakk>v1 = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBitvec bv1 ; i \<lbrakk> v2 \<rbrakk> ~ SBitvec bv2 ; \<And>e. \<lbrakk>v2 = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBitvec bv2 ; [ v1 @@ v2 ]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBitvec (bv1 @ bv2)
 4. \<And>i va bv e. \<lbrakk>i \<lbrakk> va \<rbrakk> ~ SBitvec bv ; \<And>e. \<lbrakk>va = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBitvec bv ; [| va |]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SNum (int (length bv))
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (4 subgoals):
 1. \<And>i va v1 v2 e. \<lbrakk>i \<lbrakk> va \<rbrakk> ~ SPair v1 v2 ; \<And>e. \<lbrakk>va = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SPair v1 v2 ; [#1va]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ v1
 2. \<And>i va v1 v2 e. \<lbrakk>i \<lbrakk> va \<rbrakk> ~ SPair v1 v2 ; \<And>e. \<lbrakk>va = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SPair v1 v2 ; [#2va]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ v2
 3. \<And>i v1 bv1 v2 bv2 e. \<lbrakk>i \<lbrakk> v1 \<rbrakk> ~ SBitvec bv1 ; \<And>e. \<lbrakk>v1 = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBitvec bv1 ; i \<lbrakk> v2 \<rbrakk> ~ SBitvec bv2 ; \<And>e. \<lbrakk>v2 = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBitvec bv2 ; [ v1 @@ v2 ]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBitvec (bv1 @ bv2)
 4. \<And>i va bv e. \<lbrakk>i \<lbrakk> va \<rbrakk> ~ SBitvec bv ; \<And>e. \<lbrakk>va = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBitvec bv ; [| va |]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SNum (int (length bv))
[PROOF STEP]
case (eval_e_fstI i v1 s1 s2)
[PROOF STATE]
proof (state)
this:
i \<lbrakk> v1 \<rbrakk> ~ SPair s1 s2
\<lbrakk>v1 = ?e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> ?e \<rbrakk> ~ SPair s1 s2
[#1v1]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v
i \<lbrakk> v \<rbrakk> ~ s

goal (4 subgoals):
 1. \<And>i va v1 v2 e. \<lbrakk>i \<lbrakk> va \<rbrakk> ~ SPair v1 v2 ; \<And>e. \<lbrakk>va = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SPair v1 v2 ; [#1va]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ v1
 2. \<And>i va v1 v2 e. \<lbrakk>i \<lbrakk> va \<rbrakk> ~ SPair v1 v2 ; \<And>e. \<lbrakk>va = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SPair v1 v2 ; [#2va]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ v2
 3. \<And>i v1 bv1 v2 bv2 e. \<lbrakk>i \<lbrakk> v1 \<rbrakk> ~ SBitvec bv1 ; \<And>e. \<lbrakk>v1 = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBitvec bv1 ; i \<lbrakk> v2 \<rbrakk> ~ SBitvec bv2 ; \<And>e. \<lbrakk>v2 = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBitvec bv2 ; [ v1 @@ v2 ]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBitvec (bv1 @ bv2)
 4. \<And>i va bv e. \<lbrakk>i \<lbrakk> va \<rbrakk> ~ SBitvec bv ; \<And>e. \<lbrakk>va = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBitvec bv ; [| va |]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SNum (int (length bv))
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
i \<lbrakk> v1 \<rbrakk> ~ SPair s1 s2
\<lbrakk>v1 = ?e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> ?e \<rbrakk> ~ SPair s1 s2
[#1v1]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v
i \<lbrakk> v \<rbrakk> ~ s
[PROOF STEP]
obtain v1' and v2' where *:"e = CE_fst v1' \<and> v1 = v1'[y::=v]\<^sub>c\<^sub>e\<^sub>v"
[PROOF STATE]
proof (prove)
using this:
i \<lbrakk> v1 \<rbrakk> ~ SPair s1 s2
\<lbrakk>v1 = ?e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> ?e \<rbrakk> ~ SPair s1 s2
[#1v1]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v
i \<lbrakk> v \<rbrakk> ~ s

goal (1 subgoal):
 1. (\<And>v1'. e = [#1v1']\<^sup>c\<^sup>e \<and> v1 = v1'[y::=v]\<^sub>c\<^sub>e\<^sub>v \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
using assms
[PROOF STATE]
proof (prove)
using this:
i \<lbrakk> v1 \<rbrakk> ~ SPair s1 s2
\<lbrakk>v1 = ?e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> ?e \<rbrakk> ~ SPair s1 s2
[#1v1]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v
i \<lbrakk> v \<rbrakk> ~ s
i \<lbrakk> e' \<rbrakk> ~ s'
e' = e[y::=v]\<^sub>c\<^sub>e\<^sub>v
i \<lbrakk> v \<rbrakk> ~ s

goal (1 subgoal):
 1. (\<And>v1'. e = [#1v1']\<^sup>c\<^sup>e \<and> v1 = v1'[y::=v]\<^sub>c\<^sub>e\<^sub>v \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by(nominal_induct e rule:ce.strong_induct,simp+)
[PROOF STATE]
proof (state)
this:
e = [#1v1']\<^sup>c\<^sup>e \<and> v1 = v1'[y::=v]\<^sub>c\<^sub>e\<^sub>v

goal (4 subgoals):
 1. \<And>i va v1 v2 e. \<lbrakk>i \<lbrakk> va \<rbrakk> ~ SPair v1 v2 ; \<And>e. \<lbrakk>va = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SPair v1 v2 ; [#1va]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ v1
 2. \<And>i va v1 v2 e. \<lbrakk>i \<lbrakk> va \<rbrakk> ~ SPair v1 v2 ; \<And>e. \<lbrakk>va = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SPair v1 v2 ; [#2va]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ v2
 3. \<And>i v1 bv1 v2 bv2 e. \<lbrakk>i \<lbrakk> v1 \<rbrakk> ~ SBitvec bv1 ; \<And>e. \<lbrakk>v1 = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBitvec bv1 ; i \<lbrakk> v2 \<rbrakk> ~ SBitvec bv2 ; \<And>e. \<lbrakk>v2 = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBitvec bv2 ; [ v1 @@ v2 ]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBitvec (bv1 @ bv2)
 4. \<And>i va bv e. \<lbrakk>i \<lbrakk> va \<rbrakk> ~ SBitvec bv ; \<And>e. \<lbrakk>va = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBitvec bv ; [| va |]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SNum (int (length bv))
[PROOF STEP]
hence "eval_e i (v1'[y::=v]\<^sub>c\<^sub>e\<^sub>v) (SPair s1 s2)"
[PROOF STATE]
proof (prove)
using this:
e = [#1v1']\<^sup>c\<^sup>e \<and> v1 = v1'[y::=v]\<^sub>c\<^sub>e\<^sub>v

goal (1 subgoal):
 1. i \<lbrakk> v1'[y::=v]\<^sub>c\<^sub>e\<^sub>v \<rbrakk> ~ SPair s1 s2
[PROOF STEP]
using eval_e_fstI
[PROOF STATE]
proof (prove)
using this:
e = [#1v1']\<^sup>c\<^sup>e \<and> v1 = v1'[y::=v]\<^sub>c\<^sub>e\<^sub>v
i \<lbrakk> v1 \<rbrakk> ~ SPair s1 s2
\<lbrakk>v1 = ?e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> ?e \<rbrakk> ~ SPair s1 s2
[#1v1]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v
i \<lbrakk> v \<rbrakk> ~ s

goal (1 subgoal):
 1. i \<lbrakk> v1'[y::=v]\<^sub>c\<^sub>e\<^sub>v \<rbrakk> ~ SPair s1 s2
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
i \<lbrakk> v1'[y::=v]\<^sub>c\<^sub>e\<^sub>v \<rbrakk> ~ SPair s1 s2

goal (4 subgoals):
 1. \<And>i va v1 v2 e. \<lbrakk>i \<lbrakk> va \<rbrakk> ~ SPair v1 v2 ; \<And>e. \<lbrakk>va = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SPair v1 v2 ; [#1va]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ v1
 2. \<And>i va v1 v2 e. \<lbrakk>i \<lbrakk> va \<rbrakk> ~ SPair v1 v2 ; \<And>e. \<lbrakk>va = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SPair v1 v2 ; [#2va]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ v2
 3. \<And>i v1 bv1 v2 bv2 e. \<lbrakk>i \<lbrakk> v1 \<rbrakk> ~ SBitvec bv1 ; \<And>e. \<lbrakk>v1 = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBitvec bv1 ; i \<lbrakk> v2 \<rbrakk> ~ SBitvec bv2 ; \<And>e. \<lbrakk>v2 = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBitvec bv2 ; [ v1 @@ v2 ]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBitvec (bv1 @ bv2)
 4. \<And>i va bv e. \<lbrakk>i \<lbrakk> va \<rbrakk> ~ SBitvec bv ; \<And>e. \<lbrakk>va = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBitvec bv ; [| va |]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SNum (int (length bv))
[PROOF STEP]
hence "eval_e (i ( y \<mapsto> s )) v1' (SPair s1 s2)"
[PROOF STATE]
proof (prove)
using this:
i \<lbrakk> v1'[y::=v]\<^sub>c\<^sub>e\<^sub>v \<rbrakk> ~ SPair s1 s2

goal (1 subgoal):
 1. i(y \<mapsto> s) \<lbrakk> v1' \<rbrakk> ~ SPair s1 s2
[PROOF STEP]
using eval_e_fstI *
[PROOF STATE]
proof (prove)
using this:
i \<lbrakk> v1'[y::=v]\<^sub>c\<^sub>e\<^sub>v \<rbrakk> ~ SPair s1 s2
i \<lbrakk> v1 \<rbrakk> ~ SPair s1 s2
\<lbrakk>v1 = ?e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> ?e \<rbrakk> ~ SPair s1 s2
[#1v1]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v
i \<lbrakk> v \<rbrakk> ~ s
e = [#1v1']\<^sup>c\<^sup>e \<and> v1 = v1'[y::=v]\<^sub>c\<^sub>e\<^sub>v

goal (1 subgoal):
 1. i(y \<mapsto> s) \<lbrakk> v1' \<rbrakk> ~ SPair s1 s2
[PROOF STEP]
by metis
[PROOF STATE]
proof (state)
this:
i(y \<mapsto> s) \<lbrakk> v1' \<rbrakk> ~ SPair s1 s2

goal (4 subgoals):
 1. \<And>i va v1 v2 e. \<lbrakk>i \<lbrakk> va \<rbrakk> ~ SPair v1 v2 ; \<And>e. \<lbrakk>va = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SPair v1 v2 ; [#1va]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ v1
 2. \<And>i va v1 v2 e. \<lbrakk>i \<lbrakk> va \<rbrakk> ~ SPair v1 v2 ; \<And>e. \<lbrakk>va = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SPair v1 v2 ; [#2va]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ v2
 3. \<And>i v1 bv1 v2 bv2 e. \<lbrakk>i \<lbrakk> v1 \<rbrakk> ~ SBitvec bv1 ; \<And>e. \<lbrakk>v1 = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBitvec bv1 ; i \<lbrakk> v2 \<rbrakk> ~ SBitvec bv2 ; \<And>e. \<lbrakk>v2 = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBitvec bv2 ; [ v1 @@ v2 ]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBitvec (bv1 @ bv2)
 4. \<And>i va bv e. \<lbrakk>i \<lbrakk> va \<rbrakk> ~ SBitvec bv ; \<And>e. \<lbrakk>va = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBitvec bv ; [| va |]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SNum (int (length bv))
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
i(y \<mapsto> s) \<lbrakk> v1' \<rbrakk> ~ SPair s1 s2
[PROOF STEP]
show ?case
[PROOF STATE]
proof (prove)
using this:
i(y \<mapsto> s) \<lbrakk> v1' \<rbrakk> ~ SPair s1 s2

goal (1 subgoal):
 1. i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ s1
[PROOF STEP]
using RCLogic.eval_e_fstI *
[PROOF STATE]
proof (prove)
using this:
i(y \<mapsto> s) \<lbrakk> v1' \<rbrakk> ~ SPair s1 s2
?i \<lbrakk> ?v \<rbrakk> ~ SPair ?v1.0 ?v2.0  \<Longrightarrow> ?i \<lbrakk> [#1?v]\<^sup>c\<^sup>e \<rbrakk> ~ ?v1.0
e = [#1v1']\<^sup>c\<^sup>e \<and> v1 = v1'[y::=v]\<^sub>c\<^sub>e\<^sub>v

goal (1 subgoal):
 1. i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ s1
[PROOF STEP]
by meson
[PROOF STATE]
proof (state)
this:
i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ s1

goal (3 subgoals):
 1. \<And>i va v1 v2 e. \<lbrakk>i \<lbrakk> va \<rbrakk> ~ SPair v1 v2 ; \<And>e. \<lbrakk>va = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SPair v1 v2 ; [#2va]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ v2
 2. \<And>i v1 bv1 v2 bv2 e. \<lbrakk>i \<lbrakk> v1 \<rbrakk> ~ SBitvec bv1 ; \<And>e. \<lbrakk>v1 = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBitvec bv1 ; i \<lbrakk> v2 \<rbrakk> ~ SBitvec bv2 ; \<And>e. \<lbrakk>v2 = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBitvec bv2 ; [ v1 @@ v2 ]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBitvec (bv1 @ bv2)
 3. \<And>i va bv e. \<lbrakk>i \<lbrakk> va \<rbrakk> ~ SBitvec bv ; \<And>e. \<lbrakk>va = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBitvec bv ; [| va |]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SNum (int (length bv))
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (3 subgoals):
 1. \<And>i va v1 v2 e. \<lbrakk>i \<lbrakk> va \<rbrakk> ~ SPair v1 v2 ; \<And>e. \<lbrakk>va = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SPair v1 v2 ; [#2va]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ v2
 2. \<And>i v1 bv1 v2 bv2 e. \<lbrakk>i \<lbrakk> v1 \<rbrakk> ~ SBitvec bv1 ; \<And>e. \<lbrakk>v1 = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBitvec bv1 ; i \<lbrakk> v2 \<rbrakk> ~ SBitvec bv2 ; \<And>e. \<lbrakk>v2 = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBitvec bv2 ; [ v1 @@ v2 ]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBitvec (bv1 @ bv2)
 3. \<And>i va bv e. \<lbrakk>i \<lbrakk> va \<rbrakk> ~ SBitvec bv ; \<And>e. \<lbrakk>va = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBitvec bv ; [| va |]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SNum (int (length bv))
[PROOF STEP]
case (eval_e_sndI i v1 s1 s2)
[PROOF STATE]
proof (state)
this:
i \<lbrakk> v1 \<rbrakk> ~ SPair s1 s2
\<lbrakk>v1 = ?e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> ?e \<rbrakk> ~ SPair s1 s2
[#2v1]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v
i \<lbrakk> v \<rbrakk> ~ s

goal (3 subgoals):
 1. \<And>i va v1 v2 e. \<lbrakk>i \<lbrakk> va \<rbrakk> ~ SPair v1 v2 ; \<And>e. \<lbrakk>va = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SPair v1 v2 ; [#2va]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ v2
 2. \<And>i v1 bv1 v2 bv2 e. \<lbrakk>i \<lbrakk> v1 \<rbrakk> ~ SBitvec bv1 ; \<And>e. \<lbrakk>v1 = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBitvec bv1 ; i \<lbrakk> v2 \<rbrakk> ~ SBitvec bv2 ; \<And>e. \<lbrakk>v2 = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBitvec bv2 ; [ v1 @@ v2 ]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBitvec (bv1 @ bv2)
 3. \<And>i va bv e. \<lbrakk>i \<lbrakk> va \<rbrakk> ~ SBitvec bv ; \<And>e. \<lbrakk>va = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBitvec bv ; [| va |]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SNum (int (length bv))
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
i \<lbrakk> v1 \<rbrakk> ~ SPair s1 s2
\<lbrakk>v1 = ?e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> ?e \<rbrakk> ~ SPair s1 s2
[#2v1]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v
i \<lbrakk> v \<rbrakk> ~ s
[PROOF STEP]
obtain v1' and v2' where *:"e = CE_snd v1' \<and> v1 = v1'[y::=v]\<^sub>c\<^sub>e\<^sub>v"
[PROOF STATE]
proof (prove)
using this:
i \<lbrakk> v1 \<rbrakk> ~ SPair s1 s2
\<lbrakk>v1 = ?e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> ?e \<rbrakk> ~ SPair s1 s2
[#2v1]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v
i \<lbrakk> v \<rbrakk> ~ s

goal (1 subgoal):
 1. (\<And>v1'. e = [#2v1']\<^sup>c\<^sup>e \<and> v1 = v1'[y::=v]\<^sub>c\<^sub>e\<^sub>v \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
using assms
[PROOF STATE]
proof (prove)
using this:
i \<lbrakk> v1 \<rbrakk> ~ SPair s1 s2
\<lbrakk>v1 = ?e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> ?e \<rbrakk> ~ SPair s1 s2
[#2v1]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v
i \<lbrakk> v \<rbrakk> ~ s
i \<lbrakk> e' \<rbrakk> ~ s'
e' = e[y::=v]\<^sub>c\<^sub>e\<^sub>v
i \<lbrakk> v \<rbrakk> ~ s

goal (1 subgoal):
 1. (\<And>v1'. e = [#2v1']\<^sup>c\<^sup>e \<and> v1 = v1'[y::=v]\<^sub>c\<^sub>e\<^sub>v \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by(nominal_induct e rule:ce.strong_induct,simp+)
[PROOF STATE]
proof (state)
this:
e = [#2v1']\<^sup>c\<^sup>e \<and> v1 = v1'[y::=v]\<^sub>c\<^sub>e\<^sub>v

goal (3 subgoals):
 1. \<And>i va v1 v2 e. \<lbrakk>i \<lbrakk> va \<rbrakk> ~ SPair v1 v2 ; \<And>e. \<lbrakk>va = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SPair v1 v2 ; [#2va]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ v2
 2. \<And>i v1 bv1 v2 bv2 e. \<lbrakk>i \<lbrakk> v1 \<rbrakk> ~ SBitvec bv1 ; \<And>e. \<lbrakk>v1 = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBitvec bv1 ; i \<lbrakk> v2 \<rbrakk> ~ SBitvec bv2 ; \<And>e. \<lbrakk>v2 = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBitvec bv2 ; [ v1 @@ v2 ]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBitvec (bv1 @ bv2)
 3. \<And>i va bv e. \<lbrakk>i \<lbrakk> va \<rbrakk> ~ SBitvec bv ; \<And>e. \<lbrakk>va = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBitvec bv ; [| va |]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SNum (int (length bv))
[PROOF STEP]
hence "eval_e i (v1'[y::=v]\<^sub>c\<^sub>e\<^sub>v) (SPair s1 s2)"
[PROOF STATE]
proof (prove)
using this:
e = [#2v1']\<^sup>c\<^sup>e \<and> v1 = v1'[y::=v]\<^sub>c\<^sub>e\<^sub>v

goal (1 subgoal):
 1. i \<lbrakk> v1'[y::=v]\<^sub>c\<^sub>e\<^sub>v \<rbrakk> ~ SPair s1 s2
[PROOF STEP]
using eval_e_sndI
[PROOF STATE]
proof (prove)
using this:
e = [#2v1']\<^sup>c\<^sup>e \<and> v1 = v1'[y::=v]\<^sub>c\<^sub>e\<^sub>v
i \<lbrakk> v1 \<rbrakk> ~ SPair s1 s2
\<lbrakk>v1 = ?e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> ?e \<rbrakk> ~ SPair s1 s2
[#2v1]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v
i \<lbrakk> v \<rbrakk> ~ s

goal (1 subgoal):
 1. i \<lbrakk> v1'[y::=v]\<^sub>c\<^sub>e\<^sub>v \<rbrakk> ~ SPair s1 s2
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
i \<lbrakk> v1'[y::=v]\<^sub>c\<^sub>e\<^sub>v \<rbrakk> ~ SPair s1 s2

goal (3 subgoals):
 1. \<And>i va v1 v2 e. \<lbrakk>i \<lbrakk> va \<rbrakk> ~ SPair v1 v2 ; \<And>e. \<lbrakk>va = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SPair v1 v2 ; [#2va]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ v2
 2. \<And>i v1 bv1 v2 bv2 e. \<lbrakk>i \<lbrakk> v1 \<rbrakk> ~ SBitvec bv1 ; \<And>e. \<lbrakk>v1 = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBitvec bv1 ; i \<lbrakk> v2 \<rbrakk> ~ SBitvec bv2 ; \<And>e. \<lbrakk>v2 = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBitvec bv2 ; [ v1 @@ v2 ]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBitvec (bv1 @ bv2)
 3. \<And>i va bv e. \<lbrakk>i \<lbrakk> va \<rbrakk> ~ SBitvec bv ; \<And>e. \<lbrakk>va = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBitvec bv ; [| va |]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SNum (int (length bv))
[PROOF STEP]
hence "eval_e (i ( y \<mapsto> s )) v1' (SPair s1 s2)"
[PROOF STATE]
proof (prove)
using this:
i \<lbrakk> v1'[y::=v]\<^sub>c\<^sub>e\<^sub>v \<rbrakk> ~ SPair s1 s2

goal (1 subgoal):
 1. i(y \<mapsto> s) \<lbrakk> v1' \<rbrakk> ~ SPair s1 s2
[PROOF STEP]
using subst_v_eval_v eval_e_sndI *
[PROOF STATE]
proof (prove)
using this:
i \<lbrakk> v1'[y::=v]\<^sub>c\<^sub>e\<^sub>v \<rbrakk> ~ SPair s1 s2
\<lbrakk>?i \<lbrakk> ?v \<rbrakk> ~ ?s ; ?i \<lbrakk> ?v'[?x::=?v]\<^sub>v\<^sub>v \<rbrakk> ~ ?s' \<rbrakk> \<Longrightarrow> ?i(?x \<mapsto> ?s) \<lbrakk> ?v' \<rbrakk> ~ ?s'
i \<lbrakk> v1 \<rbrakk> ~ SPair s1 s2
\<lbrakk>v1 = ?e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> ?e \<rbrakk> ~ SPair s1 s2
[#2v1]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v
i \<lbrakk> v \<rbrakk> ~ s
e = [#2v1']\<^sup>c\<^sup>e \<and> v1 = v1'[y::=v]\<^sub>c\<^sub>e\<^sub>v

goal (1 subgoal):
 1. i(y \<mapsto> s) \<lbrakk> v1' \<rbrakk> ~ SPair s1 s2
[PROOF STEP]
by blast
[PROOF STATE]
proof (state)
this:
i(y \<mapsto> s) \<lbrakk> v1' \<rbrakk> ~ SPair s1 s2

goal (3 subgoals):
 1. \<And>i va v1 v2 e. \<lbrakk>i \<lbrakk> va \<rbrakk> ~ SPair v1 v2 ; \<And>e. \<lbrakk>va = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SPair v1 v2 ; [#2va]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ v2
 2. \<And>i v1 bv1 v2 bv2 e. \<lbrakk>i \<lbrakk> v1 \<rbrakk> ~ SBitvec bv1 ; \<And>e. \<lbrakk>v1 = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBitvec bv1 ; i \<lbrakk> v2 \<rbrakk> ~ SBitvec bv2 ; \<And>e. \<lbrakk>v2 = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBitvec bv2 ; [ v1 @@ v2 ]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBitvec (bv1 @ bv2)
 3. \<And>i va bv e. \<lbrakk>i \<lbrakk> va \<rbrakk> ~ SBitvec bv ; \<And>e. \<lbrakk>va = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBitvec bv ; [| va |]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SNum (int (length bv))
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
i(y \<mapsto> s) \<lbrakk> v1' \<rbrakk> ~ SPair s1 s2
[PROOF STEP]
show ?case
[PROOF STATE]
proof (prove)
using this:
i(y \<mapsto> s) \<lbrakk> v1' \<rbrakk> ~ SPair s1 s2

goal (1 subgoal):
 1. i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ s2
[PROOF STEP]
using RCLogic.eval_e_sndI *
[PROOF STATE]
proof (prove)
using this:
i(y \<mapsto> s) \<lbrakk> v1' \<rbrakk> ~ SPair s1 s2
?i \<lbrakk> ?v \<rbrakk> ~ SPair ?v1.0 ?v2.0  \<Longrightarrow> ?i \<lbrakk> [#2?v]\<^sup>c\<^sup>e \<rbrakk> ~ ?v2.0
e = [#2v1']\<^sup>c\<^sup>e \<and> v1 = v1'[y::=v]\<^sub>c\<^sub>e\<^sub>v

goal (1 subgoal):
 1. i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ s2
[PROOF STEP]
by meson
[PROOF STATE]
proof (state)
this:
i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ s2

goal (2 subgoals):
 1. \<And>i v1 bv1 v2 bv2 e. \<lbrakk>i \<lbrakk> v1 \<rbrakk> ~ SBitvec bv1 ; \<And>e. \<lbrakk>v1 = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBitvec bv1 ; i \<lbrakk> v2 \<rbrakk> ~ SBitvec bv2 ; \<And>e. \<lbrakk>v2 = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBitvec bv2 ; [ v1 @@ v2 ]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBitvec (bv1 @ bv2)
 2. \<And>i va bv e. \<lbrakk>i \<lbrakk> va \<rbrakk> ~ SBitvec bv ; \<And>e. \<lbrakk>va = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBitvec bv ; [| va |]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SNum (int (length bv))
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (2 subgoals):
 1. \<And>i v1 bv1 v2 bv2 e. \<lbrakk>i \<lbrakk> v1 \<rbrakk> ~ SBitvec bv1 ; \<And>e. \<lbrakk>v1 = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBitvec bv1 ; i \<lbrakk> v2 \<rbrakk> ~ SBitvec bv2 ; \<And>e. \<lbrakk>v2 = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBitvec bv2 ; [ v1 @@ v2 ]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBitvec (bv1 @ bv2)
 2. \<And>i va bv e. \<lbrakk>i \<lbrakk> va \<rbrakk> ~ SBitvec bv ; \<And>e. \<lbrakk>va = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBitvec bv ; [| va |]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SNum (int (length bv))
[PROOF STEP]
case (eval_e_concatI i v1 bv1 v2 bv2)
[PROOF STATE]
proof (state)
this:
i \<lbrakk> v1 \<rbrakk> ~ SBitvec bv1
\<lbrakk>v1 = ?e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> ?e \<rbrakk> ~ SBitvec bv1
i \<lbrakk> v2 \<rbrakk> ~ SBitvec bv2
\<lbrakk>v2 = ?e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> ?e \<rbrakk> ~ SBitvec bv2
[ v1 @@ v2 ]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v
i \<lbrakk> v \<rbrakk> ~ s

goal (2 subgoals):
 1. \<And>i v1 bv1 v2 bv2 e. \<lbrakk>i \<lbrakk> v1 \<rbrakk> ~ SBitvec bv1 ; \<And>e. \<lbrakk>v1 = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBitvec bv1 ; i \<lbrakk> v2 \<rbrakk> ~ SBitvec bv2 ; \<And>e. \<lbrakk>v2 = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBitvec bv2 ; [ v1 @@ v2 ]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBitvec (bv1 @ bv2)
 2. \<And>i va bv e. \<lbrakk>i \<lbrakk> va \<rbrakk> ~ SBitvec bv ; \<And>e. \<lbrakk>va = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBitvec bv ; [| va |]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SNum (int (length bv))
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
i \<lbrakk> v1 \<rbrakk> ~ SBitvec bv1
\<lbrakk>v1 = ?e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> ?e \<rbrakk> ~ SBitvec bv1
i \<lbrakk> v2 \<rbrakk> ~ SBitvec bv2
\<lbrakk>v2 = ?e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> ?e \<rbrakk> ~ SBitvec bv2
[ v1 @@ v2 ]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v
i \<lbrakk> v \<rbrakk> ~ s
[PROOF STEP]
obtain v1' and v2' where *:"e = CE_concat v1' v2' \<and> v1 = v1'[y::=v]\<^sub>c\<^sub>e\<^sub>v \<and> v2 = v2'[y::=v]\<^sub>c\<^sub>e\<^sub>v"
[PROOF STATE]
proof (prove)
using this:
i \<lbrakk> v1 \<rbrakk> ~ SBitvec bv1
\<lbrakk>v1 = ?e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> ?e \<rbrakk> ~ SBitvec bv1
i \<lbrakk> v2 \<rbrakk> ~ SBitvec bv2
\<lbrakk>v2 = ?e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> ?e \<rbrakk> ~ SBitvec bv2
[ v1 @@ v2 ]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v
i \<lbrakk> v \<rbrakk> ~ s

goal (1 subgoal):
 1. (\<And>v1' v2'. e = [ v1' @@ v2' ]\<^sup>c\<^sup>e \<and> v1 = v1'[y::=v]\<^sub>c\<^sub>e\<^sub>v \<and> v2 = v2'[y::=v]\<^sub>c\<^sub>e\<^sub>v \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
using assms
[PROOF STATE]
proof (prove)
using this:
i \<lbrakk> v1 \<rbrakk> ~ SBitvec bv1
\<lbrakk>v1 = ?e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> ?e \<rbrakk> ~ SBitvec bv1
i \<lbrakk> v2 \<rbrakk> ~ SBitvec bv2
\<lbrakk>v2 = ?e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> ?e \<rbrakk> ~ SBitvec bv2
[ v1 @@ v2 ]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v
i \<lbrakk> v \<rbrakk> ~ s
i \<lbrakk> e' \<rbrakk> ~ s'
e' = e[y::=v]\<^sub>c\<^sub>e\<^sub>v
i \<lbrakk> v \<rbrakk> ~ s

goal (1 subgoal):
 1. (\<And>v1' v2'. e = [ v1' @@ v2' ]\<^sup>c\<^sup>e \<and> v1 = v1'[y::=v]\<^sub>c\<^sub>e\<^sub>v \<and> v2 = v2'[y::=v]\<^sub>c\<^sub>e\<^sub>v \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by(nominal_induct e rule:ce.strong_induct,simp+)
[PROOF STATE]
proof (state)
this:
e = [ v1' @@ v2' ]\<^sup>c\<^sup>e \<and> v1 = v1'[y::=v]\<^sub>c\<^sub>e\<^sub>v \<and> v2 = v2'[y::=v]\<^sub>c\<^sub>e\<^sub>v

goal (2 subgoals):
 1. \<And>i v1 bv1 v2 bv2 e. \<lbrakk>i \<lbrakk> v1 \<rbrakk> ~ SBitvec bv1 ; \<And>e. \<lbrakk>v1 = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBitvec bv1 ; i \<lbrakk> v2 \<rbrakk> ~ SBitvec bv2 ; \<And>e. \<lbrakk>v2 = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBitvec bv2 ; [ v1 @@ v2 ]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBitvec (bv1 @ bv2)
 2. \<And>i va bv e. \<lbrakk>i \<lbrakk> va \<rbrakk> ~ SBitvec bv ; \<And>e. \<lbrakk>va = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBitvec bv ; [| va |]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SNum (int (length bv))
[PROOF STEP]
hence "eval_e i (v1'[y::=v]\<^sub>c\<^sub>e\<^sub>v) (SBitvec bv1) \<and> eval_e i (v2'[y::=v]\<^sub>c\<^sub>e\<^sub>v) (SBitvec bv2)"
[PROOF STATE]
proof (prove)
using this:
e = [ v1' @@ v2' ]\<^sup>c\<^sup>e \<and> v1 = v1'[y::=v]\<^sub>c\<^sub>e\<^sub>v \<and> v2 = v2'[y::=v]\<^sub>c\<^sub>e\<^sub>v

goal (1 subgoal):
 1. i \<lbrakk> v1'[y::=v]\<^sub>c\<^sub>e\<^sub>v \<rbrakk> ~ SBitvec bv1  \<and> i \<lbrakk> v2'[y::=v]\<^sub>c\<^sub>e\<^sub>v \<rbrakk> ~ SBitvec bv2
[PROOF STEP]
using eval_e_concatI
[PROOF STATE]
proof (prove)
using this:
e = [ v1' @@ v2' ]\<^sup>c\<^sup>e \<and> v1 = v1'[y::=v]\<^sub>c\<^sub>e\<^sub>v \<and> v2 = v2'[y::=v]\<^sub>c\<^sub>e\<^sub>v
i \<lbrakk> v1 \<rbrakk> ~ SBitvec bv1
\<lbrakk>v1 = ?e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> ?e \<rbrakk> ~ SBitvec bv1
i \<lbrakk> v2 \<rbrakk> ~ SBitvec bv2
\<lbrakk>v2 = ?e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> ?e \<rbrakk> ~ SBitvec bv2
[ v1 @@ v2 ]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v
i \<lbrakk> v \<rbrakk> ~ s

goal (1 subgoal):
 1. i \<lbrakk> v1'[y::=v]\<^sub>c\<^sub>e\<^sub>v \<rbrakk> ~ SBitvec bv1  \<and> i \<lbrakk> v2'[y::=v]\<^sub>c\<^sub>e\<^sub>v \<rbrakk> ~ SBitvec bv2
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
i \<lbrakk> v1'[y::=v]\<^sub>c\<^sub>e\<^sub>v \<rbrakk> ~ SBitvec bv1  \<and> i \<lbrakk> v2'[y::=v]\<^sub>c\<^sub>e\<^sub>v \<rbrakk> ~ SBitvec bv2

goal (2 subgoals):
 1. \<And>i v1 bv1 v2 bv2 e. \<lbrakk>i \<lbrakk> v1 \<rbrakk> ~ SBitvec bv1 ; \<And>e. \<lbrakk>v1 = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBitvec bv1 ; i \<lbrakk> v2 \<rbrakk> ~ SBitvec bv2 ; \<And>e. \<lbrakk>v2 = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBitvec bv2 ; [ v1 @@ v2 ]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBitvec (bv1 @ bv2)
 2. \<And>i va bv e. \<lbrakk>i \<lbrakk> va \<rbrakk> ~ SBitvec bv ; \<And>e. \<lbrakk>va = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBitvec bv ; [| va |]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SNum (int (length bv))
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
i \<lbrakk> v1'[y::=v]\<^sub>c\<^sub>e\<^sub>v \<rbrakk> ~ SBitvec bv1  \<and> i \<lbrakk> v2'[y::=v]\<^sub>c\<^sub>e\<^sub>v \<rbrakk> ~ SBitvec bv2

goal (2 subgoals):
 1. \<And>i v1 bv1 v2 bv2 e. \<lbrakk>i \<lbrakk> v1 \<rbrakk> ~ SBitvec bv1 ; \<And>e. \<lbrakk>v1 = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBitvec bv1 ; i \<lbrakk> v2 \<rbrakk> ~ SBitvec bv2 ; \<And>e. \<lbrakk>v2 = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBitvec bv2 ; [ v1 @@ v2 ]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBitvec (bv1 @ bv2)
 2. \<And>i va bv e. \<lbrakk>i \<lbrakk> va \<rbrakk> ~ SBitvec bv ; \<And>e. \<lbrakk>va = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBitvec bv ; [| va |]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SNum (int (length bv))
[PROOF STEP]
hence "eval_e (i ( y \<mapsto> s )) v1' (SBitvec bv1) \<and>  eval_e (i ( y \<mapsto> s )) v2' (SBitvec bv2)"
[PROOF STATE]
proof (prove)
using this:
i \<lbrakk> v1'[y::=v]\<^sub>c\<^sub>e\<^sub>v \<rbrakk> ~ SBitvec bv1  \<and> i \<lbrakk> v2'[y::=v]\<^sub>c\<^sub>e\<^sub>v \<rbrakk> ~ SBitvec bv2

goal (1 subgoal):
 1. i(y \<mapsto> s) \<lbrakk> v1' \<rbrakk> ~ SBitvec bv1  \<and> i(y \<mapsto> s) \<lbrakk> v2' \<rbrakk> ~ SBitvec bv2
[PROOF STEP]
using subst_v_eval_v eval_e_concatI *
[PROOF STATE]
proof (prove)
using this:
i \<lbrakk> v1'[y::=v]\<^sub>c\<^sub>e\<^sub>v \<rbrakk> ~ SBitvec bv1  \<and> i \<lbrakk> v2'[y::=v]\<^sub>c\<^sub>e\<^sub>v \<rbrakk> ~ SBitvec bv2
\<lbrakk>?i \<lbrakk> ?v \<rbrakk> ~ ?s ; ?i \<lbrakk> ?v'[?x::=?v]\<^sub>v\<^sub>v \<rbrakk> ~ ?s' \<rbrakk> \<Longrightarrow> ?i(?x \<mapsto> ?s) \<lbrakk> ?v' \<rbrakk> ~ ?s'
i \<lbrakk> v1 \<rbrakk> ~ SBitvec bv1
\<lbrakk>v1 = ?e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> ?e \<rbrakk> ~ SBitvec bv1
i \<lbrakk> v2 \<rbrakk> ~ SBitvec bv2
\<lbrakk>v2 = ?e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> ?e \<rbrakk> ~ SBitvec bv2
[ v1 @@ v2 ]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v
i \<lbrakk> v \<rbrakk> ~ s
e = [ v1' @@ v2' ]\<^sup>c\<^sup>e \<and> v1 = v1'[y::=v]\<^sub>c\<^sub>e\<^sub>v \<and> v2 = v2'[y::=v]\<^sub>c\<^sub>e\<^sub>v

goal (1 subgoal):
 1. i(y \<mapsto> s) \<lbrakk> v1' \<rbrakk> ~ SBitvec bv1  \<and> i(y \<mapsto> s) \<lbrakk> v2' \<rbrakk> ~ SBitvec bv2
[PROOF STEP]
by blast
[PROOF STATE]
proof (state)
this:
i(y \<mapsto> s) \<lbrakk> v1' \<rbrakk> ~ SBitvec bv1  \<and> i(y \<mapsto> s) \<lbrakk> v2' \<rbrakk> ~ SBitvec bv2

goal (2 subgoals):
 1. \<And>i v1 bv1 v2 bv2 e. \<lbrakk>i \<lbrakk> v1 \<rbrakk> ~ SBitvec bv1 ; \<And>e. \<lbrakk>v1 = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBitvec bv1 ; i \<lbrakk> v2 \<rbrakk> ~ SBitvec bv2 ; \<And>e. \<lbrakk>v2 = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBitvec bv2 ; [ v1 @@ v2 ]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBitvec (bv1 @ bv2)
 2. \<And>i va bv e. \<lbrakk>i \<lbrakk> va \<rbrakk> ~ SBitvec bv ; \<And>e. \<lbrakk>va = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBitvec bv ; [| va |]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SNum (int (length bv))
[PROOF STEP]
ultimately
[PROOF STATE]
proof (chain)
picking this:
i \<lbrakk> v1'[y::=v]\<^sub>c\<^sub>e\<^sub>v \<rbrakk> ~ SBitvec bv1  \<and> i \<lbrakk> v2'[y::=v]\<^sub>c\<^sub>e\<^sub>v \<rbrakk> ~ SBitvec bv2
i(y \<mapsto> s) \<lbrakk> v1' \<rbrakk> ~ SBitvec bv1  \<and> i(y \<mapsto> s) \<lbrakk> v2' \<rbrakk> ~ SBitvec bv2
[PROOF STEP]
show ?case
[PROOF STATE]
proof (prove)
using this:
i \<lbrakk> v1'[y::=v]\<^sub>c\<^sub>e\<^sub>v \<rbrakk> ~ SBitvec bv1  \<and> i \<lbrakk> v2'[y::=v]\<^sub>c\<^sub>e\<^sub>v \<rbrakk> ~ SBitvec bv2
i(y \<mapsto> s) \<lbrakk> v1' \<rbrakk> ~ SBitvec bv1  \<and> i(y \<mapsto> s) \<lbrakk> v2' \<rbrakk> ~ SBitvec bv2

goal (1 subgoal):
 1. i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBitvec (bv1 @ bv2)
[PROOF STEP]
using RCLogic.eval_e_concatI * eval_v_uniqueness
[PROOF STATE]
proof (prove)
using this:
i \<lbrakk> v1'[y::=v]\<^sub>c\<^sub>e\<^sub>v \<rbrakk> ~ SBitvec bv1  \<and> i \<lbrakk> v2'[y::=v]\<^sub>c\<^sub>e\<^sub>v \<rbrakk> ~ SBitvec bv2
i(y \<mapsto> s) \<lbrakk> v1' \<rbrakk> ~ SBitvec bv1  \<and> i(y \<mapsto> s) \<lbrakk> v2' \<rbrakk> ~ SBitvec bv2
\<lbrakk>?i \<lbrakk> ?v1.0 \<rbrakk> ~ SBitvec ?bv1.0 ; ?i \<lbrakk> ?v2.0 \<rbrakk> ~ SBitvec ?bv2.0 \<rbrakk> \<Longrightarrow> ?i \<lbrakk> [ ?v1.0 @@ ?v2.0 ]\<^sup>c\<^sup>e \<rbrakk> ~ SBitvec (?bv1.0 @ ?bv2.0)
e = [ v1' @@ v2' ]\<^sup>c\<^sup>e \<and> v1 = v1'[y::=v]\<^sub>c\<^sub>e\<^sub>v \<and> v2 = v2'[y::=v]\<^sub>c\<^sub>e\<^sub>v
\<lbrakk>?i \<lbrakk> ?v \<rbrakk> ~ ?s ; ?i \<lbrakk> ?v \<rbrakk> ~ ?s' \<rbrakk> \<Longrightarrow> ?s = ?s'

goal (1 subgoal):
 1. i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBitvec (bv1 @ bv2)
[PROOF STEP]
by (metis eval_e_concatI.hyps(1))
[PROOF STATE]
proof (state)
this:
i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBitvec (bv1 @ bv2)

goal (1 subgoal):
 1. \<And>i va bv e. \<lbrakk>i \<lbrakk> va \<rbrakk> ~ SBitvec bv ; \<And>e. \<lbrakk>va = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBitvec bv ; [| va |]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SNum (int (length bv))
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. \<And>i va bv e. \<lbrakk>i \<lbrakk> va \<rbrakk> ~ SBitvec bv ; \<And>e. \<lbrakk>va = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBitvec bv ; [| va |]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SNum (int (length bv))
[PROOF STEP]
case (eval_e_lenI i v1 bv)
[PROOF STATE]
proof (state)
this:
i \<lbrakk> v1 \<rbrakk> ~ SBitvec bv
\<lbrakk>v1 = ?e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> ?e \<rbrakk> ~ SBitvec bv
[| v1 |]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v
i \<lbrakk> v \<rbrakk> ~ s

goal (1 subgoal):
 1. \<And>i va bv e. \<lbrakk>i \<lbrakk> va \<rbrakk> ~ SBitvec bv ; \<And>e. \<lbrakk>va = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBitvec bv ; [| va |]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SNum (int (length bv))
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
i \<lbrakk> v1 \<rbrakk> ~ SBitvec bv
\<lbrakk>v1 = ?e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> ?e \<rbrakk> ~ SBitvec bv
[| v1 |]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v
i \<lbrakk> v \<rbrakk> ~ s
[PROOF STEP]
obtain v1' where *:"e = CE_len v1' \<and> v1 = v1'[y::=v]\<^sub>c\<^sub>e\<^sub>v"
[PROOF STATE]
proof (prove)
using this:
i \<lbrakk> v1 \<rbrakk> ~ SBitvec bv
\<lbrakk>v1 = ?e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> ?e \<rbrakk> ~ SBitvec bv
[| v1 |]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v
i \<lbrakk> v \<rbrakk> ~ s

goal (1 subgoal):
 1. (\<And>v1'. e = [| v1' |]\<^sup>c\<^sup>e \<and> v1 = v1'[y::=v]\<^sub>c\<^sub>e\<^sub>v \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
using assms
[PROOF STATE]
proof (prove)
using this:
i \<lbrakk> v1 \<rbrakk> ~ SBitvec bv
\<lbrakk>v1 = ?e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> ?e \<rbrakk> ~ SBitvec bv
[| v1 |]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v
i \<lbrakk> v \<rbrakk> ~ s
i \<lbrakk> e' \<rbrakk> ~ s'
e' = e[y::=v]\<^sub>c\<^sub>e\<^sub>v
i \<lbrakk> v \<rbrakk> ~ s

goal (1 subgoal):
 1. (\<And>v1'. e = [| v1' |]\<^sup>c\<^sup>e \<and> v1 = v1'[y::=v]\<^sub>c\<^sub>e\<^sub>v \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by(nominal_induct e rule:ce.strong_induct,simp+)
[PROOF STATE]
proof (state)
this:
e = [| v1' |]\<^sup>c\<^sup>e \<and> v1 = v1'[y::=v]\<^sub>c\<^sub>e\<^sub>v

goal (1 subgoal):
 1. \<And>i va bv e. \<lbrakk>i \<lbrakk> va \<rbrakk> ~ SBitvec bv ; \<And>e. \<lbrakk>va = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBitvec bv ; [| va |]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SNum (int (length bv))
[PROOF STEP]
hence "eval_e i (v1'[y::=v]\<^sub>c\<^sub>e\<^sub>v) (SBitvec bv)"
[PROOF STATE]
proof (prove)
using this:
e = [| v1' |]\<^sup>c\<^sup>e \<and> v1 = v1'[y::=v]\<^sub>c\<^sub>e\<^sub>v

goal (1 subgoal):
 1. i \<lbrakk> v1'[y::=v]\<^sub>c\<^sub>e\<^sub>v \<rbrakk> ~ SBitvec bv
[PROOF STEP]
using eval_e_lenI
[PROOF STATE]
proof (prove)
using this:
e = [| v1' |]\<^sup>c\<^sup>e \<and> v1 = v1'[y::=v]\<^sub>c\<^sub>e\<^sub>v
i \<lbrakk> v1 \<rbrakk> ~ SBitvec bv
\<lbrakk>v1 = ?e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> ?e \<rbrakk> ~ SBitvec bv
[| v1 |]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v
i \<lbrakk> v \<rbrakk> ~ s

goal (1 subgoal):
 1. i \<lbrakk> v1'[y::=v]\<^sub>c\<^sub>e\<^sub>v \<rbrakk> ~ SBitvec bv
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
i \<lbrakk> v1'[y::=v]\<^sub>c\<^sub>e\<^sub>v \<rbrakk> ~ SBitvec bv

goal (1 subgoal):
 1. \<And>i va bv e. \<lbrakk>i \<lbrakk> va \<rbrakk> ~ SBitvec bv ; \<And>e. \<lbrakk>va = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBitvec bv ; [| va |]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SNum (int (length bv))
[PROOF STEP]
hence "eval_e (i ( y \<mapsto> s )) v1' (SBitvec bv)"
[PROOF STATE]
proof (prove)
using this:
i \<lbrakk> v1'[y::=v]\<^sub>c\<^sub>e\<^sub>v \<rbrakk> ~ SBitvec bv

goal (1 subgoal):
 1. i(y \<mapsto> s) \<lbrakk> v1' \<rbrakk> ~ SBitvec bv
[PROOF STEP]
using subst_v_eval_v eval_e_lenI *
[PROOF STATE]
proof (prove)
using this:
i \<lbrakk> v1'[y::=v]\<^sub>c\<^sub>e\<^sub>v \<rbrakk> ~ SBitvec bv
\<lbrakk>?i \<lbrakk> ?v \<rbrakk> ~ ?s ; ?i \<lbrakk> ?v'[?x::=?v]\<^sub>v\<^sub>v \<rbrakk> ~ ?s' \<rbrakk> \<Longrightarrow> ?i(?x \<mapsto> ?s) \<lbrakk> ?v' \<rbrakk> ~ ?s'
i \<lbrakk> v1 \<rbrakk> ~ SBitvec bv
\<lbrakk>v1 = ?e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> ?e \<rbrakk> ~ SBitvec bv
[| v1 |]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v
i \<lbrakk> v \<rbrakk> ~ s
e = [| v1' |]\<^sup>c\<^sup>e \<and> v1 = v1'[y::=v]\<^sub>c\<^sub>e\<^sub>v

goal (1 subgoal):
 1. i(y \<mapsto> s) \<lbrakk> v1' \<rbrakk> ~ SBitvec bv
[PROOF STEP]
by blast
[PROOF STATE]
proof (state)
this:
i(y \<mapsto> s) \<lbrakk> v1' \<rbrakk> ~ SBitvec bv

goal (1 subgoal):
 1. \<And>i va bv e. \<lbrakk>i \<lbrakk> va \<rbrakk> ~ SBitvec bv ; \<And>e. \<lbrakk>va = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SBitvec bv ; [| va |]\<^sup>c\<^sup>e = e[y::=v]\<^sub>c\<^sub>e\<^sub>v; i \<lbrakk> v \<rbrakk> ~ s \<rbrakk> \<Longrightarrow> i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SNum (int (length bv))
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
i(y \<mapsto> s) \<lbrakk> v1' \<rbrakk> ~ SBitvec bv
[PROOF STEP]
show ?case
[PROOF STATE]
proof (prove)
using this:
i(y \<mapsto> s) \<lbrakk> v1' \<rbrakk> ~ SBitvec bv

goal (1 subgoal):
 1. i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SNum (int (length bv))
[PROOF STEP]
using RCLogic.eval_e_lenI *
[PROOF STATE]
proof (prove)
using this:
i(y \<mapsto> s) \<lbrakk> v1' \<rbrakk> ~ SBitvec bv
?i \<lbrakk> ?v \<rbrakk> ~ SBitvec ?bv  \<Longrightarrow> ?i \<lbrakk> [| ?v |]\<^sup>c\<^sup>e \<rbrakk> ~ SNum (int (length ?bv))
e = [| v1' |]\<^sup>c\<^sup>e \<and> v1 = v1'[y::=v]\<^sub>c\<^sub>e\<^sub>v

goal (1 subgoal):
 1. i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SNum (int (length bv))
[PROOF STEP]
by meson
[PROOF STATE]
proof (state)
this:
i(y \<mapsto> s) \<lbrakk> e \<rbrakk> ~ SNum (int (length bv))

goal:
No subgoals!
[PROOF STEP]
qed