[STATEMENT]
lemma StepExec_determ_Aux[rule_format]:
"(\<forall> n1 l M s l1 t . n1 \<le> n \<longrightarrow> (M, l, s, n1, l1, t) \<in> Step \<longrightarrow>
       (\<forall> n2 l2 r. (M,l,s,n2,l2,r):Step \<longrightarrow> (n1=n2 \<and> t=r \<and> l1=l2))) \<and>
 (\<forall> n1 l M s h v . n1 \<le> n \<longrightarrow> (M, l, s, n1, h, v) \<in> Exec \<longrightarrow>
      (\<forall> n2 k w . (M,l,s,n2,k,w):Exec \<longrightarrow> (n1=n2 \<and> h=k \<and> v=w)))"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (\<forall>n1 l M s l1 t. n1 \<le> n \<longrightarrow> (M, l, s, n1, l1, t) \<in> Step \<longrightarrow> (\<forall>n2 l2 r. (M, l, s, n2, l2, r) \<in> Step \<longrightarrow> n1 = n2 \<and> t = r \<and> l1 = l2)) \<and> (\<forall>n1 l M s h v. n1 \<le> n \<longrightarrow> (M, l, s, n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. (M, l, s, n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w))
[PROOF STEP]
supply [[simproc del: defined_all]]
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (\<forall>n1 l M s l1 t. n1 \<le> n \<longrightarrow> (M, l, s, n1, l1, t) \<in> Step \<longrightarrow> (\<forall>n2 l2 r. (M, l, s, n2, l2, r) \<in> Step \<longrightarrow> n1 = n2 \<and> t = r \<and> l1 = l2)) \<and> (\<forall>n1 l M s h v. n1 \<le> n \<longrightarrow> (M, l, s, n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. (M, l, s, n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w))
[PROOF STEP]
apply (induct n)
[PROOF STATE]
proof (prove)
goal (2 subgoals):
 1. (\<forall>n1 l M s l1 t. n1 \<le> 0 \<longrightarrow> (M, l, s, n1, l1, t) \<in> Step \<longrightarrow> (\<forall>n2 l2 r. (M, l, s, n2, l2, r) \<in> Step \<longrightarrow> n1 = n2 \<and> t = r \<and> l1 = l2)) \<and> (\<forall>n1 l M s h v. n1 \<le> 0 \<longrightarrow> (M, l, s, n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. (M, l, s, n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w))
 2. \<And>n. (\<forall>n1 l M s l1 t. n1 \<le> n \<longrightarrow> (M, l, s, n1, l1, t) \<in> Step \<longrightarrow> (\<forall>n2 l2 r. (M, l, s, n2, l2, r) \<in> Step \<longrightarrow> n1 = n2 \<and> t = r \<and> l1 = l2)) \<and> (\<forall>n1 l M s h v. n1 \<le> n \<longrightarrow> (M, l, s, n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. (M, l, s, n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w)) \<Longrightarrow> (\<forall>n1 l M s l1 t. n1 \<le> Suc n \<longrightarrow> (M, l, s, n1, l1, t) \<in> Step \<longrightarrow> (\<forall>n2 l2 r. (M, l, s, n2, l2, r) \<in> Step \<longrightarrow> n1 = n2 \<and> t = r \<and> l1 = l2)) \<and> (\<forall>n1 l M s h v. n1 \<le> Suc n \<longrightarrow> (M, l, s, n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. (M, l, s, n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w))
[PROOF STEP]
apply clarsimp
[PROOF STATE]
proof (prove)
goal (2 subgoals):
 1. (\<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), 0, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n2 = 0 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2)) \<and> (\<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), 0, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n2 = 0 \<and> h = k \<and> v = w))
 2. \<And>n. (\<forall>n1 l M s l1 t. n1 \<le> n \<longrightarrow> (M, l, s, n1, l1, t) \<in> Step \<longrightarrow> (\<forall>n2 l2 r. (M, l, s, n2, l2, r) \<in> Step \<longrightarrow> n1 = n2 \<and> t = r \<and> l1 = l2)) \<and> (\<forall>n1 l M s h v. n1 \<le> n \<longrightarrow> (M, l, s, n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. (M, l, s, n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w)) \<Longrightarrow> (\<forall>n1 l M s l1 t. n1 \<le> Suc n \<longrightarrow> (M, l, s, n1, l1, t) \<in> Step \<longrightarrow> (\<forall>n2 l2 r. (M, l, s, n2, l2, r) \<in> Step \<longrightarrow> n1 = n2 \<and> t = r \<and> l1 = l2)) \<and> (\<forall>n1 l M s h v. n1 \<le> Suc n \<longrightarrow> (M, l, s, n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. (M, l, s, n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w))
[PROOF STEP]
apply rule
[PROOF STATE]
proof (prove)
goal (3 subgoals):
 1. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), 0, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n2 = 0 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2)
 2. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), 0, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n2 = 0 \<and> h = k \<and> v = w)
 3. \<And>n. (\<forall>n1 l M s l1 t. n1 \<le> n \<longrightarrow> (M, l, s, n1, l1, t) \<in> Step \<longrightarrow> (\<forall>n2 l2 r. (M, l, s, n2, l2, r) \<in> Step \<longrightarrow> n1 = n2 \<and> t = r \<and> l1 = l2)) \<and> (\<forall>n1 l M s h v. n1 \<le> n \<longrightarrow> (M, l, s, n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. (M, l, s, n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w)) \<Longrightarrow> (\<forall>n1 l M s l1 t. n1 \<le> Suc n \<longrightarrow> (M, l, s, n1, l1, t) \<in> Step \<longrightarrow> (\<forall>n2 l2 r. (M, l, s, n2, l2, r) \<in> Step \<longrightarrow> n1 = n2 \<and> t = r \<and> l1 = l2)) \<and> (\<forall>n1 l M s h v. n1 \<le> Suc n \<longrightarrow> (M, l, s, n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. (M, l, s, n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w))
[PROOF STEP]
apply clarsimp
[PROOF STATE]
proof (prove)
goal (3 subgoals):
 1. \<And>l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc. \<lbrakk>((a, aa, b), l, (ab, ac, ba), 0, l1, ad, ae, bb) \<in> Step; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step\<rbrakk> \<Longrightarrow> n2 = 0 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 2. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), 0, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n2 = 0 \<and> h = k \<and> v = w)
 3. \<And>n. (\<forall>n1 l M s l1 t. n1 \<le> n \<longrightarrow> (M, l, s, n1, l1, t) \<in> Step \<longrightarrow> (\<forall>n2 l2 r. (M, l, s, n2, l2, r) \<in> Step \<longrightarrow> n1 = n2 \<and> t = r \<and> l1 = l2)) \<and> (\<forall>n1 l M s h v. n1 \<le> n \<longrightarrow> (M, l, s, n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. (M, l, s, n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w)) \<Longrightarrow> (\<forall>n1 l M s l1 t. n1 \<le> Suc n \<longrightarrow> (M, l, s, n1, l1, t) \<in> Step \<longrightarrow> (\<forall>n2 l2 r. (M, l, s, n2, l2, r) \<in> Step \<longrightarrow> n1 = n2 \<and> t = r \<and> l1 = l2)) \<and> (\<forall>n1 l M s h v. n1 \<le> Suc n \<longrightarrow> (M, l, s, n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. (M, l, s, n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w))
[PROOF STEP]
apply (drule no_zero_height_Step_derivs1, simp)
[PROOF STATE]
proof (prove)
goal (2 subgoals):
 1. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), 0, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n2 = 0 \<and> h = k \<and> v = w)
 2. \<And>n. (\<forall>n1 l M s l1 t. n1 \<le> n \<longrightarrow> (M, l, s, n1, l1, t) \<in> Step \<longrightarrow> (\<forall>n2 l2 r. (M, l, s, n2, l2, r) \<in> Step \<longrightarrow> n1 = n2 \<and> t = r \<and> l1 = l2)) \<and> (\<forall>n1 l M s h v. n1 \<le> n \<longrightarrow> (M, l, s, n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. (M, l, s, n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w)) \<Longrightarrow> (\<forall>n1 l M s l1 t. n1 \<le> Suc n \<longrightarrow> (M, l, s, n1, l1, t) \<in> Step \<longrightarrow> (\<forall>n2 l2 r. (M, l, s, n2, l2, r) \<in> Step \<longrightarrow> n1 = n2 \<and> t = r \<and> l1 = l2)) \<and> (\<forall>n1 l M s h v. n1 \<le> Suc n \<longrightarrow> (M, l, s, n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. (M, l, s, n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w))
[PROOF STEP]
apply clarsimp
[PROOF STATE]
proof (prove)
goal (2 subgoals):
 1. \<And>l a aa b ab ac ba h v n2 k w. \<lbrakk>((a, aa, b), l, (ab, ac, ba), 0, h, v) \<in> Exec; ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec\<rbrakk> \<Longrightarrow> n2 = 0 \<and> h = k \<and> v = w
 2. \<And>n. (\<forall>n1 l M s l1 t. n1 \<le> n \<longrightarrow> (M, l, s, n1, l1, t) \<in> Step \<longrightarrow> (\<forall>n2 l2 r. (M, l, s, n2, l2, r) \<in> Step \<longrightarrow> n1 = n2 \<and> t = r \<and> l1 = l2)) \<and> (\<forall>n1 l M s h v. n1 \<le> n \<longrightarrow> (M, l, s, n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. (M, l, s, n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w)) \<Longrightarrow> (\<forall>n1 l M s l1 t. n1 \<le> Suc n \<longrightarrow> (M, l, s, n1, l1, t) \<in> Step \<longrightarrow> (\<forall>n2 l2 r. (M, l, s, n2, l2, r) \<in> Step \<longrightarrow> n1 = n2 \<and> t = r \<and> l1 = l2)) \<and> (\<forall>n1 l M s h v. n1 \<le> Suc n \<longrightarrow> (M, l, s, n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. (M, l, s, n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w))
[PROOF STEP]
apply (drule no_zero_height_Exec_derivs1, simp)
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<And>n. (\<forall>n1 l M s l1 t. n1 \<le> n \<longrightarrow> (M, l, s, n1, l1, t) \<in> Step \<longrightarrow> (\<forall>n2 l2 r. (M, l, s, n2, l2, r) \<in> Step \<longrightarrow> n1 = n2 \<and> t = r \<and> l1 = l2)) \<and> (\<forall>n1 l M s h v. n1 \<le> n \<longrightarrow> (M, l, s, n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. (M, l, s, n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w)) \<Longrightarrow> (\<forall>n1 l M s l1 t. n1 \<le> Suc n \<longrightarrow> (M, l, s, n1, l1, t) \<in> Step \<longrightarrow> (\<forall>n2 l2 r. (M, l, s, n2, l2, r) \<in> Step \<longrightarrow> n1 = n2 \<and> t = r \<and> l1 = l2)) \<and> (\<forall>n1 l M s h v. n1 \<le> Suc n \<longrightarrow> (M, l, s, n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. (M, l, s, n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w))
[PROOF STEP]
apply clarsimp
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<And>n. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w)\<rbrakk> \<Longrightarrow> (\<forall>n1\<le>Suc n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2)) \<and> (\<forall>n1\<le>Suc n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w))
[PROOF STEP]
apply rule
[PROOF STATE]
proof (prove)
goal (2 subgoals):
 1. \<And>n. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w)\<rbrakk> \<Longrightarrow> \<forall>n1\<le>Suc n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2)
 2. \<And>n. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w)\<rbrakk> \<Longrightarrow> \<forall>n1\<le>Suc n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w)
[PROOF STEP]
apply clarsimp
[PROOF STATE]
proof (prove)
goal (2 subgoals):
 1. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 2. \<And>n. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w)\<rbrakk> \<Longrightarrow> \<forall>n1\<le>Suc n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w)
