[STATEMENT]
lemma (in Update) update_to_assert_bound_no_lhs: assumes pivot: "Pivot eqlvar (pivot :: var \<Rightarrow> var \<Rightarrow> ('i,'a) state \<Rightarrow> ('i,'a) state)"
  shows "AssertBoundNoLhs assert_bound"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. AssertBoundNoLhs assert_bound
[PROOF STEP]
proof
[PROOF STATE]
proof (state)
goal (7 subgoals):
 1. \<And>s a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s\<rbrakk> \<Longrightarrow> \<T> (assert_bound a s) = \<T> s
 2. \<And>s a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; \<not> \<U> (assert_bound a s)\<rbrakk> \<Longrightarrow> \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s (assert_bound a s) \<and> \<diamond> (assert_bound a s)
 3. \<And>s ats a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; (snd ` ats) \<doteq> \<B> s\<rbrakk> \<Longrightarrow> (snd ` (ats \<union> {a})) \<doteq> \<B> (assert_bound a s)
 4. \<And>s ats a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; ats \<Turnstile>\<^sub>i \<B>\<I> s\<rbrakk> \<Longrightarrow> insert a ats \<Turnstile>\<^sub>i \<B>\<I> (assert_bound a s)
 5. \<And>s as a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; index_valid as s; \<U> (assert_bound a s)\<rbrakk> \<Longrightarrow> minimal_unsat_state_core (assert_bound a s)
 6. \<And>s a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s\<rbrakk> \<Longrightarrow> \<nabla> (assert_bound a s)
 7. \<And>s as a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; index_valid as s\<rbrakk> \<Longrightarrow> index_valid (insert a as) (assert_bound a s)
[PROOF STEP]
fix s::"('i,'a) state" and a
[PROOF STATE]
proof (state)
goal (7 subgoals):
 1. \<And>s a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s\<rbrakk> \<Longrightarrow> \<T> (assert_bound a s) = \<T> s
 2. \<And>s a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; \<not> \<U> (assert_bound a s)\<rbrakk> \<Longrightarrow> \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s (assert_bound a s) \<and> \<diamond> (assert_bound a s)
 3. \<And>s ats a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; (snd ` ats) \<doteq> \<B> s\<rbrakk> \<Longrightarrow> (snd ` (ats \<union> {a})) \<doteq> \<B> (assert_bound a s)
 4. \<And>s ats a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; ats \<Turnstile>\<^sub>i \<B>\<I> s\<rbrakk> \<Longrightarrow> insert a ats \<Turnstile>\<^sub>i \<B>\<I> (assert_bound a s)
 5. \<And>s as a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; index_valid as s; \<U> (assert_bound a s)\<rbrakk> \<Longrightarrow> minimal_unsat_state_core (assert_bound a s)
 6. \<And>s a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s\<rbrakk> \<Longrightarrow> \<nabla> (assert_bound a s)
 7. \<And>s as a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; index_valid as s\<rbrakk> \<Longrightarrow> index_valid (insert a as) (assert_bound a s)
[PROOF STEP]
assume "\<not> \<U> s" "\<triangle> (\<T> s)" "\<nabla> s"
[PROOF STATE]
proof (state)
this:
\<not> \<U> s
\<triangle> (\<T> s)
\<nabla> s

goal (7 subgoals):
 1. \<And>s a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s\<rbrakk> \<Longrightarrow> \<T> (assert_bound a s) = \<T> s
 2. \<And>s a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; \<not> \<U> (assert_bound a s)\<rbrakk> \<Longrightarrow> \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s (assert_bound a s) \<and> \<diamond> (assert_bound a s)
 3. \<And>s ats a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; (snd ` ats) \<doteq> \<B> s\<rbrakk> \<Longrightarrow> (snd ` (ats \<union> {a})) \<doteq> \<B> (assert_bound a s)
 4. \<And>s ats a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; ats \<Turnstile>\<^sub>i \<B>\<I> s\<rbrakk> \<Longrightarrow> insert a ats \<Turnstile>\<^sub>i \<B>\<I> (assert_bound a s)
 5. \<And>s as a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; index_valid as s; \<U> (assert_bound a s)\<rbrakk> \<Longrightarrow> minimal_unsat_state_core (assert_bound a s)
 6. \<And>s a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s\<rbrakk> \<Longrightarrow> \<nabla> (assert_bound a s)
 7. \<And>s as a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; index_valid as s\<rbrakk> \<Longrightarrow> index_valid (insert a as) (assert_bound a s)
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
\<not> \<U> s
\<triangle> (\<T> s)
\<nabla> s
[PROOF STEP]
show "\<T> (assert_bound a s) = \<T> s"
[PROOF STATE]
proof (prove)
using this:
\<not> \<U> s
\<triangle> (\<T> s)
\<nabla> s

goal (1 subgoal):
 1. \<T> (assert_bound a s) = \<T> s
[PROOF STEP]
by (cases a, cases "snd a") (auto simp add: Let_def update_tableau_id tableau_valuated_def)
[PROOF STATE]
proof (state)
this:
\<T> (assert_bound a s) = \<T> s

goal (6 subgoals):
 1. \<And>s a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; \<not> \<U> (assert_bound a s)\<rbrakk> \<Longrightarrow> \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s (assert_bound a s) \<and> \<diamond> (assert_bound a s)
 2. \<And>s ats a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; (snd ` ats) \<doteq> \<B> s\<rbrakk> \<Longrightarrow> (snd ` (ats \<union> {a})) \<doteq> \<B> (assert_bound a s)
 3. \<And>s ats a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; ats \<Turnstile>\<^sub>i \<B>\<I> s\<rbrakk> \<Longrightarrow> insert a ats \<Turnstile>\<^sub>i \<B>\<I> (assert_bound a s)
 4. \<And>s as a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; index_valid as s; \<U> (assert_bound a s)\<rbrakk> \<Longrightarrow> minimal_unsat_state_core (assert_bound a s)
 5. \<And>s a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s\<rbrakk> \<Longrightarrow> \<nabla> (assert_bound a s)
 6. \<And>s as a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; index_valid as s\<rbrakk> \<Longrightarrow> index_valid (insert a as) (assert_bound a s)
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (6 subgoals):
 1. \<And>s a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; \<not> \<U> (assert_bound a s)\<rbrakk> \<Longrightarrow> \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s (assert_bound a s) \<and> \<diamond> (assert_bound a s)
 2. \<And>s ats a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; (snd ` ats) \<doteq> \<B> s\<rbrakk> \<Longrightarrow> (snd ` (ats \<union> {a})) \<doteq> \<B> (assert_bound a s)
 3. \<And>s ats a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; ats \<Turnstile>\<^sub>i \<B>\<I> s\<rbrakk> \<Longrightarrow> insert a ats \<Turnstile>\<^sub>i \<B>\<I> (assert_bound a s)
 4. \<And>s as a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; index_valid as s; \<U> (assert_bound a s)\<rbrakk> \<Longrightarrow> minimal_unsat_state_core (assert_bound a s)
 5. \<And>s a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s\<rbrakk> \<Longrightarrow> \<nabla> (assert_bound a s)
 6. \<And>s as a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; index_valid as s\<rbrakk> \<Longrightarrow> index_valid (insert a as) (assert_bound a s)
[PROOF STEP]
fix s::"('i,'a) state" and ia and as
[PROOF STATE]
proof (state)
goal (6 subgoals):
 1. \<And>s a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; \<not> \<U> (assert_bound a s)\<rbrakk> \<Longrightarrow> \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s (assert_bound a s) \<and> \<diamond> (assert_bound a s)
 2. \<And>s ats a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; (snd ` ats) \<doteq> \<B> s\<rbrakk> \<Longrightarrow> (snd ` (ats \<union> {a})) \<doteq> \<B> (assert_bound a s)
 3. \<And>s ats a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; ats \<Turnstile>\<^sub>i \<B>\<I> s\<rbrakk> \<Longrightarrow> insert a ats \<Turnstile>\<^sub>i \<B>\<I> (assert_bound a s)
 4. \<And>s as a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; index_valid as s; \<U> (assert_bound a s)\<rbrakk> \<Longrightarrow> minimal_unsat_state_core (assert_bound a s)
 5. \<And>s a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s\<rbrakk> \<Longrightarrow> \<nabla> (assert_bound a s)
 6. \<And>s as a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; index_valid as s\<rbrakk> \<Longrightarrow> index_valid (insert a as) (assert_bound a s)
[PROOF STEP]
assume *: "\<not> \<U> s" "\<triangle> (\<T> s)" "\<nabla> s" and **: "\<U> (assert_bound ia s)"
    and index: "index_valid as s"
    and consistent: "\<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s" "\<diamond> s"
[PROOF STATE]
proof (state)
this:
\<not> \<U> s
\<triangle> (\<T> s)
\<nabla> s
\<U> (assert_bound ia s)
index_valid as s
\<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s
\<diamond> s

goal (6 subgoals):
 1. \<And>s a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; \<not> \<U> (assert_bound a s)\<rbrakk> \<Longrightarrow> \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s (assert_bound a s) \<and> \<diamond> (assert_bound a s)
 2. \<And>s ats a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; (snd ` ats) \<doteq> \<B> s\<rbrakk> \<Longrightarrow> (snd ` (ats \<union> {a})) \<doteq> \<B> (assert_bound a s)
 3. \<And>s ats a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; ats \<Turnstile>\<^sub>i \<B>\<I> s\<rbrakk> \<Longrightarrow> insert a ats \<Turnstile>\<^sub>i \<B>\<I> (assert_bound a s)
 4. \<And>s as a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; index_valid as s; \<U> (assert_bound a s)\<rbrakk> \<Longrightarrow> minimal_unsat_state_core (assert_bound a s)
 5. \<And>s a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s\<rbrakk> \<Longrightarrow> \<nabla> (assert_bound a s)
 6. \<And>s as a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; index_valid as s\<rbrakk> \<Longrightarrow> index_valid (insert a as) (assert_bound a s)
[PROOF STEP]
obtain i a where ia: "ia = (i,a)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (\<And>i a. ia = (i, a) \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by force
[PROOF STATE]
proof (state)
this:
ia = (i, a)

goal (6 subgoals):
 1. \<And>s a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; \<not> \<U> (assert_bound a s)\<rbrakk> \<Longrightarrow> \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s (assert_bound a s) \<and> \<diamond> (assert_bound a s)
 2. \<And>s ats a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; (snd ` ats) \<doteq> \<B> s\<rbrakk> \<Longrightarrow> (snd ` (ats \<union> {a})) \<doteq> \<B> (assert_bound a s)
 3. \<And>s ats a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; ats \<Turnstile>\<^sub>i \<B>\<I> s\<rbrakk> \<Longrightarrow> insert a ats \<Turnstile>\<^sub>i \<B>\<I> (assert_bound a s)
 4. \<And>s as a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; index_valid as s; \<U> (assert_bound a s)\<rbrakk> \<Longrightarrow> minimal_unsat_state_core (assert_bound a s)
 5. \<And>s a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s\<rbrakk> \<Longrightarrow> \<nabla> (assert_bound a s)
 6. \<And>s as a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; index_valid as s\<rbrakk> \<Longrightarrow> index_valid (insert a as) (assert_bound a s)
[PROOF STEP]
let ?modelU = "\<lambda> lt UB UI s v x c i. UB s x = Some c \<longrightarrow> UI s x = i \<longrightarrow> i \<in> set (the (\<U>\<^sub>c s)) \<longrightarrow> (lt (v x) c \<or> v x = c)"
[PROOF STATE]
proof (state)
goal (6 subgoals):
 1. \<And>s a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; \<not> \<U> (assert_bound a s)\<rbrakk> \<Longrightarrow> \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s (assert_bound a s) \<and> \<diamond> (assert_bound a s)
 2. \<And>s ats a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; (snd ` ats) \<doteq> \<B> s\<rbrakk> \<Longrightarrow> (snd ` (ats \<union> {a})) \<doteq> \<B> (assert_bound a s)
 3. \<And>s ats a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; ats \<Turnstile>\<^sub>i \<B>\<I> s\<rbrakk> \<Longrightarrow> insert a ats \<Turnstile>\<^sub>i \<B>\<I> (assert_bound a s)
 4. \<And>s as a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; index_valid as s; \<U> (assert_bound a s)\<rbrakk> \<Longrightarrow> minimal_unsat_state_core (assert_bound a s)
 5. \<And>s a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s\<rbrakk> \<Longrightarrow> \<nabla> (assert_bound a s)
 6. \<And>s as a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; index_valid as s\<rbrakk> \<Longrightarrow> index_valid (insert a as) (assert_bound a s)
[PROOF STEP]
let ?modelL = "\<lambda> lt LB LI s v x c i. LB s x = Some c \<longrightarrow> LI s x = i \<longrightarrow> i \<in> set (the (\<U>\<^sub>c s)) \<longrightarrow> (lt c (v x) \<or> c = v x)"
[PROOF STATE]
proof (state)
goal (6 subgoals):
 1. \<And>s a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; \<not> \<U> (assert_bound a s)\<rbrakk> \<Longrightarrow> \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s (assert_bound a s) \<and> \<diamond> (assert_bound a s)
 2. \<And>s ats a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; (snd ` ats) \<doteq> \<B> s\<rbrakk> \<Longrightarrow> (snd ` (ats \<union> {a})) \<doteq> \<B> (assert_bound a s)
 3. \<And>s ats a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; ats \<Turnstile>\<^sub>i \<B>\<I> s\<rbrakk> \<Longrightarrow> insert a ats \<Turnstile>\<^sub>i \<B>\<I> (assert_bound a s)
 4. \<And>s as a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; index_valid as s; \<U> (assert_bound a s)\<rbrakk> \<Longrightarrow> minimal_unsat_state_core (assert_bound a s)
 5. \<And>s a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s\<rbrakk> \<Longrightarrow> \<nabla> (assert_bound a s)
 6. \<And>s as a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; index_valid as s\<rbrakk> \<Longrightarrow> index_valid (insert a as) (assert_bound a s)
[PROOF STEP]
let ?modelIU = "\<lambda> I lt UB UI s v x c i. UB s x = Some c \<longrightarrow> UI s x = i \<longrightarrow> i \<in> I \<longrightarrow> (v x = c)"
[PROOF STATE]
proof (state)
goal (6 subgoals):
 1. \<And>s a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; \<not> \<U> (assert_bound a s)\<rbrakk> \<Longrightarrow> \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s (assert_bound a s) \<and> \<diamond> (assert_bound a s)
 2. \<And>s ats a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; (snd ` ats) \<doteq> \<B> s\<rbrakk> \<Longrightarrow> (snd ` (ats \<union> {a})) \<doteq> \<B> (assert_bound a s)
 3. \<And>s ats a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; ats \<Turnstile>\<^sub>i \<B>\<I> s\<rbrakk> \<Longrightarrow> insert a ats \<Turnstile>\<^sub>i \<B>\<I> (assert_bound a s)
 4. \<And>s as a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; index_valid as s; \<U> (assert_bound a s)\<rbrakk> \<Longrightarrow> minimal_unsat_state_core (assert_bound a s)
 5. \<And>s a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s\<rbrakk> \<Longrightarrow> \<nabla> (assert_bound a s)
 6. \<And>s as a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; index_valid as s\<rbrakk> \<Longrightarrow> index_valid (insert a as) (assert_bound a s)
[PROOF STEP]
let ?modelIL = "\<lambda> I lt LB LI s v x c i. LB s x = Some c \<longrightarrow> LI s x = i \<longrightarrow> i \<in> I \<longrightarrow> (v x = c)"
[PROOF STATE]
proof (state)
goal (6 subgoals):
 1. \<And>s a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; \<not> \<U> (assert_bound a s)\<rbrakk> \<Longrightarrow> \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s (assert_bound a s) \<and> \<diamond> (assert_bound a s)
 2. \<And>s ats a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; (snd ` ats) \<doteq> \<B> s\<rbrakk> \<Longrightarrow> (snd ` (ats \<union> {a})) \<doteq> \<B> (assert_bound a s)
 3. \<And>s ats a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; ats \<Turnstile>\<^sub>i \<B>\<I> s\<rbrakk> \<Longrightarrow> insert a ats \<Turnstile>\<^sub>i \<B>\<I> (assert_bound a s)
 4. \<And>s as a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; index_valid as s; \<U> (assert_bound a s)\<rbrakk> \<Longrightarrow> minimal_unsat_state_core (assert_bound a s)
 5. \<And>s a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s\<rbrakk> \<Longrightarrow> \<nabla> (assert_bound a s)
 6. \<And>s as a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; index_valid as s\<rbrakk> \<Longrightarrow> index_valid (insert a as) (assert_bound a s)
[PROOF STEP]
let ?P' = "\<lambda> lt UBI LBI UB LB UBI_upd UI LI LE GE s.
    \<U> s \<longrightarrow> (set (the (\<U>\<^sub>c s)) \<subseteq> indices_state s \<and> \<not> (\<exists>v. (v \<Turnstile>\<^sub>t \<T> s
      \<and> (\<forall> x c i. ?modelU lt UB UI s v x c i)
      \<and> (\<forall> x c i. ?modelL lt LB LI s v x c i))))
      \<and> (distinct_indices_state s \<longrightarrow> (\<forall> I. I \<subset> set (the (\<U>\<^sub>c s)) \<longrightarrow> (\<exists> v. v \<Turnstile>\<^sub>t \<T> s \<and>
            (\<forall> x c i. ?modelIU I lt UB UI s v x c i) \<and> (\<forall> x c i. ?modelIL I lt LB LI s v x c i))))"
[PROOF STATE]
proof (state)
goal (6 subgoals):
 1. \<And>s a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; \<not> \<U> (assert_bound a s)\<rbrakk> \<Longrightarrow> \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s (assert_bound a s) \<and> \<diamond> (assert_bound a s)
 2. \<And>s ats a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; (snd ` ats) \<doteq> \<B> s\<rbrakk> \<Longrightarrow> (snd ` (ats \<union> {a})) \<doteq> \<B> (assert_bound a s)
 3. \<And>s ats a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; ats \<Turnstile>\<^sub>i \<B>\<I> s\<rbrakk> \<Longrightarrow> insert a ats \<Turnstile>\<^sub>i \<B>\<I> (assert_bound a s)
 4. \<And>s as a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; index_valid as s; \<U> (assert_bound a s)\<rbrakk> \<Longrightarrow> minimal_unsat_state_core (assert_bound a s)
 5. \<And>s a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s\<rbrakk> \<Longrightarrow> \<nabla> (assert_bound a s)
 6. \<And>s as a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; index_valid as s\<rbrakk> \<Longrightarrow> index_valid (insert a as) (assert_bound a s)
[PROOF STEP]
have "\<U> (assert_bound ia s) \<longrightarrow> (unsat_state_core (assert_bound ia s) \<and>
    (distinct_indices_state (assert_bound ia s) \<longrightarrow> subsets_sat_core (assert_bound ia s)))" (is "?P (assert_bound ia s)")
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<U> (assert_bound ia s) \<longrightarrow> unsat_state_core (assert_bound ia s) \<and> (distinct_indices_state (assert_bound ia s) \<longrightarrow> subsets_sat_core (assert_bound ia s))
[PROOF STEP]
unfolding ia
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<U> (assert_bound (i, a) s) \<longrightarrow> unsat_state_core (assert_bound (i, a) s) \<and> (distinct_indices_state (assert_bound (i, a) s) \<longrightarrow> subsets_sat_core (assert_bound (i, a) s))
[PROOF STEP]
proof (rule assert_bound_cases[of _ _ ?P'])
[PROOF STATE]
proof (state)
goal (7 subgoals):
 1. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x)\<rbrakk> \<Longrightarrow> \<U> s \<longrightarrow> (set (the (\<U>\<^sub>c s)) \<subseteq> indices_state s \<and> (\<nexists>v. v \<Turnstile>\<^sub>t \<T> s \<and> (\<forall>x c i. UB dir s x = Some c \<longrightarrow> UI dir s x = i \<longrightarrow> i \<in> set (the (\<U>\<^sub>c s)) \<longrightarrow> lt dir (v x) c \<or> v x = c) \<and> (\<forall>x c i. LB dir s x = Some c \<longrightarrow> LI dir s x = i \<longrightarrow> i \<in> set (the (\<U>\<^sub>c s)) \<longrightarrow> lt dir c (v x) \<or> c = v x))) \<and> (distinct_indices_state s \<longrightarrow> (\<forall>I\<subset>set (the (\<U>\<^sub>c s)). \<exists>v. v \<Turnstile>\<^sub>t \<T> s \<and> (\<forall>x c i. UB dir s x = Some c \<longrightarrow> UI dir s x = i \<longrightarrow> i \<in> I \<longrightarrow> v x = c) \<and> (\<forall>x c i. LB dir s x = Some c \<longrightarrow> LI dir s x = i \<longrightarrow> i \<in> I \<longrightarrow> v x = c)))
 2. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> \<U> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) \<longrightarrow> (set (the (\<U>\<^sub>c (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)))) \<subseteq> indices_state (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) \<and> (\<nexists>v. v \<Turnstile>\<^sub>t \<T> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) \<and> (\<forall>xa ca ia. UB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> UI dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)))) \<longrightarrow> lt dir (v xa) ca \<or> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> LI dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)))) \<longrightarrow> lt dir ca (v xa) \<or> ca = v xa))) \<and> (distinct_indices_state (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) \<longrightarrow> (\<forall>I\<subset>set (the (\<U>\<^sub>c (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)))). \<exists>v. v \<Turnstile>\<^sub>t \<T> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) \<and> (\<forall>xa ca ia. UB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> UI dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> LI dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca)))
 3. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<notin> lvars (\<T> s); lt dir c (\<langle>\<V> s\<rangle> x); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> \<U> (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) \<longrightarrow> (set (the (\<U>\<^sub>c (update x c (update\<B>\<I> (UBI_upd dir) i x c s)))) \<subseteq> indices_state (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) \<and> (\<nexists>v. v \<Turnstile>\<^sub>t \<T> (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) \<and> (\<forall>xa ca ia. UB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> UI dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (update x c (update\<B>\<I> (UBI_upd dir) i x c s)))) \<longrightarrow> lt dir (v xa) ca \<or> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> LI dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (update x c (update\<B>\<I> (UBI_upd dir) i x c s)))) \<longrightarrow> lt dir ca (v xa) \<or> ca = v xa))) \<and> (distinct_indices_state (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) \<longrightarrow> (\<forall>I\<subset>set (the (\<U>\<^sub>c (update x c (update\<B>\<I> (UBI_upd dir) i x c s)))). \<exists>v. v \<Turnstile>\<^sub>t \<T> (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) \<and> (\<forall>xa ca ia. UB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> UI dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> LI dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca)))
 4. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<in> lvars (\<T> s); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> \<U> (update\<B>\<I> (UBI_upd dir) i x c s) \<longrightarrow> (set (the (\<U>\<^sub>c (update\<B>\<I> (UBI_upd dir) i x c s))) \<subseteq> indices_state (update\<B>\<I> (UBI_upd dir) i x c s) \<and> (\<nexists>v. v \<Turnstile>\<^sub>t \<T> (update\<B>\<I> (UBI_upd dir) i x c s) \<and> (\<forall>xa ca ia. UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> UI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (update\<B>\<I> (UBI_upd dir) i x c s))) \<longrightarrow> lt dir (v xa) ca \<or> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> LI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (update\<B>\<I> (UBI_upd dir) i x c s))) \<longrightarrow> lt dir ca (v xa) \<or> ca = v xa))) \<and> (distinct_indices_state (update\<B>\<I> (UBI_upd dir) i x c s) \<longrightarrow> (\<forall>I\<subset>set (the (\<U>\<^sub>c (update\<B>\<I> (UBI_upd dir) i x c s))). \<exists>v. v \<Turnstile>\<^sub>t \<T> (update\<B>\<I> (UBI_upd dir) i x c s) \<and> (\<forall>xa ca ia. UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> UI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> LI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca)))
 5. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x); \<not> lt dir c (\<langle>\<V> s\<rangle> x)\<rbrakk> \<Longrightarrow> \<U> (update\<B>\<I> (UBI_upd dir) i x c s) \<longrightarrow> (set (the (\<U>\<^sub>c (update\<B>\<I> (UBI_upd dir) i x c s))) \<subseteq> indices_state (update\<B>\<I> (UBI_upd dir) i x c s) \<and> (\<nexists>v. v \<Turnstile>\<^sub>t \<T> (update\<B>\<I> (UBI_upd dir) i x c s) \<and> (\<forall>xa ca ia. UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> UI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (update\<B>\<I> (UBI_upd dir) i x c s))) \<longrightarrow> lt dir (v xa) ca \<or> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> LI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (update\<B>\<I> (UBI_upd dir) i x c s))) \<longrightarrow> lt dir ca (v xa) \<or> ca = v xa))) \<and> (distinct_indices_state (update\<B>\<I> (UBI_upd dir) i x c s) \<longrightarrow> (\<forall>I\<subset>set (the (\<U>\<^sub>c (update\<B>\<I> (UBI_upd dir) i x c s))). \<exists>v. v \<Turnstile>\<^sub>t \<T> (update\<B>\<I> (UBI_upd dir) i x c s) \<and> (\<forall>xa ca ia. UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> UI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> LI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca)))
 6. \<And>s. (\<U> s \<longrightarrow> unsat_state_core s \<and> (distinct_indices_state s \<longrightarrow> subsets_sat_core s)) = (\<U> s \<longrightarrow> (set (the (\<U>\<^sub>c s)) \<subseteq> indices_state s \<and> (\<nexists>v. v \<Turnstile>\<^sub>t \<T> s \<and> (\<forall>x c i. \<B>\<^sub>l s x = Some c \<longrightarrow> \<I>\<^sub>l s x = i \<longrightarrow> i \<in> set (the (\<U>\<^sub>c s)) \<longrightarrow> c < v x \<or> v x = c) \<and> (\<forall>x c i. \<B>\<^sub>u s x = Some c \<longrightarrow> \<I>\<^sub>u s x = i \<longrightarrow> i \<in> set (the (\<U>\<^sub>c s)) \<longrightarrow> v x < c \<or> c = v x))) \<and> (distinct_indices_state s \<longrightarrow> (\<forall>I\<subset>set (the (\<U>\<^sub>c s)). \<exists>v. v \<Turnstile>\<^sub>t \<T> s \<and> (\<forall>x c i. \<B>\<^sub>l s x = Some c \<longrightarrow> \<I>\<^sub>l s x = i \<longrightarrow> i \<in> I \<longrightarrow> v x = c) \<and> (\<forall>x c i. \<B>\<^sub>u s x = Some c \<longrightarrow> \<I>\<^sub>u s x = i \<longrightarrow> i \<in> I \<longrightarrow> v x = c))))
 7. \<And>s. (\<U> s \<longrightarrow> unsat_state_core s \<and> (distinct_indices_state s \<longrightarrow> subsets_sat_core s)) = (\<U> s \<longrightarrow> (set (the (\<U>\<^sub>c s)) \<subseteq> indices_state s \<and> (\<nexists>v. v \<Turnstile>\<^sub>t \<T> s \<and> (\<forall>x c i. \<B>\<^sub>u s x = Some c \<longrightarrow> \<I>\<^sub>u s x = i \<longrightarrow> i \<in> set (the (\<U>\<^sub>c s)) \<longrightarrow> v x < c \<or> v x = c) \<and> (\<forall>x c i. \<B>\<^sub>l s x = Some c \<longrightarrow> \<I>\<^sub>l s x = i \<longrightarrow> i \<in> set (the (\<U>\<^sub>c s)) \<longrightarrow> c < v x \<or> c = v x))) \<and> (distinct_indices_state s \<longrightarrow> (\<forall>I\<subset>set (the (\<U>\<^sub>c s)). \<exists>v. v \<Turnstile>\<^sub>t \<T> s \<and> (\<forall>x c i. \<B>\<^sub>u s x = Some c \<longrightarrow> \<I>\<^sub>u s x = i \<longrightarrow> i \<in> I \<longrightarrow> v x = c) \<and> (\<forall>x c i. \<B>\<^sub>l s x = Some c \<longrightarrow> \<I>\<^sub>l s x = i \<longrightarrow> i \<in> I \<longrightarrow> v x = c))))
[PROOF STEP]
fix s' :: "('i,'a) state"
[PROOF STATE]
proof (state)
goal (7 subgoals):
 1. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x)\<rbrakk> \<Longrightarrow> \<U> s \<longrightarrow> (set (the (\<U>\<^sub>c s)) \<subseteq> indices_state s \<and> (\<nexists>v. v \<Turnstile>\<^sub>t \<T> s \<and> (\<forall>x c i. UB dir s x = Some c \<longrightarrow> UI dir s x = i \<longrightarrow> i \<in> set (the (\<U>\<^sub>c s)) \<longrightarrow> lt dir (v x) c \<or> v x = c) \<and> (\<forall>x c i. LB dir s x = Some c \<longrightarrow> LI dir s x = i \<longrightarrow> i \<in> set (the (\<U>\<^sub>c s)) \<longrightarrow> lt dir c (v x) \<or> c = v x))) \<and> (distinct_indices_state s \<longrightarrow> (\<forall>I\<subset>set (the (\<U>\<^sub>c s)). \<exists>v. v \<Turnstile>\<^sub>t \<T> s \<and> (\<forall>x c i. UB dir s x = Some c \<longrightarrow> UI dir s x = i \<longrightarrow> i \<in> I \<longrightarrow> v x = c) \<and> (\<forall>x c i. LB dir s x = Some c \<longrightarrow> LI dir s x = i \<longrightarrow> i \<in> I \<longrightarrow> v x = c)))
 2. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> \<U> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) \<longrightarrow> (set (the (\<U>\<^sub>c (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)))) \<subseteq> indices_state (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) \<and> (\<nexists>v. v \<Turnstile>\<^sub>t \<T> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) \<and> (\<forall>xa ca ia. UB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> UI dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)))) \<longrightarrow> lt dir (v xa) ca \<or> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> LI dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)))) \<longrightarrow> lt dir ca (v xa) \<or> ca = v xa))) \<and> (distinct_indices_state (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) \<longrightarrow> (\<forall>I\<subset>set (the (\<U>\<^sub>c (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)))). \<exists>v. v \<Turnstile>\<^sub>t \<T> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) \<and> (\<forall>xa ca ia. UB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> UI dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> LI dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca)))
 3. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<notin> lvars (\<T> s); lt dir c (\<langle>\<V> s\<rangle> x); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> \<U> (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) \<longrightarrow> (set (the (\<U>\<^sub>c (update x c (update\<B>\<I> (UBI_upd dir) i x c s)))) \<subseteq> indices_state (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) \<and> (\<nexists>v. v \<Turnstile>\<^sub>t \<T> (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) \<and> (\<forall>xa ca ia. UB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> UI dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (update x c (update\<B>\<I> (UBI_upd dir) i x c s)))) \<longrightarrow> lt dir (v xa) ca \<or> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> LI dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (update x c (update\<B>\<I> (UBI_upd dir) i x c s)))) \<longrightarrow> lt dir ca (v xa) \<or> ca = v xa))) \<and> (distinct_indices_state (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) \<longrightarrow> (\<forall>I\<subset>set (the (\<U>\<^sub>c (update x c (update\<B>\<I> (UBI_upd dir) i x c s)))). \<exists>v. v \<Turnstile>\<^sub>t \<T> (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) \<and> (\<forall>xa ca ia. UB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> UI dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> LI dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca)))
 4. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<in> lvars (\<T> s); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> \<U> (update\<B>\<I> (UBI_upd dir) i x c s) \<longrightarrow> (set (the (\<U>\<^sub>c (update\<B>\<I> (UBI_upd dir) i x c s))) \<subseteq> indices_state (update\<B>\<I> (UBI_upd dir) i x c s) \<and> (\<nexists>v. v \<Turnstile>\<^sub>t \<T> (update\<B>\<I> (UBI_upd dir) i x c s) \<and> (\<forall>xa ca ia. UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> UI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (update\<B>\<I> (UBI_upd dir) i x c s))) \<longrightarrow> lt dir (v xa) ca \<or> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> LI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (update\<B>\<I> (UBI_upd dir) i x c s))) \<longrightarrow> lt dir ca (v xa) \<or> ca = v xa))) \<and> (distinct_indices_state (update\<B>\<I> (UBI_upd dir) i x c s) \<longrightarrow> (\<forall>I\<subset>set (the (\<U>\<^sub>c (update\<B>\<I> (UBI_upd dir) i x c s))). \<exists>v. v \<Turnstile>\<^sub>t \<T> (update\<B>\<I> (UBI_upd dir) i x c s) \<and> (\<forall>xa ca ia. UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> UI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> LI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca)))
 5. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x); \<not> lt dir c (\<langle>\<V> s\<rangle> x)\<rbrakk> \<Longrightarrow> \<U> (update\<B>\<I> (UBI_upd dir) i x c s) \<longrightarrow> (set (the (\<U>\<^sub>c (update\<B>\<I> (UBI_upd dir) i x c s))) \<subseteq> indices_state (update\<B>\<I> (UBI_upd dir) i x c s) \<and> (\<nexists>v. v \<Turnstile>\<^sub>t \<T> (update\<B>\<I> (UBI_upd dir) i x c s) \<and> (\<forall>xa ca ia. UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> UI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (update\<B>\<I> (UBI_upd dir) i x c s))) \<longrightarrow> lt dir (v xa) ca \<or> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> LI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (update\<B>\<I> (UBI_upd dir) i x c s))) \<longrightarrow> lt dir ca (v xa) \<or> ca = v xa))) \<and> (distinct_indices_state (update\<B>\<I> (UBI_upd dir) i x c s) \<longrightarrow> (\<forall>I\<subset>set (the (\<U>\<^sub>c (update\<B>\<I> (UBI_upd dir) i x c s))). \<exists>v. v \<Turnstile>\<^sub>t \<T> (update\<B>\<I> (UBI_upd dir) i x c s) \<and> (\<forall>xa ca ia. UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> UI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> LI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca)))
 6. \<And>s. (\<U> s \<longrightarrow> unsat_state_core s \<and> (distinct_indices_state s \<longrightarrow> subsets_sat_core s)) = (\<U> s \<longrightarrow> (set (the (\<U>\<^sub>c s)) \<subseteq> indices_state s \<and> (\<nexists>v. v \<Turnstile>\<^sub>t \<T> s \<and> (\<forall>x c i. \<B>\<^sub>l s x = Some c \<longrightarrow> \<I>\<^sub>l s x = i \<longrightarrow> i \<in> set (the (\<U>\<^sub>c s)) \<longrightarrow> c < v x \<or> v x = c) \<and> (\<forall>x c i. \<B>\<^sub>u s x = Some c \<longrightarrow> \<I>\<^sub>u s x = i \<longrightarrow> i \<in> set (the (\<U>\<^sub>c s)) \<longrightarrow> v x < c \<or> c = v x))) \<and> (distinct_indices_state s \<longrightarrow> (\<forall>I\<subset>set (the (\<U>\<^sub>c s)). \<exists>v. v \<Turnstile>\<^sub>t \<T> s \<and> (\<forall>x c i. \<B>\<^sub>l s x = Some c \<longrightarrow> \<I>\<^sub>l s x = i \<longrightarrow> i \<in> I \<longrightarrow> v x = c) \<and> (\<forall>x c i. \<B>\<^sub>u s x = Some c \<longrightarrow> \<I>\<^sub>u s x = i \<longrightarrow> i \<in> I \<longrightarrow> v x = c))))
 7. \<And>s. (\<U> s \<longrightarrow> unsat_state_core s \<and> (distinct_indices_state s \<longrightarrow> subsets_sat_core s)) = (\<U> s \<longrightarrow> (set (the (\<U>\<^sub>c s)) \<subseteq> indices_state s \<and> (\<nexists>v. v \<Turnstile>\<^sub>t \<T> s \<and> (\<forall>x c i. \<B>\<^sub>u s x = Some c \<longrightarrow> \<I>\<^sub>u s x = i \<longrightarrow> i \<in> set (the (\<U>\<^sub>c s)) \<longrightarrow> v x < c \<or> v x = c) \<and> (\<forall>x c i. \<B>\<^sub>l s x = Some c \<longrightarrow> \<I>\<^sub>l s x = i \<longrightarrow> i \<in> set (the (\<U>\<^sub>c s)) \<longrightarrow> c < v x \<or> c = v x))) \<and> (distinct_indices_state s \<longrightarrow> (\<forall>I\<subset>set (the (\<U>\<^sub>c s)). \<exists>v. v \<Turnstile>\<^sub>t \<T> s \<and> (\<forall>x c i. \<B>\<^sub>u s x = Some c \<longrightarrow> \<I>\<^sub>u s x = i \<longrightarrow> i \<in> I \<longrightarrow> v x = c) \<and> (\<forall>x c i. \<B>\<^sub>l s x = Some c \<longrightarrow> \<I>\<^sub>l s x = i \<longrightarrow> i \<in> I \<longrightarrow> v x = c))))
[PROOF STEP]
have id: "((x :: 'a) < y \<or> x = y) \<longleftrightarrow> x \<le> y" "((x :: 'a) > y \<or> x = y) \<longleftrightarrow> x \<ge> y" for x y
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (x < y \<or> x = y) = (x \<le> y) &&& (y < x \<or> x = y) = (y \<le> x)
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
(?x5 < ?y5 \<or> ?x5 = ?y5) = (?x5 \<le> ?y5)
(?y5 < ?x5 \<or> ?x5 = ?y5) = (?y5 \<le> ?x5)

goal (7 subgoals):
 1. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x)\<rbrakk> \<Longrightarrow> \<U> s \<longrightarrow> (set (the (\<U>\<^sub>c s)) \<subseteq> indices_state s \<and> (\<nexists>v. v \<Turnstile>\<^sub>t \<T> s \<and> (\<forall>x c i. UB dir s x = Some c \<longrightarrow> UI dir s x = i \<longrightarrow> i \<in> set (the (\<U>\<^sub>c s)) \<longrightarrow> lt dir (v x) c \<or> v x = c) \<and> (\<forall>x c i. LB dir s x = Some c \<longrightarrow> LI dir s x = i \<longrightarrow> i \<in> set (the (\<U>\<^sub>c s)) \<longrightarrow> lt dir c (v x) \<or> c = v x))) \<and> (distinct_indices_state s \<longrightarrow> (\<forall>I\<subset>set (the (\<U>\<^sub>c s)). \<exists>v. v \<Turnstile>\<^sub>t \<T> s \<and> (\<forall>x c i. UB dir s x = Some c \<longrightarrow> UI dir s x = i \<longrightarrow> i \<in> I \<longrightarrow> v x = c) \<and> (\<forall>x c i. LB dir s x = Some c \<longrightarrow> LI dir s x = i \<longrightarrow> i \<in> I \<longrightarrow> v x = c)))
 2. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> \<U> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) \<longrightarrow> (set (the (\<U>\<^sub>c (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)))) \<subseteq> indices_state (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) \<and> (\<nexists>v. v \<Turnstile>\<^sub>t \<T> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) \<and> (\<forall>xa ca ia. UB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> UI dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)))) \<longrightarrow> lt dir (v xa) ca \<or> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> LI dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)))) \<longrightarrow> lt dir ca (v xa) \<or> ca = v xa))) \<and> (distinct_indices_state (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) \<longrightarrow> (\<forall>I\<subset>set (the (\<U>\<^sub>c (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)))). \<exists>v. v \<Turnstile>\<^sub>t \<T> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) \<and> (\<forall>xa ca ia. UB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> UI dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> LI dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca)))
 3. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<notin> lvars (\<T> s); lt dir c (\<langle>\<V> s\<rangle> x); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> \<U> (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) \<longrightarrow> (set (the (\<U>\<^sub>c (update x c (update\<B>\<I> (UBI_upd dir) i x c s)))) \<subseteq> indices_state (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) \<and> (\<nexists>v. v \<Turnstile>\<^sub>t \<T> (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) \<and> (\<forall>xa ca ia. UB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> UI dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (update x c (update\<B>\<I> (UBI_upd dir) i x c s)))) \<longrightarrow> lt dir (v xa) ca \<or> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> LI dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (update x c (update\<B>\<I> (UBI_upd dir) i x c s)))) \<longrightarrow> lt dir ca (v xa) \<or> ca = v xa))) \<and> (distinct_indices_state (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) \<longrightarrow> (\<forall>I\<subset>set (the (\<U>\<^sub>c (update x c (update\<B>\<I> (UBI_upd dir) i x c s)))). \<exists>v. v \<Turnstile>\<^sub>t \<T> (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) \<and> (\<forall>xa ca ia. UB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> UI dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> LI dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca)))
 4. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<in> lvars (\<T> s); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> \<U> (update\<B>\<I> (UBI_upd dir) i x c s) \<longrightarrow> (set (the (\<U>\<^sub>c (update\<B>\<I> (UBI_upd dir) i x c s))) \<subseteq> indices_state (update\<B>\<I> (UBI_upd dir) i x c s) \<and> (\<nexists>v. v \<Turnstile>\<^sub>t \<T> (update\<B>\<I> (UBI_upd dir) i x c s) \<and> (\<forall>xa ca ia. UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> UI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (update\<B>\<I> (UBI_upd dir) i x c s))) \<longrightarrow> lt dir (v xa) ca \<or> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> LI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (update\<B>\<I> (UBI_upd dir) i x c s))) \<longrightarrow> lt dir ca (v xa) \<or> ca = v xa))) \<and> (distinct_indices_state (update\<B>\<I> (UBI_upd dir) i x c s) \<longrightarrow> (\<forall>I\<subset>set (the (\<U>\<^sub>c (update\<B>\<I> (UBI_upd dir) i x c s))). \<exists>v. v \<Turnstile>\<^sub>t \<T> (update\<B>\<I> (UBI_upd dir) i x c s) \<and> (\<forall>xa ca ia. UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> UI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> LI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca)))
 5. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x); \<not> lt dir c (\<langle>\<V> s\<rangle> x)\<rbrakk> \<Longrightarrow> \<U> (update\<B>\<I> (UBI_upd dir) i x c s) \<longrightarrow> (set (the (\<U>\<^sub>c (update\<B>\<I> (UBI_upd dir) i x c s))) \<subseteq> indices_state (update\<B>\<I> (UBI_upd dir) i x c s) \<and> (\<nexists>v. v \<Turnstile>\<^sub>t \<T> (update\<B>\<I> (UBI_upd dir) i x c s) \<and> (\<forall>xa ca ia. UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> UI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (update\<B>\<I> (UBI_upd dir) i x c s))) \<longrightarrow> lt dir (v xa) ca \<or> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> LI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (update\<B>\<I> (UBI_upd dir) i x c s))) \<longrightarrow> lt dir ca (v xa) \<or> ca = v xa))) \<and> (distinct_indices_state (update\<B>\<I> (UBI_upd dir) i x c s) \<longrightarrow> (\<forall>I\<subset>set (the (\<U>\<^sub>c (update\<B>\<I> (UBI_upd dir) i x c s))). \<exists>v. v \<Turnstile>\<^sub>t \<T> (update\<B>\<I> (UBI_upd dir) i x c s) \<and> (\<forall>xa ca ia. UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> UI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> LI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca)))
 6. \<And>s. (\<U> s \<longrightarrow> unsat_state_core s \<and> (distinct_indices_state s \<longrightarrow> subsets_sat_core s)) = (\<U> s \<longrightarrow> (set (the (\<U>\<^sub>c s)) \<subseteq> indices_state s \<and> (\<nexists>v. v \<Turnstile>\<^sub>t \<T> s \<and> (\<forall>x c i. \<B>\<^sub>l s x = Some c \<longrightarrow> \<I>\<^sub>l s x = i \<longrightarrow> i \<in> set (the (\<U>\<^sub>c s)) \<longrightarrow> c < v x \<or> v x = c) \<and> (\<forall>x c i. \<B>\<^sub>u s x = Some c \<longrightarrow> \<I>\<^sub>u s x = i \<longrightarrow> i \<in> set (the (\<U>\<^sub>c s)) \<longrightarrow> v x < c \<or> c = v x))) \<and> (distinct_indices_state s \<longrightarrow> (\<forall>I\<subset>set (the (\<U>\<^sub>c s)). \<exists>v. v \<Turnstile>\<^sub>t \<T> s \<and> (\<forall>x c i. \<B>\<^sub>l s x = Some c \<longrightarrow> \<I>\<^sub>l s x = i \<longrightarrow> i \<in> I \<longrightarrow> v x = c) \<and> (\<forall>x c i. \<B>\<^sub>u s x = Some c \<longrightarrow> \<I>\<^sub>u s x = i \<longrightarrow> i \<in> I \<longrightarrow> v x = c))))
 7. \<And>s. (\<U> s \<longrightarrow> unsat_state_core s \<and> (distinct_indices_state s \<longrightarrow> subsets_sat_core s)) = (\<U> s \<longrightarrow> (set (the (\<U>\<^sub>c s)) \<subseteq> indices_state s \<and> (\<nexists>v. v \<Turnstile>\<^sub>t \<T> s \<and> (\<forall>x c i. \<B>\<^sub>u s x = Some c \<longrightarrow> \<I>\<^sub>u s x = i \<longrightarrow> i \<in> set (the (\<U>\<^sub>c s)) \<longrightarrow> v x < c \<or> v x = c) \<and> (\<forall>x c i. \<B>\<^sub>l s x = Some c \<longrightarrow> \<I>\<^sub>l s x = i \<longrightarrow> i \<in> set (the (\<U>\<^sub>c s)) \<longrightarrow> c < v x \<or> c = v x))) \<and> (distinct_indices_state s \<longrightarrow> (\<forall>I\<subset>set (the (\<U>\<^sub>c s)). \<exists>v. v \<Turnstile>\<^sub>t \<T> s \<and> (\<forall>x c i. \<B>\<^sub>u s x = Some c \<longrightarrow> \<I>\<^sub>u s x = i \<longrightarrow> i \<in> I \<longrightarrow> v x = c) \<and> (\<forall>x c i. \<B>\<^sub>l s x = Some c \<longrightarrow> \<I>\<^sub>l s x = i \<longrightarrow> i \<in> I \<longrightarrow> v x = c))))
[PROOF STEP]
have id': "?P' (>) \<B>\<^sub>i\<^sub>l \<B>\<^sub>i\<^sub>u \<B>\<^sub>l \<B>\<^sub>u undefined \<I>\<^sub>l \<I>\<^sub>u Geq Leq s' = ?P' (<) \<B>\<^sub>i\<^sub>u \<B>\<^sub>i\<^sub>l \<B>\<^sub>u \<B>\<^sub>l undefined \<I>\<^sub>u \<I>\<^sub>l Leq Geq s'"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (\<U> s' \<longrightarrow> (set (the (\<U>\<^sub>c s')) \<subseteq> indices_state s' \<and> (\<nexists>v. v \<Turnstile>\<^sub>t \<T> s' \<and> (\<forall>x c i. \<B>\<^sub>l s' x = Some c \<longrightarrow> \<I>\<^sub>l s' x = i \<longrightarrow> i \<in> set (the (\<U>\<^sub>c s')) \<longrightarrow> c < v x \<or> v x = c) \<and> (\<forall>x c i. \<B>\<^sub>u s' x = Some c \<longrightarrow> \<I>\<^sub>u s' x = i \<longrightarrow> i \<in> set (the (\<U>\<^sub>c s')) \<longrightarrow> v x < c \<or> c = v x))) \<and> (distinct_indices_state s' \<longrightarrow> (\<forall>I\<subset>set (the (\<U>\<^sub>c s')). \<exists>v. v \<Turnstile>\<^sub>t \<T> s' \<and> (\<forall>x c i. \<B>\<^sub>l s' x = Some c \<longrightarrow> \<I>\<^sub>l s' x = i \<longrightarrow> i \<in> I \<longrightarrow> v x = c) \<and> (\<forall>x c i. \<B>\<^sub>u s' x = Some c \<longrightarrow> \<I>\<^sub>u s' x = i \<longrightarrow> i \<in> I \<longrightarrow> v x = c)))) = (\<U> s' \<longrightarrow> (set (the (\<U>\<^sub>c s')) \<subseteq> indices_state s' \<and> (\<nexists>v. v \<Turnstile>\<^sub>t \<T> s' \<and> (\<forall>x c i. \<B>\<^sub>u s' x = Some c \<longrightarrow> \<I>\<^sub>u s' x = i \<longrightarrow> i \<in> set (the (\<U>\<^sub>c s')) \<longrightarrow> v x < c \<or> v x = c) \<and> (\<forall>x c i. \<B>\<^sub>l s' x = Some c \<longrightarrow> \<I>\<^sub>l s' x = i \<longrightarrow> i \<in> set (the (\<U>\<^sub>c s')) \<longrightarrow> c < v x \<or> c = v x))) \<and> (distinct_indices_state s' \<longrightarrow> (\<forall>I\<subset>set (the (\<U>\<^sub>c s')). \<exists>v. v \<Turnstile>\<^sub>t \<T> s' \<and> (\<forall>x c i. \<B>\<^sub>u s' x = Some c \<longrightarrow> \<I>\<^sub>u s' x = i \<longrightarrow> i \<in> I \<longrightarrow> v x = c) \<and> (\<forall>x c i. \<B>\<^sub>l s' x = Some c \<longrightarrow> \<I>\<^sub>l s' x = i \<longrightarrow> i \<in> I \<longrightarrow> v x = c))))
[PROOF STEP]
by (intro arg_cong[of _ _ "\<lambda> y. _ \<longrightarrow> y"] arg_cong[of _ _ "\<lambda> x. _ \<and> x"],
        intro arg_cong2[of _ _ _ _ "(\<and>)"] arg_cong[of _ _ "\<lambda> y. _ \<longrightarrow> y"] arg_cong[of _ _ "\<lambda> y. \<forall> x \<subset> set (the (\<U>\<^sub>c s')). y x"] ext arg_cong[of _ _ Not],
        unfold id, auto)
[PROOF STATE]
proof (state)
this:
(\<U> s' \<longrightarrow> (set (the (\<U>\<^sub>c s')) \<subseteq> indices_state s' \<and> (\<nexists>v. v \<Turnstile>\<^sub>t \<T> s' \<and> (\<forall>x c i. \<B>\<^sub>l s' x = Some c \<longrightarrow> \<I>\<^sub>l s' x = i \<longrightarrow> i \<in> set (the (\<U>\<^sub>c s')) \<longrightarrow> c < v x \<or> v x = c) \<and> (\<forall>x c i. \<B>\<^sub>u s' x = Some c \<longrightarrow> \<I>\<^sub>u s' x = i \<longrightarrow> i \<in> set (the (\<U>\<^sub>c s')) \<longrightarrow> v x < c \<or> c = v x))) \<and> (distinct_indices_state s' \<longrightarrow> (\<forall>I\<subset>set (the (\<U>\<^sub>c s')). \<exists>v. v \<Turnstile>\<^sub>t \<T> s' \<and> (\<forall>x c i. \<B>\<^sub>l s' x = Some c \<longrightarrow> \<I>\<^sub>l s' x = i \<longrightarrow> i \<in> I \<longrightarrow> v x = c) \<and> (\<forall>x c i. \<B>\<^sub>u s' x = Some c \<longrightarrow> \<I>\<^sub>u s' x = i \<longrightarrow> i \<in> I \<longrightarrow> v x = c)))) = (\<U> s' \<longrightarrow> (set (the (\<U>\<^sub>c s')) \<subseteq> indices_state s' \<and> (\<nexists>v. v \<Turnstile>\<^sub>t \<T> s' \<and> (\<forall>x c i. \<B>\<^sub>u s' x = Some c \<longrightarrow> \<I>\<^sub>u s' x = i \<longrightarrow> i \<in> set (the (\<U>\<^sub>c s')) \<longrightarrow> v x < c \<or> v x = c) \<and> (\<forall>x c i. \<B>\<^sub>l s' x = Some c \<longrightarrow> \<I>\<^sub>l s' x = i \<longrightarrow> i \<in> set (the (\<U>\<^sub>c s')) \<longrightarrow> c < v x \<or> c = v x))) \<and> (distinct_indices_state s' \<longrightarrow> (\<forall>I\<subset>set (the (\<U>\<^sub>c s')). \<exists>v. v \<Turnstile>\<^sub>t \<T> s' \<and> (\<forall>x c i. \<B>\<^sub>u s' x = Some c \<longrightarrow> \<I>\<^sub>u s' x = i \<longrightarrow> i \<in> I \<longrightarrow> v x = c) \<and> (\<forall>x c i. \<B>\<^sub>l s' x = Some c \<longrightarrow> \<I>\<^sub>l s' x = i \<longrightarrow> i \<in> I \<longrightarrow> v x = c))))

goal (7 subgoals):
 1. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x)\<rbrakk> \<Longrightarrow> \<U> s \<longrightarrow> (set (the (\<U>\<^sub>c s)) \<subseteq> indices_state s \<and> (\<nexists>v. v \<Turnstile>\<^sub>t \<T> s \<and> (\<forall>x c i. UB dir s x = Some c \<longrightarrow> UI dir s x = i \<longrightarrow> i \<in> set (the (\<U>\<^sub>c s)) \<longrightarrow> lt dir (v x) c \<or> v x = c) \<and> (\<forall>x c i. LB dir s x = Some c \<longrightarrow> LI dir s x = i \<longrightarrow> i \<in> set (the (\<U>\<^sub>c s)) \<longrightarrow> lt dir c (v x) \<or> c = v x))) \<and> (distinct_indices_state s \<longrightarrow> (\<forall>I\<subset>set (the (\<U>\<^sub>c s)). \<exists>v. v \<Turnstile>\<^sub>t \<T> s \<and> (\<forall>x c i. UB dir s x = Some c \<longrightarrow> UI dir s x = i \<longrightarrow> i \<in> I \<longrightarrow> v x = c) \<and> (\<forall>x c i. LB dir s x = Some c \<longrightarrow> LI dir s x = i \<longrightarrow> i \<in> I \<longrightarrow> v x = c)))
 2. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> \<U> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) \<longrightarrow> (set (the (\<U>\<^sub>c (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)))) \<subseteq> indices_state (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) \<and> (\<nexists>v. v \<Turnstile>\<^sub>t \<T> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) \<and> (\<forall>xa ca ia. UB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> UI dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)))) \<longrightarrow> lt dir (v xa) ca \<or> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> LI dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)))) \<longrightarrow> lt dir ca (v xa) \<or> ca = v xa))) \<and> (distinct_indices_state (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) \<longrightarrow> (\<forall>I\<subset>set (the (\<U>\<^sub>c (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)))). \<exists>v. v \<Turnstile>\<^sub>t \<T> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) \<and> (\<forall>xa ca ia. UB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> UI dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> LI dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca)))
 3. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<notin> lvars (\<T> s); lt dir c (\<langle>\<V> s\<rangle> x); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> \<U> (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) \<longrightarrow> (set (the (\<U>\<^sub>c (update x c (update\<B>\<I> (UBI_upd dir) i x c s)))) \<subseteq> indices_state (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) \<and> (\<nexists>v. v \<Turnstile>\<^sub>t \<T> (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) \<and> (\<forall>xa ca ia. UB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> UI dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (update x c (update\<B>\<I> (UBI_upd dir) i x c s)))) \<longrightarrow> lt dir (v xa) ca \<or> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> LI dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (update x c (update\<B>\<I> (UBI_upd dir) i x c s)))) \<longrightarrow> lt dir ca (v xa) \<or> ca = v xa))) \<and> (distinct_indices_state (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) \<longrightarrow> (\<forall>I\<subset>set (the (\<U>\<^sub>c (update x c (update\<B>\<I> (UBI_upd dir) i x c s)))). \<exists>v. v \<Turnstile>\<^sub>t \<T> (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) \<and> (\<forall>xa ca ia. UB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> UI dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> LI dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca)))
 4. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<in> lvars (\<T> s); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> \<U> (update\<B>\<I> (UBI_upd dir) i x c s) \<longrightarrow> (set (the (\<U>\<^sub>c (update\<B>\<I> (UBI_upd dir) i x c s))) \<subseteq> indices_state (update\<B>\<I> (UBI_upd dir) i x c s) \<and> (\<nexists>v. v \<Turnstile>\<^sub>t \<T> (update\<B>\<I> (UBI_upd dir) i x c s) \<and> (\<forall>xa ca ia. UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> UI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (update\<B>\<I> (UBI_upd dir) i x c s))) \<longrightarrow> lt dir (v xa) ca \<or> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> LI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (update\<B>\<I> (UBI_upd dir) i x c s))) \<longrightarrow> lt dir ca (v xa) \<or> ca = v xa))) \<and> (distinct_indices_state (update\<B>\<I> (UBI_upd dir) i x c s) \<longrightarrow> (\<forall>I\<subset>set (the (\<U>\<^sub>c (update\<B>\<I> (UBI_upd dir) i x c s))). \<exists>v. v \<Turnstile>\<^sub>t \<T> (update\<B>\<I> (UBI_upd dir) i x c s) \<and> (\<forall>xa ca ia. UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> UI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> LI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca)))
 5. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x); \<not> lt dir c (\<langle>\<V> s\<rangle> x)\<rbrakk> \<Longrightarrow> \<U> (update\<B>\<I> (UBI_upd dir) i x c s) \<longrightarrow> (set (the (\<U>\<^sub>c (update\<B>\<I> (UBI_upd dir) i x c s))) \<subseteq> indices_state (update\<B>\<I> (UBI_upd dir) i x c s) \<and> (\<nexists>v. v \<Turnstile>\<^sub>t \<T> (update\<B>\<I> (UBI_upd dir) i x c s) \<and> (\<forall>xa ca ia. UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> UI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (update\<B>\<I> (UBI_upd dir) i x c s))) \<longrightarrow> lt dir (v xa) ca \<or> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> LI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (update\<B>\<I> (UBI_upd dir) i x c s))) \<longrightarrow> lt dir ca (v xa) \<or> ca = v xa))) \<and> (distinct_indices_state (update\<B>\<I> (UBI_upd dir) i x c s) \<longrightarrow> (\<forall>I\<subset>set (the (\<U>\<^sub>c (update\<B>\<I> (UBI_upd dir) i x c s))). \<exists>v. v \<Turnstile>\<^sub>t \<T> (update\<B>\<I> (UBI_upd dir) i x c s) \<and> (\<forall>xa ca ia. UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> UI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> LI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca)))
 6. \<And>s. (\<U> s \<longrightarrow> unsat_state_core s \<and> (distinct_indices_state s \<longrightarrow> subsets_sat_core s)) = (\<U> s \<longrightarrow> (set (the (\<U>\<^sub>c s)) \<subseteq> indices_state s \<and> (\<nexists>v. v \<Turnstile>\<^sub>t \<T> s \<and> (\<forall>x c i. \<B>\<^sub>l s x = Some c \<longrightarrow> \<I>\<^sub>l s x = i \<longrightarrow> i \<in> set (the (\<U>\<^sub>c s)) \<longrightarrow> c < v x \<or> v x = c) \<and> (\<forall>x c i. \<B>\<^sub>u s x = Some c \<longrightarrow> \<I>\<^sub>u s x = i \<longrightarrow> i \<in> set (the (\<U>\<^sub>c s)) \<longrightarrow> v x < c \<or> c = v x))) \<and> (distinct_indices_state s \<longrightarrow> (\<forall>I\<subset>set (the (\<U>\<^sub>c s)). \<exists>v. v \<Turnstile>\<^sub>t \<T> s \<and> (\<forall>x c i. \<B>\<^sub>l s x = Some c \<longrightarrow> \<I>\<^sub>l s x = i \<longrightarrow> i \<in> I \<longrightarrow> v x = c) \<and> (\<forall>x c i. \<B>\<^sub>u s x = Some c \<longrightarrow> \<I>\<^sub>u s x = i \<longrightarrow> i \<in> I \<longrightarrow> v x = c))))
 7. \<And>s. (\<U> s \<longrightarrow> unsat_state_core s \<and> (distinct_indices_state s \<longrightarrow> subsets_sat_core s)) = (\<U> s \<longrightarrow> (set (the (\<U>\<^sub>c s)) \<subseteq> indices_state s \<and> (\<nexists>v. v \<Turnstile>\<^sub>t \<T> s \<and> (\<forall>x c i. \<B>\<^sub>u s x = Some c \<longrightarrow> \<I>\<^sub>u s x = i \<longrightarrow> i \<in> set (the (\<U>\<^sub>c s)) \<longrightarrow> v x < c \<or> v x = c) \<and> (\<forall>x c i. \<B>\<^sub>l s x = Some c \<longrightarrow> \<I>\<^sub>l s x = i \<longrightarrow> i \<in> set (the (\<U>\<^sub>c s)) \<longrightarrow> c < v x \<or> c = v x))) \<and> (distinct_indices_state s \<longrightarrow> (\<forall>I\<subset>set (the (\<U>\<^sub>c s)). \<exists>v. v \<Turnstile>\<^sub>t \<T> s \<and> (\<forall>x c i. \<B>\<^sub>u s x = Some c \<longrightarrow> \<I>\<^sub>u s x = i \<longrightarrow> i \<in> I \<longrightarrow> v x = c) \<and> (\<forall>x c i. \<B>\<^sub>l s x = Some c \<longrightarrow> \<I>\<^sub>l s x = i \<longrightarrow> i \<in> I \<longrightarrow> v x = c))))
[PROOF STEP]
show "?P s' = ?P' (>) \<B>\<^sub>i\<^sub>l \<B>\<^sub>i\<^sub>u \<B>\<^sub>l \<B>\<^sub>u undefined \<I>\<^sub>l \<I>\<^sub>u Geq Leq s'"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (\<U> s' \<longrightarrow> unsat_state_core s' \<and> (distinct_indices_state s' \<longrightarrow> subsets_sat_core s')) = (\<U> s' \<longrightarrow> (set (the (\<U>\<^sub>c s')) \<subseteq> indices_state s' \<and> (\<nexists>v. v \<Turnstile>\<^sub>t \<T> s' \<and> (\<forall>x c i. \<B>\<^sub>l s' x = Some c \<longrightarrow> \<I>\<^sub>l s' x = i \<longrightarrow> i \<in> set (the (\<U>\<^sub>c s')) \<longrightarrow> c < v x \<or> v x = c) \<and> (\<forall>x c i. \<B>\<^sub>u s' x = Some c \<longrightarrow> \<I>\<^sub>u s' x = i \<longrightarrow> i \<in> set (the (\<U>\<^sub>c s')) \<longrightarrow> v x < c \<or> c = v x))) \<and> (distinct_indices_state s' \<longrightarrow> (\<forall>I\<subset>set (the (\<U>\<^sub>c s')). \<exists>v. v \<Turnstile>\<^sub>t \<T> s' \<and> (\<forall>x c i. \<B>\<^sub>l s' x = Some c \<longrightarrow> \<I>\<^sub>l s' x = i \<longrightarrow> i \<in> I \<longrightarrow> v x = c) \<and> (\<forall>x c i. \<B>\<^sub>u s' x = Some c \<longrightarrow> \<I>\<^sub>u s' x = i \<longrightarrow> i \<in> I \<longrightarrow> v x = c))))
[PROOF STEP]
unfolding satisfies_state_def satisfies_bounds_index.simps satisfies_bounds.simps
        in_bounds.simps unsat_state_core_def satisfies_state_index.simps subsets_sat_core_def
        satisfies_state_index'.simps satisfies_bounds_index'.simps
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (\<U> s' \<longrightarrow> (set (the (\<U>\<^sub>c s')) \<subseteq> indices_state s' \<and> (\<nexists>v. v \<Turnstile>\<^sub>t \<T> s' \<and> (\<forall>x c. \<B>\<^sub>l s' x = Some c \<longrightarrow> \<I>\<^sub>l s' x \<in> set (the (\<U>\<^sub>c s')) \<longrightarrow> c \<le> v x) \<and> (\<forall>x c. \<B>\<^sub>u s' x = Some c \<longrightarrow> \<I>\<^sub>u s' x \<in> set (the (\<U>\<^sub>c s')) \<longrightarrow> v x \<le> c))) \<and> (distinct_indices_state s' \<longrightarrow> (\<forall>I\<subset>set (the (\<U>\<^sub>c s')). \<exists>v. v \<Turnstile>\<^sub>t \<T> s' \<and> (\<forall>x c. \<B>\<^sub>l s' x = Some c \<longrightarrow> \<I>\<^sub>l s' x \<in> I \<longrightarrow> v x = c) \<and> (\<forall>x c. \<B>\<^sub>u s' x = Some c \<longrightarrow> \<I>\<^sub>u s' x \<in> I \<longrightarrow> v x = c)))) = (\<U> s' \<longrightarrow> (set (the (\<U>\<^sub>c s')) \<subseteq> indices_state s' \<and> (\<nexists>v. v \<Turnstile>\<^sub>t \<T> s' \<and> (\<forall>x c i. \<B>\<^sub>l s' x = Some c \<longrightarrow> \<I>\<^sub>l s' x = i \<longrightarrow> i \<in> set (the (\<U>\<^sub>c s')) \<longrightarrow> c < v x \<or> v x = c) \<and> (\<forall>x c i. \<B>\<^sub>u s' x = Some c \<longrightarrow> \<I>\<^sub>u s' x = i \<longrightarrow> i \<in> set (the (\<U>\<^sub>c s')) \<longrightarrow> v x < c \<or> c = v x))) \<and> (distinct_indices_state s' \<longrightarrow> (\<forall>I\<subset>set (the (\<U>\<^sub>c s')). \<exists>v. v \<Turnstile>\<^sub>t \<T> s' \<and> (\<forall>x c i. \<B>\<^sub>l s' x = Some c \<longrightarrow> \<I>\<^sub>l s' x = i \<longrightarrow> i \<in> I \<longrightarrow> v x = c) \<and> (\<forall>x c i. \<B>\<^sub>u s' x = Some c \<longrightarrow> \<I>\<^sub>u s' x = i \<longrightarrow> i \<in> I \<longrightarrow> v x = c))))
[PROOF STEP]
unfolding bound_compare''_defs id
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (\<U> s' \<longrightarrow> (set (the (\<U>\<^sub>c s')) \<subseteq> indices_state s' \<and> (\<nexists>v. v \<Turnstile>\<^sub>t \<T> s' \<and> (\<forall>x c. \<B>\<^sub>l s' x = Some c \<longrightarrow> \<I>\<^sub>l s' x \<in> set (the (\<U>\<^sub>c s')) \<longrightarrow> c \<le> v x) \<and> (\<forall>x c. \<B>\<^sub>u s' x = Some c \<longrightarrow> \<I>\<^sub>u s' x \<in> set (the (\<U>\<^sub>c s')) \<longrightarrow> v x \<le> c))) \<and> (distinct_indices_state s' \<longrightarrow> (\<forall>I\<subset>set (the (\<U>\<^sub>c s')). \<exists>v. v \<Turnstile>\<^sub>t \<T> s' \<and> (\<forall>x c. \<B>\<^sub>l s' x = Some c \<longrightarrow> \<I>\<^sub>l s' x \<in> I \<longrightarrow> v x = c) \<and> (\<forall>x c. \<B>\<^sub>u s' x = Some c \<longrightarrow> \<I>\<^sub>u s' x \<in> I \<longrightarrow> v x = c)))) = (\<U> s' \<longrightarrow> (set (the (\<U>\<^sub>c s')) \<subseteq> indices_state s' \<and> (\<nexists>v. v \<Turnstile>\<^sub>t \<T> s' \<and> (\<forall>x c i. \<B>\<^sub>l s' x = Some c \<longrightarrow> \<I>\<^sub>l s' x = i \<longrightarrow> i \<in> set (the (\<U>\<^sub>c s')) \<longrightarrow> c \<le> v x) \<and> (\<forall>x c i. \<B>\<^sub>u s' x = Some c \<longrightarrow> \<I>\<^sub>u s' x = i \<longrightarrow> i \<in> set (the (\<U>\<^sub>c s')) \<longrightarrow> v x \<le> c))) \<and> (distinct_indices_state s' \<longrightarrow> (\<forall>I\<subset>set (the (\<U>\<^sub>c s')). \<exists>v. v \<Turnstile>\<^sub>t \<T> s' \<and> (\<forall>x c i. \<B>\<^sub>l s' x = Some c \<longrightarrow> \<I>\<^sub>l s' x = i \<longrightarrow> i \<in> I \<longrightarrow> v x = c) \<and> (\<forall>x c i. \<B>\<^sub>u s' x = Some c \<longrightarrow> \<I>\<^sub>u s' x = i \<longrightarrow> i \<in> I \<longrightarrow> v x = c))))
[PROOF STEP]
by ((intro arg_cong[of _ _ "\<lambda> x. _ \<longrightarrow> x"] arg_cong[of _ _ "\<lambda> x. _ \<and> x"],
        intro arg_cong2[of _ _ _ _ "(\<and>)"] refl arg_cong[of _ _ "\<lambda> x. _ \<longrightarrow> x"] arg_cong[of _ _ Not]
        arg_cong[of _ _ "\<lambda> y. \<forall> x \<subset> set (the (\<U>\<^sub>c s')). y x"] ext; intro arg_cong[of _ _ Ex] ext), auto)
[PROOF STATE]
proof (state)
this:
(\<U> s' \<longrightarrow> unsat_state_core s' \<and> (distinct_indices_state s' \<longrightarrow> subsets_sat_core s')) = (\<U> s' \<longrightarrow> (set (the (\<U>\<^sub>c s')) \<subseteq> indices_state s' \<and> (\<nexists>v. v \<Turnstile>\<^sub>t \<T> s' \<and> (\<forall>x c i. \<B>\<^sub>l s' x = Some c \<longrightarrow> \<I>\<^sub>l s' x = i \<longrightarrow> i \<in> set (the (\<U>\<^sub>c s')) \<longrightarrow> c < v x \<or> v x = c) \<and> (\<forall>x c i. \<B>\<^sub>u s' x = Some c \<longrightarrow> \<I>\<^sub>u s' x = i \<longrightarrow> i \<in> set (the (\<U>\<^sub>c s')) \<longrightarrow> v x < c \<or> c = v x))) \<and> (distinct_indices_state s' \<longrightarrow> (\<forall>I\<subset>set (the (\<U>\<^sub>c s')). \<exists>v. v \<Turnstile>\<^sub>t \<T> s' \<and> (\<forall>x c i. \<B>\<^sub>l s' x = Some c \<longrightarrow> \<I>\<^sub>l s' x = i \<longrightarrow> i \<in> I \<longrightarrow> v x = c) \<and> (\<forall>x c i. \<B>\<^sub>u s' x = Some c \<longrightarrow> \<I>\<^sub>u s' x = i \<longrightarrow> i \<in> I \<longrightarrow> v x = c))))

goal (6 subgoals):
 1. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x)\<rbrakk> \<Longrightarrow> \<U> s \<longrightarrow> (set (the (\<U>\<^sub>c s)) \<subseteq> indices_state s \<and> (\<nexists>v. v \<Turnstile>\<^sub>t \<T> s \<and> (\<forall>x c i. UB dir s x = Some c \<longrightarrow> UI dir s x = i \<longrightarrow> i \<in> set (the (\<U>\<^sub>c s)) \<longrightarrow> lt dir (v x) c \<or> v x = c) \<and> (\<forall>x c i. LB dir s x = Some c \<longrightarrow> LI dir s x = i \<longrightarrow> i \<in> set (the (\<U>\<^sub>c s)) \<longrightarrow> lt dir c (v x) \<or> c = v x))) \<and> (distinct_indices_state s \<longrightarrow> (\<forall>I\<subset>set (the (\<U>\<^sub>c s)). \<exists>v. v \<Turnstile>\<^sub>t \<T> s \<and> (\<forall>x c i. UB dir s x = Some c \<longrightarrow> UI dir s x = i \<longrightarrow> i \<in> I \<longrightarrow> v x = c) \<and> (\<forall>x c i. LB dir s x = Some c \<longrightarrow> LI dir s x = i \<longrightarrow> i \<in> I \<longrightarrow> v x = c)))
 2. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> \<U> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) \<longrightarrow> (set (the (\<U>\<^sub>c (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)))) \<subseteq> indices_state (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) \<and> (\<nexists>v. v \<Turnstile>\<^sub>t \<T> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) \<and> (\<forall>xa ca ia. UB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> UI dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)))) \<longrightarrow> lt dir (v xa) ca \<or> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> LI dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)))) \<longrightarrow> lt dir ca (v xa) \<or> ca = v xa))) \<and> (distinct_indices_state (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) \<longrightarrow> (\<forall>I\<subset>set (the (\<U>\<^sub>c (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)))). \<exists>v. v \<Turnstile>\<^sub>t \<T> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) \<and> (\<forall>xa ca ia. UB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> UI dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> LI dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca)))
 3. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<notin> lvars (\<T> s); lt dir c (\<langle>\<V> s\<rangle> x); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> \<U> (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) \<longrightarrow> (set (the (\<U>\<^sub>c (update x c (update\<B>\<I> (UBI_upd dir) i x c s)))) \<subseteq> indices_state (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) \<and> (\<nexists>v. v \<Turnstile>\<^sub>t \<T> (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) \<and> (\<forall>xa ca ia. UB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> UI dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (update x c (update\<B>\<I> (UBI_upd dir) i x c s)))) \<longrightarrow> lt dir (v xa) ca \<or> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> LI dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (update x c (update\<B>\<I> (UBI_upd dir) i x c s)))) \<longrightarrow> lt dir ca (v xa) \<or> ca = v xa))) \<and> (distinct_indices_state (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) \<longrightarrow> (\<forall>I\<subset>set (the (\<U>\<^sub>c (update x c (update\<B>\<I> (UBI_upd dir) i x c s)))). \<exists>v. v \<Turnstile>\<^sub>t \<T> (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) \<and> (\<forall>xa ca ia. UB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> UI dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> LI dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca)))
 4. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<in> lvars (\<T> s); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> \<U> (update\<B>\<I> (UBI_upd dir) i x c s) \<longrightarrow> (set (the (\<U>\<^sub>c (update\<B>\<I> (UBI_upd dir) i x c s))) \<subseteq> indices_state (update\<B>\<I> (UBI_upd dir) i x c s) \<and> (\<nexists>v. v \<Turnstile>\<^sub>t \<T> (update\<B>\<I> (UBI_upd dir) i x c s) \<and> (\<forall>xa ca ia. UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> UI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (update\<B>\<I> (UBI_upd dir) i x c s))) \<longrightarrow> lt dir (v xa) ca \<or> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> LI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (update\<B>\<I> (UBI_upd dir) i x c s))) \<longrightarrow> lt dir ca (v xa) \<or> ca = v xa))) \<and> (distinct_indices_state (update\<B>\<I> (UBI_upd dir) i x c s) \<longrightarrow> (\<forall>I\<subset>set (the (\<U>\<^sub>c (update\<B>\<I> (UBI_upd dir) i x c s))). \<exists>v. v \<Turnstile>\<^sub>t \<T> (update\<B>\<I> (UBI_upd dir) i x c s) \<and> (\<forall>xa ca ia. UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> UI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> LI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca)))
 5. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x); \<not> lt dir c (\<langle>\<V> s\<rangle> x)\<rbrakk> \<Longrightarrow> \<U> (update\<B>\<I> (UBI_upd dir) i x c s) \<longrightarrow> (set (the (\<U>\<^sub>c (update\<B>\<I> (UBI_upd dir) i x c s))) \<subseteq> indices_state (update\<B>\<I> (UBI_upd dir) i x c s) \<and> (\<nexists>v. v \<Turnstile>\<^sub>t \<T> (update\<B>\<I> (UBI_upd dir) i x c s) \<and> (\<forall>xa ca ia. UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> UI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (update\<B>\<I> (UBI_upd dir) i x c s))) \<longrightarrow> lt dir (v xa) ca \<or> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> LI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (update\<B>\<I> (UBI_upd dir) i x c s))) \<longrightarrow> lt dir ca (v xa) \<or> ca = v xa))) \<and> (distinct_indices_state (update\<B>\<I> (UBI_upd dir) i x c s) \<longrightarrow> (\<forall>I\<subset>set (the (\<U>\<^sub>c (update\<B>\<I> (UBI_upd dir) i x c s))). \<exists>v. v \<Turnstile>\<^sub>t \<T> (update\<B>\<I> (UBI_upd dir) i x c s) \<and> (\<forall>xa ca ia. UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> UI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> LI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca)))
 6. \<And>s. (\<U> s \<longrightarrow> unsat_state_core s \<and> (distinct_indices_state s \<longrightarrow> subsets_sat_core s)) = (\<U> s \<longrightarrow> (set (the (\<U>\<^sub>c s)) \<subseteq> indices_state s \<and> (\<nexists>v. v \<Turnstile>\<^sub>t \<T> s \<and> (\<forall>x c i. \<B>\<^sub>u s x = Some c \<longrightarrow> \<I>\<^sub>u s x = i \<longrightarrow> i \<in> set (the (\<U>\<^sub>c s)) \<longrightarrow> v x < c \<or> v x = c) \<and> (\<forall>x c i. \<B>\<^sub>l s x = Some c \<longrightarrow> \<I>\<^sub>l s x = i \<longrightarrow> i \<in> set (the (\<U>\<^sub>c s)) \<longrightarrow> c < v x \<or> c = v x))) \<and> (distinct_indices_state s \<longrightarrow> (\<forall>I\<subset>set (the (\<U>\<^sub>c s)). \<exists>v. v \<Turnstile>\<^sub>t \<T> s \<and> (\<forall>x c i. \<B>\<^sub>u s x = Some c \<longrightarrow> \<I>\<^sub>u s x = i \<longrightarrow> i \<in> I \<longrightarrow> v x = c) \<and> (\<forall>x c i. \<B>\<^sub>l s x = Some c \<longrightarrow> \<I>\<^sub>l s x = i \<longrightarrow> i \<in> I \<longrightarrow> v x = c))))
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
(\<U> s' \<longrightarrow> unsat_state_core s' \<and> (distinct_indices_state s' \<longrightarrow> subsets_sat_core s')) = (\<U> s' \<longrightarrow> (set (the (\<U>\<^sub>c s')) \<subseteq> indices_state s' \<and> (\<nexists>v. v \<Turnstile>\<^sub>t \<T> s' \<and> (\<forall>x c i. \<B>\<^sub>l s' x = Some c \<longrightarrow> \<I>\<^sub>l s' x = i \<longrightarrow> i \<in> set (the (\<U>\<^sub>c s')) \<longrightarrow> c < v x \<or> v x = c) \<and> (\<forall>x c i. \<B>\<^sub>u s' x = Some c \<longrightarrow> \<I>\<^sub>u s' x = i \<longrightarrow> i \<in> set (the (\<U>\<^sub>c s')) \<longrightarrow> v x < c \<or> c = v x))) \<and> (distinct_indices_state s' \<longrightarrow> (\<forall>I\<subset>set (the (\<U>\<^sub>c s')). \<exists>v. v \<Turnstile>\<^sub>t \<T> s' \<and> (\<forall>x c i. \<B>\<^sub>l s' x = Some c \<longrightarrow> \<I>\<^sub>l s' x = i \<longrightarrow> i \<in> I \<longrightarrow> v x = c) \<and> (\<forall>x c i. \<B>\<^sub>u s' x = Some c \<longrightarrow> \<I>\<^sub>u s' x = i \<longrightarrow> i \<in> I \<longrightarrow> v x = c))))
[PROOF STEP]
show "?P s' = ?P' (<) \<B>\<^sub>i\<^sub>u \<B>\<^sub>i\<^sub>l \<B>\<^sub>u \<B>\<^sub>l undefined \<I>\<^sub>u \<I>\<^sub>l Leq Geq s'"
[PROOF STATE]
proof (prove)
using this:
(\<U> s' \<longrightarrow> unsat_state_core s' \<and> (distinct_indices_state s' \<longrightarrow> subsets_sat_core s')) = (\<U> s' \<longrightarrow> (set (the (\<U>\<^sub>c s')) \<subseteq> indices_state s' \<and> (\<nexists>v. v \<Turnstile>\<^sub>t \<T> s' \<and> (\<forall>x c i. \<B>\<^sub>l s' x = Some c \<longrightarrow> \<I>\<^sub>l s' x = i \<longrightarrow> i \<in> set (the (\<U>\<^sub>c s')) \<longrightarrow> c < v x \<or> v x = c) \<and> (\<forall>x c i. \<B>\<^sub>u s' x = Some c \<longrightarrow> \<I>\<^sub>u s' x = i \<longrightarrow> i \<in> set (the (\<U>\<^sub>c s')) \<longrightarrow> v x < c \<or> c = v x))) \<and> (distinct_indices_state s' \<longrightarrow> (\<forall>I\<subset>set (the (\<U>\<^sub>c s')). \<exists>v. v \<Turnstile>\<^sub>t \<T> s' \<and> (\<forall>x c i. \<B>\<^sub>l s' x = Some c \<longrightarrow> \<I>\<^sub>l s' x = i \<longrightarrow> i \<in> I \<longrightarrow> v x = c) \<and> (\<forall>x c i. \<B>\<^sub>u s' x = Some c \<longrightarrow> \<I>\<^sub>u s' x = i \<longrightarrow> i \<in> I \<longrightarrow> v x = c))))

goal (1 subgoal):
 1. (\<U> s' \<longrightarrow> unsat_state_core s' \<and> (distinct_indices_state s' \<longrightarrow> subsets_sat_core s')) = (\<U> s' \<longrightarrow> (set (the (\<U>\<^sub>c s')) \<subseteq> indices_state s' \<and> (\<nexists>v. v \<Turnstile>\<^sub>t \<T> s' \<and> (\<forall>x c i. \<B>\<^sub>u s' x = Some c \<longrightarrow> \<I>\<^sub>u s' x = i \<longrightarrow> i \<in> set (the (\<U>\<^sub>c s')) \<longrightarrow> v x < c \<or> v x = c) \<and> (\<forall>x c i. \<B>\<^sub>l s' x = Some c \<longrightarrow> \<I>\<^sub>l s' x = i \<longrightarrow> i \<in> set (the (\<U>\<^sub>c s')) \<longrightarrow> c < v x \<or> c = v x))) \<and> (distinct_indices_state s' \<longrightarrow> (\<forall>I\<subset>set (the (\<U>\<^sub>c s')). \<exists>v. v \<Turnstile>\<^sub>t \<T> s' \<and> (\<forall>x c i. \<B>\<^sub>u s' x = Some c \<longrightarrow> \<I>\<^sub>u s' x = i \<longrightarrow> i \<in> I \<longrightarrow> v x = c) \<and> (\<forall>x c i. \<B>\<^sub>l s' x = Some c \<longrightarrow> \<I>\<^sub>l s' x = i \<longrightarrow> i \<in> I \<longrightarrow> v x = c))))
[PROOF STEP]
unfolding id'
[PROOF STATE]
proof (prove)
using this:
(\<U> s' \<longrightarrow> unsat_state_core s' \<and> (distinct_indices_state s' \<longrightarrow> subsets_sat_core s')) = (\<U> s' \<longrightarrow> (set (the (\<U>\<^sub>c s')) \<subseteq> indices_state s' \<and> (\<nexists>v. v \<Turnstile>\<^sub>t \<T> s' \<and> (\<forall>x c i. \<B>\<^sub>u s' x = Some c \<longrightarrow> \<I>\<^sub>u s' x = i \<longrightarrow> i \<in> set (the (\<U>\<^sub>c s')) \<longrightarrow> v x < c \<or> v x = c) \<and> (\<forall>x c i. \<B>\<^sub>l s' x = Some c \<longrightarrow> \<I>\<^sub>l s' x = i \<longrightarrow> i \<in> set (the (\<U>\<^sub>c s')) \<longrightarrow> c < v x \<or> c = v x))) \<and> (distinct_indices_state s' \<longrightarrow> (\<forall>I\<subset>set (the (\<U>\<^sub>c s')). \<exists>v. v \<Turnstile>\<^sub>t \<T> s' \<and> (\<forall>x c i. \<B>\<^sub>u s' x = Some c \<longrightarrow> \<I>\<^sub>u s' x = i \<longrightarrow> i \<in> I \<longrightarrow> v x = c) \<and> (\<forall>x c i. \<B>\<^sub>l s' x = Some c \<longrightarrow> \<I>\<^sub>l s' x = i \<longrightarrow> i \<in> I \<longrightarrow> v x = c))))

goal (1 subgoal):
 1. (\<U> s' \<longrightarrow> unsat_state_core s' \<and> (distinct_indices_state s' \<longrightarrow> subsets_sat_core s')) = (\<U> s' \<longrightarrow> (set (the (\<U>\<^sub>c s')) \<subseteq> indices_state s' \<and> (\<nexists>v. v \<Turnstile>\<^sub>t \<T> s' \<and> (\<forall>x c i. \<B>\<^sub>u s' x = Some c \<longrightarrow> \<I>\<^sub>u s' x = i \<longrightarrow> i \<in> set (the (\<U>\<^sub>c s')) \<longrightarrow> v x < c \<or> v x = c) \<and> (\<forall>x c i. \<B>\<^sub>l s' x = Some c \<longrightarrow> \<I>\<^sub>l s' x = i \<longrightarrow> i \<in> set (the (\<U>\<^sub>c s')) \<longrightarrow> c < v x \<or> c = v x))) \<and> (distinct_indices_state s' \<longrightarrow> (\<forall>I\<subset>set (the (\<U>\<^sub>c s')). \<exists>v. v \<Turnstile>\<^sub>t \<T> s' \<and> (\<forall>x c i. \<B>\<^sub>u s' x = Some c \<longrightarrow> \<I>\<^sub>u s' x = i \<longrightarrow> i \<in> I \<longrightarrow> v x = c) \<and> (\<forall>x c i. \<B>\<^sub>l s' x = Some c \<longrightarrow> \<I>\<^sub>l s' x = i \<longrightarrow> i \<in> I \<longrightarrow> v x = c))))
[PROOF STEP]
.
[PROOF STATE]
proof (state)
this:
(\<U> s' \<longrightarrow> unsat_state_core s' \<and> (distinct_indices_state s' \<longrightarrow> subsets_sat_core s')) = (\<U> s' \<longrightarrow> (set (the (\<U>\<^sub>c s')) \<subseteq> indices_state s' \<and> (\<nexists>v. v \<Turnstile>\<^sub>t \<T> s' \<and> (\<forall>x c i. \<B>\<^sub>u s' x = Some c \<longrightarrow> \<I>\<^sub>u s' x = i \<longrightarrow> i \<in> set (the (\<U>\<^sub>c s')) \<longrightarrow> v x < c \<or> v x = c) \<and> (\<forall>x c i. \<B>\<^sub>l s' x = Some c \<longrightarrow> \<I>\<^sub>l s' x = i \<longrightarrow> i \<in> set (the (\<U>\<^sub>c s')) \<longrightarrow> c < v x \<or> c = v x))) \<and> (distinct_indices_state s' \<longrightarrow> (\<forall>I\<subset>set (the (\<U>\<^sub>c s')). \<exists>v. v \<Turnstile>\<^sub>t \<T> s' \<and> (\<forall>x c i. \<B>\<^sub>u s' x = Some c \<longrightarrow> \<I>\<^sub>u s' x = i \<longrightarrow> i \<in> I \<longrightarrow> v x = c) \<and> (\<forall>x c i. \<B>\<^sub>l s' x = Some c \<longrightarrow> \<I>\<^sub>l s' x = i \<longrightarrow> i \<in> I \<longrightarrow> v x = c))))

goal (5 subgoals):
 1. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x)\<rbrakk> \<Longrightarrow> \<U> s \<longrightarrow> (set (the (\<U>\<^sub>c s)) \<subseteq> indices_state s \<and> (\<nexists>v. v \<Turnstile>\<^sub>t \<T> s \<and> (\<forall>x c i. UB dir s x = Some c \<longrightarrow> UI dir s x = i \<longrightarrow> i \<in> set (the (\<U>\<^sub>c s)) \<longrightarrow> lt dir (v x) c \<or> v x = c) \<and> (\<forall>x c i. LB dir s x = Some c \<longrightarrow> LI dir s x = i \<longrightarrow> i \<in> set (the (\<U>\<^sub>c s)) \<longrightarrow> lt dir c (v x) \<or> c = v x))) \<and> (distinct_indices_state s \<longrightarrow> (\<forall>I\<subset>set (the (\<U>\<^sub>c s)). \<exists>v. v \<Turnstile>\<^sub>t \<T> s \<and> (\<forall>x c i. UB dir s x = Some c \<longrightarrow> UI dir s x = i \<longrightarrow> i \<in> I \<longrightarrow> v x = c) \<and> (\<forall>x c i. LB dir s x = Some c \<longrightarrow> LI dir s x = i \<longrightarrow> i \<in> I \<longrightarrow> v x = c)))
 2. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> \<U> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) \<longrightarrow> (set (the (\<U>\<^sub>c (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)))) \<subseteq> indices_state (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) \<and> (\<nexists>v. v \<Turnstile>\<^sub>t \<T> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) \<and> (\<forall>xa ca ia. UB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> UI dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)))) \<longrightarrow> lt dir (v xa) ca \<or> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> LI dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)))) \<longrightarrow> lt dir ca (v xa) \<or> ca = v xa))) \<and> (distinct_indices_state (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) \<longrightarrow> (\<forall>I\<subset>set (the (\<U>\<^sub>c (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)))). \<exists>v. v \<Turnstile>\<^sub>t \<T> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) \<and> (\<forall>xa ca ia. UB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> UI dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> LI dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca)))
 3. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<notin> lvars (\<T> s); lt dir c (\<langle>\<V> s\<rangle> x); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> \<U> (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) \<longrightarrow> (set (the (\<U>\<^sub>c (update x c (update\<B>\<I> (UBI_upd dir) i x c s)))) \<subseteq> indices_state (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) \<and> (\<nexists>v. v \<Turnstile>\<^sub>t \<T> (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) \<and> (\<forall>xa ca ia. UB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> UI dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (update x c (update\<B>\<I> (UBI_upd dir) i x c s)))) \<longrightarrow> lt dir (v xa) ca \<or> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> LI dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (update x c (update\<B>\<I> (UBI_upd dir) i x c s)))) \<longrightarrow> lt dir ca (v xa) \<or> ca = v xa))) \<and> (distinct_indices_state (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) \<longrightarrow> (\<forall>I\<subset>set (the (\<U>\<^sub>c (update x c (update\<B>\<I> (UBI_upd dir) i x c s)))). \<exists>v. v \<Turnstile>\<^sub>t \<T> (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) \<and> (\<forall>xa ca ia. UB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> UI dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> LI dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca)))
 4. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<in> lvars (\<T> s); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> \<U> (update\<B>\<I> (UBI_upd dir) i x c s) \<longrightarrow> (set (the (\<U>\<^sub>c (update\<B>\<I> (UBI_upd dir) i x c s))) \<subseteq> indices_state (update\<B>\<I> (UBI_upd dir) i x c s) \<and> (\<nexists>v. v \<Turnstile>\<^sub>t \<T> (update\<B>\<I> (UBI_upd dir) i x c s) \<and> (\<forall>xa ca ia. UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> UI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (update\<B>\<I> (UBI_upd dir) i x c s))) \<longrightarrow> lt dir (v xa) ca \<or> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> LI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (update\<B>\<I> (UBI_upd dir) i x c s))) \<longrightarrow> lt dir ca (v xa) \<or> ca = v xa))) \<and> (distinct_indices_state (update\<B>\<I> (UBI_upd dir) i x c s) \<longrightarrow> (\<forall>I\<subset>set (the (\<U>\<^sub>c (update\<B>\<I> (UBI_upd dir) i x c s))). \<exists>v. v \<Turnstile>\<^sub>t \<T> (update\<B>\<I> (UBI_upd dir) i x c s) \<and> (\<forall>xa ca ia. UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> UI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> LI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca)))
 5. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x); \<not> lt dir c (\<langle>\<V> s\<rangle> x)\<rbrakk> \<Longrightarrow> \<U> (update\<B>\<I> (UBI_upd dir) i x c s) \<longrightarrow> (set (the (\<U>\<^sub>c (update\<B>\<I> (UBI_upd dir) i x c s))) \<subseteq> indices_state (update\<B>\<I> (UBI_upd dir) i x c s) \<and> (\<nexists>v. v \<Turnstile>\<^sub>t \<T> (update\<B>\<I> (UBI_upd dir) i x c s) \<and> (\<forall>xa ca ia. UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> UI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (update\<B>\<I> (UBI_upd dir) i x c s))) \<longrightarrow> lt dir (v xa) ca \<or> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> LI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (update\<B>\<I> (UBI_upd dir) i x c s))) \<longrightarrow> lt dir ca (v xa) \<or> ca = v xa))) \<and> (distinct_indices_state (update\<B>\<I> (UBI_upd dir) i x c s) \<longrightarrow> (\<forall>I\<subset>set (the (\<U>\<^sub>c (update\<B>\<I> (UBI_upd dir) i x c s))). \<exists>v. v \<Turnstile>\<^sub>t \<T> (update\<B>\<I> (UBI_upd dir) i x c s) \<and> (\<forall>xa ca ia. UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> UI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> LI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca)))
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (5 subgoals):
 1. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x)\<rbrakk> \<Longrightarrow> \<U> s \<longrightarrow> (set (the (\<U>\<^sub>c s)) \<subseteq> indices_state s \<and> (\<nexists>v. v \<Turnstile>\<^sub>t \<T> s \<and> (\<forall>x c i. UB dir s x = Some c \<longrightarrow> UI dir s x = i \<longrightarrow> i \<in> set (the (\<U>\<^sub>c s)) \<longrightarrow> lt dir (v x) c \<or> v x = c) \<and> (\<forall>x c i. LB dir s x = Some c \<longrightarrow> LI dir s x = i \<longrightarrow> i \<in> set (the (\<U>\<^sub>c s)) \<longrightarrow> lt dir c (v x) \<or> c = v x))) \<and> (distinct_indices_state s \<longrightarrow> (\<forall>I\<subset>set (the (\<U>\<^sub>c s)). \<exists>v. v \<Turnstile>\<^sub>t \<T> s \<and> (\<forall>x c i. UB dir s x = Some c \<longrightarrow> UI dir s x = i \<longrightarrow> i \<in> I \<longrightarrow> v x = c) \<and> (\<forall>x c i. LB dir s x = Some c \<longrightarrow> LI dir s x = i \<longrightarrow> i \<in> I \<longrightarrow> v x = c)))
 2. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> \<U> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) \<longrightarrow> (set (the (\<U>\<^sub>c (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)))) \<subseteq> indices_state (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) \<and> (\<nexists>v. v \<Turnstile>\<^sub>t \<T> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) \<and> (\<forall>xa ca ia. UB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> UI dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)))) \<longrightarrow> lt dir (v xa) ca \<or> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> LI dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)))) \<longrightarrow> lt dir ca (v xa) \<or> ca = v xa))) \<and> (distinct_indices_state (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) \<longrightarrow> (\<forall>I\<subset>set (the (\<U>\<^sub>c (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)))). \<exists>v. v \<Turnstile>\<^sub>t \<T> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) \<and> (\<forall>xa ca ia. UB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> UI dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> LI dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca)))
 3. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<notin> lvars (\<T> s); lt dir c (\<langle>\<V> s\<rangle> x); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> \<U> (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) \<longrightarrow> (set (the (\<U>\<^sub>c (update x c (update\<B>\<I> (UBI_upd dir) i x c s)))) \<subseteq> indices_state (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) \<and> (\<nexists>v. v \<Turnstile>\<^sub>t \<T> (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) \<and> (\<forall>xa ca ia. UB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> UI dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (update x c (update\<B>\<I> (UBI_upd dir) i x c s)))) \<longrightarrow> lt dir (v xa) ca \<or> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> LI dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (update x c (update\<B>\<I> (UBI_upd dir) i x c s)))) \<longrightarrow> lt dir ca (v xa) \<or> ca = v xa))) \<and> (distinct_indices_state (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) \<longrightarrow> (\<forall>I\<subset>set (the (\<U>\<^sub>c (update x c (update\<B>\<I> (UBI_upd dir) i x c s)))). \<exists>v. v \<Turnstile>\<^sub>t \<T> (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) \<and> (\<forall>xa ca ia. UB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> UI dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> LI dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca)))
 4. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<in> lvars (\<T> s); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> \<U> (update\<B>\<I> (UBI_upd dir) i x c s) \<longrightarrow> (set (the (\<U>\<^sub>c (update\<B>\<I> (UBI_upd dir) i x c s))) \<subseteq> indices_state (update\<B>\<I> (UBI_upd dir) i x c s) \<and> (\<nexists>v. v \<Turnstile>\<^sub>t \<T> (update\<B>\<I> (UBI_upd dir) i x c s) \<and> (\<forall>xa ca ia. UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> UI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (update\<B>\<I> (UBI_upd dir) i x c s))) \<longrightarrow> lt dir (v xa) ca \<or> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> LI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (update\<B>\<I> (UBI_upd dir) i x c s))) \<longrightarrow> lt dir ca (v xa) \<or> ca = v xa))) \<and> (distinct_indices_state (update\<B>\<I> (UBI_upd dir) i x c s) \<longrightarrow> (\<forall>I\<subset>set (the (\<U>\<^sub>c (update\<B>\<I> (UBI_upd dir) i x c s))). \<exists>v. v \<Turnstile>\<^sub>t \<T> (update\<B>\<I> (UBI_upd dir) i x c s) \<and> (\<forall>xa ca ia. UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> UI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> LI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca)))
 5. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x); \<not> lt dir c (\<langle>\<V> s\<rangle> x)\<rbrakk> \<Longrightarrow> \<U> (update\<B>\<I> (UBI_upd dir) i x c s) \<longrightarrow> (set (the (\<U>\<^sub>c (update\<B>\<I> (UBI_upd dir) i x c s))) \<subseteq> indices_state (update\<B>\<I> (UBI_upd dir) i x c s) \<and> (\<nexists>v. v \<Turnstile>\<^sub>t \<T> (update\<B>\<I> (UBI_upd dir) i x c s) \<and> (\<forall>xa ca ia. UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> UI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (update\<B>\<I> (UBI_upd dir) i x c s))) \<longrightarrow> lt dir (v xa) ca \<or> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> LI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (update\<B>\<I> (UBI_upd dir) i x c s))) \<longrightarrow> lt dir ca (v xa) \<or> ca = v xa))) \<and> (distinct_indices_state (update\<B>\<I> (UBI_upd dir) i x c s) \<longrightarrow> (\<forall>I\<subset>set (the (\<U>\<^sub>c (update\<B>\<I> (UBI_upd dir) i x c s))). \<exists>v. v \<Turnstile>\<^sub>t \<T> (update\<B>\<I> (UBI_upd dir) i x c s) \<and> (\<forall>xa ca ia. UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> UI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> LI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca)))
[PROOF STEP]
fix c::'a and x::nat and dir
[PROOF STATE]
proof (state)
goal (5 subgoals):
 1. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x)\<rbrakk> \<Longrightarrow> \<U> s \<longrightarrow> (set (the (\<U>\<^sub>c s)) \<subseteq> indices_state s \<and> (\<nexists>v. v \<Turnstile>\<^sub>t \<T> s \<and> (\<forall>x c i. UB dir s x = Some c \<longrightarrow> UI dir s x = i \<longrightarrow> i \<in> set (the (\<U>\<^sub>c s)) \<longrightarrow> lt dir (v x) c \<or> v x = c) \<and> (\<forall>x c i. LB dir s x = Some c \<longrightarrow> LI dir s x = i \<longrightarrow> i \<in> set (the (\<U>\<^sub>c s)) \<longrightarrow> lt dir c (v x) \<or> c = v x))) \<and> (distinct_indices_state s \<longrightarrow> (\<forall>I\<subset>set (the (\<U>\<^sub>c s)). \<exists>v. v \<Turnstile>\<^sub>t \<T> s \<and> (\<forall>x c i. UB dir s x = Some c \<longrightarrow> UI dir s x = i \<longrightarrow> i \<in> I \<longrightarrow> v x = c) \<and> (\<forall>x c i. LB dir s x = Some c \<longrightarrow> LI dir s x = i \<longrightarrow> i \<in> I \<longrightarrow> v x = c)))
 2. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> \<U> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) \<longrightarrow> (set (the (\<U>\<^sub>c (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)))) \<subseteq> indices_state (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) \<and> (\<nexists>v. v \<Turnstile>\<^sub>t \<T> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) \<and> (\<forall>xa ca ia. UB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> UI dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)))) \<longrightarrow> lt dir (v xa) ca \<or> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> LI dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)))) \<longrightarrow> lt dir ca (v xa) \<or> ca = v xa))) \<and> (distinct_indices_state (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) \<longrightarrow> (\<forall>I\<subset>set (the (\<U>\<^sub>c (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)))). \<exists>v. v \<Turnstile>\<^sub>t \<T> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) \<and> (\<forall>xa ca ia. UB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> UI dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> LI dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca)))
 3. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<notin> lvars (\<T> s); lt dir c (\<langle>\<V> s\<rangle> x); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> \<U> (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) \<longrightarrow> (set (the (\<U>\<^sub>c (update x c (update\<B>\<I> (UBI_upd dir) i x c s)))) \<subseteq> indices_state (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) \<and> (\<nexists>v. v \<Turnstile>\<^sub>t \<T> (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) \<and> (\<forall>xa ca ia. UB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> UI dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (update x c (update\<B>\<I> (UBI_upd dir) i x c s)))) \<longrightarrow> lt dir (v xa) ca \<or> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> LI dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (update x c (update\<B>\<I> (UBI_upd dir) i x c s)))) \<longrightarrow> lt dir ca (v xa) \<or> ca = v xa))) \<and> (distinct_indices_state (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) \<longrightarrow> (\<forall>I\<subset>set (the (\<U>\<^sub>c (update x c (update\<B>\<I> (UBI_upd dir) i x c s)))). \<exists>v. v \<Turnstile>\<^sub>t \<T> (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) \<and> (\<forall>xa ca ia. UB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> UI dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> LI dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca)))
 4. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<in> lvars (\<T> s); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> \<U> (update\<B>\<I> (UBI_upd dir) i x c s) \<longrightarrow> (set (the (\<U>\<^sub>c (update\<B>\<I> (UBI_upd dir) i x c s))) \<subseteq> indices_state (update\<B>\<I> (UBI_upd dir) i x c s) \<and> (\<nexists>v. v \<Turnstile>\<^sub>t \<T> (update\<B>\<I> (UBI_upd dir) i x c s) \<and> (\<forall>xa ca ia. UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> UI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (update\<B>\<I> (UBI_upd dir) i x c s))) \<longrightarrow> lt dir (v xa) ca \<or> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> LI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (update\<B>\<I> (UBI_upd dir) i x c s))) \<longrightarrow> lt dir ca (v xa) \<or> ca = v xa))) \<and> (distinct_indices_state (update\<B>\<I> (UBI_upd dir) i x c s) \<longrightarrow> (\<forall>I\<subset>set (the (\<U>\<^sub>c (update\<B>\<I> (UBI_upd dir) i x c s))). \<exists>v. v \<Turnstile>\<^sub>t \<T> (update\<B>\<I> (UBI_upd dir) i x c s) \<and> (\<forall>xa ca ia. UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> UI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> LI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca)))
 5. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x); \<not> lt dir c (\<langle>\<V> s\<rangle> x)\<rbrakk> \<Longrightarrow> \<U> (update\<B>\<I> (UBI_upd dir) i x c s) \<longrightarrow> (set (the (\<U>\<^sub>c (update\<B>\<I> (UBI_upd dir) i x c s))) \<subseteq> indices_state (update\<B>\<I> (UBI_upd dir) i x c s) \<and> (\<nexists>v. v \<Turnstile>\<^sub>t \<T> (update\<B>\<I> (UBI_upd dir) i x c s) \<and> (\<forall>xa ca ia. UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> UI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (update\<B>\<I> (UBI_upd dir) i x c s))) \<longrightarrow> lt dir (v xa) ca \<or> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> LI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (update\<B>\<I> (UBI_upd dir) i x c s))) \<longrightarrow> lt dir ca (v xa) \<or> ca = v xa))) \<and> (distinct_indices_state (update\<B>\<I> (UBI_upd dir) i x c s) \<longrightarrow> (\<forall>I\<subset>set (the (\<U>\<^sub>c (update\<B>\<I> (UBI_upd dir) i x c s))). \<exists>v. v \<Turnstile>\<^sub>t \<T> (update\<B>\<I> (UBI_upd dir) i x c s) \<and> (\<forall>xa ca ia. UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> UI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> LI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca)))
[PROOF STEP]
assume "\<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)" and dir: "dir = Positive \<or> dir = Negative"
[PROOF STATE]
proof (state)
this:
\<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)
dir = Positive \<or> dir = Negative

goal (5 subgoals):
 1. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x)\<rbrakk> \<Longrightarrow> \<U> s \<longrightarrow> (set (the (\<U>\<^sub>c s)) \<subseteq> indices_state s \<and> (\<nexists>v. v \<Turnstile>\<^sub>t \<T> s \<and> (\<forall>x c i. UB dir s x = Some c \<longrightarrow> UI dir s x = i \<longrightarrow> i \<in> set (the (\<U>\<^sub>c s)) \<longrightarrow> lt dir (v x) c \<or> v x = c) \<and> (\<forall>x c i. LB dir s x = Some c \<longrightarrow> LI dir s x = i \<longrightarrow> i \<in> set (the (\<U>\<^sub>c s)) \<longrightarrow> lt dir c (v x) \<or> c = v x))) \<and> (distinct_indices_state s \<longrightarrow> (\<forall>I\<subset>set (the (\<U>\<^sub>c s)). \<exists>v. v \<Turnstile>\<^sub>t \<T> s \<and> (\<forall>x c i. UB dir s x = Some c \<longrightarrow> UI dir s x = i \<longrightarrow> i \<in> I \<longrightarrow> v x = c) \<and> (\<forall>x c i. LB dir s x = Some c \<longrightarrow> LI dir s x = i \<longrightarrow> i \<in> I \<longrightarrow> v x = c)))
 2. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> \<U> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) \<longrightarrow> (set (the (\<U>\<^sub>c (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)))) \<subseteq> indices_state (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) \<and> (\<nexists>v. v \<Turnstile>\<^sub>t \<T> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) \<and> (\<forall>xa ca ia. UB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> UI dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)))) \<longrightarrow> lt dir (v xa) ca \<or> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> LI dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)))) \<longrightarrow> lt dir ca (v xa) \<or> ca = v xa))) \<and> (distinct_indices_state (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) \<longrightarrow> (\<forall>I\<subset>set (the (\<U>\<^sub>c (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)))). \<exists>v. v \<Turnstile>\<^sub>t \<T> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) \<and> (\<forall>xa ca ia. UB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> UI dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> LI dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca)))
 3. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<notin> lvars (\<T> s); lt dir c (\<langle>\<V> s\<rangle> x); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> \<U> (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) \<longrightarrow> (set (the (\<U>\<^sub>c (update x c (update\<B>\<I> (UBI_upd dir) i x c s)))) \<subseteq> indices_state (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) \<and> (\<nexists>v. v \<Turnstile>\<^sub>t \<T> (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) \<and> (\<forall>xa ca ia. UB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> UI dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (update x c (update\<B>\<I> (UBI_upd dir) i x c s)))) \<longrightarrow> lt dir (v xa) ca \<or> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> LI dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (update x c (update\<B>\<I> (UBI_upd dir) i x c s)))) \<longrightarrow> lt dir ca (v xa) \<or> ca = v xa))) \<and> (distinct_indices_state (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) \<longrightarrow> (\<forall>I\<subset>set (the (\<U>\<^sub>c (update x c (update\<B>\<I> (UBI_upd dir) i x c s)))). \<exists>v. v \<Turnstile>\<^sub>t \<T> (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) \<and> (\<forall>xa ca ia. UB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> UI dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> LI dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca)))
 4. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<in> lvars (\<T> s); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> \<U> (update\<B>\<I> (UBI_upd dir) i x c s) \<longrightarrow> (set (the (\<U>\<^sub>c (update\<B>\<I> (UBI_upd dir) i x c s))) \<subseteq> indices_state (update\<B>\<I> (UBI_upd dir) i x c s) \<and> (\<nexists>v. v \<Turnstile>\<^sub>t \<T> (update\<B>\<I> (UBI_upd dir) i x c s) \<and> (\<forall>xa ca ia. UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> UI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (update\<B>\<I> (UBI_upd dir) i x c s))) \<longrightarrow> lt dir (v xa) ca \<or> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> LI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (update\<B>\<I> (UBI_upd dir) i x c s))) \<longrightarrow> lt dir ca (v xa) \<or> ca = v xa))) \<and> (distinct_indices_state (update\<B>\<I> (UBI_upd dir) i x c s) \<longrightarrow> (\<forall>I\<subset>set (the (\<U>\<^sub>c (update\<B>\<I> (UBI_upd dir) i x c s))). \<exists>v. v \<Turnstile>\<^sub>t \<T> (update\<B>\<I> (UBI_upd dir) i x c s) \<and> (\<forall>xa ca ia. UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> UI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> LI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca)))
 5. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x); \<not> lt dir c (\<langle>\<V> s\<rangle> x)\<rbrakk> \<Longrightarrow> \<U> (update\<B>\<I> (UBI_upd dir) i x c s) \<longrightarrow> (set (the (\<U>\<^sub>c (update\<B>\<I> (UBI_upd dir) i x c s))) \<subseteq> indices_state (update\<B>\<I> (UBI_upd dir) i x c s) \<and> (\<nexists>v. v \<Turnstile>\<^sub>t \<T> (update\<B>\<I> (UBI_upd dir) i x c s) \<and> (\<forall>xa ca ia. UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> UI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (update\<B>\<I> (UBI_upd dir) i x c s))) \<longrightarrow> lt dir (v xa) ca \<or> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> LI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (update\<B>\<I> (UBI_upd dir) i x c s))) \<longrightarrow> lt dir ca (v xa) \<or> ca = v xa))) \<and> (distinct_indices_state (update\<B>\<I> (UBI_upd dir) i x c s) \<longrightarrow> (\<forall>I\<subset>set (the (\<U>\<^sub>c (update\<B>\<I> (UBI_upd dir) i x c s))). \<exists>v. v \<Turnstile>\<^sub>t \<T> (update\<B>\<I> (UBI_upd dir) i x c s) \<and> (\<forall>xa ca ia. UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> UI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> LI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca)))
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
\<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)
dir = Positive \<or> dir = Negative
[PROOF STEP]
obtain d where some: "LB dir s x = Some d" and lt: "lt dir c d"
[PROOF STATE]
proof (prove)
using this:
\<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)
dir = Positive \<or> dir = Negative

goal (1 subgoal):
 1. (\<And>d. \<lbrakk>LB dir s x = Some d; lt dir c d\<rbrakk> \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by (auto simp: bound_compare'_defs split: option.splits)
[PROOF STATE]
proof (state)
this:
LB dir s x = Some d
lt dir c d

goal (5 subgoals):
 1. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x)\<rbrakk> \<Longrightarrow> \<U> s \<longrightarrow> (set (the (\<U>\<^sub>c s)) \<subseteq> indices_state s \<and> (\<nexists>v. v \<Turnstile>\<^sub>t \<T> s \<and> (\<forall>x c i. UB dir s x = Some c \<longrightarrow> UI dir s x = i \<longrightarrow> i \<in> set (the (\<U>\<^sub>c s)) \<longrightarrow> lt dir (v x) c \<or> v x = c) \<and> (\<forall>x c i. LB dir s x = Some c \<longrightarrow> LI dir s x = i \<longrightarrow> i \<in> set (the (\<U>\<^sub>c s)) \<longrightarrow> lt dir c (v x) \<or> c = v x))) \<and> (distinct_indices_state s \<longrightarrow> (\<forall>I\<subset>set (the (\<U>\<^sub>c s)). \<exists>v. v \<Turnstile>\<^sub>t \<T> s \<and> (\<forall>x c i. UB dir s x = Some c \<longrightarrow> UI dir s x = i \<longrightarrow> i \<in> I \<longrightarrow> v x = c) \<and> (\<forall>x c i. LB dir s x = Some c \<longrightarrow> LI dir s x = i \<longrightarrow> i \<in> I \<longrightarrow> v x = c)))
 2. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> \<U> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) \<longrightarrow> (set (the (\<U>\<^sub>c (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)))) \<subseteq> indices_state (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) \<and> (\<nexists>v. v \<Turnstile>\<^sub>t \<T> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) \<and> (\<forall>xa ca ia. UB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> UI dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)))) \<longrightarrow> lt dir (v xa) ca \<or> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> LI dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)))) \<longrightarrow> lt dir ca (v xa) \<or> ca = v xa))) \<and> (distinct_indices_state (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) \<longrightarrow> (\<forall>I\<subset>set (the (\<U>\<^sub>c (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)))). \<exists>v. v \<Turnstile>\<^sub>t \<T> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) \<and> (\<forall>xa ca ia. UB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> UI dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> LI dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca)))
 3. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<notin> lvars (\<T> s); lt dir c (\<langle>\<V> s\<rangle> x); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> \<U> (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) \<longrightarrow> (set (the (\<U>\<^sub>c (update x c (update\<B>\<I> (UBI_upd dir) i x c s)))) \<subseteq> indices_state (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) \<and> (\<nexists>v. v \<Turnstile>\<^sub>t \<T> (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) \<and> (\<forall>xa ca ia. UB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> UI dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (update x c (update\<B>\<I> (UBI_upd dir) i x c s)))) \<longrightarrow> lt dir (v xa) ca \<or> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> LI dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (update x c (update\<B>\<I> (UBI_upd dir) i x c s)))) \<longrightarrow> lt dir ca (v xa) \<or> ca = v xa))) \<and> (distinct_indices_state (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) \<longrightarrow> (\<forall>I\<subset>set (the (\<U>\<^sub>c (update x c (update\<B>\<I> (UBI_upd dir) i x c s)))). \<exists>v. v \<Turnstile>\<^sub>t \<T> (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) \<and> (\<forall>xa ca ia. UB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> UI dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> LI dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca)))
 4. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<in> lvars (\<T> s); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> \<U> (update\<B>\<I> (UBI_upd dir) i x c s) \<longrightarrow> (set (the (\<U>\<^sub>c (update\<B>\<I> (UBI_upd dir) i x c s))) \<subseteq> indices_state (update\<B>\<I> (UBI_upd dir) i x c s) \<and> (\<nexists>v. v \<Turnstile>\<^sub>t \<T> (update\<B>\<I> (UBI_upd dir) i x c s) \<and> (\<forall>xa ca ia. UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> UI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (update\<B>\<I> (UBI_upd dir) i x c s))) \<longrightarrow> lt dir (v xa) ca \<or> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> LI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (update\<B>\<I> (UBI_upd dir) i x c s))) \<longrightarrow> lt dir ca (v xa) \<or> ca = v xa))) \<and> (distinct_indices_state (update\<B>\<I> (UBI_upd dir) i x c s) \<longrightarrow> (\<forall>I\<subset>set (the (\<U>\<^sub>c (update\<B>\<I> (UBI_upd dir) i x c s))). \<exists>v. v \<Turnstile>\<^sub>t \<T> (update\<B>\<I> (UBI_upd dir) i x c s) \<and> (\<forall>xa ca ia. UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> UI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> LI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca)))
 5. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x); \<not> lt dir c (\<langle>\<V> s\<rangle> x)\<rbrakk> \<Longrightarrow> \<U> (update\<B>\<I> (UBI_upd dir) i x c s) \<longrightarrow> (set (the (\<U>\<^sub>c (update\<B>\<I> (UBI_upd dir) i x c s))) \<subseteq> indices_state (update\<B>\<I> (UBI_upd dir) i x c s) \<and> (\<nexists>v. v \<Turnstile>\<^sub>t \<T> (update\<B>\<I> (UBI_upd dir) i x c s) \<and> (\<forall>xa ca ia. UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> UI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (update\<B>\<I> (UBI_upd dir) i x c s))) \<longrightarrow> lt dir (v xa) ca \<or> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> LI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (update\<B>\<I> (UBI_upd dir) i x c s))) \<longrightarrow> lt dir ca (v xa) \<or> ca = v xa))) \<and> (distinct_indices_state (update\<B>\<I> (UBI_upd dir) i x c s) \<longrightarrow> (\<forall>I\<subset>set (the (\<U>\<^sub>c (update\<B>\<I> (UBI_upd dir) i x c s))). \<exists>v. v \<Turnstile>\<^sub>t \<T> (update\<B>\<I> (UBI_upd dir) i x c s) \<and> (\<forall>xa ca ia. UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> UI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> LI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca)))
[PROOF STEP]
from index[unfolded index_valid_def, rule_format, of x _ d]
      some dir
[PROOF STATE]
proof (chain)
picking this:
(Mapping.lookup (\<B>\<^sub>i\<^sub>l s) x = Some (?i, d) \<longrightarrow> (?i, Geq x d) \<in> as) \<and> (Mapping.lookup (\<B>\<^sub>i\<^sub>u s) x = Some (?i, d) \<longrightarrow> (?i, Leq x d) \<in> as)
LB dir s x = Some d
dir = Positive \<or> dir = Negative
[PROOF STEP]
obtain j where ind: "LI dir s x = j" "look (LBI dir s) x = Some (j,d)" and ge: "(j, GE dir x d) \<in> as"
[PROOF STATE]
proof (prove)
using this:
(Mapping.lookup (\<B>\<^sub>i\<^sub>l s) x = Some (?i, d) \<longrightarrow> (?i, Geq x d) \<in> as) \<and> (Mapping.lookup (\<B>\<^sub>i\<^sub>u s) x = Some (?i, d) \<longrightarrow> (?i, Leq x d) \<in> as)
LB dir s x = Some d
dir = Positive \<or> dir = Negative

goal (1 subgoal):
 1. (\<And>j. \<lbrakk>LI dir s x = j; Mapping.lookup (LBI dir s) x = Some (j, d); (j, GE dir x d) \<in> as\<rbrakk> \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by (auto simp: indexl_def indexu_def boundsl_def boundsu_def)
[PROOF STATE]
proof (state)
this:
LI dir s x = j
Mapping.lookup (LBI dir s) x = Some (j, d)
(j, GE dir x d) \<in> as

goal (5 subgoals):
 1. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x)\<rbrakk> \<Longrightarrow> \<U> s \<longrightarrow> (set (the (\<U>\<^sub>c s)) \<subseteq> indices_state s \<and> (\<nexists>v. v \<Turnstile>\<^sub>t \<T> s \<and> (\<forall>x c i. UB dir s x = Some c \<longrightarrow> UI dir s x = i \<longrightarrow> i \<in> set (the (\<U>\<^sub>c s)) \<longrightarrow> lt dir (v x) c \<or> v x = c) \<and> (\<forall>x c i. LB dir s x = Some c \<longrightarrow> LI dir s x = i \<longrightarrow> i \<in> set (the (\<U>\<^sub>c s)) \<longrightarrow> lt dir c (v x) \<or> c = v x))) \<and> (distinct_indices_state s \<longrightarrow> (\<forall>I\<subset>set (the (\<U>\<^sub>c s)). \<exists>v. v \<Turnstile>\<^sub>t \<T> s \<and> (\<forall>x c i. UB dir s x = Some c \<longrightarrow> UI dir s x = i \<longrightarrow> i \<in> I \<longrightarrow> v x = c) \<and> (\<forall>x c i. LB dir s x = Some c \<longrightarrow> LI dir s x = i \<longrightarrow> i \<in> I \<longrightarrow> v x = c)))
 2. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> \<U> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) \<longrightarrow> (set (the (\<U>\<^sub>c (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)))) \<subseteq> indices_state (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) \<and> (\<nexists>v. v \<Turnstile>\<^sub>t \<T> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) \<and> (\<forall>xa ca ia. UB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> UI dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)))) \<longrightarrow> lt dir (v xa) ca \<or> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> LI dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)))) \<longrightarrow> lt dir ca (v xa) \<or> ca = v xa))) \<and> (distinct_indices_state (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) \<longrightarrow> (\<forall>I\<subset>set (the (\<U>\<^sub>c (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)))). \<exists>v. v \<Turnstile>\<^sub>t \<T> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) \<and> (\<forall>xa ca ia. UB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> UI dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> LI dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca)))
 3. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<notin> lvars (\<T> s); lt dir c (\<langle>\<V> s\<rangle> x); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> \<U> (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) \<longrightarrow> (set (the (\<U>\<^sub>c (update x c (update\<B>\<I> (UBI_upd dir) i x c s)))) \<subseteq> indices_state (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) \<and> (\<nexists>v. v \<Turnstile>\<^sub>t \<T> (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) \<and> (\<forall>xa ca ia. UB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> UI dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (update x c (update\<B>\<I> (UBI_upd dir) i x c s)))) \<longrightarrow> lt dir (v xa) ca \<or> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> LI dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (update x c (update\<B>\<I> (UBI_upd dir) i x c s)))) \<longrightarrow> lt dir ca (v xa) \<or> ca = v xa))) \<and> (distinct_indices_state (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) \<longrightarrow> (\<forall>I\<subset>set (the (\<U>\<^sub>c (update x c (update\<B>\<I> (UBI_upd dir) i x c s)))). \<exists>v. v \<Turnstile>\<^sub>t \<T> (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) \<and> (\<forall>xa ca ia. UB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> UI dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> LI dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca)))
 4. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<in> lvars (\<T> s); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> \<U> (update\<B>\<I> (UBI_upd dir) i x c s) \<longrightarrow> (set (the (\<U>\<^sub>c (update\<B>\<I> (UBI_upd dir) i x c s))) \<subseteq> indices_state (update\<B>\<I> (UBI_upd dir) i x c s) \<and> (\<nexists>v. v \<Turnstile>\<^sub>t \<T> (update\<B>\<I> (UBI_upd dir) i x c s) \<and> (\<forall>xa ca ia. UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> UI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (update\<B>\<I> (UBI_upd dir) i x c s))) \<longrightarrow> lt dir (v xa) ca \<or> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> LI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (update\<B>\<I> (UBI_upd dir) i x c s))) \<longrightarrow> lt dir ca (v xa) \<or> ca = v xa))) \<and> (distinct_indices_state (update\<B>\<I> (UBI_upd dir) i x c s) \<longrightarrow> (\<forall>I\<subset>set (the (\<U>\<^sub>c (update\<B>\<I> (UBI_upd dir) i x c s))). \<exists>v. v \<Turnstile>\<^sub>t \<T> (update\<B>\<I> (UBI_upd dir) i x c s) \<and> (\<forall>xa ca ia. UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> UI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> LI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca)))
 5. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x); \<not> lt dir c (\<langle>\<V> s\<rangle> x)\<rbrakk> \<Longrightarrow> \<U> (update\<B>\<I> (UBI_upd dir) i x c s) \<longrightarrow> (set (the (\<U>\<^sub>c (update\<B>\<I> (UBI_upd dir) i x c s))) \<subseteq> indices_state (update\<B>\<I> (UBI_upd dir) i x c s) \<and> (\<nexists>v. v \<Turnstile>\<^sub>t \<T> (update\<B>\<I> (UBI_upd dir) i x c s) \<and> (\<forall>xa ca ia. UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> UI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (update\<B>\<I> (UBI_upd dir) i x c s))) \<longrightarrow> lt dir (v xa) ca \<or> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> LI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (update\<B>\<I> (UBI_upd dir) i x c s))) \<longrightarrow> lt dir ca (v xa) \<or> ca = v xa))) \<and> (distinct_indices_state (update\<B>\<I> (UBI_upd dir) i x c s) \<longrightarrow> (\<forall>I\<subset>set (the (\<U>\<^sub>c (update\<B>\<I> (UBI_upd dir) i x c s))). \<exists>v. v \<Turnstile>\<^sub>t \<T> (update\<B>\<I> (UBI_upd dir) i x c s) \<and> (\<forall>xa ca ia. UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> UI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> LI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca)))
[PROOF STEP]
let ?s = "set_unsat [i, ((LI dir) s x)] (update\<B>\<I> (UBI_upd dir) i x c s)"
[PROOF STATE]
proof (state)
goal (5 subgoals):
 1. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x)\<rbrakk> \<Longrightarrow> \<U> s \<longrightarrow> (set (the (\<U>\<^sub>c s)) \<subseteq> indices_state s \<and> (\<nexists>v. v \<Turnstile>\<^sub>t \<T> s \<and> (\<forall>x c i. UB dir s x = Some c \<longrightarrow> UI dir s x = i \<longrightarrow> i \<in> set (the (\<U>\<^sub>c s)) \<longrightarrow> lt dir (v x) c \<or> v x = c) \<and> (\<forall>x c i. LB dir s x = Some c \<longrightarrow> LI dir s x = i \<longrightarrow> i \<in> set (the (\<U>\<^sub>c s)) \<longrightarrow> lt dir c (v x) \<or> c = v x))) \<and> (distinct_indices_state s \<longrightarrow> (\<forall>I\<subset>set (the (\<U>\<^sub>c s)). \<exists>v. v \<Turnstile>\<^sub>t \<T> s \<and> (\<forall>x c i. UB dir s x = Some c \<longrightarrow> UI dir s x = i \<longrightarrow> i \<in> I \<longrightarrow> v x = c) \<and> (\<forall>x c i. LB dir s x = Some c \<longrightarrow> LI dir s x = i \<longrightarrow> i \<in> I \<longrightarrow> v x = c)))
 2. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> \<U> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) \<longrightarrow> (set (the (\<U>\<^sub>c (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)))) \<subseteq> indices_state (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) \<and> (\<nexists>v. v \<Turnstile>\<^sub>t \<T> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) \<and> (\<forall>xa ca ia. UB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> UI dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)))) \<longrightarrow> lt dir (v xa) ca \<or> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> LI dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)))) \<longrightarrow> lt dir ca (v xa) \<or> ca = v xa))) \<and> (distinct_indices_state (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) \<longrightarrow> (\<forall>I\<subset>set (the (\<U>\<^sub>c (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)))). \<exists>v. v \<Turnstile>\<^sub>t \<T> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) \<and> (\<forall>xa ca ia. UB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> UI dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> LI dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca)))
 3. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<notin> lvars (\<T> s); lt dir c (\<langle>\<V> s\<rangle> x); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> \<U> (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) \<longrightarrow> (set (the (\<U>\<^sub>c (update x c (update\<B>\<I> (UBI_upd dir) i x c s)))) \<subseteq> indices_state (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) \<and> (\<nexists>v. v \<Turnstile>\<^sub>t \<T> (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) \<and> (\<forall>xa ca ia. UB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> UI dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (update x c (update\<B>\<I> (UBI_upd dir) i x c s)))) \<longrightarrow> lt dir (v xa) ca \<or> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> LI dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (update x c (update\<B>\<I> (UBI_upd dir) i x c s)))) \<longrightarrow> lt dir ca (v xa) \<or> ca = v xa))) \<and> (distinct_indices_state (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) \<longrightarrow> (\<forall>I\<subset>set (the (\<U>\<^sub>c (update x c (update\<B>\<I> (UBI_upd dir) i x c s)))). \<exists>v. v \<Turnstile>\<^sub>t \<T> (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) \<and> (\<forall>xa ca ia. UB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> UI dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> LI dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca)))
 4. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<in> lvars (\<T> s); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> \<U> (update\<B>\<I> (UBI_upd dir) i x c s) \<longrightarrow> (set (the (\<U>\<^sub>c (update\<B>\<I> (UBI_upd dir) i x c s))) \<subseteq> indices_state (update\<B>\<I> (UBI_upd dir) i x c s) \<and> (\<nexists>v. v \<Turnstile>\<^sub>t \<T> (update\<B>\<I> (UBI_upd dir) i x c s) \<and> (\<forall>xa ca ia. UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> UI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (update\<B>\<I> (UBI_upd dir) i x c s))) \<longrightarrow> lt dir (v xa) ca \<or> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> LI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (update\<B>\<I> (UBI_upd dir) i x c s))) \<longrightarrow> lt dir ca (v xa) \<or> ca = v xa))) \<and> (distinct_indices_state (update\<B>\<I> (UBI_upd dir) i x c s) \<longrightarrow> (\<forall>I\<subset>set (the (\<U>\<^sub>c (update\<B>\<I> (UBI_upd dir) i x c s))). \<exists>v. v \<Turnstile>\<^sub>t \<T> (update\<B>\<I> (UBI_upd dir) i x c s) \<and> (\<forall>xa ca ia. UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> UI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> LI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca)))
 5. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x); \<not> lt dir c (\<langle>\<V> s\<rangle> x)\<rbrakk> \<Longrightarrow> \<U> (update\<B>\<I> (UBI_upd dir) i x c s) \<longrightarrow> (set (the (\<U>\<^sub>c (update\<B>\<I> (UBI_upd dir) i x c s))) \<subseteq> indices_state (update\<B>\<I> (UBI_upd dir) i x c s) \<and> (\<nexists>v. v \<Turnstile>\<^sub>t \<T> (update\<B>\<I> (UBI_upd dir) i x c s) \<and> (\<forall>xa ca ia. UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> UI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (update\<B>\<I> (UBI_upd dir) i x c s))) \<longrightarrow> lt dir (v xa) ca \<or> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> LI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (update\<B>\<I> (UBI_upd dir) i x c s))) \<longrightarrow> lt dir ca (v xa) \<or> ca = v xa))) \<and> (distinct_indices_state (update\<B>\<I> (UBI_upd dir) i x c s) \<longrightarrow> (\<forall>I\<subset>set (the (\<U>\<^sub>c (update\<B>\<I> (UBI_upd dir) i x c s))). \<exists>v. v \<Turnstile>\<^sub>t \<T> (update\<B>\<I> (UBI_upd dir) i x c s) \<and> (\<forall>xa ca ia. UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> UI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> LI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca)))
[PROOF STEP]
let ?ss = "update\<B>\<I> (UBI_upd dir) i x c s"
[PROOF STATE]
proof (state)
goal (5 subgoals):
 1. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x)\<rbrakk> \<Longrightarrow> \<U> s \<longrightarrow> (set (the (\<U>\<^sub>c s)) \<subseteq> indices_state s \<and> (\<nexists>v. v \<Turnstile>\<^sub>t \<T> s \<and> (\<forall>x c i. UB dir s x = Some c \<longrightarrow> UI dir s x = i \<longrightarrow> i \<in> set (the (\<U>\<^sub>c s)) \<longrightarrow> lt dir (v x) c \<or> v x = c) \<and> (\<forall>x c i. LB dir s x = Some c \<longrightarrow> LI dir s x = i \<longrightarrow> i \<in> set (the (\<U>\<^sub>c s)) \<longrightarrow> lt dir c (v x) \<or> c = v x))) \<and> (distinct_indices_state s \<longrightarrow> (\<forall>I\<subset>set (the (\<U>\<^sub>c s)). \<exists>v. v \<Turnstile>\<^sub>t \<T> s \<and> (\<forall>x c i. UB dir s x = Some c \<longrightarrow> UI dir s x = i \<longrightarrow> i \<in> I \<longrightarrow> v x = c) \<and> (\<forall>x c i. LB dir s x = Some c \<longrightarrow> LI dir s x = i \<longrightarrow> i \<in> I \<longrightarrow> v x = c)))
 2. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> \<U> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) \<longrightarrow> (set (the (\<U>\<^sub>c (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)))) \<subseteq> indices_state (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) \<and> (\<nexists>v. v \<Turnstile>\<^sub>t \<T> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) \<and> (\<forall>xa ca ia. UB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> UI dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)))) \<longrightarrow> lt dir (v xa) ca \<or> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> LI dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)))) \<longrightarrow> lt dir ca (v xa) \<or> ca = v xa))) \<and> (distinct_indices_state (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) \<longrightarrow> (\<forall>I\<subset>set (the (\<U>\<^sub>c (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)))). \<exists>v. v \<Turnstile>\<^sub>t \<T> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) \<and> (\<forall>xa ca ia. UB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> UI dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> LI dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca)))
 3. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<notin> lvars (\<T> s); lt dir c (\<langle>\<V> s\<rangle> x); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> \<U> (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) \<longrightarrow> (set (the (\<U>\<^sub>c (update x c (update\<B>\<I> (UBI_upd dir) i x c s)))) \<subseteq> indices_state (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) \<and> (\<nexists>v. v \<Turnstile>\<^sub>t \<T> (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) \<and> (\<forall>xa ca ia. UB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> UI dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (update x c (update\<B>\<I> (UBI_upd dir) i x c s)))) \<longrightarrow> lt dir (v xa) ca \<or> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> LI dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (update x c (update\<B>\<I> (UBI_upd dir) i x c s)))) \<longrightarrow> lt dir ca (v xa) \<or> ca = v xa))) \<and> (distinct_indices_state (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) \<longrightarrow> (\<forall>I\<subset>set (the (\<U>\<^sub>c (update x c (update\<B>\<I> (UBI_upd dir) i x c s)))). \<exists>v. v \<Turnstile>\<^sub>t \<T> (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) \<and> (\<forall>xa ca ia. UB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> UI dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> LI dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca)))
 4. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<in> lvars (\<T> s); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> \<U> (update\<B>\<I> (UBI_upd dir) i x c s) \<longrightarrow> (set (the (\<U>\<^sub>c (update\<B>\<I> (UBI_upd dir) i x c s))) \<subseteq> indices_state (update\<B>\<I> (UBI_upd dir) i x c s) \<and> (\<nexists>v. v \<Turnstile>\<^sub>t \<T> (update\<B>\<I> (UBI_upd dir) i x c s) \<and> (\<forall>xa ca ia. UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> UI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (update\<B>\<I> (UBI_upd dir) i x c s))) \<longrightarrow> lt dir (v xa) ca \<or> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> LI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (update\<B>\<I> (UBI_upd dir) i x c s))) \<longrightarrow> lt dir ca (v xa) \<or> ca = v xa))) \<and> (distinct_indices_state (update\<B>\<I> (UBI_upd dir) i x c s) \<longrightarrow> (\<forall>I\<subset>set (the (\<U>\<^sub>c (update\<B>\<I> (UBI_upd dir) i x c s))). \<exists>v. v \<Turnstile>\<^sub>t \<T> (update\<B>\<I> (UBI_upd dir) i x c s) \<and> (\<forall>xa ca ia. UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> UI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> LI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca)))
 5. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x); \<not> lt dir c (\<langle>\<V> s\<rangle> x)\<rbrakk> \<Longrightarrow> \<U> (update\<B>\<I> (UBI_upd dir) i x c s) \<longrightarrow> (set (the (\<U>\<^sub>c (update\<B>\<I> (UBI_upd dir) i x c s))) \<subseteq> indices_state (update\<B>\<I> (UBI_upd dir) i x c s) \<and> (\<nexists>v. v \<Turnstile>\<^sub>t \<T> (update\<B>\<I> (UBI_upd dir) i x c s) \<and> (\<forall>xa ca ia. UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> UI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (update\<B>\<I> (UBI_upd dir) i x c s))) \<longrightarrow> lt dir (v xa) ca \<or> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> LI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (update\<B>\<I> (UBI_upd dir) i x c s))) \<longrightarrow> lt dir ca (v xa) \<or> ca = v xa))) \<and> (distinct_indices_state (update\<B>\<I> (UBI_upd dir) i x c s) \<longrightarrow> (\<forall>I\<subset>set (the (\<U>\<^sub>c (update\<B>\<I> (UBI_upd dir) i x c s))). \<exists>v. v \<Turnstile>\<^sub>t \<T> (update\<B>\<I> (UBI_upd dir) i x c s) \<and> (\<forall>xa ca ia. UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> UI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> LI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca)))
[PROOF STEP]
show "?P' (lt dir) (UBI dir) (LBI dir) (UB dir) (LB dir) (UBI_upd dir) (UI dir) (LI dir) (LE dir) (GE dir) ?s"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<U> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) \<longrightarrow> (set (the (\<U>\<^sub>c (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)))) \<subseteq> indices_state (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) \<and> (\<nexists>v. v \<Turnstile>\<^sub>t \<T> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) \<and> (\<forall>xa ca ia. UB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> UI dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)))) \<longrightarrow> lt dir (v xa) ca \<or> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> LI dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)))) \<longrightarrow> lt dir ca (v xa) \<or> ca = v xa))) \<and> (distinct_indices_state (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) \<longrightarrow> (\<forall>I\<subset>set (the (\<U>\<^sub>c (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)))). \<exists>v. v \<Turnstile>\<^sub>t \<T> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) \<and> (\<forall>xa ca ia. UB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> UI dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> LI dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca)))
[PROOF STEP]
proof (intro conjI impI allI, goal_cases)
[PROOF STATE]
proof (state)
goal (3 subgoals):
 1. \<U> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) \<Longrightarrow> set (the (\<U>\<^sub>c (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)))) \<subseteq> indices_state (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s))
 2. \<U> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) \<Longrightarrow> \<nexists>v. v \<Turnstile>\<^sub>t \<T> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) \<and> (\<forall>xa ca ia. UB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> UI dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)))) \<longrightarrow> lt dir (v xa) ca \<or> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> LI dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)))) \<longrightarrow> lt dir ca (v xa) \<or> ca = v xa)
 3. \<And>I. \<lbrakk>\<U> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)); distinct_indices_state (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)); I \<subset> set (the (\<U>\<^sub>c (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s))))\<rbrakk> \<Longrightarrow> \<exists>v. v \<Turnstile>\<^sub>t \<T> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) \<and> (\<forall>xa ca ia. UB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> UI dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> LI dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca)
[PROOF STEP]
case 1
[PROOF STATE]
proof (state)
this:
\<U> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s))

goal (3 subgoals):
 1. \<U> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) \<Longrightarrow> set (the (\<U>\<^sub>c (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)))) \<subseteq> indices_state (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s))
 2. \<U> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) \<Longrightarrow> \<nexists>v. v \<Turnstile>\<^sub>t \<T> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) \<and> (\<forall>xa ca ia. UB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> UI dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)))) \<longrightarrow> lt dir (v xa) ca \<or> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> LI dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)))) \<longrightarrow> lt dir ca (v xa) \<or> ca = v xa)
 3. \<And>I. \<lbrakk>\<U> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)); distinct_indices_state (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)); I \<subset> set (the (\<U>\<^sub>c (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s))))\<rbrakk> \<Longrightarrow> \<exists>v. v \<Turnstile>\<^sub>t \<T> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) \<and> (\<forall>xa ca ia. UB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> UI dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> LI dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca)
[PROOF STEP]
thus ?case
[PROOF STATE]
proof (prove)
using this:
\<U> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s))

goal (1 subgoal):
 1. set (the (\<U>\<^sub>c (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)))) \<subseteq> indices_state (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s))
[PROOF STEP]
using dir ind ge lt some
[PROOF STATE]
proof (prove)
using this:
\<U> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s))
dir = Positive \<or> dir = Negative
LI dir s x = j
Mapping.lookup (LBI dir s) x = Some (j, d)
(j, GE dir x d) \<in> as
lt dir c d
LB dir s x = Some d

goal (1 subgoal):
 1. set (the (\<U>\<^sub>c (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)))) \<subseteq> indices_state (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s))
[PROOF STEP]
by (force simp: indices_state_def split: if_splits)
[PROOF STATE]
proof (state)
this:
set (the (\<U>\<^sub>c (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)))) \<subseteq> indices_state (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s))

goal (2 subgoals):
 1. \<U> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) \<Longrightarrow> \<nexists>v. v \<Turnstile>\<^sub>t \<T> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) \<and> (\<forall>xa ca ia. UB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> UI dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)))) \<longrightarrow> lt dir (v xa) ca \<or> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> LI dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)))) \<longrightarrow> lt dir ca (v xa) \<or> ca = v xa)
 2. \<And>I. \<lbrakk>\<U> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)); distinct_indices_state (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)); I \<subset> set (the (\<U>\<^sub>c (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s))))\<rbrakk> \<Longrightarrow> \<exists>v. v \<Turnstile>\<^sub>t \<T> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) \<and> (\<forall>xa ca ia. UB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> UI dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> LI dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca)
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (2 subgoals):
 1. \<U> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) \<Longrightarrow> \<nexists>v. v \<Turnstile>\<^sub>t \<T> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) \<and> (\<forall>xa ca ia. UB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> UI dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)))) \<longrightarrow> lt dir (v xa) ca \<or> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> LI dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)))) \<longrightarrow> lt dir ca (v xa) \<or> ca = v xa)
 2. \<And>I. \<lbrakk>\<U> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)); distinct_indices_state (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)); I \<subset> set (the (\<U>\<^sub>c (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s))))\<rbrakk> \<Longrightarrow> \<exists>v. v \<Turnstile>\<^sub>t \<T> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) \<and> (\<forall>xa ca ia. UB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> UI dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> LI dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca)
[PROOF STEP]
case 2
[PROOF STATE]
proof (state)
this:
\<U> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s))

goal (2 subgoals):
 1. \<U> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) \<Longrightarrow> \<nexists>v. v \<Turnstile>\<^sub>t \<T> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) \<and> (\<forall>xa ca ia. UB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> UI dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)))) \<longrightarrow> lt dir (v xa) ca \<or> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> LI dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)))) \<longrightarrow> lt dir ca (v xa) \<or> ca = v xa)
 2. \<And>I. \<lbrakk>\<U> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)); distinct_indices_state (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)); I \<subset> set (the (\<U>\<^sub>c (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s))))\<rbrakk> \<Longrightarrow> \<exists>v. v \<Turnstile>\<^sub>t \<T> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) \<and> (\<forall>xa ca ia. UB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> UI dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> LI dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca)
[PROOF STEP]
{
[PROOF STATE]
proof (state)
this:
\<U> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s))

goal (2 subgoals):
 1. \<U> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) \<Longrightarrow> \<nexists>v. v \<Turnstile>\<^sub>t \<T> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) \<and> (\<forall>xa ca ia. UB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> UI dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)))) \<longrightarrow> lt dir (v xa) ca \<or> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> LI dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)))) \<longrightarrow> lt dir ca (v xa) \<or> ca = v xa)
 2. \<And>I. \<lbrakk>\<U> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)); distinct_indices_state (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)); I \<subset> set (the (\<U>\<^sub>c (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s))))\<rbrakk> \<Longrightarrow> \<exists>v. v \<Turnstile>\<^sub>t \<T> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) \<and> (\<forall>xa ca ia. UB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> UI dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> LI dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca)
[PROOF STEP]
fix v
[PROOF STATE]
proof (state)
goal (2 subgoals):
 1. \<U> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) \<Longrightarrow> \<nexists>v. v \<Turnstile>\<^sub>t \<T> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) \<and> (\<forall>xa ca ia. UB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> UI dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)))) \<longrightarrow> lt dir (v xa) ca \<or> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> LI dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)))) \<longrightarrow> lt dir ca (v xa) \<or> ca = v xa)
 2. \<And>I. \<lbrakk>\<U> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)); distinct_indices_state (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)); I \<subset> set (the (\<U>\<^sub>c (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s))))\<rbrakk> \<Longrightarrow> \<exists>v. v \<Turnstile>\<^sub>t \<T> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) \<and> (\<forall>xa ca ia. UB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> UI dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> LI dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca)
[PROOF STEP]
assume vU: "\<forall> x c i. ?modelU (lt dir) (UB dir) (UI dir) ?s v x c i"
[PROOF STATE]
proof (state)
this:
\<forall>xa ca ia. UB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> UI dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)))) \<longrightarrow> lt dir (v xa) ca \<or> v xa = ca

goal (2 subgoals):
 1. \<U> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) \<Longrightarrow> \<nexists>v. v \<Turnstile>\<^sub>t \<T> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) \<and> (\<forall>xa ca ia. UB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> UI dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)))) \<longrightarrow> lt dir (v xa) ca \<or> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> LI dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)))) \<longrightarrow> lt dir ca (v xa) \<or> ca = v xa)
 2. \<And>I. \<lbrakk>\<U> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)); distinct_indices_state (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)); I \<subset> set (the (\<U>\<^sub>c (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s))))\<rbrakk> \<Longrightarrow> \<exists>v. v \<Turnstile>\<^sub>t \<T> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) \<and> (\<forall>xa ca ia. UB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> UI dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> LI dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca)
[PROOF STEP]
assume vL: "\<forall> x c i. ?modelL (lt dir) (LB dir) (LI dir) ?s v x c i"
[PROOF STATE]
proof (state)
this:
\<forall>xa ca ia. LB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> LI dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)))) \<longrightarrow> lt dir ca (v xa) \<or> ca = v xa

goal (2 subgoals):
 1. \<U> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) \<Longrightarrow> \<nexists>v. v \<Turnstile>\<^sub>t \<T> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) \<and> (\<forall>xa ca ia. UB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> UI dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)))) \<longrightarrow> lt dir (v xa) ca \<or> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> LI dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)))) \<longrightarrow> lt dir ca (v xa) \<or> ca = v xa)
 2. \<And>I. \<lbrakk>\<U> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)); distinct_indices_state (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)); I \<subset> set (the (\<U>\<^sub>c (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s))))\<rbrakk> \<Longrightarrow> \<exists>v. v \<Turnstile>\<^sub>t \<T> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) \<and> (\<forall>xa ca ia. UB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> UI dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> LI dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca)
[PROOF STEP]
from dir
[PROOF STATE]
proof (chain)
picking this:
dir = Positive \<or> dir = Negative
[PROOF STEP]
have "UB dir ?s x = Some c" "UI dir ?s x = i"
[PROOF STATE]
proof (prove)
using this:
dir = Positive \<or> dir = Negative

goal (1 subgoal):
 1. UB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) x = Some c &&& UI dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) x = i
[PROOF STEP]
by (auto simp: boundsl_def boundsu_def indexl_def indexu_def)
[PROOF STATE]
proof (state)
this:
UB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) x = Some c
UI dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) x = i

goal (2 subgoals):
 1. \<U> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) \<Longrightarrow> \<nexists>v. v \<Turnstile>\<^sub>t \<T> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) \<and> (\<forall>xa ca ia. UB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> UI dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)))) \<longrightarrow> lt dir (v xa) ca \<or> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> LI dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)))) \<longrightarrow> lt dir ca (v xa) \<or> ca = v xa)
 2. \<And>I. \<lbrakk>\<U> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)); distinct_indices_state (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)); I \<subset> set (the (\<U>\<^sub>c (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s))))\<rbrakk> \<Longrightarrow> \<exists>v. v \<Turnstile>\<^sub>t \<T> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) \<and> (\<forall>xa ca ia. UB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> UI dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> LI dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca)
[PROOF STEP]
from vU[rule_format, OF this]
[PROOF STATE]
proof (chain)
picking this:
i \<in> set (the (\<U>\<^sub>c (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)))) \<Longrightarrow> lt dir (v x) c \<or> v x = c
[PROOF STEP]
have vx_le_c: "lt dir (v x) c \<or> v x = c"
[PROOF STATE]
proof (prove)
using this:
i \<in> set (the (\<U>\<^sub>c (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)))) \<Longrightarrow> lt dir (v x) c \<or> v x = c

goal (1 subgoal):
 1. lt dir (v x) c \<or> v x = c
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
lt dir (v x) c \<or> v x = c

goal (2 subgoals):
 1. \<U> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) \<Longrightarrow> \<nexists>v. v \<Turnstile>\<^sub>t \<T> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) \<and> (\<forall>xa ca ia. UB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> UI dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)))) \<longrightarrow> lt dir (v xa) ca \<or> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> LI dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)))) \<longrightarrow> lt dir ca (v xa) \<or> ca = v xa)
 2. \<And>I. \<lbrakk>\<U> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)); distinct_indices_state (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)); I \<subset> set (the (\<U>\<^sub>c (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s))))\<rbrakk> \<Longrightarrow> \<exists>v. v \<Turnstile>\<^sub>t \<T> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) \<and> (\<forall>xa ca ia. UB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> UI dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> LI dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca)
[PROOF STEP]
from dir ind some
[PROOF STATE]
proof (chain)
picking this:
dir = Positive \<or> dir = Negative
LI dir s x = j
Mapping.lookup (LBI dir s) x = Some (j, d)
LB dir s x = Some d
[PROOF STEP]
have *: "LB dir ?s x = Some d" "LI dir ?s x = j"
[PROOF STATE]
proof (prove)
using this:
dir = Positive \<or> dir = Negative
LI dir s x = j
Mapping.lookup (LBI dir s) x = Some (j, d)
LB dir s x = Some d

goal (1 subgoal):
 1. LB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) x = Some d &&& LI dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) x = j
[PROOF STEP]
by (auto simp: boundsl_def boundsu_def indexl_def indexu_def)
[PROOF STATE]
proof (state)
this:
LB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) x = Some d
LI dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) x = j

goal (2 subgoals):
 1. \<U> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) \<Longrightarrow> \<nexists>v. v \<Turnstile>\<^sub>t \<T> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) \<and> (\<forall>xa ca ia. UB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> UI dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)))) \<longrightarrow> lt dir (v xa) ca \<or> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> LI dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)))) \<longrightarrow> lt dir ca (v xa) \<or> ca = v xa)
 2. \<And>I. \<lbrakk>\<U> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)); distinct_indices_state (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)); I \<subset> set (the (\<U>\<^sub>c (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s))))\<rbrakk> \<Longrightarrow> \<exists>v. v \<Turnstile>\<^sub>t \<T> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) \<and> (\<forall>xa ca ia. UB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> UI dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> LI dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca)
[PROOF STEP]
have d_le_vx: "lt dir d (v x) \<or> d = v x"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. lt dir d (v x) \<or> d = v x
[PROOF STEP]
by (intro vL[rule_format, OF *], insert some ind, auto)
[PROOF STATE]
proof (state)
this:
lt dir d (v x) \<or> d = v x

goal (2 subgoals):
 1. \<U> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) \<Longrightarrow> \<nexists>v. v \<Turnstile>\<^sub>t \<T> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) \<and> (\<forall>xa ca ia. UB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> UI dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)))) \<longrightarrow> lt dir (v xa) ca \<or> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> LI dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)))) \<longrightarrow> lt dir ca (v xa) \<or> ca = v xa)
 2. \<And>I. \<lbrakk>\<U> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)); distinct_indices_state (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)); I \<subset> set (the (\<U>\<^sub>c (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s))))\<rbrakk> \<Longrightarrow> \<exists>v. v \<Turnstile>\<^sub>t \<T> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) \<and> (\<forall>xa ca ia. UB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> UI dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> LI dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca)
[PROOF STEP]
from dir d_le_vx vx_le_c lt
[PROOF STATE]
proof (chain)
picking this:
dir = Positive \<or> dir = Negative
lt dir d (v x) \<or> d = v x
lt dir (v x) c \<or> v x = c
lt dir c d
[PROOF STEP]
have False
[PROOF STATE]
proof (prove)
using this:
dir = Positive \<or> dir = Negative
lt dir d (v x) \<or> d = v x
lt dir (v x) c \<or> v x = c
lt dir c d

goal (1 subgoal):
 1. False
[PROOF STEP]
by (auto simp del: Simplex.bounds_lg)
[PROOF STATE]
proof (state)
this:
False

goal (2 subgoals):
 1. \<U> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) \<Longrightarrow> \<nexists>v. v \<Turnstile>\<^sub>t \<T> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) \<and> (\<forall>xa ca ia. UB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> UI dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)))) \<longrightarrow> lt dir (v xa) ca \<or> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> LI dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)))) \<longrightarrow> lt dir ca (v xa) \<or> ca = v xa)
 2. \<And>I. \<lbrakk>\<U> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)); distinct_indices_state (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)); I \<subset> set (the (\<U>\<^sub>c (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s))))\<rbrakk> \<Longrightarrow> \<exists>v. v \<Turnstile>\<^sub>t \<T> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) \<and> (\<forall>xa ca ia. UB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> UI dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> LI dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca)
[PROOF STEP]
}
[PROOF STATE]
proof (state)
this:
\<lbrakk>\<forall>xa ca ia. UB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> UI dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)))) \<longrightarrow> lt dir (?v7 xa) ca \<or> ?v7 xa = ca; \<forall>xa ca ia. LB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> LI dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)))) \<longrightarrow> lt dir ca (?v7 xa) \<or> ca = ?v7 xa\<rbrakk> \<Longrightarrow> False

goal (2 subgoals):
 1. \<U> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) \<Longrightarrow> \<nexists>v. v \<Turnstile>\<^sub>t \<T> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) \<and> (\<forall>xa ca ia. UB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> UI dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)))) \<longrightarrow> lt dir (v xa) ca \<or> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> LI dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)))) \<longrightarrow> lt dir ca (v xa) \<or> ca = v xa)
 2. \<And>I. \<lbrakk>\<U> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)); distinct_indices_state (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)); I \<subset> set (the (\<U>\<^sub>c (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s))))\<rbrakk> \<Longrightarrow> \<exists>v. v \<Turnstile>\<^sub>t \<T> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) \<and> (\<forall>xa ca ia. UB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> UI dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> LI dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca)
[PROOF STEP]
thus ?case
[PROOF STATE]
proof (prove)
using this:
\<lbrakk>\<forall>xa ca ia. UB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> UI dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)))) \<longrightarrow> lt dir (?v7 xa) ca \<or> ?v7 xa = ca; \<forall>xa ca ia. LB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> LI dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)))) \<longrightarrow> lt dir ca (?v7 xa) \<or> ca = ?v7 xa\<rbrakk> \<Longrightarrow> False

goal (1 subgoal):
 1. \<nexists>v. v \<Turnstile>\<^sub>t \<T> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) \<and> (\<forall>xa ca ia. UB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> UI dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)))) \<longrightarrow> lt dir (v xa) ca \<or> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> LI dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)))) \<longrightarrow> lt dir ca (v xa) \<or> ca = v xa)
[PROOF STEP]
by blast
[PROOF STATE]
proof (state)
this:
\<nexists>v. v \<Turnstile>\<^sub>t \<T> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) \<and> (\<forall>xa ca ia. UB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> UI dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)))) \<longrightarrow> lt dir (v xa) ca \<or> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> LI dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)))) \<longrightarrow> lt dir ca (v xa) \<or> ca = v xa)

goal (1 subgoal):
 1. \<And>I. \<lbrakk>\<U> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)); distinct_indices_state (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)); I \<subset> set (the (\<U>\<^sub>c (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s))))\<rbrakk> \<Longrightarrow> \<exists>v. v \<Turnstile>\<^sub>t \<T> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) \<and> (\<forall>xa ca ia. UB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> UI dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> LI dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca)
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. \<And>I. \<lbrakk>\<U> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)); distinct_indices_state (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)); I \<subset> set (the (\<U>\<^sub>c (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s))))\<rbrakk> \<Longrightarrow> \<exists>v. v \<Turnstile>\<^sub>t \<T> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) \<and> (\<forall>xa ca ia. UB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> UI dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> LI dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca)
[PROOF STEP]
case (3 I)
[PROOF STATE]
proof (state)
this:
\<U> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s))
distinct_indices_state (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s))
I \<subset> set (the (\<U>\<^sub>c (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s))))

goal (1 subgoal):
 1. \<And>I. \<lbrakk>\<U> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)); distinct_indices_state (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)); I \<subset> set (the (\<U>\<^sub>c (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s))))\<rbrakk> \<Longrightarrow> \<exists>v. v \<Turnstile>\<^sub>t \<T> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) \<and> (\<forall>xa ca ia. UB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> UI dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> LI dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca)
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
\<U> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s))
distinct_indices_state (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s))
I \<subset> set (the (\<U>\<^sub>c (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s))))
[PROOF STEP]
obtain j where I: "I \<subseteq> {j}"
[PROOF STATE]
proof (prove)
using this:
\<U> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s))
distinct_indices_state (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s))
I \<subset> set (the (\<U>\<^sub>c (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s))))

goal (1 subgoal):
 1. (\<And>j. I \<subseteq> {j} \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by (auto split: if_splits)
[PROOF STATE]
proof (state)
this:
I \<subseteq> {j}

goal (1 subgoal):
 1. \<And>I. \<lbrakk>\<U> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)); distinct_indices_state (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)); I \<subset> set (the (\<U>\<^sub>c (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s))))\<rbrakk> \<Longrightarrow> \<exists>v. v \<Turnstile>\<^sub>t \<T> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) \<and> (\<forall>xa ca ia. UB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> UI dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> LI dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca)
[PROOF STEP]
from 3
[PROOF STATE]
proof (chain)
picking this:
\<U> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s))
distinct_indices_state (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s))
I \<subset> set (the (\<U>\<^sub>c (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s))))
[PROOF STEP]
have dist: "distinct_indices_state ?ss"
[PROOF STATE]
proof (prove)
using this:
\<U> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s))
distinct_indices_state (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s))
I \<subset> set (the (\<U>\<^sub>c (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s))))

goal (1 subgoal):
 1. distinct_indices_state (update\<B>\<I> (UBI_upd dir) i x c s)
[PROOF STEP]
unfolding distinct_indices_state_def
[PROOF STATE]
proof (prove)
using this:
\<U> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s))
\<forall>ia xa b x' b'. Mapping.lookup (\<B>\<^sub>i\<^sub>l (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s))) xa = Some (ia, b) \<or> Mapping.lookup (\<B>\<^sub>i\<^sub>u (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s))) xa = Some (ia, b) \<longrightarrow> Mapping.lookup (\<B>\<^sub>i\<^sub>l (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s))) x' = Some (ia, b') \<or> Mapping.lookup (\<B>\<^sub>i\<^sub>u (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s))) x' = Some (ia, b') \<longrightarrow> xa = x' \<and> b = b'
I \<subset> set (the (\<U>\<^sub>c (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s))))

goal (1 subgoal):
 1. \<forall>ia xa b x' b'. Mapping.lookup (\<B>\<^sub>i\<^sub>l (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some (ia, b) \<or> Mapping.lookup (\<B>\<^sub>i\<^sub>u (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some (ia, b) \<longrightarrow> Mapping.lookup (\<B>\<^sub>i\<^sub>l (update\<B>\<I> (UBI_upd dir) i x c s)) x' = Some (ia, b') \<or> Mapping.lookup (\<B>\<^sub>i\<^sub>u (update\<B>\<I> (UBI_upd dir) i x c s)) x' = Some (ia, b') \<longrightarrow> xa = x' \<and> b = b'
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
distinct_indices_state (update\<B>\<I> (UBI_upd dir) i x c s)

goal (1 subgoal):
 1. \<And>I. \<lbrakk>\<U> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)); distinct_indices_state (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)); I \<subset> set (the (\<U>\<^sub>c (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s))))\<rbrakk> \<Longrightarrow> \<exists>v. v \<Turnstile>\<^sub>t \<T> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) \<and> (\<forall>xa ca ia. UB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> UI dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> LI dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca)
[PROOF STEP]
have id1: "UB dir ?s y = UB dir ?ss y" "LB dir ?s y = LB dir ?ss y"
               "UI dir ?s y = UI dir ?ss y" "LI dir ?s y = LI dir ?ss y"
               "\<T> ?s = \<T> s"
               "set (the (\<U>\<^sub>c ?s)) = {i,LI dir s x}" for y
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (UB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) y = UB dir (update\<B>\<I> (UBI_upd dir) i x c s) y &&& LB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) y = LB dir (update\<B>\<I> (UBI_upd dir) i x c s) y &&& UI dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) y = UI dir (update\<B>\<I> (UBI_upd dir) i x c s) y) &&& LI dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) y = LI dir (update\<B>\<I> (UBI_upd dir) i x c s) y &&& \<T> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) = \<T> s &&& set (the (\<U>\<^sub>c (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)))) = {i, LI dir s x}
[PROOF STEP]
using dir
[PROOF STATE]
proof (prove)
using this:
dir = Positive \<or> dir = Negative

goal (1 subgoal):
 1. (UB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) y = UB dir (update\<B>\<I> (UBI_upd dir) i x c s) y &&& LB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) y = LB dir (update\<B>\<I> (UBI_upd dir) i x c s) y &&& UI dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) y = UI dir (update\<B>\<I> (UBI_upd dir) i x c s) y) &&& LI dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) y = LI dir (update\<B>\<I> (UBI_upd dir) i x c s) y &&& \<T> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) = \<T> s &&& set (the (\<U>\<^sub>c (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)))) = {i, LI dir s x}
[PROOF STEP]
by (auto simp: boundsu_def boundsl_def indexu_def indexl_def)
[PROOF STATE]
proof (state)
this:
UB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) ?y5 = UB dir (update\<B>\<I> (UBI_upd dir) i x c s) ?y5
LB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) ?y5 = LB dir (update\<B>\<I> (UBI_upd dir) i x c s) ?y5
UI dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) ?y5 = UI dir (update\<B>\<I> (UBI_upd dir) i x c s) ?y5
LI dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) ?y5 = LI dir (update\<B>\<I> (UBI_upd dir) i x c s) ?y5
\<T> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) = \<T> s
set (the (\<U>\<^sub>c (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)))) = {i, LI dir s x}

goal (1 subgoal):
 1. \<And>I. \<lbrakk>\<U> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)); distinct_indices_state (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)); I \<subset> set (the (\<U>\<^sub>c (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s))))\<rbrakk> \<Longrightarrow> \<exists>v. v \<Turnstile>\<^sub>t \<T> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) \<and> (\<forall>xa ca ia. UB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> UI dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> LI dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca)
[PROOF STEP]
from I
[PROOF STATE]
proof (chain)
picking this:
I \<subseteq> {j}
[PROOF STEP]
have id: "(\<forall> k. P1 k \<longrightarrow> P2 k \<longrightarrow> k \<in> I \<longrightarrow> Q k) \<longleftrightarrow> (I = {} \<or> (P1 j \<longrightarrow> P2 j \<longrightarrow> Q j))" for P1 P2 Q
[PROOF STATE]
proof (prove)
using this:
I \<subseteq> {j}

goal (1 subgoal):
 1. (\<forall>k. P1 k \<longrightarrow> P2 k \<longrightarrow> k \<in> I \<longrightarrow> Q k) = (I = {} \<or> (P1 j \<longrightarrow> P2 j \<longrightarrow> Q j))
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
(\<forall>k. ?P1.5 k \<longrightarrow> ?P2.5 k \<longrightarrow> k \<in> I \<longrightarrow> ?Q5 k) = (I = {} \<or> (?P1.5 j \<longrightarrow> ?P2.5 j \<longrightarrow> ?Q5 j))

goal (1 subgoal):
 1. \<And>I. \<lbrakk>\<U> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)); distinct_indices_state (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)); I \<subset> set (the (\<U>\<^sub>c (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s))))\<rbrakk> \<Longrightarrow> \<exists>v. v \<Turnstile>\<^sub>t \<T> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) \<and> (\<forall>xa ca ia. UB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> UI dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> LI dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca)
[PROOF STEP]
have id2: "(UB dir s xa = Some ca \<longrightarrow> UI dir s xa = j \<longrightarrow> P) = (look (UBI dir s) xa = Some (j,ca) \<longrightarrow> P)"
          "(LB dir s xa = Some ca \<longrightarrow> LI dir s xa = j \<longrightarrow> P) = (look (LBI dir s) xa = Some (j,ca) \<longrightarrow> P)" for xa ca P s
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (UB dir s xa = Some ca \<longrightarrow> UI dir s xa = j \<longrightarrow> P) = (Mapping.lookup (UBI dir s) xa = Some (j, ca) \<longrightarrow> P) &&& (LB dir s xa = Some ca \<longrightarrow> LI dir s xa = j \<longrightarrow> P) = (Mapping.lookup (LBI dir s) xa = Some (j, ca) \<longrightarrow> P)
[PROOF STEP]
using dir
[PROOF STATE]
proof (prove)
using this:
dir = Positive \<or> dir = Negative

goal (1 subgoal):
 1. (UB dir s xa = Some ca \<longrightarrow> UI dir s xa = j \<longrightarrow> P) = (Mapping.lookup (UBI dir s) xa = Some (j, ca) \<longrightarrow> P) &&& (LB dir s xa = Some ca \<longrightarrow> LI dir s xa = j \<longrightarrow> P) = (Mapping.lookup (LBI dir s) xa = Some (j, ca) \<longrightarrow> P)
[PROOF STEP]
by (auto simp: boundsu_def indexu_def boundsl_def indexl_def)
[PROOF STATE]
proof (state)
this:
(UB dir ?s5 ?xa5 = Some ?ca5 \<longrightarrow> UI dir ?s5 ?xa5 = j \<longrightarrow> ?P5) = (Mapping.lookup (UBI dir ?s5) ?xa5 = Some (j, ?ca5) \<longrightarrow> ?P5)
(LB dir ?s5 ?xa5 = Some ?ca5 \<longrightarrow> LI dir ?s5 ?xa5 = j \<longrightarrow> ?P5) = (Mapping.lookup (LBI dir ?s5) ?xa5 = Some (j, ?ca5) \<longrightarrow> ?P5)

goal (1 subgoal):
 1. \<And>I. \<lbrakk>\<U> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)); distinct_indices_state (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)); I \<subset> set (the (\<U>\<^sub>c (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s))))\<rbrakk> \<Longrightarrow> \<exists>v. v \<Turnstile>\<^sub>t \<T> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) \<and> (\<forall>xa ca ia. UB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> UI dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> LI dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca)
[PROOF STEP]
have "\<exists>v. v \<Turnstile>\<^sub>t \<T> s \<and>
             (\<forall>xa ca ia.
                 UB dir ?ss xa = Some ca \<longrightarrow> UI dir ?ss xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca) \<and>
             (\<forall>xa ca ia.
                 LB dir ?ss xa = Some ca \<longrightarrow> LI dir ?ss xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<exists>v. v \<Turnstile>\<^sub>t \<T> s \<and> (\<forall>xa ca ia. UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> UI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> LI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca)
[PROOF STEP]
proof (cases "\<exists> xa ca. look (UBI dir ?ss) xa = Some (j,ca) \<or> look (LBI dir ?ss) xa = Some (j,ca)")
[PROOF STATE]
proof (state)
goal (2 subgoals):
 1. \<exists>xa ca. Mapping.lookup (UBI dir (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some (j, ca) \<or> Mapping.lookup (LBI dir (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some (j, ca) \<Longrightarrow> \<exists>v. v \<Turnstile>\<^sub>t \<T> s \<and> (\<forall>xa ca ia. UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> UI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> LI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca)
 2. \<nexists>xa ca. Mapping.lookup (UBI dir (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some (j, ca) \<or> Mapping.lookup (LBI dir (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some (j, ca) \<Longrightarrow> \<exists>v. v \<Turnstile>\<^sub>t \<T> s \<and> (\<forall>xa ca ia. UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> UI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> LI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca)
[PROOF STEP]
case False
[PROOF STATE]
proof (state)
this:
\<nexists>xa ca. Mapping.lookup (UBI dir (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some (j, ca) \<or> Mapping.lookup (LBI dir (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some (j, ca)

goal (2 subgoals):
 1. \<exists>xa ca. Mapping.lookup (UBI dir (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some (j, ca) \<or> Mapping.lookup (LBI dir (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some (j, ca) \<Longrightarrow> \<exists>v. v \<Turnstile>\<^sub>t \<T> s \<and> (\<forall>xa ca ia. UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> UI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> LI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca)
 2. \<nexists>xa ca. Mapping.lookup (UBI dir (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some (j, ca) \<or> Mapping.lookup (LBI dir (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some (j, ca) \<Longrightarrow> \<exists>v. v \<Turnstile>\<^sub>t \<T> s \<and> (\<forall>xa ca ia. UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> UI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> LI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca)
[PROOF STEP]
thus ?thesis
[PROOF STATE]
proof (prove)
using this:
\<nexists>xa ca. Mapping.lookup (UBI dir (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some (j, ca) \<or> Mapping.lookup (LBI dir (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some (j, ca)

goal (1 subgoal):
 1. \<exists>v. v \<Turnstile>\<^sub>t \<T> s \<and> (\<forall>xa ca ia. UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> UI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> LI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca)
[PROOF STEP]
unfolding id id2
[PROOF STATE]
proof (prove)
using this:
\<nexists>xa ca. Mapping.lookup (UBI dir (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some (j, ca) \<or> Mapping.lookup (LBI dir (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some (j, ca)

goal (1 subgoal):
 1. \<exists>v. v \<Turnstile>\<^sub>t \<T> s \<and> (\<forall>xa ca. I = {} \<or> (Mapping.lookup (UBI dir (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some (j, ca) \<longrightarrow> v xa = ca)) \<and> (\<forall>xa ca. I = {} \<or> (Mapping.lookup (LBI dir (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some (j, ca) \<longrightarrow> v xa = ca))
[PROOF STEP]
using consistent
[PROOF STATE]
proof (prove)
using this:
\<nexists>xa ca. Mapping.lookup (UBI dir (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some (j, ca) \<or> Mapping.lookup (LBI dir (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some (j, ca)
\<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s
\<diamond> s

goal (1 subgoal):
 1. \<exists>v. v \<Turnstile>\<^sub>t \<T> s \<and> (\<forall>xa ca. I = {} \<or> (Mapping.lookup (UBI dir (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some (j, ca) \<longrightarrow> v xa = ca)) \<and> (\<forall>xa ca. I = {} \<or> (Mapping.lookup (LBI dir (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some (j, ca) \<longrightarrow> v xa = ca))
[PROOF STEP]
unfolding curr_val_satisfies_no_lhs_def
[PROOF STATE]
proof (prove)
using this:
\<nexists>xa ca. Mapping.lookup (UBI dir (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some (j, ca) \<or> Mapping.lookup (LBI dir (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some (j, ca)
\<langle>\<V> s\<rangle> \<Turnstile>\<^sub>t \<T> s \<and> \<langle>\<V> s\<rangle> \<Turnstile>\<^sub>b \<B> s \<parallel> - lvars (\<T> s)
\<diamond> s

goal (1 subgoal):
 1. \<exists>v. v \<Turnstile>\<^sub>t \<T> s \<and> (\<forall>xa ca. I = {} \<or> (Mapping.lookup (UBI dir (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some (j, ca) \<longrightarrow> v xa = ca)) \<and> (\<forall>xa ca. I = {} \<or> (Mapping.lookup (LBI dir (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some (j, ca) \<longrightarrow> v xa = ca))
[PROOF STEP]
by (intro exI[of _ "\<langle>\<V> s\<rangle>"], auto)
[PROOF STATE]
proof (state)
this:
\<exists>v. v \<Turnstile>\<^sub>t \<T> s \<and> (\<forall>xa ca ia. UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> UI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> LI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca)

goal (1 subgoal):
 1. \<exists>xa ca. Mapping.lookup (UBI dir (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some (j, ca) \<or> Mapping.lookup (LBI dir (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some (j, ca) \<Longrightarrow> \<exists>v. v \<Turnstile>\<^sub>t \<T> s \<and> (\<forall>xa ca ia. UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> UI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> LI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca)
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. \<exists>xa ca. Mapping.lookup (UBI dir (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some (j, ca) \<or> Mapping.lookup (LBI dir (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some (j, ca) \<Longrightarrow> \<exists>v. v \<Turnstile>\<^sub>t \<T> s \<and> (\<forall>xa ca ia. UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> UI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> LI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca)
[PROOF STEP]
case True
[PROOF STATE]
proof (state)
this:
\<exists>xa ca. Mapping.lookup (UBI dir (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some (j, ca) \<or> Mapping.lookup (LBI dir (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some (j, ca)

goal (1 subgoal):
 1. \<exists>xa ca. Mapping.lookup (UBI dir (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some (j, ca) \<or> Mapping.lookup (LBI dir (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some (j, ca) \<Longrightarrow> \<exists>v. v \<Turnstile>\<^sub>t \<T> s \<and> (\<forall>xa ca ia. UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> UI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> LI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca)
[PROOF STEP]
from consistent
[PROOF STATE]
proof (chain)
picking this:
\<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s
\<diamond> s
[PROOF STEP]
have val: " \<langle>\<V> s\<rangle> \<Turnstile>\<^sub>t \<T> s"
[PROOF STATE]
proof (prove)
using this:
\<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s
\<diamond> s

goal (1 subgoal):
 1. \<langle>\<V> s\<rangle> \<Turnstile>\<^sub>t \<T> s
[PROOF STEP]
unfolding curr_val_satisfies_no_lhs_def
[PROOF STATE]
proof (prove)
using this:
\<langle>\<V> s\<rangle> \<Turnstile>\<^sub>t \<T> s \<and> \<langle>\<V> s\<rangle> \<Turnstile>\<^sub>b \<B> s \<parallel> - lvars (\<T> s)
\<diamond> s

goal (1 subgoal):
 1. \<langle>\<V> s\<rangle> \<Turnstile>\<^sub>t \<T> s
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
\<langle>\<V> s\<rangle> \<Turnstile>\<^sub>t \<T> s

goal (1 subgoal):
 1. \<exists>xa ca. Mapping.lookup (UBI dir (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some (j, ca) \<or> Mapping.lookup (LBI dir (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some (j, ca) \<Longrightarrow> \<exists>v. v \<Turnstile>\<^sub>t \<T> s \<and> (\<forall>xa ca ia. UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> UI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> LI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca)
[PROOF STEP]
define ss where ss: "ss = ?ss"
[PROOF STATE]
proof (state)
this:
ss = update\<B>\<I> (UBI_upd dir) i x c s

goal (1 subgoal):
 1. \<exists>xa ca. Mapping.lookup (UBI dir (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some (j, ca) \<or> Mapping.lookup (LBI dir (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some (j, ca) \<Longrightarrow> \<exists>v. v \<Turnstile>\<^sub>t \<T> s \<and> (\<forall>xa ca ia. UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> UI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> LI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca)
[PROOF STEP]
from True
[PROOF STATE]
proof (chain)
picking this:
\<exists>xa ca. Mapping.lookup (UBI dir (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some (j, ca) \<or> Mapping.lookup (LBI dir (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some (j, ca)
[PROOF STEP]
obtain y b where "look (UBI dir ?ss) y = Some (j,b) \<or> look (LBI dir ?ss) y = Some (j,b)"
[PROOF STATE]
proof (prove)
using this:
\<exists>xa ca. Mapping.lookup (UBI dir (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some (j, ca) \<or> Mapping.lookup (LBI dir (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some (j, ca)

goal (1 subgoal):
 1. (\<And>y b. Mapping.lookup (UBI dir (update\<B>\<I> (UBI_upd dir) i x c s)) y = Some (j, b) \<or> Mapping.lookup (LBI dir (update\<B>\<I> (UBI_upd dir) i x c s)) y = Some (j, b) \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by force
[PROOF STATE]
proof (state)
this:
Mapping.lookup (UBI dir (update\<B>\<I> (UBI_upd dir) i x c s)) y = Some (j, b) \<or> Mapping.lookup (LBI dir (update\<B>\<I> (UBI_upd dir) i x c s)) y = Some (j, b)

goal (1 subgoal):
 1. \<exists>xa ca. Mapping.lookup (UBI dir (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some (j, ca) \<or> Mapping.lookup (LBI dir (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some (j, ca) \<Longrightarrow> \<exists>v. v \<Turnstile>\<^sub>t \<T> s \<and> (\<forall>xa ca ia. UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> UI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> LI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca)
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
Mapping.lookup (UBI dir (update\<B>\<I> (UBI_upd dir) i x c s)) y = Some (j, b) \<or> Mapping.lookup (LBI dir (update\<B>\<I> (UBI_upd dir) i x c s)) y = Some (j, b)
[PROOF STEP]
have id3: "(look (LBI dir ss) yy = Some (j,bb) \<or> look (UBI dir ss) yy = Some (j,bb)) \<longleftrightarrow> (yy = y \<and> bb = b)" for yy bb
[PROOF STATE]
proof (prove)
using this:
Mapping.lookup (UBI dir (update\<B>\<I> (UBI_upd dir) i x c s)) y = Some (j, b) \<or> Mapping.lookup (LBI dir (update\<B>\<I> (UBI_upd dir) i x c s)) y = Some (j, b)

goal (1 subgoal):
 1. (Mapping.lookup (LBI dir ss) yy = Some (j, bb) \<or> Mapping.lookup (UBI dir ss) yy = Some (j, bb)) = (yy = y \<and> bb = b)
[PROOF STEP]
using distinct_indices_stateD(1)[OF dist, of y j b yy bb]
[PROOF STATE]
proof (prove)
using this:
Mapping.lookup (UBI dir (update\<B>\<I> (UBI_upd dir) i x c s)) y = Some (j, b) \<or> Mapping.lookup (LBI dir (update\<B>\<I> (UBI_upd dir) i x c s)) y = Some (j, b)
\<lbrakk>Mapping.lookup (\<B>\<^sub>i\<^sub>l (update\<B>\<I> (UBI_upd dir) i x c s)) y = Some (j, b) \<or> Mapping.lookup (\<B>\<^sub>i\<^sub>u (update\<B>\<I> (UBI_upd dir) i x c s)) y = Some (j, b); Mapping.lookup (\<B>\<^sub>i\<^sub>l (update\<B>\<I> (UBI_upd dir) i x c s)) yy = Some (j, bb) \<or> Mapping.lookup (\<B>\<^sub>i\<^sub>u (update\<B>\<I> (UBI_upd dir) i x c s)) yy = Some (j, bb)\<rbrakk> \<Longrightarrow> y = yy \<and> b = bb

goal (1 subgoal):
 1. (Mapping.lookup (LBI dir ss) yy = Some (j, bb) \<or> Mapping.lookup (UBI dir ss) yy = Some (j, bb)) = (yy = y \<and> bb = b)
[PROOF STEP]
using dir
[PROOF STATE]
proof (prove)
using this:
Mapping.lookup (UBI dir (update\<B>\<I> (UBI_upd dir) i x c s)) y = Some (j, b) \<or> Mapping.lookup (LBI dir (update\<B>\<I> (UBI_upd dir) i x c s)) y = Some (j, b)
\<lbrakk>Mapping.lookup (\<B>\<^sub>i\<^sub>l (update\<B>\<I> (UBI_upd dir) i x c s)) y = Some (j, b) \<or> Mapping.lookup (\<B>\<^sub>i\<^sub>u (update\<B>\<I> (UBI_upd dir) i x c s)) y = Some (j, b); Mapping.lookup (\<B>\<^sub>i\<^sub>l (update\<B>\<I> (UBI_upd dir) i x c s)) yy = Some (j, bb) \<or> Mapping.lookup (\<B>\<^sub>i\<^sub>u (update\<B>\<I> (UBI_upd dir) i x c s)) yy = Some (j, bb)\<rbrakk> \<Longrightarrow> y = yy \<and> b = bb
dir = Positive \<or> dir = Negative

goal (1 subgoal):
 1. (Mapping.lookup (LBI dir ss) yy = Some (j, bb) \<or> Mapping.lookup (UBI dir ss) yy = Some (j, bb)) = (yy = y \<and> bb = b)
[PROOF STEP]
unfolding ss[symmetric]
[PROOF STATE]
proof (prove)
using this:
Mapping.lookup (UBI dir ss) y = Some (j, b) \<or> Mapping.lookup (LBI dir ss) y = Some (j, b)
\<lbrakk>Mapping.lookup (\<B>\<^sub>i\<^sub>l ss) y = Some (j, b) \<or> Mapping.lookup (\<B>\<^sub>i\<^sub>u ss) y = Some (j, b); Mapping.lookup (\<B>\<^sub>i\<^sub>l ss) yy = Some (j, bb) \<or> Mapping.lookup (\<B>\<^sub>i\<^sub>u ss) yy = Some (j, bb)\<rbrakk> \<Longrightarrow> y = yy \<and> b = bb
dir = Positive \<or> dir = Negative

goal (1 subgoal):
 1. (Mapping.lookup (LBI dir ss) yy = Some (j, bb) \<or> Mapping.lookup (UBI dir ss) yy = Some (j, bb)) = (yy = y \<and> bb = b)
[PROOF STEP]
by (auto simp: boundsu_def boundsl_def indexu_def indexl_def)
[PROOF STATE]
proof (state)
this:
(Mapping.lookup (LBI dir ss) ?yy5 = Some (j, ?bb5) \<or> Mapping.lookup (UBI dir ss) ?yy5 = Some (j, ?bb5)) = (?yy5 = y \<and> ?bb5 = b)

goal (1 subgoal):
 1. \<exists>xa ca. Mapping.lookup (UBI dir (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some (j, ca) \<or> Mapping.lookup (LBI dir (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some (j, ca) \<Longrightarrow> \<exists>v. v \<Turnstile>\<^sub>t \<T> s \<and> (\<forall>xa ca ia. UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> UI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> LI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca)
[PROOF STEP]
have "\<exists>v. v \<Turnstile>\<^sub>t \<T> s \<and> v y = b"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<exists>v. v \<Turnstile>\<^sub>t \<T> s \<and> v y = b
[PROOF STEP]
proof (cases "y \<in> lvars (\<T> s)")
[PROOF STATE]
proof (state)
goal (2 subgoals):
 1. y \<in> lvars (\<T> s) \<Longrightarrow> \<exists>v. v \<Turnstile>\<^sub>t \<T> s \<and> v y = b
 2. y \<notin> lvars (\<T> s) \<Longrightarrow> \<exists>v. v \<Turnstile>\<^sub>t \<T> s \<and> v y = b
[PROOF STEP]
case False
[PROOF STATE]
proof (state)
this:
y \<notin> lvars (\<T> s)

goal (2 subgoals):
 1. y \<in> lvars (\<T> s) \<Longrightarrow> \<exists>v. v \<Turnstile>\<^sub>t \<T> s \<and> v y = b
 2. y \<notin> lvars (\<T> s) \<Longrightarrow> \<exists>v. v \<Turnstile>\<^sub>t \<T> s \<and> v y = b
[PROOF STEP]
let ?v = "\<langle>\<V> (update y b s)\<rangle>"
[PROOF STATE]
proof (state)
goal (2 subgoals):
 1. y \<in> lvars (\<T> s) \<Longrightarrow> \<exists>v. v \<Turnstile>\<^sub>t \<T> s \<and> v y = b
 2. y \<notin> lvars (\<T> s) \<Longrightarrow> \<exists>v. v \<Turnstile>\<^sub>t \<T> s \<and> v y = b
[PROOF STEP]
show ?thesis
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<exists>v. v \<Turnstile>\<^sub>t \<T> s \<and> v y = b
[PROOF STEP]
proof (intro exI[of _ ?v] conjI)
[PROOF STATE]
proof (state)
goal (2 subgoals):
 1. \<langle>\<V> (update y b s)\<rangle> \<Turnstile>\<^sub>t \<T> s
 2. \<langle>\<V> (update y b s)\<rangle> y = b
[PROOF STEP]
from update_satisfies_tableau[OF *(2,3) False] val
[PROOF STATE]
proof (chain)
picking this:
\<langle>\<V> s\<rangle> \<Turnstile>\<^sub>t \<T> s \<longrightarrow> \<langle>\<V> (update y ?c s)\<rangle> \<Turnstile>\<^sub>t \<T> s
\<langle>\<V> s\<rangle> \<Turnstile>\<^sub>t \<T> s
[PROOF STEP]
show "?v \<Turnstile>\<^sub>t \<T> s"
[PROOF STATE]
proof (prove)
using this:
\<langle>\<V> s\<rangle> \<Turnstile>\<^sub>t \<T> s \<longrightarrow> \<langle>\<V> (update y ?c s)\<rangle> \<Turnstile>\<^sub>t \<T> s
\<langle>\<V> s\<rangle> \<Turnstile>\<^sub>t \<T> s

goal (1 subgoal):
 1. \<langle>\<V> (update y b s)\<rangle> \<Turnstile>\<^sub>t \<T> s
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
\<langle>\<V> (update y b s)\<rangle> \<Turnstile>\<^sub>t \<T> s

goal (1 subgoal):
 1. \<langle>\<V> (update y b s)\<rangle> y = b
[PROOF STEP]
from update_valuation_nonlhs[OF *(2,3) False, of y b] False
[PROOF STATE]
proof (chain)
picking this:
y \<notin> lvars (\<T> s) \<longrightarrow> Mapping.lookup (\<V> (update y b s)) y = (if y = y then Some b else Mapping.lookup (\<V> s) y)
y \<notin> lvars (\<T> s)
[PROOF STEP]
show "?v y = b"
[PROOF STATE]
proof (prove)
using this:
y \<notin> lvars (\<T> s) \<longrightarrow> Mapping.lookup (\<V> (update y b s)) y = (if y = y then Some b else Mapping.lookup (\<V> s) y)
y \<notin> lvars (\<T> s)

goal (1 subgoal):
 1. \<langle>\<V> (update y b s)\<rangle> y = b
[PROOF STEP]
by (simp add: map2fun_def')
[PROOF STATE]
proof (state)
this:
\<langle>\<V> (update y b s)\<rangle> y = b

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
\<exists>v. v \<Turnstile>\<^sub>t \<T> s \<and> v y = b

goal (1 subgoal):
 1. y \<in> lvars (\<T> s) \<Longrightarrow> \<exists>v. v \<Turnstile>\<^sub>t \<T> s \<and> v y = b
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. y \<in> lvars (\<T> s) \<Longrightarrow> \<exists>v. v \<Turnstile>\<^sub>t \<T> s \<and> v y = b
[PROOF STEP]
case True
[PROOF STATE]
proof (state)
this:
y \<in> lvars (\<T> s)

goal (1 subgoal):
 1. y \<in> lvars (\<T> s) \<Longrightarrow> \<exists>v. v \<Turnstile>\<^sub>t \<T> s \<and> v y = b
[PROOF STEP]
from *(2)[unfolded normalized_tableau_def]
[PROOF STATE]
proof (chain)
picking this:
distinct (map lhs (\<T> s)) \<and> lvars (\<T> s) \<inter> rvars (\<T> s) = {} \<and> 0 \<notin> rhs ` set (\<T> s)
[PROOF STEP]
have zero: "0 \<notin> rhs ` set (\<T> s)"
[PROOF STATE]
proof (prove)
using this:
distinct (map lhs (\<T> s)) \<and> lvars (\<T> s) \<inter> rvars (\<T> s) = {} \<and> 0 \<notin> rhs ` set (\<T> s)

goal (1 subgoal):
 1. 0 \<notin> rhs ` set (\<T> s)
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
0 \<notin> rhs ` set (\<T> s)

goal (1 subgoal):
 1. y \<in> lvars (\<T> s) \<Longrightarrow> \<exists>v. v \<Turnstile>\<^sub>t \<T> s \<and> v y = b
[PROOF STEP]
interpret Pivot eqlvar pivot
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. Pivot eqlvar pivot
[PROOF STEP]
by fact
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. y \<in> lvars (\<T> s) \<Longrightarrow> \<exists>v. v \<Turnstile>\<^sub>t \<T> s \<and> v y = b
[PROOF STEP]
interpret PivotUpdate eqlvar pivot update
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. PivotUpdate eqlvar pivot update
[PROOF STEP]
..
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. y \<in> lvars (\<T> s) \<Longrightarrow> \<exists>v. v \<Turnstile>\<^sub>t \<T> s \<and> v y = b
[PROOF STEP]
let ?eq = "eq_for_lvar (\<T> s) y"
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. y \<in> lvars (\<T> s) \<Longrightarrow> \<exists>v. v \<Turnstile>\<^sub>t \<T> s \<and> v y = b
[PROOF STEP]
from eq_for_lvar[OF True]
[PROOF STATE]
proof (chain)
picking this:
eq_for_lvar (\<T> s) y \<in> set (\<T> s) \<and> lhs (eq_for_lvar (\<T> s) y) = y
[PROOF STEP]
have "?eq \<in> set (\<T> s)" "lhs ?eq = y"
[PROOF STATE]
proof (prove)
using this:
eq_for_lvar (\<T> s) y \<in> set (\<T> s) \<and> lhs (eq_for_lvar (\<T> s) y) = y

goal (1 subgoal):
 1. eq_for_lvar (\<T> s) y \<in> set (\<T> s) &&& lhs (eq_for_lvar (\<T> s) y) = y
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
eq_for_lvar (\<T> s) y \<in> set (\<T> s)
lhs (eq_for_lvar (\<T> s) y) = y

goal (1 subgoal):
 1. y \<in> lvars (\<T> s) \<Longrightarrow> \<exists>v. v \<Turnstile>\<^sub>t \<T> s \<and> v y = b
[PROOF STEP]
with zero
[PROOF STATE]
proof (chain)
picking this:
0 \<notin> rhs ` set (\<T> s)
eq_for_lvar (\<T> s) y \<in> set (\<T> s)
lhs (eq_for_lvar (\<T> s) y) = y
[PROOF STEP]
have rhs: "rhs ?eq \<noteq> 0"
[PROOF STATE]
proof (prove)
using this:
0 \<notin> rhs ` set (\<T> s)
eq_for_lvar (\<T> s) y \<in> set (\<T> s)
lhs (eq_for_lvar (\<T> s) y) = y

goal (1 subgoal):
 1. rhs (eq_for_lvar (\<T> s) y) \<noteq> 0
[PROOF STEP]
by force
[PROOF STATE]
proof (state)
this:
rhs (eq_for_lvar (\<T> s) y) \<noteq> 0

goal (1 subgoal):
 1. y \<in> lvars (\<T> s) \<Longrightarrow> \<exists>v. v \<Turnstile>\<^sub>t \<T> s \<and> v y = b
[PROOF STEP]
hence "rvars_eq ?eq \<noteq> {}"
[PROOF STATE]
proof (prove)
using this:
rhs (eq_for_lvar (\<T> s) y) \<noteq> 0

goal (1 subgoal):
 1. rvars_eq (eq_for_lvar (\<T> s) y) \<noteq> {}
[PROOF STEP]
by (simp add: vars_empty_zero)
[PROOF STATE]
proof (state)
this:
rvars_eq (eq_for_lvar (\<T> s) y) \<noteq> {}

goal (1 subgoal):
 1. y \<in> lvars (\<T> s) \<Longrightarrow> \<exists>v. v \<Turnstile>\<^sub>t \<T> s \<and> v y = b
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
rvars_eq (eq_for_lvar (\<T> s) y) \<noteq> {}
[PROOF STEP]
obtain z where z: "z \<in> rvars_eq ?eq"
[PROOF STATE]
proof (prove)
using this:
rvars_eq (eq_for_lvar (\<T> s) y) \<noteq> {}

goal (1 subgoal):
 1. (\<And>z. z \<in> rvars_eq (eq_for_lvar (\<T> s) y) \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
z \<in> rvars_eq (eq_for_lvar (\<T> s) y)

goal (1 subgoal):
 1. y \<in> lvars (\<T> s) \<Longrightarrow> \<exists>v. v \<Turnstile>\<^sub>t \<T> s \<and> v y = b
[PROOF STEP]
let ?v = "\<V> (pivot_and_update y z b s)"
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. y \<in> lvars (\<T> s) \<Longrightarrow> \<exists>v. v \<Turnstile>\<^sub>t \<T> s \<and> v y = b
[PROOF STEP]
let ?vv = "\<langle>?v\<rangle>"
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. y \<in> lvars (\<T> s) \<Longrightarrow> \<exists>v. v \<Turnstile>\<^sub>t \<T> s \<and> v y = b
[PROOF STEP]
from pivotandupdate_valuation_xi[OF *(2,3) True z]
[PROOF STATE]
proof (chain)
picking this:
Mapping.lookup (\<V> (pivot_and_update y z ?c s)) y = Some ?c
[PROOF STEP]
have "look ?v y = Some b"
[PROOF STATE]
proof (prove)
using this:
Mapping.lookup (\<V> (pivot_and_update y z ?c s)) y = Some ?c

goal (1 subgoal):
 1. Mapping.lookup (\<V> (pivot_and_update y z b s)) y = Some b
[PROOF STEP]
.
[PROOF STATE]
proof (state)
this:
Mapping.lookup (\<V> (pivot_and_update y z b s)) y = Some b

goal (1 subgoal):
 1. y \<in> lvars (\<T> s) \<Longrightarrow> \<exists>v. v \<Turnstile>\<^sub>t \<T> s \<and> v y = b
[PROOF STEP]
hence vv: "?vv y = b"
[PROOF STATE]
proof (prove)
using this:
Mapping.lookup (\<V> (pivot_and_update y z b s)) y = Some b

goal (1 subgoal):
 1. \<langle>\<V> (pivot_and_update y z b s)\<rangle> y = b
[PROOF STEP]
unfolding map2fun_def'
[PROOF STATE]
proof (prove)
using this:
Mapping.lookup (\<V> (pivot_and_update y z b s)) y = Some b

goal (1 subgoal):
 1. (case Mapping.lookup (\<V> (pivot_and_update y z b s)) y of None \<Rightarrow> 0::'a | Some y \<Rightarrow> y) = b
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
\<langle>\<V> (pivot_and_update y z b s)\<rangle> y = b

goal (1 subgoal):
 1. y \<in> lvars (\<T> s) \<Longrightarrow> \<exists>v. v \<Turnstile>\<^sub>t \<T> s \<and> v y = b
[PROOF STEP]
show ?thesis
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<exists>v. v \<Turnstile>\<^sub>t \<T> s \<and> v y = b
[PROOF STEP]
proof (intro exI[of _ ?vv] conjI vv)
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. \<langle>\<V> (pivot_and_update y z b s)\<rangle> \<Turnstile>\<^sub>t \<T> s
[PROOF STEP]
show "?vv \<Turnstile>\<^sub>t \<T> s"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<langle>\<V> (pivot_and_update y z b s)\<rangle> \<Turnstile>\<^sub>t \<T> s
[PROOF STEP]
using pivotandupdate_satisfies_tableau[OF *(2,3) True z] val
[PROOF STATE]
proof (prove)
using this:
\<langle>\<V> s\<rangle> \<Turnstile>\<^sub>t \<T> s \<longrightarrow> \<langle>\<V> (pivot_and_update y z ?c s)\<rangle> \<Turnstile>\<^sub>t \<T> s
\<langle>\<V> s\<rangle> \<Turnstile>\<^sub>t \<T> s

goal (1 subgoal):
 1. \<langle>\<V> (pivot_and_update y z b s)\<rangle> \<Turnstile>\<^sub>t \<T> s
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
\<langle>\<V> (pivot_and_update y z b s)\<rangle> \<Turnstile>\<^sub>t \<T> s

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
\<exists>v. v \<Turnstile>\<^sub>t \<T> s \<and> v y = b

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
\<exists>v. v \<Turnstile>\<^sub>t \<T> s \<and> v y = b

goal (1 subgoal):
 1. \<exists>xa ca. Mapping.lookup (UBI dir (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some (j, ca) \<or> Mapping.lookup (LBI dir (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some (j, ca) \<Longrightarrow> \<exists>v. v \<Turnstile>\<^sub>t \<T> s \<and> (\<forall>xa ca ia. UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> UI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> LI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca)
[PROOF STEP]
thus ?thesis
[PROOF STATE]
proof (prove)
using this:
\<exists>v. v \<Turnstile>\<^sub>t \<T> s \<and> v y = b

goal (1 subgoal):
 1. \<exists>v. v \<Turnstile>\<^sub>t \<T> s \<and> (\<forall>xa ca ia. UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> UI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> LI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca)
[PROOF STEP]
unfolding id id2 ss[symmetric]
[PROOF STATE]
proof (prove)
using this:
\<exists>v. v \<Turnstile>\<^sub>t \<T> s \<and> v y = b

goal (1 subgoal):
 1. \<exists>v. v \<Turnstile>\<^sub>t \<T> s \<and> (\<forall>xa ca. I = {} \<or> (Mapping.lookup (UBI dir ss) xa = Some (j, ca) \<longrightarrow> v xa = ca)) \<and> (\<forall>xa ca. I = {} \<or> (Mapping.lookup (LBI dir ss) xa = Some (j, ca) \<longrightarrow> v xa = ca))
[PROOF STEP]
using id3
[PROOF STATE]
proof (prove)
using this:
\<exists>v. v \<Turnstile>\<^sub>t \<T> s \<and> v y = b
(Mapping.lookup (LBI dir ss) ?yy5 = Some (j, ?bb5) \<or> Mapping.lookup (UBI dir ss) ?yy5 = Some (j, ?bb5)) = (?yy5 = y \<and> ?bb5 = b)

goal (1 subgoal):
 1. \<exists>v. v \<Turnstile>\<^sub>t \<T> s \<and> (\<forall>xa ca. I = {} \<or> (Mapping.lookup (UBI dir ss) xa = Some (j, ca) \<longrightarrow> v xa = ca)) \<and> (\<forall>xa ca. I = {} \<or> (Mapping.lookup (LBI dir ss) xa = Some (j, ca) \<longrightarrow> v xa = ca))
[PROOF STEP]
by metis
[PROOF STATE]
proof (state)
this:
\<exists>v. v \<Turnstile>\<^sub>t \<T> s \<and> (\<forall>xa ca ia. UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> UI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> LI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca)

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
\<exists>v. v \<Turnstile>\<^sub>t \<T> s \<and> (\<forall>xa ca ia. UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> UI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> LI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca)

goal (1 subgoal):
 1. \<And>I. \<lbrakk>\<U> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)); distinct_indices_state (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)); I \<subset> set (the (\<U>\<^sub>c (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s))))\<rbrakk> \<Longrightarrow> \<exists>v. v \<Turnstile>\<^sub>t \<T> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) \<and> (\<forall>xa ca ia. UB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> UI dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> LI dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca)
[PROOF STEP]
thus ?case
[PROOF STATE]
proof (prove)
using this:
\<exists>v. v \<Turnstile>\<^sub>t \<T> s \<and> (\<forall>xa ca ia. UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> UI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> LI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca)

goal (1 subgoal):
 1. \<exists>v. v \<Turnstile>\<^sub>t \<T> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) \<and> (\<forall>xa ca ia. UB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> UI dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> LI dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca)
[PROOF STEP]
unfolding id1
[PROOF STATE]
proof (prove)
using this:
\<exists>v. v \<Turnstile>\<^sub>t \<T> s \<and> (\<forall>xa ca ia. UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> UI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> LI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca)

goal (1 subgoal):
 1. \<exists>v. v \<Turnstile>\<^sub>t \<T> s \<and> (\<forall>xa ca ia. UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> UI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> LI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca)
[PROOF STEP]
.
[PROOF STATE]
proof (state)
this:
\<exists>v. v \<Turnstile>\<^sub>t \<T> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) \<and> (\<forall>xa ca ia. UB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> UI dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> LI dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca)

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
\<U> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) \<longrightarrow> (set (the (\<U>\<^sub>c (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)))) \<subseteq> indices_state (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) \<and> (\<nexists>v. v \<Turnstile>\<^sub>t \<T> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) \<and> (\<forall>xa ca ia. UB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> UI dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)))) \<longrightarrow> lt dir (v xa) ca \<or> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> LI dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)))) \<longrightarrow> lt dir ca (v xa) \<or> ca = v xa))) \<and> (distinct_indices_state (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) \<longrightarrow> (\<forall>I\<subset>set (the (\<U>\<^sub>c (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)))). \<exists>v. v \<Turnstile>\<^sub>t \<T> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) \<and> (\<forall>xa ca ia. UB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> UI dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> LI dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca)))

goal (4 subgoals):
 1. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x)\<rbrakk> \<Longrightarrow> \<U> s \<longrightarrow> (set (the (\<U>\<^sub>c s)) \<subseteq> indices_state s \<and> (\<nexists>v. v \<Turnstile>\<^sub>t \<T> s \<and> (\<forall>x c i. UB dir s x = Some c \<longrightarrow> UI dir s x = i \<longrightarrow> i \<in> set (the (\<U>\<^sub>c s)) \<longrightarrow> lt dir (v x) c \<or> v x = c) \<and> (\<forall>x c i. LB dir s x = Some c \<longrightarrow> LI dir s x = i \<longrightarrow> i \<in> set (the (\<U>\<^sub>c s)) \<longrightarrow> lt dir c (v x) \<or> c = v x))) \<and> (distinct_indices_state s \<longrightarrow> (\<forall>I\<subset>set (the (\<U>\<^sub>c s)). \<exists>v. v \<Turnstile>\<^sub>t \<T> s \<and> (\<forall>x c i. UB dir s x = Some c \<longrightarrow> UI dir s x = i \<longrightarrow> i \<in> I \<longrightarrow> v x = c) \<and> (\<forall>x c i. LB dir s x = Some c \<longrightarrow> LI dir s x = i \<longrightarrow> i \<in> I \<longrightarrow> v x = c)))
 2. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<notin> lvars (\<T> s); lt dir c (\<langle>\<V> s\<rangle> x); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> \<U> (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) \<longrightarrow> (set (the (\<U>\<^sub>c (update x c (update\<B>\<I> (UBI_upd dir) i x c s)))) \<subseteq> indices_state (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) \<and> (\<nexists>v. v \<Turnstile>\<^sub>t \<T> (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) \<and> (\<forall>xa ca ia. UB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> UI dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (update x c (update\<B>\<I> (UBI_upd dir) i x c s)))) \<longrightarrow> lt dir (v xa) ca \<or> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> LI dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (update x c (update\<B>\<I> (UBI_upd dir) i x c s)))) \<longrightarrow> lt dir ca (v xa) \<or> ca = v xa))) \<and> (distinct_indices_state (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) \<longrightarrow> (\<forall>I\<subset>set (the (\<U>\<^sub>c (update x c (update\<B>\<I> (UBI_upd dir) i x c s)))). \<exists>v. v \<Turnstile>\<^sub>t \<T> (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) \<and> (\<forall>xa ca ia. UB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> UI dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> LI dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca)))
 3. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<in> lvars (\<T> s); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> \<U> (update\<B>\<I> (UBI_upd dir) i x c s) \<longrightarrow> (set (the (\<U>\<^sub>c (update\<B>\<I> (UBI_upd dir) i x c s))) \<subseteq> indices_state (update\<B>\<I> (UBI_upd dir) i x c s) \<and> (\<nexists>v. v \<Turnstile>\<^sub>t \<T> (update\<B>\<I> (UBI_upd dir) i x c s) \<and> (\<forall>xa ca ia. UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> UI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (update\<B>\<I> (UBI_upd dir) i x c s))) \<longrightarrow> lt dir (v xa) ca \<or> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> LI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (update\<B>\<I> (UBI_upd dir) i x c s))) \<longrightarrow> lt dir ca (v xa) \<or> ca = v xa))) \<and> (distinct_indices_state (update\<B>\<I> (UBI_upd dir) i x c s) \<longrightarrow> (\<forall>I\<subset>set (the (\<U>\<^sub>c (update\<B>\<I> (UBI_upd dir) i x c s))). \<exists>v. v \<Turnstile>\<^sub>t \<T> (update\<B>\<I> (UBI_upd dir) i x c s) \<and> (\<forall>xa ca ia. UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> UI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> LI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca)))
 4. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x); \<not> lt dir c (\<langle>\<V> s\<rangle> x)\<rbrakk> \<Longrightarrow> \<U> (update\<B>\<I> (UBI_upd dir) i x c s) \<longrightarrow> (set (the (\<U>\<^sub>c (update\<B>\<I> (UBI_upd dir) i x c s))) \<subseteq> indices_state (update\<B>\<I> (UBI_upd dir) i x c s) \<and> (\<nexists>v. v \<Turnstile>\<^sub>t \<T> (update\<B>\<I> (UBI_upd dir) i x c s) \<and> (\<forall>xa ca ia. UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> UI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (update\<B>\<I> (UBI_upd dir) i x c s))) \<longrightarrow> lt dir (v xa) ca \<or> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> LI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (update\<B>\<I> (UBI_upd dir) i x c s))) \<longrightarrow> lt dir ca (v xa) \<or> ca = v xa))) \<and> (distinct_indices_state (update\<B>\<I> (UBI_upd dir) i x c s) \<longrightarrow> (\<forall>I\<subset>set (the (\<U>\<^sub>c (update\<B>\<I> (UBI_upd dir) i x c s))). \<exists>v. v \<Turnstile>\<^sub>t \<T> (update\<B>\<I> (UBI_upd dir) i x c s) \<and> (\<forall>xa ca ia. UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> UI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> LI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca)))
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (4 subgoals):
 1. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x)\<rbrakk> \<Longrightarrow> \<U> s \<longrightarrow> (set (the (\<U>\<^sub>c s)) \<subseteq> indices_state s \<and> (\<nexists>v. v \<Turnstile>\<^sub>t \<T> s \<and> (\<forall>x c i. UB dir s x = Some c \<longrightarrow> UI dir s x = i \<longrightarrow> i \<in> set (the (\<U>\<^sub>c s)) \<longrightarrow> lt dir (v x) c \<or> v x = c) \<and> (\<forall>x c i. LB dir s x = Some c \<longrightarrow> LI dir s x = i \<longrightarrow> i \<in> set (the (\<U>\<^sub>c s)) \<longrightarrow> lt dir c (v x) \<or> c = v x))) \<and> (distinct_indices_state s \<longrightarrow> (\<forall>I\<subset>set (the (\<U>\<^sub>c s)). \<exists>v. v \<Turnstile>\<^sub>t \<T> s \<and> (\<forall>x c i. UB dir s x = Some c \<longrightarrow> UI dir s x = i \<longrightarrow> i \<in> I \<longrightarrow> v x = c) \<and> (\<forall>x c i. LB dir s x = Some c \<longrightarrow> LI dir s x = i \<longrightarrow> i \<in> I \<longrightarrow> v x = c)))
 2. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<notin> lvars (\<T> s); lt dir c (\<langle>\<V> s\<rangle> x); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> \<U> (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) \<longrightarrow> (set (the (\<U>\<^sub>c (update x c (update\<B>\<I> (UBI_upd dir) i x c s)))) \<subseteq> indices_state (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) \<and> (\<nexists>v. v \<Turnstile>\<^sub>t \<T> (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) \<and> (\<forall>xa ca ia. UB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> UI dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (update x c (update\<B>\<I> (UBI_upd dir) i x c s)))) \<longrightarrow> lt dir (v xa) ca \<or> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> LI dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (update x c (update\<B>\<I> (UBI_upd dir) i x c s)))) \<longrightarrow> lt dir ca (v xa) \<or> ca = v xa))) \<and> (distinct_indices_state (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) \<longrightarrow> (\<forall>I\<subset>set (the (\<U>\<^sub>c (update x c (update\<B>\<I> (UBI_upd dir) i x c s)))). \<exists>v. v \<Turnstile>\<^sub>t \<T> (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) \<and> (\<forall>xa ca ia. UB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> UI dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> LI dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca)))
 3. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<in> lvars (\<T> s); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> \<U> (update\<B>\<I> (UBI_upd dir) i x c s) \<longrightarrow> (set (the (\<U>\<^sub>c (update\<B>\<I> (UBI_upd dir) i x c s))) \<subseteq> indices_state (update\<B>\<I> (UBI_upd dir) i x c s) \<and> (\<nexists>v. v \<Turnstile>\<^sub>t \<T> (update\<B>\<I> (UBI_upd dir) i x c s) \<and> (\<forall>xa ca ia. UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> UI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (update\<B>\<I> (UBI_upd dir) i x c s))) \<longrightarrow> lt dir (v xa) ca \<or> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> LI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (update\<B>\<I> (UBI_upd dir) i x c s))) \<longrightarrow> lt dir ca (v xa) \<or> ca = v xa))) \<and> (distinct_indices_state (update\<B>\<I> (UBI_upd dir) i x c s) \<longrightarrow> (\<forall>I\<subset>set (the (\<U>\<^sub>c (update\<B>\<I> (UBI_upd dir) i x c s))). \<exists>v. v \<Turnstile>\<^sub>t \<T> (update\<B>\<I> (UBI_upd dir) i x c s) \<and> (\<forall>xa ca ia. UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> UI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> LI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca)))
 4. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x); \<not> lt dir c (\<langle>\<V> s\<rangle> x)\<rbrakk> \<Longrightarrow> \<U> (update\<B>\<I> (UBI_upd dir) i x c s) \<longrightarrow> (set (the (\<U>\<^sub>c (update\<B>\<I> (UBI_upd dir) i x c s))) \<subseteq> indices_state (update\<B>\<I> (UBI_upd dir) i x c s) \<and> (\<nexists>v. v \<Turnstile>\<^sub>t \<T> (update\<B>\<I> (UBI_upd dir) i x c s) \<and> (\<forall>xa ca ia. UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> UI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (update\<B>\<I> (UBI_upd dir) i x c s))) \<longrightarrow> lt dir (v xa) ca \<or> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> LI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (update\<B>\<I> (UBI_upd dir) i x c s))) \<longrightarrow> lt dir ca (v xa) \<or> ca = v xa))) \<and> (distinct_indices_state (update\<B>\<I> (UBI_upd dir) i x c s) \<longrightarrow> (\<forall>I\<subset>set (the (\<U>\<^sub>c (update\<B>\<I> (UBI_upd dir) i x c s))). \<exists>v. v \<Turnstile>\<^sub>t \<T> (update\<B>\<I> (UBI_upd dir) i x c s) \<and> (\<forall>xa ca ia. UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> UI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> LI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca)))
[PROOF STEP]
fix c::'a and x::nat and dir
[PROOF STATE]
proof (state)
goal (4 subgoals):
 1. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x)\<rbrakk> \<Longrightarrow> \<U> s \<longrightarrow> (set (the (\<U>\<^sub>c s)) \<subseteq> indices_state s \<and> (\<nexists>v. v \<Turnstile>\<^sub>t \<T> s \<and> (\<forall>x c i. UB dir s x = Some c \<longrightarrow> UI dir s x = i \<longrightarrow> i \<in> set (the (\<U>\<^sub>c s)) \<longrightarrow> lt dir (v x) c \<or> v x = c) \<and> (\<forall>x c i. LB dir s x = Some c \<longrightarrow> LI dir s x = i \<longrightarrow> i \<in> set (the (\<U>\<^sub>c s)) \<longrightarrow> lt dir c (v x) \<or> c = v x))) \<and> (distinct_indices_state s \<longrightarrow> (\<forall>I\<subset>set (the (\<U>\<^sub>c s)). \<exists>v. v \<Turnstile>\<^sub>t \<T> s \<and> (\<forall>x c i. UB dir s x = Some c \<longrightarrow> UI dir s x = i \<longrightarrow> i \<in> I \<longrightarrow> v x = c) \<and> (\<forall>x c i. LB dir s x = Some c \<longrightarrow> LI dir s x = i \<longrightarrow> i \<in> I \<longrightarrow> v x = c)))
 2. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<notin> lvars (\<T> s); lt dir c (\<langle>\<V> s\<rangle> x); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> \<U> (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) \<longrightarrow> (set (the (\<U>\<^sub>c (update x c (update\<B>\<I> (UBI_upd dir) i x c s)))) \<subseteq> indices_state (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) \<and> (\<nexists>v. v \<Turnstile>\<^sub>t \<T> (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) \<and> (\<forall>xa ca ia. UB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> UI dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (update x c (update\<B>\<I> (UBI_upd dir) i x c s)))) \<longrightarrow> lt dir (v xa) ca \<or> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> LI dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (update x c (update\<B>\<I> (UBI_upd dir) i x c s)))) \<longrightarrow> lt dir ca (v xa) \<or> ca = v xa))) \<and> (distinct_indices_state (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) \<longrightarrow> (\<forall>I\<subset>set (the (\<U>\<^sub>c (update x c (update\<B>\<I> (UBI_upd dir) i x c s)))). \<exists>v. v \<Turnstile>\<^sub>t \<T> (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) \<and> (\<forall>xa ca ia. UB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> UI dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> LI dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca)))
 3. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<in> lvars (\<T> s); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> \<U> (update\<B>\<I> (UBI_upd dir) i x c s) \<longrightarrow> (set (the (\<U>\<^sub>c (update\<B>\<I> (UBI_upd dir) i x c s))) \<subseteq> indices_state (update\<B>\<I> (UBI_upd dir) i x c s) \<and> (\<nexists>v. v \<Turnstile>\<^sub>t \<T> (update\<B>\<I> (UBI_upd dir) i x c s) \<and> (\<forall>xa ca ia. UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> UI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (update\<B>\<I> (UBI_upd dir) i x c s))) \<longrightarrow> lt dir (v xa) ca \<or> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> LI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (update\<B>\<I> (UBI_upd dir) i x c s))) \<longrightarrow> lt dir ca (v xa) \<or> ca = v xa))) \<and> (distinct_indices_state (update\<B>\<I> (UBI_upd dir) i x c s) \<longrightarrow> (\<forall>I\<subset>set (the (\<U>\<^sub>c (update\<B>\<I> (UBI_upd dir) i x c s))). \<exists>v. v \<Turnstile>\<^sub>t \<T> (update\<B>\<I> (UBI_upd dir) i x c s) \<and> (\<forall>xa ca ia. UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> UI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> LI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca)))
 4. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x); \<not> lt dir c (\<langle>\<V> s\<rangle> x)\<rbrakk> \<Longrightarrow> \<U> (update\<B>\<I> (UBI_upd dir) i x c s) \<longrightarrow> (set (the (\<U>\<^sub>c (update\<B>\<I> (UBI_upd dir) i x c s))) \<subseteq> indices_state (update\<B>\<I> (UBI_upd dir) i x c s) \<and> (\<nexists>v. v \<Turnstile>\<^sub>t \<T> (update\<B>\<I> (UBI_upd dir) i x c s) \<and> (\<forall>xa ca ia. UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> UI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (update\<B>\<I> (UBI_upd dir) i x c s))) \<longrightarrow> lt dir (v xa) ca \<or> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> LI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (update\<B>\<I> (UBI_upd dir) i x c s))) \<longrightarrow> lt dir ca (v xa) \<or> ca = v xa))) \<and> (distinct_indices_state (update\<B>\<I> (UBI_upd dir) i x c s) \<longrightarrow> (\<forall>I\<subset>set (the (\<U>\<^sub>c (update\<B>\<I> (UBI_upd dir) i x c s))). \<exists>v. v \<Turnstile>\<^sub>t \<T> (update\<B>\<I> (UBI_upd dir) i x c s) \<and> (\<forall>xa ca ia. UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> UI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> LI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca)))
[PROOF STEP]
assume **: "dir = Positive \<or> dir = Negative" "a = LE dir x c" "x \<notin> lvars (\<T> s)" "lt dir c (\<langle>\<V> s\<rangle> x)"
      "\<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x)" "\<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)"
[PROOF STATE]
proof (state)
this:
dir = Positive \<or> dir = Negative
a = LE dir x c
x \<notin> lvars (\<T> s)
lt dir c (\<langle>\<V> s\<rangle> x)
\<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x)
\<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)

goal (4 subgoals):
 1. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x)\<rbrakk> \<Longrightarrow> \<U> s \<longrightarrow> (set (the (\<U>\<^sub>c s)) \<subseteq> indices_state s \<and> (\<nexists>v. v \<Turnstile>\<^sub>t \<T> s \<and> (\<forall>x c i. UB dir s x = Some c \<longrightarrow> UI dir s x = i \<longrightarrow> i \<in> set (the (\<U>\<^sub>c s)) \<longrightarrow> lt dir (v x) c \<or> v x = c) \<and> (\<forall>x c i. LB dir s x = Some c \<longrightarrow> LI dir s x = i \<longrightarrow> i \<in> set (the (\<U>\<^sub>c s)) \<longrightarrow> lt dir c (v x) \<or> c = v x))) \<and> (distinct_indices_state s \<longrightarrow> (\<forall>I\<subset>set (the (\<U>\<^sub>c s)). \<exists>v. v \<Turnstile>\<^sub>t \<T> s \<and> (\<forall>x c i. UB dir s x = Some c \<longrightarrow> UI dir s x = i \<longrightarrow> i \<in> I \<longrightarrow> v x = c) \<and> (\<forall>x c i. LB dir s x = Some c \<longrightarrow> LI dir s x = i \<longrightarrow> i \<in> I \<longrightarrow> v x = c)))
 2. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<notin> lvars (\<T> s); lt dir c (\<langle>\<V> s\<rangle> x); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> \<U> (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) \<longrightarrow> (set (the (\<U>\<^sub>c (update x c (update\<B>\<I> (UBI_upd dir) i x c s)))) \<subseteq> indices_state (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) \<and> (\<nexists>v. v \<Turnstile>\<^sub>t \<T> (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) \<and> (\<forall>xa ca ia. UB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> UI dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (update x c (update\<B>\<I> (UBI_upd dir) i x c s)))) \<longrightarrow> lt dir (v xa) ca \<or> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> LI dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (update x c (update\<B>\<I> (UBI_upd dir) i x c s)))) \<longrightarrow> lt dir ca (v xa) \<or> ca = v xa))) \<and> (distinct_indices_state (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) \<longrightarrow> (\<forall>I\<subset>set (the (\<U>\<^sub>c (update x c (update\<B>\<I> (UBI_upd dir) i x c s)))). \<exists>v. v \<Turnstile>\<^sub>t \<T> (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) \<and> (\<forall>xa ca ia. UB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> UI dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> LI dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca)))
 3. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<in> lvars (\<T> s); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> \<U> (update\<B>\<I> (UBI_upd dir) i x c s) \<longrightarrow> (set (the (\<U>\<^sub>c (update\<B>\<I> (UBI_upd dir) i x c s))) \<subseteq> indices_state (update\<B>\<I> (UBI_upd dir) i x c s) \<and> (\<nexists>v. v \<Turnstile>\<^sub>t \<T> (update\<B>\<I> (UBI_upd dir) i x c s) \<and> (\<forall>xa ca ia. UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> UI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (update\<B>\<I> (UBI_upd dir) i x c s))) \<longrightarrow> lt dir (v xa) ca \<or> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> LI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (update\<B>\<I> (UBI_upd dir) i x c s))) \<longrightarrow> lt dir ca (v xa) \<or> ca = v xa))) \<and> (distinct_indices_state (update\<B>\<I> (UBI_upd dir) i x c s) \<longrightarrow> (\<forall>I\<subset>set (the (\<U>\<^sub>c (update\<B>\<I> (UBI_upd dir) i x c s))). \<exists>v. v \<Turnstile>\<^sub>t \<T> (update\<B>\<I> (UBI_upd dir) i x c s) \<and> (\<forall>xa ca ia. UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> UI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> LI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca)))
 4. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x); \<not> lt dir c (\<langle>\<V> s\<rangle> x)\<rbrakk> \<Longrightarrow> \<U> (update\<B>\<I> (UBI_upd dir) i x c s) \<longrightarrow> (set (the (\<U>\<^sub>c (update\<B>\<I> (UBI_upd dir) i x c s))) \<subseteq> indices_state (update\<B>\<I> (UBI_upd dir) i x c s) \<and> (\<nexists>v. v \<Turnstile>\<^sub>t \<T> (update\<B>\<I> (UBI_upd dir) i x c s) \<and> (\<forall>xa ca ia. UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> UI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (update\<B>\<I> (UBI_upd dir) i x c s))) \<longrightarrow> lt dir (v xa) ca \<or> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> LI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (update\<B>\<I> (UBI_upd dir) i x c s))) \<longrightarrow> lt dir ca (v xa) \<or> ca = v xa))) \<and> (distinct_indices_state (update\<B>\<I> (UBI_upd dir) i x c s) \<longrightarrow> (\<forall>I\<subset>set (the (\<U>\<^sub>c (update\<B>\<I> (UBI_upd dir) i x c s))). \<exists>v. v \<Turnstile>\<^sub>t \<T> (update\<B>\<I> (UBI_upd dir) i x c s) \<and> (\<forall>xa ca ia. UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> UI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> LI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca)))
[PROOF STEP]
let ?s = "update\<B>\<I> (UBI_upd dir) i x c s"
[PROOF STATE]
proof (state)
goal (4 subgoals):
 1. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x)\<rbrakk> \<Longrightarrow> \<U> s \<longrightarrow> (set (the (\<U>\<^sub>c s)) \<subseteq> indices_state s \<and> (\<nexists>v. v \<Turnstile>\<^sub>t \<T> s \<and> (\<forall>x c i. UB dir s x = Some c \<longrightarrow> UI dir s x = i \<longrightarrow> i \<in> set (the (\<U>\<^sub>c s)) \<longrightarrow> lt dir (v x) c \<or> v x = c) \<and> (\<forall>x c i. LB dir s x = Some c \<longrightarrow> LI dir s x = i \<longrightarrow> i \<in> set (the (\<U>\<^sub>c s)) \<longrightarrow> lt dir c (v x) \<or> c = v x))) \<and> (distinct_indices_state s \<longrightarrow> (\<forall>I\<subset>set (the (\<U>\<^sub>c s)). \<exists>v. v \<Turnstile>\<^sub>t \<T> s \<and> (\<forall>x c i. UB dir s x = Some c \<longrightarrow> UI dir s x = i \<longrightarrow> i \<in> I \<longrightarrow> v x = c) \<and> (\<forall>x c i. LB dir s x = Some c \<longrightarrow> LI dir s x = i \<longrightarrow> i \<in> I \<longrightarrow> v x = c)))
 2. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<notin> lvars (\<T> s); lt dir c (\<langle>\<V> s\<rangle> x); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> \<U> (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) \<longrightarrow> (set (the (\<U>\<^sub>c (update x c (update\<B>\<I> (UBI_upd dir) i x c s)))) \<subseteq> indices_state (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) \<and> (\<nexists>v. v \<Turnstile>\<^sub>t \<T> (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) \<and> (\<forall>xa ca ia. UB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> UI dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (update x c (update\<B>\<I> (UBI_upd dir) i x c s)))) \<longrightarrow> lt dir (v xa) ca \<or> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> LI dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (update x c (update\<B>\<I> (UBI_upd dir) i x c s)))) \<longrightarrow> lt dir ca (v xa) \<or> ca = v xa))) \<and> (distinct_indices_state (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) \<longrightarrow> (\<forall>I\<subset>set (the (\<U>\<^sub>c (update x c (update\<B>\<I> (UBI_upd dir) i x c s)))). \<exists>v. v \<Turnstile>\<^sub>t \<T> (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) \<and> (\<forall>xa ca ia. UB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> UI dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> LI dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca)))
 3. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<in> lvars (\<T> s); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> \<U> (update\<B>\<I> (UBI_upd dir) i x c s) \<longrightarrow> (set (the (\<U>\<^sub>c (update\<B>\<I> (UBI_upd dir) i x c s))) \<subseteq> indices_state (update\<B>\<I> (UBI_upd dir) i x c s) \<and> (\<nexists>v. v \<Turnstile>\<^sub>t \<T> (update\<B>\<I> (UBI_upd dir) i x c s) \<and> (\<forall>xa ca ia. UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> UI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (update\<B>\<I> (UBI_upd dir) i x c s))) \<longrightarrow> lt dir (v xa) ca \<or> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> LI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (update\<B>\<I> (UBI_upd dir) i x c s))) \<longrightarrow> lt dir ca (v xa) \<or> ca = v xa))) \<and> (distinct_indices_state (update\<B>\<I> (UBI_upd dir) i x c s) \<longrightarrow> (\<forall>I\<subset>set (the (\<U>\<^sub>c (update\<B>\<I> (UBI_upd dir) i x c s))). \<exists>v. v \<Turnstile>\<^sub>t \<T> (update\<B>\<I> (UBI_upd dir) i x c s) \<and> (\<forall>xa ca ia. UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> UI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> LI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca)))
 4. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x); \<not> lt dir c (\<langle>\<V> s\<rangle> x)\<rbrakk> \<Longrightarrow> \<U> (update\<B>\<I> (UBI_upd dir) i x c s) \<longrightarrow> (set (the (\<U>\<^sub>c (update\<B>\<I> (UBI_upd dir) i x c s))) \<subseteq> indices_state (update\<B>\<I> (UBI_upd dir) i x c s) \<and> (\<nexists>v. v \<Turnstile>\<^sub>t \<T> (update\<B>\<I> (UBI_upd dir) i x c s) \<and> (\<forall>xa ca ia. UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> UI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (update\<B>\<I> (UBI_upd dir) i x c s))) \<longrightarrow> lt dir (v xa) ca \<or> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> LI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (update\<B>\<I> (UBI_upd dir) i x c s))) \<longrightarrow> lt dir ca (v xa) \<or> ca = v xa))) \<and> (distinct_indices_state (update\<B>\<I> (UBI_upd dir) i x c s) \<longrightarrow> (\<forall>I\<subset>set (the (\<U>\<^sub>c (update\<B>\<I> (UBI_upd dir) i x c s))). \<exists>v. v \<Turnstile>\<^sub>t \<T> (update\<B>\<I> (UBI_upd dir) i x c s) \<and> (\<forall>xa ca ia. UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> UI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> LI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca)))
[PROOF STEP]
show "?P' (lt dir) (UBI dir) (LBI dir) (UB dir) (LB dir) (UBI_upd dir) (UI dir) (LI dir) (LE dir) (GE dir)
      (update x c ?s)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<U> (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) \<longrightarrow> (set (the (\<U>\<^sub>c (update x c (update\<B>\<I> (UBI_upd dir) i x c s)))) \<subseteq> indices_state (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) \<and> (\<nexists>v. v \<Turnstile>\<^sub>t \<T> (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) \<and> (\<forall>xa ca ia. UB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> UI dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (update x c (update\<B>\<I> (UBI_upd dir) i x c s)))) \<longrightarrow> lt dir (v xa) ca \<or> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> LI dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (update x c (update\<B>\<I> (UBI_upd dir) i x c s)))) \<longrightarrow> lt dir ca (v xa) \<or> ca = v xa))) \<and> (distinct_indices_state (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) \<longrightarrow> (\<forall>I\<subset>set (the (\<U>\<^sub>c (update x c (update\<B>\<I> (UBI_upd dir) i x c s)))). \<exists>v. v \<Turnstile>\<^sub>t \<T> (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) \<and> (\<forall>xa ca ia. UB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> UI dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> LI dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca)))
[PROOF STEP]
using * **
[PROOF STATE]
proof (prove)
using this:
\<not> \<U> s
\<triangle> (\<T> s)
\<nabla> s
dir = Positive \<or> dir = Negative
a = LE dir x c
x \<notin> lvars (\<T> s)
lt dir c (\<langle>\<V> s\<rangle> x)
\<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x)
\<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)

goal (1 subgoal):
 1. \<U> (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) \<longrightarrow> (set (the (\<U>\<^sub>c (update x c (update\<B>\<I> (UBI_upd dir) i x c s)))) \<subseteq> indices_state (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) \<and> (\<nexists>v. v \<Turnstile>\<^sub>t \<T> (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) \<and> (\<forall>xa ca ia. UB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> UI dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (update x c (update\<B>\<I> (UBI_upd dir) i x c s)))) \<longrightarrow> lt dir (v xa) ca \<or> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> LI dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (update x c (update\<B>\<I> (UBI_upd dir) i x c s)))) \<longrightarrow> lt dir ca (v xa) \<or> ca = v xa))) \<and> (distinct_indices_state (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) \<longrightarrow> (\<forall>I\<subset>set (the (\<U>\<^sub>c (update x c (update\<B>\<I> (UBI_upd dir) i x c s)))). \<exists>v. v \<Turnstile>\<^sub>t \<T> (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) \<and> (\<forall>xa ca ia. UB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> UI dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> LI dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca)))
[PROOF STEP]
by (auto simp add: update_unsat_id tableau_valuated_def)
[PROOF STATE]
proof (state)
this:
\<U> (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) \<longrightarrow> (set (the (\<U>\<^sub>c (update x c (update\<B>\<I> (UBI_upd dir) i x c s)))) \<subseteq> indices_state (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) \<and> (\<nexists>v. v \<Turnstile>\<^sub>t \<T> (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) \<and> (\<forall>xa ca ia. UB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> UI dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (update x c (update\<B>\<I> (UBI_upd dir) i x c s)))) \<longrightarrow> lt dir (v xa) ca \<or> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> LI dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (update x c (update\<B>\<I> (UBI_upd dir) i x c s)))) \<longrightarrow> lt dir ca (v xa) \<or> ca = v xa))) \<and> (distinct_indices_state (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) \<longrightarrow> (\<forall>I\<subset>set (the (\<U>\<^sub>c (update x c (update\<B>\<I> (UBI_upd dir) i x c s)))). \<exists>v. v \<Turnstile>\<^sub>t \<T> (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) \<and> (\<forall>xa ca ia. UB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> UI dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some ca \<longrightarrow> LI dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca)))

goal (3 subgoals):
 1. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x)\<rbrakk> \<Longrightarrow> \<U> s \<longrightarrow> (set (the (\<U>\<^sub>c s)) \<subseteq> indices_state s \<and> (\<nexists>v. v \<Turnstile>\<^sub>t \<T> s \<and> (\<forall>x c i. UB dir s x = Some c \<longrightarrow> UI dir s x = i \<longrightarrow> i \<in> set (the (\<U>\<^sub>c s)) \<longrightarrow> lt dir (v x) c \<or> v x = c) \<and> (\<forall>x c i. LB dir s x = Some c \<longrightarrow> LI dir s x = i \<longrightarrow> i \<in> set (the (\<U>\<^sub>c s)) \<longrightarrow> lt dir c (v x) \<or> c = v x))) \<and> (distinct_indices_state s \<longrightarrow> (\<forall>I\<subset>set (the (\<U>\<^sub>c s)). \<exists>v. v \<Turnstile>\<^sub>t \<T> s \<and> (\<forall>x c i. UB dir s x = Some c \<longrightarrow> UI dir s x = i \<longrightarrow> i \<in> I \<longrightarrow> v x = c) \<and> (\<forall>x c i. LB dir s x = Some c \<longrightarrow> LI dir s x = i \<longrightarrow> i \<in> I \<longrightarrow> v x = c)))
 2. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<in> lvars (\<T> s); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> \<U> (update\<B>\<I> (UBI_upd dir) i x c s) \<longrightarrow> (set (the (\<U>\<^sub>c (update\<B>\<I> (UBI_upd dir) i x c s))) \<subseteq> indices_state (update\<B>\<I> (UBI_upd dir) i x c s) \<and> (\<nexists>v. v \<Turnstile>\<^sub>t \<T> (update\<B>\<I> (UBI_upd dir) i x c s) \<and> (\<forall>xa ca ia. UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> UI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (update\<B>\<I> (UBI_upd dir) i x c s))) \<longrightarrow> lt dir (v xa) ca \<or> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> LI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (update\<B>\<I> (UBI_upd dir) i x c s))) \<longrightarrow> lt dir ca (v xa) \<or> ca = v xa))) \<and> (distinct_indices_state (update\<B>\<I> (UBI_upd dir) i x c s) \<longrightarrow> (\<forall>I\<subset>set (the (\<U>\<^sub>c (update\<B>\<I> (UBI_upd dir) i x c s))). \<exists>v. v \<Turnstile>\<^sub>t \<T> (update\<B>\<I> (UBI_upd dir) i x c s) \<and> (\<forall>xa ca ia. UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> UI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> LI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca)))
 3. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x); \<not> lt dir c (\<langle>\<V> s\<rangle> x)\<rbrakk> \<Longrightarrow> \<U> (update\<B>\<I> (UBI_upd dir) i x c s) \<longrightarrow> (set (the (\<U>\<^sub>c (update\<B>\<I> (UBI_upd dir) i x c s))) \<subseteq> indices_state (update\<B>\<I> (UBI_upd dir) i x c s) \<and> (\<nexists>v. v \<Turnstile>\<^sub>t \<T> (update\<B>\<I> (UBI_upd dir) i x c s) \<and> (\<forall>xa ca ia. UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> UI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (update\<B>\<I> (UBI_upd dir) i x c s))) \<longrightarrow> lt dir (v xa) ca \<or> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> LI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> set (the (\<U>\<^sub>c (update\<B>\<I> (UBI_upd dir) i x c s))) \<longrightarrow> lt dir ca (v xa) \<or> ca = v xa))) \<and> (distinct_indices_state (update\<B>\<I> (UBI_upd dir) i x c s) \<longrightarrow> (\<forall>I\<subset>set (the (\<U>\<^sub>c (update\<B>\<I> (UBI_upd dir) i x c s))). \<exists>v. v \<Turnstile>\<^sub>t \<T> (update\<B>\<I> (UBI_upd dir) i x c s) \<and> (\<forall>xa ca ia. UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> UI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca) \<and> (\<forall>xa ca ia. LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> LI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = ia \<longrightarrow> ia \<in> I \<longrightarrow> v xa = ca)))
[PROOF STEP]
qed (auto simp add: * update_unsat_id tableau_valuated_def)
[PROOF STATE]
proof (state)
this:
\<U> (assert_bound ia s) \<longrightarrow> unsat_state_core (assert_bound ia s) \<and> (distinct_indices_state (assert_bound ia s) \<longrightarrow> subsets_sat_core (assert_bound ia s))

goal (6 subgoals):
 1. \<And>s a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; \<not> \<U> (assert_bound a s)\<rbrakk> \<Longrightarrow> \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s (assert_bound a s) \<and> \<diamond> (assert_bound a s)
 2. \<And>s ats a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; (snd ` ats) \<doteq> \<B> s\<rbrakk> \<Longrightarrow> (snd ` (ats \<union> {a})) \<doteq> \<B> (assert_bound a s)
 3. \<And>s ats a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; ats \<Turnstile>\<^sub>i \<B>\<I> s\<rbrakk> \<Longrightarrow> insert a ats \<Turnstile>\<^sub>i \<B>\<I> (assert_bound a s)
 4. \<And>s as a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; index_valid as s; \<U> (assert_bound a s)\<rbrakk> \<Longrightarrow> minimal_unsat_state_core (assert_bound a s)
 5. \<And>s a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s\<rbrakk> \<Longrightarrow> \<nabla> (assert_bound a s)
 6. \<And>s as a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; index_valid as s\<rbrakk> \<Longrightarrow> index_valid (insert a as) (assert_bound a s)
[PROOF STEP]
with **
[PROOF STATE]
proof (chain)
picking this:
\<U> (assert_bound ia s)
\<U> (assert_bound ia s) \<longrightarrow> unsat_state_core (assert_bound ia s) \<and> (distinct_indices_state (assert_bound ia s) \<longrightarrow> subsets_sat_core (assert_bound ia s))
[PROOF STEP]
show "minimal_unsat_state_core (assert_bound ia s)"
[PROOF STATE]
proof (prove)
using this:
\<U> (assert_bound ia s)
\<U> (assert_bound ia s) \<longrightarrow> unsat_state_core (assert_bound ia s) \<and> (distinct_indices_state (assert_bound ia s) \<longrightarrow> subsets_sat_core (assert_bound ia s))

goal (1 subgoal):
 1. minimal_unsat_state_core (assert_bound ia s)
[PROOF STEP]
by (auto simp: minimal_unsat_state_core_def)
[PROOF STATE]
proof (state)
this:
minimal_unsat_state_core (assert_bound ia s)

goal (5 subgoals):
 1. \<And>s a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; \<not> \<U> (assert_bound a s)\<rbrakk> \<Longrightarrow> \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s (assert_bound a s) \<and> \<diamond> (assert_bound a s)
 2. \<And>s ats a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; (snd ` ats) \<doteq> \<B> s\<rbrakk> \<Longrightarrow> (snd ` (ats \<union> {a})) \<doteq> \<B> (assert_bound a s)
 3. \<And>s ats a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; ats \<Turnstile>\<^sub>i \<B>\<I> s\<rbrakk> \<Longrightarrow> insert a ats \<Turnstile>\<^sub>i \<B>\<I> (assert_bound a s)
 4. \<And>s a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s\<rbrakk> \<Longrightarrow> \<nabla> (assert_bound a s)
 5. \<And>s as a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; index_valid as s\<rbrakk> \<Longrightarrow> index_valid (insert a as) (assert_bound a s)
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (5 subgoals):
 1. \<And>s a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; \<not> \<U> (assert_bound a s)\<rbrakk> \<Longrightarrow> \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s (assert_bound a s) \<and> \<diamond> (assert_bound a s)
 2. \<And>s ats a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; (snd ` ats) \<doteq> \<B> s\<rbrakk> \<Longrightarrow> (snd ` (ats \<union> {a})) \<doteq> \<B> (assert_bound a s)
 3. \<And>s ats a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; ats \<Turnstile>\<^sub>i \<B>\<I> s\<rbrakk> \<Longrightarrow> insert a ats \<Turnstile>\<^sub>i \<B>\<I> (assert_bound a s)
 4. \<And>s a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s\<rbrakk> \<Longrightarrow> \<nabla> (assert_bound a s)
 5. \<And>s as a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; index_valid as s\<rbrakk> \<Longrightarrow> index_valid (insert a as) (assert_bound a s)
[PROOF STEP]
fix s::"('i,'a) state" and ia
[PROOF STATE]
proof (state)
goal (5 subgoals):
 1. \<And>s a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; \<not> \<U> (assert_bound a s)\<rbrakk> \<Longrightarrow> \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s (assert_bound a s) \<and> \<diamond> (assert_bound a s)
 2. \<And>s ats a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; (snd ` ats) \<doteq> \<B> s\<rbrakk> \<Longrightarrow> (snd ` (ats \<union> {a})) \<doteq> \<B> (assert_bound a s)
 3. \<And>s ats a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; ats \<Turnstile>\<^sub>i \<B>\<I> s\<rbrakk> \<Longrightarrow> insert a ats \<Turnstile>\<^sub>i \<B>\<I> (assert_bound a s)
 4. \<And>s a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s\<rbrakk> \<Longrightarrow> \<nabla> (assert_bound a s)
 5. \<And>s as a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; index_valid as s\<rbrakk> \<Longrightarrow> index_valid (insert a as) (assert_bound a s)
[PROOF STEP]
assume *: "\<not> \<U> s" "\<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s" "\<diamond> s" "\<triangle> (\<T> s)" "\<nabla> s"
    and **: "\<not> \<U> (assert_bound ia s)" (is ?lhs)
[PROOF STATE]
proof (state)
this:
\<not> \<U> s
\<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s
\<diamond> s
\<triangle> (\<T> s)
\<nabla> s
\<not> \<U> (assert_bound ia s)

goal (5 subgoals):
 1. \<And>s a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; \<not> \<U> (assert_bound a s)\<rbrakk> \<Longrightarrow> \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s (assert_bound a s) \<and> \<diamond> (assert_bound a s)
 2. \<And>s ats a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; (snd ` ats) \<doteq> \<B> s\<rbrakk> \<Longrightarrow> (snd ` (ats \<union> {a})) \<doteq> \<B> (assert_bound a s)
 3. \<And>s ats a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; ats \<Turnstile>\<^sub>i \<B>\<I> s\<rbrakk> \<Longrightarrow> insert a ats \<Turnstile>\<^sub>i \<B>\<I> (assert_bound a s)
 4. \<And>s a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s\<rbrakk> \<Longrightarrow> \<nabla> (assert_bound a s)
 5. \<And>s as a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; index_valid as s\<rbrakk> \<Longrightarrow> index_valid (insert a as) (assert_bound a s)
[PROOF STEP]
obtain i a where ia: "ia = (i,a)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (\<And>i a. ia = (i, a) \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by force
[PROOF STATE]
proof (state)
this:
ia = (i, a)

goal (5 subgoals):
 1. \<And>s a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; \<not> \<U> (assert_bound a s)\<rbrakk> \<Longrightarrow> \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s (assert_bound a s) \<and> \<diamond> (assert_bound a s)
 2. \<And>s ats a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; (snd ` ats) \<doteq> \<B> s\<rbrakk> \<Longrightarrow> (snd ` (ats \<union> {a})) \<doteq> \<B> (assert_bound a s)
 3. \<And>s ats a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; ats \<Turnstile>\<^sub>i \<B>\<I> s\<rbrakk> \<Longrightarrow> insert a ats \<Turnstile>\<^sub>i \<B>\<I> (assert_bound a s)
 4. \<And>s a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s\<rbrakk> \<Longrightarrow> \<nabla> (assert_bound a s)
 5. \<And>s as a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; index_valid as s\<rbrakk> \<Longrightarrow> index_valid (insert a as) (assert_bound a s)
[PROOF STEP]
have "\<langle>\<V> (assert_bound ia s)\<rangle> \<Turnstile>\<^sub>t \<T> (assert_bound ia s)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<langle>\<V> (assert_bound ia s)\<rangle> \<Turnstile>\<^sub>t \<T> (assert_bound ia s)
[PROOF STEP]
proof-
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. \<langle>\<V> (assert_bound ia s)\<rangle> \<Turnstile>\<^sub>t \<T> (assert_bound ia s)
[PROOF STEP]
let ?P = "\<lambda> lt UBI LBI UB LB UBI_upd UI LI LE GE s. \<langle>\<V> s\<rangle> \<Turnstile>\<^sub>t \<T> s"
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. \<langle>\<V> (assert_bound ia s)\<rangle> \<Turnstile>\<^sub>t \<T> (assert_bound ia s)
[PROOF STEP]
show ?thesis
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<langle>\<V> (assert_bound ia s)\<rangle> \<Turnstile>\<^sub>t \<T> (assert_bound ia s)
[PROOF STEP]
unfolding ia
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<langle>\<V> (assert_bound (i, a) s)\<rangle> \<Turnstile>\<^sub>t \<T> (assert_bound (i, a) s)
[PROOF STEP]
proof (rule assert_bound_cases[of _ _ ?P])
[PROOF STATE]
proof (state)
goal (7 subgoals):
 1. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x)\<rbrakk> \<Longrightarrow> \<langle>\<V> s\<rangle> \<Turnstile>\<^sub>t \<T> s
 2. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> \<langle>\<V> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s))\<rangle> \<Turnstile>\<^sub>t \<T> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s))
 3. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<notin> lvars (\<T> s); lt dir c (\<langle>\<V> s\<rangle> x); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> \<langle>\<V> (update x c (update\<B>\<I> (UBI_upd dir) i x c s))\<rangle> \<Turnstile>\<^sub>t \<T> (update x c (update\<B>\<I> (UBI_upd dir) i x c s))
 4. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<in> lvars (\<T> s); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> \<langle>\<V> (update\<B>\<I> (UBI_upd dir) i x c s)\<rangle> \<Turnstile>\<^sub>t \<T> (update\<B>\<I> (UBI_upd dir) i x c s)
 5. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x); \<not> lt dir c (\<langle>\<V> s\<rangle> x)\<rbrakk> \<Longrightarrow> \<langle>\<V> (update\<B>\<I> (UBI_upd dir) i x c s)\<rangle> \<Turnstile>\<^sub>t \<T> (update\<B>\<I> (UBI_upd dir) i x c s)
 6. \<And>s. \<langle>\<V> s\<rangle> \<Turnstile>\<^sub>t \<T> s = \<langle>\<V> s\<rangle> \<Turnstile>\<^sub>t \<T> s
 7. \<And>s. \<langle>\<V> s\<rangle> \<Turnstile>\<^sub>t \<T> s = \<langle>\<V> s\<rangle> \<Turnstile>\<^sub>t \<T> s
[PROOF STEP]
fix c x and dir :: "('i,'a) Direction"
[PROOF STATE]
proof (state)
goal (7 subgoals):
 1. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x)\<rbrakk> \<Longrightarrow> \<langle>\<V> s\<rangle> \<Turnstile>\<^sub>t \<T> s
 2. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> \<langle>\<V> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s))\<rangle> \<Turnstile>\<^sub>t \<T> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s))
 3. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<notin> lvars (\<T> s); lt dir c (\<langle>\<V> s\<rangle> x); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> \<langle>\<V> (update x c (update\<B>\<I> (UBI_upd dir) i x c s))\<rangle> \<Turnstile>\<^sub>t \<T> (update x c (update\<B>\<I> (UBI_upd dir) i x c s))
 4. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<in> lvars (\<T> s); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> \<langle>\<V> (update\<B>\<I> (UBI_upd dir) i x c s)\<rangle> \<Turnstile>\<^sub>t \<T> (update\<B>\<I> (UBI_upd dir) i x c s)
 5. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x); \<not> lt dir c (\<langle>\<V> s\<rangle> x)\<rbrakk> \<Longrightarrow> \<langle>\<V> (update\<B>\<I> (UBI_upd dir) i x c s)\<rangle> \<Turnstile>\<^sub>t \<T> (update\<B>\<I> (UBI_upd dir) i x c s)
 6. \<And>s. \<langle>\<V> s\<rangle> \<Turnstile>\<^sub>t \<T> s = \<langle>\<V> s\<rangle> \<Turnstile>\<^sub>t \<T> s
 7. \<And>s. \<langle>\<V> s\<rangle> \<Turnstile>\<^sub>t \<T> s = \<langle>\<V> s\<rangle> \<Turnstile>\<^sub>t \<T> s
[PROOF STEP]
let ?s' = "update\<B>\<I> (UBI_upd dir) i x c s"
[PROOF STATE]
proof (state)
goal (7 subgoals):
 1. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x)\<rbrakk> \<Longrightarrow> \<langle>\<V> s\<rangle> \<Turnstile>\<^sub>t \<T> s
 2. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> \<langle>\<V> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s))\<rangle> \<Turnstile>\<^sub>t \<T> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s))
 3. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<notin> lvars (\<T> s); lt dir c (\<langle>\<V> s\<rangle> x); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> \<langle>\<V> (update x c (update\<B>\<I> (UBI_upd dir) i x c s))\<rangle> \<Turnstile>\<^sub>t \<T> (update x c (update\<B>\<I> (UBI_upd dir) i x c s))
 4. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<in> lvars (\<T> s); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> \<langle>\<V> (update\<B>\<I> (UBI_upd dir) i x c s)\<rangle> \<Turnstile>\<^sub>t \<T> (update\<B>\<I> (UBI_upd dir) i x c s)
 5. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x); \<not> lt dir c (\<langle>\<V> s\<rangle> x)\<rbrakk> \<Longrightarrow> \<langle>\<V> (update\<B>\<I> (UBI_upd dir) i x c s)\<rangle> \<Turnstile>\<^sub>t \<T> (update\<B>\<I> (UBI_upd dir) i x c s)
 6. \<And>s. \<langle>\<V> s\<rangle> \<Turnstile>\<^sub>t \<T> s = \<langle>\<V> s\<rangle> \<Turnstile>\<^sub>t \<T> s
 7. \<And>s. \<langle>\<V> s\<rangle> \<Turnstile>\<^sub>t \<T> s = \<langle>\<V> s\<rangle> \<Turnstile>\<^sub>t \<T> s
[PROOF STEP]
assume "x \<notin> lvars (\<T> s)" "(lt dir) c (\<langle>\<V> s\<rangle> x)"
        "dir = Positive \<or> dir = Negative"
[PROOF STATE]
proof (state)
this:
x \<notin> lvars (\<T> s)
lt dir c (\<langle>\<V> s\<rangle> x)
dir = Positive \<or> dir = Negative

goal (7 subgoals):
 1. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x)\<rbrakk> \<Longrightarrow> \<langle>\<V> s\<rangle> \<Turnstile>\<^sub>t \<T> s
 2. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> \<langle>\<V> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s))\<rangle> \<Turnstile>\<^sub>t \<T> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s))
 3. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<notin> lvars (\<T> s); lt dir c (\<langle>\<V> s\<rangle> x); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> \<langle>\<V> (update x c (update\<B>\<I> (UBI_upd dir) i x c s))\<rangle> \<Turnstile>\<^sub>t \<T> (update x c (update\<B>\<I> (UBI_upd dir) i x c s))
 4. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<in> lvars (\<T> s); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> \<langle>\<V> (update\<B>\<I> (UBI_upd dir) i x c s)\<rangle> \<Turnstile>\<^sub>t \<T> (update\<B>\<I> (UBI_upd dir) i x c s)
 5. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x); \<not> lt dir c (\<langle>\<V> s\<rangle> x)\<rbrakk> \<Longrightarrow> \<langle>\<V> (update\<B>\<I> (UBI_upd dir) i x c s)\<rangle> \<Turnstile>\<^sub>t \<T> (update\<B>\<I> (UBI_upd dir) i x c s)
 6. \<And>s. \<langle>\<V> s\<rangle> \<Turnstile>\<^sub>t \<T> s = \<langle>\<V> s\<rangle> \<Turnstile>\<^sub>t \<T> s
 7. \<And>s. \<langle>\<V> s\<rangle> \<Turnstile>\<^sub>t \<T> s = \<langle>\<V> s\<rangle> \<Turnstile>\<^sub>t \<T> s
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
x \<notin> lvars (\<T> s)
lt dir c (\<langle>\<V> s\<rangle> x)
dir = Positive \<or> dir = Negative
[PROOF STEP]
show "\<langle>\<V> (update x c ?s')\<rangle> \<Turnstile>\<^sub>t \<T> (update x c ?s')"
[PROOF STATE]
proof (prove)
using this:
x \<notin> lvars (\<T> s)
lt dir c (\<langle>\<V> s\<rangle> x)
dir = Positive \<or> dir = Negative

goal (1 subgoal):
 1. \<langle>\<V> (update x c (update\<B>\<I> (UBI_upd dir) i x c s))\<rangle> \<Turnstile>\<^sub>t \<T> (update x c (update\<B>\<I> (UBI_upd dir) i x c s))
[PROOF STEP]
using *
[PROOF STATE]
proof (prove)
using this:
x \<notin> lvars (\<T> s)
lt dir c (\<langle>\<V> s\<rangle> x)
dir = Positive \<or> dir = Negative
\<not> \<U> s
\<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s
\<diamond> s
\<triangle> (\<T> s)
\<nabla> s

goal (1 subgoal):
 1. \<langle>\<V> (update x c (update\<B>\<I> (UBI_upd dir) i x c s))\<rangle> \<Turnstile>\<^sub>t \<T> (update x c (update\<B>\<I> (UBI_upd dir) i x c s))
[PROOF STEP]
using update_satisfies_tableau[of ?s' x c] update_tableau_id
[PROOF STATE]
proof (prove)
using this:
x \<notin> lvars (\<T> s)
lt dir c (\<langle>\<V> s\<rangle> x)
dir = Positive \<or> dir = Negative
\<not> \<U> s
\<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s
\<diamond> s
\<triangle> (\<T> s)
\<nabla> s
\<lbrakk>\<triangle> (\<T> (update\<B>\<I> (UBI_upd dir) i x c s)); \<nabla> (update\<B>\<I> (UBI_upd dir) i x c s); x \<notin> lvars (\<T> (update\<B>\<I> (UBI_upd dir) i x c s))\<rbrakk> \<Longrightarrow> \<langle>\<V> (update\<B>\<I> (UBI_upd dir) i x c s)\<rangle> \<Turnstile>\<^sub>t \<T> (update\<B>\<I> (UBI_upd dir) i x c s) \<longrightarrow> \<langle>\<V> (update x c (update\<B>\<I> (UBI_upd dir) i x c s))\<rangle> \<Turnstile>\<^sub>t \<T> (update\<B>\<I> (UBI_upd dir) i x c s)
\<lbrakk>\<triangle> (\<T> ?s); \<nabla> ?s; ?x \<notin> lvars (\<T> ?s)\<rbrakk> \<Longrightarrow> \<T> (update ?x ?c ?s) = \<T> ?s

goal (1 subgoal):
 1. \<langle>\<V> (update x c (update\<B>\<I> (UBI_upd dir) i x c s))\<rangle> \<Turnstile>\<^sub>t \<T> (update x c (update\<B>\<I> (UBI_upd dir) i x c s))
[PROOF STEP]
by (auto simp add: curr_val_satisfies_no_lhs_def tableau_valuated_def)
[PROOF STATE]
proof (state)
this:
\<langle>\<V> (update x c (update\<B>\<I> (UBI_upd dir) i x c s))\<rangle> \<Turnstile>\<^sub>t \<T> (update x c (update\<B>\<I> (UBI_upd dir) i x c s))

goal (6 subgoals):
 1. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x)\<rbrakk> \<Longrightarrow> \<langle>\<V> s\<rangle> \<Turnstile>\<^sub>t \<T> s
 2. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> \<langle>\<V> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s))\<rangle> \<Turnstile>\<^sub>t \<T> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s))
 3. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<in> lvars (\<T> s); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> \<langle>\<V> (update\<B>\<I> (UBI_upd dir) i x c s)\<rangle> \<Turnstile>\<^sub>t \<T> (update\<B>\<I> (UBI_upd dir) i x c s)
 4. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x); \<not> lt dir c (\<langle>\<V> s\<rangle> x)\<rbrakk> \<Longrightarrow> \<langle>\<V> (update\<B>\<I> (UBI_upd dir) i x c s)\<rangle> \<Turnstile>\<^sub>t \<T> (update\<B>\<I> (UBI_upd dir) i x c s)
 5. \<And>s. \<langle>\<V> s\<rangle> \<Turnstile>\<^sub>t \<T> s = \<langle>\<V> s\<rangle> \<Turnstile>\<^sub>t \<T> s
 6. \<And>s. \<langle>\<V> s\<rangle> \<Turnstile>\<^sub>t \<T> s = \<langle>\<V> s\<rangle> \<Turnstile>\<^sub>t \<T> s
[PROOF STEP]
qed (insert *, auto simp add: curr_val_satisfies_no_lhs_def)
[PROOF STATE]
proof (state)
this:
\<langle>\<V> (assert_bound ia s)\<rangle> \<Turnstile>\<^sub>t \<T> (assert_bound ia s)

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
\<langle>\<V> (assert_bound ia s)\<rangle> \<Turnstile>\<^sub>t \<T> (assert_bound ia s)

goal (5 subgoals):
 1. \<And>s a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; \<not> \<U> (assert_bound a s)\<rbrakk> \<Longrightarrow> \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s (assert_bound a s) \<and> \<diamond> (assert_bound a s)
 2. \<And>s ats a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; (snd ` ats) \<doteq> \<B> s\<rbrakk> \<Longrightarrow> (snd ` (ats \<union> {a})) \<doteq> \<B> (assert_bound a s)
 3. \<And>s ats a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; ats \<Turnstile>\<^sub>i \<B>\<I> s\<rbrakk> \<Longrightarrow> insert a ats \<Turnstile>\<^sub>i \<B>\<I> (assert_bound a s)
 4. \<And>s a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s\<rbrakk> \<Longrightarrow> \<nabla> (assert_bound a s)
 5. \<And>s as a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; index_valid as s\<rbrakk> \<Longrightarrow> index_valid (insert a as) (assert_bound a s)
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
\<langle>\<V> (assert_bound ia s)\<rangle> \<Turnstile>\<^sub>t \<T> (assert_bound ia s)

goal (5 subgoals):
 1. \<And>s a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; \<not> \<U> (assert_bound a s)\<rbrakk> \<Longrightarrow> \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s (assert_bound a s) \<and> \<diamond> (assert_bound a s)
 2. \<And>s ats a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; (snd ` ats) \<doteq> \<B> s\<rbrakk> \<Longrightarrow> (snd ` (ats \<union> {a})) \<doteq> \<B> (assert_bound a s)
 3. \<And>s ats a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; ats \<Turnstile>\<^sub>i \<B>\<I> s\<rbrakk> \<Longrightarrow> insert a ats \<Turnstile>\<^sub>i \<B>\<I> (assert_bound a s)
 4. \<And>s a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s\<rbrakk> \<Longrightarrow> \<nabla> (assert_bound a s)
 5. \<And>s as a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; index_valid as s\<rbrakk> \<Longrightarrow> index_valid (insert a as) (assert_bound a s)
[PROOF STEP]
have "\<not> \<U> (assert_bound ia s) \<longrightarrow> \<langle>\<V> (assert_bound ia s)\<rangle> \<Turnstile>\<^sub>b \<B> (assert_bound ia s) \<parallel> - lvars (\<T> (assert_bound ia s))" (is "?P (assert_bound ia s)")
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<not> \<U> (assert_bound ia s) \<longrightarrow> \<langle>\<V> (assert_bound ia s)\<rangle> \<Turnstile>\<^sub>b \<B> (assert_bound ia s) \<parallel> - lvars (\<T> (assert_bound ia s))
[PROOF STEP]
proof-
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. \<not> \<U> (assert_bound ia s) \<longrightarrow> \<langle>\<V> (assert_bound ia s)\<rangle> \<Turnstile>\<^sub>b \<B> (assert_bound ia s) \<parallel> - lvars (\<T> (assert_bound ia s))
[PROOF STEP]
let ?P' = "\<lambda> lt UBI LBI UB LB UB_upd UI LI LE GE s.
      \<not> \<U> s \<longrightarrow> (\<forall>x\<in>- lvars (\<T> s). \<unrhd>\<^sub>l\<^sub>b lt (\<langle>\<V> s\<rangle> x) (LB s x) \<and> \<unlhd>\<^sub>u\<^sub>b lt (\<langle>\<V> s\<rangle> x) (UB s x))"
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. \<not> \<U> (assert_bound ia s) \<longrightarrow> \<langle>\<V> (assert_bound ia s)\<rangle> \<Turnstile>\<^sub>b \<B> (assert_bound ia s) \<parallel> - lvars (\<T> (assert_bound ia s))
[PROOF STEP]
let ?P'' = "\<lambda> dir. ?P' (lt dir) (UBI dir) (LBI dir) (UB dir) (LB dir) (UBI_upd dir) (UI dir) (LI dir) (LE dir) (GE dir)"
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. \<not> \<U> (assert_bound ia s) \<longrightarrow> \<langle>\<V> (assert_bound ia s)\<rangle> \<Turnstile>\<^sub>b \<B> (assert_bound ia s) \<parallel> - lvars (\<T> (assert_bound ia s))
[PROOF STEP]
have x: "\<And> s'. ?P s' = ?P' (<) \<B>\<^sub>i\<^sub>l \<B>\<^sub>i\<^sub>u \<B>\<^sub>u \<B>\<^sub>l \<B>\<^sub>i\<^sub>u_update \<I>\<^sub>u \<I>\<^sub>l Leq Geq s'"
      and xx: "\<And> s'. ?P s' = ?P' (>) \<B>\<^sub>i\<^sub>l \<B>\<^sub>i\<^sub>u \<B>\<^sub>l \<B>\<^sub>u \<B>\<^sub>i\<^sub>l_update \<I>\<^sub>l \<I>\<^sub>u Geq Leq s'"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (\<And>s'. (\<not> \<U> s' \<longrightarrow> \<langle>\<V> s'\<rangle> \<Turnstile>\<^sub>b \<B> s' \<parallel> - lvars (\<T> s')) = (\<not> \<U> s' \<longrightarrow> (\<forall>x\<in>- lvars (\<T> s'). \<unrhd>\<^sub>l\<^sub>b (<) (\<langle>\<V> s'\<rangle> x) (\<B>\<^sub>l s' x) \<and> \<unlhd>\<^sub>u\<^sub>b (<) (\<langle>\<V> s'\<rangle> x) (\<B>\<^sub>u s' x)))) &&& (\<And>s'. (\<not> \<U> s' \<longrightarrow> \<langle>\<V> s'\<rangle> \<Turnstile>\<^sub>b \<B> s' \<parallel> - lvars (\<T> s')) = (\<not> \<U> s' \<longrightarrow> (\<forall>x\<in>- lvars (\<T> s'). \<unrhd>\<^sub>l\<^sub>b (\<lambda>x y. y < x) (\<langle>\<V> s'\<rangle> x) (\<B>\<^sub>u s' x) \<and> \<unlhd>\<^sub>u\<^sub>b (\<lambda>x y. y < x) (\<langle>\<V> s'\<rangle> x) (\<B>\<^sub>l s' x))))
[PROOF STEP]
unfolding satisfies_bounds_set.simps in_bounds.simps bound_compare_defs
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (\<And>s'. (\<not> \<U> s' \<longrightarrow> (\<forall>x\<in>- lvars (\<T> s'). (case \<B>\<^sub>l s' x of None \<Rightarrow> True | Some b' \<Rightarrow> b' < \<langle>\<V> s'\<rangle> x \<or> b' = \<langle>\<V> s'\<rangle> x) \<and> (case \<B>\<^sub>u s' x of None \<Rightarrow> True | Some b' \<Rightarrow> \<langle>\<V> s'\<rangle> x < b' \<or> \<langle>\<V> s'\<rangle> x = b'))) = (\<not> \<U> s' \<longrightarrow> (\<forall>x\<in>- lvars (\<T> s'). (case \<B>\<^sub>l s' x of None \<Rightarrow> True | Some b' \<Rightarrow> b' < \<langle>\<V> s'\<rangle> x \<or> b' = \<langle>\<V> s'\<rangle> x) \<and> (case \<B>\<^sub>u s' x of None \<Rightarrow> True | Some b' \<Rightarrow> \<langle>\<V> s'\<rangle> x < b' \<or> \<langle>\<V> s'\<rangle> x = b')))) &&& (\<And>s'. (\<not> \<U> s' \<longrightarrow> (\<forall>x\<in>- lvars (\<T> s'). (case \<B>\<^sub>l s' x of None \<Rightarrow> True | Some b' \<Rightarrow> b' < \<langle>\<V> s'\<rangle> x \<or> b' = \<langle>\<V> s'\<rangle> x) \<and> (case \<B>\<^sub>u s' x of None \<Rightarrow> True | Some b' \<Rightarrow> \<langle>\<V> s'\<rangle> x < b' \<or> \<langle>\<V> s'\<rangle> x = b'))) = (\<not> \<U> s' \<longrightarrow> (\<forall>x\<in>- lvars (\<T> s'). (case \<B>\<^sub>u s' x of None \<Rightarrow> True | Some b' \<Rightarrow> \<langle>\<V> s'\<rangle> x < b' \<or> b' = \<langle>\<V> s'\<rangle> x) \<and> (case \<B>\<^sub>l s' x of None \<Rightarrow> True | Some b' \<Rightarrow> b' < \<langle>\<V> s'\<rangle> x \<or> \<langle>\<V> s'\<rangle> x = b'))))
[PROOF STEP]
by (auto split: option.split)
[PROOF STATE]
proof (state)
this:
(\<not> \<U> ?s'2 \<longrightarrow> \<langle>\<V> ?s'2\<rangle> \<Turnstile>\<^sub>b \<B> ?s'2 \<parallel> - lvars (\<T> ?s'2)) = (\<not> \<U> ?s'2 \<longrightarrow> (\<forall>x\<in>- lvars (\<T> ?s'2). \<unrhd>\<^sub>l\<^sub>b (<) (\<langle>\<V> ?s'2\<rangle> x) (\<B>\<^sub>l ?s'2 x) \<and> \<unlhd>\<^sub>u\<^sub>b (<) (\<langle>\<V> ?s'2\<rangle> x) (\<B>\<^sub>u ?s'2 x)))
(\<not> \<U> ?s'2 \<longrightarrow> \<langle>\<V> ?s'2\<rangle> \<Turnstile>\<^sub>b \<B> ?s'2 \<parallel> - lvars (\<T> ?s'2)) = (\<not> \<U> ?s'2 \<longrightarrow> (\<forall>x\<in>- lvars (\<T> ?s'2). \<unrhd>\<^sub>l\<^sub>b (\<lambda>x y. y < x) (\<langle>\<V> ?s'2\<rangle> x) (\<B>\<^sub>u ?s'2 x) \<and> \<unlhd>\<^sub>u\<^sub>b (\<lambda>x y. y < x) (\<langle>\<V> ?s'2\<rangle> x) (\<B>\<^sub>l ?s'2 x)))

goal (1 subgoal):
 1. \<not> \<U> (assert_bound ia s) \<longrightarrow> \<langle>\<V> (assert_bound ia s)\<rangle> \<Turnstile>\<^sub>b \<B> (assert_bound ia s) \<parallel> - lvars (\<T> (assert_bound ia s))
[PROOF STEP]
show ?thesis
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<not> \<U> (assert_bound ia s) \<longrightarrow> \<langle>\<V> (assert_bound ia s)\<rangle> \<Turnstile>\<^sub>b \<B> (assert_bound ia s) \<parallel> - lvars (\<T> (assert_bound ia s))
[PROOF STEP]
unfolding ia
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<not> \<U> (assert_bound (i, a) s) \<longrightarrow> \<langle>\<V> (assert_bound (i, a) s)\<rangle> \<Turnstile>\<^sub>b \<B> (assert_bound (i, a) s) \<parallel> - lvars (\<T> (assert_bound (i, a) s))
[PROOF STEP]
proof (rule assert_bound_cases[of _ _ ?P'])
[PROOF STATE]
proof (state)
goal (7 subgoals):
 1. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x)\<rbrakk> \<Longrightarrow> \<not> \<U> s \<longrightarrow> (\<forall>x\<in>- lvars (\<T> s). \<unrhd>\<^sub>l\<^sub>b (lt dir) (\<langle>\<V> s\<rangle> x) (LB dir s x) \<and> \<unlhd>\<^sub>u\<^sub>b (lt dir) (\<langle>\<V> s\<rangle> x) (UB dir s x))
 2. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> \<not> \<U> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) \<longrightarrow> (\<forall>xa\<in>- lvars (\<T> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s))). \<unrhd>\<^sub>l\<^sub>b (lt dir) (\<langle>\<V> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s))\<rangle> xa) (LB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa) \<and> \<unlhd>\<^sub>u\<^sub>b (lt dir) (\<langle>\<V> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s))\<rangle> xa) (UB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa))
 3. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<notin> lvars (\<T> s); lt dir c (\<langle>\<V> s\<rangle> x); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> \<not> \<U> (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) \<longrightarrow> (\<forall>xa\<in>- lvars (\<T> (update x c (update\<B>\<I> (UBI_upd dir) i x c s))). \<unrhd>\<^sub>l\<^sub>b (lt dir) (\<langle>\<V> (update x c (update\<B>\<I> (UBI_upd dir) i x c s))\<rangle> xa) (LB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa) \<and> \<unlhd>\<^sub>u\<^sub>b (lt dir) (\<langle>\<V> (update x c (update\<B>\<I> (UBI_upd dir) i x c s))\<rangle> xa) (UB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa))
 4. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<in> lvars (\<T> s); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> \<not> \<U> (update\<B>\<I> (UBI_upd dir) i x c s) \<longrightarrow> (\<forall>xa\<in>- lvars (\<T> (update\<B>\<I> (UBI_upd dir) i x c s)). \<unrhd>\<^sub>l\<^sub>b (lt dir) (\<langle>\<V> (update\<B>\<I> (UBI_upd dir) i x c s)\<rangle> xa) (LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa) \<and> \<unlhd>\<^sub>u\<^sub>b (lt dir) (\<langle>\<V> (update\<B>\<I> (UBI_upd dir) i x c s)\<rangle> xa) (UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa))
 5. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x); \<not> lt dir c (\<langle>\<V> s\<rangle> x)\<rbrakk> \<Longrightarrow> \<not> \<U> (update\<B>\<I> (UBI_upd dir) i x c s) \<longrightarrow> (\<forall>xa\<in>- lvars (\<T> (update\<B>\<I> (UBI_upd dir) i x c s)). \<unrhd>\<^sub>l\<^sub>b (lt dir) (\<langle>\<V> (update\<B>\<I> (UBI_upd dir) i x c s)\<rangle> xa) (LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa) \<and> \<unlhd>\<^sub>u\<^sub>b (lt dir) (\<langle>\<V> (update\<B>\<I> (UBI_upd dir) i x c s)\<rangle> xa) (UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa))
 6. \<And>s. (\<not> \<U> s \<longrightarrow> \<langle>\<V> s\<rangle> \<Turnstile>\<^sub>b \<B> s \<parallel> - lvars (\<T> s)) = (\<not> \<U> s \<longrightarrow> (\<forall>x\<in>- lvars (\<T> s). \<unrhd>\<^sub>l\<^sub>b (\<lambda>x y. y < x) (\<langle>\<V> s\<rangle> x) (\<B>\<^sub>u s x) \<and> \<unlhd>\<^sub>u\<^sub>b (\<lambda>x y. y < x) (\<langle>\<V> s\<rangle> x) (\<B>\<^sub>l s x)))
 7. \<And>s. (\<not> \<U> s \<longrightarrow> \<langle>\<V> s\<rangle> \<Turnstile>\<^sub>b \<B> s \<parallel> - lvars (\<T> s)) = (\<not> \<U> s \<longrightarrow> (\<forall>x\<in>- lvars (\<T> s). \<unrhd>\<^sub>l\<^sub>b (<) (\<langle>\<V> s\<rangle> x) (\<B>\<^sub>l s x) \<and> \<unlhd>\<^sub>u\<^sub>b (<) (\<langle>\<V> s\<rangle> x) (\<B>\<^sub>u s x)))
[PROOF STEP]
fix dir :: "('i,'a) Direction"
[PROOF STATE]
proof (state)
goal (7 subgoals):
 1. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x)\<rbrakk> \<Longrightarrow> \<not> \<U> s \<longrightarrow> (\<forall>x\<in>- lvars (\<T> s). \<unrhd>\<^sub>l\<^sub>b (lt dir) (\<langle>\<V> s\<rangle> x) (LB dir s x) \<and> \<unlhd>\<^sub>u\<^sub>b (lt dir) (\<langle>\<V> s\<rangle> x) (UB dir s x))
 2. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> \<not> \<U> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) \<longrightarrow> (\<forall>xa\<in>- lvars (\<T> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s))). \<unrhd>\<^sub>l\<^sub>b (lt dir) (\<langle>\<V> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s))\<rangle> xa) (LB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa) \<and> \<unlhd>\<^sub>u\<^sub>b (lt dir) (\<langle>\<V> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s))\<rangle> xa) (UB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa))
 3. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<notin> lvars (\<T> s); lt dir c (\<langle>\<V> s\<rangle> x); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> \<not> \<U> (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) \<longrightarrow> (\<forall>xa\<in>- lvars (\<T> (update x c (update\<B>\<I> (UBI_upd dir) i x c s))). \<unrhd>\<^sub>l\<^sub>b (lt dir) (\<langle>\<V> (update x c (update\<B>\<I> (UBI_upd dir) i x c s))\<rangle> xa) (LB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa) \<and> \<unlhd>\<^sub>u\<^sub>b (lt dir) (\<langle>\<V> (update x c (update\<B>\<I> (UBI_upd dir) i x c s))\<rangle> xa) (UB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa))
 4. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<in> lvars (\<T> s); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> \<not> \<U> (update\<B>\<I> (UBI_upd dir) i x c s) \<longrightarrow> (\<forall>xa\<in>- lvars (\<T> (update\<B>\<I> (UBI_upd dir) i x c s)). \<unrhd>\<^sub>l\<^sub>b (lt dir) (\<langle>\<V> (update\<B>\<I> (UBI_upd dir) i x c s)\<rangle> xa) (LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa) \<and> \<unlhd>\<^sub>u\<^sub>b (lt dir) (\<langle>\<V> (update\<B>\<I> (UBI_upd dir) i x c s)\<rangle> xa) (UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa))
 5. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x); \<not> lt dir c (\<langle>\<V> s\<rangle> x)\<rbrakk> \<Longrightarrow> \<not> \<U> (update\<B>\<I> (UBI_upd dir) i x c s) \<longrightarrow> (\<forall>xa\<in>- lvars (\<T> (update\<B>\<I> (UBI_upd dir) i x c s)). \<unrhd>\<^sub>l\<^sub>b (lt dir) (\<langle>\<V> (update\<B>\<I> (UBI_upd dir) i x c s)\<rangle> xa) (LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa) \<and> \<unlhd>\<^sub>u\<^sub>b (lt dir) (\<langle>\<V> (update\<B>\<I> (UBI_upd dir) i x c s)\<rangle> xa) (UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa))
 6. \<And>s. (\<not> \<U> s \<longrightarrow> \<langle>\<V> s\<rangle> \<Turnstile>\<^sub>b \<B> s \<parallel> - lvars (\<T> s)) = (\<not> \<U> s \<longrightarrow> (\<forall>x\<in>- lvars (\<T> s). \<unrhd>\<^sub>l\<^sub>b (\<lambda>x y. y < x) (\<langle>\<V> s\<rangle> x) (\<B>\<^sub>u s x) \<and> \<unlhd>\<^sub>u\<^sub>b (\<lambda>x y. y < x) (\<langle>\<V> s\<rangle> x) (\<B>\<^sub>l s x)))
 7. \<And>s. (\<not> \<U> s \<longrightarrow> \<langle>\<V> s\<rangle> \<Turnstile>\<^sub>b \<B> s \<parallel> - lvars (\<T> s)) = (\<not> \<U> s \<longrightarrow> (\<forall>x\<in>- lvars (\<T> s). \<unrhd>\<^sub>l\<^sub>b (<) (\<langle>\<V> s\<rangle> x) (\<B>\<^sub>l s x) \<and> \<unlhd>\<^sub>u\<^sub>b (<) (\<langle>\<V> s\<rangle> x) (\<B>\<^sub>u s x)))
[PROOF STEP]
assume "dir = Positive \<or> dir = Negative"
[PROOF STATE]
proof (state)
this:
dir = Positive \<or> dir = Negative

goal (7 subgoals):
 1. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x)\<rbrakk> \<Longrightarrow> \<not> \<U> s \<longrightarrow> (\<forall>x\<in>- lvars (\<T> s). \<unrhd>\<^sub>l\<^sub>b (lt dir) (\<langle>\<V> s\<rangle> x) (LB dir s x) \<and> \<unlhd>\<^sub>u\<^sub>b (lt dir) (\<langle>\<V> s\<rangle> x) (UB dir s x))
 2. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> \<not> \<U> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) \<longrightarrow> (\<forall>xa\<in>- lvars (\<T> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s))). \<unrhd>\<^sub>l\<^sub>b (lt dir) (\<langle>\<V> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s))\<rangle> xa) (LB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa) \<and> \<unlhd>\<^sub>u\<^sub>b (lt dir) (\<langle>\<V> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s))\<rangle> xa) (UB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa))
 3. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<notin> lvars (\<T> s); lt dir c (\<langle>\<V> s\<rangle> x); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> \<not> \<U> (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) \<longrightarrow> (\<forall>xa\<in>- lvars (\<T> (update x c (update\<B>\<I> (UBI_upd dir) i x c s))). \<unrhd>\<^sub>l\<^sub>b (lt dir) (\<langle>\<V> (update x c (update\<B>\<I> (UBI_upd dir) i x c s))\<rangle> xa) (LB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa) \<and> \<unlhd>\<^sub>u\<^sub>b (lt dir) (\<langle>\<V> (update x c (update\<B>\<I> (UBI_upd dir) i x c s))\<rangle> xa) (UB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa))
 4. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<in> lvars (\<T> s); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> \<not> \<U> (update\<B>\<I> (UBI_upd dir) i x c s) \<longrightarrow> (\<forall>xa\<in>- lvars (\<T> (update\<B>\<I> (UBI_upd dir) i x c s)). \<unrhd>\<^sub>l\<^sub>b (lt dir) (\<langle>\<V> (update\<B>\<I> (UBI_upd dir) i x c s)\<rangle> xa) (LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa) \<and> \<unlhd>\<^sub>u\<^sub>b (lt dir) (\<langle>\<V> (update\<B>\<I> (UBI_upd dir) i x c s)\<rangle> xa) (UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa))
 5. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x); \<not> lt dir c (\<langle>\<V> s\<rangle> x)\<rbrakk> \<Longrightarrow> \<not> \<U> (update\<B>\<I> (UBI_upd dir) i x c s) \<longrightarrow> (\<forall>xa\<in>- lvars (\<T> (update\<B>\<I> (UBI_upd dir) i x c s)). \<unrhd>\<^sub>l\<^sub>b (lt dir) (\<langle>\<V> (update\<B>\<I> (UBI_upd dir) i x c s)\<rangle> xa) (LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa) \<and> \<unlhd>\<^sub>u\<^sub>b (lt dir) (\<langle>\<V> (update\<B>\<I> (UBI_upd dir) i x c s)\<rangle> xa) (UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa))
 6. \<And>s. (\<not> \<U> s \<longrightarrow> \<langle>\<V> s\<rangle> \<Turnstile>\<^sub>b \<B> s \<parallel> - lvars (\<T> s)) = (\<not> \<U> s \<longrightarrow> (\<forall>x\<in>- lvars (\<T> s). \<unrhd>\<^sub>l\<^sub>b (\<lambda>x y. y < x) (\<langle>\<V> s\<rangle> x) (\<B>\<^sub>u s x) \<and> \<unlhd>\<^sub>u\<^sub>b (\<lambda>x y. y < x) (\<langle>\<V> s\<rangle> x) (\<B>\<^sub>l s x)))
 7. \<And>s. (\<not> \<U> s \<longrightarrow> \<langle>\<V> s\<rangle> \<Turnstile>\<^sub>b \<B> s \<parallel> - lvars (\<T> s)) = (\<not> \<U> s \<longrightarrow> (\<forall>x\<in>- lvars (\<T> s). \<unrhd>\<^sub>l\<^sub>b (<) (\<langle>\<V> s\<rangle> x) (\<B>\<^sub>l s x) \<and> \<unlhd>\<^sub>u\<^sub>b (<) (\<langle>\<V> s\<rangle> x) (\<B>\<^sub>u s x)))
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
dir = Positive \<or> dir = Negative
[PROOF STEP]
show "?P'' dir s"
[PROOF STATE]
proof (prove)
using this:
dir = Positive \<or> dir = Negative

goal (1 subgoal):
 1. \<not> \<U> s \<longrightarrow> (\<forall>x\<in>- lvars (\<T> s). \<unrhd>\<^sub>l\<^sub>b (lt dir) (\<langle>\<V> s\<rangle> x) (LB dir s x) \<and> \<unlhd>\<^sub>u\<^sub>b (lt dir) (\<langle>\<V> s\<rangle> x) (UB dir s x))
[PROOF STEP]
using  x[of s] xx[of s] \<open>\<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s\<close>
[PROOF STATE]
proof (prove)
using this:
dir = Positive \<or> dir = Negative
(\<not> \<U> s \<longrightarrow> \<langle>\<V> s\<rangle> \<Turnstile>\<^sub>b \<B> s \<parallel> - lvars (\<T> s)) = (\<not> \<U> s \<longrightarrow> (\<forall>x\<in>- lvars (\<T> s). \<unrhd>\<^sub>l\<^sub>b (<) (\<langle>\<V> s\<rangle> x) (\<B>\<^sub>l s x) \<and> \<unlhd>\<^sub>u\<^sub>b (<) (\<langle>\<V> s\<rangle> x) (\<B>\<^sub>u s x)))
(\<not> \<U> s \<longrightarrow> \<langle>\<V> s\<rangle> \<Turnstile>\<^sub>b \<B> s \<parallel> - lvars (\<T> s)) = (\<not> \<U> s \<longrightarrow> (\<forall>x\<in>- lvars (\<T> s). \<unrhd>\<^sub>l\<^sub>b (\<lambda>x y. y < x) (\<langle>\<V> s\<rangle> x) (\<B>\<^sub>u s x) \<and> \<unlhd>\<^sub>u\<^sub>b (\<lambda>x y. y < x) (\<langle>\<V> s\<rangle> x) (\<B>\<^sub>l s x)))
\<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s

goal (1 subgoal):
 1. \<not> \<U> s \<longrightarrow> (\<forall>x\<in>- lvars (\<T> s). \<unrhd>\<^sub>l\<^sub>b (lt dir) (\<langle>\<V> s\<rangle> x) (LB dir s x) \<and> \<unlhd>\<^sub>u\<^sub>b (lt dir) (\<langle>\<V> s\<rangle> x) (UB dir s x))
[PROOF STEP]
by (auto simp add: curr_val_satisfies_no_lhs_def)
[PROOF STATE]
proof (state)
this:
\<not> \<U> s \<longrightarrow> (\<forall>x\<in>- lvars (\<T> s). \<unrhd>\<^sub>l\<^sub>b (lt dir) (\<langle>\<V> s\<rangle> x) (LB dir s x) \<and> \<unlhd>\<^sub>u\<^sub>b (lt dir) (\<langle>\<V> s\<rangle> x) (UB dir s x))

goal (6 subgoals):
 1. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> \<not> \<U> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) \<longrightarrow> (\<forall>xa\<in>- lvars (\<T> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s))). \<unrhd>\<^sub>l\<^sub>b (lt dir) (\<langle>\<V> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s))\<rangle> xa) (LB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa) \<and> \<unlhd>\<^sub>u\<^sub>b (lt dir) (\<langle>\<V> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s))\<rangle> xa) (UB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa))
 2. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<notin> lvars (\<T> s); lt dir c (\<langle>\<V> s\<rangle> x); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> \<not> \<U> (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) \<longrightarrow> (\<forall>xa\<in>- lvars (\<T> (update x c (update\<B>\<I> (UBI_upd dir) i x c s))). \<unrhd>\<^sub>l\<^sub>b (lt dir) (\<langle>\<V> (update x c (update\<B>\<I> (UBI_upd dir) i x c s))\<rangle> xa) (LB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa) \<and> \<unlhd>\<^sub>u\<^sub>b (lt dir) (\<langle>\<V> (update x c (update\<B>\<I> (UBI_upd dir) i x c s))\<rangle> xa) (UB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa))
 3. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<in> lvars (\<T> s); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> \<not> \<U> (update\<B>\<I> (UBI_upd dir) i x c s) \<longrightarrow> (\<forall>xa\<in>- lvars (\<T> (update\<B>\<I> (UBI_upd dir) i x c s)). \<unrhd>\<^sub>l\<^sub>b (lt dir) (\<langle>\<V> (update\<B>\<I> (UBI_upd dir) i x c s)\<rangle> xa) (LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa) \<and> \<unlhd>\<^sub>u\<^sub>b (lt dir) (\<langle>\<V> (update\<B>\<I> (UBI_upd dir) i x c s)\<rangle> xa) (UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa))
 4. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x); \<not> lt dir c (\<langle>\<V> s\<rangle> x)\<rbrakk> \<Longrightarrow> \<not> \<U> (update\<B>\<I> (UBI_upd dir) i x c s) \<longrightarrow> (\<forall>xa\<in>- lvars (\<T> (update\<B>\<I> (UBI_upd dir) i x c s)). \<unrhd>\<^sub>l\<^sub>b (lt dir) (\<langle>\<V> (update\<B>\<I> (UBI_upd dir) i x c s)\<rangle> xa) (LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa) \<and> \<unlhd>\<^sub>u\<^sub>b (lt dir) (\<langle>\<V> (update\<B>\<I> (UBI_upd dir) i x c s)\<rangle> xa) (UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa))
 5. \<And>s. (\<not> \<U> s \<longrightarrow> \<langle>\<V> s\<rangle> \<Turnstile>\<^sub>b \<B> s \<parallel> - lvars (\<T> s)) = (\<not> \<U> s \<longrightarrow> (\<forall>x\<in>- lvars (\<T> s). \<unrhd>\<^sub>l\<^sub>b (\<lambda>x y. y < x) (\<langle>\<V> s\<rangle> x) (\<B>\<^sub>u s x) \<and> \<unlhd>\<^sub>u\<^sub>b (\<lambda>x y. y < x) (\<langle>\<V> s\<rangle> x) (\<B>\<^sub>l s x)))
 6. \<And>s. (\<not> \<U> s \<longrightarrow> \<langle>\<V> s\<rangle> \<Turnstile>\<^sub>b \<B> s \<parallel> - lvars (\<T> s)) = (\<not> \<U> s \<longrightarrow> (\<forall>x\<in>- lvars (\<T> s). \<unrhd>\<^sub>l\<^sub>b (<) (\<langle>\<V> s\<rangle> x) (\<B>\<^sub>l s x) \<and> \<unlhd>\<^sub>u\<^sub>b (<) (\<langle>\<V> s\<rangle> x) (\<B>\<^sub>u s x)))
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (6 subgoals):
 1. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> \<not> \<U> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) \<longrightarrow> (\<forall>xa\<in>- lvars (\<T> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s))). \<unrhd>\<^sub>l\<^sub>b (lt dir) (\<langle>\<V> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s))\<rangle> xa) (LB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa) \<and> \<unlhd>\<^sub>u\<^sub>b (lt dir) (\<langle>\<V> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s))\<rangle> xa) (UB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa))
 2. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<notin> lvars (\<T> s); lt dir c (\<langle>\<V> s\<rangle> x); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> \<not> \<U> (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) \<longrightarrow> (\<forall>xa\<in>- lvars (\<T> (update x c (update\<B>\<I> (UBI_upd dir) i x c s))). \<unrhd>\<^sub>l\<^sub>b (lt dir) (\<langle>\<V> (update x c (update\<B>\<I> (UBI_upd dir) i x c s))\<rangle> xa) (LB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa) \<and> \<unlhd>\<^sub>u\<^sub>b (lt dir) (\<langle>\<V> (update x c (update\<B>\<I> (UBI_upd dir) i x c s))\<rangle> xa) (UB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa))
 3. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<in> lvars (\<T> s); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> \<not> \<U> (update\<B>\<I> (UBI_upd dir) i x c s) \<longrightarrow> (\<forall>xa\<in>- lvars (\<T> (update\<B>\<I> (UBI_upd dir) i x c s)). \<unrhd>\<^sub>l\<^sub>b (lt dir) (\<langle>\<V> (update\<B>\<I> (UBI_upd dir) i x c s)\<rangle> xa) (LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa) \<and> \<unlhd>\<^sub>u\<^sub>b (lt dir) (\<langle>\<V> (update\<B>\<I> (UBI_upd dir) i x c s)\<rangle> xa) (UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa))
 4. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x); \<not> lt dir c (\<langle>\<V> s\<rangle> x)\<rbrakk> \<Longrightarrow> \<not> \<U> (update\<B>\<I> (UBI_upd dir) i x c s) \<longrightarrow> (\<forall>xa\<in>- lvars (\<T> (update\<B>\<I> (UBI_upd dir) i x c s)). \<unrhd>\<^sub>l\<^sub>b (lt dir) (\<langle>\<V> (update\<B>\<I> (UBI_upd dir) i x c s)\<rangle> xa) (LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa) \<and> \<unlhd>\<^sub>u\<^sub>b (lt dir) (\<langle>\<V> (update\<B>\<I> (UBI_upd dir) i x c s)\<rangle> xa) (UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa))
 5. \<And>s. (\<not> \<U> s \<longrightarrow> \<langle>\<V> s\<rangle> \<Turnstile>\<^sub>b \<B> s \<parallel> - lvars (\<T> s)) = (\<not> \<U> s \<longrightarrow> (\<forall>x\<in>- lvars (\<T> s). \<unrhd>\<^sub>l\<^sub>b (\<lambda>x y. y < x) (\<langle>\<V> s\<rangle> x) (\<B>\<^sub>u s x) \<and> \<unlhd>\<^sub>u\<^sub>b (\<lambda>x y. y < x) (\<langle>\<V> s\<rangle> x) (\<B>\<^sub>l s x)))
 6. \<And>s. (\<not> \<U> s \<longrightarrow> \<langle>\<V> s\<rangle> \<Turnstile>\<^sub>b \<B> s \<parallel> - lvars (\<T> s)) = (\<not> \<U> s \<longrightarrow> (\<forall>x\<in>- lvars (\<T> s). \<unrhd>\<^sub>l\<^sub>b (<) (\<langle>\<V> s\<rangle> x) (\<B>\<^sub>l s x) \<and> \<unlhd>\<^sub>u\<^sub>b (<) (\<langle>\<V> s\<rangle> x) (\<B>\<^sub>u s x)))
[PROOF STEP]
fix x c and dir :: "('i,'a) Direction"
[PROOF STATE]
proof (state)
goal (6 subgoals):
 1. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> \<not> \<U> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) \<longrightarrow> (\<forall>xa\<in>- lvars (\<T> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s))). \<unrhd>\<^sub>l\<^sub>b (lt dir) (\<langle>\<V> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s))\<rangle> xa) (LB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa) \<and> \<unlhd>\<^sub>u\<^sub>b (lt dir) (\<langle>\<V> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s))\<rangle> xa) (UB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa))
 2. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<notin> lvars (\<T> s); lt dir c (\<langle>\<V> s\<rangle> x); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> \<not> \<U> (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) \<longrightarrow> (\<forall>xa\<in>- lvars (\<T> (update x c (update\<B>\<I> (UBI_upd dir) i x c s))). \<unrhd>\<^sub>l\<^sub>b (lt dir) (\<langle>\<V> (update x c (update\<B>\<I> (UBI_upd dir) i x c s))\<rangle> xa) (LB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa) \<and> \<unlhd>\<^sub>u\<^sub>b (lt dir) (\<langle>\<V> (update x c (update\<B>\<I> (UBI_upd dir) i x c s))\<rangle> xa) (UB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa))
 3. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<in> lvars (\<T> s); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> \<not> \<U> (update\<B>\<I> (UBI_upd dir) i x c s) \<longrightarrow> (\<forall>xa\<in>- lvars (\<T> (update\<B>\<I> (UBI_upd dir) i x c s)). \<unrhd>\<^sub>l\<^sub>b (lt dir) (\<langle>\<V> (update\<B>\<I> (UBI_upd dir) i x c s)\<rangle> xa) (LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa) \<and> \<unlhd>\<^sub>u\<^sub>b (lt dir) (\<langle>\<V> (update\<B>\<I> (UBI_upd dir) i x c s)\<rangle> xa) (UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa))
 4. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x); \<not> lt dir c (\<langle>\<V> s\<rangle> x)\<rbrakk> \<Longrightarrow> \<not> \<U> (update\<B>\<I> (UBI_upd dir) i x c s) \<longrightarrow> (\<forall>xa\<in>- lvars (\<T> (update\<B>\<I> (UBI_upd dir) i x c s)). \<unrhd>\<^sub>l\<^sub>b (lt dir) (\<langle>\<V> (update\<B>\<I> (UBI_upd dir) i x c s)\<rangle> xa) (LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa) \<and> \<unlhd>\<^sub>u\<^sub>b (lt dir) (\<langle>\<V> (update\<B>\<I> (UBI_upd dir) i x c s)\<rangle> xa) (UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa))
 5. \<And>s. (\<not> \<U> s \<longrightarrow> \<langle>\<V> s\<rangle> \<Turnstile>\<^sub>b \<B> s \<parallel> - lvars (\<T> s)) = (\<not> \<U> s \<longrightarrow> (\<forall>x\<in>- lvars (\<T> s). \<unrhd>\<^sub>l\<^sub>b (\<lambda>x y. y < x) (\<langle>\<V> s\<rangle> x) (\<B>\<^sub>u s x) \<and> \<unlhd>\<^sub>u\<^sub>b (\<lambda>x y. y < x) (\<langle>\<V> s\<rangle> x) (\<B>\<^sub>l s x)))
 6. \<And>s. (\<not> \<U> s \<longrightarrow> \<langle>\<V> s\<rangle> \<Turnstile>\<^sub>b \<B> s \<parallel> - lvars (\<T> s)) = (\<not> \<U> s \<longrightarrow> (\<forall>x\<in>- lvars (\<T> s). \<unrhd>\<^sub>l\<^sub>b (<) (\<langle>\<V> s\<rangle> x) (\<B>\<^sub>l s x) \<and> \<unlhd>\<^sub>u\<^sub>b (<) (\<langle>\<V> s\<rangle> x) (\<B>\<^sub>u s x)))
[PROOF STEP]
let ?s' = "update\<B>\<I> (UBI_upd dir) i x c s"
[PROOF STATE]
proof (state)
goal (6 subgoals):
 1. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> \<not> \<U> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) \<longrightarrow> (\<forall>xa\<in>- lvars (\<T> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s))). \<unrhd>\<^sub>l\<^sub>b (lt dir) (\<langle>\<V> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s))\<rangle> xa) (LB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa) \<and> \<unlhd>\<^sub>u\<^sub>b (lt dir) (\<langle>\<V> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s))\<rangle> xa) (UB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa))
 2. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<notin> lvars (\<T> s); lt dir c (\<langle>\<V> s\<rangle> x); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> \<not> \<U> (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) \<longrightarrow> (\<forall>xa\<in>- lvars (\<T> (update x c (update\<B>\<I> (UBI_upd dir) i x c s))). \<unrhd>\<^sub>l\<^sub>b (lt dir) (\<langle>\<V> (update x c (update\<B>\<I> (UBI_upd dir) i x c s))\<rangle> xa) (LB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa) \<and> \<unlhd>\<^sub>u\<^sub>b (lt dir) (\<langle>\<V> (update x c (update\<B>\<I> (UBI_upd dir) i x c s))\<rangle> xa) (UB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa))
 3. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<in> lvars (\<T> s); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> \<not> \<U> (update\<B>\<I> (UBI_upd dir) i x c s) \<longrightarrow> (\<forall>xa\<in>- lvars (\<T> (update\<B>\<I> (UBI_upd dir) i x c s)). \<unrhd>\<^sub>l\<^sub>b (lt dir) (\<langle>\<V> (update\<B>\<I> (UBI_upd dir) i x c s)\<rangle> xa) (LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa) \<and> \<unlhd>\<^sub>u\<^sub>b (lt dir) (\<langle>\<V> (update\<B>\<I> (UBI_upd dir) i x c s)\<rangle> xa) (UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa))
 4. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x); \<not> lt dir c (\<langle>\<V> s\<rangle> x)\<rbrakk> \<Longrightarrow> \<not> \<U> (update\<B>\<I> (UBI_upd dir) i x c s) \<longrightarrow> (\<forall>xa\<in>- lvars (\<T> (update\<B>\<I> (UBI_upd dir) i x c s)). \<unrhd>\<^sub>l\<^sub>b (lt dir) (\<langle>\<V> (update\<B>\<I> (UBI_upd dir) i x c s)\<rangle> xa) (LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa) \<and> \<unlhd>\<^sub>u\<^sub>b (lt dir) (\<langle>\<V> (update\<B>\<I> (UBI_upd dir) i x c s)\<rangle> xa) (UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa))
 5. \<And>s. (\<not> \<U> s \<longrightarrow> \<langle>\<V> s\<rangle> \<Turnstile>\<^sub>b \<B> s \<parallel> - lvars (\<T> s)) = (\<not> \<U> s \<longrightarrow> (\<forall>x\<in>- lvars (\<T> s). \<unrhd>\<^sub>l\<^sub>b (\<lambda>x y. y < x) (\<langle>\<V> s\<rangle> x) (\<B>\<^sub>u s x) \<and> \<unlhd>\<^sub>u\<^sub>b (\<lambda>x y. y < x) (\<langle>\<V> s\<rangle> x) (\<B>\<^sub>l s x)))
 6. \<And>s. (\<not> \<U> s \<longrightarrow> \<langle>\<V> s\<rangle> \<Turnstile>\<^sub>b \<B> s \<parallel> - lvars (\<T> s)) = (\<not> \<U> s \<longrightarrow> (\<forall>x\<in>- lvars (\<T> s). \<unrhd>\<^sub>l\<^sub>b (<) (\<langle>\<V> s\<rangle> x) (\<B>\<^sub>l s x) \<and> \<unlhd>\<^sub>u\<^sub>b (<) (\<langle>\<V> s\<rangle> x) (\<B>\<^sub>u s x)))
[PROOF STEP]
assume "x \<in> lvars (\<T> s)" "dir = Positive \<or> dir = Negative"
[PROOF STATE]
proof (state)
this:
x \<in> lvars (\<T> s)
dir = Positive \<or> dir = Negative

goal (6 subgoals):
 1. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> \<not> \<U> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) \<longrightarrow> (\<forall>xa\<in>- lvars (\<T> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s))). \<unrhd>\<^sub>l\<^sub>b (lt dir) (\<langle>\<V> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s))\<rangle> xa) (LB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa) \<and> \<unlhd>\<^sub>u\<^sub>b (lt dir) (\<langle>\<V> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s))\<rangle> xa) (UB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa))
 2. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<notin> lvars (\<T> s); lt dir c (\<langle>\<V> s\<rangle> x); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> \<not> \<U> (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) \<longrightarrow> (\<forall>xa\<in>- lvars (\<T> (update x c (update\<B>\<I> (UBI_upd dir) i x c s))). \<unrhd>\<^sub>l\<^sub>b (lt dir) (\<langle>\<V> (update x c (update\<B>\<I> (UBI_upd dir) i x c s))\<rangle> xa) (LB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa) \<and> \<unlhd>\<^sub>u\<^sub>b (lt dir) (\<langle>\<V> (update x c (update\<B>\<I> (UBI_upd dir) i x c s))\<rangle> xa) (UB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa))
 3. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<in> lvars (\<T> s); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> \<not> \<U> (update\<B>\<I> (UBI_upd dir) i x c s) \<longrightarrow> (\<forall>xa\<in>- lvars (\<T> (update\<B>\<I> (UBI_upd dir) i x c s)). \<unrhd>\<^sub>l\<^sub>b (lt dir) (\<langle>\<V> (update\<B>\<I> (UBI_upd dir) i x c s)\<rangle> xa) (LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa) \<and> \<unlhd>\<^sub>u\<^sub>b (lt dir) (\<langle>\<V> (update\<B>\<I> (UBI_upd dir) i x c s)\<rangle> xa) (UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa))
 4. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x); \<not> lt dir c (\<langle>\<V> s\<rangle> x)\<rbrakk> \<Longrightarrow> \<not> \<U> (update\<B>\<I> (UBI_upd dir) i x c s) \<longrightarrow> (\<forall>xa\<in>- lvars (\<T> (update\<B>\<I> (UBI_upd dir) i x c s)). \<unrhd>\<^sub>l\<^sub>b (lt dir) (\<langle>\<V> (update\<B>\<I> (UBI_upd dir) i x c s)\<rangle> xa) (LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa) \<and> \<unlhd>\<^sub>u\<^sub>b (lt dir) (\<langle>\<V> (update\<B>\<I> (UBI_upd dir) i x c s)\<rangle> xa) (UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa))
 5. \<And>s. (\<not> \<U> s \<longrightarrow> \<langle>\<V> s\<rangle> \<Turnstile>\<^sub>b \<B> s \<parallel> - lvars (\<T> s)) = (\<not> \<U> s \<longrightarrow> (\<forall>x\<in>- lvars (\<T> s). \<unrhd>\<^sub>l\<^sub>b (\<lambda>x y. y < x) (\<langle>\<V> s\<rangle> x) (\<B>\<^sub>u s x) \<and> \<unlhd>\<^sub>u\<^sub>b (\<lambda>x y. y < x) (\<langle>\<V> s\<rangle> x) (\<B>\<^sub>l s x)))
 6. \<And>s. (\<not> \<U> s \<longrightarrow> \<langle>\<V> s\<rangle> \<Turnstile>\<^sub>b \<B> s \<parallel> - lvars (\<T> s)) = (\<not> \<U> s \<longrightarrow> (\<forall>x\<in>- lvars (\<T> s). \<unrhd>\<^sub>l\<^sub>b (<) (\<langle>\<V> s\<rangle> x) (\<B>\<^sub>l s x) \<and> \<unlhd>\<^sub>u\<^sub>b (<) (\<langle>\<V> s\<rangle> x) (\<B>\<^sub>u s x)))
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
x \<in> lvars (\<T> s)
dir = Positive \<or> dir = Negative
[PROOF STEP]
have "?P ?s'"
[PROOF STATE]
proof (prove)
using this:
x \<in> lvars (\<T> s)
dir = Positive \<or> dir = Negative

goal (1 subgoal):
 1. \<not> \<U> (update\<B>\<I> (UBI_upd dir) i x c s) \<longrightarrow> \<langle>\<V> (update\<B>\<I> (UBI_upd dir) i x c s)\<rangle> \<Turnstile>\<^sub>b \<B> (update\<B>\<I> (UBI_upd dir) i x c s) \<parallel> - lvars (\<T> (update\<B>\<I> (UBI_upd dir) i x c s))
[PROOF STEP]
using \<open>\<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s\<close>
[PROOF STATE]
proof (prove)
using this:
x \<in> lvars (\<T> s)
dir = Positive \<or> dir = Negative
\<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s

goal (1 subgoal):
 1. \<not> \<U> (update\<B>\<I> (UBI_upd dir) i x c s) \<longrightarrow> \<langle>\<V> (update\<B>\<I> (UBI_upd dir) i x c s)\<rangle> \<Turnstile>\<^sub>b \<B> (update\<B>\<I> (UBI_upd dir) i x c s) \<parallel> - lvars (\<T> (update\<B>\<I> (UBI_upd dir) i x c s))
[PROOF STEP]
by (auto simp add: satisfies_bounds_set.simps curr_val_satisfies_no_lhs_def
            boundsl_def boundsu_def indexl_def indexu_def)
[PROOF STATE]
proof (state)
this:
\<not> \<U> (update\<B>\<I> (UBI_upd dir) i x c s) \<longrightarrow> \<langle>\<V> (update\<B>\<I> (UBI_upd dir) i x c s)\<rangle> \<Turnstile>\<^sub>b \<B> (update\<B>\<I> (UBI_upd dir) i x c s) \<parallel> - lvars (\<T> (update\<B>\<I> (UBI_upd dir) i x c s))

goal (6 subgoals):
 1. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> \<not> \<U> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) \<longrightarrow> (\<forall>xa\<in>- lvars (\<T> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s))). \<unrhd>\<^sub>l\<^sub>b (lt dir) (\<langle>\<V> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s))\<rangle> xa) (LB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa) \<and> \<unlhd>\<^sub>u\<^sub>b (lt dir) (\<langle>\<V> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s))\<rangle> xa) (UB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa))
 2. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<notin> lvars (\<T> s); lt dir c (\<langle>\<V> s\<rangle> x); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> \<not> \<U> (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) \<longrightarrow> (\<forall>xa\<in>- lvars (\<T> (update x c (update\<B>\<I> (UBI_upd dir) i x c s))). \<unrhd>\<^sub>l\<^sub>b (lt dir) (\<langle>\<V> (update x c (update\<B>\<I> (UBI_upd dir) i x c s))\<rangle> xa) (LB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa) \<and> \<unlhd>\<^sub>u\<^sub>b (lt dir) (\<langle>\<V> (update x c (update\<B>\<I> (UBI_upd dir) i x c s))\<rangle> xa) (UB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa))
 3. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<in> lvars (\<T> s); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> \<not> \<U> (update\<B>\<I> (UBI_upd dir) i x c s) \<longrightarrow> (\<forall>xa\<in>- lvars (\<T> (update\<B>\<I> (UBI_upd dir) i x c s)). \<unrhd>\<^sub>l\<^sub>b (lt dir) (\<langle>\<V> (update\<B>\<I> (UBI_upd dir) i x c s)\<rangle> xa) (LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa) \<and> \<unlhd>\<^sub>u\<^sub>b (lt dir) (\<langle>\<V> (update\<B>\<I> (UBI_upd dir) i x c s)\<rangle> xa) (UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa))
 4. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x); \<not> lt dir c (\<langle>\<V> s\<rangle> x)\<rbrakk> \<Longrightarrow> \<not> \<U> (update\<B>\<I> (UBI_upd dir) i x c s) \<longrightarrow> (\<forall>xa\<in>- lvars (\<T> (update\<B>\<I> (UBI_upd dir) i x c s)). \<unrhd>\<^sub>l\<^sub>b (lt dir) (\<langle>\<V> (update\<B>\<I> (UBI_upd dir) i x c s)\<rangle> xa) (LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa) \<and> \<unlhd>\<^sub>u\<^sub>b (lt dir) (\<langle>\<V> (update\<B>\<I> (UBI_upd dir) i x c s)\<rangle> xa) (UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa))
 5. \<And>s. (\<not> \<U> s \<longrightarrow> \<langle>\<V> s\<rangle> \<Turnstile>\<^sub>b \<B> s \<parallel> - lvars (\<T> s)) = (\<not> \<U> s \<longrightarrow> (\<forall>x\<in>- lvars (\<T> s). \<unrhd>\<^sub>l\<^sub>b (\<lambda>x y. y < x) (\<langle>\<V> s\<rangle> x) (\<B>\<^sub>u s x) \<and> \<unlhd>\<^sub>u\<^sub>b (\<lambda>x y. y < x) (\<langle>\<V> s\<rangle> x) (\<B>\<^sub>l s x)))
 6. \<And>s. (\<not> \<U> s \<longrightarrow> \<langle>\<V> s\<rangle> \<Turnstile>\<^sub>b \<B> s \<parallel> - lvars (\<T> s)) = (\<not> \<U> s \<longrightarrow> (\<forall>x\<in>- lvars (\<T> s). \<unrhd>\<^sub>l\<^sub>b (<) (\<langle>\<V> s\<rangle> x) (\<B>\<^sub>l s x) \<and> \<unlhd>\<^sub>u\<^sub>b (<) (\<langle>\<V> s\<rangle> x) (\<B>\<^sub>u s x)))
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
\<not> \<U> (update\<B>\<I> (UBI_upd dir) i x c s) \<longrightarrow> \<langle>\<V> (update\<B>\<I> (UBI_upd dir) i x c s)\<rangle> \<Turnstile>\<^sub>b \<B> (update\<B>\<I> (UBI_upd dir) i x c s) \<parallel> - lvars (\<T> (update\<B>\<I> (UBI_upd dir) i x c s))
[PROOF STEP]
show "?P'' dir ?s'"
[PROOF STATE]
proof (prove)
using this:
\<not> \<U> (update\<B>\<I> (UBI_upd dir) i x c s) \<longrightarrow> \<langle>\<V> (update\<B>\<I> (UBI_upd dir) i x c s)\<rangle> \<Turnstile>\<^sub>b \<B> (update\<B>\<I> (UBI_upd dir) i x c s) \<parallel> - lvars (\<T> (update\<B>\<I> (UBI_upd dir) i x c s))

goal (1 subgoal):
 1. \<not> \<U> (update\<B>\<I> (UBI_upd dir) i x c s) \<longrightarrow> (\<forall>xa\<in>- lvars (\<T> (update\<B>\<I> (UBI_upd dir) i x c s)). \<unrhd>\<^sub>l\<^sub>b (lt dir) (\<langle>\<V> (update\<B>\<I> (UBI_upd dir) i x c s)\<rangle> xa) (LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa) \<and> \<unlhd>\<^sub>u\<^sub>b (lt dir) (\<langle>\<V> (update\<B>\<I> (UBI_upd dir) i x c s)\<rangle> xa) (UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa))
[PROOF STEP]
using x[of ?s'] xx[of ?s'] \<open>dir = Positive \<or> dir = Negative\<close>
[PROOF STATE]
proof (prove)
using this:
\<not> \<U> (update\<B>\<I> (UBI_upd dir) i x c s) \<longrightarrow> \<langle>\<V> (update\<B>\<I> (UBI_upd dir) i x c s)\<rangle> \<Turnstile>\<^sub>b \<B> (update\<B>\<I> (UBI_upd dir) i x c s) \<parallel> - lvars (\<T> (update\<B>\<I> (UBI_upd dir) i x c s))
(\<not> \<U> (update\<B>\<I> (UBI_upd dir) i x c s) \<longrightarrow> \<langle>\<V> (update\<B>\<I> (UBI_upd dir) i x c s)\<rangle> \<Turnstile>\<^sub>b \<B> (update\<B>\<I> (UBI_upd dir) i x c s) \<parallel> - lvars (\<T> (update\<B>\<I> (UBI_upd dir) i x c s))) = (\<not> \<U> (update\<B>\<I> (UBI_upd dir) i x c s) \<longrightarrow> (\<forall>xa\<in>- lvars (\<T> (update\<B>\<I> (UBI_upd dir) i x c s)). \<unrhd>\<^sub>l\<^sub>b (<) (\<langle>\<V> (update\<B>\<I> (UBI_upd dir) i x c s)\<rangle> xa) (\<B>\<^sub>l (update\<B>\<I> (UBI_upd dir) i x c s) xa) \<and> \<unlhd>\<^sub>u\<^sub>b (<) (\<langle>\<V> (update\<B>\<I> (UBI_upd dir) i x c s)\<rangle> xa) (\<B>\<^sub>u (update\<B>\<I> (UBI_upd dir) i x c s) xa)))
(\<not> \<U> (update\<B>\<I> (UBI_upd dir) i x c s) \<longrightarrow> \<langle>\<V> (update\<B>\<I> (UBI_upd dir) i x c s)\<rangle> \<Turnstile>\<^sub>b \<B> (update\<B>\<I> (UBI_upd dir) i x c s) \<parallel> - lvars (\<T> (update\<B>\<I> (UBI_upd dir) i x c s))) = (\<not> \<U> (update\<B>\<I> (UBI_upd dir) i x c s) \<longrightarrow> (\<forall>xa\<in>- lvars (\<T> (update\<B>\<I> (UBI_upd dir) i x c s)). \<unrhd>\<^sub>l\<^sub>b (\<lambda>x y. y < x) (\<langle>\<V> (update\<B>\<I> (UBI_upd dir) i x c s)\<rangle> xa) (\<B>\<^sub>u (update\<B>\<I> (UBI_upd dir) i x c s) xa) \<and> \<unlhd>\<^sub>u\<^sub>b (\<lambda>x y. y < x) (\<langle>\<V> (update\<B>\<I> (UBI_upd dir) i x c s)\<rangle> xa) (\<B>\<^sub>l (update\<B>\<I> (UBI_upd dir) i x c s) xa)))
dir = Positive \<or> dir = Negative

goal (1 subgoal):
 1. \<not> \<U> (update\<B>\<I> (UBI_upd dir) i x c s) \<longrightarrow> (\<forall>xa\<in>- lvars (\<T> (update\<B>\<I> (UBI_upd dir) i x c s)). \<unrhd>\<^sub>l\<^sub>b (lt dir) (\<langle>\<V> (update\<B>\<I> (UBI_upd dir) i x c s)\<rangle> xa) (LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa) \<and> \<unlhd>\<^sub>u\<^sub>b (lt dir) (\<langle>\<V> (update\<B>\<I> (UBI_upd dir) i x c s)\<rangle> xa) (UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa))
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
\<not> \<U> (update\<B>\<I> (UBI_upd dir) i x c s) \<longrightarrow> (\<forall>xa\<in>- lvars (\<T> (update\<B>\<I> (UBI_upd dir) i x c s)). \<unrhd>\<^sub>l\<^sub>b (lt dir) (\<langle>\<V> (update\<B>\<I> (UBI_upd dir) i x c s)\<rangle> xa) (LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa) \<and> \<unlhd>\<^sub>u\<^sub>b (lt dir) (\<langle>\<V> (update\<B>\<I> (UBI_upd dir) i x c s)\<rangle> xa) (UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa))

goal (5 subgoals):
 1. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> \<not> \<U> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) \<longrightarrow> (\<forall>xa\<in>- lvars (\<T> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s))). \<unrhd>\<^sub>l\<^sub>b (lt dir) (\<langle>\<V> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s))\<rangle> xa) (LB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa) \<and> \<unlhd>\<^sub>u\<^sub>b (lt dir) (\<langle>\<V> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s))\<rangle> xa) (UB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa))
 2. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<notin> lvars (\<T> s); lt dir c (\<langle>\<V> s\<rangle> x); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> \<not> \<U> (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) \<longrightarrow> (\<forall>xa\<in>- lvars (\<T> (update x c (update\<B>\<I> (UBI_upd dir) i x c s))). \<unrhd>\<^sub>l\<^sub>b (lt dir) (\<langle>\<V> (update x c (update\<B>\<I> (UBI_upd dir) i x c s))\<rangle> xa) (LB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa) \<and> \<unlhd>\<^sub>u\<^sub>b (lt dir) (\<langle>\<V> (update x c (update\<B>\<I> (UBI_upd dir) i x c s))\<rangle> xa) (UB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa))
 3. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x); \<not> lt dir c (\<langle>\<V> s\<rangle> x)\<rbrakk> \<Longrightarrow> \<not> \<U> (update\<B>\<I> (UBI_upd dir) i x c s) \<longrightarrow> (\<forall>xa\<in>- lvars (\<T> (update\<B>\<I> (UBI_upd dir) i x c s)). \<unrhd>\<^sub>l\<^sub>b (lt dir) (\<langle>\<V> (update\<B>\<I> (UBI_upd dir) i x c s)\<rangle> xa) (LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa) \<and> \<unlhd>\<^sub>u\<^sub>b (lt dir) (\<langle>\<V> (update\<B>\<I> (UBI_upd dir) i x c s)\<rangle> xa) (UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa))
 4. \<And>s. (\<not> \<U> s \<longrightarrow> \<langle>\<V> s\<rangle> \<Turnstile>\<^sub>b \<B> s \<parallel> - lvars (\<T> s)) = (\<not> \<U> s \<longrightarrow> (\<forall>x\<in>- lvars (\<T> s). \<unrhd>\<^sub>l\<^sub>b (\<lambda>x y. y < x) (\<langle>\<V> s\<rangle> x) (\<B>\<^sub>u s x) \<and> \<unlhd>\<^sub>u\<^sub>b (\<lambda>x y. y < x) (\<langle>\<V> s\<rangle> x) (\<B>\<^sub>l s x)))
 5. \<And>s. (\<not> \<U> s \<longrightarrow> \<langle>\<V> s\<rangle> \<Turnstile>\<^sub>b \<B> s \<parallel> - lvars (\<T> s)) = (\<not> \<U> s \<longrightarrow> (\<forall>x\<in>- lvars (\<T> s). \<unrhd>\<^sub>l\<^sub>b (<) (\<langle>\<V> s\<rangle> x) (\<B>\<^sub>l s x) \<and> \<unlhd>\<^sub>u\<^sub>b (<) (\<langle>\<V> s\<rangle> x) (\<B>\<^sub>u s x)))
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (5 subgoals):
 1. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> \<not> \<U> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) \<longrightarrow> (\<forall>xa\<in>- lvars (\<T> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s))). \<unrhd>\<^sub>l\<^sub>b (lt dir) (\<langle>\<V> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s))\<rangle> xa) (LB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa) \<and> \<unlhd>\<^sub>u\<^sub>b (lt dir) (\<langle>\<V> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s))\<rangle> xa) (UB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa))
 2. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<notin> lvars (\<T> s); lt dir c (\<langle>\<V> s\<rangle> x); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> \<not> \<U> (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) \<longrightarrow> (\<forall>xa\<in>- lvars (\<T> (update x c (update\<B>\<I> (UBI_upd dir) i x c s))). \<unrhd>\<^sub>l\<^sub>b (lt dir) (\<langle>\<V> (update x c (update\<B>\<I> (UBI_upd dir) i x c s))\<rangle> xa) (LB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa) \<and> \<unlhd>\<^sub>u\<^sub>b (lt dir) (\<langle>\<V> (update x c (update\<B>\<I> (UBI_upd dir) i x c s))\<rangle> xa) (UB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa))
 3. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x); \<not> lt dir c (\<langle>\<V> s\<rangle> x)\<rbrakk> \<Longrightarrow> \<not> \<U> (update\<B>\<I> (UBI_upd dir) i x c s) \<longrightarrow> (\<forall>xa\<in>- lvars (\<T> (update\<B>\<I> (UBI_upd dir) i x c s)). \<unrhd>\<^sub>l\<^sub>b (lt dir) (\<langle>\<V> (update\<B>\<I> (UBI_upd dir) i x c s)\<rangle> xa) (LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa) \<and> \<unlhd>\<^sub>u\<^sub>b (lt dir) (\<langle>\<V> (update\<B>\<I> (UBI_upd dir) i x c s)\<rangle> xa) (UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa))
 4. \<And>s. (\<not> \<U> s \<longrightarrow> \<langle>\<V> s\<rangle> \<Turnstile>\<^sub>b \<B> s \<parallel> - lvars (\<T> s)) = (\<not> \<U> s \<longrightarrow> (\<forall>x\<in>- lvars (\<T> s). \<unrhd>\<^sub>l\<^sub>b (\<lambda>x y. y < x) (\<langle>\<V> s\<rangle> x) (\<B>\<^sub>u s x) \<and> \<unlhd>\<^sub>u\<^sub>b (\<lambda>x y. y < x) (\<langle>\<V> s\<rangle> x) (\<B>\<^sub>l s x)))
 5. \<And>s. (\<not> \<U> s \<longrightarrow> \<langle>\<V> s\<rangle> \<Turnstile>\<^sub>b \<B> s \<parallel> - lvars (\<T> s)) = (\<not> \<U> s \<longrightarrow> (\<forall>x\<in>- lvars (\<T> s). \<unrhd>\<^sub>l\<^sub>b (<) (\<langle>\<V> s\<rangle> x) (\<B>\<^sub>l s x) \<and> \<unlhd>\<^sub>u\<^sub>b (<) (\<langle>\<V> s\<rangle> x) (\<B>\<^sub>u s x)))
[PROOF STEP]
fix c x and dir :: "('i,'a) Direction"
[PROOF STATE]
proof (state)
goal (5 subgoals):
 1. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> \<not> \<U> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) \<longrightarrow> (\<forall>xa\<in>- lvars (\<T> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s))). \<unrhd>\<^sub>l\<^sub>b (lt dir) (\<langle>\<V> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s))\<rangle> xa) (LB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa) \<and> \<unlhd>\<^sub>u\<^sub>b (lt dir) (\<langle>\<V> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s))\<rangle> xa) (UB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa))
 2. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<notin> lvars (\<T> s); lt dir c (\<langle>\<V> s\<rangle> x); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> \<not> \<U> (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) \<longrightarrow> (\<forall>xa\<in>- lvars (\<T> (update x c (update\<B>\<I> (UBI_upd dir) i x c s))). \<unrhd>\<^sub>l\<^sub>b (lt dir) (\<langle>\<V> (update x c (update\<B>\<I> (UBI_upd dir) i x c s))\<rangle> xa) (LB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa) \<and> \<unlhd>\<^sub>u\<^sub>b (lt dir) (\<langle>\<V> (update x c (update\<B>\<I> (UBI_upd dir) i x c s))\<rangle> xa) (UB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa))
 3. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x); \<not> lt dir c (\<langle>\<V> s\<rangle> x)\<rbrakk> \<Longrightarrow> \<not> \<U> (update\<B>\<I> (UBI_upd dir) i x c s) \<longrightarrow> (\<forall>xa\<in>- lvars (\<T> (update\<B>\<I> (UBI_upd dir) i x c s)). \<unrhd>\<^sub>l\<^sub>b (lt dir) (\<langle>\<V> (update\<B>\<I> (UBI_upd dir) i x c s)\<rangle> xa) (LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa) \<and> \<unlhd>\<^sub>u\<^sub>b (lt dir) (\<langle>\<V> (update\<B>\<I> (UBI_upd dir) i x c s)\<rangle> xa) (UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa))
 4. \<And>s. (\<not> \<U> s \<longrightarrow> \<langle>\<V> s\<rangle> \<Turnstile>\<^sub>b \<B> s \<parallel> - lvars (\<T> s)) = (\<not> \<U> s \<longrightarrow> (\<forall>x\<in>- lvars (\<T> s). \<unrhd>\<^sub>l\<^sub>b (\<lambda>x y. y < x) (\<langle>\<V> s\<rangle> x) (\<B>\<^sub>u s x) \<and> \<unlhd>\<^sub>u\<^sub>b (\<lambda>x y. y < x) (\<langle>\<V> s\<rangle> x) (\<B>\<^sub>l s x)))
 5. \<And>s. (\<not> \<U> s \<longrightarrow> \<langle>\<V> s\<rangle> \<Turnstile>\<^sub>b \<B> s \<parallel> - lvars (\<T> s)) = (\<not> \<U> s \<longrightarrow> (\<forall>x\<in>- lvars (\<T> s). \<unrhd>\<^sub>l\<^sub>b (<) (\<langle>\<V> s\<rangle> x) (\<B>\<^sub>l s x) \<and> \<unlhd>\<^sub>u\<^sub>b (<) (\<langle>\<V> s\<rangle> x) (\<B>\<^sub>u s x)))
[PROOF STEP]
let ?s' = "update\<B>\<I> (UBI_upd dir) i x c s"
[PROOF STATE]
proof (state)
goal (5 subgoals):
 1. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> \<not> \<U> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) \<longrightarrow> (\<forall>xa\<in>- lvars (\<T> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s))). \<unrhd>\<^sub>l\<^sub>b (lt dir) (\<langle>\<V> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s))\<rangle> xa) (LB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa) \<and> \<unlhd>\<^sub>u\<^sub>b (lt dir) (\<langle>\<V> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s))\<rangle> xa) (UB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa))
 2. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<notin> lvars (\<T> s); lt dir c (\<langle>\<V> s\<rangle> x); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> \<not> \<U> (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) \<longrightarrow> (\<forall>xa\<in>- lvars (\<T> (update x c (update\<B>\<I> (UBI_upd dir) i x c s))). \<unrhd>\<^sub>l\<^sub>b (lt dir) (\<langle>\<V> (update x c (update\<B>\<I> (UBI_upd dir) i x c s))\<rangle> xa) (LB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa) \<and> \<unlhd>\<^sub>u\<^sub>b (lt dir) (\<langle>\<V> (update x c (update\<B>\<I> (UBI_upd dir) i x c s))\<rangle> xa) (UB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa))
 3. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x); \<not> lt dir c (\<langle>\<V> s\<rangle> x)\<rbrakk> \<Longrightarrow> \<not> \<U> (update\<B>\<I> (UBI_upd dir) i x c s) \<longrightarrow> (\<forall>xa\<in>- lvars (\<T> (update\<B>\<I> (UBI_upd dir) i x c s)). \<unrhd>\<^sub>l\<^sub>b (lt dir) (\<langle>\<V> (update\<B>\<I> (UBI_upd dir) i x c s)\<rangle> xa) (LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa) \<and> \<unlhd>\<^sub>u\<^sub>b (lt dir) (\<langle>\<V> (update\<B>\<I> (UBI_upd dir) i x c s)\<rangle> xa) (UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa))
 4. \<And>s. (\<not> \<U> s \<longrightarrow> \<langle>\<V> s\<rangle> \<Turnstile>\<^sub>b \<B> s \<parallel> - lvars (\<T> s)) = (\<not> \<U> s \<longrightarrow> (\<forall>x\<in>- lvars (\<T> s). \<unrhd>\<^sub>l\<^sub>b (\<lambda>x y. y < x) (\<langle>\<V> s\<rangle> x) (\<B>\<^sub>u s x) \<and> \<unlhd>\<^sub>u\<^sub>b (\<lambda>x y. y < x) (\<langle>\<V> s\<rangle> x) (\<B>\<^sub>l s x)))
 5. \<And>s. (\<not> \<U> s \<longrightarrow> \<langle>\<V> s\<rangle> \<Turnstile>\<^sub>b \<B> s \<parallel> - lvars (\<T> s)) = (\<not> \<U> s \<longrightarrow> (\<forall>x\<in>- lvars (\<T> s). \<unrhd>\<^sub>l\<^sub>b (<) (\<langle>\<V> s\<rangle> x) (\<B>\<^sub>l s x) \<and> \<unlhd>\<^sub>u\<^sub>b (<) (\<langle>\<V> s\<rangle> x) (\<B>\<^sub>u s x)))
[PROOF STEP]
assume "\<not> lt dir c (\<langle>\<V> s\<rangle> x)" "dir = Positive \<or> dir = Negative"
[PROOF STATE]
proof (state)
this:
\<not> lt dir c (\<langle>\<V> s\<rangle> x)
dir = Positive \<or> dir = Negative

goal (5 subgoals):
 1. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> \<not> \<U> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) \<longrightarrow> (\<forall>xa\<in>- lvars (\<T> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s))). \<unrhd>\<^sub>l\<^sub>b (lt dir) (\<langle>\<V> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s))\<rangle> xa) (LB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa) \<and> \<unlhd>\<^sub>u\<^sub>b (lt dir) (\<langle>\<V> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s))\<rangle> xa) (UB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa))
 2. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<notin> lvars (\<T> s); lt dir c (\<langle>\<V> s\<rangle> x); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> \<not> \<U> (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) \<longrightarrow> (\<forall>xa\<in>- lvars (\<T> (update x c (update\<B>\<I> (UBI_upd dir) i x c s))). \<unrhd>\<^sub>l\<^sub>b (lt dir) (\<langle>\<V> (update x c (update\<B>\<I> (UBI_upd dir) i x c s))\<rangle> xa) (LB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa) \<and> \<unlhd>\<^sub>u\<^sub>b (lt dir) (\<langle>\<V> (update x c (update\<B>\<I> (UBI_upd dir) i x c s))\<rangle> xa) (UB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa))
 3. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x); \<not> lt dir c (\<langle>\<V> s\<rangle> x)\<rbrakk> \<Longrightarrow> \<not> \<U> (update\<B>\<I> (UBI_upd dir) i x c s) \<longrightarrow> (\<forall>xa\<in>- lvars (\<T> (update\<B>\<I> (UBI_upd dir) i x c s)). \<unrhd>\<^sub>l\<^sub>b (lt dir) (\<langle>\<V> (update\<B>\<I> (UBI_upd dir) i x c s)\<rangle> xa) (LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa) \<and> \<unlhd>\<^sub>u\<^sub>b (lt dir) (\<langle>\<V> (update\<B>\<I> (UBI_upd dir) i x c s)\<rangle> xa) (UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa))
 4. \<And>s. (\<not> \<U> s \<longrightarrow> \<langle>\<V> s\<rangle> \<Turnstile>\<^sub>b \<B> s \<parallel> - lvars (\<T> s)) = (\<not> \<U> s \<longrightarrow> (\<forall>x\<in>- lvars (\<T> s). \<unrhd>\<^sub>l\<^sub>b (\<lambda>x y. y < x) (\<langle>\<V> s\<rangle> x) (\<B>\<^sub>u s x) \<and> \<unlhd>\<^sub>u\<^sub>b (\<lambda>x y. y < x) (\<langle>\<V> s\<rangle> x) (\<B>\<^sub>l s x)))
 5. \<And>s. (\<not> \<U> s \<longrightarrow> \<langle>\<V> s\<rangle> \<Turnstile>\<^sub>b \<B> s \<parallel> - lvars (\<T> s)) = (\<not> \<U> s \<longrightarrow> (\<forall>x\<in>- lvars (\<T> s). \<unrhd>\<^sub>l\<^sub>b (<) (\<langle>\<V> s\<rangle> x) (\<B>\<^sub>l s x) \<and> \<unlhd>\<^sub>u\<^sub>b (<) (\<langle>\<V> s\<rangle> x) (\<B>\<^sub>u s x)))
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
\<not> lt dir c (\<langle>\<V> s\<rangle> x)
dir = Positive \<or> dir = Negative
[PROOF STEP]
show "?P'' dir ?s'"
[PROOF STATE]
proof (prove)
using this:
\<not> lt dir c (\<langle>\<V> s\<rangle> x)
dir = Positive \<or> dir = Negative

goal (1 subgoal):
 1. \<not> \<U> (update\<B>\<I> (UBI_upd dir) i x c s) \<longrightarrow> (\<forall>xa\<in>- lvars (\<T> (update\<B>\<I> (UBI_upd dir) i x c s)). \<unrhd>\<^sub>l\<^sub>b (lt dir) (\<langle>\<V> (update\<B>\<I> (UBI_upd dir) i x c s)\<rangle> xa) (LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa) \<and> \<unlhd>\<^sub>u\<^sub>b (lt dir) (\<langle>\<V> (update\<B>\<I> (UBI_upd dir) i x c s)\<rangle> xa) (UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa))
[PROOF STEP]
using \<open>\<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s\<close>
[PROOF STATE]
proof (prove)
using this:
\<not> lt dir c (\<langle>\<V> s\<rangle> x)
dir = Positive \<or> dir = Negative
\<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s

goal (1 subgoal):
 1. \<not> \<U> (update\<B>\<I> (UBI_upd dir) i x c s) \<longrightarrow> (\<forall>xa\<in>- lvars (\<T> (update\<B>\<I> (UBI_upd dir) i x c s)). \<unrhd>\<^sub>l\<^sub>b (lt dir) (\<langle>\<V> (update\<B>\<I> (UBI_upd dir) i x c s)\<rangle> xa) (LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa) \<and> \<unlhd>\<^sub>u\<^sub>b (lt dir) (\<langle>\<V> (update\<B>\<I> (UBI_upd dir) i x c s)\<rangle> xa) (UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa))
[PROOF STEP]
by (auto simp add: satisfies_bounds_set.simps curr_val_satisfies_no_lhs_def
            simp: boundsl_def boundsu_def indexl_def indexu_def)
          (auto simp add: bound_compare_defs)
[PROOF STATE]
proof (state)
this:
\<not> \<U> (update\<B>\<I> (UBI_upd dir) i x c s) \<longrightarrow> (\<forall>xa\<in>- lvars (\<T> (update\<B>\<I> (UBI_upd dir) i x c s)). \<unrhd>\<^sub>l\<^sub>b (lt dir) (\<langle>\<V> (update\<B>\<I> (UBI_upd dir) i x c s)\<rangle> xa) (LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa) \<and> \<unlhd>\<^sub>u\<^sub>b (lt dir) (\<langle>\<V> (update\<B>\<I> (UBI_upd dir) i x c s)\<rangle> xa) (UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa))

goal (4 subgoals):
 1. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> \<not> \<U> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) \<longrightarrow> (\<forall>xa\<in>- lvars (\<T> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s))). \<unrhd>\<^sub>l\<^sub>b (lt dir) (\<langle>\<V> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s))\<rangle> xa) (LB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa) \<and> \<unlhd>\<^sub>u\<^sub>b (lt dir) (\<langle>\<V> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s))\<rangle> xa) (UB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa))
 2. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<notin> lvars (\<T> s); lt dir c (\<langle>\<V> s\<rangle> x); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> \<not> \<U> (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) \<longrightarrow> (\<forall>xa\<in>- lvars (\<T> (update x c (update\<B>\<I> (UBI_upd dir) i x c s))). \<unrhd>\<^sub>l\<^sub>b (lt dir) (\<langle>\<V> (update x c (update\<B>\<I> (UBI_upd dir) i x c s))\<rangle> xa) (LB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa) \<and> \<unlhd>\<^sub>u\<^sub>b (lt dir) (\<langle>\<V> (update x c (update\<B>\<I> (UBI_upd dir) i x c s))\<rangle> xa) (UB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa))
 3. \<And>s. (\<not> \<U> s \<longrightarrow> \<langle>\<V> s\<rangle> \<Turnstile>\<^sub>b \<B> s \<parallel> - lvars (\<T> s)) = (\<not> \<U> s \<longrightarrow> (\<forall>x\<in>- lvars (\<T> s). \<unrhd>\<^sub>l\<^sub>b (\<lambda>x y. y < x) (\<langle>\<V> s\<rangle> x) (\<B>\<^sub>u s x) \<and> \<unlhd>\<^sub>u\<^sub>b (\<lambda>x y. y < x) (\<langle>\<V> s\<rangle> x) (\<B>\<^sub>l s x)))
 4. \<And>s. (\<not> \<U> s \<longrightarrow> \<langle>\<V> s\<rangle> \<Turnstile>\<^sub>b \<B> s \<parallel> - lvars (\<T> s)) = (\<not> \<U> s \<longrightarrow> (\<forall>x\<in>- lvars (\<T> s). \<unrhd>\<^sub>l\<^sub>b (<) (\<langle>\<V> s\<rangle> x) (\<B>\<^sub>l s x) \<and> \<unlhd>\<^sub>u\<^sub>b (<) (\<langle>\<V> s\<rangle> x) (\<B>\<^sub>u s x)))
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (4 subgoals):
 1. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> \<not> \<U> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) \<longrightarrow> (\<forall>xa\<in>- lvars (\<T> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s))). \<unrhd>\<^sub>l\<^sub>b (lt dir) (\<langle>\<V> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s))\<rangle> xa) (LB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa) \<and> \<unlhd>\<^sub>u\<^sub>b (lt dir) (\<langle>\<V> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s))\<rangle> xa) (UB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa))
 2. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<notin> lvars (\<T> s); lt dir c (\<langle>\<V> s\<rangle> x); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> \<not> \<U> (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) \<longrightarrow> (\<forall>xa\<in>- lvars (\<T> (update x c (update\<B>\<I> (UBI_upd dir) i x c s))). \<unrhd>\<^sub>l\<^sub>b (lt dir) (\<langle>\<V> (update x c (update\<B>\<I> (UBI_upd dir) i x c s))\<rangle> xa) (LB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa) \<and> \<unlhd>\<^sub>u\<^sub>b (lt dir) (\<langle>\<V> (update x c (update\<B>\<I> (UBI_upd dir) i x c s))\<rangle> xa) (UB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa))
 3. \<And>s. (\<not> \<U> s \<longrightarrow> \<langle>\<V> s\<rangle> \<Turnstile>\<^sub>b \<B> s \<parallel> - lvars (\<T> s)) = (\<not> \<U> s \<longrightarrow> (\<forall>x\<in>- lvars (\<T> s). \<unrhd>\<^sub>l\<^sub>b (\<lambda>x y. y < x) (\<langle>\<V> s\<rangle> x) (\<B>\<^sub>u s x) \<and> \<unlhd>\<^sub>u\<^sub>b (\<lambda>x y. y < x) (\<langle>\<V> s\<rangle> x) (\<B>\<^sub>l s x)))
 4. \<And>s. (\<not> \<U> s \<longrightarrow> \<langle>\<V> s\<rangle> \<Turnstile>\<^sub>b \<B> s \<parallel> - lvars (\<T> s)) = (\<not> \<U> s \<longrightarrow> (\<forall>x\<in>- lvars (\<T> s). \<unrhd>\<^sub>l\<^sub>b (<) (\<langle>\<V> s\<rangle> x) (\<B>\<^sub>l s x) \<and> \<unlhd>\<^sub>u\<^sub>b (<) (\<langle>\<V> s\<rangle> x) (\<B>\<^sub>u s x)))
[PROOF STEP]
fix c x and dir :: "('i,'a) Direction"
[PROOF STATE]
proof (state)
goal (4 subgoals):
 1. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> \<not> \<U> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) \<longrightarrow> (\<forall>xa\<in>- lvars (\<T> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s))). \<unrhd>\<^sub>l\<^sub>b (lt dir) (\<langle>\<V> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s))\<rangle> xa) (LB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa) \<and> \<unlhd>\<^sub>u\<^sub>b (lt dir) (\<langle>\<V> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s))\<rangle> xa) (UB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa))
 2. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<notin> lvars (\<T> s); lt dir c (\<langle>\<V> s\<rangle> x); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> \<not> \<U> (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) \<longrightarrow> (\<forall>xa\<in>- lvars (\<T> (update x c (update\<B>\<I> (UBI_upd dir) i x c s))). \<unrhd>\<^sub>l\<^sub>b (lt dir) (\<langle>\<V> (update x c (update\<B>\<I> (UBI_upd dir) i x c s))\<rangle> xa) (LB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa) \<and> \<unlhd>\<^sub>u\<^sub>b (lt dir) (\<langle>\<V> (update x c (update\<B>\<I> (UBI_upd dir) i x c s))\<rangle> xa) (UB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa))
 3. \<And>s. (\<not> \<U> s \<longrightarrow> \<langle>\<V> s\<rangle> \<Turnstile>\<^sub>b \<B> s \<parallel> - lvars (\<T> s)) = (\<not> \<U> s \<longrightarrow> (\<forall>x\<in>- lvars (\<T> s). \<unrhd>\<^sub>l\<^sub>b (\<lambda>x y. y < x) (\<langle>\<V> s\<rangle> x) (\<B>\<^sub>u s x) \<and> \<unlhd>\<^sub>u\<^sub>b (\<lambda>x y. y < x) (\<langle>\<V> s\<rangle> x) (\<B>\<^sub>l s x)))
 4. \<And>s. (\<not> \<U> s \<longrightarrow> \<langle>\<V> s\<rangle> \<Turnstile>\<^sub>b \<B> s \<parallel> - lvars (\<T> s)) = (\<not> \<U> s \<longrightarrow> (\<forall>x\<in>- lvars (\<T> s). \<unrhd>\<^sub>l\<^sub>b (<) (\<langle>\<V> s\<rangle> x) (\<B>\<^sub>l s x) \<and> \<unlhd>\<^sub>u\<^sub>b (<) (\<langle>\<V> s\<rangle> x) (\<B>\<^sub>u s x)))
[PROOF STEP]
let ?s' = "update x c (update\<B>\<I> (UBI_upd dir) i x c s)"
[PROOF STATE]
proof (state)
goal (4 subgoals):
 1. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> \<not> \<U> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) \<longrightarrow> (\<forall>xa\<in>- lvars (\<T> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s))). \<unrhd>\<^sub>l\<^sub>b (lt dir) (\<langle>\<V> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s))\<rangle> xa) (LB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa) \<and> \<unlhd>\<^sub>u\<^sub>b (lt dir) (\<langle>\<V> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s))\<rangle> xa) (UB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa))
 2. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<notin> lvars (\<T> s); lt dir c (\<langle>\<V> s\<rangle> x); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> \<not> \<U> (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) \<longrightarrow> (\<forall>xa\<in>- lvars (\<T> (update x c (update\<B>\<I> (UBI_upd dir) i x c s))). \<unrhd>\<^sub>l\<^sub>b (lt dir) (\<langle>\<V> (update x c (update\<B>\<I> (UBI_upd dir) i x c s))\<rangle> xa) (LB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa) \<and> \<unlhd>\<^sub>u\<^sub>b (lt dir) (\<langle>\<V> (update x c (update\<B>\<I> (UBI_upd dir) i x c s))\<rangle> xa) (UB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa))
 3. \<And>s. (\<not> \<U> s \<longrightarrow> \<langle>\<V> s\<rangle> \<Turnstile>\<^sub>b \<B> s \<parallel> - lvars (\<T> s)) = (\<not> \<U> s \<longrightarrow> (\<forall>x\<in>- lvars (\<T> s). \<unrhd>\<^sub>l\<^sub>b (\<lambda>x y. y < x) (\<langle>\<V> s\<rangle> x) (\<B>\<^sub>u s x) \<and> \<unlhd>\<^sub>u\<^sub>b (\<lambda>x y. y < x) (\<langle>\<V> s\<rangle> x) (\<B>\<^sub>l s x)))
 4. \<And>s. (\<not> \<U> s \<longrightarrow> \<langle>\<V> s\<rangle> \<Turnstile>\<^sub>b \<B> s \<parallel> - lvars (\<T> s)) = (\<not> \<U> s \<longrightarrow> (\<forall>x\<in>- lvars (\<T> s). \<unrhd>\<^sub>l\<^sub>b (<) (\<langle>\<V> s\<rangle> x) (\<B>\<^sub>l s x) \<and> \<unlhd>\<^sub>u\<^sub>b (<) (\<langle>\<V> s\<rangle> x) (\<B>\<^sub>u s x)))
[PROOF STEP]
assume "x \<notin> lvars (\<T> s)" "\<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)"
        "dir = Positive \<or> dir = Negative"
[PROOF STATE]
proof (state)
this:
x \<notin> lvars (\<T> s)
\<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)
dir = Positive \<or> dir = Negative

goal (4 subgoals):
 1. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> \<not> \<U> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) \<longrightarrow> (\<forall>xa\<in>- lvars (\<T> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s))). \<unrhd>\<^sub>l\<^sub>b (lt dir) (\<langle>\<V> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s))\<rangle> xa) (LB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa) \<and> \<unlhd>\<^sub>u\<^sub>b (lt dir) (\<langle>\<V> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s))\<rangle> xa) (UB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa))
 2. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<notin> lvars (\<T> s); lt dir c (\<langle>\<V> s\<rangle> x); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> \<not> \<U> (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) \<longrightarrow> (\<forall>xa\<in>- lvars (\<T> (update x c (update\<B>\<I> (UBI_upd dir) i x c s))). \<unrhd>\<^sub>l\<^sub>b (lt dir) (\<langle>\<V> (update x c (update\<B>\<I> (UBI_upd dir) i x c s))\<rangle> xa) (LB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa) \<and> \<unlhd>\<^sub>u\<^sub>b (lt dir) (\<langle>\<V> (update x c (update\<B>\<I> (UBI_upd dir) i x c s))\<rangle> xa) (UB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa))
 3. \<And>s. (\<not> \<U> s \<longrightarrow> \<langle>\<V> s\<rangle> \<Turnstile>\<^sub>b \<B> s \<parallel> - lvars (\<T> s)) = (\<not> \<U> s \<longrightarrow> (\<forall>x\<in>- lvars (\<T> s). \<unrhd>\<^sub>l\<^sub>b (\<lambda>x y. y < x) (\<langle>\<V> s\<rangle> x) (\<B>\<^sub>u s x) \<and> \<unlhd>\<^sub>u\<^sub>b (\<lambda>x y. y < x) (\<langle>\<V> s\<rangle> x) (\<B>\<^sub>l s x)))
 4. \<And>s. (\<not> \<U> s \<longrightarrow> \<langle>\<V> s\<rangle> \<Turnstile>\<^sub>b \<B> s \<parallel> - lvars (\<T> s)) = (\<not> \<U> s \<longrightarrow> (\<forall>x\<in>- lvars (\<T> s). \<unrhd>\<^sub>l\<^sub>b (<) (\<langle>\<V> s\<rangle> x) (\<B>\<^sub>l s x) \<and> \<unlhd>\<^sub>u\<^sub>b (<) (\<langle>\<V> s\<rangle> x) (\<B>\<^sub>u s x)))
[PROOF STEP]
show "?P'' dir ?s'"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<not> \<U> (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) \<longrightarrow> (\<forall>xa\<in>- lvars (\<T> (update x c (update\<B>\<I> (UBI_upd dir) i x c s))). \<unrhd>\<^sub>l\<^sub>b (lt dir) (\<langle>\<V> (update x c (update\<B>\<I> (UBI_upd dir) i x c s))\<rangle> xa) (LB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa) \<and> \<unlhd>\<^sub>u\<^sub>b (lt dir) (\<langle>\<V> (update x c (update\<B>\<I> (UBI_upd dir) i x c s))\<rangle> xa) (UB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa))
[PROOF STEP]
proof (rule impI, rule ballI)
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. \<And>xa. \<lbrakk>\<not> \<U> (update x c (update\<B>\<I> (UBI_upd dir) i x c s)); xa \<in> - lvars (\<T> (update x c (update\<B>\<I> (UBI_upd dir) i x c s)))\<rbrakk> \<Longrightarrow> \<unrhd>\<^sub>l\<^sub>b (lt dir) (\<langle>\<V> (update x c (update\<B>\<I> (UBI_upd dir) i x c s))\<rangle> xa) (LB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa) \<and> \<unlhd>\<^sub>u\<^sub>b (lt dir) (\<langle>\<V> (update x c (update\<B>\<I> (UBI_upd dir) i x c s))\<rangle> xa) (UB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa)
[PROOF STEP]
fix y
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. \<And>xa. \<lbrakk>\<not> \<U> (update x c (update\<B>\<I> (UBI_upd dir) i x c s)); xa \<in> - lvars (\<T> (update x c (update\<B>\<I> (UBI_upd dir) i x c s)))\<rbrakk> \<Longrightarrow> \<unrhd>\<^sub>l\<^sub>b (lt dir) (\<langle>\<V> (update x c (update\<B>\<I> (UBI_upd dir) i x c s))\<rangle> xa) (LB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa) \<and> \<unlhd>\<^sub>u\<^sub>b (lt dir) (\<langle>\<V> (update x c (update\<B>\<I> (UBI_upd dir) i x c s))\<rangle> xa) (UB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa)
[PROOF STEP]
assume "\<not> \<U> ?s'" "y \<in> - lvars (\<T> ?s')"
[PROOF STATE]
proof (state)
this:
\<not> \<U> (update x c (update\<B>\<I> (UBI_upd dir) i x c s))
y \<in> - lvars (\<T> (update x c (update\<B>\<I> (UBI_upd dir) i x c s)))

goal (1 subgoal):
 1. \<And>xa. \<lbrakk>\<not> \<U> (update x c (update\<B>\<I> (UBI_upd dir) i x c s)); xa \<in> - lvars (\<T> (update x c (update\<B>\<I> (UBI_upd dir) i x c s)))\<rbrakk> \<Longrightarrow> \<unrhd>\<^sub>l\<^sub>b (lt dir) (\<langle>\<V> (update x c (update\<B>\<I> (UBI_upd dir) i x c s))\<rangle> xa) (LB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa) \<and> \<unlhd>\<^sub>u\<^sub>b (lt dir) (\<langle>\<V> (update x c (update\<B>\<I> (UBI_upd dir) i x c s))\<rangle> xa) (UB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa)
[PROOF STEP]
show "\<unrhd>\<^sub>l\<^sub>b (lt dir) (\<langle>\<V> ?s'\<rangle> y) (LB dir ?s' y) \<and> \<unlhd>\<^sub>u\<^sub>b (lt dir) (\<langle>\<V> ?s'\<rangle> y) (UB dir ?s' y)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<unrhd>\<^sub>l\<^sub>b (lt dir) (\<langle>\<V> (update x c (update\<B>\<I> (UBI_upd dir) i x c s))\<rangle> y) (LB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) y) \<and> \<unlhd>\<^sub>u\<^sub>b (lt dir) (\<langle>\<V> (update x c (update\<B>\<I> (UBI_upd dir) i x c s))\<rangle> y) (UB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) y)
[PROOF STEP]
proof (cases "x = y")
[PROOF STATE]
proof (state)
goal (2 subgoals):
 1. x = y \<Longrightarrow> \<unrhd>\<^sub>l\<^sub>b (lt dir) (\<langle>\<V> (update x c (update\<B>\<I> (UBI_upd dir) i x c s))\<rangle> y) (LB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) y) \<and> \<unlhd>\<^sub>u\<^sub>b (lt dir) (\<langle>\<V> (update x c (update\<B>\<I> (UBI_upd dir) i x c s))\<rangle> y) (UB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) y)
 2. x \<noteq> y \<Longrightarrow> \<unrhd>\<^sub>l\<^sub>b (lt dir) (\<langle>\<V> (update x c (update\<B>\<I> (UBI_upd dir) i x c s))\<rangle> y) (LB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) y) \<and> \<unlhd>\<^sub>u\<^sub>b (lt dir) (\<langle>\<V> (update x c (update\<B>\<I> (UBI_upd dir) i x c s))\<rangle> y) (UB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) y)
[PROOF STEP]
case True
[PROOF STATE]
proof (state)
this:
x = y

goal (2 subgoals):
 1. x = y \<Longrightarrow> \<unrhd>\<^sub>l\<^sub>b (lt dir) (\<langle>\<V> (update x c (update\<B>\<I> (UBI_upd dir) i x c s))\<rangle> y) (LB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) y) \<and> \<unlhd>\<^sub>u\<^sub>b (lt dir) (\<langle>\<V> (update x c (update\<B>\<I> (UBI_upd dir) i x c s))\<rangle> y) (UB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) y)
 2. x \<noteq> y \<Longrightarrow> \<unrhd>\<^sub>l\<^sub>b (lt dir) (\<langle>\<V> (update x c (update\<B>\<I> (UBI_upd dir) i x c s))\<rangle> y) (LB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) y) \<and> \<unlhd>\<^sub>u\<^sub>b (lt dir) (\<langle>\<V> (update x c (update\<B>\<I> (UBI_upd dir) i x c s))\<rangle> y) (UB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) y)
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
x = y
[PROOF STEP]
show ?thesis
[PROOF STATE]
proof (prove)
using this:
x = y

goal (1 subgoal):
 1. \<unrhd>\<^sub>l\<^sub>b (lt dir) (\<langle>\<V> (update x c (update\<B>\<I> (UBI_upd dir) i x c s))\<rangle> y) (LB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) y) \<and> \<unlhd>\<^sub>u\<^sub>b (lt dir) (\<langle>\<V> (update x c (update\<B>\<I> (UBI_upd dir) i x c s))\<rangle> y) (UB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) y)
[PROOF STEP]
using \<open>x \<notin> lvars (\<T> s)\<close>
[PROOF STATE]
proof (prove)
using this:
x = y
x \<notin> lvars (\<T> s)

goal (1 subgoal):
 1. \<unrhd>\<^sub>l\<^sub>b (lt dir) (\<langle>\<V> (update x c (update\<B>\<I> (UBI_upd dir) i x c s))\<rangle> y) (LB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) y) \<and> \<unlhd>\<^sub>u\<^sub>b (lt dir) (\<langle>\<V> (update x c (update\<B>\<I> (UBI_upd dir) i x c s))\<rangle> y) (UB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) y)
[PROOF STEP]
using \<open>y \<in> - lvars (\<T> ?s')\<close>
[PROOF STATE]
proof (prove)
using this:
x = y
x \<notin> lvars (\<T> s)
y \<in> - lvars (\<T> (update x c (update\<B>\<I> (UBI_upd dir) i x c s)))

goal (1 subgoal):
 1. \<unrhd>\<^sub>l\<^sub>b (lt dir) (\<langle>\<V> (update x c (update\<B>\<I> (UBI_upd dir) i x c s))\<rangle> y) (LB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) y) \<and> \<unlhd>\<^sub>u\<^sub>b (lt dir) (\<langle>\<V> (update x c (update\<B>\<I> (UBI_upd dir) i x c s))\<rangle> y) (UB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) y)
[PROOF STEP]
using \<open>\<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<close>
[PROOF STATE]
proof (prove)
using this:
x = y
x \<notin> lvars (\<T> s)
y \<in> - lvars (\<T> (update x c (update\<B>\<I> (UBI_upd dir) i x c s)))
\<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)

goal (1 subgoal):
 1. \<unrhd>\<^sub>l\<^sub>b (lt dir) (\<langle>\<V> (update x c (update\<B>\<I> (UBI_upd dir) i x c s))\<rangle> y) (LB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) y) \<and> \<unlhd>\<^sub>u\<^sub>b (lt dir) (\<langle>\<V> (update x c (update\<B>\<I> (UBI_upd dir) i x c s))\<rangle> y) (UB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) y)
[PROOF STEP]
using \<open>dir = Positive \<or> dir = Negative\<close>
[PROOF STATE]
proof (prove)
using this:
x = y
x \<notin> lvars (\<T> s)
y \<in> - lvars (\<T> (update x c (update\<B>\<I> (UBI_upd dir) i x c s)))
\<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)
dir = Positive \<or> dir = Negative

goal (1 subgoal):
 1. \<unrhd>\<^sub>l\<^sub>b (lt dir) (\<langle>\<V> (update x c (update\<B>\<I> (UBI_upd dir) i x c s))\<rangle> y) (LB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) y) \<and> \<unlhd>\<^sub>u\<^sub>b (lt dir) (\<langle>\<V> (update x c (update\<B>\<I> (UBI_upd dir) i x c s))\<rangle> y) (UB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) y)
[PROOF STEP]
using neg_bounds_compare(7) neg_bounds_compare(3)
[PROOF STATE]
proof (prove)
using this:
x = y
x \<notin> lvars (\<T> s)
y \<in> - lvars (\<T> (update x c (update\<B>\<I> (UBI_upd dir) i x c s)))
\<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)
dir = Positive \<or> dir = Negative
\<not> ?c <\<^sub>l\<^sub>b ?b \<Longrightarrow> ?c \<ge>\<^sub>l\<^sub>b ?b
\<not> ?c >\<^sub>u\<^sub>b ?b \<Longrightarrow> ?c \<le>\<^sub>u\<^sub>b ?b

goal (1 subgoal):
 1. \<unrhd>\<^sub>l\<^sub>b (lt dir) (\<langle>\<V> (update x c (update\<B>\<I> (UBI_upd dir) i x c s))\<rangle> y) (LB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) y) \<and> \<unlhd>\<^sub>u\<^sub>b (lt dir) (\<langle>\<V> (update x c (update\<B>\<I> (UBI_upd dir) i x c s))\<rangle> y) (UB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) y)
[PROOF STEP]
using *
[PROOF STATE]
proof (prove)
using this:
x = y
x \<notin> lvars (\<T> s)
y \<in> - lvars (\<T> (update x c (update\<B>\<I> (UBI_upd dir) i x c s)))
\<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)
dir = Positive \<or> dir = Negative
\<not> ?c <\<^sub>l\<^sub>b ?b \<Longrightarrow> ?c \<ge>\<^sub>l\<^sub>b ?b
\<not> ?c >\<^sub>u\<^sub>b ?b \<Longrightarrow> ?c \<le>\<^sub>u\<^sub>b ?b
\<not> \<U> s
\<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s
\<diamond> s
\<triangle> (\<T> s)
\<nabla> s

goal (1 subgoal):
 1. \<unrhd>\<^sub>l\<^sub>b (lt dir) (\<langle>\<V> (update x c (update\<B>\<I> (UBI_upd dir) i x c s))\<rangle> y) (LB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) y) \<and> \<unlhd>\<^sub>u\<^sub>b (lt dir) (\<langle>\<V> (update x c (update\<B>\<I> (UBI_upd dir) i x c s))\<rangle> y) (UB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) y)
[PROOF STEP]
by (auto simp add: update_valuation_nonlhs update_tableau_id update_bounds_id bound_compare''_defs map2fun_def tableau_valuated_def bounds_updates) (force simp add: bound_compare'_defs)+
[PROOF STATE]
proof (state)
this:
\<unrhd>\<^sub>l\<^sub>b (lt dir) (\<langle>\<V> (update x c (update\<B>\<I> (UBI_upd dir) i x c s))\<rangle> y) (LB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) y) \<and> \<unlhd>\<^sub>u\<^sub>b (lt dir) (\<langle>\<V> (update x c (update\<B>\<I> (UBI_upd dir) i x c s))\<rangle> y) (UB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) y)

goal (1 subgoal):
 1. x \<noteq> y \<Longrightarrow> \<unrhd>\<^sub>l\<^sub>b (lt dir) (\<langle>\<V> (update x c (update\<B>\<I> (UBI_upd dir) i x c s))\<rangle> y) (LB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) y) \<and> \<unlhd>\<^sub>u\<^sub>b (lt dir) (\<langle>\<V> (update x c (update\<B>\<I> (UBI_upd dir) i x c s))\<rangle> y) (UB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) y)
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. x \<noteq> y \<Longrightarrow> \<unrhd>\<^sub>l\<^sub>b (lt dir) (\<langle>\<V> (update x c (update\<B>\<I> (UBI_upd dir) i x c s))\<rangle> y) (LB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) y) \<and> \<unlhd>\<^sub>u\<^sub>b (lt dir) (\<langle>\<V> (update x c (update\<B>\<I> (UBI_upd dir) i x c s))\<rangle> y) (UB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) y)
[PROOF STEP]
case False
[PROOF STATE]
proof (state)
this:
x \<noteq> y

goal (1 subgoal):
 1. x \<noteq> y \<Longrightarrow> \<unrhd>\<^sub>l\<^sub>b (lt dir) (\<langle>\<V> (update x c (update\<B>\<I> (UBI_upd dir) i x c s))\<rangle> y) (LB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) y) \<and> \<unlhd>\<^sub>u\<^sub>b (lt dir) (\<langle>\<V> (update x c (update\<B>\<I> (UBI_upd dir) i x c s))\<rangle> y) (UB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) y)
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
x \<noteq> y
[PROOF STEP]
show ?thesis
[PROOF STATE]
proof (prove)
using this:
x \<noteq> y

goal (1 subgoal):
 1. \<unrhd>\<^sub>l\<^sub>b (lt dir) (\<langle>\<V> (update x c (update\<B>\<I> (UBI_upd dir) i x c s))\<rangle> y) (LB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) y) \<and> \<unlhd>\<^sub>u\<^sub>b (lt dir) (\<langle>\<V> (update x c (update\<B>\<I> (UBI_upd dir) i x c s))\<rangle> y) (UB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) y)
[PROOF STEP]
using \<open>x \<notin> lvars (\<T> s)\<close> \<open>y \<in> - lvars (\<T> ?s')\<close>
[PROOF STATE]
proof (prove)
using this:
x \<noteq> y
x \<notin> lvars (\<T> s)
y \<in> - lvars (\<T> (update x c (update\<B>\<I> (UBI_upd dir) i x c s)))

goal (1 subgoal):
 1. \<unrhd>\<^sub>l\<^sub>b (lt dir) (\<langle>\<V> (update x c (update\<B>\<I> (UBI_upd dir) i x c s))\<rangle> y) (LB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) y) \<and> \<unlhd>\<^sub>u\<^sub>b (lt dir) (\<langle>\<V> (update x c (update\<B>\<I> (UBI_upd dir) i x c s))\<rangle> y) (UB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) y)
[PROOF STEP]
using \<open>dir = Positive \<or> dir = Negative\<close> *
[PROOF STATE]
proof (prove)
using this:
x \<noteq> y
x \<notin> lvars (\<T> s)
y \<in> - lvars (\<T> (update x c (update\<B>\<I> (UBI_upd dir) i x c s)))
dir = Positive \<or> dir = Negative
\<not> \<U> s
\<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s
\<diamond> s
\<triangle> (\<T> s)
\<nabla> s

goal (1 subgoal):
 1. \<unrhd>\<^sub>l\<^sub>b (lt dir) (\<langle>\<V> (update x c (update\<B>\<I> (UBI_upd dir) i x c s))\<rangle> y) (LB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) y) \<and> \<unlhd>\<^sub>u\<^sub>b (lt dir) (\<langle>\<V> (update x c (update\<B>\<I> (UBI_upd dir) i x c s))\<rangle> y) (UB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) y)
[PROOF STEP]
by (auto simp add: update_valuation_nonlhs update_tableau_id update_bounds_id  bound_compare''_defs satisfies_bounds_set.simps curr_val_satisfies_no_lhs_def map2fun_def
                tableau_valuated_def bounds_updates)
[PROOF STATE]
proof (state)
this:
\<unrhd>\<^sub>l\<^sub>b (lt dir) (\<langle>\<V> (update x c (update\<B>\<I> (UBI_upd dir) i x c s))\<rangle> y) (LB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) y) \<and> \<unlhd>\<^sub>u\<^sub>b (lt dir) (\<langle>\<V> (update x c (update\<B>\<I> (UBI_upd dir) i x c s))\<rangle> y) (UB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) y)

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
\<unrhd>\<^sub>l\<^sub>b (lt dir) (\<langle>\<V> (update x c (update\<B>\<I> (UBI_upd dir) i x c s))\<rangle> y) (LB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) y) \<and> \<unlhd>\<^sub>u\<^sub>b (lt dir) (\<langle>\<V> (update x c (update\<B>\<I> (UBI_upd dir) i x c s))\<rangle> y) (UB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) y)

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
\<not> \<U> (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) \<longrightarrow> (\<forall>xa\<in>- lvars (\<T> (update x c (update\<B>\<I> (UBI_upd dir) i x c s))). \<unrhd>\<^sub>l\<^sub>b (lt dir) (\<langle>\<V> (update x c (update\<B>\<I> (UBI_upd dir) i x c s))\<rangle> xa) (LB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa) \<and> \<unlhd>\<^sub>u\<^sub>b (lt dir) (\<langle>\<V> (update x c (update\<B>\<I> (UBI_upd dir) i x c s))\<rangle> xa) (UB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa))

goal (3 subgoals):
 1. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> \<not> \<U> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) \<longrightarrow> (\<forall>xa\<in>- lvars (\<T> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s))). \<unrhd>\<^sub>l\<^sub>b (lt dir) (\<langle>\<V> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s))\<rangle> xa) (LB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa) \<and> \<unlhd>\<^sub>u\<^sub>b (lt dir) (\<langle>\<V> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s))\<rangle> xa) (UB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa))
 2. \<And>s. (\<not> \<U> s \<longrightarrow> \<langle>\<V> s\<rangle> \<Turnstile>\<^sub>b \<B> s \<parallel> - lvars (\<T> s)) = (\<not> \<U> s \<longrightarrow> (\<forall>x\<in>- lvars (\<T> s). \<unrhd>\<^sub>l\<^sub>b (\<lambda>x y. y < x) (\<langle>\<V> s\<rangle> x) (\<B>\<^sub>u s x) \<and> \<unlhd>\<^sub>u\<^sub>b (\<lambda>x y. y < x) (\<langle>\<V> s\<rangle> x) (\<B>\<^sub>l s x)))
 3. \<And>s. (\<not> \<U> s \<longrightarrow> \<langle>\<V> s\<rangle> \<Turnstile>\<^sub>b \<B> s \<parallel> - lvars (\<T> s)) = (\<not> \<U> s \<longrightarrow> (\<forall>x\<in>- lvars (\<T> s). \<unrhd>\<^sub>l\<^sub>b (<) (\<langle>\<V> s\<rangle> x) (\<B>\<^sub>l s x) \<and> \<unlhd>\<^sub>u\<^sub>b (<) (\<langle>\<V> s\<rangle> x) (\<B>\<^sub>u s x)))
[PROOF STEP]
qed (auto simp add: x xx)
[PROOF STATE]
proof (state)
this:
\<not> \<U> (assert_bound ia s) \<longrightarrow> \<langle>\<V> (assert_bound ia s)\<rangle> \<Turnstile>\<^sub>b \<B> (assert_bound ia s) \<parallel> - lvars (\<T> (assert_bound ia s))

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
\<not> \<U> (assert_bound ia s) \<longrightarrow> \<langle>\<V> (assert_bound ia s)\<rangle> \<Turnstile>\<^sub>b \<B> (assert_bound ia s) \<parallel> - lvars (\<T> (assert_bound ia s))

goal (5 subgoals):
 1. \<And>s a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; \<not> \<U> (assert_bound a s)\<rbrakk> \<Longrightarrow> \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s (assert_bound a s) \<and> \<diamond> (assert_bound a s)
 2. \<And>s ats a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; (snd ` ats) \<doteq> \<B> s\<rbrakk> \<Longrightarrow> (snd ` (ats \<union> {a})) \<doteq> \<B> (assert_bound a s)
 3. \<And>s ats a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; ats \<Turnstile>\<^sub>i \<B>\<I> s\<rbrakk> \<Longrightarrow> insert a ats \<Turnstile>\<^sub>i \<B>\<I> (assert_bound a s)
 4. \<And>s a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s\<rbrakk> \<Longrightarrow> \<nabla> (assert_bound a s)
 5. \<And>s as a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; index_valid as s\<rbrakk> \<Longrightarrow> index_valid (insert a as) (assert_bound a s)
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
\<not> \<U> (assert_bound ia s) \<longrightarrow> \<langle>\<V> (assert_bound ia s)\<rangle> \<Turnstile>\<^sub>b \<B> (assert_bound ia s) \<parallel> - lvars (\<T> (assert_bound ia s))

goal (5 subgoals):
 1. \<And>s a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; \<not> \<U> (assert_bound a s)\<rbrakk> \<Longrightarrow> \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s (assert_bound a s) \<and> \<diamond> (assert_bound a s)
 2. \<And>s ats a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; (snd ` ats) \<doteq> \<B> s\<rbrakk> \<Longrightarrow> (snd ` (ats \<union> {a})) \<doteq> \<B> (assert_bound a s)
 3. \<And>s ats a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; ats \<Turnstile>\<^sub>i \<B>\<I> s\<rbrakk> \<Longrightarrow> insert a ats \<Turnstile>\<^sub>i \<B>\<I> (assert_bound a s)
 4. \<And>s a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s\<rbrakk> \<Longrightarrow> \<nabla> (assert_bound a s)
 5. \<And>s as a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; index_valid as s\<rbrakk> \<Longrightarrow> index_valid (insert a as) (assert_bound a s)
[PROOF STEP]
have "\<not> \<U> (assert_bound ia s) \<longrightarrow> \<diamond> (assert_bound ia s)" (is "?P (assert_bound ia s)")
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<not> \<U> (assert_bound ia s) \<longrightarrow> \<diamond> (assert_bound ia s)
[PROOF STEP]
proof-
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. \<not> \<U> (assert_bound ia s) \<longrightarrow> \<diamond> (assert_bound ia s)
[PROOF STEP]
let ?P' = "\<lambda> lt UBI LBI UB LB UBI_upd UI LI LE GE s.
      \<not> \<U> s \<longrightarrow>
      (\<forall>x. if LB s x = None \<or> UB s x = None then True
           else lt (the (LB s x)) (the (UB s x)) \<or> (the (LB s x) = the (UB s x)))"
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. \<not> \<U> (assert_bound ia s) \<longrightarrow> \<diamond> (assert_bound ia s)
[PROOF STEP]
let ?P'' = "\<lambda> dir. ?P' (lt dir) (UBI dir) (LBI dir) (UB dir) (LB dir) (UBI_upd dir) (UI dir) (LI dir) (LE dir) (GE dir)"
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. \<not> \<U> (assert_bound ia s) \<longrightarrow> \<diamond> (assert_bound ia s)
[PROOF STEP]
have x: "\<And> s'. ?P s' = ?P' (<) \<B>\<^sub>i\<^sub>l \<B>\<^sub>i\<^sub>u \<B>\<^sub>u \<B>\<^sub>l \<B>\<^sub>i\<^sub>u_update \<I>\<^sub>u \<I>\<^sub>l Leq Geq s'" and
      xx: "\<And> s'. ?P s' = ?P' (>) \<B>\<^sub>i\<^sub>l \<B>\<^sub>i\<^sub>u \<B>\<^sub>l \<B>\<^sub>u \<B>\<^sub>i\<^sub>l_update \<I>\<^sub>l \<I>\<^sub>u Geq Leq s'"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (\<And>s'. (\<not> \<U> s' \<longrightarrow> \<diamond> s') = (\<not> \<U> s' \<longrightarrow> (\<forall>x. if \<B>\<^sub>l s' x = None \<or> \<B>\<^sub>u s' x = None then True else the (\<B>\<^sub>l s' x) < the (\<B>\<^sub>u s' x) \<or> the (\<B>\<^sub>l s' x) = the (\<B>\<^sub>u s' x)))) &&& (\<And>s'. (\<not> \<U> s' \<longrightarrow> \<diamond> s') = (\<not> \<U> s' \<longrightarrow> (\<forall>x. if \<B>\<^sub>u s' x = None \<or> \<B>\<^sub>l s' x = None then True else the (\<B>\<^sub>l s' x) < the (\<B>\<^sub>u s' x) \<or> the (\<B>\<^sub>u s' x) = the (\<B>\<^sub>l s' x))))
[PROOF STEP]
unfolding bounds_consistent_def
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (\<And>s'. (\<not> \<U> s' \<longrightarrow> (\<forall>x. if \<B>\<^sub>l s' x = None \<or> \<B>\<^sub>u s' x = None then True else the (\<B>\<^sub>l s' x) \<le> the (\<B>\<^sub>u s' x))) = (\<not> \<U> s' \<longrightarrow> (\<forall>x. if \<B>\<^sub>l s' x = None \<or> \<B>\<^sub>u s' x = None then True else the (\<B>\<^sub>l s' x) < the (\<B>\<^sub>u s' x) \<or> the (\<B>\<^sub>l s' x) = the (\<B>\<^sub>u s' x)))) &&& (\<And>s'. (\<not> \<U> s' \<longrightarrow> (\<forall>x. if \<B>\<^sub>l s' x = None \<or> \<B>\<^sub>u s' x = None then True else the (\<B>\<^sub>l s' x) \<le> the (\<B>\<^sub>u s' x))) = (\<not> \<U> s' \<longrightarrow> (\<forall>x. if \<B>\<^sub>u s' x = None \<or> \<B>\<^sub>l s' x = None then True else the (\<B>\<^sub>l s' x) < the (\<B>\<^sub>u s' x) \<or> the (\<B>\<^sub>u s' x) = the (\<B>\<^sub>l s' x))))
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
(\<not> \<U> ?s'2 \<longrightarrow> \<diamond> ?s'2) = (\<not> \<U> ?s'2 \<longrightarrow> (\<forall>x. if \<B>\<^sub>l ?s'2 x = None \<or> \<B>\<^sub>u ?s'2 x = None then True else the (\<B>\<^sub>l ?s'2 x) < the (\<B>\<^sub>u ?s'2 x) \<or> the (\<B>\<^sub>l ?s'2 x) = the (\<B>\<^sub>u ?s'2 x)))
(\<not> \<U> ?s'2 \<longrightarrow> \<diamond> ?s'2) = (\<not> \<U> ?s'2 \<longrightarrow> (\<forall>x. if \<B>\<^sub>u ?s'2 x = None \<or> \<B>\<^sub>l ?s'2 x = None then True else the (\<B>\<^sub>l ?s'2 x) < the (\<B>\<^sub>u ?s'2 x) \<or> the (\<B>\<^sub>u ?s'2 x) = the (\<B>\<^sub>l ?s'2 x)))

goal (1 subgoal):
 1. \<not> \<U> (assert_bound ia s) \<longrightarrow> \<diamond> (assert_bound ia s)
[PROOF STEP]
show ?thesis
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<not> \<U> (assert_bound ia s) \<longrightarrow> \<diamond> (assert_bound ia s)
[PROOF STEP]
unfolding ia
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<not> \<U> (assert_bound (i, a) s) \<longrightarrow> \<diamond> (assert_bound (i, a) s)
[PROOF STEP]
proof (rule assert_bound_cases[of _ _ ?P'])
[PROOF STATE]
proof (state)
goal (7 subgoals):
 1. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x)\<rbrakk> \<Longrightarrow> \<not> \<U> s \<longrightarrow> (\<forall>x. if LB dir s x = None \<or> UB dir s x = None then True else lt dir (the (LB dir s x)) (the (UB dir s x)) \<or> the (LB dir s x) = the (UB dir s x))
 2. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> \<not> \<U> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) \<longrightarrow> (\<forall>xa. if LB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = None \<or> UB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = None then True else lt dir (the (LB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa)) (the (UB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa)) \<or> the (LB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa) = the (UB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa))
 3. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<notin> lvars (\<T> s); lt dir c (\<langle>\<V> s\<rangle> x); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> \<not> \<U> (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) \<longrightarrow> (\<forall>xa. if LB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = None \<or> UB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = None then True else lt dir (the (LB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa)) (the (UB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa)) \<or> the (LB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa) = the (UB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa))
 4. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<in> lvars (\<T> s); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> \<not> \<U> (update\<B>\<I> (UBI_upd dir) i x c s) \<longrightarrow> (\<forall>xa. if LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = None \<or> UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = None then True else lt dir (the (LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa)) (the (UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa)) \<or> the (LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa) = the (UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa))
 5. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x); \<not> lt dir c (\<langle>\<V> s\<rangle> x)\<rbrakk> \<Longrightarrow> \<not> \<U> (update\<B>\<I> (UBI_upd dir) i x c s) \<longrightarrow> (\<forall>xa. if LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = None \<or> UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = None then True else lt dir (the (LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa)) (the (UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa)) \<or> the (LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa) = the (UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa))
 6. \<And>s. (\<not> \<U> s \<longrightarrow> \<diamond> s) = (\<not> \<U> s \<longrightarrow> (\<forall>x. if \<B>\<^sub>u s x = None \<or> \<B>\<^sub>l s x = None then True else the (\<B>\<^sub>l s x) < the (\<B>\<^sub>u s x) \<or> the (\<B>\<^sub>u s x) = the (\<B>\<^sub>l s x)))
 7. \<And>s. (\<not> \<U> s \<longrightarrow> \<diamond> s) = (\<not> \<U> s \<longrightarrow> (\<forall>x. if \<B>\<^sub>l s x = None \<or> \<B>\<^sub>u s x = None then True else the (\<B>\<^sub>l s x) < the (\<B>\<^sub>u s x) \<or> the (\<B>\<^sub>l s x) = the (\<B>\<^sub>u s x)))
[PROOF STEP]
fix dir :: "('i,'a) Direction"
[PROOF STATE]
proof (state)
goal (7 subgoals):
 1. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x)\<rbrakk> \<Longrightarrow> \<not> \<U> s \<longrightarrow> (\<forall>x. if LB dir s x = None \<or> UB dir s x = None then True else lt dir (the (LB dir s x)) (the (UB dir s x)) \<or> the (LB dir s x) = the (UB dir s x))
 2. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> \<not> \<U> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) \<longrightarrow> (\<forall>xa. if LB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = None \<or> UB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = None then True else lt dir (the (LB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa)) (the (UB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa)) \<or> the (LB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa) = the (UB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa))
 3. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<notin> lvars (\<T> s); lt dir c (\<langle>\<V> s\<rangle> x); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> \<not> \<U> (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) \<longrightarrow> (\<forall>xa. if LB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = None \<or> UB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = None then True else lt dir (the (LB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa)) (the (UB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa)) \<or> the (LB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa) = the (UB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa))
 4. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<in> lvars (\<T> s); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> \<not> \<U> (update\<B>\<I> (UBI_upd dir) i x c s) \<longrightarrow> (\<forall>xa. if LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = None \<or> UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = None then True else lt dir (the (LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa)) (the (UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa)) \<or> the (LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa) = the (UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa))
 5. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x); \<not> lt dir c (\<langle>\<V> s\<rangle> x)\<rbrakk> \<Longrightarrow> \<not> \<U> (update\<B>\<I> (UBI_upd dir) i x c s) \<longrightarrow> (\<forall>xa. if LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = None \<or> UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = None then True else lt dir (the (LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa)) (the (UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa)) \<or> the (LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa) = the (UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa))
 6. \<And>s. (\<not> \<U> s \<longrightarrow> \<diamond> s) = (\<not> \<U> s \<longrightarrow> (\<forall>x. if \<B>\<^sub>u s x = None \<or> \<B>\<^sub>l s x = None then True else the (\<B>\<^sub>l s x) < the (\<B>\<^sub>u s x) \<or> the (\<B>\<^sub>u s x) = the (\<B>\<^sub>l s x)))
 7. \<And>s. (\<not> \<U> s \<longrightarrow> \<diamond> s) = (\<not> \<U> s \<longrightarrow> (\<forall>x. if \<B>\<^sub>l s x = None \<or> \<B>\<^sub>u s x = None then True else the (\<B>\<^sub>l s x) < the (\<B>\<^sub>u s x) \<or> the (\<B>\<^sub>l s x) = the (\<B>\<^sub>u s x)))
[PROOF STEP]
assume "dir = Positive \<or> dir = Negative"
[PROOF STATE]
proof (state)
this:
dir = Positive \<or> dir = Negative

goal (7 subgoals):
 1. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x)\<rbrakk> \<Longrightarrow> \<not> \<U> s \<longrightarrow> (\<forall>x. if LB dir s x = None \<or> UB dir s x = None then True else lt dir (the (LB dir s x)) (the (UB dir s x)) \<or> the (LB dir s x) = the (UB dir s x))
 2. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> \<not> \<U> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) \<longrightarrow> (\<forall>xa. if LB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = None \<or> UB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = None then True else lt dir (the (LB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa)) (the (UB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa)) \<or> the (LB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa) = the (UB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa))
 3. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<notin> lvars (\<T> s); lt dir c (\<langle>\<V> s\<rangle> x); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> \<not> \<U> (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) \<longrightarrow> (\<forall>xa. if LB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = None \<or> UB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = None then True else lt dir (the (LB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa)) (the (UB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa)) \<or> the (LB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa) = the (UB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa))
 4. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<in> lvars (\<T> s); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> \<not> \<U> (update\<B>\<I> (UBI_upd dir) i x c s) \<longrightarrow> (\<forall>xa. if LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = None \<or> UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = None then True else lt dir (the (LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa)) (the (UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa)) \<or> the (LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa) = the (UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa))
 5. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x); \<not> lt dir c (\<langle>\<V> s\<rangle> x)\<rbrakk> \<Longrightarrow> \<not> \<U> (update\<B>\<I> (UBI_upd dir) i x c s) \<longrightarrow> (\<forall>xa. if LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = None \<or> UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = None then True else lt dir (the (LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa)) (the (UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa)) \<or> the (LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa) = the (UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa))
 6. \<And>s. (\<not> \<U> s \<longrightarrow> \<diamond> s) = (\<not> \<U> s \<longrightarrow> (\<forall>x. if \<B>\<^sub>u s x = None \<or> \<B>\<^sub>l s x = None then True else the (\<B>\<^sub>l s x) < the (\<B>\<^sub>u s x) \<or> the (\<B>\<^sub>u s x) = the (\<B>\<^sub>l s x)))
 7. \<And>s. (\<not> \<U> s \<longrightarrow> \<diamond> s) = (\<not> \<U> s \<longrightarrow> (\<forall>x. if \<B>\<^sub>l s x = None \<or> \<B>\<^sub>u s x = None then True else the (\<B>\<^sub>l s x) < the (\<B>\<^sub>u s x) \<or> the (\<B>\<^sub>l s x) = the (\<B>\<^sub>u s x)))
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
dir = Positive \<or> dir = Negative
[PROOF STEP]
show "?P'' dir s"
[PROOF STATE]
proof (prove)
using this:
dir = Positive \<or> dir = Negative

goal (1 subgoal):
 1. \<not> \<U> s \<longrightarrow> (\<forall>x. if LB dir s x = None \<or> UB dir s x = None then True else lt dir (the (LB dir s x)) (the (UB dir s x)) \<or> the (LB dir s x) = the (UB dir s x))
[PROOF STEP]
using \<open>\<diamond> s\<close>
[PROOF STATE]
proof (prove)
using this:
dir = Positive \<or> dir = Negative
\<diamond> s

goal (1 subgoal):
 1. \<not> \<U> s \<longrightarrow> (\<forall>x. if LB dir s x = None \<or> UB dir s x = None then True else lt dir (the (LB dir s x)) (the (UB dir s x)) \<or> the (LB dir s x) = the (UB dir s x))
[PROOF STEP]
by (auto simp add: bounds_consistent_def) (erule_tac x=x in allE, auto)+
[PROOF STATE]
proof (state)
this:
\<not> \<U> s \<longrightarrow> (\<forall>x. if LB dir s x = None \<or> UB dir s x = None then True else lt dir (the (LB dir s x)) (the (UB dir s x)) \<or> the (LB dir s x) = the (UB dir s x))

goal (6 subgoals):
 1. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> \<not> \<U> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) \<longrightarrow> (\<forall>xa. if LB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = None \<or> UB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = None then True else lt dir (the (LB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa)) (the (UB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa)) \<or> the (LB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa) = the (UB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa))
 2. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<notin> lvars (\<T> s); lt dir c (\<langle>\<V> s\<rangle> x); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> \<not> \<U> (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) \<longrightarrow> (\<forall>xa. if LB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = None \<or> UB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = None then True else lt dir (the (LB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa)) (the (UB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa)) \<or> the (LB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa) = the (UB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa))
 3. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<in> lvars (\<T> s); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> \<not> \<U> (update\<B>\<I> (UBI_upd dir) i x c s) \<longrightarrow> (\<forall>xa. if LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = None \<or> UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = None then True else lt dir (the (LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa)) (the (UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa)) \<or> the (LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa) = the (UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa))
 4. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x); \<not> lt dir c (\<langle>\<V> s\<rangle> x)\<rbrakk> \<Longrightarrow> \<not> \<U> (update\<B>\<I> (UBI_upd dir) i x c s) \<longrightarrow> (\<forall>xa. if LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = None \<or> UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = None then True else lt dir (the (LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa)) (the (UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa)) \<or> the (LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa) = the (UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa))
 5. \<And>s. (\<not> \<U> s \<longrightarrow> \<diamond> s) = (\<not> \<U> s \<longrightarrow> (\<forall>x. if \<B>\<^sub>u s x = None \<or> \<B>\<^sub>l s x = None then True else the (\<B>\<^sub>l s x) < the (\<B>\<^sub>u s x) \<or> the (\<B>\<^sub>u s x) = the (\<B>\<^sub>l s x)))
 6. \<And>s. (\<not> \<U> s \<longrightarrow> \<diamond> s) = (\<not> \<U> s \<longrightarrow> (\<forall>x. if \<B>\<^sub>l s x = None \<or> \<B>\<^sub>u s x = None then True else the (\<B>\<^sub>l s x) < the (\<B>\<^sub>u s x) \<or> the (\<B>\<^sub>l s x) = the (\<B>\<^sub>u s x)))
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (6 subgoals):
 1. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> \<not> \<U> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) \<longrightarrow> (\<forall>xa. if LB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = None \<or> UB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = None then True else lt dir (the (LB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa)) (the (UB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa)) \<or> the (LB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa) = the (UB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa))
 2. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<notin> lvars (\<T> s); lt dir c (\<langle>\<V> s\<rangle> x); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> \<not> \<U> (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) \<longrightarrow> (\<forall>xa. if LB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = None \<or> UB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = None then True else lt dir (the (LB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa)) (the (UB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa)) \<or> the (LB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa) = the (UB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa))
 3. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<in> lvars (\<T> s); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> \<not> \<U> (update\<B>\<I> (UBI_upd dir) i x c s) \<longrightarrow> (\<forall>xa. if LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = None \<or> UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = None then True else lt dir (the (LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa)) (the (UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa)) \<or> the (LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa) = the (UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa))
 4. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x); \<not> lt dir c (\<langle>\<V> s\<rangle> x)\<rbrakk> \<Longrightarrow> \<not> \<U> (update\<B>\<I> (UBI_upd dir) i x c s) \<longrightarrow> (\<forall>xa. if LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = None \<or> UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = None then True else lt dir (the (LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa)) (the (UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa)) \<or> the (LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa) = the (UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa))
 5. \<And>s. (\<not> \<U> s \<longrightarrow> \<diamond> s) = (\<not> \<U> s \<longrightarrow> (\<forall>x. if \<B>\<^sub>u s x = None \<or> \<B>\<^sub>l s x = None then True else the (\<B>\<^sub>l s x) < the (\<B>\<^sub>u s x) \<or> the (\<B>\<^sub>u s x) = the (\<B>\<^sub>l s x)))
 6. \<And>s. (\<not> \<U> s \<longrightarrow> \<diamond> s) = (\<not> \<U> s \<longrightarrow> (\<forall>x. if \<B>\<^sub>l s x = None \<or> \<B>\<^sub>u s x = None then True else the (\<B>\<^sub>l s x) < the (\<B>\<^sub>u s x) \<or> the (\<B>\<^sub>l s x) = the (\<B>\<^sub>u s x)))
[PROOF STEP]
fix x c and dir :: "('i,'a) Direction"
[PROOF STATE]
proof (state)
goal (6 subgoals):
 1. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> \<not> \<U> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) \<longrightarrow> (\<forall>xa. if LB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = None \<or> UB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = None then True else lt dir (the (LB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa)) (the (UB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa)) \<or> the (LB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa) = the (UB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa))
 2. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<notin> lvars (\<T> s); lt dir c (\<langle>\<V> s\<rangle> x); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> \<not> \<U> (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) \<longrightarrow> (\<forall>xa. if LB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = None \<or> UB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = None then True else lt dir (the (LB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa)) (the (UB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa)) \<or> the (LB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa) = the (UB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa))
 3. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<in> lvars (\<T> s); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> \<not> \<U> (update\<B>\<I> (UBI_upd dir) i x c s) \<longrightarrow> (\<forall>xa. if LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = None \<or> UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = None then True else lt dir (the (LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa)) (the (UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa)) \<or> the (LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa) = the (UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa))
 4. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x); \<not> lt dir c (\<langle>\<V> s\<rangle> x)\<rbrakk> \<Longrightarrow> \<not> \<U> (update\<B>\<I> (UBI_upd dir) i x c s) \<longrightarrow> (\<forall>xa. if LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = None \<or> UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = None then True else lt dir (the (LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa)) (the (UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa)) \<or> the (LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa) = the (UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa))
 5. \<And>s. (\<not> \<U> s \<longrightarrow> \<diamond> s) = (\<not> \<U> s \<longrightarrow> (\<forall>x. if \<B>\<^sub>u s x = None \<or> \<B>\<^sub>l s x = None then True else the (\<B>\<^sub>l s x) < the (\<B>\<^sub>u s x) \<or> the (\<B>\<^sub>u s x) = the (\<B>\<^sub>l s x)))
 6. \<And>s. (\<not> \<U> s \<longrightarrow> \<diamond> s) = (\<not> \<U> s \<longrightarrow> (\<forall>x. if \<B>\<^sub>l s x = None \<or> \<B>\<^sub>u s x = None then True else the (\<B>\<^sub>l s x) < the (\<B>\<^sub>u s x) \<or> the (\<B>\<^sub>l s x) = the (\<B>\<^sub>u s x)))
[PROOF STEP]
let ?s' = "update x c (update\<B>\<I> (UBI_upd dir) i x c s)"
[PROOF STATE]
proof (state)
goal (6 subgoals):
 1. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> \<not> \<U> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) \<longrightarrow> (\<forall>xa. if LB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = None \<or> UB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = None then True else lt dir (the (LB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa)) (the (UB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa)) \<or> the (LB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa) = the (UB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa))
 2. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<notin> lvars (\<T> s); lt dir c (\<langle>\<V> s\<rangle> x); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> \<not> \<U> (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) \<longrightarrow> (\<forall>xa. if LB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = None \<or> UB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = None then True else lt dir (the (LB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa)) (the (UB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa)) \<or> the (LB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa) = the (UB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa))
 3. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<in> lvars (\<T> s); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> \<not> \<U> (update\<B>\<I> (UBI_upd dir) i x c s) \<longrightarrow> (\<forall>xa. if LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = None \<or> UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = None then True else lt dir (the (LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa)) (the (UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa)) \<or> the (LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa) = the (UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa))
 4. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x); \<not> lt dir c (\<langle>\<V> s\<rangle> x)\<rbrakk> \<Longrightarrow> \<not> \<U> (update\<B>\<I> (UBI_upd dir) i x c s) \<longrightarrow> (\<forall>xa. if LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = None \<or> UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = None then True else lt dir (the (LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa)) (the (UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa)) \<or> the (LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa) = the (UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa))
 5. \<And>s. (\<not> \<U> s \<longrightarrow> \<diamond> s) = (\<not> \<U> s \<longrightarrow> (\<forall>x. if \<B>\<^sub>u s x = None \<or> \<B>\<^sub>l s x = None then True else the (\<B>\<^sub>l s x) < the (\<B>\<^sub>u s x) \<or> the (\<B>\<^sub>u s x) = the (\<B>\<^sub>l s x)))
 6. \<And>s. (\<not> \<U> s \<longrightarrow> \<diamond> s) = (\<not> \<U> s \<longrightarrow> (\<forall>x. if \<B>\<^sub>l s x = None \<or> \<B>\<^sub>u s x = None then True else the (\<B>\<^sub>l s x) < the (\<B>\<^sub>u s x) \<or> the (\<B>\<^sub>l s x) = the (\<B>\<^sub>u s x)))
[PROOF STEP]
assume "dir = Positive \<or> dir = Negative" "x \<notin> lvars (\<T> s)"
        "\<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x)" "\<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)"
[PROOF STATE]
proof (state)
this:
dir = Positive \<or> dir = Negative
x \<notin> lvars (\<T> s)
\<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x)
\<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)

goal (6 subgoals):
 1. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> \<not> \<U> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) \<longrightarrow> (\<forall>xa. if LB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = None \<or> UB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = None then True else lt dir (the (LB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa)) (the (UB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa)) \<or> the (LB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa) = the (UB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa))
 2. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<notin> lvars (\<T> s); lt dir c (\<langle>\<V> s\<rangle> x); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> \<not> \<U> (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) \<longrightarrow> (\<forall>xa. if LB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = None \<or> UB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = None then True else lt dir (the (LB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa)) (the (UB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa)) \<or> the (LB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa) = the (UB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa))
 3. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<in> lvars (\<T> s); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> \<not> \<U> (update\<B>\<I> (UBI_upd dir) i x c s) \<longrightarrow> (\<forall>xa. if LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = None \<or> UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = None then True else lt dir (the (LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa)) (the (UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa)) \<or> the (LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa) = the (UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa))
 4. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x); \<not> lt dir c (\<langle>\<V> s\<rangle> x)\<rbrakk> \<Longrightarrow> \<not> \<U> (update\<B>\<I> (UBI_upd dir) i x c s) \<longrightarrow> (\<forall>xa. if LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = None \<or> UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = None then True else lt dir (the (LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa)) (the (UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa)) \<or> the (LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa) = the (UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa))
 5. \<And>s. (\<not> \<U> s \<longrightarrow> \<diamond> s) = (\<not> \<U> s \<longrightarrow> (\<forall>x. if \<B>\<^sub>u s x = None \<or> \<B>\<^sub>l s x = None then True else the (\<B>\<^sub>l s x) < the (\<B>\<^sub>u s x) \<or> the (\<B>\<^sub>u s x) = the (\<B>\<^sub>l s x)))
 6. \<And>s. (\<not> \<U> s \<longrightarrow> \<diamond> s) = (\<not> \<U> s \<longrightarrow> (\<forall>x. if \<B>\<^sub>l s x = None \<or> \<B>\<^sub>u s x = None then True else the (\<B>\<^sub>l s x) < the (\<B>\<^sub>u s x) \<or> the (\<B>\<^sub>l s x) = the (\<B>\<^sub>u s x)))
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
dir = Positive \<or> dir = Negative
x \<notin> lvars (\<T> s)
\<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x)
\<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)
[PROOF STEP]
show "?P'' dir ?s'"
[PROOF STATE]
proof (prove)
using this:
dir = Positive \<or> dir = Negative
x \<notin> lvars (\<T> s)
\<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x)
\<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)

goal (1 subgoal):
 1. \<not> \<U> (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) \<longrightarrow> (\<forall>xa. if LB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = None \<or> UB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = None then True else lt dir (the (LB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa)) (the (UB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa)) \<or> the (LB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa) = the (UB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa))
[PROOF STEP]
using \<open>\<diamond> s\<close> *
[PROOF STATE]
proof (prove)
using this:
dir = Positive \<or> dir = Negative
x \<notin> lvars (\<T> s)
\<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x)
\<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)
\<diamond> s
\<not> \<U> s
\<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s
\<diamond> s
\<triangle> (\<T> s)
\<nabla> s

goal (1 subgoal):
 1. \<not> \<U> (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) \<longrightarrow> (\<forall>xa. if LB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = None \<or> UB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = None then True else lt dir (the (LB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa)) (the (UB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa)) \<or> the (LB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa) = the (UB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa))
[PROOF STEP]
unfolding bounds_consistent_def
[PROOF STATE]
proof (prove)
using this:
dir = Positive \<or> dir = Negative
x \<notin> lvars (\<T> s)
\<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x)
\<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)
\<forall>x. if \<B>\<^sub>l s x = None \<or> \<B>\<^sub>u s x = None then True else the (\<B>\<^sub>l s x) \<le> the (\<B>\<^sub>u s x)
\<not> \<U> s
\<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s
\<forall>x. if \<B>\<^sub>l s x = None \<or> \<B>\<^sub>u s x = None then True else the (\<B>\<^sub>l s x) \<le> the (\<B>\<^sub>u s x)
\<triangle> (\<T> s)
\<nabla> s

goal (1 subgoal):
 1. \<not> \<U> (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) \<longrightarrow> (\<forall>xa. if LB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = None \<or> UB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = None then True else lt dir (the (LB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa)) (the (UB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa)) \<or> the (LB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa) = the (UB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa))
[PROOF STEP]
by (auto simp add: update_bounds_id tableau_valuated_def bounds_updates split: if_splits)
          (force simp add: bound_compare'_defs, erule_tac x=xa in allE, simp)+
[PROOF STATE]
proof (state)
this:
\<not> \<U> (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) \<longrightarrow> (\<forall>xa. if LB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = None \<or> UB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa = None then True else lt dir (the (LB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa)) (the (UB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa)) \<or> the (LB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa) = the (UB dir (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) xa))

goal (5 subgoals):
 1. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> \<not> \<U> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) \<longrightarrow> (\<forall>xa. if LB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = None \<or> UB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = None then True else lt dir (the (LB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa)) (the (UB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa)) \<or> the (LB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa) = the (UB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa))
 2. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<in> lvars (\<T> s); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> \<not> \<U> (update\<B>\<I> (UBI_upd dir) i x c s) \<longrightarrow> (\<forall>xa. if LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = None \<or> UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = None then True else lt dir (the (LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa)) (the (UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa)) \<or> the (LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa) = the (UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa))
 3. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x); \<not> lt dir c (\<langle>\<V> s\<rangle> x)\<rbrakk> \<Longrightarrow> \<not> \<U> (update\<B>\<I> (UBI_upd dir) i x c s) \<longrightarrow> (\<forall>xa. if LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = None \<or> UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = None then True else lt dir (the (LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa)) (the (UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa)) \<or> the (LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa) = the (UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa))
 4. \<And>s. (\<not> \<U> s \<longrightarrow> \<diamond> s) = (\<not> \<U> s \<longrightarrow> (\<forall>x. if \<B>\<^sub>u s x = None \<or> \<B>\<^sub>l s x = None then True else the (\<B>\<^sub>l s x) < the (\<B>\<^sub>u s x) \<or> the (\<B>\<^sub>u s x) = the (\<B>\<^sub>l s x)))
 5. \<And>s. (\<not> \<U> s \<longrightarrow> \<diamond> s) = (\<not> \<U> s \<longrightarrow> (\<forall>x. if \<B>\<^sub>l s x = None \<or> \<B>\<^sub>u s x = None then True else the (\<B>\<^sub>l s x) < the (\<B>\<^sub>u s x) \<or> the (\<B>\<^sub>l s x) = the (\<B>\<^sub>u s x)))
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (5 subgoals):
 1. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> \<not> \<U> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) \<longrightarrow> (\<forall>xa. if LB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = None \<or> UB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = None then True else lt dir (the (LB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa)) (the (UB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa)) \<or> the (LB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa) = the (UB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa))
 2. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<in> lvars (\<T> s); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> \<not> \<U> (update\<B>\<I> (UBI_upd dir) i x c s) \<longrightarrow> (\<forall>xa. if LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = None \<or> UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = None then True else lt dir (the (LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa)) (the (UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa)) \<or> the (LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa) = the (UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa))
 3. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x); \<not> lt dir c (\<langle>\<V> s\<rangle> x)\<rbrakk> \<Longrightarrow> \<not> \<U> (update\<B>\<I> (UBI_upd dir) i x c s) \<longrightarrow> (\<forall>xa. if LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = None \<or> UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = None then True else lt dir (the (LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa)) (the (UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa)) \<or> the (LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa) = the (UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa))
 4. \<And>s. (\<not> \<U> s \<longrightarrow> \<diamond> s) = (\<not> \<U> s \<longrightarrow> (\<forall>x. if \<B>\<^sub>u s x = None \<or> \<B>\<^sub>l s x = None then True else the (\<B>\<^sub>l s x) < the (\<B>\<^sub>u s x) \<or> the (\<B>\<^sub>u s x) = the (\<B>\<^sub>l s x)))
 5. \<And>s. (\<not> \<U> s \<longrightarrow> \<diamond> s) = (\<not> \<U> s \<longrightarrow> (\<forall>x. if \<B>\<^sub>l s x = None \<or> \<B>\<^sub>u s x = None then True else the (\<B>\<^sub>l s x) < the (\<B>\<^sub>u s x) \<or> the (\<B>\<^sub>l s x) = the (\<B>\<^sub>u s x)))
[PROOF STEP]
fix x c and dir :: "('i,'a) Direction"
[PROOF STATE]
proof (state)
goal (5 subgoals):
 1. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> \<not> \<U> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) \<longrightarrow> (\<forall>xa. if LB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = None \<or> UB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = None then True else lt dir (the (LB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa)) (the (UB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa)) \<or> the (LB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa) = the (UB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa))
 2. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<in> lvars (\<T> s); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> \<not> \<U> (update\<B>\<I> (UBI_upd dir) i x c s) \<longrightarrow> (\<forall>xa. if LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = None \<or> UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = None then True else lt dir (the (LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa)) (the (UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa)) \<or> the (LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa) = the (UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa))
 3. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x); \<not> lt dir c (\<langle>\<V> s\<rangle> x)\<rbrakk> \<Longrightarrow> \<not> \<U> (update\<B>\<I> (UBI_upd dir) i x c s) \<longrightarrow> (\<forall>xa. if LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = None \<or> UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = None then True else lt dir (the (LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa)) (the (UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa)) \<or> the (LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa) = the (UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa))
 4. \<And>s. (\<not> \<U> s \<longrightarrow> \<diamond> s) = (\<not> \<U> s \<longrightarrow> (\<forall>x. if \<B>\<^sub>u s x = None \<or> \<B>\<^sub>l s x = None then True else the (\<B>\<^sub>l s x) < the (\<B>\<^sub>u s x) \<or> the (\<B>\<^sub>u s x) = the (\<B>\<^sub>l s x)))
 5. \<And>s. (\<not> \<U> s \<longrightarrow> \<diamond> s) = (\<not> \<U> s \<longrightarrow> (\<forall>x. if \<B>\<^sub>l s x = None \<or> \<B>\<^sub>u s x = None then True else the (\<B>\<^sub>l s x) < the (\<B>\<^sub>u s x) \<or> the (\<B>\<^sub>l s x) = the (\<B>\<^sub>u s x)))
[PROOF STEP]
let ?s' = "update\<B>\<I> (UBI_upd dir) i x c s"
[PROOF STATE]
proof (state)
goal (5 subgoals):
 1. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> \<not> \<U> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) \<longrightarrow> (\<forall>xa. if LB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = None \<or> UB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = None then True else lt dir (the (LB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa)) (the (UB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa)) \<or> the (LB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa) = the (UB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa))
 2. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<in> lvars (\<T> s); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> \<not> \<U> (update\<B>\<I> (UBI_upd dir) i x c s) \<longrightarrow> (\<forall>xa. if LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = None \<or> UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = None then True else lt dir (the (LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa)) (the (UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa)) \<or> the (LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa) = the (UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa))
 3. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x); \<not> lt dir c (\<langle>\<V> s\<rangle> x)\<rbrakk> \<Longrightarrow> \<not> \<U> (update\<B>\<I> (UBI_upd dir) i x c s) \<longrightarrow> (\<forall>xa. if LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = None \<or> UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = None then True else lt dir (the (LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa)) (the (UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa)) \<or> the (LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa) = the (UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa))
 4. \<And>s. (\<not> \<U> s \<longrightarrow> \<diamond> s) = (\<not> \<U> s \<longrightarrow> (\<forall>x. if \<B>\<^sub>u s x = None \<or> \<B>\<^sub>l s x = None then True else the (\<B>\<^sub>l s x) < the (\<B>\<^sub>u s x) \<or> the (\<B>\<^sub>u s x) = the (\<B>\<^sub>l s x)))
 5. \<And>s. (\<not> \<U> s \<longrightarrow> \<diamond> s) = (\<not> \<U> s \<longrightarrow> (\<forall>x. if \<B>\<^sub>l s x = None \<or> \<B>\<^sub>u s x = None then True else the (\<B>\<^sub>l s x) < the (\<B>\<^sub>u s x) \<or> the (\<B>\<^sub>l s x) = the (\<B>\<^sub>u s x)))
[PROOF STEP]
assume "\<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x)" "\<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)"
        "dir = Positive \<or> dir = Negative"
[PROOF STATE]
proof (state)
this:
\<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x)
\<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)
dir = Positive \<or> dir = Negative

goal (5 subgoals):
 1. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> \<not> \<U> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) \<longrightarrow> (\<forall>xa. if LB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = None \<or> UB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = None then True else lt dir (the (LB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa)) (the (UB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa)) \<or> the (LB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa) = the (UB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa))
 2. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<in> lvars (\<T> s); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> \<not> \<U> (update\<B>\<I> (UBI_upd dir) i x c s) \<longrightarrow> (\<forall>xa. if LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = None \<or> UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = None then True else lt dir (the (LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa)) (the (UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa)) \<or> the (LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa) = the (UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa))
 3. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x); \<not> lt dir c (\<langle>\<V> s\<rangle> x)\<rbrakk> \<Longrightarrow> \<not> \<U> (update\<B>\<I> (UBI_upd dir) i x c s) \<longrightarrow> (\<forall>xa. if LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = None \<or> UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = None then True else lt dir (the (LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa)) (the (UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa)) \<or> the (LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa) = the (UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa))
 4. \<And>s. (\<not> \<U> s \<longrightarrow> \<diamond> s) = (\<not> \<U> s \<longrightarrow> (\<forall>x. if \<B>\<^sub>u s x = None \<or> \<B>\<^sub>l s x = None then True else the (\<B>\<^sub>l s x) < the (\<B>\<^sub>u s x) \<or> the (\<B>\<^sub>u s x) = the (\<B>\<^sub>l s x)))
 5. \<And>s. (\<not> \<U> s \<longrightarrow> \<diamond> s) = (\<not> \<U> s \<longrightarrow> (\<forall>x. if \<B>\<^sub>l s x = None \<or> \<B>\<^sub>u s x = None then True else the (\<B>\<^sub>l s x) < the (\<B>\<^sub>u s x) \<or> the (\<B>\<^sub>l s x) = the (\<B>\<^sub>u s x)))
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
\<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x)
\<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)
dir = Positive \<or> dir = Negative
[PROOF STEP]
have "?P'' dir ?s'"
[PROOF STATE]
proof (prove)
using this:
\<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x)
\<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)
dir = Positive \<or> dir = Negative

goal (1 subgoal):
 1. \<not> \<U> (update\<B>\<I> (UBI_upd dir) i x c s) \<longrightarrow> (\<forall>xa. if LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = None \<or> UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = None then True else lt dir (the (LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa)) (the (UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa)) \<or> the (LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa) = the (UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa))
[PROOF STEP]
using \<open>\<diamond> s\<close>
[PROOF STATE]
proof (prove)
using this:
\<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x)
\<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)
dir = Positive \<or> dir = Negative
\<diamond> s

goal (1 subgoal):
 1. \<not> \<U> (update\<B>\<I> (UBI_upd dir) i x c s) \<longrightarrow> (\<forall>xa. if LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = None \<or> UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = None then True else lt dir (the (LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa)) (the (UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa)) \<or> the (LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa) = the (UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa))
[PROOF STEP]
unfolding bounds_consistent_def
[PROOF STATE]
proof (prove)
using this:
\<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x)
\<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)
dir = Positive \<or> dir = Negative
\<forall>x. if \<B>\<^sub>l s x = None \<or> \<B>\<^sub>u s x = None then True else the (\<B>\<^sub>l s x) \<le> the (\<B>\<^sub>u s x)

goal (1 subgoal):
 1. \<not> \<U> (update\<B>\<I> (UBI_upd dir) i x c s) \<longrightarrow> (\<forall>xa. if LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = None \<or> UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = None then True else lt dir (the (LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa)) (the (UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa)) \<or> the (LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa) = the (UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa))
[PROOF STEP]
by (auto split: if_splits simp: bounds_updates)
          (force simp add: bound_compare'_defs, erule_tac x=xa in allE, simp)+
[PROOF STATE]
proof (state)
this:
\<not> \<U> (update\<B>\<I> (UBI_upd dir) i x c s) \<longrightarrow> (\<forall>xa. if LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = None \<or> UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = None then True else lt dir (the (LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa)) (the (UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa)) \<or> the (LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa) = the (UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa))

goal (5 subgoals):
 1. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> \<not> \<U> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) \<longrightarrow> (\<forall>xa. if LB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = None \<or> UB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = None then True else lt dir (the (LB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa)) (the (UB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa)) \<or> the (LB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa) = the (UB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa))
 2. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<in> lvars (\<T> s); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> \<not> \<U> (update\<B>\<I> (UBI_upd dir) i x c s) \<longrightarrow> (\<forall>xa. if LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = None \<or> UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = None then True else lt dir (the (LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa)) (the (UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa)) \<or> the (LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa) = the (UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa))
 3. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x); \<not> lt dir c (\<langle>\<V> s\<rangle> x)\<rbrakk> \<Longrightarrow> \<not> \<U> (update\<B>\<I> (UBI_upd dir) i x c s) \<longrightarrow> (\<forall>xa. if LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = None \<or> UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = None then True else lt dir (the (LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa)) (the (UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa)) \<or> the (LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa) = the (UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa))
 4. \<And>s. (\<not> \<U> s \<longrightarrow> \<diamond> s) = (\<not> \<U> s \<longrightarrow> (\<forall>x. if \<B>\<^sub>u s x = None \<or> \<B>\<^sub>l s x = None then True else the (\<B>\<^sub>l s x) < the (\<B>\<^sub>u s x) \<or> the (\<B>\<^sub>u s x) = the (\<B>\<^sub>l s x)))
 5. \<And>s. (\<not> \<U> s \<longrightarrow> \<diamond> s) = (\<not> \<U> s \<longrightarrow> (\<forall>x. if \<B>\<^sub>l s x = None \<or> \<B>\<^sub>u s x = None then True else the (\<B>\<^sub>l s x) < the (\<B>\<^sub>u s x) \<or> the (\<B>\<^sub>l s x) = the (\<B>\<^sub>u s x)))
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
\<not> \<U> (update\<B>\<I> (UBI_upd dir) i x c s) \<longrightarrow> (\<forall>xa. if LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = None \<or> UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = None then True else lt dir (the (LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa)) (the (UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa)) \<or> the (LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa) = the (UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa))
[PROOF STEP]
show "?P'' dir ?s'" "?P'' dir ?s'"
[PROOF STATE]
proof (prove)
using this:
\<not> \<U> (update\<B>\<I> (UBI_upd dir) i x c s) \<longrightarrow> (\<forall>xa. if LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = None \<or> UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = None then True else lt dir (the (LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa)) (the (UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa)) \<or> the (LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa) = the (UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa))

goal (1 subgoal):
 1. \<not> \<U> (update\<B>\<I> (UBI_upd dir) i x c s) \<longrightarrow> (\<forall>xa. if LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = None \<or> UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = None then True else lt dir (the (LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa)) (the (UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa)) \<or> the (LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa) = the (UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa)) &&& \<not> \<U> (update\<B>\<I> (UBI_upd dir) i x c s) \<longrightarrow> (\<forall>xa. if LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = None \<or> UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = None then True else lt dir (the (LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa)) (the (UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa)) \<or> the (LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa) = the (UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa))
[PROOF STEP]
by simp_all
[PROOF STATE]
proof (state)
this:
\<not> \<U> (update\<B>\<I> (UBI_upd dir) i x c s) \<longrightarrow> (\<forall>xa. if LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = None \<or> UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = None then True else lt dir (the (LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa)) (the (UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa)) \<or> the (LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa) = the (UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa))
\<not> \<U> (update\<B>\<I> (UBI_upd dir) i x c s) \<longrightarrow> (\<forall>xa. if LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = None \<or> UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = None then True else lt dir (the (LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa)) (the (UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa)) \<or> the (LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa) = the (UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa))

goal (3 subgoals):
 1. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> \<not> \<U> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) \<longrightarrow> (\<forall>xa. if LB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = None \<or> UB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa = None then True else lt dir (the (LB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa)) (the (UB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa)) \<or> the (LB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa) = the (UB dir (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s)) xa))
 2. \<And>s. (\<not> \<U> s \<longrightarrow> \<diamond> s) = (\<not> \<U> s \<longrightarrow> (\<forall>x. if \<B>\<^sub>u s x = None \<or> \<B>\<^sub>l s x = None then True else the (\<B>\<^sub>l s x) < the (\<B>\<^sub>u s x) \<or> the (\<B>\<^sub>u s x) = the (\<B>\<^sub>l s x)))
 3. \<And>s. (\<not> \<U> s \<longrightarrow> \<diamond> s) = (\<not> \<U> s \<longrightarrow> (\<forall>x. if \<B>\<^sub>l s x = None \<or> \<B>\<^sub>u s x = None then True else the (\<B>\<^sub>l s x) < the (\<B>\<^sub>u s x) \<or> the (\<B>\<^sub>l s x) = the (\<B>\<^sub>u s x)))
[PROOF STEP]
qed (auto simp add: x xx)
[PROOF STATE]
proof (state)
this:
\<not> \<U> (assert_bound ia s) \<longrightarrow> \<diamond> (assert_bound ia s)

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
\<not> \<U> (assert_bound ia s) \<longrightarrow> \<diamond> (assert_bound ia s)

goal (5 subgoals):
 1. \<And>s a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; \<not> \<U> (assert_bound a s)\<rbrakk> \<Longrightarrow> \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s (assert_bound a s) \<and> \<diamond> (assert_bound a s)
 2. \<And>s ats a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; (snd ` ats) \<doteq> \<B> s\<rbrakk> \<Longrightarrow> (snd ` (ats \<union> {a})) \<doteq> \<B> (assert_bound a s)
 3. \<And>s ats a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; ats \<Turnstile>\<^sub>i \<B>\<I> s\<rbrakk> \<Longrightarrow> insert a ats \<Turnstile>\<^sub>i \<B>\<I> (assert_bound a s)
 4. \<And>s a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s\<rbrakk> \<Longrightarrow> \<nabla> (assert_bound a s)
 5. \<And>s as a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; index_valid as s\<rbrakk> \<Longrightarrow> index_valid (insert a as) (assert_bound a s)
[PROOF STEP]
ultimately
[PROOF STATE]
proof (chain)
picking this:
\<langle>\<V> (assert_bound ia s)\<rangle> \<Turnstile>\<^sub>t \<T> (assert_bound ia s)
\<not> \<U> (assert_bound ia s) \<longrightarrow> \<langle>\<V> (assert_bound ia s)\<rangle> \<Turnstile>\<^sub>b \<B> (assert_bound ia s) \<parallel> - lvars (\<T> (assert_bound ia s))
\<not> \<U> (assert_bound ia s) \<longrightarrow> \<diamond> (assert_bound ia s)
[PROOF STEP]
show "\<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s (assert_bound ia s) \<and> \<diamond> (assert_bound ia s)"
[PROOF STATE]
proof (prove)
using this:
\<langle>\<V> (assert_bound ia s)\<rangle> \<Turnstile>\<^sub>t \<T> (assert_bound ia s)
\<not> \<U> (assert_bound ia s) \<longrightarrow> \<langle>\<V> (assert_bound ia s)\<rangle> \<Turnstile>\<^sub>b \<B> (assert_bound ia s) \<parallel> - lvars (\<T> (assert_bound ia s))
\<not> \<U> (assert_bound ia s) \<longrightarrow> \<diamond> (assert_bound ia s)

goal (1 subgoal):
 1. \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s (assert_bound ia s) \<and> \<diamond> (assert_bound ia s)
[PROOF STEP]
using \<open>?lhs\<close>
[PROOF STATE]
proof (prove)
using this:
\<langle>\<V> (assert_bound ia s)\<rangle> \<Turnstile>\<^sub>t \<T> (assert_bound ia s)
\<not> \<U> (assert_bound ia s) \<longrightarrow> \<langle>\<V> (assert_bound ia s)\<rangle> \<Turnstile>\<^sub>b \<B> (assert_bound ia s) \<parallel> - lvars (\<T> (assert_bound ia s))
\<not> \<U> (assert_bound ia s) \<longrightarrow> \<diamond> (assert_bound ia s)
\<not> \<U> (assert_bound ia s)

goal (1 subgoal):
 1. \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s (assert_bound ia s) \<and> \<diamond> (assert_bound ia s)
[PROOF STEP]
unfolding curr_val_satisfies_no_lhs_def
[PROOF STATE]
proof (prove)
using this:
\<langle>\<V> (assert_bound ia s)\<rangle> \<Turnstile>\<^sub>t \<T> (assert_bound ia s)
\<not> \<U> (assert_bound ia s) \<longrightarrow> \<langle>\<V> (assert_bound ia s)\<rangle> \<Turnstile>\<^sub>b \<B> (assert_bound ia s) \<parallel> - lvars (\<T> (assert_bound ia s))
\<not> \<U> (assert_bound ia s) \<longrightarrow> \<diamond> (assert_bound ia s)
\<not> \<U> (assert_bound ia s)

goal (1 subgoal):
 1. (\<langle>\<V> (assert_bound ia s)\<rangle> \<Turnstile>\<^sub>t \<T> (assert_bound ia s) \<and> \<langle>\<V> (assert_bound ia s)\<rangle> \<Turnstile>\<^sub>b \<B> (assert_bound ia s) \<parallel> - lvars (\<T> (assert_bound ia s))) \<and> \<diamond> (assert_bound ia s)
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
\<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s (assert_bound ia s) \<and> \<diamond> (assert_bound ia s)

goal (4 subgoals):
 1. \<And>s ats a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; (snd ` ats) \<doteq> \<B> s\<rbrakk> \<Longrightarrow> (snd ` (ats \<union> {a})) \<doteq> \<B> (assert_bound a s)
 2. \<And>s ats a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; ats \<Turnstile>\<^sub>i \<B>\<I> s\<rbrakk> \<Longrightarrow> insert a ats \<Turnstile>\<^sub>i \<B>\<I> (assert_bound a s)
 3. \<And>s a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s\<rbrakk> \<Longrightarrow> \<nabla> (assert_bound a s)
 4. \<And>s as a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; index_valid as s\<rbrakk> \<Longrightarrow> index_valid (insert a as) (assert_bound a s)
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (4 subgoals):
 1. \<And>s ats a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; (snd ` ats) \<doteq> \<B> s\<rbrakk> \<Longrightarrow> (snd ` (ats \<union> {a})) \<doteq> \<B> (assert_bound a s)
 2. \<And>s ats a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; ats \<Turnstile>\<^sub>i \<B>\<I> s\<rbrakk> \<Longrightarrow> insert a ats \<Turnstile>\<^sub>i \<B>\<I> (assert_bound a s)
 3. \<And>s a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s\<rbrakk> \<Longrightarrow> \<nabla> (assert_bound a s)
 4. \<And>s as a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; index_valid as s\<rbrakk> \<Longrightarrow> index_valid (insert a as) (assert_bound a s)
[PROOF STEP]
fix s :: "('i,'a) state" and ats and ia :: "('i,'a) i_atom"
[PROOF STATE]
proof (state)
goal (4 subgoals):
 1. \<And>s ats a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; (snd ` ats) \<doteq> \<B> s\<rbrakk> \<Longrightarrow> (snd ` (ats \<union> {a})) \<doteq> \<B> (assert_bound a s)
 2. \<And>s ats a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; ats \<Turnstile>\<^sub>i \<B>\<I> s\<rbrakk> \<Longrightarrow> insert a ats \<Turnstile>\<^sub>i \<B>\<I> (assert_bound a s)
 3. \<And>s a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s\<rbrakk> \<Longrightarrow> \<nabla> (assert_bound a s)
 4. \<And>s as a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; index_valid as s\<rbrakk> \<Longrightarrow> index_valid (insert a as) (assert_bound a s)
[PROOF STEP]
assume "\<not> \<U> s" "\<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s" "\<triangle> (\<T> s)" "\<nabla> s"
[PROOF STATE]
proof (state)
this:
\<not> \<U> s
\<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s
\<triangle> (\<T> s)
\<nabla> s

goal (4 subgoals):
 1. \<And>s ats a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; (snd ` ats) \<doteq> \<B> s\<rbrakk> \<Longrightarrow> (snd ` (ats \<union> {a})) \<doteq> \<B> (assert_bound a s)
 2. \<And>s ats a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; ats \<Turnstile>\<^sub>i \<B>\<I> s\<rbrakk> \<Longrightarrow> insert a ats \<Turnstile>\<^sub>i \<B>\<I> (assert_bound a s)
 3. \<And>s a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s\<rbrakk> \<Longrightarrow> \<nabla> (assert_bound a s)
 4. \<And>s as a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; index_valid as s\<rbrakk> \<Longrightarrow> index_valid (insert a as) (assert_bound a s)
[PROOF STEP]
obtain i a where ia: "ia = (i,a)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (\<And>i a. ia = (i, a) \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by force
[PROOF STATE]
proof (state)
this:
ia = (i, a)

goal (4 subgoals):
 1. \<And>s ats a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; (snd ` ats) \<doteq> \<B> s\<rbrakk> \<Longrightarrow> (snd ` (ats \<union> {a})) \<doteq> \<B> (assert_bound a s)
 2. \<And>s ats a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; ats \<Turnstile>\<^sub>i \<B>\<I> s\<rbrakk> \<Longrightarrow> insert a ats \<Turnstile>\<^sub>i \<B>\<I> (assert_bound a s)
 3. \<And>s a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s\<rbrakk> \<Longrightarrow> \<nabla> (assert_bound a s)
 4. \<And>s as a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; index_valid as s\<rbrakk> \<Longrightarrow> index_valid (insert a as) (assert_bound a s)
[PROOF STEP]
{
[PROOF STATE]
proof (state)
this:
ia = (i, a)

goal (4 subgoals):
 1. \<And>s ats a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; (snd ` ats) \<doteq> \<B> s\<rbrakk> \<Longrightarrow> (snd ` (ats \<union> {a})) \<doteq> \<B> (assert_bound a s)
 2. \<And>s ats a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; ats \<Turnstile>\<^sub>i \<B>\<I> s\<rbrakk> \<Longrightarrow> insert a ats \<Turnstile>\<^sub>i \<B>\<I> (assert_bound a s)
 3. \<And>s a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s\<rbrakk> \<Longrightarrow> \<nabla> (assert_bound a s)
 4. \<And>s as a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; index_valid as s\<rbrakk> \<Longrightarrow> index_valid (insert a as) (assert_bound a s)
[PROOF STEP]
fix ats
[PROOF STATE]
proof (state)
goal (4 subgoals):
 1. \<And>s ats a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; (snd ` ats) \<doteq> \<B> s\<rbrakk> \<Longrightarrow> (snd ` (ats \<union> {a})) \<doteq> \<B> (assert_bound a s)
 2. \<And>s ats a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; ats \<Turnstile>\<^sub>i \<B>\<I> s\<rbrakk> \<Longrightarrow> insert a ats \<Turnstile>\<^sub>i \<B>\<I> (assert_bound a s)
 3. \<And>s a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s\<rbrakk> \<Longrightarrow> \<nabla> (assert_bound a s)
 4. \<And>s as a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; index_valid as s\<rbrakk> \<Longrightarrow> index_valid (insert a as) (assert_bound a s)
[PROOF STEP]
let ?P' = "\<lambda> lt UBI LBI UB LB UB_upd UI LI LE GE s'. ats \<doteq> \<B> s \<longrightarrow> (ats \<union> {a}) \<doteq> \<B> s'"
[PROOF STATE]
proof (state)
goal (4 subgoals):
 1. \<And>s ats a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; (snd ` ats) \<doteq> \<B> s\<rbrakk> \<Longrightarrow> (snd ` (ats \<union> {a})) \<doteq> \<B> (assert_bound a s)
 2. \<And>s ats a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; ats \<Turnstile>\<^sub>i \<B>\<I> s\<rbrakk> \<Longrightarrow> insert a ats \<Turnstile>\<^sub>i \<B>\<I> (assert_bound a s)
 3. \<And>s a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s\<rbrakk> \<Longrightarrow> \<nabla> (assert_bound a s)
 4. \<And>s as a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; index_valid as s\<rbrakk> \<Longrightarrow> index_valid (insert a as) (assert_bound a s)
[PROOF STEP]
let ?P'' = "\<lambda> dir. ?P' (lt dir) (UB dir) (LB dir) (UBI_upd dir) (UI dir) (LI dir) (LE dir) (GE dir)"
[PROOF STATE]
proof (state)
goal (4 subgoals):
 1. \<And>s ats a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; (snd ` ats) \<doteq> \<B> s\<rbrakk> \<Longrightarrow> (snd ` (ats \<union> {a})) \<doteq> \<B> (assert_bound a s)
 2. \<And>s ats a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; ats \<Turnstile>\<^sub>i \<B>\<I> s\<rbrakk> \<Longrightarrow> insert a ats \<Turnstile>\<^sub>i \<B>\<I> (assert_bound a s)
 3. \<And>s a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s\<rbrakk> \<Longrightarrow> \<nabla> (assert_bound a s)
 4. \<And>s as a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; index_valid as s\<rbrakk> \<Longrightarrow> index_valid (insert a as) (assert_bound a s)
[PROOF STEP]
have "ats \<doteq> \<B> s \<longrightarrow> (ats \<union> {a}) \<doteq> \<B> (assert_bound ia s)" (is "?P (assert_bound ia s)")
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. ats \<doteq> \<B> s \<longrightarrow> (ats \<union> {a}) \<doteq> \<B> (assert_bound ia s)
[PROOF STEP]
unfolding ia
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. ats \<doteq> \<B> s \<longrightarrow> (ats \<union> {a}) \<doteq> \<B> (assert_bound (i, a) s)
[PROOF STEP]
proof (rule assert_bound_cases[of _ _ ?P'])
[PROOF STATE]
proof (state)
goal (7 subgoals):
 1. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x)\<rbrakk> \<Longrightarrow> ats \<doteq> \<B> s \<longrightarrow> (ats \<union> {a}) \<doteq> \<B> s
 2. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> ats \<doteq> \<B> s \<longrightarrow> (ats \<union> {a}) \<doteq> \<B> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s))
 3. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<notin> lvars (\<T> s); lt dir c (\<langle>\<V> s\<rangle> x); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> ats \<doteq> \<B> s \<longrightarrow> (ats \<union> {a}) \<doteq> \<B> (update x c (update\<B>\<I> (UBI_upd dir) i x c s))
 4. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<in> lvars (\<T> s); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> ats \<doteq> \<B> s \<longrightarrow> (ats \<union> {a}) \<doteq> \<B> (update\<B>\<I> (UBI_upd dir) i x c s)
 5. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x); \<not> lt dir c (\<langle>\<V> s\<rangle> x)\<rbrakk> \<Longrightarrow> ats \<doteq> \<B> s \<longrightarrow> (ats \<union> {a}) \<doteq> \<B> (update\<B>\<I> (UBI_upd dir) i x c s)
 6. \<And>sa. (ats \<doteq> \<B> s \<longrightarrow> (ats \<union> {a}) \<doteq> \<B> sa) = (ats \<doteq> \<B> s \<longrightarrow> (ats \<union> {a}) \<doteq> \<B> sa)
 7. \<And>sa. (ats \<doteq> \<B> s \<longrightarrow> (ats \<union> {a}) \<doteq> \<B> sa) = (ats \<doteq> \<B> s \<longrightarrow> (ats \<union> {a}) \<doteq> \<B> sa)
[PROOF STEP]
fix x c and dir :: "('i,'a) Direction"
[PROOF STATE]
proof (state)
goal (7 subgoals):
 1. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x)\<rbrakk> \<Longrightarrow> ats \<doteq> \<B> s \<longrightarrow> (ats \<union> {a}) \<doteq> \<B> s
 2. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> ats \<doteq> \<B> s \<longrightarrow> (ats \<union> {a}) \<doteq> \<B> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s))
 3. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<notin> lvars (\<T> s); lt dir c (\<langle>\<V> s\<rangle> x); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> ats \<doteq> \<B> s \<longrightarrow> (ats \<union> {a}) \<doteq> \<B> (update x c (update\<B>\<I> (UBI_upd dir) i x c s))
 4. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<in> lvars (\<T> s); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> ats \<doteq> \<B> s \<longrightarrow> (ats \<union> {a}) \<doteq> \<B> (update\<B>\<I> (UBI_upd dir) i x c s)
 5. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x); \<not> lt dir c (\<langle>\<V> s\<rangle> x)\<rbrakk> \<Longrightarrow> ats \<doteq> \<B> s \<longrightarrow> (ats \<union> {a}) \<doteq> \<B> (update\<B>\<I> (UBI_upd dir) i x c s)
 6. \<And>sa. (ats \<doteq> \<B> s \<longrightarrow> (ats \<union> {a}) \<doteq> \<B> sa) = (ats \<doteq> \<B> s \<longrightarrow> (ats \<union> {a}) \<doteq> \<B> sa)
 7. \<And>sa. (ats \<doteq> \<B> s \<longrightarrow> (ats \<union> {a}) \<doteq> \<B> sa) = (ats \<doteq> \<B> s \<longrightarrow> (ats \<union> {a}) \<doteq> \<B> sa)
[PROOF STEP]
assume "dir = Positive \<or> dir = Negative" "a = LE dir x c" "\<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x)"
[PROOF STATE]
proof (state)
this:
dir = Positive \<or> dir = Negative
a = LE dir x c
\<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x)

goal (7 subgoals):
 1. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x)\<rbrakk> \<Longrightarrow> ats \<doteq> \<B> s \<longrightarrow> (ats \<union> {a}) \<doteq> \<B> s
 2. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> ats \<doteq> \<B> s \<longrightarrow> (ats \<union> {a}) \<doteq> \<B> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s))
 3. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<notin> lvars (\<T> s); lt dir c (\<langle>\<V> s\<rangle> x); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> ats \<doteq> \<B> s \<longrightarrow> (ats \<union> {a}) \<doteq> \<B> (update x c (update\<B>\<I> (UBI_upd dir) i x c s))
 4. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<in> lvars (\<T> s); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> ats \<doteq> \<B> s \<longrightarrow> (ats \<union> {a}) \<doteq> \<B> (update\<B>\<I> (UBI_upd dir) i x c s)
 5. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x); \<not> lt dir c (\<langle>\<V> s\<rangle> x)\<rbrakk> \<Longrightarrow> ats \<doteq> \<B> s \<longrightarrow> (ats \<union> {a}) \<doteq> \<B> (update\<B>\<I> (UBI_upd dir) i x c s)
 6. \<And>sa. (ats \<doteq> \<B> s \<longrightarrow> (ats \<union> {a}) \<doteq> \<B> sa) = (ats \<doteq> \<B> s \<longrightarrow> (ats \<union> {a}) \<doteq> \<B> sa)
 7. \<And>sa. (ats \<doteq> \<B> s \<longrightarrow> (ats \<union> {a}) \<doteq> \<B> sa) = (ats \<doteq> \<B> s \<longrightarrow> (ats \<union> {a}) \<doteq> \<B> sa)
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
dir = Positive \<or> dir = Negative
a = LE dir x c
\<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x)
[PROOF STEP]
show "?P s"
[PROOF STATE]
proof (prove)
using this:
dir = Positive \<or> dir = Negative
a = LE dir x c
\<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x)

goal (1 subgoal):
 1. ats \<doteq> \<B> s \<longrightarrow> (ats \<union> {a}) \<doteq> \<B> s
[PROOF STEP]
unfolding atoms_equiv_bounds.simps satisfies_atom_set_def satisfies_bounds.simps
[PROOF STATE]
proof (prove)
using this:
dir = Positive \<or> dir = Negative
a = LE dir x c
\<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x)

goal (1 subgoal):
 1. (\<forall>v. (\<forall>a\<in>ats. v \<Turnstile>\<^sub>a a) = (\<forall>x. in_bounds x v (\<B> s))) \<longrightarrow> (\<forall>v. (\<forall>a\<in>ats \<union> {a}. v \<Turnstile>\<^sub>a a) = (\<forall>x. in_bounds x v (\<B> s)))
[PROOF STEP]
by auto (erule_tac x=x in allE, force simp add: bound_compare_defs)+
[PROOF STATE]
proof (state)
this:
ats \<doteq> \<B> s \<longrightarrow> (ats \<union> {a}) \<doteq> \<B> s

goal (6 subgoals):
 1. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> ats \<doteq> \<B> s \<longrightarrow> (ats \<union> {a}) \<doteq> \<B> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s))
 2. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<notin> lvars (\<T> s); lt dir c (\<langle>\<V> s\<rangle> x); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> ats \<doteq> \<B> s \<longrightarrow> (ats \<union> {a}) \<doteq> \<B> (update x c (update\<B>\<I> (UBI_upd dir) i x c s))
 3. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<in> lvars (\<T> s); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> ats \<doteq> \<B> s \<longrightarrow> (ats \<union> {a}) \<doteq> \<B> (update\<B>\<I> (UBI_upd dir) i x c s)
 4. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x); \<not> lt dir c (\<langle>\<V> s\<rangle> x)\<rbrakk> \<Longrightarrow> ats \<doteq> \<B> s \<longrightarrow> (ats \<union> {a}) \<doteq> \<B> (update\<B>\<I> (UBI_upd dir) i x c s)
 5. \<And>sa. (ats \<doteq> \<B> s \<longrightarrow> (ats \<union> {a}) \<doteq> \<B> sa) = (ats \<doteq> \<B> s \<longrightarrow> (ats \<union> {a}) \<doteq> \<B> sa)
 6. \<And>sa. (ats \<doteq> \<B> s \<longrightarrow> (ats \<union> {a}) \<doteq> \<B> sa) = (ats \<doteq> \<B> s \<longrightarrow> (ats \<union> {a}) \<doteq> \<B> sa)
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (6 subgoals):
 1. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> ats \<doteq> \<B> s \<longrightarrow> (ats \<union> {a}) \<doteq> \<B> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s))
 2. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<notin> lvars (\<T> s); lt dir c (\<langle>\<V> s\<rangle> x); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> ats \<doteq> \<B> s \<longrightarrow> (ats \<union> {a}) \<doteq> \<B> (update x c (update\<B>\<I> (UBI_upd dir) i x c s))
 3. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<in> lvars (\<T> s); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> ats \<doteq> \<B> s \<longrightarrow> (ats \<union> {a}) \<doteq> \<B> (update\<B>\<I> (UBI_upd dir) i x c s)
 4. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x); \<not> lt dir c (\<langle>\<V> s\<rangle> x)\<rbrakk> \<Longrightarrow> ats \<doteq> \<B> s \<longrightarrow> (ats \<union> {a}) \<doteq> \<B> (update\<B>\<I> (UBI_upd dir) i x c s)
 5. \<And>sa. (ats \<doteq> \<B> s \<longrightarrow> (ats \<union> {a}) \<doteq> \<B> sa) = (ats \<doteq> \<B> s \<longrightarrow> (ats \<union> {a}) \<doteq> \<B> sa)
 6. \<And>sa. (ats \<doteq> \<B> s \<longrightarrow> (ats \<union> {a}) \<doteq> \<B> sa) = (ats \<doteq> \<B> s \<longrightarrow> (ats \<union> {a}) \<doteq> \<B> sa)
[PROOF STEP]
fix x c and dir :: "('i,'a) Direction"
[PROOF STATE]
proof (state)
goal (6 subgoals):
 1. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> ats \<doteq> \<B> s \<longrightarrow> (ats \<union> {a}) \<doteq> \<B> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s))
 2. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<notin> lvars (\<T> s); lt dir c (\<langle>\<V> s\<rangle> x); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> ats \<doteq> \<B> s \<longrightarrow> (ats \<union> {a}) \<doteq> \<B> (update x c (update\<B>\<I> (UBI_upd dir) i x c s))
 3. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<in> lvars (\<T> s); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> ats \<doteq> \<B> s \<longrightarrow> (ats \<union> {a}) \<doteq> \<B> (update\<B>\<I> (UBI_upd dir) i x c s)
 4. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x); \<not> lt dir c (\<langle>\<V> s\<rangle> x)\<rbrakk> \<Longrightarrow> ats \<doteq> \<B> s \<longrightarrow> (ats \<union> {a}) \<doteq> \<B> (update\<B>\<I> (UBI_upd dir) i x c s)
 5. \<And>sa. (ats \<doteq> \<B> s \<longrightarrow> (ats \<union> {a}) \<doteq> \<B> sa) = (ats \<doteq> \<B> s \<longrightarrow> (ats \<union> {a}) \<doteq> \<B> sa)
 6. \<And>sa. (ats \<doteq> \<B> s \<longrightarrow> (ats \<union> {a}) \<doteq> \<B> sa) = (ats \<doteq> \<B> s \<longrightarrow> (ats \<union> {a}) \<doteq> \<B> sa)
[PROOF STEP]
let ?s' = "set_unsat [i, ((LI dir) s x)] (update\<B>\<I> (UBI_upd dir) i x c s)"
[PROOF STATE]
proof (state)
goal (6 subgoals):
 1. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> ats \<doteq> \<B> s \<longrightarrow> (ats \<union> {a}) \<doteq> \<B> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s))
 2. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<notin> lvars (\<T> s); lt dir c (\<langle>\<V> s\<rangle> x); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> ats \<doteq> \<B> s \<longrightarrow> (ats \<union> {a}) \<doteq> \<B> (update x c (update\<B>\<I> (UBI_upd dir) i x c s))
 3. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<in> lvars (\<T> s); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> ats \<doteq> \<B> s \<longrightarrow> (ats \<union> {a}) \<doteq> \<B> (update\<B>\<I> (UBI_upd dir) i x c s)
 4. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x); \<not> lt dir c (\<langle>\<V> s\<rangle> x)\<rbrakk> \<Longrightarrow> ats \<doteq> \<B> s \<longrightarrow> (ats \<union> {a}) \<doteq> \<B> (update\<B>\<I> (UBI_upd dir) i x c s)
 5. \<And>sa. (ats \<doteq> \<B> s \<longrightarrow> (ats \<union> {a}) \<doteq> \<B> sa) = (ats \<doteq> \<B> s \<longrightarrow> (ats \<union> {a}) \<doteq> \<B> sa)
 6. \<And>sa. (ats \<doteq> \<B> s \<longrightarrow> (ats \<union> {a}) \<doteq> \<B> sa) = (ats \<doteq> \<B> s \<longrightarrow> (ats \<union> {a}) \<doteq> \<B> sa)
[PROOF STEP]
assume "dir = Positive \<or> dir = Negative" "a = LE dir x c" "\<not> (\<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x))"
[PROOF STATE]
proof (state)
this:
dir = Positive \<or> dir = Negative
a = LE dir x c
\<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x)

goal (6 subgoals):
 1. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> ats \<doteq> \<B> s \<longrightarrow> (ats \<union> {a}) \<doteq> \<B> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s))
 2. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<notin> lvars (\<T> s); lt dir c (\<langle>\<V> s\<rangle> x); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> ats \<doteq> \<B> s \<longrightarrow> (ats \<union> {a}) \<doteq> \<B> (update x c (update\<B>\<I> (UBI_upd dir) i x c s))
 3. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<in> lvars (\<T> s); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> ats \<doteq> \<B> s \<longrightarrow> (ats \<union> {a}) \<doteq> \<B> (update\<B>\<I> (UBI_upd dir) i x c s)
 4. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x); \<not> lt dir c (\<langle>\<V> s\<rangle> x)\<rbrakk> \<Longrightarrow> ats \<doteq> \<B> s \<longrightarrow> (ats \<union> {a}) \<doteq> \<B> (update\<B>\<I> (UBI_upd dir) i x c s)
 5. \<And>sa. (ats \<doteq> \<B> s \<longrightarrow> (ats \<union> {a}) \<doteq> \<B> sa) = (ats \<doteq> \<B> s \<longrightarrow> (ats \<union> {a}) \<doteq> \<B> sa)
 6. \<And>sa. (ats \<doteq> \<B> s \<longrightarrow> (ats \<union> {a}) \<doteq> \<B> sa) = (ats \<doteq> \<B> s \<longrightarrow> (ats \<union> {a}) \<doteq> \<B> sa)
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
dir = Positive \<or> dir = Negative
a = LE dir x c
\<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x)
[PROOF STEP]
show "?P ?s'"
[PROOF STATE]
proof (prove)
using this:
dir = Positive \<or> dir = Negative
a = LE dir x c
\<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x)

goal (1 subgoal):
 1. ats \<doteq> \<B> s \<longrightarrow> (ats \<union> {a}) \<doteq> \<B> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s))
[PROOF STEP]
unfolding set_unsat_bounds_id
[PROOF STATE]
proof (prove)
using this:
dir = Positive \<or> dir = Negative
a = LE dir x c
\<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x)

goal (1 subgoal):
 1. ats \<doteq> \<B> s \<longrightarrow> (ats \<union> {a}) \<doteq> \<B> (update\<B>\<I> (UBI_upd dir) i x c s)
[PROOF STEP]
using atoms_equiv_bounds_extend[of dir c s x ats i]
[PROOF STATE]
proof (prove)
using this:
dir = Positive \<or> dir = Negative
a = LE dir x c
\<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x)
\<lbrakk>dir = Positive \<or> dir = Negative; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); ats \<doteq> \<B> s\<rbrakk> \<Longrightarrow> (ats \<union> {LE dir x c}) \<doteq> \<B> (update\<B>\<I> (UBI_upd dir) i x c s)

goal (1 subgoal):
 1. ats \<doteq> \<B> s \<longrightarrow> (ats \<union> {a}) \<doteq> \<B> (update\<B>\<I> (UBI_upd dir) i x c s)
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
ats \<doteq> \<B> s \<longrightarrow> (ats \<union> {a}) \<doteq> \<B> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s))

goal (5 subgoals):
 1. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<notin> lvars (\<T> s); lt dir c (\<langle>\<V> s\<rangle> x); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> ats \<doteq> \<B> s \<longrightarrow> (ats \<union> {a}) \<doteq> \<B> (update x c (update\<B>\<I> (UBI_upd dir) i x c s))
 2. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<in> lvars (\<T> s); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> ats \<doteq> \<B> s \<longrightarrow> (ats \<union> {a}) \<doteq> \<B> (update\<B>\<I> (UBI_upd dir) i x c s)
 3. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x); \<not> lt dir c (\<langle>\<V> s\<rangle> x)\<rbrakk> \<Longrightarrow> ats \<doteq> \<B> s \<longrightarrow> (ats \<union> {a}) \<doteq> \<B> (update\<B>\<I> (UBI_upd dir) i x c s)
 4. \<And>sa. (ats \<doteq> \<B> s \<longrightarrow> (ats \<union> {a}) \<doteq> \<B> sa) = (ats \<doteq> \<B> s \<longrightarrow> (ats \<union> {a}) \<doteq> \<B> sa)
 5. \<And>sa. (ats \<doteq> \<B> s \<longrightarrow> (ats \<union> {a}) \<doteq> \<B> sa) = (ats \<doteq> \<B> s \<longrightarrow> (ats \<union> {a}) \<doteq> \<B> sa)
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (5 subgoals):
 1. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<notin> lvars (\<T> s); lt dir c (\<langle>\<V> s\<rangle> x); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> ats \<doteq> \<B> s \<longrightarrow> (ats \<union> {a}) \<doteq> \<B> (update x c (update\<B>\<I> (UBI_upd dir) i x c s))
 2. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<in> lvars (\<T> s); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> ats \<doteq> \<B> s \<longrightarrow> (ats \<union> {a}) \<doteq> \<B> (update\<B>\<I> (UBI_upd dir) i x c s)
 3. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x); \<not> lt dir c (\<langle>\<V> s\<rangle> x)\<rbrakk> \<Longrightarrow> ats \<doteq> \<B> s \<longrightarrow> (ats \<union> {a}) \<doteq> \<B> (update\<B>\<I> (UBI_upd dir) i x c s)
 4. \<And>sa. (ats \<doteq> \<B> s \<longrightarrow> (ats \<union> {a}) \<doteq> \<B> sa) = (ats \<doteq> \<B> s \<longrightarrow> (ats \<union> {a}) \<doteq> \<B> sa)
 5. \<And>sa. (ats \<doteq> \<B> s \<longrightarrow> (ats \<union> {a}) \<doteq> \<B> sa) = (ats \<doteq> \<B> s \<longrightarrow> (ats \<union> {a}) \<doteq> \<B> sa)
[PROOF STEP]
fix x c and dir :: "('i,'a) Direction"
[PROOF STATE]
proof (state)
goal (5 subgoals):
 1. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<notin> lvars (\<T> s); lt dir c (\<langle>\<V> s\<rangle> x); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> ats \<doteq> \<B> s \<longrightarrow> (ats \<union> {a}) \<doteq> \<B> (update x c (update\<B>\<I> (UBI_upd dir) i x c s))
 2. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<in> lvars (\<T> s); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> ats \<doteq> \<B> s \<longrightarrow> (ats \<union> {a}) \<doteq> \<B> (update\<B>\<I> (UBI_upd dir) i x c s)
 3. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x); \<not> lt dir c (\<langle>\<V> s\<rangle> x)\<rbrakk> \<Longrightarrow> ats \<doteq> \<B> s \<longrightarrow> (ats \<union> {a}) \<doteq> \<B> (update\<B>\<I> (UBI_upd dir) i x c s)
 4. \<And>sa. (ats \<doteq> \<B> s \<longrightarrow> (ats \<union> {a}) \<doteq> \<B> sa) = (ats \<doteq> \<B> s \<longrightarrow> (ats \<union> {a}) \<doteq> \<B> sa)
 5. \<And>sa. (ats \<doteq> \<B> s \<longrightarrow> (ats \<union> {a}) \<doteq> \<B> sa) = (ats \<doteq> \<B> s \<longrightarrow> (ats \<union> {a}) \<doteq> \<B> sa)
[PROOF STEP]
let ?s' = "update\<B>\<I> (UBI_upd dir) i x c s"
[PROOF STATE]
proof (state)
goal (5 subgoals):
 1. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<notin> lvars (\<T> s); lt dir c (\<langle>\<V> s\<rangle> x); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> ats \<doteq> \<B> s \<longrightarrow> (ats \<union> {a}) \<doteq> \<B> (update x c (update\<B>\<I> (UBI_upd dir) i x c s))
 2. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<in> lvars (\<T> s); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> ats \<doteq> \<B> s \<longrightarrow> (ats \<union> {a}) \<doteq> \<B> (update\<B>\<I> (UBI_upd dir) i x c s)
 3. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x); \<not> lt dir c (\<langle>\<V> s\<rangle> x)\<rbrakk> \<Longrightarrow> ats \<doteq> \<B> s \<longrightarrow> (ats \<union> {a}) \<doteq> \<B> (update\<B>\<I> (UBI_upd dir) i x c s)
 4. \<And>sa. (ats \<doteq> \<B> s \<longrightarrow> (ats \<union> {a}) \<doteq> \<B> sa) = (ats \<doteq> \<B> s \<longrightarrow> (ats \<union> {a}) \<doteq> \<B> sa)
 5. \<And>sa. (ats \<doteq> \<B> s \<longrightarrow> (ats \<union> {a}) \<doteq> \<B> sa) = (ats \<doteq> \<B> s \<longrightarrow> (ats \<union> {a}) \<doteq> \<B> sa)
[PROOF STEP]
assume "dir = Positive \<or> dir = Negative" "a = LE dir x c" "\<not> (\<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x))"
[PROOF STATE]
proof (state)
this:
dir = Positive \<or> dir = Negative
a = LE dir x c
\<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x)

goal (5 subgoals):
 1. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<notin> lvars (\<T> s); lt dir c (\<langle>\<V> s\<rangle> x); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> ats \<doteq> \<B> s \<longrightarrow> (ats \<union> {a}) \<doteq> \<B> (update x c (update\<B>\<I> (UBI_upd dir) i x c s))
 2. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<in> lvars (\<T> s); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> ats \<doteq> \<B> s \<longrightarrow> (ats \<union> {a}) \<doteq> \<B> (update\<B>\<I> (UBI_upd dir) i x c s)
 3. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x); \<not> lt dir c (\<langle>\<V> s\<rangle> x)\<rbrakk> \<Longrightarrow> ats \<doteq> \<B> s \<longrightarrow> (ats \<union> {a}) \<doteq> \<B> (update\<B>\<I> (UBI_upd dir) i x c s)
 4. \<And>sa. (ats \<doteq> \<B> s \<longrightarrow> (ats \<union> {a}) \<doteq> \<B> sa) = (ats \<doteq> \<B> s \<longrightarrow> (ats \<union> {a}) \<doteq> \<B> sa)
 5. \<And>sa. (ats \<doteq> \<B> s \<longrightarrow> (ats \<union> {a}) \<doteq> \<B> sa) = (ats \<doteq> \<B> s \<longrightarrow> (ats \<union> {a}) \<doteq> \<B> sa)
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
dir = Positive \<or> dir = Negative
a = LE dir x c
\<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x)
[PROOF STEP]
have "?P ?s'"
[PROOF STATE]
proof (prove)
using this:
dir = Positive \<or> dir = Negative
a = LE dir x c
\<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x)

goal (1 subgoal):
 1. ats \<doteq> \<B> s \<longrightarrow> (ats \<union> {a}) \<doteq> \<B> (update\<B>\<I> (UBI_upd dir) i x c s)
[PROOF STEP]
using atoms_equiv_bounds_extend[of dir c s x ats i]
[PROOF STATE]
proof (prove)
using this:
dir = Positive \<or> dir = Negative
a = LE dir x c
\<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x)
\<lbrakk>dir = Positive \<or> dir = Negative; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); ats \<doteq> \<B> s\<rbrakk> \<Longrightarrow> (ats \<union> {LE dir x c}) \<doteq> \<B> (update\<B>\<I> (UBI_upd dir) i x c s)

goal (1 subgoal):
 1. ats \<doteq> \<B> s \<longrightarrow> (ats \<union> {a}) \<doteq> \<B> (update\<B>\<I> (UBI_upd dir) i x c s)
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
ats \<doteq> \<B> s \<longrightarrow> (ats \<union> {a}) \<doteq> \<B> (update\<B>\<I> (UBI_upd dir) i x c s)

goal (5 subgoals):
 1. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<notin> lvars (\<T> s); lt dir c (\<langle>\<V> s\<rangle> x); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> ats \<doteq> \<B> s \<longrightarrow> (ats \<union> {a}) \<doteq> \<B> (update x c (update\<B>\<I> (UBI_upd dir) i x c s))
 2. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<in> lvars (\<T> s); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> ats \<doteq> \<B> s \<longrightarrow> (ats \<union> {a}) \<doteq> \<B> (update\<B>\<I> (UBI_upd dir) i x c s)
 3. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x); \<not> lt dir c (\<langle>\<V> s\<rangle> x)\<rbrakk> \<Longrightarrow> ats \<doteq> \<B> s \<longrightarrow> (ats \<union> {a}) \<doteq> \<B> (update\<B>\<I> (UBI_upd dir) i x c s)
 4. \<And>sa. (ats \<doteq> \<B> s \<longrightarrow> (ats \<union> {a}) \<doteq> \<B> sa) = (ats \<doteq> \<B> s \<longrightarrow> (ats \<union> {a}) \<doteq> \<B> sa)
 5. \<And>sa. (ats \<doteq> \<B> s \<longrightarrow> (ats \<union> {a}) \<doteq> \<B> sa) = (ats \<doteq> \<B> s \<longrightarrow> (ats \<union> {a}) \<doteq> \<B> sa)
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
ats \<doteq> \<B> s \<longrightarrow> (ats \<union> {a}) \<doteq> \<B> (update\<B>\<I> (UBI_upd dir) i x c s)
[PROOF STEP]
show "?P ?s'" "?P ?s'"
[PROOF STATE]
proof (prove)
using this:
ats \<doteq> \<B> s \<longrightarrow> (ats \<union> {a}) \<doteq> \<B> (update\<B>\<I> (UBI_upd dir) i x c s)

goal (1 subgoal):
 1. ats \<doteq> \<B> s \<longrightarrow> (ats \<union> {a}) \<doteq> \<B> (update\<B>\<I> (UBI_upd dir) i x c s) &&& ats \<doteq> \<B> s \<longrightarrow> (ats \<union> {a}) \<doteq> \<B> (update\<B>\<I> (UBI_upd dir) i x c s)
[PROOF STEP]
by simp_all
[PROOF STATE]
proof (state)
this:
ats \<doteq> \<B> s \<longrightarrow> (ats \<union> {a}) \<doteq> \<B> (update\<B>\<I> (UBI_upd dir) i x c s)
ats \<doteq> \<B> s \<longrightarrow> (ats \<union> {a}) \<doteq> \<B> (update\<B>\<I> (UBI_upd dir) i x c s)

goal (3 subgoals):
 1. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<notin> lvars (\<T> s); lt dir c (\<langle>\<V> s\<rangle> x); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> ats \<doteq> \<B> s \<longrightarrow> (ats \<union> {a}) \<doteq> \<B> (update x c (update\<B>\<I> (UBI_upd dir) i x c s))
 2. \<And>sa. (ats \<doteq> \<B> s \<longrightarrow> (ats \<union> {a}) \<doteq> \<B> sa) = (ats \<doteq> \<B> s \<longrightarrow> (ats \<union> {a}) \<doteq> \<B> sa)
 3. \<And>sa. (ats \<doteq> \<B> s \<longrightarrow> (ats \<union> {a}) \<doteq> \<B> sa) = (ats \<doteq> \<B> s \<longrightarrow> (ats \<union> {a}) \<doteq> \<B> sa)
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (3 subgoals):
 1. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<notin> lvars (\<T> s); lt dir c (\<langle>\<V> s\<rangle> x); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> ats \<doteq> \<B> s \<longrightarrow> (ats \<union> {a}) \<doteq> \<B> (update x c (update\<B>\<I> (UBI_upd dir) i x c s))
 2. \<And>sa. (ats \<doteq> \<B> s \<longrightarrow> (ats \<union> {a}) \<doteq> \<B> sa) = (ats \<doteq> \<B> s \<longrightarrow> (ats \<union> {a}) \<doteq> \<B> sa)
 3. \<And>sa. (ats \<doteq> \<B> s \<longrightarrow> (ats \<union> {a}) \<doteq> \<B> sa) = (ats \<doteq> \<B> s \<longrightarrow> (ats \<union> {a}) \<doteq> \<B> sa)
[PROOF STEP]
fix x c and dir :: "('i,'a) Direction"
[PROOF STATE]
proof (state)
goal (3 subgoals):
 1. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<notin> lvars (\<T> s); lt dir c (\<langle>\<V> s\<rangle> x); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> ats \<doteq> \<B> s \<longrightarrow> (ats \<union> {a}) \<doteq> \<B> (update x c (update\<B>\<I> (UBI_upd dir) i x c s))
 2. \<And>sa. (ats \<doteq> \<B> s \<longrightarrow> (ats \<union> {a}) \<doteq> \<B> sa) = (ats \<doteq> \<B> s \<longrightarrow> (ats \<union> {a}) \<doteq> \<B> sa)
 3. \<And>sa. (ats \<doteq> \<B> s \<longrightarrow> (ats \<union> {a}) \<doteq> \<B> sa) = (ats \<doteq> \<B> s \<longrightarrow> (ats \<union> {a}) \<doteq> \<B> sa)
[PROOF STEP]
let ?s = "update\<B>\<I> (UBI_upd dir) i x c s"
[PROOF STATE]
proof (state)
goal (3 subgoals):
 1. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<notin> lvars (\<T> s); lt dir c (\<langle>\<V> s\<rangle> x); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> ats \<doteq> \<B> s \<longrightarrow> (ats \<union> {a}) \<doteq> \<B> (update x c (update\<B>\<I> (UBI_upd dir) i x c s))
 2. \<And>sa. (ats \<doteq> \<B> s \<longrightarrow> (ats \<union> {a}) \<doteq> \<B> sa) = (ats \<doteq> \<B> s \<longrightarrow> (ats \<union> {a}) \<doteq> \<B> sa)
 3. \<And>sa. (ats \<doteq> \<B> s \<longrightarrow> (ats \<union> {a}) \<doteq> \<B> sa) = (ats \<doteq> \<B> s \<longrightarrow> (ats \<union> {a}) \<doteq> \<B> sa)
[PROOF STEP]
let ?s' = "update x c ?s"
[PROOF STATE]
proof (state)
goal (3 subgoals):
 1. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<notin> lvars (\<T> s); lt dir c (\<langle>\<V> s\<rangle> x); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> ats \<doteq> \<B> s \<longrightarrow> (ats \<union> {a}) \<doteq> \<B> (update x c (update\<B>\<I> (UBI_upd dir) i x c s))
 2. \<And>sa. (ats \<doteq> \<B> s \<longrightarrow> (ats \<union> {a}) \<doteq> \<B> sa) = (ats \<doteq> \<B> s \<longrightarrow> (ats \<union> {a}) \<doteq> \<B> sa)
 3. \<And>sa. (ats \<doteq> \<B> s \<longrightarrow> (ats \<union> {a}) \<doteq> \<B> sa) = (ats \<doteq> \<B> s \<longrightarrow> (ats \<union> {a}) \<doteq> \<B> sa)
[PROOF STEP]
assume *: "dir = Positive \<or> dir = Negative" "a = LE dir x c" "\<not> (\<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x))" "x \<notin> lvars (\<T> s)"
[PROOF STATE]
proof (state)
this:
dir = Positive \<or> dir = Negative
a = LE dir x c
\<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x)
x \<notin> lvars (\<T> s)

goal (3 subgoals):
 1. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<notin> lvars (\<T> s); lt dir c (\<langle>\<V> s\<rangle> x); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> ats \<doteq> \<B> s \<longrightarrow> (ats \<union> {a}) \<doteq> \<B> (update x c (update\<B>\<I> (UBI_upd dir) i x c s))
 2. \<And>sa. (ats \<doteq> \<B> s \<longrightarrow> (ats \<union> {a}) \<doteq> \<B> sa) = (ats \<doteq> \<B> s \<longrightarrow> (ats \<union> {a}) \<doteq> \<B> sa)
 3. \<And>sa. (ats \<doteq> \<B> s \<longrightarrow> (ats \<union> {a}) \<doteq> \<B> sa) = (ats \<doteq> \<B> s \<longrightarrow> (ats \<union> {a}) \<doteq> \<B> sa)
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
dir = Positive \<or> dir = Negative
a = LE dir x c
\<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x)
x \<notin> lvars (\<T> s)
[PROOF STEP]
have "\<triangle> (\<T> ?s)" "\<nabla> ?s" "x \<notin> lvars (\<T> ?s)"
[PROOF STATE]
proof (prove)
using this:
dir = Positive \<or> dir = Negative
a = LE dir x c
\<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x)
x \<notin> lvars (\<T> s)

goal (1 subgoal):
 1. \<triangle> (\<T> (update\<B>\<I> (UBI_upd dir) i x c s)) &&& \<nabla> (update\<B>\<I> (UBI_upd dir) i x c s) &&& x \<notin> lvars (\<T> (update\<B>\<I> (UBI_upd dir) i x c s))
[PROOF STEP]
using \<open>\<triangle> (\<T> s)\<close> \<open>\<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s\<close> \<open>\<nabla> s\<close>
[PROOF STATE]
proof (prove)
using this:
dir = Positive \<or> dir = Negative
a = LE dir x c
\<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x)
x \<notin> lvars (\<T> s)
\<triangle> (\<T> s)
\<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s
\<nabla> s

goal (1 subgoal):
 1. \<triangle> (\<T> (update\<B>\<I> (UBI_upd dir) i x c s)) &&& \<nabla> (update\<B>\<I> (UBI_upd dir) i x c s) &&& x \<notin> lvars (\<T> (update\<B>\<I> (UBI_upd dir) i x c s))
[PROOF STEP]
by (auto simp: tableau_valuated_def)
[PROOF STATE]
proof (state)
this:
\<triangle> (\<T> (update\<B>\<I> (UBI_upd dir) i x c s))
\<nabla> (update\<B>\<I> (UBI_upd dir) i x c s)
x \<notin> lvars (\<T> (update\<B>\<I> (UBI_upd dir) i x c s))

goal (3 subgoals):
 1. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<notin> lvars (\<T> s); lt dir c (\<langle>\<V> s\<rangle> x); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> ats \<doteq> \<B> s \<longrightarrow> (ats \<union> {a}) \<doteq> \<B> (update x c (update\<B>\<I> (UBI_upd dir) i x c s))
 2. \<And>sa. (ats \<doteq> \<B> s \<longrightarrow> (ats \<union> {a}) \<doteq> \<B> sa) = (ats \<doteq> \<B> s \<longrightarrow> (ats \<union> {a}) \<doteq> \<B> sa)
 3. \<And>sa. (ats \<doteq> \<B> s \<longrightarrow> (ats \<union> {a}) \<doteq> \<B> sa) = (ats \<doteq> \<B> s \<longrightarrow> (ats \<union> {a}) \<doteq> \<B> sa)
[PROOF STEP]
from update_bounds_id[OF this, of c]
[PROOF STATE]
proof (chain)
picking this:
\<B>\<^sub>i (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) = \<B>\<^sub>i (update\<B>\<I> (UBI_upd dir) i x c s)
\<B>\<I> (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) = \<B>\<I> (update\<B>\<I> (UBI_upd dir) i x c s)
\<B>\<^sub>l (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) = \<B>\<^sub>l (update\<B>\<I> (UBI_upd dir) i x c s)
\<B>\<^sub>u (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) = \<B>\<^sub>u (update\<B>\<I> (UBI_upd dir) i x c s)
[PROOF STEP]
have "\<B>\<^sub>i ?s' = \<B>\<^sub>i ?s"
[PROOF STATE]
proof (prove)
using this:
\<B>\<^sub>i (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) = \<B>\<^sub>i (update\<B>\<I> (UBI_upd dir) i x c s)
\<B>\<I> (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) = \<B>\<I> (update\<B>\<I> (UBI_upd dir) i x c s)
\<B>\<^sub>l (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) = \<B>\<^sub>l (update\<B>\<I> (UBI_upd dir) i x c s)
\<B>\<^sub>u (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) = \<B>\<^sub>u (update\<B>\<I> (UBI_upd dir) i x c s)

goal (1 subgoal):
 1. \<B>\<^sub>i (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) = \<B>\<^sub>i (update\<B>\<I> (UBI_upd dir) i x c s)
[PROOF STEP]
by blast
[PROOF STATE]
proof (state)
this:
\<B>\<^sub>i (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) = \<B>\<^sub>i (update\<B>\<I> (UBI_upd dir) i x c s)

goal (3 subgoals):
 1. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<notin> lvars (\<T> s); lt dir c (\<langle>\<V> s\<rangle> x); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> ats \<doteq> \<B> s \<longrightarrow> (ats \<union> {a}) \<doteq> \<B> (update x c (update\<B>\<I> (UBI_upd dir) i x c s))
 2. \<And>sa. (ats \<doteq> \<B> s \<longrightarrow> (ats \<union> {a}) \<doteq> \<B> sa) = (ats \<doteq> \<B> s \<longrightarrow> (ats \<union> {a}) \<doteq> \<B> sa)
 3. \<And>sa. (ats \<doteq> \<B> s \<longrightarrow> (ats \<union> {a}) \<doteq> \<B> sa) = (ats \<doteq> \<B> s \<longrightarrow> (ats \<union> {a}) \<doteq> \<B> sa)
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
\<B>\<^sub>i (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) = \<B>\<^sub>i (update\<B>\<I> (UBI_upd dir) i x c s)
[PROOF STEP]
have id: "\<B> ?s' = \<B> ?s"
[PROOF STATE]
proof (prove)
using this:
\<B>\<^sub>i (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) = \<B>\<^sub>i (update\<B>\<I> (UBI_upd dir) i x c s)

goal (1 subgoal):
 1. \<B> (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) = \<B> (update\<B>\<I> (UBI_upd dir) i x c s)
[PROOF STEP]
unfolding boundsl_def boundsu_def
[PROOF STATE]
proof (prove)
using this:
\<B>\<^sub>i (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) = \<B>\<^sub>i (update\<B>\<I> (UBI_upd dir) i x c s)

goal (1 subgoal):
 1. (map_option snd \<circ> Mapping.lookup (\<B>\<^sub>i\<^sub>l (update x c (update\<B>\<I> (UBI_upd dir) i x c s))), map_option snd \<circ> Mapping.lookup (\<B>\<^sub>i\<^sub>u (update x c (update\<B>\<I> (UBI_upd dir) i x c s)))) = (map_option snd \<circ> Mapping.lookup (\<B>\<^sub>i\<^sub>l (update\<B>\<I> (UBI_upd dir) i x c s)), map_option snd \<circ> Mapping.lookup (\<B>\<^sub>i\<^sub>u (update\<B>\<I> (UBI_upd dir) i x c s)))
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
\<B> (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) = \<B> (update\<B>\<I> (UBI_upd dir) i x c s)

goal (3 subgoals):
 1. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<notin> lvars (\<T> s); lt dir c (\<langle>\<V> s\<rangle> x); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> ats \<doteq> \<B> s \<longrightarrow> (ats \<union> {a}) \<doteq> \<B> (update x c (update\<B>\<I> (UBI_upd dir) i x c s))
 2. \<And>sa. (ats \<doteq> \<B> s \<longrightarrow> (ats \<union> {a}) \<doteq> \<B> sa) = (ats \<doteq> \<B> s \<longrightarrow> (ats \<union> {a}) \<doteq> \<B> sa)
 3. \<And>sa. (ats \<doteq> \<B> s \<longrightarrow> (ats \<union> {a}) \<doteq> \<B> sa) = (ats \<doteq> \<B> s \<longrightarrow> (ats \<union> {a}) \<doteq> \<B> sa)
[PROOF STEP]
show "?P ?s'"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. ats \<doteq> \<B> s \<longrightarrow> (ats \<union> {a}) \<doteq> \<B> (update x c (update\<B>\<I> (UBI_upd dir) i x c s))
[PROOF STEP]
unfolding id \<open>a = LE dir x c\<close>
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. ats \<doteq> \<B> s \<longrightarrow> (ats \<union> {LE dir x c}) \<doteq> \<B> (update\<B>\<I> (UBI_upd dir) i x c s)
[PROOF STEP]
by (intro impI atoms_equiv_bounds_extend[rule_format] *(1,3))
[PROOF STATE]
proof (state)
this:
ats \<doteq> \<B> s \<longrightarrow> (ats \<union> {a}) \<doteq> \<B> (update x c (update\<B>\<I> (UBI_upd dir) i x c s))

goal (2 subgoals):
 1. \<And>sa. (ats \<doteq> \<B> s \<longrightarrow> (ats \<union> {a}) \<doteq> \<B> sa) = (ats \<doteq> \<B> s \<longrightarrow> (ats \<union> {a}) \<doteq> \<B> sa)
 2. \<And>sa. (ats \<doteq> \<B> s \<longrightarrow> (ats \<union> {a}) \<doteq> \<B> sa) = (ats \<doteq> \<B> s \<longrightarrow> (ats \<union> {a}) \<doteq> \<B> sa)
[PROOF STEP]
qed simp_all
[PROOF STATE]
proof (state)
this:
ats \<doteq> \<B> s \<longrightarrow> (ats \<union> {a}) \<doteq> \<B> (assert_bound ia s)

goal (4 subgoals):
 1. \<And>s ats a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; (snd ` ats) \<doteq> \<B> s\<rbrakk> \<Longrightarrow> (snd ` (ats \<union> {a})) \<doteq> \<B> (assert_bound a s)
 2. \<And>s ats a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; ats \<Turnstile>\<^sub>i \<B>\<I> s\<rbrakk> \<Longrightarrow> insert a ats \<Turnstile>\<^sub>i \<B>\<I> (assert_bound a s)
 3. \<And>s a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s\<rbrakk> \<Longrightarrow> \<nabla> (assert_bound a s)
 4. \<And>s as a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; index_valid as s\<rbrakk> \<Longrightarrow> index_valid (insert a as) (assert_bound a s)
[PROOF STEP]
}
[PROOF STATE]
proof (state)
this:
?atsa2 \<doteq> \<B> s \<longrightarrow> (?atsa2 \<union> {a}) \<doteq> \<B> (assert_bound ia s)

goal (4 subgoals):
 1. \<And>s ats a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; (snd ` ats) \<doteq> \<B> s\<rbrakk> \<Longrightarrow> (snd ` (ats \<union> {a})) \<doteq> \<B> (assert_bound a s)
 2. \<And>s ats a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; ats \<Turnstile>\<^sub>i \<B>\<I> s\<rbrakk> \<Longrightarrow> insert a ats \<Turnstile>\<^sub>i \<B>\<I> (assert_bound a s)
 3. \<And>s a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s\<rbrakk> \<Longrightarrow> \<nabla> (assert_bound a s)
 4. \<And>s as a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; index_valid as s\<rbrakk> \<Longrightarrow> index_valid (insert a as) (assert_bound a s)
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
?atsa2 \<doteq> \<B> s \<longrightarrow> (?atsa2 \<union> {a}) \<doteq> \<B> (assert_bound ia s)
[PROOF STEP]
show "flat ats \<doteq> \<B> s \<Longrightarrow> flat (ats \<union> {ia}) \<doteq> \<B> (assert_bound ia s)"
[PROOF STATE]
proof (prove)
using this:
?atsa2 \<doteq> \<B> s \<longrightarrow> (?atsa2 \<union> {a}) \<doteq> \<B> (assert_bound ia s)

goal (1 subgoal):
 1. (snd ` ats) \<doteq> \<B> s \<Longrightarrow> (snd ` (ats \<union> {ia})) \<doteq> \<B> (assert_bound ia s)
[PROOF STEP]
unfolding ia
[PROOF STATE]
proof (prove)
using this:
?atsa2 \<doteq> \<B> s \<longrightarrow> (?atsa2 \<union> {a}) \<doteq> \<B> (assert_bound (i, a) s)

goal (1 subgoal):
 1. (snd ` ats) \<doteq> \<B> s \<Longrightarrow> (snd ` (ats \<union> {(i, a)})) \<doteq> \<B> (assert_bound (i, a) s)
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
(snd ` ats) \<doteq> \<B> s \<Longrightarrow> (snd ` (ats \<union> {ia})) \<doteq> \<B> (assert_bound ia s)

goal (3 subgoals):
 1. \<And>s ats a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; ats \<Turnstile>\<^sub>i \<B>\<I> s\<rbrakk> \<Longrightarrow> insert a ats \<Turnstile>\<^sub>i \<B>\<I> (assert_bound a s)
 2. \<And>s a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s\<rbrakk> \<Longrightarrow> \<nabla> (assert_bound a s)
 3. \<And>s as a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; index_valid as s\<rbrakk> \<Longrightarrow> index_valid (insert a as) (assert_bound a s)
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (3 subgoals):
 1. \<And>s ats a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; ats \<Turnstile>\<^sub>i \<B>\<I> s\<rbrakk> \<Longrightarrow> insert a ats \<Turnstile>\<^sub>i \<B>\<I> (assert_bound a s)
 2. \<And>s a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s\<rbrakk> \<Longrightarrow> \<nabla> (assert_bound a s)
 3. \<And>s as a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; index_valid as s\<rbrakk> \<Longrightarrow> index_valid (insert a as) (assert_bound a s)
[PROOF STEP]
fix s :: "('i,'a) state" and ats and ia :: "('i,'a) i_atom"
[PROOF STATE]
proof (state)
goal (3 subgoals):
 1. \<And>s ats a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; ats \<Turnstile>\<^sub>i \<B>\<I> s\<rbrakk> \<Longrightarrow> insert a ats \<Turnstile>\<^sub>i \<B>\<I> (assert_bound a s)
 2. \<And>s a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s\<rbrakk> \<Longrightarrow> \<nabla> (assert_bound a s)
 3. \<And>s as a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; index_valid as s\<rbrakk> \<Longrightarrow> index_valid (insert a as) (assert_bound a s)
[PROOF STEP]
obtain i a where ia: "ia = (i,a)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (\<And>i a. ia = (i, a) \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by force
[PROOF STATE]
proof (state)
this:
ia = (i, a)

goal (3 subgoals):
 1. \<And>s ats a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; ats \<Turnstile>\<^sub>i \<B>\<I> s\<rbrakk> \<Longrightarrow> insert a ats \<Turnstile>\<^sub>i \<B>\<I> (assert_bound a s)
 2. \<And>s a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s\<rbrakk> \<Longrightarrow> \<nabla> (assert_bound a s)
 3. \<And>s as a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; index_valid as s\<rbrakk> \<Longrightarrow> index_valid (insert a as) (assert_bound a s)
[PROOF STEP]
assume "\<not> \<U> s" "\<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s" "\<triangle> (\<T> s)" "\<nabla> s"
[PROOF STATE]
proof (state)
this:
\<not> \<U> s
\<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s
\<triangle> (\<T> s)
\<nabla> s

goal (3 subgoals):
 1. \<And>s ats a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; ats \<Turnstile>\<^sub>i \<B>\<I> s\<rbrakk> \<Longrightarrow> insert a ats \<Turnstile>\<^sub>i \<B>\<I> (assert_bound a s)
 2. \<And>s a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s\<rbrakk> \<Longrightarrow> \<nabla> (assert_bound a s)
 3. \<And>s as a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; index_valid as s\<rbrakk> \<Longrightarrow> index_valid (insert a as) (assert_bound a s)
[PROOF STEP]
have *: "\<And> dir x c s. dir = Positive \<or> dir = Negative \<Longrightarrow>
     \<nabla> (update\<B>\<I> (UBI_upd dir) i x c s) = \<nabla> s"
    "\<And> s y I . \<nabla> (set_unsat I s) = \<nabla> s"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (\<And>dir x c s. dir = Positive \<or> dir = Negative \<Longrightarrow> \<nabla> (update\<B>\<I> (UBI_upd dir) i x c s) = \<nabla> s) &&& (\<And>s y I. \<nabla> (set_unsat I s) = \<nabla> s)
[PROOF STEP]
by (auto simp add: tableau_valuated_def)
[PROOF STATE]
proof (state)
this:
?dir = Positive \<or> ?dir = Negative \<Longrightarrow> \<nabla> (update\<B>\<I> (UBI_upd ?dir) i ?x ?c ?s) = \<nabla> ?s
\<nabla> (set_unsat ?I ?s) = \<nabla> ?s

goal (3 subgoals):
 1. \<And>s ats a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; ats \<Turnstile>\<^sub>i \<B>\<I> s\<rbrakk> \<Longrightarrow> insert a ats \<Turnstile>\<^sub>i \<B>\<I> (assert_bound a s)
 2. \<And>s a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s\<rbrakk> \<Longrightarrow> \<nabla> (assert_bound a s)
 3. \<And>s as a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; index_valid as s\<rbrakk> \<Longrightarrow> index_valid (insert a as) (assert_bound a s)
[PROOF STEP]
show "\<nabla> (assert_bound ia s)" (is "?P (assert_bound ia s)")
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<nabla> (assert_bound ia s)
[PROOF STEP]
proof-
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. \<nabla> (assert_bound ia s)
[PROOF STEP]
let ?P' = "\<lambda> lt UBI LBI UB LB UB_upd UI LI LE GE s'. \<nabla> s'"
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. \<nabla> (assert_bound ia s)
[PROOF STEP]
let ?P'' = "\<lambda> dir. ?P' (lt dir) (UBI dir) (LBI dir) (UB dir) (LB dir) (UBI_upd dir) (UI dir) (LI dir) (LE dir) (GE dir)"
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. \<nabla> (assert_bound ia s)
[PROOF STEP]
show ?thesis
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<nabla> (assert_bound ia s)
[PROOF STEP]
unfolding ia
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<nabla> (assert_bound (i, a) s)
[PROOF STEP]
proof (rule assert_bound_cases[of _ _ ?P'])
[PROOF STATE]
proof (state)
goal (7 subgoals):
 1. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x)\<rbrakk> \<Longrightarrow> \<nabla> s
 2. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> \<nabla> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s))
 3. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<notin> lvars (\<T> s); lt dir c (\<langle>\<V> s\<rangle> x); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> \<nabla> (update x c (update\<B>\<I> (UBI_upd dir) i x c s))
 4. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<in> lvars (\<T> s); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> \<nabla> (update\<B>\<I> (UBI_upd dir) i x c s)
 5. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x); \<not> lt dir c (\<langle>\<V> s\<rangle> x)\<rbrakk> \<Longrightarrow> \<nabla> (update\<B>\<I> (UBI_upd dir) i x c s)
 6. \<And>s. \<nabla> s = \<nabla> s
 7. \<And>s. \<nabla> s = \<nabla> s
[PROOF STEP]
fix x c and dir :: "('i,'a) Direction"
[PROOF STATE]
proof (state)
goal (7 subgoals):
 1. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x)\<rbrakk> \<Longrightarrow> \<nabla> s
 2. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> \<nabla> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s))
 3. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<notin> lvars (\<T> s); lt dir c (\<langle>\<V> s\<rangle> x); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> \<nabla> (update x c (update\<B>\<I> (UBI_upd dir) i x c s))
 4. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<in> lvars (\<T> s); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> \<nabla> (update\<B>\<I> (UBI_upd dir) i x c s)
 5. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x); \<not> lt dir c (\<langle>\<V> s\<rangle> x)\<rbrakk> \<Longrightarrow> \<nabla> (update\<B>\<I> (UBI_upd dir) i x c s)
 6. \<And>s. \<nabla> s = \<nabla> s
 7. \<And>s. \<nabla> s = \<nabla> s
[PROOF STEP]
let ?s' = "update\<B>\<I> (UBI_upd dir) i x c s"
[PROOF STATE]
proof (state)
goal (7 subgoals):
 1. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x)\<rbrakk> \<Longrightarrow> \<nabla> s
 2. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> \<nabla> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s))
 3. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<notin> lvars (\<T> s); lt dir c (\<langle>\<V> s\<rangle> x); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> \<nabla> (update x c (update\<B>\<I> (UBI_upd dir) i x c s))
 4. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<in> lvars (\<T> s); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> \<nabla> (update\<B>\<I> (UBI_upd dir) i x c s)
 5. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x); \<not> lt dir c (\<langle>\<V> s\<rangle> x)\<rbrakk> \<Longrightarrow> \<nabla> (update\<B>\<I> (UBI_upd dir) i x c s)
 6. \<And>s. \<nabla> s = \<nabla> s
 7. \<And>s. \<nabla> s = \<nabla> s
[PROOF STEP]
assume "dir = Positive \<or> dir = Negative"
[PROOF STATE]
proof (state)
this:
dir = Positive \<or> dir = Negative

goal (7 subgoals):
 1. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x)\<rbrakk> \<Longrightarrow> \<nabla> s
 2. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> \<nabla> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s))
 3. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<notin> lvars (\<T> s); lt dir c (\<langle>\<V> s\<rangle> x); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> \<nabla> (update x c (update\<B>\<I> (UBI_upd dir) i x c s))
 4. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<in> lvars (\<T> s); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> \<nabla> (update\<B>\<I> (UBI_upd dir) i x c s)
 5. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x); \<not> lt dir c (\<langle>\<V> s\<rangle> x)\<rbrakk> \<Longrightarrow> \<nabla> (update\<B>\<I> (UBI_upd dir) i x c s)
 6. \<And>s. \<nabla> s = \<nabla> s
 7. \<And>s. \<nabla> s = \<nabla> s
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
dir = Positive \<or> dir = Negative
[PROOF STEP]
have "\<nabla> ?s'"
[PROOF STATE]
proof (prove)
using this:
dir = Positive \<or> dir = Negative

goal (1 subgoal):
 1. \<nabla> (update\<B>\<I> (UBI_upd dir) i x c s)
[PROOF STEP]
using *(1)[of dir x c s] \<open>\<nabla> s\<close>
[PROOF STATE]
proof (prove)
using this:
dir = Positive \<or> dir = Negative
dir = Positive \<or> dir = Negative \<Longrightarrow> \<nabla> (update\<B>\<I> (UBI_upd dir) i x c s) = \<nabla> s
\<nabla> s

goal (1 subgoal):
 1. \<nabla> (update\<B>\<I> (UBI_upd dir) i x c s)
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
\<nabla> (update\<B>\<I> (UBI_upd dir) i x c s)

goal (7 subgoals):
 1. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x)\<rbrakk> \<Longrightarrow> \<nabla> s
 2. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> \<nabla> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s))
 3. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<notin> lvars (\<T> s); lt dir c (\<langle>\<V> s\<rangle> x); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> \<nabla> (update x c (update\<B>\<I> (UBI_upd dir) i x c s))
 4. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<in> lvars (\<T> s); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> \<nabla> (update\<B>\<I> (UBI_upd dir) i x c s)
 5. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x); \<not> lt dir c (\<langle>\<V> s\<rangle> x)\<rbrakk> \<Longrightarrow> \<nabla> (update\<B>\<I> (UBI_upd dir) i x c s)
 6. \<And>s. \<nabla> s = \<nabla> s
 7. \<And>s. \<nabla> s = \<nabla> s
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
\<nabla> (update\<B>\<I> (UBI_upd dir) i x c s)
[PROOF STEP]
show "\<nabla> (set_unsat [i, ((LI dir) s x)] ?s')"
[PROOF STATE]
proof (prove)
using this:
\<nabla> (update\<B>\<I> (UBI_upd dir) i x c s)

goal (1 subgoal):
 1. \<nabla> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s))
[PROOF STEP]
using *(2)
[PROOF STATE]
proof (prove)
using this:
\<nabla> (update\<B>\<I> (UBI_upd dir) i x c s)
\<nabla> (set_unsat ?I ?s) = \<nabla> ?s

goal (1 subgoal):
 1. \<nabla> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s))
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
\<nabla> (set_unsat [i, LI dir s x] (update\<B>\<I> (UBI_upd dir) i x c s))

goal (6 subgoals):
 1. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x)\<rbrakk> \<Longrightarrow> \<nabla> s
 2. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<notin> lvars (\<T> s); lt dir c (\<langle>\<V> s\<rangle> x); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> \<nabla> (update x c (update\<B>\<I> (UBI_upd dir) i x c s))
 3. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<in> lvars (\<T> s); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> \<nabla> (update\<B>\<I> (UBI_upd dir) i x c s)
 4. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x); \<not> lt dir c (\<langle>\<V> s\<rangle> x)\<rbrakk> \<Longrightarrow> \<nabla> (update\<B>\<I> (UBI_upd dir) i x c s)
 5. \<And>s. \<nabla> s = \<nabla> s
 6. \<And>s. \<nabla> s = \<nabla> s
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (6 subgoals):
 1. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x)\<rbrakk> \<Longrightarrow> \<nabla> s
 2. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<notin> lvars (\<T> s); lt dir c (\<langle>\<V> s\<rangle> x); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> \<nabla> (update x c (update\<B>\<I> (UBI_upd dir) i x c s))
 3. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<in> lvars (\<T> s); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> \<nabla> (update\<B>\<I> (UBI_upd dir) i x c s)
 4. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x); \<not> lt dir c (\<langle>\<V> s\<rangle> x)\<rbrakk> \<Longrightarrow> \<nabla> (update\<B>\<I> (UBI_upd dir) i x c s)
 5. \<And>s. \<nabla> s = \<nabla> s
 6. \<And>s. \<nabla> s = \<nabla> s
[PROOF STEP]
fix x c and dir :: "('i,'a) Direction"
[PROOF STATE]
proof (state)
goal (6 subgoals):
 1. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x)\<rbrakk> \<Longrightarrow> \<nabla> s
 2. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<notin> lvars (\<T> s); lt dir c (\<langle>\<V> s\<rangle> x); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> \<nabla> (update x c (update\<B>\<I> (UBI_upd dir) i x c s))
 3. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<in> lvars (\<T> s); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> \<nabla> (update\<B>\<I> (UBI_upd dir) i x c s)
 4. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x); \<not> lt dir c (\<langle>\<V> s\<rangle> x)\<rbrakk> \<Longrightarrow> \<nabla> (update\<B>\<I> (UBI_upd dir) i x c s)
 5. \<And>s. \<nabla> s = \<nabla> s
 6. \<And>s. \<nabla> s = \<nabla> s
[PROOF STEP]
assume *: "x \<notin> lvars (\<T> s)" "dir = Positive \<or> dir = Negative"
[PROOF STATE]
proof (state)
this:
x \<notin> lvars (\<T> s)
dir = Positive \<or> dir = Negative

goal (6 subgoals):
 1. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x)\<rbrakk> \<Longrightarrow> \<nabla> s
 2. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<notin> lvars (\<T> s); lt dir c (\<langle>\<V> s\<rangle> x); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> \<nabla> (update x c (update\<B>\<I> (UBI_upd dir) i x c s))
 3. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<in> lvars (\<T> s); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> \<nabla> (update\<B>\<I> (UBI_upd dir) i x c s)
 4. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x); \<not> lt dir c (\<langle>\<V> s\<rangle> x)\<rbrakk> \<Longrightarrow> \<nabla> (update\<B>\<I> (UBI_upd dir) i x c s)
 5. \<And>s. \<nabla> s = \<nabla> s
 6. \<And>s. \<nabla> s = \<nabla> s
[PROOF STEP]
let ?s = "update\<B>\<I> (UBI_upd dir) i x c s"
[PROOF STATE]
proof (state)
goal (6 subgoals):
 1. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x)\<rbrakk> \<Longrightarrow> \<nabla> s
 2. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<notin> lvars (\<T> s); lt dir c (\<langle>\<V> s\<rangle> x); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> \<nabla> (update x c (update\<B>\<I> (UBI_upd dir) i x c s))
 3. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<in> lvars (\<T> s); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> \<nabla> (update\<B>\<I> (UBI_upd dir) i x c s)
 4. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x); \<not> lt dir c (\<langle>\<V> s\<rangle> x)\<rbrakk> \<Longrightarrow> \<nabla> (update\<B>\<I> (UBI_upd dir) i x c s)
 5. \<And>s. \<nabla> s = \<nabla> s
 6. \<And>s. \<nabla> s = \<nabla> s
[PROOF STEP]
let ?s' = "update x c ?s"
[PROOF STATE]
proof (state)
goal (6 subgoals):
 1. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x)\<rbrakk> \<Longrightarrow> \<nabla> s
 2. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<notin> lvars (\<T> s); lt dir c (\<langle>\<V> s\<rangle> x); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> \<nabla> (update x c (update\<B>\<I> (UBI_upd dir) i x c s))
 3. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<in> lvars (\<T> s); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> \<nabla> (update\<B>\<I> (UBI_upd dir) i x c s)
 4. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x); \<not> lt dir c (\<langle>\<V> s\<rangle> x)\<rbrakk> \<Longrightarrow> \<nabla> (update\<B>\<I> (UBI_upd dir) i x c s)
 5. \<And>s. \<nabla> s = \<nabla> s
 6. \<And>s. \<nabla> s = \<nabla> s
[PROOF STEP]
from *
[PROOF STATE]
proof (chain)
picking this:
x \<notin> lvars (\<T> s)
dir = Positive \<or> dir = Negative
[PROOF STEP]
show "\<nabla> ?s'"
[PROOF STATE]
proof (prove)
using this:
x \<notin> lvars (\<T> s)
dir = Positive \<or> dir = Negative

goal (1 subgoal):
 1. \<nabla> (update x c (update\<B>\<I> (UBI_upd dir) i x c s))
[PROOF STEP]
using \<open>\<triangle> (\<T> s)\<close> \<open>\<nabla> s\<close>
[PROOF STATE]
proof (prove)
using this:
x \<notin> lvars (\<T> s)
dir = Positive \<or> dir = Negative
\<triangle> (\<T> s)
\<nabla> s

goal (1 subgoal):
 1. \<nabla> (update x c (update\<B>\<I> (UBI_upd dir) i x c s))
[PROOF STEP]
using update_tableau_valuated[of ?s x c]
[PROOF STATE]
proof (prove)
using this:
x \<notin> lvars (\<T> s)
dir = Positive \<or> dir = Negative
\<triangle> (\<T> s)
\<nabla> s
\<lbrakk>\<triangle> (\<T> (update\<B>\<I> (UBI_upd dir) i x c s)); \<nabla> (update\<B>\<I> (UBI_upd dir) i x c s); x \<notin> lvars (\<T> (update\<B>\<I> (UBI_upd dir) i x c s))\<rbrakk> \<Longrightarrow> \<nabla> (update x c (update\<B>\<I> (UBI_upd dir) i x c s))

goal (1 subgoal):
 1. \<nabla> (update x c (update\<B>\<I> (UBI_upd dir) i x c s))
[PROOF STEP]
by (auto simp add: tableau_valuated_def)
[PROOF STATE]
proof (state)
this:
\<nabla> (update x c (update\<B>\<I> (UBI_upd dir) i x c s))

goal (5 subgoals):
 1. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x)\<rbrakk> \<Longrightarrow> \<nabla> s
 2. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<in> lvars (\<T> s); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> \<nabla> (update\<B>\<I> (UBI_upd dir) i x c s)
 3. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x); \<not> lt dir c (\<langle>\<V> s\<rangle> x)\<rbrakk> \<Longrightarrow> \<nabla> (update\<B>\<I> (UBI_upd dir) i x c s)
 4. \<And>s. \<nabla> s = \<nabla> s
 5. \<And>s. \<nabla> s = \<nabla> s
[PROOF STEP]
qed (insert \<open>\<nabla> s\<close> *(1), auto)
[PROOF STATE]
proof (state)
this:
\<nabla> (assert_bound ia s)

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
\<nabla> (assert_bound ia s)

goal (2 subgoals):
 1. \<And>s ats a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; ats \<Turnstile>\<^sub>i \<B>\<I> s\<rbrakk> \<Longrightarrow> insert a ats \<Turnstile>\<^sub>i \<B>\<I> (assert_bound a s)
 2. \<And>s as a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; index_valid as s\<rbrakk> \<Longrightarrow> index_valid (insert a as) (assert_bound a s)
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (2 subgoals):
 1. \<And>s ats a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; ats \<Turnstile>\<^sub>i \<B>\<I> s\<rbrakk> \<Longrightarrow> insert a ats \<Turnstile>\<^sub>i \<B>\<I> (assert_bound a s)
 2. \<And>s as a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; index_valid as s\<rbrakk> \<Longrightarrow> index_valid (insert a as) (assert_bound a s)
[PROOF STEP]
fix s :: "('i,'a) state" and as and ia :: "('i,'a) i_atom"
[PROOF STATE]
proof (state)
goal (2 subgoals):
 1. \<And>s ats a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; ats \<Turnstile>\<^sub>i \<B>\<I> s\<rbrakk> \<Longrightarrow> insert a ats \<Turnstile>\<^sub>i \<B>\<I> (assert_bound a s)
 2. \<And>s as a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; index_valid as s\<rbrakk> \<Longrightarrow> index_valid (insert a as) (assert_bound a s)
[PROOF STEP]
obtain i a where ia: "ia = (i,a)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (\<And>i a. ia = (i, a) \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by force
[PROOF STATE]
proof (state)
this:
ia = (i, a)

goal (2 subgoals):
 1. \<And>s ats a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; ats \<Turnstile>\<^sub>i \<B>\<I> s\<rbrakk> \<Longrightarrow> insert a ats \<Turnstile>\<^sub>i \<B>\<I> (assert_bound a s)
 2. \<And>s as a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; index_valid as s\<rbrakk> \<Longrightarrow> index_valid (insert a as) (assert_bound a s)
[PROOF STEP]
assume *: "\<not> \<U> s" "\<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s" "\<triangle> (\<T> s)" "\<nabla> s"
    and valid: "index_valid as s"
[PROOF STATE]
proof (state)
this:
\<not> \<U> s
\<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s
\<triangle> (\<T> s)
\<nabla> s
index_valid as s

goal (2 subgoals):
 1. \<And>s ats a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; ats \<Turnstile>\<^sub>i \<B>\<I> s\<rbrakk> \<Longrightarrow> insert a ats \<Turnstile>\<^sub>i \<B>\<I> (assert_bound a s)
 2. \<And>s as a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; index_valid as s\<rbrakk> \<Longrightarrow> index_valid (insert a as) (assert_bound a s)
[PROOF STEP]
have id: "\<And> dir x c s. dir = Positive \<or> dir = Negative \<Longrightarrow>
     \<nabla> (update\<B>\<I> (UBI_upd dir) i x c s) = \<nabla> s"
    "\<And> s y I. \<nabla> (set_unsat I s) = \<nabla> s"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (\<And>dir x c s. dir = Positive \<or> dir = Negative \<Longrightarrow> \<nabla> (update\<B>\<I> (UBI_upd dir) i x c s) = \<nabla> s) &&& (\<And>s y I. \<nabla> (set_unsat I s) = \<nabla> s)
[PROOF STEP]
by (auto simp add: tableau_valuated_def)
[PROOF STATE]
proof (state)
this:
?dir = Positive \<or> ?dir = Negative \<Longrightarrow> \<nabla> (update\<B>\<I> (UBI_upd ?dir) i ?x ?c ?s) = \<nabla> ?s
\<nabla> (set_unsat ?I ?s) = \<nabla> ?s

goal (2 subgoals):
 1. \<And>s ats a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; ats \<Turnstile>\<^sub>i \<B>\<I> s\<rbrakk> \<Longrightarrow> insert a ats \<Turnstile>\<^sub>i \<B>\<I> (assert_bound a s)
 2. \<And>s as a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; index_valid as s\<rbrakk> \<Longrightarrow> index_valid (insert a as) (assert_bound a s)
[PROOF STEP]
let ?I = "insert (i,a) as"
[PROOF STATE]
proof (state)
goal (2 subgoals):
 1. \<And>s ats a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; ats \<Turnstile>\<^sub>i \<B>\<I> s\<rbrakk> \<Longrightarrow> insert a ats \<Turnstile>\<^sub>i \<B>\<I> (assert_bound a s)
 2. \<And>s as a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; index_valid as s\<rbrakk> \<Longrightarrow> index_valid (insert a as) (assert_bound a s)
[PROOF STEP]
define I where "I = ?I"
[PROOF STATE]
proof (state)
this:
I = insert (i, a) as

goal (2 subgoals):
 1. \<And>s ats a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; ats \<Turnstile>\<^sub>i \<B>\<I> s\<rbrakk> \<Longrightarrow> insert a ats \<Turnstile>\<^sub>i \<B>\<I> (assert_bound a s)
 2. \<And>s as a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; index_valid as s\<rbrakk> \<Longrightarrow> index_valid (insert a as) (assert_bound a s)
[PROOF STEP]
from index_valid_mono[OF _ valid]
[PROOF STATE]
proof (chain)
picking this:
as \<subseteq> ?bs \<Longrightarrow> index_valid ?bs s
[PROOF STEP]
have valid: "index_valid I s"
[PROOF STATE]
proof (prove)
using this:
as \<subseteq> ?bs \<Longrightarrow> index_valid ?bs s

goal (1 subgoal):
 1. index_valid I s
[PROOF STEP]
unfolding I_def
[PROOF STATE]
proof (prove)
using this:
as \<subseteq> ?bs \<Longrightarrow> index_valid ?bs s

goal (1 subgoal):
 1. index_valid (insert (i, a) as) s
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
index_valid I s

goal (2 subgoals):
 1. \<And>s ats a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; ats \<Turnstile>\<^sub>i \<B>\<I> s\<rbrakk> \<Longrightarrow> insert a ats \<Turnstile>\<^sub>i \<B>\<I> (assert_bound a s)
 2. \<And>s as a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; index_valid as s\<rbrakk> \<Longrightarrow> index_valid (insert a as) (assert_bound a s)
[PROOF STEP]
have I: "(i,a) \<in> I"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (i, a) \<in> I
[PROOF STEP]
unfolding I_def
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (i, a) \<in> insert (i, a) as
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
(i, a) \<in> I

goal (2 subgoals):
 1. \<And>s ats a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; ats \<Turnstile>\<^sub>i \<B>\<I> s\<rbrakk> \<Longrightarrow> insert a ats \<Turnstile>\<^sub>i \<B>\<I> (assert_bound a s)
 2. \<And>s as a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; index_valid as s\<rbrakk> \<Longrightarrow> index_valid (insert a as) (assert_bound a s)
[PROOF STEP]
let ?P = "\<lambda> s. index_valid I s"
[PROOF STATE]
proof (state)
goal (2 subgoals):
 1. \<And>s ats a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; ats \<Turnstile>\<^sub>i \<B>\<I> s\<rbrakk> \<Longrightarrow> insert a ats \<Turnstile>\<^sub>i \<B>\<I> (assert_bound a s)
 2. \<And>s as a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; index_valid as s\<rbrakk> \<Longrightarrow> index_valid (insert a as) (assert_bound a s)
[PROOF STEP]
let ?P' = "\<lambda> (lt :: 'a \<Rightarrow> 'a \<Rightarrow> bool)
    (UBI :: ('i,'a) state \<Rightarrow> ('i,'a) bounds_index) (LBI :: ('i,'a) state \<Rightarrow> ('i,'a) bounds_index)
    (UB :: ('i,'a) state \<Rightarrow> 'a bounds) (LB :: ('i,'a) state \<Rightarrow> 'a bounds)
    (UBI_upd :: (('i,'a) bounds_index \<Rightarrow> ('i,'a) bounds_index) \<Rightarrow> ('i,'a) state \<Rightarrow> ('i,'a) state)
    (UI :: ('i,'a) state \<Rightarrow> 'i bound_index) (LI :: ('i,'a) state \<Rightarrow> 'i bound_index)
    LE GE s'.
    (\<forall> x c i. look (UBI s') x = Some (i,c) \<longrightarrow> (i,LE (x :: var) c) \<in> I) \<and>
    (\<forall> x c i. look (LBI s') x = Some (i,c) \<longrightarrow> (i,GE (x :: nat) c) \<in> I)"
[PROOF STATE]
proof (state)
goal (2 subgoals):
 1. \<And>s ats a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; ats \<Turnstile>\<^sub>i \<B>\<I> s\<rbrakk> \<Longrightarrow> insert a ats \<Turnstile>\<^sub>i \<B>\<I> (assert_bound a s)
 2. \<And>s as a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; index_valid as s\<rbrakk> \<Longrightarrow> index_valid (insert a as) (assert_bound a s)
[PROOF STEP]
define P where "P = ?P'"
[PROOF STATE]
proof (state)
this:
P = (\<lambda>lt UBI LBI UB LB UBI_upd UI LI LE GE s'. (\<forall>x c i. Mapping.lookup (UBI s') x = Some (i, c) \<longrightarrow> (i, LE x c) \<in> I) \<and> (\<forall>x c i. Mapping.lookup (LBI s') x = Some (i, c) \<longrightarrow> (i, GE x c) \<in> I))

goal (2 subgoals):
 1. \<And>s ats a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; ats \<Turnstile>\<^sub>i \<B>\<I> s\<rbrakk> \<Longrightarrow> insert a ats \<Turnstile>\<^sub>i \<B>\<I> (assert_bound a s)
 2. \<And>s as a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; index_valid as s\<rbrakk> \<Longrightarrow> index_valid (insert a as) (assert_bound a s)
[PROOF STEP]
let ?P'' = "\<lambda> (dir :: ('i,'a) Direction).
    P (lt dir) (UBI dir) (LBI dir) (UB dir) (LB dir) (UBI_upd dir) (UI dir) (LI dir) (LE dir) (GE dir)"
[PROOF STATE]
proof (state)
goal (2 subgoals):
 1. \<And>s ats a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; ats \<Turnstile>\<^sub>i \<B>\<I> s\<rbrakk> \<Longrightarrow> insert a ats \<Turnstile>\<^sub>i \<B>\<I> (assert_bound a s)
 2. \<And>s as a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; index_valid as s\<rbrakk> \<Longrightarrow> index_valid (insert a as) (assert_bound a s)
[PROOF STEP]
have x: "\<And> s'. ?P s' = P (<) \<B>\<^sub>i\<^sub>u \<B>\<^sub>i\<^sub>l \<B>\<^sub>u \<B>\<^sub>l \<B>\<^sub>i\<^sub>u_update \<I>\<^sub>u \<I>\<^sub>l Leq Geq s'"
    and xx: "\<And> s'. ?P s' = P (>) \<B>\<^sub>i\<^sub>l \<B>\<^sub>i\<^sub>u \<B>\<^sub>l \<B>\<^sub>u \<B>\<^sub>i\<^sub>l_update \<I>\<^sub>l \<I>\<^sub>u Geq Leq s'"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (\<And>s'. index_valid I s' = P (<) \<B>\<^sub>i\<^sub>u \<B>\<^sub>i\<^sub>l \<B>\<^sub>u \<B>\<^sub>l \<B>\<^sub>i\<^sub>u_update \<I>\<^sub>u \<I>\<^sub>l Leq Geq s') &&& (\<And>s'. index_valid I s' = P (\<lambda>x y. y < x) \<B>\<^sub>i\<^sub>l \<B>\<^sub>i\<^sub>u \<B>\<^sub>l \<B>\<^sub>u \<B>\<^sub>i\<^sub>l_update \<I>\<^sub>l \<I>\<^sub>u Geq Leq s')
[PROOF STEP]
unfolding satisfies_bounds_set.simps in_bounds.simps bound_compare_defs index_valid_def P_def
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (\<And>s'. (\<forall>x b i. (Mapping.lookup (\<B>\<^sub>i\<^sub>l s') x = Some (i, b) \<longrightarrow> (i, Geq x b) \<in> I) \<and> (Mapping.lookup (\<B>\<^sub>i\<^sub>u s') x = Some (i, b) \<longrightarrow> (i, Leq x b) \<in> I)) = ((\<forall>x c i. Mapping.lookup (\<B>\<^sub>i\<^sub>u s') x = Some (i, c) \<longrightarrow> (i, Leq x c) \<in> I) \<and> (\<forall>x c i. Mapping.lookup (\<B>\<^sub>i\<^sub>l s') x = Some (i, c) \<longrightarrow> (i, Geq x c) \<in> I))) &&& (\<And>s'. (\<forall>x b i. (Mapping.lookup (\<B>\<^sub>i\<^sub>l s') x = Some (i, b) \<longrightarrow> (i, Geq x b) \<in> I) \<and> (Mapping.lookup (\<B>\<^sub>i\<^sub>u s') x = Some (i, b) \<longrightarrow> (i, Leq x b) \<in> I)) = ((\<forall>x c i. Mapping.lookup (\<B>\<^sub>i\<^sub>l s') x = Some (i, c) \<longrightarrow> (i, Geq x c) \<in> I) \<and> (\<forall>x c i. Mapping.lookup (\<B>\<^sub>i\<^sub>u s') x = Some (i, c) \<longrightarrow> (i, Leq x c) \<in> I)))
[PROOF STEP]
by (auto split: option.split simp: indexl_def indexu_def boundsl_def boundsu_def)
[PROOF STATE]
proof (state)
this:
index_valid I ?s'1 = P (<) \<B>\<^sub>i\<^sub>u \<B>\<^sub>i\<^sub>l \<B>\<^sub>u \<B>\<^sub>l \<B>\<^sub>i\<^sub>u_update \<I>\<^sub>u \<I>\<^sub>l Leq Geq ?s'1
index_valid I ?s'1 = P (\<lambda>x y. y < x) \<B>\<^sub>i\<^sub>l \<B>\<^sub>i\<^sub>u \<B>\<^sub>l \<B>\<^sub>u \<B>\<^sub>i\<^sub>l_update \<I>\<^sub>l \<I>\<^sub>u Geq Leq ?s'1

goal (2 subgoals):
 1. \<And>s ats a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; ats \<Turnstile>\<^sub>i \<B>\<I> s\<rbrakk> \<Longrightarrow> insert a ats \<Turnstile>\<^sub>i \<B>\<I> (assert_bound a s)
 2. \<And>s as a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; index_valid as s\<rbrakk> \<Longrightarrow> index_valid (insert a as) (assert_bound a s)
[PROOF STEP]
from valid
[PROOF STATE]
proof (chain)
picking this:
index_valid I s
[PROOF STEP]
have P'': "dir = Positive \<or> dir = Negative \<Longrightarrow> ?P'' dir s" for dir
[PROOF STATE]
proof (prove)
using this:
index_valid I s

goal (1 subgoal):
 1. dir = Positive \<or> dir = Negative \<Longrightarrow> P (lt dir) (UBI dir) (LBI dir) (UB dir) (LB dir) (UBI_upd dir) (UI dir) (LI dir) (LE dir) (GE dir) s
[PROOF STEP]
using x[of s] xx[of s]
[PROOF STATE]
proof (prove)
using this:
index_valid I s
index_valid I s = P (<) \<B>\<^sub>i\<^sub>u \<B>\<^sub>i\<^sub>l \<B>\<^sub>u \<B>\<^sub>l \<B>\<^sub>i\<^sub>u_update \<I>\<^sub>u \<I>\<^sub>l Leq Geq s
index_valid I s = P (\<lambda>x y. y < x) \<B>\<^sub>i\<^sub>l \<B>\<^sub>i\<^sub>u \<B>\<^sub>l \<B>\<^sub>u \<B>\<^sub>i\<^sub>l_update \<I>\<^sub>l \<I>\<^sub>u Geq Leq s

goal (1 subgoal):
 1. dir = Positive \<or> dir = Negative \<Longrightarrow> P (lt dir) (UBI dir) (LBI dir) (UB dir) (LB dir) (UBI_upd dir) (UI dir) (LI dir) (LE dir) (GE dir) s
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
?dir1 = Positive \<or> ?dir1 = Negative \<Longrightarrow> P (lt ?dir1) (UBI ?dir1) (LBI ?dir1) (UB ?dir1) (LB ?dir1) (UBI_upd ?dir1) (UI ?dir1) (LI ?dir1) (LE ?dir1) (GE ?dir1) s

goal (2 subgoals):
 1. \<And>s ats a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; ats \<Turnstile>\<^sub>i \<B>\<I> s\<rbrakk> \<Longrightarrow> insert a ats \<Turnstile>\<^sub>i \<B>\<I> (assert_bound a s)
 2. \<And>s as a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; index_valid as s\<rbrakk> \<Longrightarrow> index_valid (insert a as) (assert_bound a s)
[PROOF STEP]
have UTrue: "dir = Positive \<or> dir = Negative \<Longrightarrow> ?P'' dir s \<Longrightarrow> ?P'' dir (set_unsat I s)" for dir s I
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<lbrakk>dir = Positive \<or> dir = Negative; P (lt dir) (UBI dir) (LBI dir) (UB dir) (LB dir) (UBI_upd dir) (UI dir) (LI dir) (LE dir) (GE dir) s\<rbrakk> \<Longrightarrow> P (lt dir) (UBI dir) (LBI dir) (UB dir) (LB dir) (UBI_upd dir) (UI dir) (LI dir) (LE dir) (GE dir) (set_unsat I s)
[PROOF STEP]
unfolding P_def
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<lbrakk>dir = Positive \<or> dir = Negative; (\<forall>x c i. Mapping.lookup (UBI dir s) x = Some (i, c) \<longrightarrow> (i, LE dir x c) \<in> I__) \<and> (\<forall>x c i. Mapping.lookup (LBI dir s) x = Some (i, c) \<longrightarrow> (i, GE dir x c) \<in> I__)\<rbrakk> \<Longrightarrow> (\<forall>x c i. Mapping.lookup (UBI dir (set_unsat I s)) x = Some (i, c) \<longrightarrow> (i, LE dir x c) \<in> I__) \<and> (\<forall>x c i. Mapping.lookup (LBI dir (set_unsat I s)) x = Some (i, c) \<longrightarrow> (i, GE dir x c) \<in> I__)
[PROOF STEP]
by (auto simp: boundsl_def boundsu_def indexl_def indexu_def)
[PROOF STATE]
proof (state)
this:
\<lbrakk>?dir1 = Positive \<or> ?dir1 = Negative; P (lt ?dir1) (UBI ?dir1) (LBI ?dir1) (UB ?dir1) (LB ?dir1) (UBI_upd ?dir1) (UI ?dir1) (LI ?dir1) (LE ?dir1) (GE ?dir1) ?s1\<rbrakk> \<Longrightarrow> P (lt ?dir1) (UBI ?dir1) (LBI ?dir1) (UB ?dir1) (LB ?dir1) (UBI_upd ?dir1) (UI ?dir1) (LI ?dir1) (LE ?dir1) (GE ?dir1) (set_unsat ?I1 ?s1)

goal (2 subgoals):
 1. \<And>s ats a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; ats \<Turnstile>\<^sub>i \<B>\<I> s\<rbrakk> \<Longrightarrow> insert a ats \<Turnstile>\<^sub>i \<B>\<I> (assert_bound a s)
 2. \<And>s as a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; index_valid as s\<rbrakk> \<Longrightarrow> index_valid (insert a as) (assert_bound a s)
[PROOF STEP]
have updateIB: "a = LE dir x c \<Longrightarrow> dir = Positive \<or> dir = Negative \<Longrightarrow> ?P'' dir s \<Longrightarrow> ?P'' dir
    (update\<B>\<I> (UBI_upd dir) i x c s)" for dir x c s
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<lbrakk>a = LE dir x c; dir = Positive \<or> dir = Negative; P (lt dir) (UBI dir) (LBI dir) (UB dir) (LB dir) (UBI_upd dir) (UI dir) (LI dir) (LE dir) (GE dir) s\<rbrakk> \<Longrightarrow> P (lt dir) (UBI dir) (LBI dir) (UB dir) (LB dir) (UBI_upd dir) (UI dir) (LI dir) (LE dir) (GE dir) (update\<B>\<I> (UBI_upd dir) i x c s)
[PROOF STEP]
unfolding P_def
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<lbrakk>a = LE dir x c; dir = Positive \<or> dir = Negative; (\<forall>x c i. Mapping.lookup (UBI dir s) x = Some (i, c) \<longrightarrow> (i, LE dir x c) \<in> I) \<and> (\<forall>x c i. Mapping.lookup (LBI dir s) x = Some (i, c) \<longrightarrow> (i, GE dir x c) \<in> I)\<rbrakk> \<Longrightarrow> (\<forall>xa ca ia. Mapping.lookup (UBI dir (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some (ia, ca) \<longrightarrow> (ia, LE dir xa ca) \<in> I) \<and> (\<forall>xa ca ia. Mapping.lookup (LBI dir (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some (ia, ca) \<longrightarrow> (ia, GE dir xa ca) \<in> I)
[PROOF STEP]
using I
[PROOF STATE]
proof (prove)
using this:
(i, a) \<in> I

goal (1 subgoal):
 1. \<lbrakk>a = LE dir x c; dir = Positive \<or> dir = Negative; (\<forall>x c i. Mapping.lookup (UBI dir s) x = Some (i, c) \<longrightarrow> (i, LE dir x c) \<in> I) \<and> (\<forall>x c i. Mapping.lookup (LBI dir s) x = Some (i, c) \<longrightarrow> (i, GE dir x c) \<in> I)\<rbrakk> \<Longrightarrow> (\<forall>xa ca ia. Mapping.lookup (UBI dir (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some (ia, ca) \<longrightarrow> (ia, LE dir xa ca) \<in> I) \<and> (\<forall>xa ca ia. Mapping.lookup (LBI dir (update\<B>\<I> (UBI_upd dir) i x c s)) xa = Some (ia, ca) \<longrightarrow> (ia, GE dir xa ca) \<in> I)
[PROOF STEP]
by (auto split: if_splits simp: simp: boundsl_def boundsu_def indexl_def indexu_def)
[PROOF STATE]
proof (state)
this:
\<lbrakk>a = LE ?dir1 ?x1 ?c1; ?dir1 = Positive \<or> ?dir1 = Negative; P (lt ?dir1) (UBI ?dir1) (LBI ?dir1) (UB ?dir1) (LB ?dir1) (UBI_upd ?dir1) (UI ?dir1) (LI ?dir1) (LE ?dir1) (GE ?dir1) ?s1\<rbrakk> \<Longrightarrow> P (lt ?dir1) (UBI ?dir1) (LBI ?dir1) (UB ?dir1) (LB ?dir1) (UBI_upd ?dir1) (UI ?dir1) (LI ?dir1) (LE ?dir1) (GE ?dir1) (update\<B>\<I> (UBI_upd ?dir1) i ?x1 ?c1 ?s1)

goal (2 subgoals):
 1. \<And>s ats a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; ats \<Turnstile>\<^sub>i \<B>\<I> s\<rbrakk> \<Longrightarrow> insert a ats \<Turnstile>\<^sub>i \<B>\<I> (assert_bound a s)
 2. \<And>s as a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; index_valid as s\<rbrakk> \<Longrightarrow> index_valid (insert a as) (assert_bound a s)
[PROOF STEP]
show "index_valid (insert ia as) (assert_bound ia s)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. index_valid (insert ia as) (assert_bound ia s)
[PROOF STEP]
unfolding ia I_def[symmetric]
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. index_valid I (assert_bound (i, a) s)
[PROOF STEP]
proof ((rule assert_bound_cases[of _ _ P]; (intro UTrue x xx updateIB P'')?))
[PROOF STATE]
proof (state)
goal (12 subgoals):
 1. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x)\<rbrakk> \<Longrightarrow> dir = Positive \<or> dir = Negative
 2. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> dir = Positive \<or> dir = Negative
 3. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> a = LE dir x c
 4. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> dir = Positive \<or> dir = Negative
 5. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> dir = Positive \<or> dir = Negative
 6. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<notin> lvars (\<T> s); lt dir c (\<langle>\<V> s\<rangle> x); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> P (lt dir) (UBI dir) (LBI dir) (UB dir) (LB dir) (UBI_upd dir) (UI dir) (LI dir) (LE dir) (GE dir) (update x c (update\<B>\<I> (UBI_upd dir) i x c s))
 7. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<in> lvars (\<T> s); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> a = LE dir x c
 8. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<in> lvars (\<T> s); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> dir = Positive \<or> dir = Negative
 9. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<in> lvars (\<T> s); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> dir = Positive \<or> dir = Negative
 10. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x); \<not> lt dir c (\<langle>\<V> s\<rangle> x)\<rbrakk> \<Longrightarrow> a = LE dir x c
A total of 12 subgoals...
[PROOF STEP]
fix x c and dir :: "('i,'a) Direction"
[PROOF STATE]
proof (state)
goal (12 subgoals):
 1. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x)\<rbrakk> \<Longrightarrow> dir = Positive \<or> dir = Negative
 2. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> dir = Positive \<or> dir = Negative
 3. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> a = LE dir x c
 4. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> dir = Positive \<or> dir = Negative
 5. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> dir = Positive \<or> dir = Negative
 6. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<notin> lvars (\<T> s); lt dir c (\<langle>\<V> s\<rangle> x); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> P (lt dir) (UBI dir) (LBI dir) (UB dir) (LB dir) (UBI_upd dir) (UI dir) (LI dir) (LE dir) (GE dir) (update x c (update\<B>\<I> (UBI_upd dir) i x c s))
 7. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<in> lvars (\<T> s); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> a = LE dir x c
 8. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<in> lvars (\<T> s); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> dir = Positive \<or> dir = Negative
 9. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<in> lvars (\<T> s); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> dir = Positive \<or> dir = Negative
 10. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x); \<not> lt dir c (\<langle>\<V> s\<rangle> x)\<rbrakk> \<Longrightarrow> a = LE dir x c
A total of 12 subgoals...
[PROOF STEP]
assume **: "dir = Positive \<or> dir = Negative"
      "a = LE dir x c"
      "x \<notin> lvars (\<T> s)"
[PROOF STATE]
proof (state)
this:
dir = Positive \<or> dir = Negative
a = LE dir x c
x \<notin> lvars (\<T> s)

goal (12 subgoals):
 1. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x)\<rbrakk> \<Longrightarrow> dir = Positive \<or> dir = Negative
 2. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> dir = Positive \<or> dir = Negative
 3. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> a = LE dir x c
 4. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> dir = Positive \<or> dir = Negative
 5. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> dir = Positive \<or> dir = Negative
 6. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<notin> lvars (\<T> s); lt dir c (\<langle>\<V> s\<rangle> x); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> P (lt dir) (UBI dir) (LBI dir) (UB dir) (LB dir) (UBI_upd dir) (UI dir) (LI dir) (LE dir) (GE dir) (update x c (update\<B>\<I> (UBI_upd dir) i x c s))
 7. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<in> lvars (\<T> s); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> a = LE dir x c
 8. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<in> lvars (\<T> s); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> dir = Positive \<or> dir = Negative
 9. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<in> lvars (\<T> s); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> dir = Positive \<or> dir = Negative
 10. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x); \<not> lt dir c (\<langle>\<V> s\<rangle> x)\<rbrakk> \<Longrightarrow> a = LE dir x c
A total of 12 subgoals...
[PROOF STEP]
let ?s = "(update\<B>\<I> (UBI_upd dir) i x c s)"
[PROOF STATE]
proof (state)
goal (12 subgoals):
 1. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x)\<rbrakk> \<Longrightarrow> dir = Positive \<or> dir = Negative
 2. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> dir = Positive \<or> dir = Negative
 3. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> a = LE dir x c
 4. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> dir = Positive \<or> dir = Negative
 5. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> dir = Positive \<or> dir = Negative
 6. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<notin> lvars (\<T> s); lt dir c (\<langle>\<V> s\<rangle> x); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> P (lt dir) (UBI dir) (LBI dir) (UB dir) (LB dir) (UBI_upd dir) (UI dir) (LI dir) (LE dir) (GE dir) (update x c (update\<B>\<I> (UBI_upd dir) i x c s))
 7. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<in> lvars (\<T> s); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> a = LE dir x c
 8. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<in> lvars (\<T> s); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> dir = Positive \<or> dir = Negative
 9. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<in> lvars (\<T> s); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> dir = Positive \<or> dir = Negative
 10. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x); \<not> lt dir c (\<langle>\<V> s\<rangle> x)\<rbrakk> \<Longrightarrow> a = LE dir x c
A total of 12 subgoals...
[PROOF STEP]
define s' where "s' = ?s"
[PROOF STATE]
proof (state)
this:
s' = update\<B>\<I> (UBI_upd dir) i x c s

goal (12 subgoals):
 1. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x)\<rbrakk> \<Longrightarrow> dir = Positive \<or> dir = Negative
 2. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> dir = Positive \<or> dir = Negative
 3. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> a = LE dir x c
 4. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> dir = Positive \<or> dir = Negative
 5. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> dir = Positive \<or> dir = Negative
 6. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<notin> lvars (\<T> s); lt dir c (\<langle>\<V> s\<rangle> x); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> P (lt dir) (UBI dir) (LBI dir) (UB dir) (LB dir) (UBI_upd dir) (UI dir) (LI dir) (LE dir) (GE dir) (update x c (update\<B>\<I> (UBI_upd dir) i x c s))
 7. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<in> lvars (\<T> s); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> a = LE dir x c
 8. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<in> lvars (\<T> s); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> dir = Positive \<or> dir = Negative
 9. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<in> lvars (\<T> s); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> dir = Positive \<or> dir = Negative
 10. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x); \<not> lt dir c (\<langle>\<V> s\<rangle> x)\<rbrakk> \<Longrightarrow> a = LE dir x c
A total of 12 subgoals...
[PROOF STEP]
have 1: "\<triangle> (\<T> ?s)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<triangle> (\<T> (update\<B>\<I> (UBI_upd dir) i x c s))
[PROOF STEP]
using * **
[PROOF STATE]
proof (prove)
using this:
\<not> \<U> s
\<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s
\<triangle> (\<T> s)
\<nabla> s
dir = Positive \<or> dir = Negative
a = LE dir x c
x \<notin> lvars (\<T> s)

goal (1 subgoal):
 1. \<triangle> (\<T> (update\<B>\<I> (UBI_upd dir) i x c s))
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
\<triangle> (\<T> (update\<B>\<I> (UBI_upd dir) i x c s))

goal (12 subgoals):
 1. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x)\<rbrakk> \<Longrightarrow> dir = Positive \<or> dir = Negative
 2. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> dir = Positive \<or> dir = Negative
 3. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> a = LE dir x c
 4. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> dir = Positive \<or> dir = Negative
 5. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> dir = Positive \<or> dir = Negative
 6. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<notin> lvars (\<T> s); lt dir c (\<langle>\<V> s\<rangle> x); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> P (lt dir) (UBI dir) (LBI dir) (UB dir) (LB dir) (UBI_upd dir) (UI dir) (LI dir) (LE dir) (GE dir) (update x c (update\<B>\<I> (UBI_upd dir) i x c s))
 7. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<in> lvars (\<T> s); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> a = LE dir x c
 8. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<in> lvars (\<T> s); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> dir = Positive \<or> dir = Negative
 9. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<in> lvars (\<T> s); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> dir = Positive \<or> dir = Negative
 10. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x); \<not> lt dir c (\<langle>\<V> s\<rangle> x)\<rbrakk> \<Longrightarrow> a = LE dir x c
A total of 12 subgoals...
[PROOF STEP]
have 2: "\<nabla> ?s"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<nabla> (update\<B>\<I> (UBI_upd dir) i x c s)
[PROOF STEP]
using id(1) ** * \<open>\<nabla> s\<close>
[PROOF STATE]
proof (prove)
using this:
?dir = Positive \<or> ?dir = Negative \<Longrightarrow> \<nabla> (update\<B>\<I> (UBI_upd ?dir) i ?x ?c ?s) = \<nabla> ?s
dir = Positive \<or> dir = Negative
a = LE dir x c
x \<notin> lvars (\<T> s)
\<not> \<U> s
\<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s
\<triangle> (\<T> s)
\<nabla> s
\<nabla> s

goal (1 subgoal):
 1. \<nabla> (update\<B>\<I> (UBI_upd dir) i x c s)
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
\<nabla> (update\<B>\<I> (UBI_upd dir) i x c s)

goal (12 subgoals):
 1. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x)\<rbrakk> \<Longrightarrow> dir = Positive \<or> dir = Negative
 2. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> dir = Positive \<or> dir = Negative
 3. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> a = LE dir x c
 4. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> dir = Positive \<or> dir = Negative
 5. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> dir = Positive \<or> dir = Negative
 6. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<notin> lvars (\<T> s); lt dir c (\<langle>\<V> s\<rangle> x); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> P (lt dir) (UBI dir) (LBI dir) (UB dir) (LB dir) (UBI_upd dir) (UI dir) (LI dir) (LE dir) (GE dir) (update x c (update\<B>\<I> (UBI_upd dir) i x c s))
 7. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<in> lvars (\<T> s); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> a = LE dir x c
 8. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<in> lvars (\<T> s); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> dir = Positive \<or> dir = Negative
 9. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<in> lvars (\<T> s); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> dir = Positive \<or> dir = Negative
 10. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x); \<not> lt dir c (\<langle>\<V> s\<rangle> x)\<rbrakk> \<Longrightarrow> a = LE dir x c
A total of 12 subgoals...
[PROOF STEP]
have 3: "x \<notin> lvars (\<T> ?s)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. x \<notin> lvars (\<T> (update\<B>\<I> (UBI_upd dir) i x c s))
[PROOF STEP]
using id(1) ** * \<open>\<nabla> s\<close>
[PROOF STATE]
proof (prove)
using this:
?dir = Positive \<or> ?dir = Negative \<Longrightarrow> \<nabla> (update\<B>\<I> (UBI_upd ?dir) i ?x ?c ?s) = \<nabla> ?s
dir = Positive \<or> dir = Negative
a = LE dir x c
x \<notin> lvars (\<T> s)
\<not> \<U> s
\<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s
\<triangle> (\<T> s)
\<nabla> s
\<nabla> s

goal (1 subgoal):
 1. x \<notin> lvars (\<T> (update\<B>\<I> (UBI_upd dir) i x c s))
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
x \<notin> lvars (\<T> (update\<B>\<I> (UBI_upd dir) i x c s))

goal (12 subgoals):
 1. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x)\<rbrakk> \<Longrightarrow> dir = Positive \<or> dir = Negative
 2. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> dir = Positive \<or> dir = Negative
 3. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> a = LE dir x c
 4. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> dir = Positive \<or> dir = Negative
 5. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> dir = Positive \<or> dir = Negative
 6. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<notin> lvars (\<T> s); lt dir c (\<langle>\<V> s\<rangle> x); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> P (lt dir) (UBI dir) (LBI dir) (UB dir) (LB dir) (UBI_upd dir) (UI dir) (LI dir) (LE dir) (GE dir) (update x c (update\<B>\<I> (UBI_upd dir) i x c s))
 7. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<in> lvars (\<T> s); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> a = LE dir x c
 8. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<in> lvars (\<T> s); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> dir = Positive \<or> dir = Negative
 9. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<in> lvars (\<T> s); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> dir = Positive \<or> dir = Negative
 10. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x); \<not> lt dir c (\<langle>\<V> s\<rangle> x)\<rbrakk> \<Longrightarrow> a = LE dir x c
A total of 12 subgoals...
[PROOF STEP]
have "?P'' dir ?s"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. P (lt dir) (UBI dir) (LBI dir) (UB dir) (LB dir) (UBI_upd dir) (UI dir) (LI dir) (LE dir) (GE dir) (update\<B>\<I> (UBI_upd dir) i x c s)
[PROOF STEP]
using **
[PROOF STATE]
proof (prove)
using this:
dir = Positive \<or> dir = Negative
a = LE dir x c
x \<notin> lvars (\<T> s)

goal (1 subgoal):
 1. P (lt dir) (UBI dir) (LBI dir) (UB dir) (LB dir) (UBI_upd dir) (UI dir) (LI dir) (LE dir) (GE dir) (update\<B>\<I> (UBI_upd dir) i x c s)
[PROOF STEP]
by (intro updateIB P'') auto
[PROOF STATE]
proof (state)
this:
P (lt dir) (UBI dir) (LBI dir) (UB dir) (LB dir) (UBI_upd dir) (UI dir) (LI dir) (LE dir) (GE dir) (update\<B>\<I> (UBI_upd dir) i x c s)

goal (12 subgoals):
 1. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x)\<rbrakk> \<Longrightarrow> dir = Positive \<or> dir = Negative
 2. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> dir = Positive \<or> dir = Negative
 3. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> a = LE dir x c
 4. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> dir = Positive \<or> dir = Negative
 5. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> dir = Positive \<or> dir = Negative
 6. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<notin> lvars (\<T> s); lt dir c (\<langle>\<V> s\<rangle> x); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> P (lt dir) (UBI dir) (LBI dir) (UB dir) (LB dir) (UBI_upd dir) (UI dir) (LI dir) (LE dir) (GE dir) (update x c (update\<B>\<I> (UBI_upd dir) i x c s))
 7. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<in> lvars (\<T> s); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> a = LE dir x c
 8. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<in> lvars (\<T> s); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> dir = Positive \<or> dir = Negative
 9. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<in> lvars (\<T> s); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> dir = Positive \<or> dir = Negative
 10. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x); \<not> lt dir c (\<langle>\<V> s\<rangle> x)\<rbrakk> \<Longrightarrow> a = LE dir x c
A total of 12 subgoals...
[PROOF STEP]
with update_id[of ?s x c, OF 1 2 3, unfolded Let_def]  **(1)
[PROOF STATE]
proof (chain)
picking this:
\<T> (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) = \<T> (update\<B>\<I> (UBI_upd dir) i x c s) \<and> \<B>\<^sub>i (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) = \<B>\<^sub>i (update\<B>\<I> (UBI_upd dir) i x c s) \<and> \<U> (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) = \<U> (update\<B>\<I> (UBI_upd dir) i x c s) \<and> \<U>\<^sub>c (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) = \<U>\<^sub>c (update\<B>\<I> (UBI_upd dir) i x c s)
dir = Positive \<or> dir = Negative
P (lt dir) (UBI dir) (LBI dir) (UB dir) (LB dir) (UBI_upd dir) (UI dir) (LI dir) (LE dir) (GE dir) (update\<B>\<I> (UBI_upd dir) i x c s)
[PROOF STEP]
show "P (lt dir) (UBI dir) (LBI dir) (UB dir) (LB dir) (UBI_upd dir) (UI dir) (LI dir) (LE dir) (GE dir)
        (update x c (update\<B>\<I> (UBI_upd dir) i x c s))"
[PROOF STATE]
proof (prove)
using this:
\<T> (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) = \<T> (update\<B>\<I> (UBI_upd dir) i x c s) \<and> \<B>\<^sub>i (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) = \<B>\<^sub>i (update\<B>\<I> (UBI_upd dir) i x c s) \<and> \<U> (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) = \<U> (update\<B>\<I> (UBI_upd dir) i x c s) \<and> \<U>\<^sub>c (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) = \<U>\<^sub>c (update\<B>\<I> (UBI_upd dir) i x c s)
dir = Positive \<or> dir = Negative
P (lt dir) (UBI dir) (LBI dir) (UB dir) (LB dir) (UBI_upd dir) (UI dir) (LI dir) (LE dir) (GE dir) (update\<B>\<I> (UBI_upd dir) i x c s)

goal (1 subgoal):
 1. P (lt dir) (UBI dir) (LBI dir) (UB dir) (LB dir) (UBI_upd dir) (UI dir) (LI dir) (LE dir) (GE dir) (update x c (update\<B>\<I> (UBI_upd dir) i x c s))
[PROOF STEP]
unfolding P_def s'_def[symmetric]
[PROOF STATE]
proof (prove)
using this:
\<T> (update x c s') = \<T> s' \<and> \<B>\<^sub>i (update x c s') = \<B>\<^sub>i s' \<and> \<U> (update x c s') = \<U> s' \<and> \<U>\<^sub>c (update x c s') = \<U>\<^sub>c s'
dir = Positive \<or> dir = Negative
(\<forall>x c i. Mapping.lookup (UBI dir s') x = Some (i, c) \<longrightarrow> (i, LE dir x c) \<in> I) \<and> (\<forall>x c i. Mapping.lookup (LBI dir s') x = Some (i, c) \<longrightarrow> (i, GE dir x c) \<in> I)

goal (1 subgoal):
 1. (\<forall>xa ca i. Mapping.lookup (UBI dir (update x c s')) xa = Some (i, ca) \<longrightarrow> (i, LE dir xa ca) \<in> I) \<and> (\<forall>xa ca i. Mapping.lookup (LBI dir (update x c s')) xa = Some (i, ca) \<longrightarrow> (i, GE dir xa ca) \<in> I)
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
P (lt dir) (UBI dir) (LBI dir) (UB dir) (LB dir) (UBI_upd dir) (UI dir) (LI dir) (LE dir) (GE dir) (update x c (update\<B>\<I> (UBI_upd dir) i x c s))

goal (11 subgoals):
 1. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x)\<rbrakk> \<Longrightarrow> dir = Positive \<or> dir = Negative
 2. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> dir = Positive \<or> dir = Negative
 3. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> a = LE dir x c
 4. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> dir = Positive \<or> dir = Negative
 5. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> dir = Positive \<or> dir = Negative
 6. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<in> lvars (\<T> s); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> a = LE dir x c
 7. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<in> lvars (\<T> s); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> dir = Positive \<or> dir = Negative
 8. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<in> lvars (\<T> s); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> dir = Positive \<or> dir = Negative
 9. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x); \<not> lt dir c (\<langle>\<V> s\<rangle> x)\<rbrakk> \<Longrightarrow> a = LE dir x c
 10. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x); \<not> lt dir c (\<langle>\<V> s\<rangle> x)\<rbrakk> \<Longrightarrow> dir = Positive \<or> dir = Negative
A total of 11 subgoals...
[PROOF STEP]
qed auto
[PROOF STATE]
proof (state)
this:
index_valid (insert ia as) (assert_bound ia s)

goal (1 subgoal):
 1. \<And>s ats a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; ats \<Turnstile>\<^sub>i \<B>\<I> s\<rbrakk> \<Longrightarrow> insert a ats \<Turnstile>\<^sub>i \<B>\<I> (assert_bound a s)
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. \<And>s ats a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; ats \<Turnstile>\<^sub>i \<B>\<I> s\<rbrakk> \<Longrightarrow> insert a ats \<Turnstile>\<^sub>i \<B>\<I> (assert_bound a s)
[PROOF STEP]
fix s and ia :: "('i,'a) i_atom" and ats :: "('i,'a) i_atom set"
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. \<And>s ats a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; ats \<Turnstile>\<^sub>i \<B>\<I> s\<rbrakk> \<Longrightarrow> insert a ats \<Turnstile>\<^sub>i \<B>\<I> (assert_bound a s)
[PROOF STEP]
assume *: "\<not> \<U> s" "\<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s" "\<triangle> (\<T> s)" "\<nabla> s" "\<diamond> s" and ats: "ats \<Turnstile>\<^sub>i \<B>\<I> s"
[PROOF STATE]
proof (state)
this:
\<not> \<U> s
\<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s
\<triangle> (\<T> s)
\<nabla> s
\<diamond> s
ats \<Turnstile>\<^sub>i \<B>\<I> s

goal (1 subgoal):
 1. \<And>s ats a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; ats \<Turnstile>\<^sub>i \<B>\<I> s\<rbrakk> \<Longrightarrow> insert a ats \<Turnstile>\<^sub>i \<B>\<I> (assert_bound a s)
[PROOF STEP]
obtain i a where ia: "ia = (i,a)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (\<And>i a. ia = (i, a) \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by force
[PROOF STATE]
proof (state)
this:
ia = (i, a)

goal (1 subgoal):
 1. \<And>s ats a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; ats \<Turnstile>\<^sub>i \<B>\<I> s\<rbrakk> \<Longrightarrow> insert a ats \<Turnstile>\<^sub>i \<B>\<I> (assert_bound a s)
[PROOF STEP]
have id: "\<And> dir x c s. dir = Positive \<or> dir = Negative \<Longrightarrow>
     \<nabla> (update\<B>\<I> (UBI_upd dir) i x c s) = \<nabla> s"
    "\<And> s I. \<nabla> (set_unsat I s) = \<nabla> s"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (\<And>dir x c s. dir = Positive \<or> dir = Negative \<Longrightarrow> \<nabla> (update\<B>\<I> (UBI_upd dir) i x c s) = \<nabla> s) &&& (\<And>s I. \<nabla> (set_unsat I s) = \<nabla> s)
[PROOF STEP]
by (auto simp add: tableau_valuated_def)
[PROOF STATE]
proof (state)
this:
?dir = Positive \<or> ?dir = Negative \<Longrightarrow> \<nabla> (update\<B>\<I> (UBI_upd ?dir) i ?x ?c ?s) = \<nabla> ?s
\<nabla> (set_unsat ?I ?s) = \<nabla> ?s

goal (1 subgoal):
 1. \<And>s ats a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; ats \<Turnstile>\<^sub>i \<B>\<I> s\<rbrakk> \<Longrightarrow> insert a ats \<Turnstile>\<^sub>i \<B>\<I> (assert_bound a s)
[PROOF STEP]
have idlt: "(c < (a :: 'a) \<or> c = a) = (c \<le> a)"
    "(a < c \<or> c = a) = (c \<ge> a)" for a c
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (c < a \<or> c = a) = (c \<le> a) &&& (a < c \<or> c = a) = (a \<le> c)
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
(?c1 < ?a1 \<or> ?c1 = ?a1) = (?c1 \<le> ?a1)
(?a1 < ?c1 \<or> ?c1 = ?a1) = (?a1 \<le> ?c1)

goal (1 subgoal):
 1. \<And>s ats a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; ats \<Turnstile>\<^sub>i \<B>\<I> s\<rbrakk> \<Longrightarrow> insert a ats \<Turnstile>\<^sub>i \<B>\<I> (assert_bound a s)
[PROOF STEP]
define A where "A = insert (i,a) ats"
[PROOF STATE]
proof (state)
this:
A = insert (i, a) ats

goal (1 subgoal):
 1. \<And>s ats a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; ats \<Turnstile>\<^sub>i \<B>\<I> s\<rbrakk> \<Longrightarrow> insert a ats \<Turnstile>\<^sub>i \<B>\<I> (assert_bound a s)
[PROOF STEP]
let ?P = "\<lambda> (s :: ('i,'a) state). A \<Turnstile>\<^sub>i \<B>\<I> s"
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. \<And>s ats a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; ats \<Turnstile>\<^sub>i \<B>\<I> s\<rbrakk> \<Longrightarrow> insert a ats \<Turnstile>\<^sub>i \<B>\<I> (assert_bound a s)
[PROOF STEP]
let ?Q = "\<lambda> bs (lt :: 'a \<Rightarrow> 'a \<Rightarrow> bool)
    (UBI :: ('i,'a) state \<Rightarrow> ('i,'a) bounds_index) (LBI :: ('i,'a) state \<Rightarrow> ('i,'a) bounds_index)
    (UB :: ('i,'a) state \<Rightarrow> 'a bounds) (LB :: ('i,'a) state \<Rightarrow> 'a bounds)
    (UBI_upd :: (('i,'a) bounds_index \<Rightarrow> ('i,'a) bounds_index) \<Rightarrow> ('i,'a) state \<Rightarrow> ('i,'a) state)
    UI LI
    (LE :: nat \<Rightarrow> 'a \<Rightarrow> 'a atom) (GE :: nat \<Rightarrow> 'a \<Rightarrow> 'a atom) s'.
       (\<forall> I v. (I :: 'i set,v) \<Turnstile>\<^sub>i\<^sub>a\<^sub>s bs \<longrightarrow>
       ((\<forall> x c. LB s' x = Some c \<longrightarrow> LI s' x \<in> I \<longrightarrow> lt c (v x) \<or> c = v x)
      \<and> (\<forall> x c. UB s' x = Some c \<longrightarrow> UI s' x \<in> I \<longrightarrow> lt (v x) c \<or> v x = c)))"
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. \<And>s ats a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; ats \<Turnstile>\<^sub>i \<B>\<I> s\<rbrakk> \<Longrightarrow> insert a ats \<Turnstile>\<^sub>i \<B>\<I> (assert_bound a s)
[PROOF STEP]
define Q where "Q = ?Q"
[PROOF STATE]
proof (state)
this:
Q = (\<lambda>bs lt UBI LBI UB LB UBI_upd UI LI LE GE s'. \<forall>I v. (I, v) \<Turnstile>\<^sub>i\<^sub>a\<^sub>s bs \<longrightarrow> (\<forall>x c. LB s' x = Some c \<longrightarrow> LI s' x \<in> I \<longrightarrow> lt c (v x) \<or> c = v x) \<and> (\<forall>x c. UB s' x = Some c \<longrightarrow> UI s' x \<in> I \<longrightarrow> lt (v x) c \<or> v x = c))

goal (1 subgoal):
 1. \<And>s ats a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; ats \<Turnstile>\<^sub>i \<B>\<I> s\<rbrakk> \<Longrightarrow> insert a ats \<Turnstile>\<^sub>i \<B>\<I> (assert_bound a s)
[PROOF STEP]
let ?P' = "Q A"
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. \<And>s ats a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; ats \<Turnstile>\<^sub>i \<B>\<I> s\<rbrakk> \<Longrightarrow> insert a ats \<Turnstile>\<^sub>i \<B>\<I> (assert_bound a s)
[PROOF STEP]
have equiv:
    "bs \<Turnstile>\<^sub>i \<B>\<I> s' \<longleftrightarrow> Q bs (<) \<B>\<^sub>i\<^sub>u \<B>\<^sub>i\<^sub>l \<B>\<^sub>u \<B>\<^sub>l \<B>\<^sub>i\<^sub>u_update \<I>\<^sub>u \<I>\<^sub>l Leq Geq s'"
    "bs \<Turnstile>\<^sub>i \<B>\<I> s' \<longleftrightarrow> Q bs (>) \<B>\<^sub>i\<^sub>l \<B>\<^sub>i\<^sub>u \<B>\<^sub>l \<B>\<^sub>u \<B>\<^sub>i\<^sub>l_update \<I>\<^sub>l \<I>\<^sub>u Geq Leq s'"
    for bs s'
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. bs \<Turnstile>\<^sub>i \<B>\<I> s' = Q bs (<) \<B>\<^sub>i\<^sub>u \<B>\<^sub>i\<^sub>l \<B>\<^sub>u \<B>\<^sub>l \<B>\<^sub>i\<^sub>u_update \<I>\<^sub>u \<I>\<^sub>l Leq Geq s' &&& bs \<Turnstile>\<^sub>i \<B>\<I> s' = Q bs (\<lambda>x y. y < x) \<B>\<^sub>i\<^sub>l \<B>\<^sub>i\<^sub>u \<B>\<^sub>l \<B>\<^sub>u \<B>\<^sub>i\<^sub>l_update \<I>\<^sub>l \<I>\<^sub>u Geq Leq s'
[PROOF STEP]
unfolding satisfies_bounds_set.simps in_bounds.simps bound_compare_defs index_valid_def Q_def
      atoms_imply_bounds_index.simps
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (\<forall>I v. (I, v) \<Turnstile>\<^sub>i\<^sub>a\<^sub>s bs \<longrightarrow> (I, v) \<Turnstile>\<^sub>i\<^sub>b \<B>\<I> s') = (\<forall>I v. (I, v) \<Turnstile>\<^sub>i\<^sub>a\<^sub>s bs \<longrightarrow> (\<forall>x c. \<B>\<^sub>l s' x = Some c \<longrightarrow> \<I>\<^sub>l s' x \<in> I \<longrightarrow> c < v x \<or> c = v x) \<and> (\<forall>x c. \<B>\<^sub>u s' x = Some c \<longrightarrow> \<I>\<^sub>u s' x \<in> I \<longrightarrow> v x < c \<or> v x = c)) &&& (\<forall>I v. (I, v) \<Turnstile>\<^sub>i\<^sub>a\<^sub>s bs \<longrightarrow> (I, v) \<Turnstile>\<^sub>i\<^sub>b \<B>\<I> s') = (\<forall>I v. (I, v) \<Turnstile>\<^sub>i\<^sub>a\<^sub>s bs \<longrightarrow> (\<forall>x c. \<B>\<^sub>u s' x = Some c \<longrightarrow> \<I>\<^sub>u s' x \<in> I \<longrightarrow> v x < c \<or> c = v x) \<and> (\<forall>x c. \<B>\<^sub>l s' x = Some c \<longrightarrow> \<I>\<^sub>l s' x \<in> I \<longrightarrow> c < v x \<or> v x = c))
[PROOF STEP]
by (atomize(full), (intro conjI iff_exI allI arg_cong2[of _ _ _ _ "(\<and>)"] refl iff_allI
          arg_cong2[of _ _ _ _ "(=)"]; unfold satisfies_bounds_index.simps idlt), auto)
[PROOF STATE]
proof (state)
this:
?bs1 \<Turnstile>\<^sub>i \<B>\<I> ?s'1 = Q ?bs1 (<) \<B>\<^sub>i\<^sub>u \<B>\<^sub>i\<^sub>l \<B>\<^sub>u \<B>\<^sub>l \<B>\<^sub>i\<^sub>u_update \<I>\<^sub>u \<I>\<^sub>l Leq Geq ?s'1
?bs1 \<Turnstile>\<^sub>i \<B>\<I> ?s'1 = Q ?bs1 (\<lambda>x y. y < x) \<B>\<^sub>i\<^sub>l \<B>\<^sub>i\<^sub>u \<B>\<^sub>l \<B>\<^sub>u \<B>\<^sub>i\<^sub>l_update \<I>\<^sub>l \<I>\<^sub>u Geq Leq ?s'1

goal (1 subgoal):
 1. \<And>s ats a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; ats \<Turnstile>\<^sub>i \<B>\<I> s\<rbrakk> \<Longrightarrow> insert a ats \<Turnstile>\<^sub>i \<B>\<I> (assert_bound a s)
[PROOF STEP]
have x: "\<And> s'. ?P s' = ?P' (<) \<B>\<^sub>i\<^sub>u \<B>\<^sub>i\<^sub>l \<B>\<^sub>u \<B>\<^sub>l \<B>\<^sub>i\<^sub>u_update \<I>\<^sub>u \<I>\<^sub>l Leq Geq s'"
    and xx: "\<And> s'. ?P s' = ?P' (>) \<B>\<^sub>i\<^sub>l \<B>\<^sub>i\<^sub>u \<B>\<^sub>l \<B>\<^sub>u \<B>\<^sub>i\<^sub>l_update \<I>\<^sub>l \<I>\<^sub>u Geq Leq s'"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (\<And>s'. A \<Turnstile>\<^sub>i \<B>\<I> s' = Q A (<) \<B>\<^sub>i\<^sub>u \<B>\<^sub>i\<^sub>l \<B>\<^sub>u \<B>\<^sub>l \<B>\<^sub>i\<^sub>u_update \<I>\<^sub>u \<I>\<^sub>l Leq Geq s') &&& (\<And>s'. A \<Turnstile>\<^sub>i \<B>\<I> s' = Q A (\<lambda>x y. y < x) \<B>\<^sub>i\<^sub>l \<B>\<^sub>i\<^sub>u \<B>\<^sub>l \<B>\<^sub>u \<B>\<^sub>i\<^sub>l_update \<I>\<^sub>l \<I>\<^sub>u Geq Leq s')
[PROOF STEP]
using equiv
[PROOF STATE]
proof (prove)
using this:
?bs1 \<Turnstile>\<^sub>i \<B>\<I> ?s'1 = Q ?bs1 (<) \<B>\<^sub>i\<^sub>u \<B>\<^sub>i\<^sub>l \<B>\<^sub>u \<B>\<^sub>l \<B>\<^sub>i\<^sub>u_update \<I>\<^sub>u \<I>\<^sub>l Leq Geq ?s'1
?bs1 \<Turnstile>\<^sub>i \<B>\<I> ?s'1 = Q ?bs1 (\<lambda>x y. y < x) \<B>\<^sub>i\<^sub>l \<B>\<^sub>i\<^sub>u \<B>\<^sub>l \<B>\<^sub>u \<B>\<^sub>i\<^sub>l_update \<I>\<^sub>l \<I>\<^sub>u Geq Leq ?s'1

goal (1 subgoal):
 1. (\<And>s'. A \<Turnstile>\<^sub>i \<B>\<I> s' = Q A (<) \<B>\<^sub>i\<^sub>u \<B>\<^sub>i\<^sub>l \<B>\<^sub>u \<B>\<^sub>l \<B>\<^sub>i\<^sub>u_update \<I>\<^sub>u \<I>\<^sub>l Leq Geq s') &&& (\<And>s'. A \<Turnstile>\<^sub>i \<B>\<I> s' = Q A (\<lambda>x y. y < x) \<B>\<^sub>i\<^sub>l \<B>\<^sub>i\<^sub>u \<B>\<^sub>l \<B>\<^sub>u \<B>\<^sub>i\<^sub>l_update \<I>\<^sub>l \<I>\<^sub>u Geq Leq s')
[PROOF STEP]
by blast+
[PROOF STATE]
proof (state)
this:
A \<Turnstile>\<^sub>i \<B>\<I> ?s'1 = Q A (<) \<B>\<^sub>i\<^sub>u \<B>\<^sub>i\<^sub>l \<B>\<^sub>u \<B>\<^sub>l \<B>\<^sub>i\<^sub>u_update \<I>\<^sub>u \<I>\<^sub>l Leq Geq ?s'1
A \<Turnstile>\<^sub>i \<B>\<I> ?s'1 = Q A (\<lambda>x y. y < x) \<B>\<^sub>i\<^sub>l \<B>\<^sub>i\<^sub>u \<B>\<^sub>l \<B>\<^sub>u \<B>\<^sub>i\<^sub>l_update \<I>\<^sub>l \<I>\<^sub>u Geq Leq ?s'1

goal (1 subgoal):
 1. \<And>s ats a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; ats \<Turnstile>\<^sub>i \<B>\<I> s\<rbrakk> \<Longrightarrow> insert a ats \<Turnstile>\<^sub>i \<B>\<I> (assert_bound a s)
[PROOF STEP]
from ats equiv[of ats s]
[PROOF STATE]
proof (chain)
picking this:
ats \<Turnstile>\<^sub>i \<B>\<I> s
ats \<Turnstile>\<^sub>i \<B>\<I> s = Q ats (<) \<B>\<^sub>i\<^sub>u \<B>\<^sub>i\<^sub>l \<B>\<^sub>u \<B>\<^sub>l \<B>\<^sub>i\<^sub>u_update \<I>\<^sub>u \<I>\<^sub>l Leq Geq s
ats \<Turnstile>\<^sub>i \<B>\<I> s = Q ats (\<lambda>x y. y < x) \<B>\<^sub>i\<^sub>l \<B>\<^sub>i\<^sub>u \<B>\<^sub>l \<B>\<^sub>u \<B>\<^sub>i\<^sub>l_update \<I>\<^sub>l \<I>\<^sub>u Geq Leq s
[PROOF STEP]
have Q_ats:
    "Q ats (<) \<B>\<^sub>i\<^sub>u \<B>\<^sub>i\<^sub>l \<B>\<^sub>u \<B>\<^sub>l \<B>\<^sub>i\<^sub>u_update \<I>\<^sub>u \<I>\<^sub>l Leq Geq s"
    "Q ats (>) \<B>\<^sub>i\<^sub>l \<B>\<^sub>i\<^sub>u \<B>\<^sub>l \<B>\<^sub>u \<B>\<^sub>i\<^sub>l_update \<I>\<^sub>l \<I>\<^sub>u Geq Leq s"
[PROOF STATE]
proof (prove)
using this:
ats \<Turnstile>\<^sub>i \<B>\<I> s
ats \<Turnstile>\<^sub>i \<B>\<I> s = Q ats (<) \<B>\<^sub>i\<^sub>u \<B>\<^sub>i\<^sub>l \<B>\<^sub>u \<B>\<^sub>l \<B>\<^sub>i\<^sub>u_update \<I>\<^sub>u \<I>\<^sub>l Leq Geq s
ats \<Turnstile>\<^sub>i \<B>\<I> s = Q ats (\<lambda>x y. y < x) \<B>\<^sub>i\<^sub>l \<B>\<^sub>i\<^sub>u \<B>\<^sub>l \<B>\<^sub>u \<B>\<^sub>i\<^sub>l_update \<I>\<^sub>l \<I>\<^sub>u Geq Leq s

goal (1 subgoal):
 1. Q ats (<) \<B>\<^sub>i\<^sub>u \<B>\<^sub>i\<^sub>l \<B>\<^sub>u \<B>\<^sub>l \<B>\<^sub>i\<^sub>u_update \<I>\<^sub>u \<I>\<^sub>l Leq Geq s &&& Q ats (\<lambda>x y. y < x) \<B>\<^sub>i\<^sub>l \<B>\<^sub>i\<^sub>u \<B>\<^sub>l \<B>\<^sub>u \<B>\<^sub>i\<^sub>l_update \<I>\<^sub>l \<I>\<^sub>u Geq Leq s
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
Q ats (<) \<B>\<^sub>i\<^sub>u \<B>\<^sub>i\<^sub>l \<B>\<^sub>u \<B>\<^sub>l \<B>\<^sub>i\<^sub>u_update \<I>\<^sub>u \<I>\<^sub>l Leq Geq s
Q ats (\<lambda>x y. y < x) \<B>\<^sub>i\<^sub>l \<B>\<^sub>i\<^sub>u \<B>\<^sub>l \<B>\<^sub>u \<B>\<^sub>i\<^sub>l_update \<I>\<^sub>l \<I>\<^sub>u Geq Leq s

goal (1 subgoal):
 1. \<And>s ats a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; ats \<Turnstile>\<^sub>i \<B>\<I> s\<rbrakk> \<Longrightarrow> insert a ats \<Turnstile>\<^sub>i \<B>\<I> (assert_bound a s)
[PROOF STEP]
let ?P'' = "\<lambda> (dir :: ('i,'a) Direction). ?P' (lt dir) (UBI dir) (LBI dir) (UB dir) (LB dir) (UBI_upd dir) (UI dir) (LI dir) (LE dir) (GE dir)"
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. \<And>s ats a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; ats \<Turnstile>\<^sub>i \<B>\<I> s\<rbrakk> \<Longrightarrow> insert a ats \<Turnstile>\<^sub>i \<B>\<I> (assert_bound a s)
[PROOF STEP]
have P_upd: "dir = Positive \<or> dir = Negative \<Longrightarrow> ?P'' dir (set_unsat I s) = ?P'' dir s" for s I dir
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. dir = Positive \<or> dir = Negative \<Longrightarrow> Q A (lt dir) (UBI dir) (LBI dir) (UB dir) (LB dir) (UBI_upd dir) (UI dir) (LI dir) (LE dir) (GE dir) (set_unsat I s) = Q A (lt dir) (UBI dir) (LBI dir) (UB dir) (LB dir) (UBI_upd dir) (UI dir) (LI dir) (LE dir) (GE dir) s
[PROOF STEP]
unfolding Q_def
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. dir = Positive \<or> dir = Negative \<Longrightarrow> (\<forall>Ia v. (Ia, v) \<Turnstile>\<^sub>i\<^sub>a\<^sub>s A \<longrightarrow> (\<forall>x c. LB dir (set_unsat I s) x = Some c \<longrightarrow> LI dir (set_unsat I s) x \<in> Ia \<longrightarrow> lt dir c (v x) \<or> c = v x) \<and> (\<forall>x c. UB dir (set_unsat I s) x = Some c \<longrightarrow> UI dir (set_unsat I s) x \<in> Ia \<longrightarrow> lt dir (v x) c \<or> v x = c)) = (\<forall>I v. (I, v) \<Turnstile>\<^sub>i\<^sub>a\<^sub>s A \<longrightarrow> (\<forall>x c. LB dir s x = Some c \<longrightarrow> LI dir s x \<in> I \<longrightarrow> lt dir c (v x) \<or> c = v x) \<and> (\<forall>x c. UB dir s x = Some c \<longrightarrow> UI dir s x \<in> I \<longrightarrow> lt dir (v x) c \<or> v x = c))
[PROOF STEP]
by (intro iff_exI arg_cong2[of _ _ _ _ "(\<and>)"] refl iff_allI arg_cong2[of _ _ _ _ "(=)"]
        arg_cong2[of _ _ _ _ "(\<longrightarrow>)"], auto simp: boundsl_def boundsu_def indexl_def indexu_def)
[PROOF STATE]
proof (state)
this:
?dir1 = Positive \<or> ?dir1 = Negative \<Longrightarrow> Q A (lt ?dir1) (UBI ?dir1) (LBI ?dir1) (UB ?dir1) (LB ?dir1) (UBI_upd ?dir1) (UI ?dir1) (LI ?dir1) (LE ?dir1) (GE ?dir1) (set_unsat ?I1 ?s1) = Q A (lt ?dir1) (UBI ?dir1) (LBI ?dir1) (UB ?dir1) (LB ?dir1) (UBI_upd ?dir1) (UI ?dir1) (LI ?dir1) (LE ?dir1) (GE ?dir1) ?s1

goal (1 subgoal):
 1. \<And>s ats a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; ats \<Turnstile>\<^sub>i \<B>\<I> s\<rbrakk> \<Longrightarrow> insert a ats \<Turnstile>\<^sub>i \<B>\<I> (assert_bound a s)
[PROOF STEP]
have P_upd: "dir = Positive \<or> dir = Negative \<Longrightarrow> ?P'' dir s \<Longrightarrow> ?P'' dir (set_unsat I s)" for s I dir
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<lbrakk>dir = Positive \<or> dir = Negative; Q A (lt dir) (UBI dir) (LBI dir) (UB dir) (LB dir) (UBI_upd dir) (UI dir) (LI dir) (LE dir) (GE dir) s\<rbrakk> \<Longrightarrow> Q A (lt dir) (UBI dir) (LBI dir) (UB dir) (LB dir) (UBI_upd dir) (UI dir) (LI dir) (LE dir) (GE dir) (set_unsat I s)
[PROOF STEP]
using P_upd[of dir]
[PROOF STATE]
proof (prove)
using this:
dir = Positive \<or> dir = Negative \<Longrightarrow> Q A (lt dir) (UBI dir) (LBI dir) (UB dir) (LB dir) (UBI_upd dir) (UI dir) (LI dir) (LE dir) (GE dir) (set_unsat ?I1 ?s1) = Q A (lt dir) (UBI dir) (LBI dir) (UB dir) (LB dir) (UBI_upd dir) (UI dir) (LI dir) (LE dir) (GE dir) ?s1

goal (1 subgoal):
 1. \<lbrakk>dir = Positive \<or> dir = Negative; Q A (lt dir) (UBI dir) (LBI dir) (UB dir) (LB dir) (UBI_upd dir) (UI dir) (LI dir) (LE dir) (GE dir) s\<rbrakk> \<Longrightarrow> Q A (lt dir) (UBI dir) (LBI dir) (UB dir) (LB dir) (UBI_upd dir) (UI dir) (LI dir) (LE dir) (GE dir) (set_unsat I s)
[PROOF STEP]
by blast
[PROOF STATE]
proof (state)
this:
\<lbrakk>?dir1 = Positive \<or> ?dir1 = Negative; Q A (lt ?dir1) (UBI ?dir1) (LBI ?dir1) (UB ?dir1) (LB ?dir1) (UBI_upd ?dir1) (UI ?dir1) (LI ?dir1) (LE ?dir1) (GE ?dir1) ?s1\<rbrakk> \<Longrightarrow> Q A (lt ?dir1) (UBI ?dir1) (LBI ?dir1) (UB ?dir1) (LB ?dir1) (UBI_upd ?dir1) (UI ?dir1) (LI ?dir1) (LE ?dir1) (GE ?dir1) (set_unsat ?I1 ?s1)

goal (1 subgoal):
 1. \<And>s ats a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; ats \<Turnstile>\<^sub>i \<B>\<I> s\<rbrakk> \<Longrightarrow> insert a ats \<Turnstile>\<^sub>i \<B>\<I> (assert_bound a s)
[PROOF STEP]
have ats_sub: "ats \<subseteq> A"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. ats \<subseteq> A
[PROOF STEP]
unfolding A_def
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. ats \<subseteq> insert (i, a) ats
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
ats \<subseteq> A

goal (1 subgoal):
 1. \<And>s ats a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; ats \<Turnstile>\<^sub>i \<B>\<I> s\<rbrakk> \<Longrightarrow> insert a ats \<Turnstile>\<^sub>i \<B>\<I> (assert_bound a s)
[PROOF STEP]
{
[PROOF STATE]
proof (state)
this:
ats \<subseteq> A

goal (1 subgoal):
 1. \<And>s ats a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; ats \<Turnstile>\<^sub>i \<B>\<I> s\<rbrakk> \<Longrightarrow> insert a ats \<Turnstile>\<^sub>i \<B>\<I> (assert_bound a s)
[PROOF STEP]
fix x c and dir :: "('i,'a) Direction"
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. \<And>s ats a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; ats \<Turnstile>\<^sub>i \<B>\<I> s\<rbrakk> \<Longrightarrow> insert a ats \<Turnstile>\<^sub>i \<B>\<I> (assert_bound a s)
[PROOF STEP]
assume dir: "dir = Positive \<or> dir = Negative"
      and a: "a = LE dir x c"
[PROOF STATE]
proof (state)
this:
dir = Positive \<or> dir = Negative
a = LE dir x c

goal (1 subgoal):
 1. \<And>s ats a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; ats \<Turnstile>\<^sub>i \<B>\<I> s\<rbrakk> \<Longrightarrow> insert a ats \<Turnstile>\<^sub>i \<B>\<I> (assert_bound a s)
[PROOF STEP]
from Q_ats dir
[PROOF STATE]
proof (chain)
picking this:
Q ats (<) \<B>\<^sub>i\<^sub>u \<B>\<^sub>i\<^sub>l \<B>\<^sub>u \<B>\<^sub>l \<B>\<^sub>i\<^sub>u_update \<I>\<^sub>u \<I>\<^sub>l Leq Geq s
Q ats (\<lambda>x y. y < x) \<B>\<^sub>i\<^sub>l \<B>\<^sub>i\<^sub>u \<B>\<^sub>l \<B>\<^sub>u \<B>\<^sub>i\<^sub>l_update \<I>\<^sub>l \<I>\<^sub>u Geq Leq s
dir = Positive \<or> dir = Negative
[PROOF STEP]
have Q_ats: "Q ats (lt dir) (UBI dir) (LBI dir) (UB dir) (LB dir) (UBI_upd dir) (UI dir) (LI dir) (LE dir) (GE dir) s"
[PROOF STATE]
proof (prove)
using this:
Q ats (<) \<B>\<^sub>i\<^sub>u \<B>\<^sub>i\<^sub>l \<B>\<^sub>u \<B>\<^sub>l \<B>\<^sub>i\<^sub>u_update \<I>\<^sub>u \<I>\<^sub>l Leq Geq s
Q ats (\<lambda>x y. y < x) \<B>\<^sub>i\<^sub>l \<B>\<^sub>i\<^sub>u \<B>\<^sub>l \<B>\<^sub>u \<B>\<^sub>i\<^sub>l_update \<I>\<^sub>l \<I>\<^sub>u Geq Leq s
dir = Positive \<or> dir = Negative

goal (1 subgoal):
 1. Q ats (lt dir) (UBI dir) (LBI dir) (UB dir) (LB dir) (UBI_upd dir) (UI dir) (LI dir) (LE dir) (GE dir) s
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
Q ats (lt dir) (UBI dir) (LBI dir) (UB dir) (LB dir) (UBI_upd dir) (UI dir) (LI dir) (LE dir) (GE dir) s

goal (1 subgoal):
 1. \<And>s ats a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; ats \<Turnstile>\<^sub>i \<B>\<I> s\<rbrakk> \<Longrightarrow> insert a ats \<Turnstile>\<^sub>i \<B>\<I> (assert_bound a s)
[PROOF STEP]
have "?P'' dir (update\<B>\<I> (UBI_upd dir) i x c s)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. Q A (lt dir) (UBI dir) (LBI dir) (UB dir) (LB dir) (UBI_upd dir) (UI dir) (LI dir) (LE dir) (GE dir) (update\<B>\<I> (UBI_upd dir) i x c s)
[PROOF STEP]
unfolding Q_def
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<forall>I v. (I, v) \<Turnstile>\<^sub>i\<^sub>a\<^sub>s A \<longrightarrow> (\<forall>xa ca. LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> LI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa \<in> I \<longrightarrow> lt dir ca (v xa) \<or> ca = v xa) \<and> (\<forall>xa ca. UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca \<longrightarrow> UI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa \<in> I \<longrightarrow> lt dir (v xa) ca \<or> v xa = ca)
[PROOF STEP]
proof (intro allI impI conjI)
[PROOF STATE]
proof (state)
goal (2 subgoals):
 1. \<And>I v xa ca. \<lbrakk>(I, v) \<Turnstile>\<^sub>i\<^sub>a\<^sub>s A; LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca; LI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa \<in> I\<rbrakk> \<Longrightarrow> lt dir ca (v xa) \<or> ca = v xa
 2. \<And>I v xa ca. \<lbrakk>(I, v) \<Turnstile>\<^sub>i\<^sub>a\<^sub>s A; UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca; UI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa \<in> I\<rbrakk> \<Longrightarrow> lt dir (v xa) ca \<or> v xa = ca
[PROOF STEP]
fix I v y d
[PROOF STATE]
proof (state)
goal (2 subgoals):
 1. \<And>I v xa ca. \<lbrakk>(I, v) \<Turnstile>\<^sub>i\<^sub>a\<^sub>s A; LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca; LI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa \<in> I\<rbrakk> \<Longrightarrow> lt dir ca (v xa) \<or> ca = v xa
 2. \<And>I v xa ca. \<lbrakk>(I, v) \<Turnstile>\<^sub>i\<^sub>a\<^sub>s A; UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca; UI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa \<in> I\<rbrakk> \<Longrightarrow> lt dir (v xa) ca \<or> v xa = ca
[PROOF STEP]
assume IvA: "(I, v) \<Turnstile>\<^sub>i\<^sub>a\<^sub>s A"
[PROOF STATE]
proof (state)
this:
(I, v) \<Turnstile>\<^sub>i\<^sub>a\<^sub>s A

goal (2 subgoals):
 1. \<And>I v xa ca. \<lbrakk>(I, v) \<Turnstile>\<^sub>i\<^sub>a\<^sub>s A; LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca; LI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa \<in> I\<rbrakk> \<Longrightarrow> lt dir ca (v xa) \<or> ca = v xa
 2. \<And>I v xa ca. \<lbrakk>(I, v) \<Turnstile>\<^sub>i\<^sub>a\<^sub>s A; UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca; UI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa \<in> I\<rbrakk> \<Longrightarrow> lt dir (v xa) ca \<or> v xa = ca
[PROOF STEP]
from i_satisfies_atom_set_mono[OF ats_sub this]
[PROOF STATE]
proof (chain)
picking this:
(I, v) \<Turnstile>\<^sub>i\<^sub>a\<^sub>s ats
[PROOF STEP]
have "(I, v) \<Turnstile>\<^sub>i\<^sub>a\<^sub>s ats"
[PROOF STATE]
proof (prove)
using this:
(I, v) \<Turnstile>\<^sub>i\<^sub>a\<^sub>s ats

goal (1 subgoal):
 1. (I, v) \<Turnstile>\<^sub>i\<^sub>a\<^sub>s ats
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
(I, v) \<Turnstile>\<^sub>i\<^sub>a\<^sub>s ats

goal (2 subgoals):
 1. \<And>I v xa ca. \<lbrakk>(I, v) \<Turnstile>\<^sub>i\<^sub>a\<^sub>s A; LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca; LI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa \<in> I\<rbrakk> \<Longrightarrow> lt dir ca (v xa) \<or> ca = v xa
 2. \<And>I v xa ca. \<lbrakk>(I, v) \<Turnstile>\<^sub>i\<^sub>a\<^sub>s A; UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca; UI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa \<in> I\<rbrakk> \<Longrightarrow> lt dir (v xa) ca \<or> v xa = ca
[PROOF STEP]
from Q_ats[unfolded Q_def, rule_format, OF this]
[PROOF STATE]
proof (chain)
picking this:
(\<forall>x c. LB dir s x = Some c \<longrightarrow> LI dir s x \<in> I \<longrightarrow> lt dir c (v x) \<or> c = v x) \<and> (\<forall>x c. UB dir s x = Some c \<longrightarrow> UI dir s x \<in> I \<longrightarrow> lt dir (v x) c \<or> v x = c)
[PROOF STEP]
have s_bnds:
        "LB dir s x = Some c \<Longrightarrow> LI dir s x \<in> I \<Longrightarrow> lt dir c (v x) \<or> c = v x"
        "UB dir s x = Some c \<Longrightarrow> UI dir s x \<in> I \<Longrightarrow> lt dir (v x) c \<or> v x = c" for x c
[PROOF STATE]
proof (prove)
using this:
(\<forall>x c. LB dir s x = Some c \<longrightarrow> LI dir s x \<in> I \<longrightarrow> lt dir c (v x) \<or> c = v x) \<and> (\<forall>x c. UB dir s x = Some c \<longrightarrow> UI dir s x \<in> I \<longrightarrow> lt dir (v x) c \<or> v x = c)

goal (1 subgoal):
 1. (\<lbrakk>LB dir s x = Some c; LI dir s x \<in> I\<rbrakk> \<Longrightarrow> lt dir c (v x) \<or> c = v x) &&& (\<lbrakk>UB dir s x = Some c; UI dir s x \<in> I\<rbrakk> \<Longrightarrow> lt dir (v x) c \<or> v x = c)
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
\<lbrakk>LB dir s ?x1 = Some ?c1; LI dir s ?x1 \<in> I\<rbrakk> \<Longrightarrow> lt dir ?c1 (v ?x1) \<or> ?c1 = v ?x1
\<lbrakk>UB dir s ?x1 = Some ?c1; UI dir s ?x1 \<in> I\<rbrakk> \<Longrightarrow> lt dir (v ?x1) ?c1 \<or> v ?x1 = ?c1

goal (2 subgoals):
 1. \<And>I v xa ca. \<lbrakk>(I, v) \<Turnstile>\<^sub>i\<^sub>a\<^sub>s A; LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca; LI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa \<in> I\<rbrakk> \<Longrightarrow> lt dir ca (v xa) \<or> ca = v xa
 2. \<And>I v xa ca. \<lbrakk>(I, v) \<Turnstile>\<^sub>i\<^sub>a\<^sub>s A; UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca; UI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa \<in> I\<rbrakk> \<Longrightarrow> lt dir (v xa) ca \<or> v xa = ca
[PROOF STEP]
from IvA[unfolded A_def, unfolded i_satisfies_atom_set.simps satisfies_atom_set_def, simplified]
[PROOF STATE]
proof (chain)
picking this:
\<forall>x\<in>insert (i, a) ats \<inter> I \<times> UNIV. v \<Turnstile>\<^sub>a snd x
[PROOF STEP]
have va: "i \<in> I \<Longrightarrow> v \<Turnstile>\<^sub>a a"
[PROOF STATE]
proof (prove)
using this:
\<forall>x\<in>insert (i, a) ats \<inter> I \<times> UNIV. v \<Turnstile>\<^sub>a snd x

goal (1 subgoal):
 1. i \<in> I \<Longrightarrow> v \<Turnstile>\<^sub>a a
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
i \<in> I \<Longrightarrow> v \<Turnstile>\<^sub>a a

goal (2 subgoals):
 1. \<And>I v xa ca. \<lbrakk>(I, v) \<Turnstile>\<^sub>i\<^sub>a\<^sub>s A; LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca; LI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa \<in> I\<rbrakk> \<Longrightarrow> lt dir ca (v xa) \<or> ca = v xa
 2. \<And>I v xa ca. \<lbrakk>(I, v) \<Turnstile>\<^sub>i\<^sub>a\<^sub>s A; UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca; UI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa \<in> I\<rbrakk> \<Longrightarrow> lt dir (v xa) ca \<or> v xa = ca
[PROOF STEP]
with a dir
[PROOF STATE]
proof (chain)
picking this:
a = LE dir x c
dir = Positive \<or> dir = Negative
i \<in> I \<Longrightarrow> v \<Turnstile>\<^sub>a a
[PROOF STEP]
have vc: "i \<in> I \<Longrightarrow> lt dir (v x) c \<or> v x = c"
[PROOF STATE]
proof (prove)
using this:
a = LE dir x c
dir = Positive \<or> dir = Negative
i \<in> I \<Longrightarrow> v \<Turnstile>\<^sub>a a

goal (1 subgoal):
 1. i \<in> I \<Longrightarrow> lt dir (v x) c \<or> v x = c
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
i \<in> I \<Longrightarrow> lt dir (v x) c \<or> v x = c

goal (2 subgoals):
 1. \<And>I v xa ca. \<lbrakk>(I, v) \<Turnstile>\<^sub>i\<^sub>a\<^sub>s A; LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca; LI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa \<in> I\<rbrakk> \<Longrightarrow> lt dir ca (v xa) \<or> ca = v xa
 2. \<And>I v xa ca. \<lbrakk>(I, v) \<Turnstile>\<^sub>i\<^sub>a\<^sub>s A; UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca; UI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa \<in> I\<rbrakk> \<Longrightarrow> lt dir (v xa) ca \<or> v xa = ca
[PROOF STEP]
let ?s = "(update\<B>\<I> (UBI_upd dir) i x c s)"
[PROOF STATE]
proof (state)
goal (2 subgoals):
 1. \<And>I v xa ca. \<lbrakk>(I, v) \<Turnstile>\<^sub>i\<^sub>a\<^sub>s A; LB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca; LI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa \<in> I\<rbrakk> \<Longrightarrow> lt dir ca (v xa) \<or> ca = v xa
 2. \<And>I v xa ca. \<lbrakk>(I, v) \<Turnstile>\<^sub>i\<^sub>a\<^sub>s A; UB dir (update\<B>\<I> (UBI_upd dir) i x c s) xa = Some ca; UI dir (update\<B>\<I> (UBI_upd dir) i x c s) xa \<in> I\<rbrakk> \<Longrightarrow> lt dir (v xa) ca \<or> v xa = ca
[PROOF STEP]
show "LB dir ?s y = Some d \<Longrightarrow> LI dir ?s y \<in> I \<Longrightarrow> lt dir d (v y) \<or> d = v y"
        "UB dir ?s y = Some d \<Longrightarrow> UI dir ?s y \<in> I \<Longrightarrow> lt dir (v y) d \<or> v y = d"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (\<lbrakk>LB dir (update\<B>\<I> (UBI_upd dir) i x c s) y = Some d; LI dir (update\<B>\<I> (UBI_upd dir) i x c s) y \<in> I\<rbrakk> \<Longrightarrow> lt dir d (v y) \<or> d = v y) &&& (\<lbrakk>UB dir (update\<B>\<I> (UBI_upd dir) i x c s) y = Some d; UI dir (update\<B>\<I> (UBI_upd dir) i x c s) y \<in> I\<rbrakk> \<Longrightarrow> lt dir (v y) d \<or> v y = d)
[PROOF STEP]
proof (atomize(full), goal_cases)
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. (LB dir (update\<B>\<I> (UBI_upd dir) i x c s) y = Some d \<longrightarrow> LI dir (update\<B>\<I> (UBI_upd dir) i x c s) y \<in> I \<longrightarrow> lt dir d (v y) \<or> d = v y) \<and> (UB dir (update\<B>\<I> (UBI_upd dir) i x c s) y = Some d \<longrightarrow> UI dir (update\<B>\<I> (UBI_upd dir) i x c s) y \<in> I \<longrightarrow> lt dir (v y) d \<or> v y = d)
[PROOF STEP]
case 1
[PROOF STATE]
proof (state)
this:

goal (1 subgoal):
 1. (LB dir (update\<B>\<I> (UBI_upd dir) i x c s) y = Some d \<longrightarrow> LI dir (update\<B>\<I> (UBI_upd dir) i x c s) y \<in> I \<longrightarrow> lt dir d (v y) \<or> d = v y) \<and> (UB dir (update\<B>\<I> (UBI_upd dir) i x c s) y = Some d \<longrightarrow> UI dir (update\<B>\<I> (UBI_upd dir) i x c s) y \<in> I \<longrightarrow> lt dir (v y) d \<or> v y = d)
[PROOF STEP]
consider (main) "y = x" "UI dir ?s x = i" |
          (easy1) "x \<noteq> y" | (easy2) "x = y" "UI dir ?s y \<noteq> i"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<lbrakk>\<lbrakk>y = x; UI dir (update\<B>\<I> (UBI_upd dir) i x c s) x = i\<rbrakk> \<Longrightarrow> thesis; x \<noteq> y \<Longrightarrow> thesis; \<lbrakk>x = y; UI dir (update\<B>\<I> (UBI_upd dir) i x c s) y \<noteq> i\<rbrakk> \<Longrightarrow> thesis\<rbrakk> \<Longrightarrow> thesis
[PROOF STEP]
by blast
[PROOF STATE]
proof (state)
this:
\<lbrakk>\<lbrakk>y = x; UI dir (update\<B>\<I> (UBI_upd dir) i x c s) x = i\<rbrakk> \<Longrightarrow> ?thesis1; x \<noteq> y \<Longrightarrow> ?thesis1; \<lbrakk>x = y; UI dir (update\<B>\<I> (UBI_upd dir) i x c s) y \<noteq> i\<rbrakk> \<Longrightarrow> ?thesis1\<rbrakk> \<Longrightarrow> ?thesis1

goal (1 subgoal):
 1. (LB dir (update\<B>\<I> (UBI_upd dir) i x c s) y = Some d \<longrightarrow> LI dir (update\<B>\<I> (UBI_upd dir) i x c s) y \<in> I \<longrightarrow> lt dir d (v y) \<or> d = v y) \<and> (UB dir (update\<B>\<I> (UBI_upd dir) i x c s) y = Some d \<longrightarrow> UI dir (update\<B>\<I> (UBI_upd dir) i x c s) y \<in> I \<longrightarrow> lt dir (v y) d \<or> v y = d)
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
\<lbrakk>\<lbrakk>y = x; UI dir (update\<B>\<I> (UBI_upd dir) i x c s) x = i\<rbrakk> \<Longrightarrow> ?thesis1; x \<noteq> y \<Longrightarrow> ?thesis1; \<lbrakk>x = y; UI dir (update\<B>\<I> (UBI_upd dir) i x c s) y \<noteq> i\<rbrakk> \<Longrightarrow> ?thesis1\<rbrakk> \<Longrightarrow> ?thesis1
[PROOF STEP]
show ?case
[PROOF STATE]
proof (prove)
using this:
\<lbrakk>\<lbrakk>y = x; UI dir (update\<B>\<I> (UBI_upd dir) i x c s) x = i\<rbrakk> \<Longrightarrow> ?thesis1; x \<noteq> y \<Longrightarrow> ?thesis1; \<lbrakk>x = y; UI dir (update\<B>\<I> (UBI_upd dir) i x c s) y \<noteq> i\<rbrakk> \<Longrightarrow> ?thesis1\<rbrakk> \<Longrightarrow> ?thesis1

goal (1 subgoal):
 1. (LB dir (update\<B>\<I> (UBI_upd dir) i x c s) y = Some d \<longrightarrow> LI dir (update\<B>\<I> (UBI_upd dir) i x c s) y \<in> I \<longrightarrow> lt dir d (v y) \<or> d = v y) \<and> (UB dir (update\<B>\<I> (UBI_upd dir) i x c s) y = Some d \<longrightarrow> UI dir (update\<B>\<I> (UBI_upd dir) i x c s) y \<in> I \<longrightarrow> lt dir (v y) d \<or> v y = d)
[PROOF STEP]
proof cases
[PROOF STATE]
proof (state)
goal (3 subgoals):
 1. \<lbrakk>y = x; UI dir (update\<B>\<I> (UBI_upd dir) i x c s) x = i\<rbrakk> \<Longrightarrow> (LB dir (update\<B>\<I> (UBI_upd dir) i x c s) y = Some d \<longrightarrow> LI dir (update\<B>\<I> (UBI_upd dir) i x c s) y \<in> I \<longrightarrow> lt dir d (v y) \<or> d = v y) \<and> (UB dir (update\<B>\<I> (UBI_upd dir) i x c s) y = Some d \<longrightarrow> UI dir (update\<B>\<I> (UBI_upd dir) i x c s) y \<in> I \<longrightarrow> lt dir (v y) d \<or> v y = d)
 2. x \<noteq> y \<Longrightarrow> (LB dir (update\<B>\<I> (UBI_upd dir) i x c s) y = Some d \<longrightarrow> LI dir (update\<B>\<I> (UBI_upd dir) i x c s) y \<in> I \<longrightarrow> lt dir d (v y) \<or> d = v y) \<and> (UB dir (update\<B>\<I> (UBI_upd dir) i x c s) y = Some d \<longrightarrow> UI dir (update\<B>\<I> (UBI_upd dir) i x c s) y \<in> I \<longrightarrow> lt dir (v y) d \<or> v y = d)
 3. \<lbrakk>x = y; UI dir (update\<B>\<I> (UBI_upd dir) i x c s) y \<noteq> i\<rbrakk> \<Longrightarrow> (LB dir (update\<B>\<I> (UBI_upd dir) i x c s) y = Some d \<longrightarrow> LI dir (update\<B>\<I> (UBI_upd dir) i x c s) y \<in> I \<longrightarrow> lt dir d (v y) \<or> d = v y) \<and> (UB dir (update\<B>\<I> (UBI_upd dir) i x c s) y = Some d \<longrightarrow> UI dir (update\<B>\<I> (UBI_upd dir) i x c s) y \<in> I \<longrightarrow> lt dir (v y) d \<or> v y = d)
[PROOF STEP]
case easy1
[PROOF STATE]
proof (state)
this:
x \<noteq> y

goal (3 subgoals):
 1. \<lbrakk>y = x; UI dir (update\<B>\<I> (UBI_upd dir) i x c s) x = i\<rbrakk> \<Longrightarrow> (LB dir (update\<B>\<I> (UBI_upd dir) i x c s) y = Some d \<longrightarrow> LI dir (update\<B>\<I> (UBI_upd dir) i x c s) y \<in> I \<longrightarrow> lt dir d (v y) \<or> d = v y) \<and> (UB dir (update\<B>\<I> (UBI_upd dir) i x c s) y = Some d \<longrightarrow> UI dir (update\<B>\<I> (UBI_upd dir) i x c s) y \<in> I \<longrightarrow> lt dir (v y) d \<or> v y = d)
 2. x \<noteq> y \<Longrightarrow> (LB dir (update\<B>\<I> (UBI_upd dir) i x c s) y = Some d \<longrightarrow> LI dir (update\<B>\<I> (UBI_upd dir) i x c s) y \<in> I \<longrightarrow> lt dir d (v y) \<or> d = v y) \<and> (UB dir (update\<B>\<I> (UBI_upd dir) i x c s) y = Some d \<longrightarrow> UI dir (update\<B>\<I> (UBI_upd dir) i x c s) y \<in> I \<longrightarrow> lt dir (v y) d \<or> v y = d)
 3. \<lbrakk>x = y; UI dir (update\<B>\<I> (UBI_upd dir) i x c s) y \<noteq> i\<rbrakk> \<Longrightarrow> (LB dir (update\<B>\<I> (UBI_upd dir) i x c s) y = Some d \<longrightarrow> LI dir (update\<B>\<I> (UBI_upd dir) i x c s) y \<in> I \<longrightarrow> lt dir d (v y) \<or> d = v y) \<and> (UB dir (update\<B>\<I> (UBI_upd dir) i x c s) y = Some d \<longrightarrow> UI dir (update\<B>\<I> (UBI_upd dir) i x c s) y \<in> I \<longrightarrow> lt dir (v y) d \<or> v y = d)
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
x \<noteq> y
[PROOF STEP]
show ?thesis
[PROOF STATE]
proof (prove)
using this:
x \<noteq> y

goal (1 subgoal):
 1. (LB dir (update\<B>\<I> (UBI_upd dir) i x c s) y = Some d \<longrightarrow> LI dir (update\<B>\<I> (UBI_upd dir) i x c s) y \<in> I \<longrightarrow> lt dir d (v y) \<or> d = v y) \<and> (UB dir (update\<B>\<I> (UBI_upd dir) i x c s) y = Some d \<longrightarrow> UI dir (update\<B>\<I> (UBI_upd dir) i x c s) y \<in> I \<longrightarrow> lt dir (v y) d \<or> v y = d)
[PROOF STEP]
using s_bnds[of y d] dir
[PROOF STATE]
proof (prove)
using this:
x \<noteq> y
\<lbrakk>LB dir s y = Some d; LI dir s y \<in> I\<rbrakk> \<Longrightarrow> lt dir d (v y) \<or> d = v y
\<lbrakk>UB dir s y = Some d; UI dir s y \<in> I\<rbrakk> \<Longrightarrow> lt dir (v y) d \<or> v y = d
dir = Positive \<or> dir = Negative

goal (1 subgoal):
 1. (LB dir (update\<B>\<I> (UBI_upd dir) i x c s) y = Some d \<longrightarrow> LI dir (update\<B>\<I> (UBI_upd dir) i x c s) y \<in> I \<longrightarrow> lt dir d (v y) \<or> d = v y) \<and> (UB dir (update\<B>\<I> (UBI_upd dir) i x c s) y = Some d \<longrightarrow> UI dir (update\<B>\<I> (UBI_upd dir) i x c s) y \<in> I \<longrightarrow> lt dir (v y) d \<or> v y = d)
[PROOF STEP]
by (fastforce simp: boundsl_def boundsu_def indexl_def indexu_def)
[PROOF STATE]
proof (state)
this:
(LB dir (update\<B>\<I> (UBI_upd dir) i x c s) y = Some d \<longrightarrow> LI dir (update\<B>\<I> (UBI_upd dir) i x c s) y \<in> I \<longrightarrow> lt dir d (v y) \<or> d = v y) \<and> (UB dir (update\<B>\<I> (UBI_upd dir) i x c s) y = Some d \<longrightarrow> UI dir (update\<B>\<I> (UBI_upd dir) i x c s) y \<in> I \<longrightarrow> lt dir (v y) d \<or> v y = d)

goal (2 subgoals):
 1. \<lbrakk>y = x; UI dir (update\<B>\<I> (UBI_upd dir) i x c s) x = i\<rbrakk> \<Longrightarrow> (LB dir (update\<B>\<I> (UBI_upd dir) i x c s) y = Some d \<longrightarrow> LI dir (update\<B>\<I> (UBI_upd dir) i x c s) y \<in> I \<longrightarrow> lt dir d (v y) \<or> d = v y) \<and> (UB dir (update\<B>\<I> (UBI_upd dir) i x c s) y = Some d \<longrightarrow> UI dir (update\<B>\<I> (UBI_upd dir) i x c s) y \<in> I \<longrightarrow> lt dir (v y) d \<or> v y = d)
 2. \<lbrakk>x = y; UI dir (update\<B>\<I> (UBI_upd dir) i x c s) y \<noteq> i\<rbrakk> \<Longrightarrow> (LB dir (update\<B>\<I> (UBI_upd dir) i x c s) y = Some d \<longrightarrow> LI dir (update\<B>\<I> (UBI_upd dir) i x c s) y \<in> I \<longrightarrow> lt dir d (v y) \<or> d = v y) \<and> (UB dir (update\<B>\<I> (UBI_upd dir) i x c s) y = Some d \<longrightarrow> UI dir (update\<B>\<I> (UBI_upd dir) i x c s) y \<in> I \<longrightarrow> lt dir (v y) d \<or> v y = d)
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (2 subgoals):
 1. \<lbrakk>y = x; UI dir (update\<B>\<I> (UBI_upd dir) i x c s) x = i\<rbrakk> \<Longrightarrow> (LB dir (update\<B>\<I> (UBI_upd dir) i x c s) y = Some d \<longrightarrow> LI dir (update\<B>\<I> (UBI_upd dir) i x c s) y \<in> I \<longrightarrow> lt dir d (v y) \<or> d = v y) \<and> (UB dir (update\<B>\<I> (UBI_upd dir) i x c s) y = Some d \<longrightarrow> UI dir (update\<B>\<I> (UBI_upd dir) i x c s) y \<in> I \<longrightarrow> lt dir (v y) d \<or> v y = d)
 2. \<lbrakk>x = y; UI dir (update\<B>\<I> (UBI_upd dir) i x c s) y \<noteq> i\<rbrakk> \<Longrightarrow> (LB dir (update\<B>\<I> (UBI_upd dir) i x c s) y = Some d \<longrightarrow> LI dir (update\<B>\<I> (UBI_upd dir) i x c s) y \<in> I \<longrightarrow> lt dir d (v y) \<or> d = v y) \<and> (UB dir (update\<B>\<I> (UBI_upd dir) i x c s) y = Some d \<longrightarrow> UI dir (update\<B>\<I> (UBI_upd dir) i x c s) y \<in> I \<longrightarrow> lt dir (v y) d \<or> v y = d)
[PROOF STEP]
case easy2
[PROOF STATE]
proof (state)
this:
x = y
UI dir (update\<B>\<I> (UBI_upd dir) i x c s) y \<noteq> i

goal (2 subgoals):
 1. \<lbrakk>y = x; UI dir (update\<B>\<I> (UBI_upd dir) i x c s) x = i\<rbrakk> \<Longrightarrow> (LB dir (update\<B>\<I> (UBI_upd dir) i x c s) y = Some d \<longrightarrow> LI dir (update\<B>\<I> (UBI_upd dir) i x c s) y \<in> I \<longrightarrow> lt dir d (v y) \<or> d = v y) \<and> (UB dir (update\<B>\<I> (UBI_upd dir) i x c s) y = Some d \<longrightarrow> UI dir (update\<B>\<I> (UBI_upd dir) i x c s) y \<in> I \<longrightarrow> lt dir (v y) d \<or> v y = d)
 2. \<lbrakk>x = y; UI dir (update\<B>\<I> (UBI_upd dir) i x c s) y \<noteq> i\<rbrakk> \<Longrightarrow> (LB dir (update\<B>\<I> (UBI_upd dir) i x c s) y = Some d \<longrightarrow> LI dir (update\<B>\<I> (UBI_upd dir) i x c s) y \<in> I \<longrightarrow> lt dir d (v y) \<or> d = v y) \<and> (UB dir (update\<B>\<I> (UBI_upd dir) i x c s) y = Some d \<longrightarrow> UI dir (update\<B>\<I> (UBI_upd dir) i x c s) y \<in> I \<longrightarrow> lt dir (v y) d \<or> v y = d)
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
x = y
UI dir (update\<B>\<I> (UBI_upd dir) i x c s) y \<noteq> i
[PROOF STEP]
show ?thesis
[PROOF STATE]
proof (prove)
using this:
x = y
UI dir (update\<B>\<I> (UBI_upd dir) i x c s) y \<noteq> i

goal (1 subgoal):
 1. (LB dir (update\<B>\<I> (UBI_upd dir) i x c s) y = Some d \<longrightarrow> LI dir (update\<B>\<I> (UBI_upd dir) i x c s) y \<in> I \<longrightarrow> lt dir d (v y) \<or> d = v y) \<and> (UB dir (update\<B>\<I> (UBI_upd dir) i x c s) y = Some d \<longrightarrow> UI dir (update\<B>\<I> (UBI_upd dir) i x c s) y \<in> I \<longrightarrow> lt dir (v y) d \<or> v y = d)
[PROOF STEP]
using s_bnds[of y d] dir
[PROOF STATE]
proof (prove)
using this:
x = y
UI dir (update\<B>\<I> (UBI_upd dir) i x c s) y \<noteq> i
\<lbrakk>LB dir s y = Some d; LI dir s y \<in> I\<rbrakk> \<Longrightarrow> lt dir d (v y) \<or> d = v y
\<lbrakk>UB dir s y = Some d; UI dir s y \<in> I\<rbrakk> \<Longrightarrow> lt dir (v y) d \<or> v y = d
dir = Positive \<or> dir = Negative

goal (1 subgoal):
 1. (LB dir (update\<B>\<I> (UBI_upd dir) i x c s) y = Some d \<longrightarrow> LI dir (update\<B>\<I> (UBI_upd dir) i x c s) y \<in> I \<longrightarrow> lt dir d (v y) \<or> d = v y) \<and> (UB dir (update\<B>\<I> (UBI_upd dir) i x c s) y = Some d \<longrightarrow> UI dir (update\<B>\<I> (UBI_upd dir) i x c s) y \<in> I \<longrightarrow> lt dir (v y) d \<or> v y = d)
[PROOF STEP]
by (fastforce simp: boundsl_def boundsu_def indexl_def indexu_def)
[PROOF STATE]
proof (state)
this:
(LB dir (update\<B>\<I> (UBI_upd dir) i x c s) y = Some d \<longrightarrow> LI dir (update\<B>\<I> (UBI_upd dir) i x c s) y \<in> I \<longrightarrow> lt dir d (v y) \<or> d = v y) \<and> (UB dir (update\<B>\<I> (UBI_upd dir) i x c s) y = Some d \<longrightarrow> UI dir (update\<B>\<I> (UBI_upd dir) i x c s) y \<in> I \<longrightarrow> lt dir (v y) d \<or> v y = d)

goal (1 subgoal):
 1. \<lbrakk>y = x; UI dir (update\<B>\<I> (UBI_upd dir) i x c s) x = i\<rbrakk> \<Longrightarrow> (LB dir (update\<B>\<I> (UBI_upd dir) i x c s) y = Some d \<longrightarrow> LI dir (update\<B>\<I> (UBI_upd dir) i x c s) y \<in> I \<longrightarrow> lt dir d (v y) \<or> d = v y) \<and> (UB dir (update\<B>\<I> (UBI_upd dir) i x c s) y = Some d \<longrightarrow> UI dir (update\<B>\<I> (UBI_upd dir) i x c s) y \<in> I \<longrightarrow> lt dir (v y) d \<or> v y = d)
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. \<lbrakk>y = x; UI dir (update\<B>\<I> (UBI_upd dir) i x c s) x = i\<rbrakk> \<Longrightarrow> (LB dir (update\<B>\<I> (UBI_upd dir) i x c s) y = Some d \<longrightarrow> LI dir (update\<B>\<I> (UBI_upd dir) i x c s) y \<in> I \<longrightarrow> lt dir d (v y) \<or> d = v y) \<and> (UB dir (update\<B>\<I> (UBI_upd dir) i x c s) y = Some d \<longrightarrow> UI dir (update\<B>\<I> (UBI_upd dir) i x c s) y \<in> I \<longrightarrow> lt dir (v y) d \<or> v y = d)
[PROOF STEP]
case main
[PROOF STATE]
proof (state)
this:
y = x
UI dir (update\<B>\<I> (UBI_upd dir) i x c s) x = i

goal (1 subgoal):
 1. \<lbrakk>y = x; UI dir (update\<B>\<I> (UBI_upd dir) i x c s) x = i\<rbrakk> \<Longrightarrow> (LB dir (update\<B>\<I> (UBI_upd dir) i x c s) y = Some d \<longrightarrow> LI dir (update\<B>\<I> (UBI_upd dir) i x c s) y \<in> I \<longrightarrow> lt dir d (v y) \<or> d = v y) \<and> (UB dir (update\<B>\<I> (UBI_upd dir) i x c s) y = Some d \<longrightarrow> UI dir (update\<B>\<I> (UBI_upd dir) i x c s) y \<in> I \<longrightarrow> lt dir (v y) d \<or> v y = d)
[PROOF STEP]
note s_bnds = s_bnds[of x]
[PROOF STATE]
proof (state)
this:
\<lbrakk>LB dir s x = Some ?c1; LI dir s x \<in> I\<rbrakk> \<Longrightarrow> lt dir ?c1 (v x) \<or> ?c1 = v x
\<lbrakk>UB dir s x = Some ?c1; UI dir s x \<in> I\<rbrakk> \<Longrightarrow> lt dir (v x) ?c1 \<or> v x = ?c1

goal (1 subgoal):
 1. \<lbrakk>y = x; UI dir (update\<B>\<I> (UBI_upd dir) i x c s) x = i\<rbrakk> \<Longrightarrow> (LB dir (update\<B>\<I> (UBI_upd dir) i x c s) y = Some d \<longrightarrow> LI dir (update\<B>\<I> (UBI_upd dir) i x c s) y \<in> I \<longrightarrow> lt dir d (v y) \<or> d = v y) \<and> (UB dir (update\<B>\<I> (UBI_upd dir) i x c s) y = Some d \<longrightarrow> UI dir (update\<B>\<I> (UBI_upd dir) i x c s) y \<in> I \<longrightarrow> lt dir (v y) d \<or> v y = d)
[PROOF STEP]
show ?thesis
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (LB dir (update\<B>\<I> (UBI_upd dir) i x c s) y = Some d \<longrightarrow> LI dir (update\<B>\<I> (UBI_upd dir) i x c s) y \<in> I \<longrightarrow> lt dir d (v y) \<or> d = v y) \<and> (UB dir (update\<B>\<I> (UBI_upd dir) i x c s) y = Some d \<longrightarrow> UI dir (update\<B>\<I> (UBI_upd dir) i x c s) y \<in> I \<longrightarrow> lt dir (v y) d \<or> v y = d)
[PROOF STEP]
unfolding main
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (LB dir (update\<B>\<I> (UBI_upd dir) i x c s) x = Some d \<longrightarrow> LI dir (update\<B>\<I> (UBI_upd dir) i x c s) x \<in> I \<longrightarrow> lt dir d (v x) \<or> d = v x) \<and> (UB dir (update\<B>\<I> (UBI_upd dir) i x c s) x = Some d \<longrightarrow> i \<in> I \<longrightarrow> lt dir (v x) d \<or> v x = d)
[PROOF STEP]
using s_bnds dir vc
[PROOF STATE]
proof (prove)
using this:
\<lbrakk>LB dir s x = Some ?c1; LI dir s x \<in> I\<rbrakk> \<Longrightarrow> lt dir ?c1 (v x) \<or> ?c1 = v x
\<lbrakk>UB dir s x = Some ?c1; UI dir s x \<in> I\<rbrakk> \<Longrightarrow> lt dir (v x) ?c1 \<or> v x = ?c1
dir = Positive \<or> dir = Negative
i \<in> I \<Longrightarrow> lt dir (v x) c \<or> v x = c

goal (1 subgoal):
 1. (LB dir (update\<B>\<I> (UBI_upd dir) i x c s) x = Some d \<longrightarrow> LI dir (update\<B>\<I> (UBI_upd dir) i x c s) x \<in> I \<longrightarrow> lt dir d (v x) \<or> d = v x) \<and> (UB dir (update\<B>\<I> (UBI_upd dir) i x c s) x = Some d \<longrightarrow> i \<in> I \<longrightarrow> lt dir (v x) d \<or> v x = d)
[PROOF STEP]
by (auto simp: boundsl_def boundsu_def indexl_def indexu_def)
[PROOF STATE]
proof (state)
this:
(LB dir (update\<B>\<I> (UBI_upd dir) i x c s) y = Some d \<longrightarrow> LI dir (update\<B>\<I> (UBI_upd dir) i x c s) y \<in> I \<longrightarrow> lt dir d (v y) \<or> d = v y) \<and> (UB dir (update\<B>\<I> (UBI_upd dir) i x c s) y = Some d \<longrightarrow> UI dir (update\<B>\<I> (UBI_upd dir) i x c s) y \<in> I \<longrightarrow> lt dir (v y) d \<or> v y = d)

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
(LB dir (update\<B>\<I> (UBI_upd dir) i x c s) y = Some d \<longrightarrow> LI dir (update\<B>\<I> (UBI_upd dir) i x c s) y \<in> I \<longrightarrow> lt dir d (v y) \<or> d = v y) \<and> (UB dir (update\<B>\<I> (UBI_upd dir) i x c s) y = Some d \<longrightarrow> UI dir (update\<B>\<I> (UBI_upd dir) i x c s) y \<in> I \<longrightarrow> lt dir (v y) d \<or> v y = d)

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
\<lbrakk>LB dir (update\<B>\<I> (UBI_upd dir) i x c s) y = Some d; LI dir (update\<B>\<I> (UBI_upd dir) i x c s) y \<in> I\<rbrakk> \<Longrightarrow> lt dir d (v y) \<or> d = v y
\<lbrakk>UB dir (update\<B>\<I> (UBI_upd dir) i x c s) y = Some d; UI dir (update\<B>\<I> (UBI_upd dir) i x c s) y \<in> I\<rbrakk> \<Longrightarrow> lt dir (v y) d \<or> v y = d

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
Q A (lt dir) (UBI dir) (LBI dir) (UB dir) (LB dir) (UBI_upd dir) (UI dir) (LI dir) (LE dir) (GE dir) (update\<B>\<I> (UBI_upd dir) i x c s)

goal (1 subgoal):
 1. \<And>s ats a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; ats \<Turnstile>\<^sub>i \<B>\<I> s\<rbrakk> \<Longrightarrow> insert a ats \<Turnstile>\<^sub>i \<B>\<I> (assert_bound a s)
[PROOF STEP]
}
[PROOF STATE]
proof (state)
this:
\<lbrakk>?dir3 = Positive \<or> ?dir3 = Negative; a = LE ?dir3 ?x3 ?c3\<rbrakk> \<Longrightarrow> Q A (lt ?dir3) (UBI ?dir3) (LBI ?dir3) (UB ?dir3) (LB ?dir3) (UBI_upd ?dir3) (UI ?dir3) (LI ?dir3) (LE ?dir3) (GE ?dir3) (update\<B>\<I> (UBI_upd ?dir3) i ?x3 ?c3 s)

goal (1 subgoal):
 1. \<And>s ats a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; ats \<Turnstile>\<^sub>i \<B>\<I> s\<rbrakk> \<Longrightarrow> insert a ats \<Turnstile>\<^sub>i \<B>\<I> (assert_bound a s)
[PROOF STEP]
note main = this
[PROOF STATE]
proof (state)
this:
\<lbrakk>?dir3 = Positive \<or> ?dir3 = Negative; a = LE ?dir3 ?x3 ?c3\<rbrakk> \<Longrightarrow> Q A (lt ?dir3) (UBI ?dir3) (LBI ?dir3) (UB ?dir3) (LB ?dir3) (UBI_upd ?dir3) (UI ?dir3) (LI ?dir3) (LE ?dir3) (GE ?dir3) (update\<B>\<I> (UBI_upd ?dir3) i ?x3 ?c3 s)

goal (1 subgoal):
 1. \<And>s ats a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; ats \<Turnstile>\<^sub>i \<B>\<I> s\<rbrakk> \<Longrightarrow> insert a ats \<Turnstile>\<^sub>i \<B>\<I> (assert_bound a s)
[PROOF STEP]
have Ps: "dir = Positive \<or> dir = Negative \<Longrightarrow> ?P'' dir s" for dir
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. dir = Positive \<or> dir = Negative \<Longrightarrow> Q A (lt dir) (UBI dir) (LBI dir) (UB dir) (LB dir) (UBI_upd dir) (UI dir) (LI dir) (LE dir) (GE dir) s
[PROOF STEP]
using Q_ats
[PROOF STATE]
proof (prove)
using this:
Q ats (<) \<B>\<^sub>i\<^sub>u \<B>\<^sub>i\<^sub>l \<B>\<^sub>u \<B>\<^sub>l \<B>\<^sub>i\<^sub>u_update \<I>\<^sub>u \<I>\<^sub>l Leq Geq s
Q ats (\<lambda>x y. y < x) \<B>\<^sub>i\<^sub>l \<B>\<^sub>i\<^sub>u \<B>\<^sub>l \<B>\<^sub>u \<B>\<^sub>i\<^sub>l_update \<I>\<^sub>l \<I>\<^sub>u Geq Leq s

goal (1 subgoal):
 1. dir = Positive \<or> dir = Negative \<Longrightarrow> Q A (lt dir) (UBI dir) (LBI dir) (UB dir) (LB dir) (UBI_upd dir) (UI dir) (LI dir) (LE dir) (GE dir) s
[PROOF STEP]
unfolding Q_def
[PROOF STATE]
proof (prove)
using this:
\<forall>I v. (I, v) \<Turnstile>\<^sub>i\<^sub>a\<^sub>s ats \<longrightarrow> (\<forall>x c. \<B>\<^sub>l s x = Some c \<longrightarrow> \<I>\<^sub>l s x \<in> I \<longrightarrow> c < v x \<or> c = v x) \<and> (\<forall>x c. \<B>\<^sub>u s x = Some c \<longrightarrow> \<I>\<^sub>u s x \<in> I \<longrightarrow> v x < c \<or> v x = c)
\<forall>I v. (I, v) \<Turnstile>\<^sub>i\<^sub>a\<^sub>s ats \<longrightarrow> (\<forall>x c. \<B>\<^sub>u s x = Some c \<longrightarrow> \<I>\<^sub>u s x \<in> I \<longrightarrow> v x < c \<or> c = v x) \<and> (\<forall>x c. \<B>\<^sub>l s x = Some c \<longrightarrow> \<I>\<^sub>l s x \<in> I \<longrightarrow> c < v x \<or> v x = c)

goal (1 subgoal):
 1. dir = Positive \<or> dir = Negative \<Longrightarrow> \<forall>I v. (I, v) \<Turnstile>\<^sub>i\<^sub>a\<^sub>s A \<longrightarrow> (\<forall>x c. LB dir s x = Some c \<longrightarrow> LI dir s x \<in> I \<longrightarrow> lt dir c (v x) \<or> c = v x) \<and> (\<forall>x c. UB dir s x = Some c \<longrightarrow> UI dir s x \<in> I \<longrightarrow> lt dir (v x) c \<or> v x = c)
[PROOF STEP]
using i_satisfies_atom_set_mono[OF ats_sub]
[PROOF STATE]
proof (prove)
using this:
\<forall>I v. (I, v) \<Turnstile>\<^sub>i\<^sub>a\<^sub>s ats \<longrightarrow> (\<forall>x c. \<B>\<^sub>l s x = Some c \<longrightarrow> \<I>\<^sub>l s x \<in> I \<longrightarrow> c < v x \<or> c = v x) \<and> (\<forall>x c. \<B>\<^sub>u s x = Some c \<longrightarrow> \<I>\<^sub>u s x \<in> I \<longrightarrow> v x < c \<or> v x = c)
\<forall>I v. (I, v) \<Turnstile>\<^sub>i\<^sub>a\<^sub>s ats \<longrightarrow> (\<forall>x c. \<B>\<^sub>u s x = Some c \<longrightarrow> \<I>\<^sub>u s x \<in> I \<longrightarrow> v x < c \<or> c = v x) \<and> (\<forall>x c. \<B>\<^sub>l s x = Some c \<longrightarrow> \<I>\<^sub>l s x \<in> I \<longrightarrow> c < v x \<or> v x = c)
?v \<Turnstile>\<^sub>i\<^sub>a\<^sub>s A \<Longrightarrow> ?v \<Turnstile>\<^sub>i\<^sub>a\<^sub>s ats

goal (1 subgoal):
 1. dir = Positive \<or> dir = Negative \<Longrightarrow> \<forall>I v. (I, v) \<Turnstile>\<^sub>i\<^sub>a\<^sub>s A \<longrightarrow> (\<forall>x c. LB dir s x = Some c \<longrightarrow> LI dir s x \<in> I \<longrightarrow> lt dir c (v x) \<or> c = v x) \<and> (\<forall>x c. UB dir s x = Some c \<longrightarrow> UI dir s x \<in> I \<longrightarrow> lt dir (v x) c \<or> v x = c)
[PROOF STEP]
by fastforce
[PROOF STATE]
proof (state)
this:
?dir1 = Positive \<or> ?dir1 = Negative \<Longrightarrow> Q A (lt ?dir1) (UBI ?dir1) (LBI ?dir1) (UB ?dir1) (LB ?dir1) (UBI_upd ?dir1) (UI ?dir1) (LI ?dir1) (LE ?dir1) (GE ?dir1) s

goal (1 subgoal):
 1. \<And>s ats a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; ats \<Turnstile>\<^sub>i \<B>\<I> s\<rbrakk> \<Longrightarrow> insert a ats \<Turnstile>\<^sub>i \<B>\<I> (assert_bound a s)
[PROOF STEP]
have "?P (assert_bound (i,a) s)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. A \<Turnstile>\<^sub>i \<B>\<I> (assert_bound (i, a) s)
[PROOF STEP]
proof ((rule assert_bound_cases[of _ _ ?P']; (intro x xx P_upd main Ps)?))
[PROOF STATE]
proof (state)
goal (9 subgoals):
 1. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x)\<rbrakk> \<Longrightarrow> dir = Positive \<or> dir = Negative
 2. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> dir = Positive \<or> dir = Negative
 3. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> dir = Positive \<or> dir = Negative
 4. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> a = LE dir x c
 5. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<notin> lvars (\<T> s); lt dir c (\<langle>\<V> s\<rangle> x); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> Q A (lt dir) (UBI dir) (LBI dir) (UB dir) (LB dir) (UBI_upd dir) (UI dir) (LI dir) (LE dir) (GE dir) (update x c (update\<B>\<I> (UBI_upd dir) i x c s))
 6. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<in> lvars (\<T> s); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> dir = Positive \<or> dir = Negative
 7. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<in> lvars (\<T> s); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> a = LE dir x c
 8. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x); \<not> lt dir c (\<langle>\<V> s\<rangle> x)\<rbrakk> \<Longrightarrow> dir = Positive \<or> dir = Negative
 9. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x); \<not> lt dir c (\<langle>\<V> s\<rangle> x)\<rbrakk> \<Longrightarrow> a = LE dir x c
[PROOF STEP]
fix c x and dir :: "('i,'a) Direction"
[PROOF STATE]
proof (state)
goal (9 subgoals):
 1. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x)\<rbrakk> \<Longrightarrow> dir = Positive \<or> dir = Negative
 2. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> dir = Positive \<or> dir = Negative
 3. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> dir = Positive \<or> dir = Negative
 4. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> a = LE dir x c
 5. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<notin> lvars (\<T> s); lt dir c (\<langle>\<V> s\<rangle> x); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> Q A (lt dir) (UBI dir) (LBI dir) (UB dir) (LB dir) (UBI_upd dir) (UI dir) (LI dir) (LE dir) (GE dir) (update x c (update\<B>\<I> (UBI_upd dir) i x c s))
 6. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<in> lvars (\<T> s); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> dir = Positive \<or> dir = Negative
 7. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<in> lvars (\<T> s); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> a = LE dir x c
 8. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x); \<not> lt dir c (\<langle>\<V> s\<rangle> x)\<rbrakk> \<Longrightarrow> dir = Positive \<or> dir = Negative
 9. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x); \<not> lt dir c (\<langle>\<V> s\<rangle> x)\<rbrakk> \<Longrightarrow> a = LE dir x c
[PROOF STEP]
assume **: "dir = Positive \<or> dir = Negative"
      "a = LE dir x c"
      "x \<notin> lvars (\<T> s)"
[PROOF STATE]
proof (state)
this:
dir = Positive \<or> dir = Negative
a = LE dir x c
x \<notin> lvars (\<T> s)

goal (9 subgoals):
 1. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x)\<rbrakk> \<Longrightarrow> dir = Positive \<or> dir = Negative
 2. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> dir = Positive \<or> dir = Negative
 3. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> dir = Positive \<or> dir = Negative
 4. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> a = LE dir x c
 5. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<notin> lvars (\<T> s); lt dir c (\<langle>\<V> s\<rangle> x); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> Q A (lt dir) (UBI dir) (LBI dir) (UB dir) (LB dir) (UBI_upd dir) (UI dir) (LI dir) (LE dir) (GE dir) (update x c (update\<B>\<I> (UBI_upd dir) i x c s))
 6. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<in> lvars (\<T> s); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> dir = Positive \<or> dir = Negative
 7. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<in> lvars (\<T> s); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> a = LE dir x c
 8. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x); \<not> lt dir c (\<langle>\<V> s\<rangle> x)\<rbrakk> \<Longrightarrow> dir = Positive \<or> dir = Negative
 9. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x); \<not> lt dir c (\<langle>\<V> s\<rangle> x)\<rbrakk> \<Longrightarrow> a = LE dir x c
[PROOF STEP]
let ?s = "update\<B>\<I> (UBI_upd dir) i x c s"
[PROOF STATE]
proof (state)
goal (9 subgoals):
 1. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x)\<rbrakk> \<Longrightarrow> dir = Positive \<or> dir = Negative
 2. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> dir = Positive \<or> dir = Negative
 3. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> dir = Positive \<or> dir = Negative
 4. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> a = LE dir x c
 5. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<notin> lvars (\<T> s); lt dir c (\<langle>\<V> s\<rangle> x); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> Q A (lt dir) (UBI dir) (LBI dir) (UB dir) (LB dir) (UBI_upd dir) (UI dir) (LI dir) (LE dir) (GE dir) (update x c (update\<B>\<I> (UBI_upd dir) i x c s))
 6. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<in> lvars (\<T> s); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> dir = Positive \<or> dir = Negative
 7. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<in> lvars (\<T> s); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> a = LE dir x c
 8. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x); \<not> lt dir c (\<langle>\<V> s\<rangle> x)\<rbrakk> \<Longrightarrow> dir = Positive \<or> dir = Negative
 9. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x); \<not> lt dir c (\<langle>\<V> s\<rangle> x)\<rbrakk> \<Longrightarrow> a = LE dir x c
[PROOF STEP]
define s' where "s' = ?s"
[PROOF STATE]
proof (state)
this:
s' = update\<B>\<I> (UBI_upd dir) i x c s

goal (9 subgoals):
 1. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x)\<rbrakk> \<Longrightarrow> dir = Positive \<or> dir = Negative
 2. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> dir = Positive \<or> dir = Negative
 3. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> dir = Positive \<or> dir = Negative
 4. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> a = LE dir x c
 5. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<notin> lvars (\<T> s); lt dir c (\<langle>\<V> s\<rangle> x); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> Q A (lt dir) (UBI dir) (LBI dir) (UB dir) (LB dir) (UBI_upd dir) (UI dir) (LI dir) (LE dir) (GE dir) (update x c (update\<B>\<I> (UBI_upd dir) i x c s))
 6. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<in> lvars (\<T> s); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> dir = Positive \<or> dir = Negative
 7. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<in> lvars (\<T> s); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> a = LE dir x c
 8. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x); \<not> lt dir c (\<langle>\<V> s\<rangle> x)\<rbrakk> \<Longrightarrow> dir = Positive \<or> dir = Negative
 9. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x); \<not> lt dir c (\<langle>\<V> s\<rangle> x)\<rbrakk> \<Longrightarrow> a = LE dir x c
[PROOF STEP]
from main[OF **(1-2)]
[PROOF STATE]
proof (chain)
picking this:
Q A (lt dir) (UBI dir) (LBI dir) (UB dir) (LB dir) (UBI_upd dir) (UI dir) (LI dir) (LE dir) (GE dir) (update\<B>\<I> (UBI_upd dir) i x c s)
[PROOF STEP]
have P: "?P'' dir s'"
[PROOF STATE]
proof (prove)
using this:
Q A (lt dir) (UBI dir) (LBI dir) (UB dir) (LB dir) (UBI_upd dir) (UI dir) (LI dir) (LE dir) (GE dir) (update\<B>\<I> (UBI_upd dir) i x c s)

goal (1 subgoal):
 1. Q A (lt dir) (UBI dir) (LBI dir) (UB dir) (LB dir) (UBI_upd dir) (UI dir) (LI dir) (LE dir) (GE dir) s'
[PROOF STEP]
unfolding s'_def
[PROOF STATE]
proof (prove)
using this:
Q A (lt dir) (UBI dir) (LBI dir) (UB dir) (LB dir) (UBI_upd dir) (UI dir) (LI dir) (LE dir) (GE dir) (update\<B>\<I> (UBI_upd dir) i x c s)

goal (1 subgoal):
 1. Q A (lt dir) (UBI dir) (LBI dir) (UB dir) (LB dir) (UBI_upd dir) (UI dir) (LI dir) (LE dir) (GE dir) (update\<B>\<I> (UBI_upd dir) i x c s)
[PROOF STEP]
.
[PROOF STATE]
proof (state)
this:
Q A (lt dir) (UBI dir) (LBI dir) (UB dir) (LB dir) (UBI_upd dir) (UI dir) (LI dir) (LE dir) (GE dir) s'

goal (9 subgoals):
 1. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x)\<rbrakk> \<Longrightarrow> dir = Positive \<or> dir = Negative
 2. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> dir = Positive \<or> dir = Negative
 3. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> dir = Positive \<or> dir = Negative
 4. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> a = LE dir x c
 5. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<notin> lvars (\<T> s); lt dir c (\<langle>\<V> s\<rangle> x); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> Q A (lt dir) (UBI dir) (LBI dir) (UB dir) (LB dir) (UBI_upd dir) (UI dir) (LI dir) (LE dir) (GE dir) (update x c (update\<B>\<I> (UBI_upd dir) i x c s))
 6. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<in> lvars (\<T> s); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> dir = Positive \<or> dir = Negative
 7. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<in> lvars (\<T> s); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> a = LE dir x c
 8. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x); \<not> lt dir c (\<langle>\<V> s\<rangle> x)\<rbrakk> \<Longrightarrow> dir = Positive \<or> dir = Negative
 9. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x); \<not> lt dir c (\<langle>\<V> s\<rangle> x)\<rbrakk> \<Longrightarrow> a = LE dir x c
[PROOF STEP]
have 1: "\<triangle> (\<T> ?s)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<triangle> (\<T> (update\<B>\<I> (UBI_upd dir) i x c s))
[PROOF STEP]
using * **
[PROOF STATE]
proof (prove)
using this:
\<not> \<U> s
\<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s
\<triangle> (\<T> s)
\<nabla> s
\<diamond> s
dir = Positive \<or> dir = Negative
a = LE dir x c
x \<notin> lvars (\<T> s)

goal (1 subgoal):
 1. \<triangle> (\<T> (update\<B>\<I> (UBI_upd dir) i x c s))
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
\<triangle> (\<T> (update\<B>\<I> (UBI_upd dir) i x c s))

goal (9 subgoals):
 1. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x)\<rbrakk> \<Longrightarrow> dir = Positive \<or> dir = Negative
 2. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> dir = Positive \<or> dir = Negative
 3. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> dir = Positive \<or> dir = Negative
 4. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> a = LE dir x c
 5. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<notin> lvars (\<T> s); lt dir c (\<langle>\<V> s\<rangle> x); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> Q A (lt dir) (UBI dir) (LBI dir) (UB dir) (LB dir) (UBI_upd dir) (UI dir) (LI dir) (LE dir) (GE dir) (update x c (update\<B>\<I> (UBI_upd dir) i x c s))
 6. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<in> lvars (\<T> s); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> dir = Positive \<or> dir = Negative
 7. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<in> lvars (\<T> s); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> a = LE dir x c
 8. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x); \<not> lt dir c (\<langle>\<V> s\<rangle> x)\<rbrakk> \<Longrightarrow> dir = Positive \<or> dir = Negative
 9. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x); \<not> lt dir c (\<langle>\<V> s\<rangle> x)\<rbrakk> \<Longrightarrow> a = LE dir x c
[PROOF STEP]
have 2: "\<nabla> ?s"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<nabla> (update\<B>\<I> (UBI_upd dir) i x c s)
[PROOF STEP]
using id(1) ** * \<open>\<nabla> s\<close>
[PROOF STATE]
proof (prove)
using this:
?dir = Positive \<or> ?dir = Negative \<Longrightarrow> \<nabla> (update\<B>\<I> (UBI_upd ?dir) i ?x ?c ?s) = \<nabla> ?s
dir = Positive \<or> dir = Negative
a = LE dir x c
x \<notin> lvars (\<T> s)
\<not> \<U> s
\<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s
\<triangle> (\<T> s)
\<nabla> s
\<diamond> s
\<nabla> s

goal (1 subgoal):
 1. \<nabla> (update\<B>\<I> (UBI_upd dir) i x c s)
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
\<nabla> (update\<B>\<I> (UBI_upd dir) i x c s)

goal (9 subgoals):
 1. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x)\<rbrakk> \<Longrightarrow> dir = Positive \<or> dir = Negative
 2. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> dir = Positive \<or> dir = Negative
 3. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> dir = Positive \<or> dir = Negative
 4. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> a = LE dir x c
 5. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<notin> lvars (\<T> s); lt dir c (\<langle>\<V> s\<rangle> x); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> Q A (lt dir) (UBI dir) (LBI dir) (UB dir) (LB dir) (UBI_upd dir) (UI dir) (LI dir) (LE dir) (GE dir) (update x c (update\<B>\<I> (UBI_upd dir) i x c s))
 6. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<in> lvars (\<T> s); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> dir = Positive \<or> dir = Negative
 7. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<in> lvars (\<T> s); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> a = LE dir x c
 8. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x); \<not> lt dir c (\<langle>\<V> s\<rangle> x)\<rbrakk> \<Longrightarrow> dir = Positive \<or> dir = Negative
 9. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x); \<not> lt dir c (\<langle>\<V> s\<rangle> x)\<rbrakk> \<Longrightarrow> a = LE dir x c
[PROOF STEP]
have 3: "x \<notin> lvars (\<T> ?s)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. x \<notin> lvars (\<T> (update\<B>\<I> (UBI_upd dir) i x c s))
[PROOF STEP]
using id(1) ** * \<open>\<nabla> s\<close>
[PROOF STATE]
proof (prove)
using this:
?dir = Positive \<or> ?dir = Negative \<Longrightarrow> \<nabla> (update\<B>\<I> (UBI_upd ?dir) i ?x ?c ?s) = \<nabla> ?s
dir = Positive \<or> dir = Negative
a = LE dir x c
x \<notin> lvars (\<T> s)
\<not> \<U> s
\<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s
\<triangle> (\<T> s)
\<nabla> s
\<diamond> s
\<nabla> s

goal (1 subgoal):
 1. x \<notin> lvars (\<T> (update\<B>\<I> (UBI_upd dir) i x c s))
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
x \<notin> lvars (\<T> (update\<B>\<I> (UBI_upd dir) i x c s))

goal (9 subgoals):
 1. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x)\<rbrakk> \<Longrightarrow> dir = Positive \<or> dir = Negative
 2. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> dir = Positive \<or> dir = Negative
 3. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> dir = Positive \<or> dir = Negative
 4. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> a = LE dir x c
 5. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<notin> lvars (\<T> s); lt dir c (\<langle>\<V> s\<rangle> x); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> Q A (lt dir) (UBI dir) (LBI dir) (UB dir) (LB dir) (UBI_upd dir) (UI dir) (LI dir) (LE dir) (GE dir) (update x c (update\<B>\<I> (UBI_upd dir) i x c s))
 6. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<in> lvars (\<T> s); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> dir = Positive \<or> dir = Negative
 7. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<in> lvars (\<T> s); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> a = LE dir x c
 8. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x); \<not> lt dir c (\<langle>\<V> s\<rangle> x)\<rbrakk> \<Longrightarrow> dir = Positive \<or> dir = Negative
 9. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x); \<not> lt dir c (\<langle>\<V> s\<rangle> x)\<rbrakk> \<Longrightarrow> a = LE dir x c
[PROOF STEP]
have "\<triangle> (\<T> s')" "\<nabla> s'" "x \<notin> lvars (\<T> s')"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<triangle> (\<T> s') &&& \<nabla> s' &&& x \<notin> lvars (\<T> s')
[PROOF STEP]
using 1 2 3
[PROOF STATE]
proof (prove)
using this:
\<triangle> (\<T> (update\<B>\<I> (UBI_upd dir) i x c s))
\<nabla> (update\<B>\<I> (UBI_upd dir) i x c s)
x \<notin> lvars (\<T> (update\<B>\<I> (UBI_upd dir) i x c s))

goal (1 subgoal):
 1. \<triangle> (\<T> s') &&& \<nabla> s' &&& x \<notin> lvars (\<T> s')
[PROOF STEP]
unfolding s'_def
[PROOF STATE]
proof (prove)
using this:
\<triangle> (\<T> (update\<B>\<I> (UBI_upd dir) i x c s))
\<nabla> (update\<B>\<I> (UBI_upd dir) i x c s)
x \<notin> lvars (\<T> (update\<B>\<I> (UBI_upd dir) i x c s))

goal (1 subgoal):
 1. \<triangle> (\<T> (update\<B>\<I> (UBI_upd dir) i x c s)) &&& \<nabla> (update\<B>\<I> (UBI_upd dir) i x c s) &&& x \<notin> lvars (\<T> (update\<B>\<I> (UBI_upd dir) i x c s))
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
\<triangle> (\<T> s')
\<nabla> s'
x \<notin> lvars (\<T> s')

goal (9 subgoals):
 1. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x)\<rbrakk> \<Longrightarrow> dir = Positive \<or> dir = Negative
 2. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> dir = Positive \<or> dir = Negative
 3. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> dir = Positive \<or> dir = Negative
 4. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> a = LE dir x c
 5. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<notin> lvars (\<T> s); lt dir c (\<langle>\<V> s\<rangle> x); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> Q A (lt dir) (UBI dir) (LBI dir) (UB dir) (LB dir) (UBI_upd dir) (UI dir) (LI dir) (LE dir) (GE dir) (update x c (update\<B>\<I> (UBI_upd dir) i x c s))
 6. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<in> lvars (\<T> s); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> dir = Positive \<or> dir = Negative
 7. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<in> lvars (\<T> s); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> a = LE dir x c
 8. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x); \<not> lt dir c (\<langle>\<V> s\<rangle> x)\<rbrakk> \<Longrightarrow> dir = Positive \<or> dir = Negative
 9. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x); \<not> lt dir c (\<langle>\<V> s\<rangle> x)\<rbrakk> \<Longrightarrow> a = LE dir x c
[PROOF STEP]
from update_bounds_id[OF this, of c] **(1)
[PROOF STATE]
proof (chain)
picking this:
\<B>\<^sub>i (update x c s') = \<B>\<^sub>i s'
\<B>\<I> (update x c s') = \<B>\<I> s'
\<B>\<^sub>l (update x c s') = \<B>\<^sub>l s'
\<B>\<^sub>u (update x c s') = \<B>\<^sub>u s'
dir = Positive \<or> dir = Negative
[PROOF STEP]
have "?P'' dir (update x c s') = ?P'' dir s'"
[PROOF STATE]
proof (prove)
using this:
\<B>\<^sub>i (update x c s') = \<B>\<^sub>i s'
\<B>\<I> (update x c s') = \<B>\<I> s'
\<B>\<^sub>l (update x c s') = \<B>\<^sub>l s'
\<B>\<^sub>u (update x c s') = \<B>\<^sub>u s'
dir = Positive \<or> dir = Negative

goal (1 subgoal):
 1. Q A (lt dir) (UBI dir) (LBI dir) (UB dir) (LB dir) (UBI_upd dir) (UI dir) (LI dir) (LE dir) (GE dir) (update x c s') = Q A (lt dir) (UBI dir) (LBI dir) (UB dir) (LB dir) (UBI_upd dir) (UI dir) (LI dir) (LE dir) (GE dir) s'
[PROOF STEP]
unfolding Q_def
[PROOF STATE]
proof (prove)
using this:
\<B>\<^sub>i (update x c s') = \<B>\<^sub>i s'
\<B>\<I> (update x c s') = \<B>\<I> s'
\<B>\<^sub>l (update x c s') = \<B>\<^sub>l s'
\<B>\<^sub>u (update x c s') = \<B>\<^sub>u s'
dir = Positive \<or> dir = Negative

goal (1 subgoal):
 1. (\<forall>I v. (I, v) \<Turnstile>\<^sub>i\<^sub>a\<^sub>s A \<longrightarrow> (\<forall>xa ca. LB dir (update x c s') xa = Some ca \<longrightarrow> LI dir (update x c s') xa \<in> I \<longrightarrow> lt dir ca (v xa) \<or> ca = v xa) \<and> (\<forall>xa ca. UB dir (update x c s') xa = Some ca \<longrightarrow> UI dir (update x c s') xa \<in> I \<longrightarrow> lt dir (v xa) ca \<or> v xa = ca)) = (\<forall>I v. (I, v) \<Turnstile>\<^sub>i\<^sub>a\<^sub>s A \<longrightarrow> (\<forall>x c. LB dir s' x = Some c \<longrightarrow> LI dir s' x \<in> I \<longrightarrow> lt dir c (v x) \<or> c = v x) \<and> (\<forall>x c. UB dir s' x = Some c \<longrightarrow> UI dir s' x \<in> I \<longrightarrow> lt dir (v x) c \<or> v x = c))
[PROOF STEP]
by (intro iff_allI arg_cong2[of _ _ _ _ "(\<longrightarrow>)"] arg_cong2[of _ _ _ _ "(\<and>)"] refl, auto)
[PROOF STATE]
proof (state)
this:
Q A (lt dir) (UBI dir) (LBI dir) (UB dir) (LB dir) (UBI_upd dir) (UI dir) (LI dir) (LE dir) (GE dir) (update x c s') = Q A (lt dir) (UBI dir) (LBI dir) (UB dir) (LB dir) (UBI_upd dir) (UI dir) (LI dir) (LE dir) (GE dir) s'

goal (9 subgoals):
 1. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x)\<rbrakk> \<Longrightarrow> dir = Positive \<or> dir = Negative
 2. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> dir = Positive \<or> dir = Negative
 3. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> dir = Positive \<or> dir = Negative
 4. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> a = LE dir x c
 5. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<notin> lvars (\<T> s); lt dir c (\<langle>\<V> s\<rangle> x); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> Q A (lt dir) (UBI dir) (LBI dir) (UB dir) (LB dir) (UBI_upd dir) (UI dir) (LI dir) (LE dir) (GE dir) (update x c (update\<B>\<I> (UBI_upd dir) i x c s))
 6. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<in> lvars (\<T> s); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> dir = Positive \<or> dir = Negative
 7. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<in> lvars (\<T> s); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> a = LE dir x c
 8. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x); \<not> lt dir c (\<langle>\<V> s\<rangle> x)\<rbrakk> \<Longrightarrow> dir = Positive \<or> dir = Negative
 9. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x); \<not> lt dir c (\<langle>\<V> s\<rangle> x)\<rbrakk> \<Longrightarrow> a = LE dir x c
[PROOF STEP]
with P
[PROOF STATE]
proof (chain)
picking this:
Q A (lt dir) (UBI dir) (LBI dir) (UB dir) (LB dir) (UBI_upd dir) (UI dir) (LI dir) (LE dir) (GE dir) s'
Q A (lt dir) (UBI dir) (LBI dir) (UB dir) (LB dir) (UBI_upd dir) (UI dir) (LI dir) (LE dir) (GE dir) (update x c s') = Q A (lt dir) (UBI dir) (LBI dir) (UB dir) (LB dir) (UBI_upd dir) (UI dir) (LI dir) (LE dir) (GE dir) s'
[PROOF STEP]
show "?P'' dir (update x c ?s)"
[PROOF STATE]
proof (prove)
using this:
Q A (lt dir) (UBI dir) (LBI dir) (UB dir) (LB dir) (UBI_upd dir) (UI dir) (LI dir) (LE dir) (GE dir) s'
Q A (lt dir) (UBI dir) (LBI dir) (UB dir) (LB dir) (UBI_upd dir) (UI dir) (LI dir) (LE dir) (GE dir) (update x c s') = Q A (lt dir) (UBI dir) (LBI dir) (UB dir) (LB dir) (UBI_upd dir) (UI dir) (LI dir) (LE dir) (GE dir) s'

goal (1 subgoal):
 1. Q A (lt dir) (UBI dir) (LBI dir) (UB dir) (LB dir) (UBI_upd dir) (UI dir) (LI dir) (LE dir) (GE dir) (update x c (update\<B>\<I> (UBI_upd dir) i x c s))
[PROOF STEP]
unfolding s'_def
[PROOF STATE]
proof (prove)
using this:
Q A (lt dir) (UBI dir) (LBI dir) (UB dir) (LB dir) (UBI_upd dir) (UI dir) (LI dir) (LE dir) (GE dir) (update\<B>\<I> (UBI_upd dir) i x c s)
Q A (lt dir) (UBI dir) (LBI dir) (UB dir) (LB dir) (UBI_upd dir) (UI dir) (LI dir) (LE dir) (GE dir) (update x c (update\<B>\<I> (UBI_upd dir) i x c s)) = Q A (lt dir) (UBI dir) (LBI dir) (UB dir) (LB dir) (UBI_upd dir) (UI dir) (LI dir) (LE dir) (GE dir) (update\<B>\<I> (UBI_upd dir) i x c s)

goal (1 subgoal):
 1. Q A (lt dir) (UBI dir) (LBI dir) (UB dir) (LB dir) (UBI_upd dir) (UI dir) (LI dir) (LE dir) (GE dir) (update x c (update\<B>\<I> (UBI_upd dir) i x c s))
[PROOF STEP]
by blast
[PROOF STATE]
proof (state)
this:
Q A (lt dir) (UBI dir) (LBI dir) (UB dir) (LB dir) (UBI_upd dir) (UI dir) (LI dir) (LE dir) (GE dir) (update x c (update\<B>\<I> (UBI_upd dir) i x c s))

goal (8 subgoals):
 1. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x)\<rbrakk> \<Longrightarrow> dir = Positive \<or> dir = Negative
 2. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> dir = Positive \<or> dir = Negative
 3. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> dir = Positive \<or> dir = Negative
 4. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> a = LE dir x c
 5. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<in> lvars (\<T> s); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> dir = Positive \<or> dir = Negative
 6. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; x \<in> lvars (\<T> s); \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x)\<rbrakk> \<Longrightarrow> a = LE dir x c
 7. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x); \<not> lt dir c (\<langle>\<V> s\<rangle> x)\<rbrakk> \<Longrightarrow> dir = Positive \<or> dir = Negative
 8. \<And>c x dir. \<lbrakk>dir = Positive \<or> dir = Negative; a = LE dir x c; \<not> \<unrhd>\<^sub>u\<^sub>b (lt dir) c (UB dir s x); \<not> \<lhd>\<^sub>l\<^sub>b (lt dir) c (LB dir s x); \<not> lt dir c (\<langle>\<V> s\<rangle> x)\<rbrakk> \<Longrightarrow> a = LE dir x c
[PROOF STEP]
qed auto
[PROOF STATE]
proof (state)
this:
A \<Turnstile>\<^sub>i \<B>\<I> (assert_bound (i, a) s)

goal (1 subgoal):
 1. \<And>s ats a. \<lbrakk>\<not> \<U> s; \<Turnstile>\<^sub>n\<^sub>o\<^sub>l\<^sub>h\<^sub>s s; \<triangle> (\<T> s); \<nabla> s; \<diamond> s; ats \<Turnstile>\<^sub>i \<B>\<I> s\<rbrakk> \<Longrightarrow> insert a ats \<Turnstile>\<^sub>i \<B>\<I> (assert_bound a s)
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
A \<Turnstile>\<^sub>i \<B>\<I> (assert_bound (i, a) s)
[PROOF STEP]
show "insert ia ats \<Turnstile>\<^sub>i \<B>\<I> (assert_bound ia s)"
[PROOF STATE]
proof (prove)
using this:
A \<Turnstile>\<^sub>i \<B>\<I> (assert_bound (i, a) s)

goal (1 subgoal):
 1. insert ia ats \<Turnstile>\<^sub>i \<B>\<I> (assert_bound ia s)
[PROOF STEP]
unfolding ia A_def
[PROOF STATE]
proof (prove)
using this:
insert (i, a) ats \<Turnstile>\<^sub>i \<B>\<I> (assert_bound (i, a) s)

goal (1 subgoal):
 1. insert (i, a) ats \<Turnstile>\<^sub>i \<B>\<I> (assert_bound (i, a) s)
[PROOF STEP]
by blast
[PROOF STATE]
proof (state)
this:
insert ia ats \<Turnstile>\<^sub>i \<B>\<I> (assert_bound ia s)

goal:
No subgoals!
[PROOF STEP]
qed