[PROOF STEP]
apply (erule Step.cases)
[PROOF STATE]
proof (prove)
goal (17 subgoals):
 1. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la v NEXT os s h ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (const v); NEXT = (v # os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 2. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la NEXT v os s h ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (v # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some dup; NEXT = (v # v # os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 3. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la NEXT os s h ll v. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (v # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some pop; NEXT = (os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 4. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la NEXT w v os s h ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (v # w # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some swap; NEXT = (w # v # os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 5. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la x s v NEXT os h ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (load x); s\<down>x = Some v; NEXT = (v # os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 6. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la x NEXT os s v h ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (v # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (store x); NEXT = (os, s[x\<mapsto>v], h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 7. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la f NEXT v w os s h ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (v # w # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (binop f); NEXT = (f v w # os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 8. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la f NEXT v os s h ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (v # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (unop f); NEXT = (f v # os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 9. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la d newobj ah h NEXT os s ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (new d); newobj = (d, emp); ah = nextLoc h; NEXT = (RVal (Loc ah) # os, s, h[ah\<mapsto>newobj]); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 10. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la d F h ah Flds v NEXT os s ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (RVal (Loc ah) # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (getfield d F); h\<down>ah = Some (d, Flds); Flds\<down>F = Some v; NEXT = (v # os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
A total of 17 subgoals...
[PROOF STEP]
apply clarsimp
[PROOF STATE]
proof (prove)
goal (17 subgoals):
 1. \<And>n n2 l2 af ag bc ah ai bd la v os s h. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); ((ah, ai, bd), la, (os, s, h), n2, l2, af, ag, bc) \<in> Step; get_ins (ah, ai, bd) la = Some (const v)\<rbrakk> \<Longrightarrow> Suc 0 = n2 \<and> v # os = af \<and> s = ag \<and> h = bc \<and> la + 1 = l2
 2. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la NEXT v os s h ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (v # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some dup; NEXT = (v # v # os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 3. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la NEXT os s h ll v. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (v # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some pop; NEXT = (os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 4. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la NEXT w v os s h ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (v # w # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some swap; NEXT = (w # v # os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 5. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la x s v NEXT os h ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (load x); s\<down>x = Some v; NEXT = (v # os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 6. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la x NEXT os s v h ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (v # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (store x); NEXT = (os, s[x\<mapsto>v], h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 7. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la f NEXT v w os s h ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (v # w # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (binop f); NEXT = (f v w # os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 8. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la f NEXT v os s h ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (v # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (unop f); NEXT = (f v # os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 9. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la d newobj ah h NEXT os s ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (new d); newobj = (d, emp); ah = nextLoc h; NEXT = (RVal (Loc ah) # os, s, h[ah\<mapsto>newobj]); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 10. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la d F h ah Flds v NEXT os s ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (RVal (Loc ah) # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (getfield d F); h\<down>ah = Some (d, Flds); Flds\<down>F = Some v; NEXT = (v # os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
A total of 17 subgoals...
[PROOF STEP]
apply (drule ConstElim1)
[PROOF STATE]
proof (prove)
goal (18 subgoals):
 1. \<And>n n2 l2 af ag bc ah ai bd la v os s h. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); get_ins (ah, ai, bd) la = Some (const v)\<rbrakk> \<Longrightarrow> get_ins (ah, ai, bd) la = Some (const (?v137 n n2 l2 af ag bc ah ai bd la v os s h))
 2. \<And>n n2 l2 af ag bc ah ai bd la v os s h. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); get_ins (ah, ai, bd) la = Some (const v); n2 = Suc 0 \<and> (af, ag, bc) = (?v137 n n2 l2 af ag bc ah ai bd la v os s h # os, s, h) \<and> l2 = la + 1\<rbrakk> \<Longrightarrow> Suc 0 = n2 \<and> v # os = af \<and> s = ag \<and> h = bc \<and> la + 1 = l2
 3. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la NEXT v os s h ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (v # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some dup; NEXT = (v # v # os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 4. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la NEXT os s h ll v. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (v # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some pop; NEXT = (os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 5. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la NEXT w v os s h ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (v # w # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some swap; NEXT = (w # v # os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 6. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la x s v NEXT os h ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (load x); s\<down>x = Some v; NEXT = (v # os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 7. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la x NEXT os s v h ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (v # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (store x); NEXT = (os, s[x\<mapsto>v], h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 8. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la f NEXT v w os s h ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (v # w # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (binop f); NEXT = (f v w # os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 9. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la f NEXT v os s h ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (v # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (unop f); NEXT = (f v # os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 10. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la d newobj ah h NEXT os s ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (new d); newobj = (d, emp); ah = nextLoc h; NEXT = (RVal (Loc ah) # os, s, h[ah\<mapsto>newobj]); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
A total of 18 subgoals...
[PROOF STEP]
apply simp
[PROOF STATE]
proof (prove)
goal (17 subgoals):
 1. \<And>n n2 l2 af ag bc ah ai bd la v os s h. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); get_ins (ah, ai, bd) la = Some (const v); n2 = Suc 0 \<and> (af, ag, bc) = (v # os, s, h) \<and> l2 = la + 1\<rbrakk> \<Longrightarrow> Suc 0 = n2 \<and> v # os = af \<and> s = ag \<and> h = bc \<and> la + 1 = l2
 2. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la NEXT v os s h ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (v # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some dup; NEXT = (v # v # os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 3. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la NEXT os s h ll v. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (v # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some pop; NEXT = (os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 4. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la NEXT w v os s h ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (v # w # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some swap; NEXT = (w # v # os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 5. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la x s v NEXT os h ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (load x); s\<down>x = Some v; NEXT = (v # os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 6. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la x NEXT os s v h ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (v # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (store x); NEXT = (os, s[x\<mapsto>v], h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 7. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la f NEXT v w os s h ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (v # w # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (binop f); NEXT = (f v w # os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 8. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la f NEXT v os s h ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (v # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (unop f); NEXT = (f v # os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 9. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la d newobj ah h NEXT os s ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (new d); newobj = (d, emp); ah = nextLoc h; NEXT = (RVal (Loc ah) # os, s, h[ah\<mapsto>newobj]); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 10. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la d F h ah Flds v NEXT os s ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (RVal (Loc ah) # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (getfield d F); h\<down>ah = Some (d, Flds); Flds\<down>F = Some v; NEXT = (v # os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
A total of 17 subgoals...
[PROOF STEP]
apply clarsimp
[PROOF STATE]
proof (prove)
goal (16 subgoals):
 1. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la NEXT v os s h ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (v # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some dup; NEXT = (v # v # os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 2. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la NEXT os s h ll v. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (v # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some pop; NEXT = (os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 3. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la NEXT w v os s h ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (v # w # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some swap; NEXT = (w # v # os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 4. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la x s v NEXT os h ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (load x); s\<down>x = Some v; NEXT = (v # os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 5. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la x NEXT os s v h ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (v # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (store x); NEXT = (os, s[x\<mapsto>v], h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 6. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la f NEXT v w os s h ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (v # w # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (binop f); NEXT = (f v w # os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 7. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la f NEXT v os s h ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (v # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (unop f); NEXT = (f v # os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 8. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la d newobj ah h NEXT os s ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (new d); newobj = (d, emp); ah = nextLoc h; NEXT = (RVal (Loc ah) # os, s, h[ah\<mapsto>newobj]); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 9. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la d F h ah Flds v NEXT os s ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (RVal (Loc ah) # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (getfield d F); h\<down>ah = Some (d, Flds); Flds\<down>F = Some v; NEXT = (v # os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 10. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la d F h ah Flds newobj v NEXT os s ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (v # RVal (Loc ah) # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (putfield d F); h\<down>ah = Some (d, Flds); newobj = (d, Flds[F\<mapsto>v]); NEXT = (os, s, h[ah\<mapsto>newobj]); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
A total of 16 subgoals...
[PROOF STEP]
apply clarsimp
[PROOF STATE]
proof (prove)
goal (16 subgoals):
 1. \<And>n n2 l2 af ag bc ah ai bd la v os s h. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); ((ah, ai, bd), la, (v # os, s, h), n2, l2, af, ag, bc) \<in> Step; get_ins (ah, ai, bd) la = Some dup\<rbrakk> \<Longrightarrow> Suc 0 = n2 \<and> v # v # os = af \<and> s = ag \<and> h = bc \<and> la + 1 = l2
 2. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la NEXT os s h ll v. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (v # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some pop; NEXT = (os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 3. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la NEXT w v os s h ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (v # w # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some swap; NEXT = (w # v # os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 4. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la x s v NEXT os h ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (load x); s\<down>x = Some v; NEXT = (v # os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 5. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la x NEXT os s v h ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (v # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (store x); NEXT = (os, s[x\<mapsto>v], h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 6. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la f NEXT v w os s h ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (v # w # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (binop f); NEXT = (f v w # os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 7. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la f NEXT v os s h ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (v # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (unop f); NEXT = (f v # os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 8. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la d newobj ah h NEXT os s ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (new d); newobj = (d, emp); ah = nextLoc h; NEXT = (RVal (Loc ah) # os, s, h[ah\<mapsto>newobj]); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 9. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la d F h ah Flds v NEXT os s ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (RVal (Loc ah) # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (getfield d F); h\<down>ah = Some (d, Flds); Flds\<down>F = Some v; NEXT = (v # os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 10. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la d F h ah Flds newobj v NEXT os s ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (v # RVal (Loc ah) # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (putfield d F); h\<down>ah = Some (d, Flds); newobj = (d, Flds[F\<mapsto>v]); NEXT = (os, s, h[ah\<mapsto>newobj]); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
A total of 16 subgoals...
[PROOF STEP]
apply (drule DupElim1)
[PROOF STATE]
proof (prove)
goal (17 subgoals):
 1. \<And>n n2 l2 af ag bc ah ai bd la v os s h. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); get_ins (ah, ai, bd) la = Some dup\<rbrakk> \<Longrightarrow> get_ins (ah, ai, bd) la = Some dup
 2. \<And>n n2 l2 af ag bc ah ai bd la v os s h. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); get_ins (ah, ai, bd) la = Some dup; \<exists>va ops. v # os = va # ops \<and> n2 = Suc 0 \<and> (af, ag, bc) = (va # v # os, s, h) \<and> l2 = la + 1\<rbrakk> \<Longrightarrow> Suc 0 = n2 \<and> v # v # os = af \<and> s = ag \<and> h = bc \<and> la + 1 = l2
 3. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la NEXT os s h ll v. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (v # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some pop; NEXT = (os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 4. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la NEXT w v os s h ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (v # w # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some swap; NEXT = (w # v # os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 5. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la x s v NEXT os h ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (load x); s\<down>x = Some v; NEXT = (v # os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 6. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la x NEXT os s v h ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (v # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (store x); NEXT = (os, s[x\<mapsto>v], h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 7. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la f NEXT v w os s h ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (v # w # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (binop f); NEXT = (f v w # os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 8. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la f NEXT v os s h ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (v # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (unop f); NEXT = (f v # os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 9. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la d newobj ah h NEXT os s ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (new d); newobj = (d, emp); ah = nextLoc h; NEXT = (RVal (Loc ah) # os, s, h[ah\<mapsto>newobj]); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 10. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la d F h ah Flds v NEXT os s ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (RVal (Loc ah) # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (getfield d F); h\<down>ah = Some (d, Flds); Flds\<down>F = Some v; NEXT = (v # os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
A total of 17 subgoals...
[PROOF STEP]
apply simp
[PROOF STATE]
proof (prove)
goal (16 subgoals):
 1. \<And>n n2 l2 af ag bc ah ai bd la v os s h. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); get_ins (ah, ai, bd) la = Some dup; \<exists>va ops. v # os = va # ops \<and> n2 = Suc 0 \<and> (af, ag, bc) = (va # v # os, s, h) \<and> l2 = la + 1\<rbrakk> \<Longrightarrow> Suc 0 = n2 \<and> v # v # os = af \<and> s = ag \<and> h = bc \<and> la + 1 = l2
 2. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la NEXT os s h ll v. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (v # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some pop; NEXT = (os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 3. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la NEXT w v os s h ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (v # w # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some swap; NEXT = (w # v # os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 4. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la x s v NEXT os h ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (load x); s\<down>x = Some v; NEXT = (v # os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 5. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la x NEXT os s v h ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (v # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (store x); NEXT = (os, s[x\<mapsto>v], h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 6. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la f NEXT v w os s h ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (v # w # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (binop f); NEXT = (f v w # os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 7. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la f NEXT v os s h ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (v # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (unop f); NEXT = (f v # os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 8. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la d newobj ah h NEXT os s ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (new d); newobj = (d, emp); ah = nextLoc h; NEXT = (RVal (Loc ah) # os, s, h[ah\<mapsto>newobj]); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 9. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la d F h ah Flds v NEXT os s ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (RVal (Loc ah) # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (getfield d F); h\<down>ah = Some (d, Flds); Flds\<down>F = Some v; NEXT = (v # os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 10. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la d F h ah Flds newobj v NEXT os s ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (v # RVal (Loc ah) # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (putfield d F); h\<down>ah = Some (d, Flds); newobj = (d, Flds[F\<mapsto>v]); NEXT = (os, s, h[ah\<mapsto>newobj]); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
A total of 16 subgoals...
[PROOF STEP]
apply clarsimp
[PROOF STATE]
proof (prove)
goal (15 subgoals):
 1. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la NEXT os s h ll v. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (v # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some pop; NEXT = (os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 2. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la NEXT w v os s h ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (v # w # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some swap; NEXT = (w # v # os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 3. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la x s v NEXT os h ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (load x); s\<down>x = Some v; NEXT = (v # os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 4. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la x NEXT os s v h ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (v # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (store x); NEXT = (os, s[x\<mapsto>v], h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 5. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la f NEXT v w os s h ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (v # w # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (binop f); NEXT = (f v w # os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 6. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la f NEXT v os s h ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (v # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (unop f); NEXT = (f v # os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 7. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la d newobj ah h NEXT os s ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (new d); newobj = (d, emp); ah = nextLoc h; NEXT = (RVal (Loc ah) # os, s, h[ah\<mapsto>newobj]); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 8. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la d F h ah Flds v NEXT os s ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (RVal (Loc ah) # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (getfield d F); h\<down>ah = Some (d, Flds); Flds\<down>F = Some v; NEXT = (v # os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 9. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la d F h ah Flds newobj v NEXT os s ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (v # RVal (Loc ah) # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (putfield d F); h\<down>ah = Some (d, Flds); newobj = (d, Flds[F\<mapsto>v]); NEXT = (os, s, h[ah\<mapsto>newobj]); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 10. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la d h ah Flds NEXT os s ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (RVal (Loc ah) # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (checkcast d); h\<down>ah = Some (d, Flds); NEXT = (RVal (Loc ah) # os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
A total of 15 subgoals...
[PROOF STEP]
apply clarsimp
[PROOF STATE]
proof (prove)
goal (15 subgoals):
 1. \<And>n n2 l2 af ag bc ah ai bd la os s h v. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); ((ah, ai, bd), la, (v # os, s, h), n2, l2, af, ag, bc) \<in> Step; get_ins (ah, ai, bd) la = Some pop\<rbrakk> \<Longrightarrow> Suc 0 = n2 \<and> os = af \<and> s = ag \<and> h = bc \<and> la + 1 = l2
 2. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la NEXT w v os s h ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (v # w # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some swap; NEXT = (w # v # os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 3. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la x s v NEXT os h ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (load x); s\<down>x = Some v; NEXT = (v # os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 4. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la x NEXT os s v h ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (v # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (store x); NEXT = (os, s[x\<mapsto>v], h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 5. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la f NEXT v w os s h ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (v # w # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (binop f); NEXT = (f v w # os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 6. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la f NEXT v os s h ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (v # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (unop f); NEXT = (f v # os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 7. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la d newobj ah h NEXT os s ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (new d); newobj = (d, emp); ah = nextLoc h; NEXT = (RVal (Loc ah) # os, s, h[ah\<mapsto>newobj]); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 8. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la d F h ah Flds v NEXT os s ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (RVal (Loc ah) # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (getfield d F); h\<down>ah = Some (d, Flds); Flds\<down>F = Some v; NEXT = (v # os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 9. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la d F h ah Flds newobj v NEXT os s ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (v # RVal (Loc ah) # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (putfield d F); h\<down>ah = Some (d, Flds); newobj = (d, Flds[F\<mapsto>v]); NEXT = (os, s, h[ah\<mapsto>newobj]); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 10. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la d h ah Flds NEXT os s ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (RVal (Loc ah) # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (checkcast d); h\<down>ah = Some (d, Flds); NEXT = (RVal (Loc ah) # os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
A total of 15 subgoals...
[PROOF STEP]
apply (drule PopElim1)
[PROOF STATE]
proof (prove)
goal (16 subgoals):
 1. \<And>n n2 l2 af ag bc ah ai bd la os s h v. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); get_ins (ah, ai, bd) la = Some pop\<rbrakk> \<Longrightarrow> get_ins (ah, ai, bd) la = Some pop
 2. \<And>n n2 l2 af ag bc ah ai bd la os s h v. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); get_ins (ah, ai, bd) la = Some pop; \<exists>va ops. v # os = va # ops \<and> n2 = Suc 0 \<and> (af, ag, bc) = (ops, s, h) \<and> l2 = la + 1\<rbrakk> \<Longrightarrow> Suc 0 = n2 \<and> os = af \<and> s = ag \<and> h = bc \<and> la + 1 = l2
 3. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la NEXT w v os s h ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (v # w # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some swap; NEXT = (w # v # os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 4. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la x s v NEXT os h ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (load x); s\<down>x = Some v; NEXT = (v # os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 5. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la x NEXT os s v h ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (v # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (store x); NEXT = (os, s[x\<mapsto>v], h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 6. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la f NEXT v w os s h ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (v # w # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (binop f); NEXT = (f v w # os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 7. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la f NEXT v os s h ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (v # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (unop f); NEXT = (f v # os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 8. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la d newobj ah h NEXT os s ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (new d); newobj = (d, emp); ah = nextLoc h; NEXT = (RVal (Loc ah) # os, s, h[ah\<mapsto>newobj]); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 9. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la d F h ah Flds v NEXT os s ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (RVal (Loc ah) # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (getfield d F); h\<down>ah = Some (d, Flds); Flds\<down>F = Some v; NEXT = (v # os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 10. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la d F h ah Flds newobj v NEXT os s ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (v # RVal (Loc ah) # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (putfield d F); h\<down>ah = Some (d, Flds); newobj = (d, Flds[F\<mapsto>v]); NEXT = (os, s, h[ah\<mapsto>newobj]); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
A total of 16 subgoals...
[PROOF STEP]
apply simp
[PROOF STATE]
proof (prove)
goal (15 subgoals):
 1. \<And>n n2 l2 af ag bc ah ai bd la os s h v. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); get_ins (ah, ai, bd) la = Some pop; \<exists>va ops. v # os = va # ops \<and> n2 = Suc 0 \<and> (af, ag, bc) = (ops, s, h) \<and> l2 = la + 1\<rbrakk> \<Longrightarrow> Suc 0 = n2 \<and> os = af \<and> s = ag \<and> h = bc \<and> la + 1 = l2
 2. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la NEXT w v os s h ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (v # w # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some swap; NEXT = (w # v # os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 3. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la x s v NEXT os h ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (load x); s\<down>x = Some v; NEXT = (v # os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 4. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la x NEXT os s v h ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (v # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (store x); NEXT = (os, s[x\<mapsto>v], h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 5. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la f NEXT v w os s h ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (v # w # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (binop f); NEXT = (f v w # os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 6. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la f NEXT v os s h ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (v # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (unop f); NEXT = (f v # os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 7. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la d newobj ah h NEXT os s ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (new d); newobj = (d, emp); ah = nextLoc h; NEXT = (RVal (Loc ah) # os, s, h[ah\<mapsto>newobj]); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 8. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la d F h ah Flds v NEXT os s ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (RVal (Loc ah) # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (getfield d F); h\<down>ah = Some (d, Flds); Flds\<down>F = Some v; NEXT = (v # os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 9. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la d F h ah Flds newobj v NEXT os s ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (v # RVal (Loc ah) # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (putfield d F); h\<down>ah = Some (d, Flds); newobj = (d, Flds[F\<mapsto>v]); NEXT = (os, s, h[ah\<mapsto>newobj]); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 10. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la d h ah Flds NEXT os s ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (RVal (Loc ah) # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (checkcast d); h\<down>ah = Some (d, Flds); NEXT = (RVal (Loc ah) # os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
A total of 15 subgoals...
[PROOF STEP]
apply clarsimp
[PROOF STATE]
proof (prove)
goal (14 subgoals):
 1. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la NEXT w v os s h ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (v # w # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some swap; NEXT = (w # v # os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 2. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la x s v NEXT os h ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (load x); s\<down>x = Some v; NEXT = (v # os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 3. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la x NEXT os s v h ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (v # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (store x); NEXT = (os, s[x\<mapsto>v], h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 4. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la f NEXT v w os s h ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (v # w # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (binop f); NEXT = (f v w # os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 5. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la f NEXT v os s h ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (v # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (unop f); NEXT = (f v # os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 6. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la d newobj ah h NEXT os s ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (new d); newobj = (d, emp); ah = nextLoc h; NEXT = (RVal (Loc ah) # os, s, h[ah\<mapsto>newobj]); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 7. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la d F h ah Flds v NEXT os s ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (RVal (Loc ah) # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (getfield d F); h\<down>ah = Some (d, Flds); Flds\<down>F = Some v; NEXT = (v # os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 8. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la d F h ah Flds newobj v NEXT os s ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (v # RVal (Loc ah) # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (putfield d F); h\<down>ah = Some (d, Flds); newobj = (d, Flds[F\<mapsto>v]); NEXT = (os, s, h[ah\<mapsto>newobj]); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 9. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la d h ah Flds NEXT os s ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (RVal (Loc ah) # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (checkcast d); h\<down>ah = Some (d, Flds); NEXT = (RVal (Loc ah) # os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 10. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la pc S. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = S; n1 = 1; l1 = pc; (ad, ae, bb) = S; get_ins M la = Some (goto pc)\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
A total of 14 subgoals...
[PROOF STEP]
apply clarsimp
[PROOF STATE]
proof (prove)
goal (14 subgoals):
 1. \<And>n n2 l2 af ag bc ah ai bd la w v os s h. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); ((ah, ai, bd), la, (v # w # os, s, h), n2, l2, af, ag, bc) \<in> Step; get_ins (ah, ai, bd) la = Some swap\<rbrakk> \<Longrightarrow> Suc 0 = n2 \<and> w # v # os = af \<and> s = ag \<and> h = bc \<and> la + 1 = l2
 2. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la x s v NEXT os h ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (load x); s\<down>x = Some v; NEXT = (v # os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 3. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la x NEXT os s v h ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (v # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (store x); NEXT = (os, s[x\<mapsto>v], h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 4. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la f NEXT v w os s h ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (v # w # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (binop f); NEXT = (f v w # os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 5. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la f NEXT v os s h ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (v # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (unop f); NEXT = (f v # os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 6. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la d newobj ah h NEXT os s ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (new d); newobj = (d, emp); ah = nextLoc h; NEXT = (RVal (Loc ah) # os, s, h[ah\<mapsto>newobj]); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 7. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la d F h ah Flds v NEXT os s ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (RVal (Loc ah) # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (getfield d F); h\<down>ah = Some (d, Flds); Flds\<down>F = Some v; NEXT = (v # os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 8. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la d F h ah Flds newobj v NEXT os s ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (v # RVal (Loc ah) # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (putfield d F); h\<down>ah = Some (d, Flds); newobj = (d, Flds[F\<mapsto>v]); NEXT = (os, s, h[ah\<mapsto>newobj]); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 9. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la d h ah Flds NEXT os s ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (RVal (Loc ah) # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (checkcast d); h\<down>ah = Some (d, Flds); NEXT = (RVal (Loc ah) # os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 10. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la pc S. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = S; n1 = 1; l1 = pc; (ad, ae, bb) = S; get_ins M la = Some (goto pc)\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
A total of 14 subgoals...
[PROOF STEP]
apply (drule SwapElim1)
[PROOF STATE]
proof (prove)
goal (15 subgoals):
 1. \<And>n n2 l2 af ag bc ah ai bd la w v os s h. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); get_ins (ah, ai, bd) la = Some swap\<rbrakk> \<Longrightarrow> get_ins (ah, ai, bd) la = Some swap
 2. \<And>n n2 l2 af ag bc ah ai bd la w v os s h. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); get_ins (ah, ai, bd) la = Some swap; \<exists>va wa ops. v # w # os = va # wa # ops \<and> n2 = Suc 0 \<and> (af, ag, bc) = (wa # va # ops, s, h) \<and> l2 = la + 1\<rbrakk> \<Longrightarrow> Suc 0 = n2 \<and> w # v # os = af \<and> s = ag \<and> h = bc \<and> la + 1 = l2
 3. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la x s v NEXT os h ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (load x); s\<down>x = Some v; NEXT = (v # os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 4. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la x NEXT os s v h ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (v # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (store x); NEXT = (os, s[x\<mapsto>v], h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 5. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la f NEXT v w os s h ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (v # w # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (binop f); NEXT = (f v w # os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 6. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la f NEXT v os s h ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (v # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (unop f); NEXT = (f v # os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 7. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la d newobj ah h NEXT os s ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (new d); newobj = (d, emp); ah = nextLoc h; NEXT = (RVal (Loc ah) # os, s, h[ah\<mapsto>newobj]); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 8. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la d F h ah Flds v NEXT os s ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (RVal (Loc ah) # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (getfield d F); h\<down>ah = Some (d, Flds); Flds\<down>F = Some v; NEXT = (v # os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 9. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la d F h ah Flds newobj v NEXT os s ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (v # RVal (Loc ah) # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (putfield d F); h\<down>ah = Some (d, Flds); newobj = (d, Flds[F\<mapsto>v]); NEXT = (os, s, h[ah\<mapsto>newobj]); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 10. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la d h ah Flds NEXT os s ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (RVal (Loc ah) # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (checkcast d); h\<down>ah = Some (d, Flds); NEXT = (RVal (Loc ah) # os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
A total of 15 subgoals...
[PROOF STEP]
apply simp
[PROOF STATE]
proof (prove)
goal (14 subgoals):
 1. \<And>n n2 l2 af ag bc ah ai bd la w v os s h. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); get_ins (ah, ai, bd) la = Some swap; \<exists>va wa ops. v # w # os = va # wa # ops \<and> n2 = Suc 0 \<and> (af, ag, bc) = (wa # va # ops, s, h) \<and> l2 = la + 1\<rbrakk> \<Longrightarrow> Suc 0 = n2 \<and> w # v # os = af \<and> s = ag \<and> h = bc \<and> la + 1 = l2
 2. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la x s v NEXT os h ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (load x); s\<down>x = Some v; NEXT = (v # os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 3. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la x NEXT os s v h ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (v # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (store x); NEXT = (os, s[x\<mapsto>v], h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 4. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la f NEXT v w os s h ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (v # w # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (binop f); NEXT = (f v w # os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 5. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la f NEXT v os s h ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (v # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (unop f); NEXT = (f v # os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 6. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la d newobj ah h NEXT os s ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (new d); newobj = (d, emp); ah = nextLoc h; NEXT = (RVal (Loc ah) # os, s, h[ah\<mapsto>newobj]); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 7. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la d F h ah Flds v NEXT os s ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (RVal (Loc ah) # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (getfield d F); h\<down>ah = Some (d, Flds); Flds\<down>F = Some v; NEXT = (v # os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 8. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la d F h ah Flds newobj v NEXT os s ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (v # RVal (Loc ah) # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (putfield d F); h\<down>ah = Some (d, Flds); newobj = (d, Flds[F\<mapsto>v]); NEXT = (os, s, h[ah\<mapsto>newobj]); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 9. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la d h ah Flds NEXT os s ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (RVal (Loc ah) # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (checkcast d); h\<down>ah = Some (d, Flds); NEXT = (RVal (Loc ah) # os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 10. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la pc S. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = S; n1 = 1; l1 = pc; (ad, ae, bb) = S; get_ins M la = Some (goto pc)\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
A total of 14 subgoals...
[PROOF STEP]
apply clarsimp
[PROOF STATE]
proof (prove)
goal (13 subgoals):
 1. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la x s v NEXT os h ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (load x); s\<down>x = Some v; NEXT = (v # os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 2. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la x NEXT os s v h ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (v # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (store x); NEXT = (os, s[x\<mapsto>v], h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 3. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la f NEXT v w os s h ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (v # w # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (binop f); NEXT = (f v w # os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 4. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la f NEXT v os s h ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (v # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (unop f); NEXT = (f v # os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 5. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la d newobj ah h NEXT os s ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (new d); newobj = (d, emp); ah = nextLoc h; NEXT = (RVal (Loc ah) # os, s, h[ah\<mapsto>newobj]); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 6. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la d F h ah Flds v NEXT os s ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (RVal (Loc ah) # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (getfield d F); h\<down>ah = Some (d, Flds); Flds\<down>F = Some v; NEXT = (v # os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 7. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la d F h ah Flds newobj v NEXT os s ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (v # RVal (Loc ah) # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (putfield d F); h\<down>ah = Some (d, Flds); newobj = (d, Flds[F\<mapsto>v]); NEXT = (os, s, h[ah\<mapsto>newobj]); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 8. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la d h ah Flds NEXT os s ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (RVal (Loc ah) # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (checkcast d); h\<down>ah = Some (d, Flds); NEXT = (RVal (Loc ah) # os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 9. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la pc S. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = S; n1 = 1; l1 = pc; (ad, ae, bb) = S; get_ins M la = Some (goto pc)\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 10. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la pc NEXT os s h. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (TRUE # os, s, h); n1 = 1; l1 = pc; (ad, ae, bb) = NEXT; get_ins M la = Some (iftrue pc); NEXT = (os, s, h)\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
A total of 13 subgoals...
[PROOF STEP]
apply clarsimp
[PROOF STATE]
proof (prove)
goal (13 subgoals):
 1. \<And>n n2 l2 af ag bc ah ai bd la x s v os h. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); ((ah, ai, bd), la, (os, s, h), n2, l2, af, ag, bc) \<in> Step; get_ins (ah, ai, bd) la = Some (load x); s\<down>x = Some v\<rbrakk> \<Longrightarrow> Suc 0 = n2 \<and> v # os = af \<and> s = ag \<and> h = bc \<and> la + 1 = l2
 2. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la x NEXT os s v h ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (v # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (store x); NEXT = (os, s[x\<mapsto>v], h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 3. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la f NEXT v w os s h ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (v # w # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (binop f); NEXT = (f v w # os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 4. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la f NEXT v os s h ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (v # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (unop f); NEXT = (f v # os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 5. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la d newobj ah h NEXT os s ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (new d); newobj = (d, emp); ah = nextLoc h; NEXT = (RVal (Loc ah) # os, s, h[ah\<mapsto>newobj]); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 6. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la d F h ah Flds v NEXT os s ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (RVal (Loc ah) # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (getfield d F); h\<down>ah = Some (d, Flds); Flds\<down>F = Some v; NEXT = (v # os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 7. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la d F h ah Flds newobj v NEXT os s ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (v # RVal (Loc ah) # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (putfield d F); h\<down>ah = Some (d, Flds); newobj = (d, Flds[F\<mapsto>v]); NEXT = (os, s, h[ah\<mapsto>newobj]); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 8. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la d h ah Flds NEXT os s ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (RVal (Loc ah) # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (checkcast d); h\<down>ah = Some (d, Flds); NEXT = (RVal (Loc ah) # os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 9. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la pc S. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = S; n1 = 1; l1 = pc; (ad, ae, bb) = S; get_ins M la = Some (goto pc)\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 10. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la pc NEXT os s h. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (TRUE # os, s, h); n1 = 1; l1 = pc; (ad, ae, bb) = NEXT; get_ins M la = Some (iftrue pc); NEXT = (os, s, h)\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
A total of 13 subgoals...
[PROOF STEP]
apply (drule LoadElim1)
[PROOF STATE]
proof (prove)
goal (14 subgoals):
 1. \<And>n n2 l2 af ag bc ah ai bd la x s v os h. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); get_ins (ah, ai, bd) la = Some (load x); s\<down>x = Some v\<rbrakk> \<Longrightarrow> get_ins (ah, ai, bd) la = Some (load (?x270 n n2 l2 af ag bc ah ai bd la x s v os h))
 2. \<And>n n2 l2 af ag bc ah ai bd la x s v os h. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); get_ins (ah, ai, bd) la = Some (load x); s\<down>x = Some v; \<exists>va. s\<down>?x270 n n2 l2 af ag bc ah ai bd la x s v os h = Some va \<and> n2 = Suc 0 \<and> (af, ag, bc) = (va # os, s, h) \<and> l2 = la + 1\<rbrakk> \<Longrightarrow> Suc 0 = n2 \<and> v # os = af \<and> s = ag \<and> h = bc \<and> la + 1 = l2
 3. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la x NEXT os s v h ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (v # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (store x); NEXT = (os, s[x\<mapsto>v], h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 4. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la f NEXT v w os s h ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (v # w # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (binop f); NEXT = (f v w # os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 5. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la f NEXT v os s h ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (v # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (unop f); NEXT = (f v # os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 6. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la d newobj ah h NEXT os s ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (new d); newobj = (d, emp); ah = nextLoc h; NEXT = (RVal (Loc ah) # os, s, h[ah\<mapsto>newobj]); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 7. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la d F h ah Flds v NEXT os s ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (RVal (Loc ah) # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (getfield d F); h\<down>ah = Some (d, Flds); Flds\<down>F = Some v; NEXT = (v # os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 8. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la d F h ah Flds newobj v NEXT os s ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (v # RVal (Loc ah) # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (putfield d F); h\<down>ah = Some (d, Flds); newobj = (d, Flds[F\<mapsto>v]); NEXT = (os, s, h[ah\<mapsto>newobj]); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 9. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la d h ah Flds NEXT os s ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (RVal (Loc ah) # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (checkcast d); h\<down>ah = Some (d, Flds); NEXT = (RVal (Loc ah) # os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 10. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la pc S. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = S; n1 = 1; l1 = pc; (ad, ae, bb) = S; get_ins M la = Some (goto pc)\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
A total of 14 subgoals...
[PROOF STEP]
apply simp
[PROOF STATE]
proof (prove)
goal (13 subgoals):
 1. \<And>n n2 l2 af ag bc ah ai bd la x s v os h. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); get_ins (ah, ai, bd) la = Some (load x); s\<down>x = Some v; \<exists>v. s\<down>x = Some v \<and> n2 = Suc 0 \<and> (af, ag, bc) = (v # os, s, h) \<and> l2 = la + 1\<rbrakk> \<Longrightarrow> Suc 0 = n2 \<and> v # os = af \<and> s = ag \<and> h = bc \<and> la + 1 = l2
 2. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la x NEXT os s v h ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (v # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (store x); NEXT = (os, s[x\<mapsto>v], h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 3. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la f NEXT v w os s h ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (v # w # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (binop f); NEXT = (f v w # os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 4. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la f NEXT v os s h ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (v # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (unop f); NEXT = (f v # os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 5. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la d newobj ah h NEXT os s ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (new d); newobj = (d, emp); ah = nextLoc h; NEXT = (RVal (Loc ah) # os, s, h[ah\<mapsto>newobj]); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 6. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la d F h ah Flds v NEXT os s ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (RVal (Loc ah) # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (getfield d F); h\<down>ah = Some (d, Flds); Flds\<down>F = Some v; NEXT = (v # os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 7. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la d F h ah Flds newobj v NEXT os s ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (v # RVal (Loc ah) # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (putfield d F); h\<down>ah = Some (d, Flds); newobj = (d, Flds[F\<mapsto>v]); NEXT = (os, s, h[ah\<mapsto>newobj]); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 8. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la d h ah Flds NEXT os s ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (RVal (Loc ah) # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (checkcast d); h\<down>ah = Some (d, Flds); NEXT = (RVal (Loc ah) # os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 9. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la pc S. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = S; n1 = 1; l1 = pc; (ad, ae, bb) = S; get_ins M la = Some (goto pc)\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 10. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la pc NEXT os s h. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (TRUE # os, s, h); n1 = 1; l1 = pc; (ad, ae, bb) = NEXT; get_ins M la = Some (iftrue pc); NEXT = (os, s, h)\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
A total of 13 subgoals...
[PROOF STEP]
apply clarsimp
[PROOF STATE]
proof (prove)
goal (12 subgoals):
 1. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la x NEXT os s v h ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (v # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (store x); NEXT = (os, s[x\<mapsto>v], h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 2. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la f NEXT v w os s h ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (v # w # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (binop f); NEXT = (f v w # os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 3. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la f NEXT v os s h ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (v # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (unop f); NEXT = (f v # os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 4. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la d newobj ah h NEXT os s ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (new d); newobj = (d, emp); ah = nextLoc h; NEXT = (RVal (Loc ah) # os, s, h[ah\<mapsto>newobj]); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 5. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la d F h ah Flds v NEXT os s ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (RVal (Loc ah) # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (getfield d F); h\<down>ah = Some (d, Flds); Flds\<down>F = Some v; NEXT = (v # os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 6. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la d F h ah Flds newobj v NEXT os s ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (v # RVal (Loc ah) # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (putfield d F); h\<down>ah = Some (d, Flds); newobj = (d, Flds[F\<mapsto>v]); NEXT = (os, s, h[ah\<mapsto>newobj]); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 7. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la d h ah Flds NEXT os s ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (RVal (Loc ah) # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (checkcast d); h\<down>ah = Some (d, Flds); NEXT = (RVal (Loc ah) # os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 8. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la pc S. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = S; n1 = 1; l1 = pc; (ad, ae, bb) = S; get_ins M la = Some (goto pc)\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 9. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la pc NEXT os s h. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (TRUE # os, s, h); n1 = 1; l1 = pc; (ad, ae, bb) = NEXT; get_ins M la = Some (iftrue pc); NEXT = (os, s, h)\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 10. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la pc v NEXT os s h ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (v # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (iftrue pc); v \<noteq> TRUE; NEXT = (os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
A total of 12 subgoals...
[PROOF STEP]
apply clarsimp
[PROOF STATE]
proof (prove)
goal (12 subgoals):
 1. \<And>n n2 l2 af ag bc ah ai bd la x os s v h. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); ((ah, ai, bd), la, (v # os, s, h), n2, l2, af, ag, bc) \<in> Step; get_ins (ah, ai, bd) la = Some (store x)\<rbrakk> \<Longrightarrow> Suc 0 = n2 \<and> os = af \<and> s[x\<mapsto>v] = ag \<and> h = bc \<and> la + 1 = l2
 2. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la f NEXT v w os s h ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (v # w # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (binop f); NEXT = (f v w # os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 3. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la f NEXT v os s h ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (v # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (unop f); NEXT = (f v # os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 4. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la d newobj ah h NEXT os s ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (new d); newobj = (d, emp); ah = nextLoc h; NEXT = (RVal (Loc ah) # os, s, h[ah\<mapsto>newobj]); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 5. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la d F h ah Flds v NEXT os s ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (RVal (Loc ah) # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (getfield d F); h\<down>ah = Some (d, Flds); Flds\<down>F = Some v; NEXT = (v # os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 6. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la d F h ah Flds newobj v NEXT os s ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (v # RVal (Loc ah) # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (putfield d F); h\<down>ah = Some (d, Flds); newobj = (d, Flds[F\<mapsto>v]); NEXT = (os, s, h[ah\<mapsto>newobj]); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 7. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la d h ah Flds NEXT os s ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (RVal (Loc ah) # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (checkcast d); h\<down>ah = Some (d, Flds); NEXT = (RVal (Loc ah) # os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 8. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la pc S. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = S; n1 = 1; l1 = pc; (ad, ae, bb) = S; get_ins M la = Some (goto pc)\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 9. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la pc NEXT os s h. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (TRUE # os, s, h); n1 = 1; l1 = pc; (ad, ae, bb) = NEXT; get_ins M la = Some (iftrue pc); NEXT = (os, s, h)\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 10. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la pc v NEXT os s h ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (v # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (iftrue pc); v \<noteq> TRUE; NEXT = (os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
A total of 12 subgoals...
[PROOF STEP]
apply (drule StoreElim1)
[PROOF STATE]
proof (prove)
goal (13 subgoals):
 1. \<And>n n2 l2 af ag bc ah ai bd la x os s v h. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); get_ins (ah, ai, bd) la = Some (store x)\<rbrakk> \<Longrightarrow> get_ins (ah, ai, bd) la = Some (store (?x304 n n2 l2 af ag bc ah ai bd la x os s v h))
 2. \<And>n n2 l2 af ag bc ah ai bd la x os s v h. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); get_ins (ah, ai, bd) la = Some (store x); \<exists>va ops. v # os = va # ops \<and> n2 = Suc 0 \<and> (af, ag, bc) = (ops, s[?x304 n n2 l2 af ag bc ah ai bd la x os s v h\<mapsto>va], h) \<and> l2 = la + 1\<rbrakk> \<Longrightarrow> Suc 0 = n2 \<and> os = af \<and> s[x\<mapsto>v] = ag \<and> h = bc \<and> la + 1 = l2
 3. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la f NEXT v w os s h ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (v # w # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (binop f); NEXT = (f v w # os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 4. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la f NEXT v os s h ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (v # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (unop f); NEXT = (f v # os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 5. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la d newobj ah h NEXT os s ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (new d); newobj = (d, emp); ah = nextLoc h; NEXT = (RVal (Loc ah) # os, s, h[ah\<mapsto>newobj]); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 6. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la d F h ah Flds v NEXT os s ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (RVal (Loc ah) # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (getfield d F); h\<down>ah = Some (d, Flds); Flds\<down>F = Some v; NEXT = (v # os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 7. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la d F h ah Flds newobj v NEXT os s ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (v # RVal (Loc ah) # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (putfield d F); h\<down>ah = Some (d, Flds); newobj = (d, Flds[F\<mapsto>v]); NEXT = (os, s, h[ah\<mapsto>newobj]); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 8. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la d h ah Flds NEXT os s ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (RVal (Loc ah) # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (checkcast d); h\<down>ah = Some (d, Flds); NEXT = (RVal (Loc ah) # os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 9. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la pc S. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = S; n1 = 1; l1 = pc; (ad, ae, bb) = S; get_ins M la = Some (goto pc)\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 10. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la pc NEXT os s h. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (TRUE # os, s, h); n1 = 1; l1 = pc; (ad, ae, bb) = NEXT; get_ins M la = Some (iftrue pc); NEXT = (os, s, h)\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
A total of 13 subgoals...
[PROOF STEP]
apply simp
[PROOF STATE]
proof (prove)
goal (12 subgoals):
 1. \<And>n n2 l2 af ag bc ah ai bd la x os s v h. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); get_ins (ah, ai, bd) la = Some (store x); \<exists>va ops. v # os = va # ops \<and> n2 = Suc 0 \<and> (af, ag, bc) = (ops, s[x\<mapsto>va], h) \<and> l2 = la + 1\<rbrakk> \<Longrightarrow> Suc 0 = n2 \<and> os = af \<and> s[x\<mapsto>v] = ag \<and> h = bc \<and> la + 1 = l2
 2. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la f NEXT v w os s h ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (v # w # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (binop f); NEXT = (f v w # os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 3. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la f NEXT v os s h ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (v # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (unop f); NEXT = (f v # os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 4. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la d newobj ah h NEXT os s ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (new d); newobj = (d, emp); ah = nextLoc h; NEXT = (RVal (Loc ah) # os, s, h[ah\<mapsto>newobj]); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 5. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la d F h ah Flds v NEXT os s ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (RVal (Loc ah) # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (getfield d F); h\<down>ah = Some (d, Flds); Flds\<down>F = Some v; NEXT = (v # os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 6. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la d F h ah Flds newobj v NEXT os s ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (v # RVal (Loc ah) # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (putfield d F); h\<down>ah = Some (d, Flds); newobj = (d, Flds[F\<mapsto>v]); NEXT = (os, s, h[ah\<mapsto>newobj]); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 7. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la d h ah Flds NEXT os s ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (RVal (Loc ah) # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (checkcast d); h\<down>ah = Some (d, Flds); NEXT = (RVal (Loc ah) # os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 8. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la pc S. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = S; n1 = 1; l1 = pc; (ad, ae, bb) = S; get_ins M la = Some (goto pc)\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 9. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la pc NEXT os s h. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (TRUE # os, s, h); n1 = 1; l1 = pc; (ad, ae, bb) = NEXT; get_ins M la = Some (iftrue pc); NEXT = (os, s, h)\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 10. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la pc v NEXT os s h ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (v # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (iftrue pc); v \<noteq> TRUE; NEXT = (os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
A total of 12 subgoals...
[PROOF STEP]
apply clarsimp
[PROOF STATE]
proof (prove)
goal (11 subgoals):
 1. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la f NEXT v w os s h ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (v # w # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (binop f); NEXT = (f v w # os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 2. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la f NEXT v os s h ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (v # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (unop f); NEXT = (f v # os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 3. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la d newobj ah h NEXT os s ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (new d); newobj = (d, emp); ah = nextLoc h; NEXT = (RVal (Loc ah) # os, s, h[ah\<mapsto>newobj]); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 4. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la d F h ah Flds v NEXT os s ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (RVal (Loc ah) # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (getfield d F); h\<down>ah = Some (d, Flds); Flds\<down>F = Some v; NEXT = (v # os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 5. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la d F h ah Flds newobj v NEXT os s ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (v # RVal (Loc ah) # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (putfield d F); h\<down>ah = Some (d, Flds); newobj = (d, Flds[F\<mapsto>v]); NEXT = (os, s, h[ah\<mapsto>newobj]); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 6. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la d h ah Flds NEXT os s ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (RVal (Loc ah) # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (checkcast d); h\<down>ah = Some (d, Flds); NEXT = (RVal (Loc ah) # os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 7. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la pc S. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = S; n1 = 1; l1 = pc; (ad, ae, bb) = S; get_ins M la = Some (goto pc)\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 8. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la pc NEXT os s h. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (TRUE # os, s, h); n1 = 1; l1 = pc; (ad, ae, bb) = NEXT; get_ins M la = Some (iftrue pc); NEXT = (os, s, h)\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 9. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la pc v NEXT os s h ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (v # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (iftrue pc); v \<noteq> TRUE; NEXT = (os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 10. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la C m par code l0 S h na hh v ops os NEXT s ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (ops, s, h); n1 = Suc na; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (invokeS C m); mbody_is C m (par, code, l0); ((par, code, l0), l0, ([], S, h), na, hh, v) \<in> Exec; (ops, par, S, os) \<in> Frame; NEXT = (v # os, s, hh); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
A total of 11 subgoals...
[PROOF STEP]
apply clarsimp
[PROOF STATE]
proof (prove)
goal (11 subgoals):
 1. \<And>n n2 l2 af ag bc ah ai bd la f v w os s h. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); ((ah, ai, bd), la, (v # w # os, s, h), n2, l2, af, ag, bc) \<in> Step; get_ins (ah, ai, bd) la = Some (binop f)\<rbrakk> \<Longrightarrow> Suc 0 = n2 \<and> f v w # os = af \<and> s = ag \<and> h = bc \<and> la + 1 = l2
 2. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la f NEXT v os s h ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (v # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (unop f); NEXT = (f v # os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 3. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la d newobj ah h NEXT os s ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (new d); newobj = (d, emp); ah = nextLoc h; NEXT = (RVal (Loc ah) # os, s, h[ah\<mapsto>newobj]); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 4. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la d F h ah Flds v NEXT os s ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (RVal (Loc ah) # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (getfield d F); h\<down>ah = Some (d, Flds); Flds\<down>F = Some v; NEXT = (v # os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 5. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la d F h ah Flds newobj v NEXT os s ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (v # RVal (Loc ah) # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (putfield d F); h\<down>ah = Some (d, Flds); newobj = (d, Flds[F\<mapsto>v]); NEXT = (os, s, h[ah\<mapsto>newobj]); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 6. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la d h ah Flds NEXT os s ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (RVal (Loc ah) # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (checkcast d); h\<down>ah = Some (d, Flds); NEXT = (RVal (Loc ah) # os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 7. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la pc S. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = S; n1 = 1; l1 = pc; (ad, ae, bb) = S; get_ins M la = Some (goto pc)\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 8. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la pc NEXT os s h. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (TRUE # os, s, h); n1 = 1; l1 = pc; (ad, ae, bb) = NEXT; get_ins M la = Some (iftrue pc); NEXT = (os, s, h)\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 9. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la pc v NEXT os s h ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (v # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (iftrue pc); v \<noteq> TRUE; NEXT = (os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 10. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la C m par code l0 S h na hh v ops os NEXT s ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (ops, s, h); n1 = Suc na; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (invokeS C m); mbody_is C m (par, code, l0); ((par, code, l0), l0, ([], S, h), na, hh, v) \<in> Exec; (ops, par, S, os) \<in> Frame; NEXT = (v # os, s, hh); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
A total of 11 subgoals...
[PROOF STEP]
apply (drule BinopElim1)
[PROOF STATE]
proof (prove)
goal (12 subgoals):
 1. \<And>n n2 l2 af ag bc ah ai bd la f v w os s h. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); get_ins (ah, ai, bd) la = Some (binop f)\<rbrakk> \<Longrightarrow> get_ins (ah, ai, bd) la = Some (binop (?f338 n n2 l2 af ag bc ah ai bd la f v w os s h))
 2. \<And>n n2 l2 af ag bc ah ai bd la f v w os s h. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); get_ins (ah, ai, bd) la = Some (binop f); \<exists>va wa ops. v # w # os = va # wa # ops \<and> n2 = Suc 0 \<and> (af, ag, bc) = (?f338 n n2 l2 af ag bc ah ai bd la f v w os s h va wa # ops, s, h) \<and> l2 = la + 1\<rbrakk> \<Longrightarrow> Suc 0 = n2 \<and> f v w # os = af \<and> s = ag \<and> h = bc \<and> la + 1 = l2
 3. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la f NEXT v os s h ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (v # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (unop f); NEXT = (f v # os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 4. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la d newobj ah h NEXT os s ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (new d); newobj = (d, emp); ah = nextLoc h; NEXT = (RVal (Loc ah) # os, s, h[ah\<mapsto>newobj]); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 5. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la d F h ah Flds v NEXT os s ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (RVal (Loc ah) # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (getfield d F); h\<down>ah = Some (d, Flds); Flds\<down>F = Some v; NEXT = (v # os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 6. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la d F h ah Flds newobj v NEXT os s ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (v # RVal (Loc ah) # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (putfield d F); h\<down>ah = Some (d, Flds); newobj = (d, Flds[F\<mapsto>v]); NEXT = (os, s, h[ah\<mapsto>newobj]); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 7. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la d h ah Flds NEXT os s ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (RVal (Loc ah) # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (checkcast d); h\<down>ah = Some (d, Flds); NEXT = (RVal (Loc ah) # os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 8. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la pc S. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = S; n1 = 1; l1 = pc; (ad, ae, bb) = S; get_ins M la = Some (goto pc)\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 9. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la pc NEXT os s h. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (TRUE # os, s, h); n1 = 1; l1 = pc; (ad, ae, bb) = NEXT; get_ins M la = Some (iftrue pc); NEXT = (os, s, h)\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 10. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la pc v NEXT os s h ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (v # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (iftrue pc); v \<noteq> TRUE; NEXT = (os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
A total of 12 subgoals...
[PROOF STEP]
apply simp
[PROOF STATE]
proof (prove)
goal (11 subgoals):
 1. \<And>n n2 l2 af ag bc ah ai bd la f v w os s h. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); get_ins (ah, ai, bd) la = Some (binop f); \<exists>va wa ops. v # w # os = va # wa # ops \<and> n2 = Suc 0 \<and> (af, ag, bc) = (f va wa # ops, s, h) \<and> l2 = la + 1\<rbrakk> \<Longrightarrow> Suc 0 = n2 \<and> f v w # os = af \<and> s = ag \<and> h = bc \<and> la + 1 = l2
 2. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la f NEXT v os s h ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (v # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (unop f); NEXT = (f v # os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 3. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la d newobj ah h NEXT os s ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (new d); newobj = (d, emp); ah = nextLoc h; NEXT = (RVal (Loc ah) # os, s, h[ah\<mapsto>newobj]); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 4. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la d F h ah Flds v NEXT os s ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (RVal (Loc ah) # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (getfield d F); h\<down>ah = Some (d, Flds); Flds\<down>F = Some v; NEXT = (v # os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 5. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la d F h ah Flds newobj v NEXT os s ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (v # RVal (Loc ah) # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (putfield d F); h\<down>ah = Some (d, Flds); newobj = (d, Flds[F\<mapsto>v]); NEXT = (os, s, h[ah\<mapsto>newobj]); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 6. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la d h ah Flds NEXT os s ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (RVal (Loc ah) # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (checkcast d); h\<down>ah = Some (d, Flds); NEXT = (RVal (Loc ah) # os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 7. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la pc S. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = S; n1 = 1; l1 = pc; (ad, ae, bb) = S; get_ins M la = Some (goto pc)\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 8. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la pc NEXT os s h. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (TRUE # os, s, h); n1 = 1; l1 = pc; (ad, ae, bb) = NEXT; get_ins M la = Some (iftrue pc); NEXT = (os, s, h)\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 9. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la pc v NEXT os s h ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (v # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (iftrue pc); v \<noteq> TRUE; NEXT = (os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 10. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la C m par code l0 S h na hh v ops os NEXT s ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (ops, s, h); n1 = Suc na; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (invokeS C m); mbody_is C m (par, code, l0); ((par, code, l0), l0, ([], S, h), na, hh, v) \<in> Exec; (ops, par, S, os) \<in> Frame; NEXT = (v # os, s, hh); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
A total of 11 subgoals...
[PROOF STEP]
apply clarsimp
[PROOF STATE]
proof (prove)
goal (10 subgoals):
 1. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la f NEXT v os s h ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (v # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (unop f); NEXT = (f v # os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 2. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la d newobj ah h NEXT os s ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (new d); newobj = (d, emp); ah = nextLoc h; NEXT = (RVal (Loc ah) # os, s, h[ah\<mapsto>newobj]); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 3. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la d F h ah Flds v NEXT os s ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (RVal (Loc ah) # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (getfield d F); h\<down>ah = Some (d, Flds); Flds\<down>F = Some v; NEXT = (v # os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 4. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la d F h ah Flds newobj v NEXT os s ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (v # RVal (Loc ah) # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (putfield d F); h\<down>ah = Some (d, Flds); newobj = (d, Flds[F\<mapsto>v]); NEXT = (os, s, h[ah\<mapsto>newobj]); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 5. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la d h ah Flds NEXT os s ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (RVal (Loc ah) # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (checkcast d); h\<down>ah = Some (d, Flds); NEXT = (RVal (Loc ah) # os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 6. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la pc S. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = S; n1 = 1; l1 = pc; (ad, ae, bb) = S; get_ins M la = Some (goto pc)\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 7. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la pc NEXT os s h. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (TRUE # os, s, h); n1 = 1; l1 = pc; (ad, ae, bb) = NEXT; get_ins M la = Some (iftrue pc); NEXT = (os, s, h)\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 8. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la pc v NEXT os s h ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (v # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (iftrue pc); v \<noteq> TRUE; NEXT = (os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 9. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la C m par code l0 S h na hh v ops os NEXT s ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (ops, s, h); n1 = Suc na; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (invokeS C m); mbody_is C m (par, code, l0); ((par, code, l0), l0, ([], S, h), na, hh, v) \<in> Exec; (ops, par, S, os) \<in> Frame; NEXT = (v # os, s, hh); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 10. \<And>n. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w)\<rbrakk> \<Longrightarrow> \<forall>n1\<le>Suc n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w)
[PROOF STEP]
apply clarsimp
[PROOF STATE]
proof (prove)
goal (10 subgoals):
 1. \<And>n n2 l2 af ag bc ah ai bd la f v os s h. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); ((ah, ai, bd), la, (v # os, s, h), n2, l2, af, ag, bc) \<in> Step; get_ins (ah, ai, bd) la = Some (unop f)\<rbrakk> \<Longrightarrow> Suc 0 = n2 \<and> f v # os = af \<and> s = ag \<and> h = bc \<and> la + 1 = l2
 2. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la d newobj ah h NEXT os s ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (new d); newobj = (d, emp); ah = nextLoc h; NEXT = (RVal (Loc ah) # os, s, h[ah\<mapsto>newobj]); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 3. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la d F h ah Flds v NEXT os s ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (RVal (Loc ah) # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (getfield d F); h\<down>ah = Some (d, Flds); Flds\<down>F = Some v; NEXT = (v # os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 4. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la d F h ah Flds newobj v NEXT os s ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (v # RVal (Loc ah) # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (putfield d F); h\<down>ah = Some (d, Flds); newobj = (d, Flds[F\<mapsto>v]); NEXT = (os, s, h[ah\<mapsto>newobj]); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 5. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la d h ah Flds NEXT os s ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (RVal (Loc ah) # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (checkcast d); h\<down>ah = Some (d, Flds); NEXT = (RVal (Loc ah) # os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 6. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la pc S. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = S; n1 = 1; l1 = pc; (ad, ae, bb) = S; get_ins M la = Some (goto pc)\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 7. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la pc NEXT os s h. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (TRUE # os, s, h); n1 = 1; l1 = pc; (ad, ae, bb) = NEXT; get_ins M la = Some (iftrue pc); NEXT = (os, s, h)\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 8. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la pc v NEXT os s h ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (v # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (iftrue pc); v \<noteq> TRUE; NEXT = (os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 9. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la C m par code l0 S h na hh v ops os NEXT s ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (ops, s, h); n1 = Suc na; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (invokeS C m); mbody_is C m (par, code, l0); ((par, code, l0), l0, ([], S, h), na, hh, v) \<in> Exec; (ops, par, S, os) \<in> Frame; NEXT = (v # os, s, hh); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 10. \<And>n. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w)\<rbrakk> \<Longrightarrow> \<forall>n1\<le>Suc n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w)
[PROOF STEP]
apply (drule UnopElim1)
[PROOF STATE]
proof (prove)
goal (11 subgoals):
 1. \<And>n n2 l2 af ag bc ah ai bd la f v os s h. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); get_ins (ah, ai, bd) la = Some (unop f)\<rbrakk> \<Longrightarrow> get_ins (ah, ai, bd) la = Some (unop (?f372 n n2 l2 af ag bc ah ai bd la f v os s h))
 2. \<And>n n2 l2 af ag bc ah ai bd la f v os s h. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); get_ins (ah, ai, bd) la = Some (unop f); \<exists>va ops. v # os = va # ops \<and> n2 = Suc 0 \<and> (af, ag, bc) = (?f372 n n2 l2 af ag bc ah ai bd la f v os s h va # ops, s, h) \<and> l2 = la + 1\<rbrakk> \<Longrightarrow> Suc 0 = n2 \<and> f v # os = af \<and> s = ag \<and> h = bc \<and> la + 1 = l2
 3. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la d newobj ah h NEXT os s ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (new d); newobj = (d, emp); ah = nextLoc h; NEXT = (RVal (Loc ah) # os, s, h[ah\<mapsto>newobj]); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 4. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la d F h ah Flds v NEXT os s ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (RVal (Loc ah) # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (getfield d F); h\<down>ah = Some (d, Flds); Flds\<down>F = Some v; NEXT = (v # os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 5. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la d F h ah Flds newobj v NEXT os s ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (v # RVal (Loc ah) # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (putfield d F); h\<down>ah = Some (d, Flds); newobj = (d, Flds[F\<mapsto>v]); NEXT = (os, s, h[ah\<mapsto>newobj]); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 6. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la d h ah Flds NEXT os s ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (RVal (Loc ah) # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (checkcast d); h\<down>ah = Some (d, Flds); NEXT = (RVal (Loc ah) # os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 7. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la pc S. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = S; n1 = 1; l1 = pc; (ad, ae, bb) = S; get_ins M la = Some (goto pc)\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 8. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la pc NEXT os s h. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (TRUE # os, s, h); n1 = 1; l1 = pc; (ad, ae, bb) = NEXT; get_ins M la = Some (iftrue pc); NEXT = (os, s, h)\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 9. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la pc v NEXT os s h ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (v # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (iftrue pc); v \<noteq> TRUE; NEXT = (os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 10. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la C m par code l0 S h na hh v ops os NEXT s ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (ops, s, h); n1 = Suc na; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (invokeS C m); mbody_is C m (par, code, l0); ((par, code, l0), l0, ([], S, h), na, hh, v) \<in> Exec; (ops, par, S, os) \<in> Frame; NEXT = (v # os, s, hh); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
A total of 11 subgoals...
[PROOF STEP]
apply simp
[PROOF STATE]
proof (prove)
goal (10 subgoals):
 1. \<And>n n2 l2 af ag bc ah ai bd la f v os s h. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); get_ins (ah, ai, bd) la = Some (unop f); \<exists>va ops. v # os = va # ops \<and> n2 = Suc 0 \<and> (af, ag, bc) = (f va # ops, s, h) \<and> l2 = la + 1\<rbrakk> \<Longrightarrow> Suc 0 = n2 \<and> f v # os = af \<and> s = ag \<and> h = bc \<and> la + 1 = l2
 2. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la d newobj ah h NEXT os s ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (new d); newobj = (d, emp); ah = nextLoc h; NEXT = (RVal (Loc ah) # os, s, h[ah\<mapsto>newobj]); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 3. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la d F h ah Flds v NEXT os s ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (RVal (Loc ah) # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (getfield d F); h\<down>ah = Some (d, Flds); Flds\<down>F = Some v; NEXT = (v # os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 4. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la d F h ah Flds newobj v NEXT os s ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (v # RVal (Loc ah) # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (putfield d F); h\<down>ah = Some (d, Flds); newobj = (d, Flds[F\<mapsto>v]); NEXT = (os, s, h[ah\<mapsto>newobj]); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 5. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la d h ah Flds NEXT os s ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (RVal (Loc ah) # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (checkcast d); h\<down>ah = Some (d, Flds); NEXT = (RVal (Loc ah) # os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 6. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la pc S. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = S; n1 = 1; l1 = pc; (ad, ae, bb) = S; get_ins M la = Some (goto pc)\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 7. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la pc NEXT os s h. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (TRUE # os, s, h); n1 = 1; l1 = pc; (ad, ae, bb) = NEXT; get_ins M la = Some (iftrue pc); NEXT = (os, s, h)\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 8. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la pc v NEXT os s h ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (v # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (iftrue pc); v \<noteq> TRUE; NEXT = (os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 9. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la C m par code l0 S h na hh v ops os NEXT s ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (ops, s, h); n1 = Suc na; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (invokeS C m); mbody_is C m (par, code, l0); ((par, code, l0), l0, ([], S, h), na, hh, v) \<in> Exec; (ops, par, S, os) \<in> Frame; NEXT = (v # os, s, hh); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 10. \<And>n. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w)\<rbrakk> \<Longrightarrow> \<forall>n1\<le>Suc n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w)
[PROOF STEP]
apply clarsimp
[PROOF STATE]
proof (prove)
goal (9 subgoals):
 1. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la d newobj ah h NEXT os s ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (new d); newobj = (d, emp); ah = nextLoc h; NEXT = (RVal (Loc ah) # os, s, h[ah\<mapsto>newobj]); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 2. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la d F h ah Flds v NEXT os s ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (RVal (Loc ah) # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (getfield d F); h\<down>ah = Some (d, Flds); Flds\<down>F = Some v; NEXT = (v # os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 3. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la d F h ah Flds newobj v NEXT os s ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (v # RVal (Loc ah) # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (putfield d F); h\<down>ah = Some (d, Flds); newobj = (d, Flds[F\<mapsto>v]); NEXT = (os, s, h[ah\<mapsto>newobj]); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 4. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la d h ah Flds NEXT os s ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (RVal (Loc ah) # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (checkcast d); h\<down>ah = Some (d, Flds); NEXT = (RVal (Loc ah) # os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 5. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la pc S. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = S; n1 = 1; l1 = pc; (ad, ae, bb) = S; get_ins M la = Some (goto pc)\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 6. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la pc NEXT os s h. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (TRUE # os, s, h); n1 = 1; l1 = pc; (ad, ae, bb) = NEXT; get_ins M la = Some (iftrue pc); NEXT = (os, s, h)\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 7. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la pc v NEXT os s h ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (v # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (iftrue pc); v \<noteq> TRUE; NEXT = (os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 8. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la C m par code l0 S h na hh v ops os NEXT s ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (ops, s, h); n1 = Suc na; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (invokeS C m); mbody_is C m (par, code, l0); ((par, code, l0), l0, ([], S, h), na, hh, v) \<in> Exec; (ops, par, S, os) \<in> Frame; NEXT = (v # os, s, hh); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 9. \<And>n. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w)\<rbrakk> \<Longrightarrow> \<forall>n1\<le>Suc n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w)
[PROOF STEP]
apply clarsimp
[PROOF STATE]
proof (prove)
goal (9 subgoals):
 1. \<And>n n2 l2 af ag bc ah ai bd la d h os s. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); ((ah, ai, bd), la, (os, s, h), n2, l2, af, ag, bc) \<in> Step; get_ins (ah, ai, bd) la = Some (new d)\<rbrakk> \<Longrightarrow> Suc 0 = n2 \<and> RVal (Loc (nextLoc h)) # os = af \<and> s = ag \<and> h[nextLoc h\<mapsto>(d, emp)] = bc \<and> la + 1 = l2
 2. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la d F h ah Flds v NEXT os s ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (RVal (Loc ah) # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (getfield d F); h\<down>ah = Some (d, Flds); Flds\<down>F = Some v; NEXT = (v # os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 3. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la d F h ah Flds newobj v NEXT os s ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (v # RVal (Loc ah) # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (putfield d F); h\<down>ah = Some (d, Flds); newobj = (d, Flds[F\<mapsto>v]); NEXT = (os, s, h[ah\<mapsto>newobj]); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 4. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la d h ah Flds NEXT os s ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (RVal (Loc ah) # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (checkcast d); h\<down>ah = Some (d, Flds); NEXT = (RVal (Loc ah) # os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 5. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la pc S. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = S; n1 = 1; l1 = pc; (ad, ae, bb) = S; get_ins M la = Some (goto pc)\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 6. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la pc NEXT os s h. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (TRUE # os, s, h); n1 = 1; l1 = pc; (ad, ae, bb) = NEXT; get_ins M la = Some (iftrue pc); NEXT = (os, s, h)\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 7. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la pc v NEXT os s h ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (v # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (iftrue pc); v \<noteq> TRUE; NEXT = (os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 8. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la C m par code l0 S h na hh v ops os NEXT s ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (ops, s, h); n1 = Suc na; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (invokeS C m); mbody_is C m (par, code, l0); ((par, code, l0), l0, ([], S, h), na, hh, v) \<in> Exec; (ops, par, S, os) \<in> Frame; NEXT = (v # os, s, hh); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 9. \<And>n. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w)\<rbrakk> \<Longrightarrow> \<forall>n1\<le>Suc n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w)
[PROOF STEP]
apply (drule NewElim1)
[PROOF STATE]
proof (prove)
goal (10 subgoals):
 1. \<And>n n2 l2 af ag bc ah ai bd la d h os s. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); get_ins (ah, ai, bd) la = Some (new d)\<rbrakk> \<Longrightarrow> get_ins (ah, ai, bd) la = Some (new (?d411 n n2 l2 af ag bc ah ai bd la d h os s))
 2. \<And>n n2 l2 af ag bc ah ai bd la d h os s. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); get_ins (ah, ai, bd) la = Some (new d); \<exists>a. a = nextLoc h \<and> n2 = Suc 0 \<and> (af, ag, bc) = (RVal (Loc a) # os, s, h[a\<mapsto>(?d411 n n2 l2 af ag bc ah ai bd la d h os s, emp)]) \<and> l2 = la + 1\<rbrakk> \<Longrightarrow> Suc 0 = n2 \<and> RVal (Loc (nextLoc h)) # os = af \<and> s = ag \<and> h[nextLoc h\<mapsto>(d, emp)] = bc \<and> la + 1 = l2
 3. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la d F h ah Flds v NEXT os s ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (RVal (Loc ah) # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (getfield d F); h\<down>ah = Some (d, Flds); Flds\<down>F = Some v; NEXT = (v # os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 4. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la d F h ah Flds newobj v NEXT os s ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (v # RVal (Loc ah) # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (putfield d F); h\<down>ah = Some (d, Flds); newobj = (d, Flds[F\<mapsto>v]); NEXT = (os, s, h[ah\<mapsto>newobj]); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 5. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la d h ah Flds NEXT os s ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (RVal (Loc ah) # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (checkcast d); h\<down>ah = Some (d, Flds); NEXT = (RVal (Loc ah) # os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 6. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la pc S. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = S; n1 = 1; l1 = pc; (ad, ae, bb) = S; get_ins M la = Some (goto pc)\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 7. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la pc NEXT os s h. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (TRUE # os, s, h); n1 = 1; l1 = pc; (ad, ae, bb) = NEXT; get_ins M la = Some (iftrue pc); NEXT = (os, s, h)\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 8. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la pc v NEXT os s h ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (v # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (iftrue pc); v \<noteq> TRUE; NEXT = (os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 9. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la C m par code l0 S h na hh v ops os NEXT s ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (ops, s, h); n1 = Suc na; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (invokeS C m); mbody_is C m (par, code, l0); ((par, code, l0), l0, ([], S, h), na, hh, v) \<in> Exec; (ops, par, S, os) \<in> Frame; NEXT = (v # os, s, hh); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 10. \<And>n. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w)\<rbrakk> \<Longrightarrow> \<forall>n1\<le>Suc n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w)
[PROOF STEP]
apply simp
[PROOF STATE]
proof (prove)
goal (9 subgoals):
 1. \<And>n n2 l2 af ag bc ah ai bd la d h os s. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); get_ins (ah, ai, bd) la = Some (new d); \<exists>a. a = nextLoc h \<and> n2 = Suc 0 \<and> (af, ag, bc) = (RVal (Loc a) # os, s, h[a\<mapsto>(d, emp)]) \<and> l2 = la + 1\<rbrakk> \<Longrightarrow> Suc 0 = n2 \<and> RVal (Loc (nextLoc h)) # os = af \<and> s = ag \<and> h[nextLoc h\<mapsto>(d, emp)] = bc \<and> la + 1 = l2
 2. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la d F h ah Flds v NEXT os s ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (RVal (Loc ah) # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (getfield d F); h\<down>ah = Some (d, Flds); Flds\<down>F = Some v; NEXT = (v # os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 3. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la d F h ah Flds newobj v NEXT os s ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (v # RVal (Loc ah) # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (putfield d F); h\<down>ah = Some (d, Flds); newobj = (d, Flds[F\<mapsto>v]); NEXT = (os, s, h[ah\<mapsto>newobj]); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 4. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la d h ah Flds NEXT os s ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (RVal (Loc ah) # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (checkcast d); h\<down>ah = Some (d, Flds); NEXT = (RVal (Loc ah) # os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 5. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la pc S. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = S; n1 = 1; l1 = pc; (ad, ae, bb) = S; get_ins M la = Some (goto pc)\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 6. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la pc NEXT os s h. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (TRUE # os, s, h); n1 = 1; l1 = pc; (ad, ae, bb) = NEXT; get_ins M la = Some (iftrue pc); NEXT = (os, s, h)\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 7. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la pc v NEXT os s h ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (v # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (iftrue pc); v \<noteq> TRUE; NEXT = (os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 8. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la C m par code l0 S h na hh v ops os NEXT s ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (ops, s, h); n1 = Suc na; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (invokeS C m); mbody_is C m (par, code, l0); ((par, code, l0), l0, ([], S, h), na, hh, v) \<in> Exec; (ops, par, S, os) \<in> Frame; NEXT = (v # os, s, hh); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 9. \<And>n. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w)\<rbrakk> \<Longrightarrow> \<forall>n1\<le>Suc n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w)
[PROOF STEP]
apply clarsimp
[PROOF STATE]
proof (prove)
goal (8 subgoals):
 1. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la d F h ah Flds v NEXT os s ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (RVal (Loc ah) # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (getfield d F); h\<down>ah = Some (d, Flds); Flds\<down>F = Some v; NEXT = (v # os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 2. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la d F h ah Flds newobj v NEXT os s ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (v # RVal (Loc ah) # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (putfield d F); h\<down>ah = Some (d, Flds); newobj = (d, Flds[F\<mapsto>v]); NEXT = (os, s, h[ah\<mapsto>newobj]); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 3. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la d h ah Flds NEXT os s ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (RVal (Loc ah) # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (checkcast d); h\<down>ah = Some (d, Flds); NEXT = (RVal (Loc ah) # os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 4. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la pc S. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = S; n1 = 1; l1 = pc; (ad, ae, bb) = S; get_ins M la = Some (goto pc)\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 5. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la pc NEXT os s h. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (TRUE # os, s, h); n1 = 1; l1 = pc; (ad, ae, bb) = NEXT; get_ins M la = Some (iftrue pc); NEXT = (os, s, h)\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 6. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la pc v NEXT os s h ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (v # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (iftrue pc); v \<noteq> TRUE; NEXT = (os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 7. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la C m par code l0 S h na hh v ops os NEXT s ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (ops, s, h); n1 = Suc na; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (invokeS C m); mbody_is C m (par, code, l0); ((par, code, l0), l0, ([], S, h), na, hh, v) \<in> Exec; (ops, par, S, os) \<in> Frame; NEXT = (v # os, s, hh); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 8. \<And>n. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w)\<rbrakk> \<Longrightarrow> \<forall>n1\<le>Suc n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w)
[PROOF STEP]
apply clarsimp
[PROOF STATE]
proof (prove)
goal (8 subgoals):
 1. \<And>n n2 l2 af ag bc ah ai bd la d F h aha Flds v os s. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); ((ah, ai, bd), la, (RVal (Loc aha) # os, s, h), n2, l2, af, ag, bc) \<in> Step; get_ins (ah, ai, bd) la = Some (getfield d F); h\<down>aha = Some (d, Flds); Flds\<down>F = Some v\<rbrakk> \<Longrightarrow> Suc 0 = n2 \<and> v # os = af \<and> s = ag \<and> h = bc \<and> la + 1 = l2
 2. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la d F h ah Flds newobj v NEXT os s ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (v # RVal (Loc ah) # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (putfield d F); h\<down>ah = Some (d, Flds); newobj = (d, Flds[F\<mapsto>v]); NEXT = (os, s, h[ah\<mapsto>newobj]); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 3. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la d h ah Flds NEXT os s ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (RVal (Loc ah) # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (checkcast d); h\<down>ah = Some (d, Flds); NEXT = (RVal (Loc ah) # os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 4. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la pc S. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = S; n1 = 1; l1 = pc; (ad, ae, bb) = S; get_ins M la = Some (goto pc)\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 5. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la pc NEXT os s h. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (TRUE # os, s, h); n1 = 1; l1 = pc; (ad, ae, bb) = NEXT; get_ins M la = Some (iftrue pc); NEXT = (os, s, h)\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 6. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la pc v NEXT os s h ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (v # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (iftrue pc); v \<noteq> TRUE; NEXT = (os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 7. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la C m par code l0 S h na hh v ops os NEXT s ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (ops, s, h); n1 = Suc na; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (invokeS C m); mbody_is C m (par, code, l0); ((par, code, l0), l0, ([], S, h), na, hh, v) \<in> Exec; (ops, par, S, os) \<in> Frame; NEXT = (v # os, s, hh); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 8. \<And>n. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w)\<rbrakk> \<Longrightarrow> \<forall>n1\<le>Suc n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w)
[PROOF STEP]
apply (drule GetElim1)
[PROOF STATE]
proof (prove)
goal (9 subgoals):
 1. \<And>n n2 l2 af ag bc ah ai bd la d F h aha Flds v os s. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); get_ins (ah, ai, bd) la = Some (getfield d F); h\<down>aha = Some (d, Flds); Flds\<down>F = Some v\<rbrakk> \<Longrightarrow> get_ins (ah, ai, bd) la = Some (getfield (?d445 n n2 l2 af ag bc ah ai bd la d F h aha Flds v os s) (?F445 n n2 l2 af ag bc ah ai bd la d F h aha Flds v os s))
 2. \<And>n n2 l2 af ag bc ah ai bd la d F h aha Flds v os s. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); get_ins (ah, ai, bd) la = Some (getfield d F); h\<down>aha = Some (d, Flds); Flds\<down>F = Some v; \<exists>a Fldsa va ops. h\<down>a = Some (?d445 n n2 l2 af ag bc ah ai bd la d F h aha Flds v os s, Fldsa) \<and> Fldsa\<down>?F445 n n2 l2 af ag bc ah ai bd la d F h aha Flds v os s = Some va \<and> RVal (Loc aha) # os = RVal (Loc a) # ops \<and> n2 = Suc 0 \<and> (af, ag, bc) = (va # ops, s, h) \<and> l2 = la + 1\<rbrakk> \<Longrightarrow> Suc 0 = n2 \<and> v # os = af \<and> s = ag \<and> h = bc \<and> la + 1 = l2
 3. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la d F h ah Flds newobj v NEXT os s ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (v # RVal (Loc ah) # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (putfield d F); h\<down>ah = Some (d, Flds); newobj = (d, Flds[F\<mapsto>v]); NEXT = (os, s, h[ah\<mapsto>newobj]); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 4. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la d h ah Flds NEXT os s ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (RVal (Loc ah) # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (checkcast d); h\<down>ah = Some (d, Flds); NEXT = (RVal (Loc ah) # os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 5. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la pc S. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = S; n1 = 1; l1 = pc; (ad, ae, bb) = S; get_ins M la = Some (goto pc)\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 6. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la pc NEXT os s h. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (TRUE # os, s, h); n1 = 1; l1 = pc; (ad, ae, bb) = NEXT; get_ins M la = Some (iftrue pc); NEXT = (os, s, h)\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 7. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la pc v NEXT os s h ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (v # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (iftrue pc); v \<noteq> TRUE; NEXT = (os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 8. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la C m par code l0 S h na hh v ops os NEXT s ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (ops, s, h); n1 = Suc na; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (invokeS C m); mbody_is C m (par, code, l0); ((par, code, l0), l0, ([], S, h), na, hh, v) \<in> Exec; (ops, par, S, os) \<in> Frame; NEXT = (v # os, s, hh); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 9. \<And>n. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w)\<rbrakk> \<Longrightarrow> \<forall>n1\<le>Suc n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w)
[PROOF STEP]
apply fastforce
[PROOF STATE]
proof (prove)
goal (8 subgoals):
 1. \<And>n n2 l2 af ag bc ah ai bd la d F h aha Flds v os s. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); get_ins (ah, ai, bd) la = Some (getfield d F); h\<down>aha = Some (d, Flds); Flds\<down>F = Some v; \<exists>a Flds v ops. h\<down>a = Some (d, Flds) \<and> Flds\<down>F = Some v \<and> RVal (Loc aha) # os = RVal (Loc a) # ops \<and> n2 = Suc 0 \<and> (af, ag, bc) = (v # ops, s, h) \<and> l2 = la + 1\<rbrakk> \<Longrightarrow> Suc 0 = n2 \<and> v # os = af \<and> s = ag \<and> h = bc \<and> la + 1 = l2
 2. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la d F h ah Flds newobj v NEXT os s ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (v # RVal (Loc ah) # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (putfield d F); h\<down>ah = Some (d, Flds); newobj = (d, Flds[F\<mapsto>v]); NEXT = (os, s, h[ah\<mapsto>newobj]); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 3. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la d h ah Flds NEXT os s ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (RVal (Loc ah) # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (checkcast d); h\<down>ah = Some (d, Flds); NEXT = (RVal (Loc ah) # os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 4. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la pc S. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = S; n1 = 1; l1 = pc; (ad, ae, bb) = S; get_ins M la = Some (goto pc)\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 5. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la pc NEXT os s h. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (TRUE # os, s, h); n1 = 1; l1 = pc; (ad, ae, bb) = NEXT; get_ins M la = Some (iftrue pc); NEXT = (os, s, h)\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 6. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la pc v NEXT os s h ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (v # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (iftrue pc); v \<noteq> TRUE; NEXT = (os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 7. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la C m par code l0 S h na hh v ops os NEXT s ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (ops, s, h); n1 = Suc na; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (invokeS C m); mbody_is C m (par, code, l0); ((par, code, l0), l0, ([], S, h), na, hh, v) \<in> Exec; (ops, par, S, os) \<in> Frame; NEXT = (v # os, s, hh); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 8. \<And>n. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w)\<rbrakk> \<Longrightarrow> \<forall>n1\<le>Suc n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w)
[PROOF STEP]
apply clarsimp
[PROOF STATE]
proof (prove)
goal (7 subgoals):
 1. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la d F h ah Flds newobj v NEXT os s ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (v # RVal (Loc ah) # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (putfield d F); h\<down>ah = Some (d, Flds); newobj = (d, Flds[F\<mapsto>v]); NEXT = (os, s, h[ah\<mapsto>newobj]); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 2. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la d h ah Flds NEXT os s ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (RVal (Loc ah) # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (checkcast d); h\<down>ah = Some (d, Flds); NEXT = (RVal (Loc ah) # os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 3. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la pc S. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = S; n1 = 1; l1 = pc; (ad, ae, bb) = S; get_ins M la = Some (goto pc)\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 4. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la pc NEXT os s h. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (TRUE # os, s, h); n1 = 1; l1 = pc; (ad, ae, bb) = NEXT; get_ins M la = Some (iftrue pc); NEXT = (os, s, h)\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 5. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la pc v NEXT os s h ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (v # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (iftrue pc); v \<noteq> TRUE; NEXT = (os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 6. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la C m par code l0 S h na hh v ops os NEXT s ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (ops, s, h); n1 = Suc na; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (invokeS C m); mbody_is C m (par, code, l0); ((par, code, l0), l0, ([], S, h), na, hh, v) \<in> Exec; (ops, par, S, os) \<in> Frame; NEXT = (v # os, s, hh); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 7. \<And>n. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w)\<rbrakk> \<Longrightarrow> \<forall>n1\<le>Suc n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w)
[PROOF STEP]
apply clarsimp
[PROOF STATE]
proof (prove)
goal (7 subgoals):
 1. \<And>n n2 l2 af ag bc ah ai bd la d F h aha Flds v os s. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); ((ah, ai, bd), la, (v # RVal (Loc aha) # os, s, h), n2, l2, af, ag, bc) \<in> Step; get_ins (ah, ai, bd) la = Some (putfield d F); h\<down>aha = Some (d, Flds)\<rbrakk> \<Longrightarrow> Suc 0 = n2 \<and> os = af \<and> s = ag \<and> h[aha\<mapsto>(d, Flds[F\<mapsto>v])] = bc \<and> la + 1 = l2
 2. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la d h ah Flds NEXT os s ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (RVal (Loc ah) # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (checkcast d); h\<down>ah = Some (d, Flds); NEXT = (RVal (Loc ah) # os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 3. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la pc S. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = S; n1 = 1; l1 = pc; (ad, ae, bb) = S; get_ins M la = Some (goto pc)\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 4. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la pc NEXT os s h. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (TRUE # os, s, h); n1 = 1; l1 = pc; (ad, ae, bb) = NEXT; get_ins M la = Some (iftrue pc); NEXT = (os, s, h)\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 5. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la pc v NEXT os s h ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (v # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (iftrue pc); v \<noteq> TRUE; NEXT = (os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 6. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la C m par code l0 S h na hh v ops os NEXT s ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (ops, s, h); n1 = Suc na; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (invokeS C m); mbody_is C m (par, code, l0); ((par, code, l0), l0, ([], S, h), na, hh, v) \<in> Exec; (ops, par, S, os) \<in> Frame; NEXT = (v # os, s, hh); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 7. \<And>n. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w)\<rbrakk> \<Longrightarrow> \<forall>n1\<le>Suc n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w)
[PROOF STEP]
apply (drule PutElim1)
[PROOF STATE]
proof (prove)
goal (8 subgoals):
 1. \<And>n n2 l2 af ag bc ah ai bd la d F h aha Flds v os s. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); get_ins (ah, ai, bd) la = Some (putfield d F); h\<down>aha = Some (d, Flds)\<rbrakk> \<Longrightarrow> get_ins (ah, ai, bd) la = Some (putfield (?d505 n n2 l2 af ag bc ah ai bd la d F h aha Flds v os s) (?F505 n n2 l2 af ag bc ah ai bd la d F h aha Flds v os s))
 2. \<And>n n2 l2 af ag bc ah ai bd la d F h aha Flds v os s. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); get_ins (ah, ai, bd) la = Some (putfield d F); h\<down>aha = Some (d, Flds); \<exists>a Fldsa va ops. h\<down>a = Some (?d505 n n2 l2 af ag bc ah ai bd la d F h aha Flds v os s, Fldsa) \<and> v # RVal (Loc aha) # os = va # RVal (Loc a) # ops \<and> n2 = Suc 0 \<and> (af, ag, bc) = (ops, s, h[a\<mapsto>(?d505 n n2 l2 af ag bc ah ai bd la d F h aha Flds v os s, Fldsa[?F505 n n2 l2 af ag bc ah ai bd la d F h aha Flds v os s\<mapsto>va])]) \<and> l2 = la + 1\<rbrakk> \<Longrightarrow> Suc 0 = n2 \<and> os = af \<and> s = ag \<and> h[aha\<mapsto>(d, Flds[F\<mapsto>v])] = bc \<and> la + 1 = l2
 3. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la d h ah Flds NEXT os s ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (RVal (Loc ah) # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (checkcast d); h\<down>ah = Some (d, Flds); NEXT = (RVal (Loc ah) # os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 4. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la pc S. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = S; n1 = 1; l1 = pc; (ad, ae, bb) = S; get_ins M la = Some (goto pc)\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 5. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la pc NEXT os s h. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (TRUE # os, s, h); n1 = 1; l1 = pc; (ad, ae, bb) = NEXT; get_ins M la = Some (iftrue pc); NEXT = (os, s, h)\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 6. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la pc v NEXT os s h ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (v # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (iftrue pc); v \<noteq> TRUE; NEXT = (os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 7. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la C m par code l0 S h na hh v ops os NEXT s ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (ops, s, h); n1 = Suc na; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (invokeS C m); mbody_is C m (par, code, l0); ((par, code, l0), l0, ([], S, h), na, hh, v) \<in> Exec; (ops, par, S, os) \<in> Frame; NEXT = (v # os, s, hh); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 8. \<And>n. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w)\<rbrakk> \<Longrightarrow> \<forall>n1\<le>Suc n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w)
[PROOF STEP]
apply fastforce
[PROOF STATE]
proof (prove)
goal (7 subgoals):
 1. \<And>n n2 l2 af ag bc ah ai bd la d F h aha Flds v os s. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); get_ins (ah, ai, bd) la = Some (putfield d F); h\<down>aha = Some (d, Flds); \<exists>a Flds va ops. h\<down>a = Some (d, Flds) \<and> v # RVal (Loc aha) # os = va # RVal (Loc a) # ops \<and> n2 = Suc 0 \<and> (af, ag, bc) = (ops, s, h[a\<mapsto>(d, Flds[F\<mapsto>va])]) \<and> l2 = la + 1\<rbrakk> \<Longrightarrow> Suc 0 = n2 \<and> os = af \<and> s = ag \<and> h[aha\<mapsto>(d, Flds[F\<mapsto>v])] = bc \<and> la + 1 = l2
 2. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la d h ah Flds NEXT os s ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (RVal (Loc ah) # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (checkcast d); h\<down>ah = Some (d, Flds); NEXT = (RVal (Loc ah) # os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 3. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la pc S. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = S; n1 = 1; l1 = pc; (ad, ae, bb) = S; get_ins M la = Some (goto pc)\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 4. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la pc NEXT os s h. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (TRUE # os, s, h); n1 = 1; l1 = pc; (ad, ae, bb) = NEXT; get_ins M la = Some (iftrue pc); NEXT = (os, s, h)\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 5. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la pc v NEXT os s h ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (v # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (iftrue pc); v \<noteq> TRUE; NEXT = (os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 6. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la C m par code l0 S h na hh v ops os NEXT s ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (ops, s, h); n1 = Suc na; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (invokeS C m); mbody_is C m (par, code, l0); ((par, code, l0), l0, ([], S, h), na, hh, v) \<in> Exec; (ops, par, S, os) \<in> Frame; NEXT = (v # os, s, hh); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 7. \<And>n. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w)\<rbrakk> \<Longrightarrow> \<forall>n1\<le>Suc n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w)
[PROOF STEP]
apply clarsimp
[PROOF STATE]
proof (prove)
goal (6 subgoals):
 1. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la d h ah Flds NEXT os s ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (RVal (Loc ah) # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (checkcast d); h\<down>ah = Some (d, Flds); NEXT = (RVal (Loc ah) # os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 2. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la pc S. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = S; n1 = 1; l1 = pc; (ad, ae, bb) = S; get_ins M la = Some (goto pc)\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 3. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la pc NEXT os s h. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (TRUE # os, s, h); n1 = 1; l1 = pc; (ad, ae, bb) = NEXT; get_ins M la = Some (iftrue pc); NEXT = (os, s, h)\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 4. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la pc v NEXT os s h ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (v # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (iftrue pc); v \<noteq> TRUE; NEXT = (os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 5. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la C m par code l0 S h na hh v ops os NEXT s ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (ops, s, h); n1 = Suc na; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (invokeS C m); mbody_is C m (par, code, l0); ((par, code, l0), l0, ([], S, h), na, hh, v) \<in> Exec; (ops, par, S, os) \<in> Frame; NEXT = (v # os, s, hh); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 6. \<And>n. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w)\<rbrakk> \<Longrightarrow> \<forall>n1\<le>Suc n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w)
[PROOF STEP]
apply clarsimp
[PROOF STATE]
proof (prove)
goal (6 subgoals):
 1. \<And>n n2 l2 af ag bc ah ai bd la d h aha Flds os s. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); ((ah, ai, bd), la, (RVal (Loc aha) # os, s, h), n2, l2, af, ag, bc) \<in> Step; get_ins (ah, ai, bd) la = Some (checkcast d); h\<down>aha = Some (d, Flds)\<rbrakk> \<Longrightarrow> Suc 0 = n2 \<and> RVal (Loc aha) # os = af \<and> s = ag \<and> h = bc \<and> la + 1 = l2
 2. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la pc S. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = S; n1 = 1; l1 = pc; (ad, ae, bb) = S; get_ins M la = Some (goto pc)\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 3. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la pc NEXT os s h. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (TRUE # os, s, h); n1 = 1; l1 = pc; (ad, ae, bb) = NEXT; get_ins M la = Some (iftrue pc); NEXT = (os, s, h)\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 4. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la pc v NEXT os s h ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (v # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (iftrue pc); v \<noteq> TRUE; NEXT = (os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 5. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la C m par code l0 S h na hh v ops os NEXT s ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (ops, s, h); n1 = Suc na; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (invokeS C m); mbody_is C m (par, code, l0); ((par, code, l0), l0, ([], S, h), na, hh, v) \<in> Exec; (ops, par, S, os) \<in> Frame; NEXT = (v # os, s, hh); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 6. \<And>n. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w)\<rbrakk> \<Longrightarrow> \<forall>n1\<le>Suc n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w)
[PROOF STEP]
apply (drule CastElim1)
[PROOF STATE]
proof (prove)
goal (7 subgoals):
 1. \<And>n n2 l2 af ag bc ah ai bd la d h aha Flds os s. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); get_ins (ah, ai, bd) la = Some (checkcast d); h\<down>aha = Some (d, Flds)\<rbrakk> \<Longrightarrow> get_ins (ah, ai, bd) la = Some (checkcast (?d543 n n2 l2 af ag bc ah ai bd la d h aha Flds os s))
 2. \<And>n n2 l2 af ag bc ah ai bd la d h aha Flds os s. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); get_ins (ah, ai, bd) la = Some (checkcast d); h\<down>aha = Some (d, Flds); \<exists>a Fldsa ops. h\<down>a = Some (?d543 n n2 l2 af ag bc ah ai bd la d h aha Flds os s, Fldsa) \<and> RVal (Loc aha) # os = RVal (Loc a) # ops \<and> n2 = Suc 0 \<and> (af, ag, bc) = (RVal (Loc a) # ops, s, h) \<and> l2 = la + 1\<rbrakk> \<Longrightarrow> Suc 0 = n2 \<and> RVal (Loc aha) # os = af \<and> s = ag \<and> h = bc \<and> la + 1 = l2
 3. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la pc S. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = S; n1 = 1; l1 = pc; (ad, ae, bb) = S; get_ins M la = Some (goto pc)\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 4. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la pc NEXT os s h. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (TRUE # os, s, h); n1 = 1; l1 = pc; (ad, ae, bb) = NEXT; get_ins M la = Some (iftrue pc); NEXT = (os, s, h)\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 5. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la pc v NEXT os s h ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (v # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (iftrue pc); v \<noteq> TRUE; NEXT = (os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 6. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la C m par code l0 S h na hh v ops os NEXT s ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (ops, s, h); n1 = Suc na; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (invokeS C m); mbody_is C m (par, code, l0); ((par, code, l0), l0, ([], S, h), na, hh, v) \<in> Exec; (ops, par, S, os) \<in> Frame; NEXT = (v # os, s, hh); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 7. \<And>n. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w)\<rbrakk> \<Longrightarrow> \<forall>n1\<le>Suc n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w)
[PROOF STEP]
apply simp
[PROOF STATE]
proof (prove)
goal (6 subgoals):
 1. \<And>n n2 l2 af ag bc ah ai bd la d h aha Flds os s. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); get_ins (ah, ai, bd) la = Some (checkcast d); h\<down>aha = Some (d, Flds); \<exists>a Flds ops. h\<down>a = Some (d, Flds) \<and> RVal (Loc aha) # os = RVal (Loc a) # ops \<and> n2 = Suc 0 \<and> (af, ag, bc) = (RVal (Loc a) # ops, s, h) \<and> l2 = la + 1\<rbrakk> \<Longrightarrow> Suc 0 = n2 \<and> RVal (Loc aha) # os = af \<and> s = ag \<and> h = bc \<and> la + 1 = l2
 2. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la pc S. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = S; n1 = 1; l1 = pc; (ad, ae, bb) = S; get_ins M la = Some (goto pc)\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 3. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la pc NEXT os s h. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (TRUE # os, s, h); n1 = 1; l1 = pc; (ad, ae, bb) = NEXT; get_ins M la = Some (iftrue pc); NEXT = (os, s, h)\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 4. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la pc v NEXT os s h ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (v # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (iftrue pc); v \<noteq> TRUE; NEXT = (os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 5. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la C m par code l0 S h na hh v ops os NEXT s ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (ops, s, h); n1 = Suc na; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (invokeS C m); mbody_is C m (par, code, l0); ((par, code, l0), l0, ([], S, h), na, hh, v) \<in> Exec; (ops, par, S, os) \<in> Frame; NEXT = (v # os, s, hh); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 6. \<And>n. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w)\<rbrakk> \<Longrightarrow> \<forall>n1\<le>Suc n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w)
[PROOF STEP]
apply clarsimp
[PROOF STATE]
proof (prove)
goal (5 subgoals):
 1. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la pc S. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = S; n1 = 1; l1 = pc; (ad, ae, bb) = S; get_ins M la = Some (goto pc)\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 2. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la pc NEXT os s h. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (TRUE # os, s, h); n1 = 1; l1 = pc; (ad, ae, bb) = NEXT; get_ins M la = Some (iftrue pc); NEXT = (os, s, h)\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 3. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la pc v NEXT os s h ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (v # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (iftrue pc); v \<noteq> TRUE; NEXT = (os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 4. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la C m par code l0 S h na hh v ops os NEXT s ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (ops, s, h); n1 = Suc na; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (invokeS C m); mbody_is C m (par, code, l0); ((par, code, l0), l0, ([], S, h), na, hh, v) \<in> Exec; (ops, par, S, os) \<in> Frame; NEXT = (v # os, s, hh); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 5. \<And>n. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w)\<rbrakk> \<Longrightarrow> \<forall>n1\<le>Suc n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w)
[PROOF STEP]
apply clarsimp
[PROOF STATE]
proof (prove)
goal (5 subgoals):
 1. \<And>n n2 l2 af ag bc ah ai bd la pc aj ak be. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); ((ah, ai, bd), la, (aj, ak, be), n2, l2, af, ag, bc) \<in> Step; get_ins (ah, ai, bd) la = Some (goto pc)\<rbrakk> \<Longrightarrow> Suc 0 = n2 \<and> aj = af \<and> ak = ag \<and> be = bc \<and> pc = l2
 2. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la pc NEXT os s h. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (TRUE # os, s, h); n1 = 1; l1 = pc; (ad, ae, bb) = NEXT; get_ins M la = Some (iftrue pc); NEXT = (os, s, h)\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 3. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la pc v NEXT os s h ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (v # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (iftrue pc); v \<noteq> TRUE; NEXT = (os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 4. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la C m par code l0 S h na hh v ops os NEXT s ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (ops, s, h); n1 = Suc na; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (invokeS C m); mbody_is C m (par, code, l0); ((par, code, l0), l0, ([], S, h), na, hh, v) \<in> Exec; (ops, par, S, os) \<in> Frame; NEXT = (v # os, s, hh); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 5. \<And>n. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w)\<rbrakk> \<Longrightarrow> \<forall>n1\<le>Suc n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w)
[PROOF STEP]
apply (drule GotoElim1)
[PROOF STATE]
proof (prove)
goal (6 subgoals):
 1. \<And>n n2 l2 af ag bc ah ai bd la pc aj ak be. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); get_ins (ah, ai, bd) la = Some (goto pc)\<rbrakk> \<Longrightarrow> get_ins (ah, ai, bd) la = Some (goto (?pc573 n n2 l2 af ag bc ah ai bd la pc aj ak be))
 2. \<And>n n2 l2 af ag bc ah ai bd la pc aj ak be. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); get_ins (ah, ai, bd) la = Some (goto pc); n2 = Suc 0 \<and> (af, ag, bc) = (aj, ak, be) \<and> l2 = ?pc573 n n2 l2 af ag bc ah ai bd la pc aj ak be\<rbrakk> \<Longrightarrow> Suc 0 = n2 \<and> aj = af \<and> ak = ag \<and> be = bc \<and> pc = l2
 3. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la pc NEXT os s h. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (TRUE # os, s, h); n1 = 1; l1 = pc; (ad, ae, bb) = NEXT; get_ins M la = Some (iftrue pc); NEXT = (os, s, h)\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 4. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la pc v NEXT os s h ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (v # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (iftrue pc); v \<noteq> TRUE; NEXT = (os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 5. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la C m par code l0 S h na hh v ops os NEXT s ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (ops, s, h); n1 = Suc na; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (invokeS C m); mbody_is C m (par, code, l0); ((par, code, l0), l0, ([], S, h), na, hh, v) \<in> Exec; (ops, par, S, os) \<in> Frame; NEXT = (v # os, s, hh); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 6. \<And>n. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w)\<rbrakk> \<Longrightarrow> \<forall>n1\<le>Suc n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w)
[PROOF STEP]
apply simp
[PROOF STATE]
proof (prove)
goal (5 subgoals):
 1. \<And>n n2 l2 af ag bc ah ai bd la pc aj ak be. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); get_ins (ah, ai, bd) la = Some (goto pc); n2 = Suc 0 \<and> (af, ag, bc) = (aj, ak, be) \<and> l2 = pc\<rbrakk> \<Longrightarrow> Suc 0 = n2 \<and> aj = af \<and> ak = ag \<and> be = bc \<and> pc = l2
 2. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la pc NEXT os s h. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (TRUE # os, s, h); n1 = 1; l1 = pc; (ad, ae, bb) = NEXT; get_ins M la = Some (iftrue pc); NEXT = (os, s, h)\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 3. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la pc v NEXT os s h ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (v # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (iftrue pc); v \<noteq> TRUE; NEXT = (os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 4. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la C m par code l0 S h na hh v ops os NEXT s ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (ops, s, h); n1 = Suc na; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (invokeS C m); mbody_is C m (par, code, l0); ((par, code, l0), l0, ([], S, h), na, hh, v) \<in> Exec; (ops, par, S, os) \<in> Frame; NEXT = (v # os, s, hh); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 5. \<And>n. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w)\<rbrakk> \<Longrightarrow> \<forall>n1\<le>Suc n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w)
[PROOF STEP]
apply clarsimp
[PROOF STATE]
proof (prove)
goal (4 subgoals):
 1. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la pc NEXT os s h. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (TRUE # os, s, h); n1 = 1; l1 = pc; (ad, ae, bb) = NEXT; get_ins M la = Some (iftrue pc); NEXT = (os, s, h)\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 2. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la pc v NEXT os s h ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (v # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (iftrue pc); v \<noteq> TRUE; NEXT = (os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 3. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la C m par code l0 S h na hh v ops os NEXT s ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (ops, s, h); n1 = Suc na; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (invokeS C m); mbody_is C m (par, code, l0); ((par, code, l0), l0, ([], S, h), na, hh, v) \<in> Exec; (ops, par, S, os) \<in> Frame; NEXT = (v # os, s, hh); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 4. \<And>n. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w)\<rbrakk> \<Longrightarrow> \<forall>n1\<le>Suc n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w)
[PROOF STEP]
apply clarsimp
[PROOF STATE]
proof (prove)
goal (4 subgoals):
 1. \<And>n n2 l2 af ag bc ah ai bd la pc os s h. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); ((ah, ai, bd), la, (TRUE # os, s, h), n2, l2, af, ag, bc) \<in> Step; get_ins (ah, ai, bd) la = Some (iftrue pc)\<rbrakk> \<Longrightarrow> Suc 0 = n2 \<and> os = af \<and> s = ag \<and> h = bc \<and> pc = l2
 2. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la pc v NEXT os s h ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (v # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (iftrue pc); v \<noteq> TRUE; NEXT = (os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 3. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la C m par code l0 S h na hh v ops os NEXT s ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (ops, s, h); n1 = Suc na; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (invokeS C m); mbody_is C m (par, code, l0); ((par, code, l0), l0, ([], S, h), na, hh, v) \<in> Exec; (ops, par, S, os) \<in> Frame; NEXT = (v # os, s, hh); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 4. \<And>n. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w)\<rbrakk> \<Longrightarrow> \<forall>n1\<le>Suc n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w)
[PROOF STEP]
apply (drule IfElim1)
[PROOF STATE]
proof (prove)
goal (5 subgoals):
 1. \<And>n n2 l2 af ag bc ah ai bd la pc os s h. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); get_ins (ah, ai, bd) la = Some (iftrue pc)\<rbrakk> \<Longrightarrow> get_ins (ah, ai, bd) la = Some (iftrue (?pc606 n n2 l2 af ag bc ah ai bd la pc os s h))
 2. \<And>n n2 l2 af ag bc ah ai bd la pc os s h. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); get_ins (ah, ai, bd) la = Some (iftrue pc); (\<exists>ops. TRUE # os = TRUE # ops \<and> n2 = Suc 0 \<and> (af, ag, bc) = (ops, s, h) \<and> l2 = ?pc606 n n2 l2 af ag bc ah ai bd la pc os s h) \<or> (\<exists>v ops. v \<noteq> TRUE \<and> TRUE # os = v # ops \<and> n2 = Suc 0 \<and> (af, ag, bc) = (ops, s, h) \<and> l2 = la + 1)\<rbrakk> \<Longrightarrow> Suc 0 = n2 \<and> os = af \<and> s = ag \<and> h = bc \<and> pc = l2
 3. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la pc v NEXT os s h ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (v # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (iftrue pc); v \<noteq> TRUE; NEXT = (os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 4. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la C m par code l0 S h na hh v ops os NEXT s ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (ops, s, h); n1 = Suc na; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (invokeS C m); mbody_is C m (par, code, l0); ((par, code, l0), l0, ([], S, h), na, hh, v) \<in> Exec; (ops, par, S, os) \<in> Frame; NEXT = (v # os, s, hh); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 5. \<And>n. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w)\<rbrakk> \<Longrightarrow> \<forall>n1\<le>Suc n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w)
[PROOF STEP]
apply simp
[PROOF STATE]
proof (prove)
goal (4 subgoals):
 1. \<And>n n2 l2 af ag bc ah ai bd la pc os s h. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); get_ins (ah, ai, bd) la = Some (iftrue pc); (\<exists>ops. TRUE # os = TRUE # ops \<and> n2 = Suc 0 \<and> (af, ag, bc) = (ops, s, h) \<and> l2 = pc) \<or> (\<exists>v ops. v \<noteq> TRUE \<and> TRUE # os = v # ops \<and> n2 = Suc 0 \<and> (af, ag, bc) = (ops, s, h) \<and> l2 = la + 1)\<rbrakk> \<Longrightarrow> Suc 0 = n2 \<and> os = af \<and> s = ag \<and> h = bc \<and> pc = l2
 2. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la pc v NEXT os s h ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (v # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (iftrue pc); v \<noteq> TRUE; NEXT = (os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 3. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la C m par code l0 S h na hh v ops os NEXT s ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (ops, s, h); n1 = Suc na; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (invokeS C m); mbody_is C m (par, code, l0); ((par, code, l0), l0, ([], S, h), na, hh, v) \<in> Exec; (ops, par, S, os) \<in> Frame; NEXT = (v # os, s, hh); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 4. \<And>n. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w)\<rbrakk> \<Longrightarrow> \<forall>n1\<le>Suc n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w)
[PROOF STEP]
apply clarsimp
[PROOF STATE]
proof (prove)
goal (3 subgoals):
 1. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la pc v NEXT os s h ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (v # os, s, h); n1 = 1; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (iftrue pc); v \<noteq> TRUE; NEXT = (os, s, h); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 2. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la C m par code l0 S h na hh v ops os NEXT s ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (ops, s, h); n1 = Suc na; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (invokeS C m); mbody_is C m (par, code, l0); ((par, code, l0), l0, ([], S, h), na, hh, v) \<in> Exec; (ops, par, S, os) \<in> Frame; NEXT = (v # os, s, hh); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 3. \<And>n. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w)\<rbrakk> \<Longrightarrow> \<forall>n1\<le>Suc n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w)
[PROOF STEP]
apply clarsimp
[PROOF STATE]
proof (prove)
goal (3 subgoals):
 1. \<And>n n2 l2 af ag bc ah ai bd la pc v os s h. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); ((ah, ai, bd), la, (v # os, s, h), n2, l2, af, ag, bc) \<in> Step; get_ins (ah, ai, bd) la = Some (iftrue pc); v \<noteq> TRUE\<rbrakk> \<Longrightarrow> Suc 0 = n2 \<and> os = af \<and> s = ag \<and> h = bc \<and> la + 1 = l2
 2. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la C m par code l0 S h na hh v ops os NEXT s ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (ops, s, h); n1 = Suc na; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (invokeS C m); mbody_is C m (par, code, l0); ((par, code, l0), l0, ([], S, h), na, hh, v) \<in> Exec; (ops, par, S, os) \<in> Frame; NEXT = (v # os, s, hh); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 3. \<And>n. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w)\<rbrakk> \<Longrightarrow> \<forall>n1\<le>Suc n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w)
[PROOF STEP]
apply (drule IfElim1)
[PROOF STATE]
proof (prove)
goal (4 subgoals):
 1. \<And>n n2 l2 af ag bc ah ai bd la pc v os s h. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); get_ins (ah, ai, bd) la = Some (iftrue pc); v \<noteq> TRUE\<rbrakk> \<Longrightarrow> get_ins (ah, ai, bd) la = Some (iftrue (?pc640 n n2 l2 af ag bc ah ai bd la pc v os s h))
 2. \<And>n n2 l2 af ag bc ah ai bd la pc v os s h. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); get_ins (ah, ai, bd) la = Some (iftrue pc); v \<noteq> TRUE; (\<exists>ops. v # os = TRUE # ops \<and> n2 = Suc 0 \<and> (af, ag, bc) = (ops, s, h) \<and> l2 = ?pc640 n n2 l2 af ag bc ah ai bd la pc v os s h) \<or> (\<exists>va ops. va \<noteq> TRUE \<and> v # os = va # ops \<and> n2 = Suc 0 \<and> (af, ag, bc) = (ops, s, h) \<and> l2 = la + 1)\<rbrakk> \<Longrightarrow> Suc 0 = n2 \<and> os = af \<and> s = ag \<and> h = bc \<and> la + 1 = l2
 3. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la C m par code l0 S h na hh v ops os NEXT s ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (ops, s, h); n1 = Suc na; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (invokeS C m); mbody_is C m (par, code, l0); ((par, code, l0), l0, ([], S, h), na, hh, v) \<in> Exec; (ops, par, S, os) \<in> Frame; NEXT = (v # os, s, hh); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 4. \<And>n. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w)\<rbrakk> \<Longrightarrow> \<forall>n1\<le>Suc n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w)
[PROOF STEP]
apply simp
[PROOF STATE]
proof (prove)
goal (3 subgoals):
 1. \<And>n n2 l2 af ag bc ah ai bd la pc v os s h. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); get_ins (ah, ai, bd) la = Some (iftrue pc); v \<noteq> TRUE; (\<exists>ops. v # os = TRUE # ops \<and> n2 = Suc 0 \<and> (af, ag, bc) = (ops, s, h) \<and> l2 = pc) \<or> (\<exists>va ops. va \<noteq> TRUE \<and> v # os = va # ops \<and> n2 = Suc 0 \<and> (af, ag, bc) = (ops, s, h) \<and> l2 = la + 1)\<rbrakk> \<Longrightarrow> Suc 0 = n2 \<and> os = af \<and> s = ag \<and> h = bc \<and> la + 1 = l2
 2. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la C m par code l0 S h na hh v ops os NEXT s ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (ops, s, h); n1 = Suc na; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (invokeS C m); mbody_is C m (par, code, l0); ((par, code, l0), l0, ([], S, h), na, hh, v) \<in> Exec; (ops, par, S, os) \<in> Frame; NEXT = (v # os, s, hh); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 3. \<And>n. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w)\<rbrakk> \<Longrightarrow> \<forall>n1\<le>Suc n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w)
[PROOF STEP]
apply clarsimp
[PROOF STATE]
proof (prove)
goal (2 subgoals):
 1. \<And>n n1 l a aa b ab ac ba l1 ad ae bb n2 l2 af ag bc M la C m par code l0 S h na hh v ops os NEXT s ll. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step; (a, aa, b) = M; l = la; (ab, ac, ba) = (ops, s, h); n1 = Suc na; l1 = ll; (ad, ae, bb) = NEXT; get_ins M la = Some (invokeS C m); mbody_is C m (par, code, l0); ((par, code, l0), l0, ([], S, h), na, hh, v) \<in> Exec; (ops, par, S, os) \<in> Frame; NEXT = (v # os, s, hh); ll = la + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2
 2. \<And>n. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w)\<rbrakk> \<Longrightarrow> \<forall>n1\<le>Suc n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w)
[PROOF STEP]
apply clarsimp
[PROOF STATE]
proof (prove)
goal (2 subgoals):
 1. \<And>n n2 l2 af ag bc ah ai bd la C m par code l0 S h na hh v ops os s. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); na \<le> n; ((ah, ai, bd), la, (ops, s, h), n2, l2, af, ag, bc) \<in> Step; get_ins (ah, ai, bd) la = Some (invokeS C m); mbody_is C m (par, code, l0); ((par, code, l0), l0, ([], S, h), na, hh, v) \<in> Exec; (ops, par, S, os) \<in> Frame\<rbrakk> \<Longrightarrow> Suc na = n2 \<and> v # os = af \<and> s = ag \<and> hh = bc \<and> la + 1 = l2
 2. \<And>n. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w)\<rbrakk> \<Longrightarrow> \<forall>n1\<le>Suc n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w)
[PROOF STEP]
apply (drule InvokeElim1)
[PROOF STATE]
proof (prove)
goal (3 subgoals):
 1. \<And>n n2 l2 af ag bc ah ai bd la C m par code l0 S h na hh v ops os s. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); na \<le> n; get_ins (ah, ai, bd) la = Some (invokeS C m); mbody_is C m (par, code, l0); ((par, code, l0), l0, ([], S, h), na, hh, v) \<in> Exec; (ops, par, S, os) \<in> Frame\<rbrakk> \<Longrightarrow> get_ins (ah, ai, bd) la = Some (invokeS (?C674 n n2 l2 af ag bc ah ai bd la C m par code l0 S h na hh v ops os s) (?m674 n n2 l2 af ag bc ah ai bd la C m par code l0 S h na hh v ops os s))
 2. \<And>n n2 l2 af ag bc ah ai bd la C m par code l0 S h na hh v ops os s. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); na \<le> n; get_ins (ah, ai, bd) la = Some (invokeS C m); mbody_is C m (par, code, l0); ((par, code, l0), l0, ([], S, h), na, hh, v) \<in> Exec; (ops, par, S, os) \<in> Frame; \<exists>codea l0a va opsa hha u k R para. mbody_is (?C674 n n2 l2 af ag bc ah ai bd la C m par code l0 S h na hh v ops os s) (?m674 n n2 l2 af ag bc ah ai bd la C m par code l0 S h na hh v ops os s) (para, codea, l0a) \<and> (ops, para, R, opsa) \<in> Frame \<and> ((para, codea, l0a), l0a, ([], R, h), k, hha, va) \<in> Exec \<and> n2 = Suc k \<and> (af, ag, bc) = (va # opsa, s, hha) \<and> l2 = la + 1\<rbrakk> \<Longrightarrow> Suc na = n2 \<and> v # os = af \<and> s = ag \<and> hh = bc \<and> la + 1 = l2
 3. \<And>n. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w)\<rbrakk> \<Longrightarrow> \<forall>n1\<le>Suc n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w)
[PROOF STEP]
apply simp
[PROOF STATE]
proof (prove)
goal (2 subgoals):
 1. \<And>n n2 l2 af ag bc ah ai bd la C m par code l0 S h na hh v ops os s. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); na \<le> n; get_ins (ah, ai, bd) la = Some (invokeS C m); mbody_is C m (par, code, l0); ((par, code, l0), l0, ([], S, h), na, hh, v) \<in> Exec; (ops, par, S, os) \<in> Frame; \<exists>code l0 v opsa hh u k R par. mbody_is C m (par, code, l0) \<and> (ops, par, R, opsa) \<in> Frame \<and> ((par, code, l0), l0, ([], R, h), k, hh, v) \<in> Exec \<and> n2 = Suc k \<and> (af, ag, bc) = (v # opsa, s, hh) \<and> l2 = la + 1\<rbrakk> \<Longrightarrow> Suc na = n2 \<and> v # os = af \<and> s = ag \<and> hh = bc \<and> la + 1 = l2
 2. \<And>n. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w)\<rbrakk> \<Longrightarrow> \<forall>n1\<le>Suc n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w)
[PROOF STEP]
apply clarsimp
[PROOF STATE]
proof (prove)
goal (2 subgoals):
 1. \<And>n bc ah ai bd la C m par code l0 S h na hh v ops os codea l0a va opsa k R para. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); na \<le> n; get_ins (ah, ai, bd) la = Some (invokeS C m); mbody_is C m (par, code, l0); ((par, code, l0), l0, ([], S, h), na, hh, v) \<in> Exec; (ops, par, S, os) \<in> Frame; mbody_is C m (para, codea, l0a); (ops, para, R, opsa) \<in> Frame; ((para, codea, l0a), l0a, ([], R, h), k, bc, va) \<in> Exec\<rbrakk> \<Longrightarrow> na = k \<and> v = va \<and> os = opsa \<and> hh = bc
 2. \<And>n. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w)\<rbrakk> \<Longrightarrow> \<forall>n1\<le>Suc n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w)
[PROOF STEP]
apply (erule thin_rl)
[PROOF STATE]
proof (prove)
goal (2 subgoals):
 1. \<And>n bc ah ai bd la C m par code l0 S h na hh v ops os codea l0a va opsa k R para. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); na \<le> n; get_ins (ah, ai, bd) la = Some (invokeS C m); mbody_is C m (par, code, l0); ((par, code, l0), l0, ([], S, h), na, hh, v) \<in> Exec; (ops, par, S, os) \<in> Frame; mbody_is C m (para, codea, l0a); (ops, para, R, opsa) \<in> Frame; ((para, codea, l0a), l0a, ([], R, h), k, bc, va) \<in> Exec\<rbrakk> \<Longrightarrow> na = k \<and> v = va \<and> os = opsa \<and> hh = bc
 2. \<And>n. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w)\<rbrakk> \<Longrightarrow> \<forall>n1\<le>Suc n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w)
[PROOF STEP]
apply (simp add: mbody_is_def, clarsimp)
[PROOF STATE]
proof (prove)
goal (2 subgoals):
 1. \<And>n bc ah ai bd la C m S h na hh v ops os codea l0a va opsa k R para CD. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); na \<le> n; get_ins (ah, ai, bd) la = Some (invokeS C m); ((para, codea, l0a), l0a, ([], S, h), na, hh, v) \<in> Exec; (ops, para, S, os) \<in> Frame; (ops, para, R, opsa) \<in> Frame; ((para, codea, l0a), l0a, ([], R, h), k, bc, va) \<in> Exec; CD\<down>m = Some (para, codea, l0a); P\<down>C = Some CD\<rbrakk> \<Longrightarrow> na = k \<and> v = va \<and> os = opsa \<and> hh = bc
 2. \<And>n. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w)\<rbrakk> \<Longrightarrow> \<forall>n1\<le>Suc n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w)
[PROOF STEP]
apply (drule Frame_deterministic, assumption, clarsimp)
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<And>n. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w)\<rbrakk> \<Longrightarrow> \<forall>n1\<le>Suc n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w)
[PROOF STEP]
apply clarsimp
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<And>n n1 l a aa b ab ac ba h v n2 k w. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec; ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec\<rbrakk> \<Longrightarrow> n1 = n2 \<and> h = k \<and> v = w
[PROOF STEP]
apply (erule Exec.cases)
[PROOF STATE]
proof (prove)
goal (2 subgoals):
 1. \<And>n n1 l a aa b ab ac ba h v n2 k w M la va os s ha. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec; (a, aa, b) = M; l = la; (ab, ac, ba) = (va # os, s, ha); n1 = 1; h = ha; v = va; get_ins M la = Some vreturn\<rbrakk> \<Longrightarrow> n1 = n2 \<and> h = k \<and> v = w
 2. \<And>n n1 l a aa b ab ac ba h v n2 k w M la s na ll t m ha va ka. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec; (a, aa, b) = M; l = la; (ab, ac, ba) = s; n1 = ka; h = ha; v = va; (M, la, s, na, ll, t) \<in> Step; (M, ll, t, m, ha, va) \<in> Exec; ka = max na m + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> h = k \<and> v = w
[PROOF STEP]
apply clarsimp
[PROOF STATE]
proof (prove)
goal (2 subgoals):
 1. \<And>n n2 k w ad ae bb la va os s ha. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); ((ad, ae, bb), la, (va # os, s, ha), n2, k, w) \<in> Exec; get_ins (ad, ae, bb) la = Some vreturn\<rbrakk> \<Longrightarrow> Suc 0 = n2 \<and> ha = k \<and> va = w
 2. \<And>n n1 l a aa b ab ac ba h v n2 k w M la s na ll t m ha va ka. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec; (a, aa, b) = M; l = la; (ab, ac, ba) = s; n1 = ka; h = ha; v = va; (M, la, s, na, ll, t) \<in> Step; (M, ll, t, m, ha, va) \<in> Exec; ka = max na m + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> h = k \<and> v = w
[PROOF STEP]
apply (erule Exec.cases)
[PROOF STATE]
proof (prove)
goal (3 subgoals):
 1. \<And>n n2 k w ad ae bb la va os s ha M l v osa sa h. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); get_ins (ad, ae, bb) la = Some vreturn; (ad, ae, bb) = M; la = l; (va # os, s, ha) = (v # osa, sa, h); n2 = 1; k = h; w = v; get_ins M l = Some vreturn\<rbrakk> \<Longrightarrow> Suc 0 = n2 \<and> ha = k \<and> va = w
 2. \<And>n n2 k w ad ae bb la va os s ha M l sa na ll t m h v ka. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); get_ins (ad, ae, bb) la = Some vreturn; (ad, ae, bb) = M; la = l; (va # os, s, ha) = sa; n2 = ka; k = h; w = v; (M, l, sa, na, ll, t) \<in> Step; (M, ll, t, m, h, v) \<in> Exec; ka = max na m + 1\<rbrakk> \<Longrightarrow> Suc 0 = n2 \<and> ha = k \<and> va = w
 3. \<And>n n1 l a aa b ab ac ba h v n2 k w M la s na ll t m ha va ka. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec; (a, aa, b) = M; l = la; (ab, ac, ba) = s; n1 = ka; h = ha; v = va; (M, la, s, na, ll, t) \<in> Step; (M, ll, t, m, ha, va) \<in> Exec; ka = max na m + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> h = k \<and> v = w
[PROOF STEP]
apply clarsimp
[PROOF STATE]
proof (prove)
goal (2 subgoals):
 1. \<And>n n2 k w ad ae bb la va os s ha M l sa na ll t m h v ka. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); get_ins (ad, ae, bb) la = Some vreturn; (ad, ae, bb) = M; la = l; (va # os, s, ha) = sa; n2 = ka; k = h; w = v; (M, l, sa, na, ll, t) \<in> Step; (M, ll, t, m, h, v) \<in> Exec; ka = max na m + 1\<rbrakk> \<Longrightarrow> Suc 0 = n2 \<and> ha = k \<and> va = w
 2. \<And>n n1 l a aa b ab ac ba h v n2 k w M la s na ll t m ha va ka. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec; (a, aa, b) = M; l = la; (ab, ac, ba) = s; n1 = ka; h = ha; v = va; (M, la, s, na, ll, t) \<in> Step; (M, ll, t, m, ha, va) \<in> Exec; ka = max na m + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> h = k \<and> v = w
[PROOF STEP]
apply clarsimp
[PROOF STATE]
proof (prove)
goal (2 subgoals):
 1. \<And>n va os a aa b l ac ba na ll af ag bc m h v. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); get_ins (a, aa, b) l = Some vreturn; ((a, aa, b), l, (va # os, ac, ba), na, ll, af, ag, bc) \<in> Step; ((a, aa, b), ll, (af, ag, bc), m, h, v) \<in> Exec\<rbrakk> \<Longrightarrow> na = 0 \<and> m = 0 \<and> ba = h \<and> va = v
 2. \<And>n n1 l a aa b ab ac ba h v n2 k w M la s na ll t m ha va ka. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec; (a, aa, b) = M; l = la; (ab, ac, ba) = s; n1 = ka; h = ha; v = va; (M, la, s, na, ll, t) \<in> Step; (M, ll, t, m, ha, va) \<in> Exec; ka = max na m + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> h = k \<and> v = w
[PROOF STEP]
apply (drule RetElim1, simp, simp)
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<And>n n1 l a aa b ab ac ba h v n2 k w M la s na ll t m ha va ka. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); n1 \<le> Suc n; ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec; (a, aa, b) = M; l = la; (ab, ac, ba) = s; n1 = ka; h = ha; v = va; (M, la, s, na, ll, t) \<in> Step; (M, ll, t, m, ha, va) \<in> Exec; ka = max na m + 1\<rbrakk> \<Longrightarrow> n1 = n2 \<and> h = k \<and> v = w
[PROOF STEP]
apply clarsimp
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<And>n n2 k w ad ae bb la af ag bc na ll ah ai bd m ha va. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); ((ad, ae, bb), la, (af, ag, bc), n2, k, w) \<in> Exec; ((ad, ae, bb), la, (af, ag, bc), na, ll, ah, ai, bd) \<in> Step; ((ad, ae, bb), ll, (ah, ai, bd), m, ha, va) \<in> Exec; na \<le> n; m \<le> n\<rbrakk> \<Longrightarrow> Suc (max na m) = n2 \<and> ha = k \<and> va = w
[PROOF STEP]
apply (drule ExecElim1)
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<And>n n2 k w ad ae bb la af ag bc na ll ah ai bd m ha va. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); ((ad, ae, bb), la, (af, ag, bc), na, ll, ah, ai, bd) \<in> Step; ((ad, ae, bb), ll, (ah, ai, bd), m, ha, va) \<in> Exec; na \<le> n; m \<le> n; get_ins (ad, ae, bb) la = Some vreturn \<and> (\<exists>ops. af = w # ops \<and> n2 = Suc 0 \<and> k = bc) \<or> (\<exists>n m t ll. ((ad, ae, bb), la, (af, ag, bc), n, ll, t) \<in> Step \<and> ((ad, ae, bb), ll, t, m, k, w) \<in> Exec \<and> n2 = Suc (max n m))\<rbrakk> \<Longrightarrow> Suc (max na m) = n2 \<and> ha = k \<and> va = w
[PROOF STEP]
apply clarsimp
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<And>n n2 k w ad ae bb la af ag bc na ll ah ai bd m ha va. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); ((ad, ae, bb), la, (af, ag, bc), na, ll, ah, ai, bd) \<in> Step; ((ad, ae, bb), ll, (ah, ai, bd), m, ha, va) \<in> Exec; na \<le> n; m \<le> n; get_ins (ad, ae, bb) la = Some vreturn \<and> (\<exists>ops. af = w # ops) \<and> n2 = Suc 0 \<and> k = bc \<or> (\<exists>n m a aa b ll. ((ad, ae, bb), la, (af, ag, bc), n, ll, a, aa, b) \<in> Step \<and> ((ad, ae, bb), ll, (a, aa, b), m, k, w) \<in> Exec \<and> n2 = Suc (max n m))\<rbrakk> \<Longrightarrow> Suc (max na m) = n2 \<and> ha = k \<and> va = w
[PROOF STEP]
apply (erule disjE, clarsimp)
[PROOF STATE]
proof (prove)
goal (2 subgoals):
 1. \<And>n w ad ae bb la ag bc na ll ah ai bd m ha va ops. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); ((ad, ae, bb), la, (w # ops, ag, bc), na, ll, ah, ai, bd) \<in> Step; ((ad, ae, bb), ll, (ah, ai, bd), m, ha, va) \<in> Exec; na \<le> n; m \<le> n; get_ins (ad, ae, bb) la = Some vreturn\<rbrakk> \<Longrightarrow> na = 0 \<and> m = 0 \<and> ha = bc \<and> va = w
 2. \<And>n n2 k w ad ae bb la af ag bc na ll ah ai bd m ha va. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); ((ad, ae, bb), la, (af, ag, bc), na, ll, ah, ai, bd) \<in> Step; ((ad, ae, bb), ll, (ah, ai, bd), m, ha, va) \<in> Exec; na \<le> n; m \<le> n; \<exists>n m a aa b ll. ((ad, ae, bb), la, (af, ag, bc), n, ll, a, aa, b) \<in> Step \<and> ((ad, ae, bb), ll, (a, aa, b), m, k, w) \<in> Exec \<and> n2 = Suc (max n m)\<rbrakk> \<Longrightarrow> Suc (max na m) = n2 \<and> ha = k \<and> va = w
[PROOF STEP]
apply (drule RetElim1, simp, simp)
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<And>n n2 k w ad ae bb la af ag bc na ll ah ai bd m ha va. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); ((ad, ae, bb), la, (af, ag, bc), na, ll, ah, ai, bd) \<in> Step; ((ad, ae, bb), ll, (ah, ai, bd), m, ha, va) \<in> Exec; na \<le> n; m \<le> n; \<exists>n m a aa b ll. ((ad, ae, bb), la, (af, ag, bc), n, ll, a, aa, b) \<in> Step \<and> ((ad, ae, bb), ll, (a, aa, b), m, k, w) \<in> Exec \<and> n2 = Suc (max n m)\<rbrakk> \<Longrightarrow> Suc (max na m) = n2 \<and> ha = k \<and> va = w
[PROOF STEP]
apply clarsimp
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<And>n k w ad ae bb la af ag bc na ll ah ai bd m ha va nb ma a aa b lla. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), n1, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> n1 = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); ((ad, ae, bb), la, (af, ag, bc), na, ll, ah, ai, bd) \<in> Step; ((ad, ae, bb), ll, (ah, ai, bd), m, ha, va) \<in> Exec; na \<le> n; m \<le> n; ((ad, ae, bb), la, (af, ag, bc), nb, lla, a, aa, b) \<in> Step; ((ad, ae, bb), lla, (a, aa, b), ma, k, w) \<in> Exec\<rbrakk> \<Longrightarrow> max na m = max nb ma \<and> ha = k \<and> va = w
[PROOF STEP]
apply (erule_tac x=na in allE, rotate_tac -1, clarsimp)
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<And>n k w ad ae bb la af ag bc na ll ah ai bd m ha va nb ma a aa b lla. \<lbrakk>\<forall>l a aa b ab ac ba l1 ad ae bb. ((a, aa, b), l, (ab, ac, ba), na, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), l, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> na = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); ((ad, ae, bb), la, (af, ag, bc), na, ll, ah, ai, bd) \<in> Step; ((ad, ae, bb), ll, (ah, ai, bd), m, ha, va) \<in> Exec; na \<le> n; m \<le> n; ((ad, ae, bb), la, (af, ag, bc), nb, lla, a, aa, b) \<in> Step; ((ad, ae, bb), lla, (a, aa, b), ma, k, w) \<in> Exec\<rbrakk> \<Longrightarrow> max na m = max nb ma \<and> ha = k \<and> va = w
[PROOF STEP]
apply (erule_tac x=la in allE, rotate_tac -1)
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<And>n k w ad ae bb la af ag bc na ll ah ai bd m ha va nb ma a aa b lla. \<lbrakk>\<forall>a aa b ab ac ba l1 ad ae bb. ((a, aa, b), la, (ab, ac, ba), na, l1, ad, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((a, aa, b), la, (ab, ac, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> na = n2 \<and> ad = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); ((ad, ae, bb), la, (af, ag, bc), na, ll, ah, ai, bd) \<in> Step; ((ad, ae, bb), ll, (ah, ai, bd), m, ha, va) \<in> Exec; na \<le> n; m \<le> n; ((ad, ae, bb), la, (af, ag, bc), nb, lla, a, aa, b) \<in> Step; ((ad, ae, bb), lla, (a, aa, b), ma, k, w) \<in> Exec\<rbrakk> \<Longrightarrow> max na m = max nb ma \<and> ha = k \<and> va = w
[PROOF STEP]
apply (erule_tac x=ad in allE, rotate_tac -1)
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<And>n k w ad ae bb la af ag bc na ll ah ai bd m ha va nb ma a aa b lla. \<lbrakk>\<forall>a b aa ab ba l1 ac ae bb. ((ad, a, b), la, (aa, ab, ba), na, l1, ac, ae, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((ad, a, b), la, (aa, ab, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> na = n2 \<and> ac = af \<and> ae = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); ((ad, ae, bb), la, (af, ag, bc), na, ll, ah, ai, bd) \<in> Step; ((ad, ae, bb), ll, (ah, ai, bd), m, ha, va) \<in> Exec; na \<le> n; m \<le> n; ((ad, ae, bb), la, (af, ag, bc), nb, lla, a, aa, b) \<in> Step; ((ad, ae, bb), lla, (a, aa, b), ma, k, w) \<in> Exec\<rbrakk> \<Longrightarrow> max na m = max nb ma \<and> ha = k \<and> va = w
[PROOF STEP]
apply (erule_tac x=ae in allE, rotate_tac -1)
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<And>n k w ad ae bb la af ag bc na ll ah ai bd m ha va nb ma a aa b lla. \<lbrakk>\<forall>b a aa ba l1 ab ac bb. ((ad, ae, b), la, (a, aa, ba), na, l1, ab, ac, bb) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((ad, ae, b), la, (a, aa, ba), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> na = n2 \<and> ab = af \<and> ac = ag \<and> bb = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); ((ad, ae, bb), la, (af, ag, bc), na, ll, ah, ai, bd) \<in> Step; ((ad, ae, bb), ll, (ah, ai, bd), m, ha, va) \<in> Exec; na \<le> n; m \<le> n; ((ad, ae, bb), la, (af, ag, bc), nb, lla, a, aa, b) \<in> Step; ((ad, ae, bb), lla, (a, aa, b), ma, k, w) \<in> Exec\<rbrakk> \<Longrightarrow> max na m = max nb ma \<and> ha = k \<and> va = w
[PROOF STEP]
apply (erule_tac x=bb in allE, rotate_tac -1)
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<And>n k w ad ae bb la af ag bc na ll ah ai bd m ha va nb ma a aa b lla. \<lbrakk>\<forall>a aa b l1 ab ac ba. ((ad, ae, bb), la, (a, aa, b), na, l1, ab, ac, ba) \<in> Step \<longrightarrow> (\<forall>n2 l2 af ag bc. ((ad, ae, bb), la, (a, aa, b), n2, l2, af, ag, bc) \<in> Step \<longrightarrow> na = n2 \<and> ab = af \<and> ac = ag \<and> ba = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); ((ad, ae, bb), la, (af, ag, bc), na, ll, ah, ai, bd) \<in> Step; ((ad, ae, bb), ll, (ah, ai, bd), m, ha, va) \<in> Exec; na \<le> n; m \<le> n; ((ad, ae, bb), la, (af, ag, bc), nb, lla, a, aa, b) \<in> Step; ((ad, ae, bb), lla, (a, aa, b), ma, k, w) \<in> Exec\<rbrakk> \<Longrightarrow> max na m = max nb ma \<and> ha = k \<and> va = w
[PROOF STEP]
apply (erule_tac x=af in allE, rotate_tac -1)
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<And>n k w ad ae bb la af ag bc na ll ah ai bd m ha va nb ma a aa b lla. \<lbrakk>\<forall>a b l1 aa ab ba. ((ad, ae, bb), la, (af, a, b), na, l1, aa, ab, ba) \<in> Step \<longrightarrow> (\<forall>n2 l2 ac ag bc. ((ad, ae, bb), la, (af, a, b), n2, l2, ac, ag, bc) \<in> Step \<longrightarrow> na = n2 \<and> aa = ac \<and> ab = ag \<and> ba = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); ((ad, ae, bb), la, (af, ag, bc), na, ll, ah, ai, bd) \<in> Step; ((ad, ae, bb), ll, (ah, ai, bd), m, ha, va) \<in> Exec; na \<le> n; m \<le> n; ((ad, ae, bb), la, (af, ag, bc), nb, lla, a, aa, b) \<in> Step; ((ad, ae, bb), lla, (a, aa, b), ma, k, w) \<in> Exec\<rbrakk> \<Longrightarrow> max na m = max nb ma \<and> ha = k \<and> va = w
[PROOF STEP]
apply (erule_tac x=ag in allE, rotate_tac -1)
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<And>n k w ad ae bb la af ag bc na ll ah ai bd m ha va nb ma a aa b lla. \<lbrakk>\<forall>b l1 a aa ba. ((ad, ae, bb), la, (af, ag, b), na, l1, a, aa, ba) \<in> Step \<longrightarrow> (\<forall>n2 l2 ab ac bc. ((ad, ae, bb), la, (af, ag, b), n2, l2, ab, ac, bc) \<in> Step \<longrightarrow> na = n2 \<and> a = ab \<and> aa = ac \<and> ba = bc \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); ((ad, ae, bb), la, (af, ag, bc), na, ll, ah, ai, bd) \<in> Step; ((ad, ae, bb), ll, (ah, ai, bd), m, ha, va) \<in> Exec; na \<le> n; m \<le> n; ((ad, ae, bb), la, (af, ag, bc), nb, lla, a, aa, b) \<in> Step; ((ad, ae, bb), lla, (a, aa, b), ma, k, w) \<in> Exec\<rbrakk> \<Longrightarrow> max na m = max nb ma \<and> ha = k \<and> va = w
[PROOF STEP]
apply (erule_tac x=bc in allE, rotate_tac -1)
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<And>n k w ad ae bb la af ag bc na ll ah ai bd m ha va nb ma a aa b lla. \<lbrakk>\<forall>l1 a aa b. ((ad, ae, bb), la, (af, ag, bc), na, l1, a, aa, b) \<in> Step \<longrightarrow> (\<forall>n2 l2 ab ac ba. ((ad, ae, bb), la, (af, ag, bc), n2, l2, ab, ac, ba) \<in> Step \<longrightarrow> na = n2 \<and> a = ab \<and> aa = ac \<and> b = ba \<and> l1 = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); ((ad, ae, bb), la, (af, ag, bc), na, ll, ah, ai, bd) \<in> Step; ((ad, ae, bb), ll, (ah, ai, bd), m, ha, va) \<in> Exec; na \<le> n; m \<le> n; ((ad, ae, bb), la, (af, ag, bc), nb, lla, a, aa, b) \<in> Step; ((ad, ae, bb), lla, (a, aa, b), ma, k, w) \<in> Exec\<rbrakk> \<Longrightarrow> max na m = max nb ma \<and> ha = k \<and> va = w
[PROOF STEP]
apply (erule_tac x=ll in allE, rotate_tac -1)
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<And>n k w ad ae bb la af ag bc na ll ah ai bd m ha va nb ma a aa b lla. \<lbrakk>\<forall>a aa b. ((ad, ae, bb), la, (af, ag, bc), na, ll, a, aa, b) \<in> Step \<longrightarrow> (\<forall>n2 l2 ab ac ba. ((ad, ae, bb), la, (af, ag, bc), n2, l2, ab, ac, ba) \<in> Step \<longrightarrow> na = n2 \<and> a = ab \<and> aa = ac \<and> b = ba \<and> ll = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); ((ad, ae, bb), la, (af, ag, bc), na, ll, ah, ai, bd) \<in> Step; ((ad, ae, bb), ll, (ah, ai, bd), m, ha, va) \<in> Exec; na \<le> n; m \<le> n; ((ad, ae, bb), la, (af, ag, bc), nb, lla, a, aa, b) \<in> Step; ((ad, ae, bb), lla, (a, aa, b), ma, k, w) \<in> Exec\<rbrakk> \<Longrightarrow> max na m = max nb ma \<and> ha = k \<and> va = w
[PROOF STEP]
apply (erule_tac x=ah in allE, rotate_tac -1)
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<And>n k w ad ae bb la af ag bc na ll ah ai bd m ha va nb ma a aa b lla. \<lbrakk>\<forall>a b. ((ad, ae, bb), la, (af, ag, bc), na, ll, ah, a, b) \<in> Step \<longrightarrow> (\<forall>n2 l2 aa ab ba. ((ad, ae, bb), la, (af, ag, bc), n2, l2, aa, ab, ba) \<in> Step \<longrightarrow> na = n2 \<and> ah = aa \<and> a = ab \<and> b = ba \<and> ll = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); ((ad, ae, bb), la, (af, ag, bc), na, ll, ah, ai, bd) \<in> Step; ((ad, ae, bb), ll, (ah, ai, bd), m, ha, va) \<in> Exec; na \<le> n; m \<le> n; ((ad, ae, bb), la, (af, ag, bc), nb, lla, a, aa, b) \<in> Step; ((ad, ae, bb), lla, (a, aa, b), ma, k, w) \<in> Exec\<rbrakk> \<Longrightarrow> max na m = max nb ma \<and> ha = k \<and> va = w
[PROOF STEP]
apply (erule_tac x=ai in allE, rotate_tac -1)
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<And>n k w ad ae bb la af ag bc na ll ah ai bd m ha va nb ma a aa b lla. \<lbrakk>\<forall>b. ((ad, ae, bb), la, (af, ag, bc), na, ll, ah, ai, b) \<in> Step \<longrightarrow> (\<forall>n2 l2 a aa ba. ((ad, ae, bb), la, (af, ag, bc), n2, l2, a, aa, ba) \<in> Step \<longrightarrow> na = n2 \<and> ah = a \<and> ai = aa \<and> b = ba \<and> ll = l2); \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); ((ad, ae, bb), la, (af, ag, bc), na, ll, ah, ai, bd) \<in> Step; ((ad, ae, bb), ll, (ah, ai, bd), m, ha, va) \<in> Exec; na \<le> n; m \<le> n; ((ad, ae, bb), la, (af, ag, bc), nb, lla, a, aa, b) \<in> Step; ((ad, ae, bb), lla, (a, aa, b), ma, k, w) \<in> Exec\<rbrakk> \<Longrightarrow> max na m = max nb ma \<and> ha = k \<and> va = w
[PROOF STEP]
apply (erule_tac x=bd in allE, clarsimp)
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<And>n k w ad ae bb la af ag bc na ll ah ai bd m ha va nb ma a aa b lla. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); ((ad, ae, bb), lla, (a, aa, b), m, ha, va) \<in> Exec; nb \<le> n; m \<le> n; ((ad, ae, bb), la, (af, ag, bc), nb, lla, a, aa, b) \<in> Step; ((ad, ae, bb), lla, (a, aa, b), ma, k, w) \<in> Exec; \<forall>n2 l2 a aa b. ((ad, ae, bb), la, (af, ag, bc), n2, l2, a, aa, b) \<in> Step \<longrightarrow> na = n2 \<and> ah = a \<and> ai = aa \<and> bd = b \<and> ll = l2\<rbrakk> \<Longrightarrow> max nb m = max nb ma
[PROOF STEP]
apply (rotate_tac -1)
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<And>n k w ad ae bb la af ag bc na ll ah ai bd m ha va nb ma a aa b lla. \<lbrakk>\<forall>n2 l2 a aa b. ((ad, ae, bb), la, (af, ag, bc), n2, l2, a, aa, b) \<in> Step \<longrightarrow> na = n2 \<and> ah = a \<and> ai = aa \<and> bd = b \<and> ll = l2; \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); ((ad, ae, bb), lla, (a, aa, b), m, ha, va) \<in> Exec; nb \<le> n; m \<le> n; ((ad, ae, bb), la, (af, ag, bc), nb, lla, a, aa, b) \<in> Step; ((ad, ae, bb), lla, (a, aa, b), ma, k, w) \<in> Exec\<rbrakk> \<Longrightarrow> max nb m = max nb ma
[PROOF STEP]
apply (erule_tac x=nb in allE, rotate_tac -1)
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<And>n k w ad ae bb la af ag bc na ll ah ai bd m ha va nb ma a aa b lla. \<lbrakk>\<forall>l2 a aa b. ((ad, ae, bb), la, (af, ag, bc), nb, l2, a, aa, b) \<in> Step \<longrightarrow> na = nb \<and> ah = a \<and> ai = aa \<and> bd = b \<and> ll = l2; \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); ((ad, ae, bb), lla, (a, aa, b), m, ha, va) \<in> Exec; nb \<le> n; m \<le> n; ((ad, ae, bb), la, (af, ag, bc), nb, lla, a, aa, b) \<in> Step; ((ad, ae, bb), lla, (a, aa, b), ma, k, w) \<in> Exec\<rbrakk> \<Longrightarrow> max nb m = max nb ma
[PROOF STEP]
apply (erule_tac x=lla in allE, rotate_tac -1)
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<And>n k w ad ae bb la af ag bc na ll ah ai bd m ha va nb ma a aa b lla. \<lbrakk>\<forall>a aa b. ((ad, ae, bb), la, (af, ag, bc), nb, lla, a, aa, b) \<in> Step \<longrightarrow> na = nb \<and> ah = a \<and> ai = aa \<and> bd = b \<and> ll = lla; \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); ((ad, ae, bb), lla, (a, aa, b), m, ha, va) \<in> Exec; nb \<le> n; m \<le> n; ((ad, ae, bb), la, (af, ag, bc), nb, lla, a, aa, b) \<in> Step; ((ad, ae, bb), lla, (a, aa, b), ma, k, w) \<in> Exec\<rbrakk> \<Longrightarrow> max nb m = max nb ma
[PROOF STEP]
apply (erule_tac x=a in allE, rotate_tac -1)
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<And>n k w ad ae bb la af ag bc na ll ah ai bd m ha va nb ma a aa b lla. \<lbrakk>\<forall>aa b. ((ad, ae, bb), la, (af, ag, bc), nb, lla, a, aa, b) \<in> Step \<longrightarrow> na = nb \<and> ah = a \<and> ai = aa \<and> bd = b \<and> ll = lla; \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); ((ad, ae, bb), lla, (a, aa, b), m, ha, va) \<in> Exec; nb \<le> n; m \<le> n; ((ad, ae, bb), la, (af, ag, bc), nb, lla, a, aa, b) \<in> Step; ((ad, ae, bb), lla, (a, aa, b), ma, k, w) \<in> Exec\<rbrakk> \<Longrightarrow> max nb m = max nb ma
[PROOF STEP]
apply (erule_tac x=aa in allE, rotate_tac -1)
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<And>n k w ad ae bb la af ag bc na ll ah ai bd m ha va nb ma a aa b lla. \<lbrakk>\<forall>b. ((ad, ae, bb), la, (af, ag, bc), nb, lla, a, aa, b) \<in> Step \<longrightarrow> na = nb \<and> ah = a \<and> ai = aa \<and> bd = b \<and> ll = lla; \<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); ((ad, ae, bb), lla, (a, aa, b), m, ha, va) \<in> Exec; nb \<le> n; m \<le> n; ((ad, ae, bb), la, (af, ag, bc), nb, lla, a, aa, b) \<in> Step; ((ad, ae, bb), lla, (a, aa, b), ma, k, w) \<in> Exec\<rbrakk> \<Longrightarrow> max nb m = max nb ma
[PROOF STEP]
apply (erule_tac x=b in allE, clarsimp)
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<And>n k w ad ae bb la af ag bc m ha va nb ma a aa b lla. \<lbrakk>\<forall>n1\<le>n. \<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), n1, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> n1 = n2 \<and> h = k \<and> v = w); ((ad, ae, bb), lla, (a, aa, b), m, ha, va) \<in> Exec; nb \<le> n; m \<le> n; ((ad, ae, bb), la, (af, ag, bc), nb, lla, a, aa, b) \<in> Step; ((ad, ae, bb), lla, (a, aa, b), ma, k, w) \<in> Exec\<rbrakk> \<Longrightarrow> max nb m = max nb ma
[PROOF STEP]
apply (erule_tac x=m in allE, rotate_tac -1, clarsimp)
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<And>n k w ad ae bb la af ag bc m ha va nb ma a aa b lla. \<lbrakk>\<forall>l a aa b ab ac ba h v. ((a, aa, b), l, (ab, ac, ba), m, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), l, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> m = n2 \<and> h = k \<and> v = w); ((ad, ae, bb), lla, (a, aa, b), m, ha, va) \<in> Exec; nb \<le> n; m \<le> n; ((ad, ae, bb), la, (af, ag, bc), nb, lla, a, aa, b) \<in> Step; ((ad, ae, bb), lla, (a, aa, b), ma, k, w) \<in> Exec\<rbrakk> \<Longrightarrow> max nb m = max nb ma
[PROOF STEP]
apply (erule_tac x=lla in allE, rotate_tac -1)
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<And>n k w ad ae bb la af ag bc m ha va nb ma a aa b lla. \<lbrakk>\<forall>a aa b ab ac ba h v. ((a, aa, b), lla, (ab, ac, ba), m, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((a, aa, b), lla, (ab, ac, ba), n2, k, w) \<in> Exec \<longrightarrow> m = n2 \<and> h = k \<and> v = w); ((ad, ae, bb), lla, (a, aa, b), m, ha, va) \<in> Exec; nb \<le> n; m \<le> n; ((ad, ae, bb), la, (af, ag, bc), nb, lla, a, aa, b) \<in> Step; ((ad, ae, bb), lla, (a, aa, b), ma, k, w) \<in> Exec\<rbrakk> \<Longrightarrow> max nb m = max nb ma
[PROOF STEP]
apply (erule_tac x=ad in allE, rotate_tac -1)
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<And>n k w ad ae bb la af ag bc m ha va nb ma a aa b lla. \<lbrakk>\<forall>a b aa ab ba h v. ((ad, a, b), lla, (aa, ab, ba), m, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((ad, a, b), lla, (aa, ab, ba), n2, k, w) \<in> Exec \<longrightarrow> m = n2 \<and> h = k \<and> v = w); ((ad, ae, bb), lla, (a, aa, b), m, ha, va) \<in> Exec; nb \<le> n; m \<le> n; ((ad, ae, bb), la, (af, ag, bc), nb, lla, a, aa, b) \<in> Step; ((ad, ae, bb), lla, (a, aa, b), ma, k, w) \<in> Exec\<rbrakk> \<Longrightarrow> max nb m = max nb ma
[PROOF STEP]
apply (erule_tac x=ae in allE, rotate_tac -1)
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<And>n k w ad ae bb la af ag bc m ha va nb ma a aa b lla. \<lbrakk>\<forall>b a aa ba h v. ((ad, ae, b), lla, (a, aa, ba), m, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((ad, ae, b), lla, (a, aa, ba), n2, k, w) \<in> Exec \<longrightarrow> m = n2 \<and> h = k \<and> v = w); ((ad, ae, bb), lla, (a, aa, b), m, ha, va) \<in> Exec; nb \<le> n; m \<le> n; ((ad, ae, bb), la, (af, ag, bc), nb, lla, a, aa, b) \<in> Step; ((ad, ae, bb), lla, (a, aa, b), ma, k, w) \<in> Exec\<rbrakk> \<Longrightarrow> max nb m = max nb ma
[PROOF STEP]
apply (erule_tac x=bb in allE, rotate_tac -1)
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<And>n k w ad ae bb la af ag bc m ha va nb ma a aa b lla. \<lbrakk>\<forall>a aa b h v. ((ad, ae, bb), lla, (a, aa, b), m, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((ad, ae, bb), lla, (a, aa, b), n2, k, w) \<in> Exec \<longrightarrow> m = n2 \<and> h = k \<and> v = w); ((ad, ae, bb), lla, (a, aa, b), m, ha, va) \<in> Exec; nb \<le> n; m \<le> n; ((ad, ae, bb), la, (af, ag, bc), nb, lla, a, aa, b) \<in> Step; ((ad, ae, bb), lla, (a, aa, b), ma, k, w) \<in> Exec\<rbrakk> \<Longrightarrow> max nb m = max nb ma
[PROOF STEP]
apply (erule_tac x=a in allE, rotate_tac -1)
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<And>n k w ad ae bb la af ag bc m ha va nb ma a aa b lla. \<lbrakk>\<forall>aa b h v. ((ad, ae, bb), lla, (a, aa, b), m, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((ad, ae, bb), lla, (a, aa, b), n2, k, w) \<in> Exec \<longrightarrow> m = n2 \<and> h = k \<and> v = w); ((ad, ae, bb), lla, (a, aa, b), m, ha, va) \<in> Exec; nb \<le> n; m \<le> n; ((ad, ae, bb), la, (af, ag, bc), nb, lla, a, aa, b) \<in> Step; ((ad, ae, bb), lla, (a, aa, b), ma, k, w) \<in> Exec\<rbrakk> \<Longrightarrow> max nb m = max nb ma
[PROOF STEP]
apply (erule_tac x=aa in allE, rotate_tac -1)
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<And>n k w ad ae bb la af ag bc m ha va nb ma a aa b lla. \<lbrakk>\<forall>b h v. ((ad, ae, bb), lla, (a, aa, b), m, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((ad, ae, bb), lla, (a, aa, b), n2, k, w) \<in> Exec \<longrightarrow> m = n2 \<and> h = k \<and> v = w); ((ad, ae, bb), lla, (a, aa, b), m, ha, va) \<in> Exec; nb \<le> n; m \<le> n; ((ad, ae, bb), la, (af, ag, bc), nb, lla, a, aa, b) \<in> Step; ((ad, ae, bb), lla, (a, aa, b), ma, k, w) \<in> Exec\<rbrakk> \<Longrightarrow> max nb m = max nb ma
[PROOF STEP]
apply (erule_tac x=b in allE, rotate_tac -1)
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<And>n k w ad ae bb la af ag bc m ha va nb ma a aa b lla. \<lbrakk>\<forall>h v. ((ad, ae, bb), lla, (a, aa, b), m, h, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((ad, ae, bb), lla, (a, aa, b), n2, k, w) \<in> Exec \<longrightarrow> m = n2 \<and> h = k \<and> v = w); ((ad, ae, bb), lla, (a, aa, b), m, ha, va) \<in> Exec; nb \<le> n; m \<le> n; ((ad, ae, bb), la, (af, ag, bc), nb, lla, a, aa, b) \<in> Step; ((ad, ae, bb), lla, (a, aa, b), ma, k, w) \<in> Exec\<rbrakk> \<Longrightarrow> max nb m = max nb ma
[PROOF STEP]
apply (erule_tac x=ha in allE, rotate_tac -1)
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<And>n k w ad ae bb la af ag bc m ha va nb ma a aa b lla. \<lbrakk>\<forall>v. ((ad, ae, bb), lla, (a, aa, b), m, ha, v) \<in> Exec \<longrightarrow> (\<forall>n2 k w. ((ad, ae, bb), lla, (a, aa, b), n2, k, w) \<in> Exec \<longrightarrow> m = n2 \<and> ha = k \<and> v = w); ((ad, ae, bb), lla, (a, aa, b), m, ha, va) \<in> Exec; nb \<le> n; m \<le> n; ((ad, ae, bb), la, (af, ag, bc), nb, lla, a, aa, b) \<in> Step; ((ad, ae, bb), lla, (a, aa, b), ma, k, w) \<in> Exec\<rbrakk> \<Longrightarrow> max nb m = max nb ma
[PROOF STEP]
apply (erule_tac x=va in allE, rotate_tac -1, clarsimp)
[PROOF STATE]
proof (prove)
goal:
No subgoals!
[PROOF STEP]
done