[STATEMENT]
lemma unhinder: \<comment> \<open>Lemma 6.9\<close>
  assumes loose: "loose \<Gamma>"
  and b: "b \<in> B \<Gamma>"
  and wb: "weight \<Gamma> b > 0"
  and \<delta>: "\<delta> > 0"
  shows "\<exists>\<epsilon>>0. \<epsilon> < \<delta> \<and> \<not> hindered (reduce_weight \<Gamma> b \<epsilon>)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<exists>\<epsilon>>0. \<epsilon> < \<delta> \<and> \<not> hindered (reduce_weight \<Gamma> b \<epsilon>)
[PROOF STEP]
proof(rule ccontr)
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. \<not> (\<exists>\<epsilon>>0. \<epsilon> < \<delta> \<and> \<not> hindered (reduce_weight \<Gamma> b \<epsilon>)) \<Longrightarrow> False
[PROOF STEP]
assume "\<not> ?thesis"
[PROOF STATE]
proof (state)
this:
\<not> (\<exists>\<epsilon>>0. \<epsilon> < \<delta> \<and> \<not> hindered (reduce_weight \<Gamma> b \<epsilon>))

goal (1 subgoal):
 1. \<not> (\<exists>\<epsilon>>0. \<epsilon> < \<delta> \<and> \<not> hindered (reduce_weight \<Gamma> b \<epsilon>)) \<Longrightarrow> False
[PROOF STEP]
hence hindered: "hindered (reduce_weight \<Gamma> b \<epsilon>)" if "\<epsilon> > 0" "\<epsilon> < \<delta>" for \<epsilon>
[PROOF STATE]
proof (prove)
using this:
\<not> (\<exists>\<epsilon>>0. \<epsilon> < \<delta> \<and> \<not> hindered (reduce_weight \<Gamma> b \<epsilon>))

goal (1 subgoal):
 1. hindered (reduce_weight \<Gamma> b \<epsilon>)
[PROOF STEP]
using that
[PROOF STATE]
proof (prove)
using this:
\<not> (\<exists>\<epsilon>>0. \<epsilon> < \<delta> \<and> \<not> hindered (reduce_weight \<Gamma> b \<epsilon>))
0 < \<epsilon>
\<epsilon> < \<delta>

goal (1 subgoal):
 1. hindered (reduce_weight \<Gamma> b \<epsilon>)
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
\<lbrakk>0 < ?\<epsilon>; ?\<epsilon> < \<delta>\<rbrakk> \<Longrightarrow> hindered (reduce_weight \<Gamma> b ?\<epsilon>)

goal (1 subgoal):
 1. \<not> (\<exists>\<epsilon>>0. \<epsilon> < \<delta> \<and> \<not> hindered (reduce_weight \<Gamma> b \<epsilon>)) \<Longrightarrow> False
[PROOF STEP]
from b disjoint
[PROOF STATE]
proof (chain)
picking this:
b \<in> B \<Gamma>
A \<Gamma> \<inter> B \<Gamma> = {}
[PROOF STEP]
have bnA: "b \<notin> A \<Gamma>"
[PROOF STATE]
proof (prove)
using this:
b \<in> B \<Gamma>
A \<Gamma> \<inter> B \<Gamma> = {}

goal (1 subgoal):
 1. b \<notin> A \<Gamma>
[PROOF STEP]
by blast
[PROOF STATE]
proof (state)
this:
b \<notin> A \<Gamma>

goal (1 subgoal):
 1. \<not> (\<exists>\<epsilon>>0. \<epsilon> < \<delta> \<and> \<not> hindered (reduce_weight \<Gamma> b \<epsilon>)) \<Longrightarrow> False
[PROOF STEP]
define wb where "wb = enn2real (weight \<Gamma> b)"
[PROOF STATE]
proof (state)
this:
wb = enn2real (weight \<Gamma> b)

goal (1 subgoal):
 1. \<not> (\<exists>\<epsilon>>0. \<epsilon> < \<delta> \<and> \<not> hindered (reduce_weight \<Gamma> b \<epsilon>)) \<Longrightarrow> False
[PROOF STEP]
have wb_conv: "weight \<Gamma> b = ennreal wb"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. weight \<Gamma> b = ennreal wb
[PROOF STEP]
by(simp add: wb_def less_top[symmetric])
[PROOF STATE]
proof (state)
this:
weight \<Gamma> b = ennreal wb

goal (1 subgoal):
 1. \<not> (\<exists>\<epsilon>>0. \<epsilon> < \<delta> \<and> \<not> hindered (reduce_weight \<Gamma> b \<epsilon>)) \<Longrightarrow> False
[PROOF STEP]
have wb_pos: "wb > 0"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. 0 < wb
[PROOF STEP]
using wb
[PROOF STATE]
proof (prove)
using this:
0 < weight \<Gamma> b

goal (1 subgoal):
 1. 0 < wb
[PROOF STEP]
by(simp add: wb_conv)
[PROOF STATE]
proof (state)
this:
0 < wb

goal (1 subgoal):
 1. \<not> (\<exists>\<epsilon>>0. \<epsilon> < \<delta> \<and> \<not> hindered (reduce_weight \<Gamma> b \<epsilon>)) \<Longrightarrow> False
[PROOF STEP]
define \<epsilon> where "\<epsilon> n = min \<delta> wb / (n + 2)" for n :: nat
[PROOF STATE]
proof (state)
this:
\<epsilon> ?n = min \<delta> wb / real (?n + 2)

goal (1 subgoal):
 1. \<not> (\<exists>\<epsilon>>0. \<epsilon> < \<delta> \<and> \<not> hindered (reduce_weight \<Gamma> b \<epsilon>)) \<Longrightarrow> False
[PROOF STEP]
have \<epsilon>_pos: "\<epsilon> n > 0" for n
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. 0 < \<epsilon> n
[PROOF STEP]
using wb_pos \<delta>
[PROOF STATE]
proof (prove)
using this:
0 < wb
0 < \<delta>

goal (1 subgoal):
 1. 0 < \<epsilon> n
[PROOF STEP]
by(simp add: \<epsilon>_def)
[PROOF STATE]
proof (state)
this:
0 < \<epsilon> ?n

goal (1 subgoal):
 1. \<not> (\<exists>\<epsilon>>0. \<epsilon> < \<delta> \<and> \<not> hindered (reduce_weight \<Gamma> b \<epsilon>)) \<Longrightarrow> False
[PROOF STEP]
have \<epsilon>_nonneg: "0 \<le> \<epsilon> n" for n
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. 0 \<le> \<epsilon> n
[PROOF STEP]
using \<epsilon>_pos[of n]
[PROOF STATE]
proof (prove)
using this:
0 < \<epsilon> n

goal (1 subgoal):
 1. 0 \<le> \<epsilon> n
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
0 \<le> \<epsilon> ?n

goal (1 subgoal):
 1. \<not> (\<exists>\<epsilon>>0. \<epsilon> < \<delta> \<and> \<not> hindered (reduce_weight \<Gamma> b \<epsilon>)) \<Longrightarrow> False
[PROOF STEP]
have *: "\<epsilon> n \<le> min wb \<delta> / 2" for n
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<epsilon> n \<le> min wb \<delta> / 2
[PROOF STEP]
using wb_pos \<delta>
[PROOF STATE]
proof (prove)
using this:
0 < wb
0 < \<delta>

goal (1 subgoal):
 1. \<epsilon> n \<le> min wb \<delta> / 2
[PROOF STEP]
by(auto simp add: \<epsilon>_def field_simps min_def)
[PROOF STATE]
proof (state)
this:
\<epsilon> ?n \<le> min wb \<delta> / 2

goal (1 subgoal):
 1. \<not> (\<exists>\<epsilon>>0. \<epsilon> < \<delta> \<and> \<not> hindered (reduce_weight \<Gamma> b \<epsilon>)) \<Longrightarrow> False
[PROOF STEP]
have \<epsilon>_le: "\<epsilon> n \<le> wb" and \<epsilon>_less: "\<epsilon> n < wb" and \<epsilon>_less_\<delta>: "\<epsilon> n < \<delta>" and \<epsilon>_le': "\<epsilon> n \<le> wb / 2" for n
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (\<epsilon> n \<le> wb &&& \<epsilon> n < wb) &&& \<epsilon> n < \<delta> &&& \<epsilon> n \<le> wb / 2
[PROOF STEP]
using *[of n] \<epsilon>_pos[of n]
[PROOF STATE]
proof (prove)
using this:
\<epsilon> n \<le> min wb \<delta> / 2
0 < \<epsilon> n

goal (1 subgoal):
 1. (\<epsilon> n \<le> wb &&& \<epsilon> n < wb) &&& \<epsilon> n < \<delta> &&& \<epsilon> n \<le> wb / 2
[PROOF STEP]
by(auto)
[PROOF STATE]
proof (state)
this:
\<epsilon> ?n \<le> wb
\<epsilon> ?n < wb
\<epsilon> ?n < \<delta>
\<epsilon> ?n \<le> wb / 2

goal (1 subgoal):
 1. \<not> (\<exists>\<epsilon>>0. \<epsilon> < \<delta> \<and> \<not> hindered (reduce_weight \<Gamma> b \<epsilon>)) \<Longrightarrow> False
[PROOF STEP]
define \<Gamma>' where "\<Gamma>' n = reduce_weight \<Gamma> b (\<epsilon> n)" for n :: nat
[PROOF STATE]
proof (state)
this:
\<Gamma>' ?n = reduce_weight \<Gamma> b (\<epsilon> ?n)

goal (1 subgoal):
 1. \<not> (\<exists>\<epsilon>>0. \<epsilon> < \<delta> \<and> \<not> hindered (reduce_weight \<Gamma> b \<epsilon>)) \<Longrightarrow> False
[PROOF STEP]
have \<Gamma>'_sel [simp]:
    "edge (\<Gamma>' n) = edge \<Gamma>"
    "A (\<Gamma>' n) = A \<Gamma>"
    "B (\<Gamma>' n) = B \<Gamma>"
    "weight (\<Gamma>' n) x = weight \<Gamma> x - (if x = b then \<epsilon> n else 0)"
    "essential (\<Gamma>' n) = essential \<Gamma>"
    "roofed_gen (\<Gamma>' n) = roofed_gen \<Gamma>"
    for n x
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (edge (\<Gamma>' n) = edge \<Gamma> &&& A (\<Gamma>' n) = A \<Gamma> &&& B (\<Gamma>' n) = B \<Gamma>) &&& weight (\<Gamma>' n) x = weight \<Gamma> x - ennreal (if x = b then \<epsilon> n else 0) &&& essential (\<Gamma>' n) = essential \<Gamma> &&& roofed_gen (\<Gamma>' n) = roofed_gen \<Gamma>
[PROOF STEP]
by(simp_all add: \<Gamma>'_def)
[PROOF STATE]
proof (state)
this:
edge (\<Gamma>' ?n) = edge \<Gamma>
A (\<Gamma>' ?n) = A \<Gamma>
B (\<Gamma>' ?n) = B \<Gamma>
weight (\<Gamma>' ?n) ?x = weight \<Gamma> ?x - ennreal (if ?x = b then \<epsilon> ?n else 0)
essential (\<Gamma>' ?n) = essential \<Gamma>
roofed_gen (\<Gamma>' ?n) = roofed_gen \<Gamma>

goal (1 subgoal):
 1. \<not> (\<exists>\<epsilon>>0. \<epsilon> < \<delta> \<and> \<not> hindered (reduce_weight \<Gamma> b \<epsilon>)) \<Longrightarrow> False
[PROOF STEP]
have vertex_\<Gamma>' [simp]: "vertex (\<Gamma>' n) = vertex \<Gamma>" for n
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. vertex (\<Gamma>' n) = vertex \<Gamma>
[PROOF STEP]
by(simp add: vertex_def fun_eq_iff)
[PROOF STATE]
proof (state)
this:
vertex (\<Gamma>' ?n) = vertex \<Gamma>

goal (1 subgoal):
 1. \<not> (\<exists>\<epsilon>>0. \<epsilon> < \<delta> \<and> \<not> hindered (reduce_weight \<Gamma> b \<epsilon>)) \<Longrightarrow> False
[PROOF STEP]
from wb
[PROOF STATE]
proof (chain)
picking this:
0 < weight \<Gamma> b
[PROOF STEP]
have "b \<in> \<^bold>V"
[PROOF STATE]
proof (prove)
using this:
0 < weight \<Gamma> b

goal (1 subgoal):
 1. b \<in> \<^bold>V
[PROOF STEP]
using weight_outside[of b]
[PROOF STATE]
proof (prove)
using this:
0 < weight \<Gamma> b
b \<notin> \<^bold>V \<Longrightarrow> weight \<Gamma> b = 0

goal (1 subgoal):
 1. b \<in> \<^bold>V
[PROOF STEP]
by(auto intro: ccontr)
[PROOF STATE]
proof (state)
this:
b \<in> \<^bold>V

goal (1 subgoal):
 1. \<not> (\<exists>\<epsilon>>0. \<epsilon> < \<delta> \<and> \<not> hindered (reduce_weight \<Gamma> b \<epsilon>)) \<Longrightarrow> False
[PROOF STEP]
interpret \<Gamma>': countable_bipartite_web "\<Gamma>' n" for n
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. countable_bipartite_web (\<Gamma>' n)
[PROOF STEP]
unfolding \<Gamma>'_def
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. countable_bipartite_web (reduce_weight \<Gamma> b (\<epsilon> n))
[PROOF STEP]
using wb_pos
[PROOF STATE]
proof (prove)
using this:
0 < wb

goal (1 subgoal):
 1. countable_bipartite_web (reduce_weight \<Gamma> b (\<epsilon> n))
[PROOF STEP]
by(intro countable_bipartite_web_reduce_weight)(simp_all add: wb_conv \<epsilon>_le \<epsilon>_nonneg)
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. \<not> (\<exists>\<epsilon>>0. \<epsilon> < \<delta> \<and> \<not> hindered (reduce_weight \<Gamma> b \<epsilon>)) \<Longrightarrow> False
[PROOF STEP]
obtain g where g: "\<And>n. current (\<Gamma>' n) (g n)"
    and w: "\<And>n. wave (\<Gamma>' n) (g n)"
    and hind: "\<And>n. hindrance (\<Gamma>' n) (g n)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (\<And>g. \<lbrakk>\<And>n. current (\<Gamma>' n) (g n); \<And>n. wave (\<Gamma>' n) (g n); \<And>n. hindrance (\<Gamma>' n) (g n)\<rbrakk> \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
using hindered[OF \<epsilon>_pos, unfolded wb_conv ennreal_less_iff, OF \<epsilon>_less_\<delta>]
[PROOF STATE]
proof (prove)
using this:
hindered (reduce_weight \<Gamma> b (\<epsilon> ?n1))

goal (1 subgoal):
 1. (\<And>g. \<lbrakk>\<And>n. current (\<Gamma>' n) (g n); \<And>n. wave (\<Gamma>' n) (g n); \<And>n. hindrance (\<Gamma>' n) (g n)\<rbrakk> \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
unfolding hindered.simps \<Gamma>'_def
[PROOF STATE]
proof (prove)
using this:
\<exists>f. hindrance (reduce_weight \<Gamma> b (\<epsilon> ?n1)) f \<and> current (reduce_weight \<Gamma> b (\<epsilon> ?n1)) f \<and> wave (reduce_weight \<Gamma> b (\<epsilon> ?n1)) f

goal (1 subgoal):
 1. (\<And>g. \<lbrakk>\<And>n. current (reduce_weight \<Gamma> b (\<epsilon> n)) (g n); \<And>n. wave (reduce_weight \<Gamma> b (\<epsilon> n)) (g n); \<And>n. hindrance (reduce_weight \<Gamma> b (\<epsilon> n)) (g n)\<rbrakk> \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by atomize_elim metis
[PROOF STATE]
proof (state)
this:
current (\<Gamma>' ?n) (g ?n)
wave (\<Gamma>' ?n) (g ?n)
hindrance (\<Gamma>' ?n) (g ?n)

goal (1 subgoal):
 1. \<not> (\<exists>\<epsilon>>0. \<epsilon> < \<delta> \<and> \<not> hindered (reduce_weight \<Gamma> b \<epsilon>)) \<Longrightarrow> False
[PROOF STEP]
from g
[PROOF STATE]
proof (chain)
picking this:
current (\<Gamma>' ?n) (g ?n)
[PROOF STEP]
have g\<Gamma>: "current \<Gamma> (g n)" for n
[PROOF STATE]
proof (prove)
using this:
current (\<Gamma>' ?n) (g ?n)

goal (1 subgoal):
 1. current \<Gamma> (g n)
[PROOF STEP]
by(rule current_weight_mono)(auto simp add: \<epsilon>_nonneg diff_le_self_ennreal)
[PROOF STATE]
proof (state)
this:
current \<Gamma> (g ?n)

goal (1 subgoal):
 1. \<not> (\<exists>\<epsilon>>0. \<epsilon> < \<delta> \<and> \<not> hindered (reduce_weight \<Gamma> b \<epsilon>)) \<Longrightarrow> False
[PROOF STEP]
note [simp] = currentD_finite[OF g\<Gamma>]
[PROOF STATE]
proof (state)
this:
g ?n1 ?e \<noteq> \<top>

goal (1 subgoal):
 1. \<not> (\<exists>\<epsilon>>0. \<epsilon> < \<delta> \<and> \<not> hindered (reduce_weight \<Gamma> b \<epsilon>)) \<Longrightarrow> False
[PROOF STEP]
have b_TER: "b \<in> TER\<^bsub>\<Gamma>' n\<^esub> (g n)" for n
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. b \<in> TER\<^bsub>\<Gamma>' n\<^esub> (g n)
[PROOF STEP]
proof(rule ccontr)
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. b \<notin> TER\<^bsub>\<Gamma>' n\<^esub> (g n) \<Longrightarrow> False
[PROOF STEP]
assume b': "b \<notin> TER\<^bsub>\<Gamma>' n\<^esub> (g n)"
[PROOF STATE]
proof (state)
this:
b \<notin> TER\<^bsub>\<Gamma>' n\<^esub> (g n)

goal (1 subgoal):
 1. b \<notin> TER\<^bsub>\<Gamma>' n\<^esub> (g n) \<Longrightarrow> False
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
b \<notin> TER\<^bsub>\<Gamma>' n\<^esub> (g n)
[PROOF STEP]
have TER: "TER\<^bsub>\<Gamma>' n\<^esub> (g n) = TER (g n)"
[PROOF STATE]
proof (prove)
using this:
b \<notin> TER\<^bsub>\<Gamma>' n\<^esub> (g n)

goal (1 subgoal):
 1. TER\<^bsub>\<Gamma>' n\<^esub> (g n) = TER (g n)
[PROOF STEP]
using b \<epsilon>_nonneg[of n]
[PROOF STATE]
proof (prove)
using this:
b \<notin> TER\<^bsub>\<Gamma>' n\<^esub> (g n)
b \<in> B \<Gamma>
0 \<le> \<epsilon> n

goal (1 subgoal):
 1. TER\<^bsub>\<Gamma>' n\<^esub> (g n) = TER (g n)
[PROOF STEP]
by(auto simp add: SAT.simps split: if_split_asm intro: ennreal_diff_le_mono_left)
[PROOF STATE]
proof (state)
this:
TER\<^bsub>\<Gamma>' n\<^esub> (g n) = TER (g n)

goal (1 subgoal):
 1. b \<notin> TER\<^bsub>\<Gamma>' n\<^esub> (g n) \<Longrightarrow> False
[PROOF STEP]
from w[of n] TER
[PROOF STATE]
proof (chain)
picking this:
wave (\<Gamma>' n) (g n)
TER\<^bsub>\<Gamma>' n\<^esub> (g n) = TER (g n)
[PROOF STEP]
have "wave \<Gamma> (g n)"
[PROOF STATE]
proof (prove)
using this:
wave (\<Gamma>' n) (g n)
TER\<^bsub>\<Gamma>' n\<^esub> (g n) = TER (g n)

goal (1 subgoal):
 1. wave \<Gamma> (g n)
[PROOF STEP]
by(simp add: wave.simps separating_gen.simps)
[PROOF STATE]
proof (state)
this:
wave \<Gamma> (g n)

goal (1 subgoal):
 1. b \<notin> TER\<^bsub>\<Gamma>' n\<^esub> (g n) \<Longrightarrow> False
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
wave \<Gamma> (g n)

goal (1 subgoal):
 1. b \<notin> TER\<^bsub>\<Gamma>' n\<^esub> (g n) \<Longrightarrow> False
[PROOF STEP]
have "hindrance \<Gamma> (g n)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. hindrance \<Gamma> (g n)
[PROOF STEP]
using hind[of n] TER bnA b'
[PROOF STATE]
proof (prove)
using this:
hindrance (\<Gamma>' n) (g n)
TER\<^bsub>\<Gamma>' n\<^esub> (g n) = TER (g n)
b \<notin> A \<Gamma>
b \<notin> TER\<^bsub>\<Gamma>' n\<^esub> (g n)

goal (1 subgoal):
 1. hindrance \<Gamma> (g n)
[PROOF STEP]
by(auto simp add: hindrance.simps split: if_split_asm)
[PROOF STATE]
proof (state)
this:
hindrance \<Gamma> (g n)

goal (1 subgoal):
 1. b \<notin> TER\<^bsub>\<Gamma>' n\<^esub> (g n) \<Longrightarrow> False
[PROOF STEP]
ultimately
[PROOF STATE]
proof (chain)
picking this:
wave \<Gamma> (g n)
hindrance \<Gamma> (g n)
[PROOF STEP]
show False
[PROOF STATE]
proof (prove)
using this:
wave \<Gamma> (g n)
hindrance \<Gamma> (g n)

goal (1 subgoal):
 1. False
[PROOF STEP]
using loose_unhindered[OF loose] g\<Gamma>[of n]
[PROOF STATE]
proof (prove)
using this:
wave \<Gamma> (g n)
hindrance \<Gamma> (g n)
\<not> hindered \<Gamma>
current \<Gamma> (g n)

goal (1 subgoal):
 1. False
[PROOF STEP]
by(auto intro: hindered.intros)
[PROOF STATE]
proof (state)
this:
False

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
b \<in> TER\<^bsub>\<Gamma>' ?n\<^esub> (g ?n)

goal (1 subgoal):
 1. \<not> (\<exists>\<epsilon>>0. \<epsilon> < \<delta> \<and> \<not> hindered (reduce_weight \<Gamma> b \<epsilon>)) \<Longrightarrow> False
[PROOF STEP]
have IN_g_b: "d_IN (g n) b = weight \<Gamma> b - \<epsilon> n" for n
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. d_IN (g n) b = weight \<Gamma> b - ennreal (\<epsilon> n)
[PROOF STEP]
using b_TER[of n] bnA
[PROOF STATE]
proof (prove)
using this:
b \<in> TER\<^bsub>\<Gamma>' n\<^esub> (g n)
b \<notin> A \<Gamma>

goal (1 subgoal):
 1. d_IN (g n) b = weight \<Gamma> b - ennreal (\<epsilon> n)
[PROOF STEP]
by(auto simp add: currentD_SAT[OF g])
[PROOF STATE]
proof (state)
this:
d_IN (g ?n) b = weight \<Gamma> b - ennreal (\<epsilon> ?n)

goal (1 subgoal):
 1. \<not> (\<exists>\<epsilon>>0. \<epsilon> < \<delta> \<and> \<not> hindered (reduce_weight \<Gamma> b \<epsilon>)) \<Longrightarrow> False
[PROOF STEP]
define factor where "factor n = (wb - \<epsilon> 0) / (wb - \<epsilon> n)" for n
[PROOF STATE]
proof (state)
this:
factor ?n = (wb - \<epsilon> 0) / (wb - \<epsilon> ?n)

goal (1 subgoal):
 1. \<not> (\<exists>\<epsilon>>0. \<epsilon> < \<delta> \<and> \<not> hindered (reduce_weight \<Gamma> b \<epsilon>)) \<Longrightarrow> False
[PROOF STEP]
have factor_le_1: "factor n \<le> 1" for n
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. factor n \<le> 1
[PROOF STEP]
using wb_pos \<delta> \<epsilon>_less[of n]
[PROOF STATE]
proof (prove)
using this:
0 < wb
0 < \<delta>
\<epsilon> n < wb

goal (1 subgoal):
 1. factor n \<le> 1
[PROOF STEP]
by(auto simp add: factor_def field_simps \<epsilon>_def min_def)
[PROOF STATE]
proof (state)
this:
factor ?n \<le> 1

goal (1 subgoal):
 1. \<not> (\<exists>\<epsilon>>0. \<epsilon> < \<delta> \<and> \<not> hindered (reduce_weight \<Gamma> b \<epsilon>)) \<Longrightarrow> False
[PROOF STEP]
have factor_pos: "0 < factor n" for n
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. 0 < factor n
[PROOF STEP]
using wb_pos \<delta> * \<epsilon>_less
[PROOF STATE]
proof (prove)
using this:
0 < wb
0 < \<delta>
\<epsilon> ?n \<le> min wb \<delta> / 2
\<epsilon> ?n < wb

goal (1 subgoal):
 1. 0 < factor n
[PROOF STEP]
by(simp add: factor_def field_simps)
[PROOF STATE]
proof (state)
this:
0 < factor ?n

goal (1 subgoal):
 1. \<not> (\<exists>\<epsilon>>0. \<epsilon> < \<delta> \<and> \<not> hindered (reduce_weight \<Gamma> b \<epsilon>)) \<Longrightarrow> False
[PROOF STEP]
have factor: "(wb - \<epsilon> n) * factor n = wb - \<epsilon> 0" for n
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (wb - \<epsilon> n) * factor n = wb - \<epsilon> 0
[PROOF STEP]
using \<epsilon>_less[of n]
[PROOF STATE]
proof (prove)
using this:
\<epsilon> n < wb

goal (1 subgoal):
 1. (wb - \<epsilon> n) * factor n = wb - \<epsilon> 0
[PROOF STEP]
by(simp add: factor_def field_simps)
[PROOF STATE]
proof (state)
this:
(wb - \<epsilon> ?n) * factor ?n = wb - \<epsilon> 0

goal (1 subgoal):
 1. \<not> (\<exists>\<epsilon>>0. \<epsilon> < \<delta> \<and> \<not> hindered (reduce_weight \<Gamma> b \<epsilon>)) \<Longrightarrow> False
[PROOF STEP]
define g' where "g' = (\<lambda>n (x, y). if y = b then g n (x, y) * factor n else g n (x, y))"
[PROOF STATE]
proof (state)
this:
g' = (\<lambda>n (x, y). if y = b then g n (x, y) * ennreal (factor n) else g n (x, y))

goal (1 subgoal):
 1. \<not> (\<exists>\<epsilon>>0. \<epsilon> < \<delta> \<and> \<not> hindered (reduce_weight \<Gamma> b \<epsilon>)) \<Longrightarrow> False
[PROOF STEP]
have g'_simps: "g' n (x, y) = (if y = b then g n (x, y) * factor n else g n (x, y))" for n x y
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. g' n (x, y) = (if y = b then g n (x, y) * ennreal (factor n) else g n (x, y))
[PROOF STEP]
by(simp add: g'_def)
[PROOF STATE]
proof (state)
this:
g' ?n (?x, ?y) = (if ?y = b then g ?n (?x, ?y) * ennreal (factor ?n) else g ?n (?x, ?y))

goal (1 subgoal):
 1. \<not> (\<exists>\<epsilon>>0. \<epsilon> < \<delta> \<and> \<not> hindered (reduce_weight \<Gamma> b \<epsilon>)) \<Longrightarrow> False
[PROOF STEP]
have g'_le_g: "g' n e \<le> g n e" for n e
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. g' n e \<le> g n e
[PROOF STEP]
using factor_le_1[of n]
[PROOF STATE]
proof (prove)
using this:
factor n \<le> 1

goal (1 subgoal):
 1. g' n e \<le> g n e
[PROOF STEP]
by(cases e "g n e" rule: prod.exhaust[case_product ennreal_cases])
      (auto simp add: g'_simps field_simps mult_left_le)
[PROOF STATE]
proof (state)
this:
g' ?n ?e \<le> g ?n ?e

goal (1 subgoal):
 1. \<not> (\<exists>\<epsilon>>0. \<epsilon> < \<delta> \<and> \<not> hindered (reduce_weight \<Gamma> b \<epsilon>)) \<Longrightarrow> False
[PROOF STEP]
have "4 + (n * 6 + n * (n * 2)) \<noteq> (0 :: real)" for n :: nat
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. real (4 + (n * 6 + n * (n * 2))) \<noteq> 0
[PROOF STEP]
by(metis (mono_tags, opaque_lifting) add_is_0 of_nat_eq_0_iff of_nat_numeral zero_neq_numeral)
[PROOF STATE]
proof (state)
this:
real (4 + (?n * 6 + ?n * (?n * 2))) \<noteq> 0

goal (1 subgoal):
 1. \<not> (\<exists>\<epsilon>>0. \<epsilon> < \<delta> \<and> \<not> hindered (reduce_weight \<Gamma> b \<epsilon>)) \<Longrightarrow> False
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
real (4 + (?n * 6 + ?n * (?n * 2))) \<noteq> 0
[PROOF STEP]
have IN_g': "d_IN (g' n) x = (if x = b then weight \<Gamma> b - \<epsilon> 0 else d_IN (g n) x)" for x n
[PROOF STATE]
proof (prove)
using this:
real (4 + (?n * 6 + ?n * (?n * 2))) \<noteq> 0

goal (1 subgoal):
 1. d_IN (g' n) x = (if x = b then weight \<Gamma> b - ennreal (\<epsilon> 0) else d_IN (g n) x)
[PROOF STEP]
using b_TER[of n] bnA factor_pos[of n] factor[of n] wb_pos \<delta>
[PROOF STATE]
proof (prove)
using this:
real (4 + (?n * 6 + ?n * (?n * 2))) \<noteq> 0
b \<in> TER\<^bsub>\<Gamma>' n\<^esub> (g n)
b \<notin> A \<Gamma>
0 < factor n
(wb - \<epsilon> n) * factor n = wb - \<epsilon> 0
0 < wb
0 < \<delta>

goal (1 subgoal):
 1. d_IN (g' n) x = (if x = b then weight \<Gamma> b - ennreal (\<epsilon> 0) else d_IN (g n) x)
[PROOF STEP]
by(auto simp add: d_IN_def g'_simps nn_integral_divide nn_integral_cmult currentD_SAT[OF g] wb_conv \<epsilon>_def field_simps
                      ennreal_minus ennreal_mult'[symmetric] intro!: arg_cong[where f=ennreal])
[PROOF STATE]
proof (state)
this:
d_IN (g' ?n) ?x = (if ?x = b then weight \<Gamma> b - ennreal (\<epsilon> 0) else d_IN (g ?n) ?x)

goal (1 subgoal):
 1. \<not> (\<exists>\<epsilon>>0. \<epsilon> < \<delta> \<and> \<not> hindered (reduce_weight \<Gamma> b \<epsilon>)) \<Longrightarrow> False
[PROOF STEP]
have OUT_g': "d_OUT (g' n) x = d_OUT (g n) x - g n (x, b) * (1 - factor n)" for n x
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. d_OUT (g' n) x = d_OUT (g n) x - g n (x, b) * ennreal (1 - factor n)
[PROOF STEP]
proof -
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. d_OUT (g' n) x = d_OUT (g n) x - g n (x, b) * ennreal (1 - factor n)
[PROOF STEP]
have "d_OUT (g' n) x = (\<Sum>\<^sup>+ y. g n (x, y)) - (\<Sum>\<^sup>+ y. (g n (x, y) * (1 - factor n)) * indicator {b} y)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. d_OUT (g' n) x = (\<Sum>\<^sup>+ y. g n (x, y)) - (\<integral>\<^sup>+y\<in>{b}. (g n (x, y) * ennreal (1 - factor n))\<partial>count_space UNIV)
[PROOF STEP]
using factor_le_1[of n] factor_pos[of n]
[PROOF STATE]
proof (prove)
using this:
factor n \<le> 1
0 < factor n

goal (1 subgoal):
 1. d_OUT (g' n) x = (\<Sum>\<^sup>+ y. g n (x, y)) - (\<integral>\<^sup>+y\<in>{b}. (g n (x, y) * ennreal (1 - factor n))\<partial>count_space UNIV)
[PROOF STEP]
apply(cases "g n (x, b)")
[PROOF STATE]
proof (prove)
goal (2 subgoals):
 1. \<And>r. \<lbrakk>factor n \<le> 1; 0 < factor n; 0 \<le> r; g n (x, b) = ennreal r\<rbrakk> \<Longrightarrow> d_OUT (g' n) x = (\<Sum>\<^sup>+ y. g n (x, y)) - (\<integral>\<^sup>+y\<in>{b}. (g n (x, y) * ennreal (1 - factor n))\<partial>count_space UNIV)
 2. \<lbrakk>factor n \<le> 1; 0 < factor n; g n (x, b) = \<top>\<rbrakk> \<Longrightarrow> d_OUT (g' n) x = (\<Sum>\<^sup>+ y. g n (x, y)) - (\<integral>\<^sup>+y\<in>{b}. (g n (x, y) * ennreal (1 - factor n))\<partial>count_space UNIV)
[PROOF STEP]
apply(subst nn_integral_diff[symmetric])
[PROOF STATE]
proof (prove)
goal (6 subgoals):
 1. \<And>r. \<lbrakk>factor n \<le> 1; 0 < factor n; 0 \<le> r; g n (x, b) = ennreal r\<rbrakk> \<Longrightarrow> (\<lambda>y. g n (x, y)) \<in> borel_measurable (count_space UNIV)
 2. \<And>r. \<lbrakk>factor n \<le> 1; 0 < factor n; 0 \<le> r; g n (x, b) = ennreal r\<rbrakk> \<Longrightarrow> (\<lambda>y. g n (x, y) * ennreal (1 - factor n) * indicator {b} y) \<in> borel_measurable (count_space UNIV)
 3. \<And>r. \<lbrakk>factor n \<le> 1; 0 < factor n; 0 \<le> r; g n (x, b) = ennreal r\<rbrakk> \<Longrightarrow> \<integral>\<^sup>+y\<in>{b}. (g n (x, y) * ennreal (1 - factor n))\<partial>count_space UNIV \<noteq> \<infinity>
 4. \<And>r. \<lbrakk>factor n \<le> 1; 0 < factor n; 0 \<le> r; g n (x, b) = ennreal r\<rbrakk> \<Longrightarrow> AE xa in count_space UNIV. g n (x, xa) * ennreal (1 - factor n) * indicator {b} xa \<le> g n (x, xa)
 5. \<And>r. \<lbrakk>factor n \<le> 1; 0 < factor n; 0 \<le> r; g n (x, b) = ennreal r\<rbrakk> \<Longrightarrow> d_OUT (g' n) x = (\<Sum>\<^sup>+ xa. g n (x, xa) - g n (x, xa) * ennreal (1 - factor n) * indicator {b} xa)
 6. \<lbrakk>factor n \<le> 1; 0 < factor n; g n (x, b) = \<top>\<rbrakk> \<Longrightarrow> d_OUT (g' n) x = (\<Sum>\<^sup>+ y. g n (x, y)) - (\<integral>\<^sup>+y\<in>{b}. (g n (x, y) * ennreal (1 - factor n))\<partial>count_space UNIV)
[PROOF STEP]
apply(auto simp add: g'_simps nn_integral_divide d_OUT_def AE_count_space mult_left_le ennreal_mult_eq_top_iff
                           ennreal_mult'[symmetric] ennreal_minus_if
                 intro!: nn_integral_cong split: split_indicator)
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<And>r. \<lbrakk>factor n \<le> 1; 0 < factor n; 0 \<le> r; g n (x, b) = ennreal r\<rbrakk> \<Longrightarrow> r * factor n = r - r * (1 - factor n)
[PROOF STEP]
apply(simp_all add: field_simps)
[PROOF STATE]
proof (prove)
goal:
No subgoals!
[PROOF STEP]
done
[PROOF STATE]
proof (state)
this:
d_OUT (g' n) x = (\<Sum>\<^sup>+ y. g n (x, y)) - (\<integral>\<^sup>+y\<in>{b}. (g n (x, y) * ennreal (1 - factor n))\<partial>count_space UNIV)

goal (1 subgoal):
 1. d_OUT (g' n) x = d_OUT (g n) x - g n (x, b) * ennreal (1 - factor n)
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
d_OUT (g' n) x = (\<Sum>\<^sup>+ y. g n (x, y)) - (\<integral>\<^sup>+y\<in>{b}. (g n (x, y) * ennreal (1 - factor n))\<partial>count_space UNIV)

goal (1 subgoal):
 1. d_OUT (g' n) x = d_OUT (g n) x - g n (x, b) * ennreal (1 - factor n)
[PROOF STEP]
have "\<dots> = d_OUT (g n) x - g n (x, b) * (1 - factor n)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (\<Sum>\<^sup>+ y. g n (x, y)) - (\<integral>\<^sup>+y\<in>{b}. (g n (x, y) * ennreal (1 - factor n))\<partial>count_space UNIV) = d_OUT (g n) x - g n (x, b) * ennreal (1 - factor n)
[PROOF STEP]
using factor_le_1[of n]
[PROOF STATE]
proof (prove)
using this:
factor n \<le> 1

goal (1 subgoal):
 1. (\<Sum>\<^sup>+ y. g n (x, y)) - (\<integral>\<^sup>+y\<in>{b}. (g n (x, y) * ennreal (1 - factor n))\<partial>count_space UNIV) = d_OUT (g n) x - g n (x, b) * ennreal (1 - factor n)
[PROOF STEP]
by(subst nn_integral_indicator_singleton)(simp_all add: d_OUT_def field_simps)
[PROOF STATE]
proof (state)
this:
(\<Sum>\<^sup>+ y. g n (x, y)) - (\<integral>\<^sup>+y\<in>{b}. (g n (x, y) * ennreal (1 - factor n))\<partial>count_space UNIV) = d_OUT (g n) x - g n (x, b) * ennreal (1 - factor n)

goal (1 subgoal):
 1. d_OUT (g' n) x = d_OUT (g n) x - g n (x, b) * ennreal (1 - factor n)
[PROOF STEP]
finally
[PROOF STATE]
proof (chain)
picking this:
d_OUT (g' n) x = d_OUT (g n) x - g n (x, b) * ennreal (1 - factor n)
[PROOF STEP]
show ?thesis
[PROOF STATE]
proof (prove)
using this:
d_OUT (g' n) x = d_OUT (g n) x - g n (x, b) * ennreal (1 - factor n)

goal (1 subgoal):
 1. d_OUT (g' n) x = d_OUT (g n) x - g n (x, b) * ennreal (1 - factor n)
[PROOF STEP]
.
[PROOF STATE]
proof (state)
this:
d_OUT (g' n) x = d_OUT (g n) x - g n (x, b) * ennreal (1 - factor n)

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
d_OUT (g' ?n) ?x = d_OUT (g ?n) ?x - g ?n (?x, b) * ennreal (1 - factor ?n)

goal (1 subgoal):
 1. \<not> (\<exists>\<epsilon>>0. \<epsilon> < \<delta> \<and> \<not> hindered (reduce_weight \<Gamma> b \<epsilon>)) \<Longrightarrow> False
[PROOF STEP]
have g': "current (\<Gamma>' 0) (g' n)" for n
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. current (\<Gamma>' 0) (g' n)
[PROOF STEP]
proof
[PROOF STATE]
proof (state)
goal (3 subgoals):
 1. \<And>x. d_OUT (g' n) x \<le> weight (\<Gamma>' 0) x
 2. \<And>x. d_IN (g' n) x \<le> weight (\<Gamma>' 0) x
 3. \<And>e. e \<notin> \<^bold>E\<^bsub>\<Gamma>' 0\<^esub> \<Longrightarrow> g' n e = 0
[PROOF STEP]
show "d_OUT (g' n) x \<le> weight (\<Gamma>' 0) x" for x
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. d_OUT (g' n) x \<le> weight (\<Gamma>' 0) x
[PROOF STEP]
using b_TER[of n] currentD_weight_OUT[OF g, of n x] \<epsilon>_le[of 0] factor_le_1[of n]
[PROOF STATE]
proof (prove)
using this:
b \<in> TER\<^bsub>\<Gamma>' n\<^esub> (g n)
d_OUT (g n) x \<le> weight (\<Gamma>' n) x
\<epsilon> 0 \<le> wb
factor n \<le> 1

goal (1 subgoal):
 1. d_OUT (g' n) x \<le> weight (\<Gamma>' 0) x
[PROOF STEP]
by(auto simp add: OUT_g' SINK.simps ennreal_diff_le_mono_left)
[PROOF STATE]
proof (state)
this:
d_OUT (g' n) ?x \<le> weight (\<Gamma>' 0) ?x

goal (2 subgoals):
 1. \<And>x. d_IN (g' n) x \<le> weight (\<Gamma>' 0) x
 2. \<And>e. e \<notin> \<^bold>E\<^bsub>\<Gamma>' 0\<^esub> \<Longrightarrow> g' n e = 0
[PROOF STEP]
show "d_IN (g' n) x \<le> weight (\<Gamma>' 0) x" for x
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. d_IN (g' n) x \<le> weight (\<Gamma>' 0) x
[PROOF STEP]
using d_IN_mono[of "g' n" x, OF g'_le_g] currentD_weight_IN[OF g, of n x] b_TER[of n] b
[PROOF STATE]
proof (prove)
using this:
d_IN (g' n) x \<le> d_IN (g n) x
d_IN (g n) x \<le> weight (\<Gamma>' n) x
b \<in> TER\<^bsub>\<Gamma>' n\<^esub> (g n)
b \<in> B \<Gamma>

goal (1 subgoal):
 1. d_IN (g' n) x \<le> weight (\<Gamma>' 0) x
[PROOF STEP]
by(auto simp add: IN_g' SAT.simps wb_conv \<epsilon>_def)
[PROOF STATE]
proof (state)
this:
d_IN (g' n) ?x \<le> weight (\<Gamma>' 0) ?x

goal (1 subgoal):
 1. \<And>e. e \<notin> \<^bold>E\<^bsub>\<Gamma>' 0\<^esub> \<Longrightarrow> g' n e = 0
[PROOF STEP]
show "g' n e = 0" if "e \<notin> \<^bold>E\<^bsub>\<Gamma>' 0\<^esub>" for e
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. g' n e = 0
[PROOF STEP]
using that
[PROOF STATE]
proof (prove)
using this:
e \<notin> \<^bold>E\<^bsub>\<Gamma>' 0\<^esub>

goal (1 subgoal):
 1. g' n e = 0
[PROOF STEP]
by(cases e)(clarsimp simp add: g'_simps currentD_outside[OF g])
[PROOF STATE]
proof (state)
this:
?e \<notin> \<^bold>E\<^bsub>\<Gamma>' 0\<^esub> \<Longrightarrow> g' n ?e = 0

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
current (\<Gamma>' 0) (g' ?n)

goal (1 subgoal):
 1. \<not> (\<exists>\<epsilon>>0. \<epsilon> < \<delta> \<and> \<not> hindered (reduce_weight \<Gamma> b \<epsilon>)) \<Longrightarrow> False
[PROOF STEP]
have SINK_g': "SINK (g n) = SINK (g' n)" for n
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. SINK (g n) = SINK (g' n)
[PROOF STEP]
using factor_pos[of n]
[PROOF STATE]
proof (prove)
using this:
0 < factor n

goal (1 subgoal):
 1. SINK (g n) = SINK (g' n)
[PROOF STEP]
by(auto simp add: SINK.simps currentD_OUT_eq_0[OF g] currentD_OUT_eq_0[OF g'] g'_simps split: if_split_asm)
[PROOF STATE]
proof (state)
this:
SINK (g ?n) = SINK (g' ?n)

goal (1 subgoal):
 1. \<not> (\<exists>\<epsilon>>0. \<epsilon> < \<delta> \<and> \<not> hindered (reduce_weight \<Gamma> b \<epsilon>)) \<Longrightarrow> False
[PROOF STEP]
have SAT_g': "SAT (\<Gamma>' n) (g n) = SAT (\<Gamma>' 0) (g' n)" for n
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. SAT (\<Gamma>' n) (g n) = SAT (\<Gamma>' 0) (g' n)
[PROOF STEP]
using b_TER[of n] \<epsilon>_le'[of 0]
[PROOF STATE]
proof (prove)
using this:
b \<in> TER\<^bsub>\<Gamma>' n\<^esub> (g n)
\<epsilon> 0 \<le> wb / 2

goal (1 subgoal):
 1. SAT (\<Gamma>' n) (g n) = SAT (\<Gamma>' 0) (g' n)
[PROOF STEP]
by(auto simp add: SAT.simps wb_conv IN_g' IN_g_b)
[PROOF STATE]
proof (state)
this:
SAT (\<Gamma>' ?n) (g ?n) = SAT (\<Gamma>' 0) (g' ?n)

goal (1 subgoal):
 1. \<not> (\<exists>\<epsilon>>0. \<epsilon> < \<delta> \<and> \<not> hindered (reduce_weight \<Gamma> b \<epsilon>)) \<Longrightarrow> False
[PROOF STEP]
have TER_g': "TER\<^bsub>\<Gamma>' n\<^esub> (g n) = TER\<^bsub>\<Gamma>' 0\<^esub> (g' n)" for n
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. TER\<^bsub>\<Gamma>' n\<^esub> (g n) = TER\<^bsub>\<Gamma>' 0\<^esub> (g' n)
[PROOF STEP]
using b_TER[of n]
[PROOF STATE]
proof (prove)
using this:
b \<in> TER\<^bsub>\<Gamma>' n\<^esub> (g n)

goal (1 subgoal):
 1. TER\<^bsub>\<Gamma>' n\<^esub> (g n) = TER\<^bsub>\<Gamma>' 0\<^esub> (g' n)
[PROOF STEP]
by(auto simp add: SAT.simps SINK_g' OUT_g' IN_g' wb_conv \<epsilon>_def)
[PROOF STATE]
proof (state)
this:
TER\<^bsub>\<Gamma>' ?n\<^esub> (g ?n) = TER\<^bsub>\<Gamma>' 0\<^esub> (g' ?n)

goal (1 subgoal):
 1. \<not> (\<exists>\<epsilon>>0. \<epsilon> < \<delta> \<and> \<not> hindered (reduce_weight \<Gamma> b \<epsilon>)) \<Longrightarrow> False
[PROOF STEP]
have w': "wave (\<Gamma>' 0) (g' n)" for n
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. wave (\<Gamma>' 0) (g' n)
[PROOF STEP]
proof
[PROOF STATE]
proof (state)
goal (2 subgoals):
 1. separating (\<Gamma>' 0) (TER\<^bsub>\<Gamma>' 0\<^esub> (g' n))
 2. current (\<Gamma>' 0) (g' n)
[PROOF STEP]
have "separating (\<Gamma>' 0) (TER\<^bsub>\<Gamma>' n\<^esub> (g n))"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. separating (\<Gamma>' 0) (TER\<^bsub>\<Gamma>' n\<^esub> (g n))
[PROOF STEP]
using waveD_separating[OF w, of n]
[PROOF STATE]
proof (prove)
using this:
separating (\<Gamma>' n) (TER\<^bsub>\<Gamma>' n\<^esub> (g n))

goal (1 subgoal):
 1. separating (\<Gamma>' 0) (TER\<^bsub>\<Gamma>' n\<^esub> (g n))
[PROOF STEP]
by(simp add: separating_gen.simps)
[PROOF STATE]
proof (state)
this:
separating (\<Gamma>' 0) (TER\<^bsub>\<Gamma>' n\<^esub> (g n))

goal (2 subgoals):
 1. separating (\<Gamma>' 0) (TER\<^bsub>\<Gamma>' 0\<^esub> (g' n))
 2. current (\<Gamma>' 0) (g' n)
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
separating (\<Gamma>' 0) (TER\<^bsub>\<Gamma>' n\<^esub> (g n))
[PROOF STEP]
show "separating (\<Gamma>' 0) (TER\<^bsub>\<Gamma>' 0\<^esub> (g' n))"
[PROOF STATE]
proof (prove)
using this:
separating (\<Gamma>' 0) (TER\<^bsub>\<Gamma>' n\<^esub> (g n))

goal (1 subgoal):
 1. separating (\<Gamma>' 0) (TER\<^bsub>\<Gamma>' 0\<^esub> (g' n))
[PROOF STEP]
unfolding TER_g'
[PROOF STATE]
proof (prove)
using this:
separating (\<Gamma>' 0) (TER\<^bsub>\<Gamma>' 0\<^esub> (g' n))

goal (1 subgoal):
 1. separating (\<Gamma>' 0) (TER\<^bsub>\<Gamma>' 0\<^esub> (g' n))
[PROOF STEP]
.
[PROOF STATE]
proof (state)
this:
separating (\<Gamma>' 0) (TER\<^bsub>\<Gamma>' 0\<^esub> (g' n))

goal (1 subgoal):
 1. current (\<Gamma>' 0) (g' n)
[PROOF STEP]
qed(rule g')
[PROOF STATE]
proof (state)
this:
wave (\<Gamma>' 0) (g' ?n)

goal (1 subgoal):
 1. \<not> (\<exists>\<epsilon>>0. \<epsilon> < \<delta> \<and> \<not> hindered (reduce_weight \<Gamma> b \<epsilon>)) \<Longrightarrow> False
[PROOF STEP]
define f where "f = rec_nat (g 0) (\<lambda>n rec. rec \<frown>\<^bsub>\<Gamma>' 0\<^esub> g' (n + 1))"
[PROOF STATE]
proof (state)
this:
f = rec_nat (g 0) (\<lambda>n rec. rec \<frown>\<^bsub>\<Gamma>' 0\<^esub> g' (n + 1))

goal (1 subgoal):
 1. \<not> (\<exists>\<epsilon>>0. \<epsilon> < \<delta> \<and> \<not> hindered (reduce_weight \<Gamma> b \<epsilon>)) \<Longrightarrow> False
[PROOF STEP]
have f_simps [simp]:
    "f 0 = g 0"
    "f (Suc n) = f n \<frown>\<^bsub>\<Gamma>' 0\<^esub> g' (n + 1)"
    for n
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. f 0 = g 0 &&& f (Suc n) = f n \<frown>\<^bsub>\<Gamma>' 0\<^esub> g' (n + 1)
[PROOF STEP]
by(simp_all add: f_def)
[PROOF STATE]
proof (state)
this:
f 0 = g 0
f (Suc ?n) = f ?n \<frown>\<^bsub>\<Gamma>' 0\<^esub> g' (?n + 1)

goal (1 subgoal):
 1. \<not> (\<exists>\<epsilon>>0. \<epsilon> < \<delta> \<and> \<not> hindered (reduce_weight \<Gamma> b \<epsilon>)) \<Longrightarrow> False
[PROOF STEP]
have f: "current (\<Gamma>' 0) (f n)" and fw: "wave (\<Gamma>' 0) (f n)" for n
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. current (\<Gamma>' 0) (f n) &&& wave (\<Gamma>' 0) (f n)
[PROOF STEP]
proof(induction n)
[PROOF STATE]
proof (state)
goal (4 subgoals):
 1. current (\<Gamma>' 0) (f 0)
 2. wave (\<Gamma>' 0) (f 0)
 3. \<And>n. \<lbrakk>current (\<Gamma>' 0) (f n); wave (\<Gamma>' 0) (f n)\<rbrakk> \<Longrightarrow> current (\<Gamma>' 0) (f (Suc n))
 4. \<And>n. \<lbrakk>current (\<Gamma>' 0) (f n); wave (\<Gamma>' 0) (f n)\<rbrakk> \<Longrightarrow> wave (\<Gamma>' 0) (f (Suc n))
[PROOF STEP]
case (Suc n)
[PROOF STATE]
proof (state)
this:
current (\<Gamma>' 0) (f n)
wave (\<Gamma>' 0) (f n)

goal (4 subgoals):
 1. current (\<Gamma>' 0) (f 0)
 2. wave (\<Gamma>' 0) (f 0)
 3. \<And>n. \<lbrakk>current (\<Gamma>' 0) (f n); wave (\<Gamma>' 0) (f n)\<rbrakk> \<Longrightarrow> current (\<Gamma>' 0) (f (Suc n))
 4. \<And>n. \<lbrakk>current (\<Gamma>' 0) (f n); wave (\<Gamma>' 0) (f n)\<rbrakk> \<Longrightarrow> wave (\<Gamma>' 0) (f (Suc n))
[PROOF STEP]
{
[PROOF STATE]
proof (state)
this:
current (\<Gamma>' 0) (f n)
wave (\<Gamma>' 0) (f n)

goal (4 subgoals):
 1. current (\<Gamma>' 0) (f 0)
 2. wave (\<Gamma>' 0) (f 0)
 3. \<And>n. \<lbrakk>current (\<Gamma>' 0) (f n); wave (\<Gamma>' 0) (f n)\<rbrakk> \<Longrightarrow> current (\<Gamma>' 0) (f (Suc n))
 4. \<And>n. \<lbrakk>current (\<Gamma>' 0) (f n); wave (\<Gamma>' 0) (f n)\<rbrakk> \<Longrightarrow> wave (\<Gamma>' 0) (f (Suc n))
[PROOF STEP]
case 1
[PROOF STATE]
proof (state)
this:

goal (4 subgoals):
 1. current (\<Gamma>' 0) (f 0)
 2. wave (\<Gamma>' 0) (f 0)
 3. \<And>n. \<lbrakk>current (\<Gamma>' 0) (f n); wave (\<Gamma>' 0) (f n)\<rbrakk> \<Longrightarrow> current (\<Gamma>' 0) (f (Suc n))
 4. \<And>n. \<lbrakk>current (\<Gamma>' 0) (f n); wave (\<Gamma>' 0) (f n)\<rbrakk> \<Longrightarrow> wave (\<Gamma>' 0) (f (Suc n))
[PROOF STEP]
show ?case
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. current (\<Gamma>' 0) (f (Suc n))
[PROOF STEP]
unfolding f_simps
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. current (\<Gamma>' 0) (f n \<frown>\<^bsub>\<Gamma>' 0\<^esub> g' (n + 1))
[PROOF STEP]
using Suc.IH g'
[PROOF STATE]
proof (prove)
using this:
current (\<Gamma>' 0) (f n)
wave (\<Gamma>' 0) (f n)
current (\<Gamma>' 0) (g' ?n)

goal (1 subgoal):
 1. current (\<Gamma>' 0) (f n \<frown>\<^bsub>\<Gamma>' 0\<^esub> g' (n + 1))
[PROOF STEP]
by(rule current_plus_web)
[PROOF STATE]
proof (state)
this:
current (\<Gamma>' 0) (f (Suc n))

goal (3 subgoals):
 1. current (\<Gamma>' 0) (f 0)
 2. wave (\<Gamma>' 0) (f 0)
 3. \<And>n. \<lbrakk>current (\<Gamma>' 0) (f n); wave (\<Gamma>' 0) (f n)\<rbrakk> \<Longrightarrow> wave (\<Gamma>' 0) (f (Suc n))
[PROOF STEP]
}
[PROOF STATE]
proof (state)
this:
current (\<Gamma>' 0) (f (Suc n))

goal (3 subgoals):
 1. current (\<Gamma>' 0) (f 0)
 2. wave (\<Gamma>' 0) (f 0)
 3. \<And>n. \<lbrakk>current (\<Gamma>' 0) (f n); wave (\<Gamma>' 0) (f n)\<rbrakk> \<Longrightarrow> wave (\<Gamma>' 0) (f (Suc n))
[PROOF STEP]
{
[PROOF STATE]
proof (state)
this:
current (\<Gamma>' 0) (f (Suc n))

goal (3 subgoals):
 1. current (\<Gamma>' 0) (f 0)
 2. wave (\<Gamma>' 0) (f 0)
 3. \<And>n. \<lbrakk>current (\<Gamma>' 0) (f n); wave (\<Gamma>' 0) (f n)\<rbrakk> \<Longrightarrow> wave (\<Gamma>' 0) (f (Suc n))
[PROOF STEP]
case 2
[PROOF STATE]
proof (state)
this:

goal (3 subgoals):
 1. current (\<Gamma>' 0) (f 0)
 2. wave (\<Gamma>' 0) (f 0)
 3. \<And>n. \<lbrakk>current (\<Gamma>' 0) (f n); wave (\<Gamma>' 0) (f n)\<rbrakk> \<Longrightarrow> wave (\<Gamma>' 0) (f (Suc n))
[PROOF STEP]
show ?case
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. wave (\<Gamma>' 0) (f (Suc n))
[PROOF STEP]
unfolding f_simps
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. wave (\<Gamma>' 0) (f n \<frown>\<^bsub>\<Gamma>' 0\<^esub> g' (n + 1))
[PROOF STEP]
using Suc.IH g' w'
[PROOF STATE]
proof (prove)
using this:
current (\<Gamma>' 0) (f n)
wave (\<Gamma>' 0) (f n)
current (\<Gamma>' 0) (g' ?n)
wave (\<Gamma>' 0) (g' ?n)

goal (1 subgoal):
 1. wave (\<Gamma>' 0) (f n \<frown>\<^bsub>\<Gamma>' 0\<^esub> g' (n + 1))
[PROOF STEP]
by(rule wave_plus')
[PROOF STATE]
proof (state)
this:
wave (\<Gamma>' 0) (f (Suc n))

goal (2 subgoals):
 1. current (\<Gamma>' 0) (f 0)
 2. wave (\<Gamma>' 0) (f 0)
[PROOF STEP]
}
[PROOF STATE]
proof (state)
this:
wave (\<Gamma>' 0) (f (Suc n))

goal (2 subgoals):
 1. current (\<Gamma>' 0) (f 0)
 2. wave (\<Gamma>' 0) (f 0)
[PROOF STEP]
qed(simp_all add: g w)
[PROOF STATE]
proof (state)
this:
current (\<Gamma>' 0) (f ?n)
wave (\<Gamma>' 0) (f ?n)

goal (1 subgoal):
 1. \<not> (\<exists>\<epsilon>>0. \<epsilon> < \<delta> \<and> \<not> hindered (reduce_weight \<Gamma> b \<epsilon>)) \<Longrightarrow> False
[PROOF STEP]
have f_inc: "n \<le> m \<Longrightarrow> f n \<le> f m" for n m
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. n \<le> m \<Longrightarrow> f n \<le> f m
[PROOF STEP]
proof(induction m rule: dec_induct)
[PROOF STATE]
proof (state)
goal (2 subgoals):
 1. f n \<le> f n
 2. \<And>n. \<lbrakk>n \<le> n; n < m; f n \<le> f n\<rbrakk> \<Longrightarrow> f n \<le> f (Suc n)
[PROOF STEP]
case (step k)
[PROOF STATE]
proof (state)
this:
n \<le> k
k < m
f n \<le> f k

goal (2 subgoals):
 1. f n \<le> f n
 2. \<And>n. \<lbrakk>n \<le> n; n < m; f n \<le> f n\<rbrakk> \<Longrightarrow> f n \<le> f (Suc n)
[PROOF STEP]
note step.IH
[PROOF STATE]
proof (state)
this:
f n \<le> f k

goal (2 subgoals):
 1. f n \<le> f n
 2. \<And>n. \<lbrakk>n \<le> n; n < m; f n \<le> f n\<rbrakk> \<Longrightarrow> f n \<le> f (Suc n)
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
f n \<le> f k

goal (2 subgoals):
 1. f n \<le> f n
 2. \<And>n. \<lbrakk>n \<le> n; n < m; f n \<le> f n\<rbrakk> \<Longrightarrow> f n \<le> f (Suc n)
[PROOF STEP]
have "f k \<le> (f k \<frown>\<^bsub>\<Gamma>' 0\<^esub> g' (k + 1))"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. f k \<le> f k \<frown>\<^bsub>\<Gamma>' 0\<^esub> g' (k + 1)
[PROOF STEP]
by(rule le_funI plus_web_greater)+
[PROOF STATE]
proof (state)
this:
f k \<le> f k \<frown>\<^bsub>\<Gamma>' 0\<^esub> g' (k + 1)

goal (2 subgoals):
 1. f n \<le> f n
 2. \<And>n. \<lbrakk>n \<le> n; n < m; f n \<le> f n\<rbrakk> \<Longrightarrow> f n \<le> f (Suc n)
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
f k \<le> f k \<frown>\<^bsub>\<Gamma>' 0\<^esub> g' (k + 1)

goal (2 subgoals):
 1. f n \<le> f n
 2. \<And>n. \<lbrakk>n \<le> n; n < m; f n \<le> f n\<rbrakk> \<Longrightarrow> f n \<le> f (Suc n)
[PROOF STEP]
have "\<dots> = f (Suc k)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. f k \<frown>\<^bsub>\<Gamma>' 0\<^esub> g' (k + 1) = f (Suc k)
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
f k \<frown>\<^bsub>\<Gamma>' 0\<^esub> g' (k + 1) = f (Suc k)

goal (2 subgoals):
 1. f n \<le> f n
 2. \<And>n. \<lbrakk>n \<le> n; n < m; f n \<le> f n\<rbrakk> \<Longrightarrow> f n \<le> f (Suc n)
[PROOF STEP]
finally
[PROOF STATE]
proof (chain)
picking this:
f n \<le> f (Suc k)
[PROOF STEP]
show ?case
[PROOF STATE]
proof (prove)
using this:
f n \<le> f (Suc k)

goal (1 subgoal):
 1. f n \<le> f (Suc k)
[PROOF STEP]
.
[PROOF STATE]
proof (state)
this:
f n \<le> f (Suc k)

goal (1 subgoal):
 1. f n \<le> f n
[PROOF STEP]
qed simp
[PROOF STATE]
proof (state)
this:
?n \<le> ?m \<Longrightarrow> f ?n \<le> f ?m

goal (1 subgoal):
 1. \<not> (\<exists>\<epsilon>>0. \<epsilon> < \<delta> \<and> \<not> hindered (reduce_weight \<Gamma> b \<epsilon>)) \<Longrightarrow> False
[PROOF STEP]
have chain_f: "Complete_Partial_Order.chain (\<le>) (range f)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. Complete_Partial_Order.chain (\<le>) (range f)
[PROOF STEP]
by(rule chain_imageI[where le_a="(\<le>)"])(simp_all add: f_inc)
[PROOF STATE]
proof (state)
this:
Complete_Partial_Order.chain (\<le>) (range f)

goal (1 subgoal):
 1. \<not> (\<exists>\<epsilon>>0. \<epsilon> < \<delta> \<and> \<not> hindered (reduce_weight \<Gamma> b \<epsilon>)) \<Longrightarrow> False
[PROOF STEP]
have "countable (support_flow (f n))" for n
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. countable (support_flow (f n))
[PROOF STEP]
using current_support_flow[OF f, of n]
[PROOF STATE]
proof (prove)
using this:
support_flow (f n) \<subseteq> \<^bold>E\<^bsub>\<Gamma>' 0\<^esub>

goal (1 subgoal):
 1. countable (support_flow (f n))
[PROOF STEP]
by(rule countable_subset) simp
[PROOF STATE]
proof (state)
this:
countable (support_flow (f ?n))

goal (1 subgoal):
 1. \<not> (\<exists>\<epsilon>>0. \<epsilon> < \<delta> \<and> \<not> hindered (reduce_weight \<Gamma> b \<epsilon>)) \<Longrightarrow> False
[PROOF STEP]
hence supp_f: "countable (support_flow (SUP n. f n))"
[PROOF STATE]
proof (prove)
using this:
countable (support_flow (f ?n))

goal (1 subgoal):
 1. countable (support_flow (\<Squnion> range f))
[PROOF STEP]
by(subst support_flow_Sup)simp
[PROOF STATE]
proof (state)
this:
countable (support_flow (\<Squnion> range f))

goal (1 subgoal):
 1. \<not> (\<exists>\<epsilon>>0. \<epsilon> < \<delta> \<and> \<not> hindered (reduce_weight \<Gamma> b \<epsilon>)) \<Longrightarrow> False
[PROOF STEP]
have RF_f: "RF (TER\<^bsub>\<Gamma>' 0\<^esub> (f n)) = RF (\<Union>i\<le>n. TER\<^bsub>\<Gamma>' 0\<^esub> (g' i))" for n
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. RF (TER\<^bsub>\<Gamma>' 0\<^esub> (f n)) = RF (\<Union>i\<le>n. TER\<^bsub>\<Gamma>' 0\<^esub> (g' i))
[PROOF STEP]
proof(induction n)
[PROOF STATE]
proof (state)
goal (2 subgoals):
 1. RF (TER\<^bsub>\<Gamma>' 0\<^esub> (f 0)) = RF (\<Union>i\<le>0. TER\<^bsub>\<Gamma>' 0\<^esub> (g' i))
 2. \<And>n. RF (TER\<^bsub>\<Gamma>' 0\<^esub> (f n)) = RF (\<Union>i\<le>n. TER\<^bsub>\<Gamma>' 0\<^esub> (g' i)) \<Longrightarrow> RF (TER\<^bsub>\<Gamma>' 0\<^esub> (f (Suc n))) = RF (\<Union>i\<le>Suc n. TER\<^bsub>\<Gamma>' 0\<^esub> (g' i))
[PROOF STEP]
case 0
[PROOF STATE]
proof (state)
this:

goal (2 subgoals):
 1. RF (TER\<^bsub>\<Gamma>' 0\<^esub> (f 0)) = RF (\<Union>i\<le>0. TER\<^bsub>\<Gamma>' 0\<^esub> (g' i))
 2. \<And>n. RF (TER\<^bsub>\<Gamma>' 0\<^esub> (f n)) = RF (\<Union>i\<le>n. TER\<^bsub>\<Gamma>' 0\<^esub> (g' i)) \<Longrightarrow> RF (TER\<^bsub>\<Gamma>' 0\<^esub> (f (Suc n))) = RF (\<Union>i\<le>Suc n. TER\<^bsub>\<Gamma>' 0\<^esub> (g' i))
[PROOF STEP]
show ?case
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. RF (TER\<^bsub>\<Gamma>' 0\<^esub> (f 0)) = RF (\<Union>i\<le>0. TER\<^bsub>\<Gamma>' 0\<^esub> (g' i))
[PROOF STEP]
by(simp add: TER_g')
[PROOF STATE]
proof (state)
this:
RF (TER\<^bsub>\<Gamma>' 0\<^esub> (f 0)) = RF (\<Union>i\<le>0. TER\<^bsub>\<Gamma>' 0\<^esub> (g' i))

goal (1 subgoal):
 1. \<And>n. RF (TER\<^bsub>\<Gamma>' 0\<^esub> (f n)) = RF (\<Union>i\<le>n. TER\<^bsub>\<Gamma>' 0\<^esub> (g' i)) \<Longrightarrow> RF (TER\<^bsub>\<Gamma>' 0\<^esub> (f (Suc n))) = RF (\<Union>i\<le>Suc n. TER\<^bsub>\<Gamma>' 0\<^esub> (g' i))
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. \<And>n. RF (TER\<^bsub>\<Gamma>' 0\<^esub> (f n)) = RF (\<Union>i\<le>n. TER\<^bsub>\<Gamma>' 0\<^esub> (g' i)) \<Longrightarrow> RF (TER\<^bsub>\<Gamma>' 0\<^esub> (f (Suc n))) = RF (\<Union>i\<le>Suc n. TER\<^bsub>\<Gamma>' 0\<^esub> (g' i))
[PROOF STEP]
case (Suc n)
[PROOF STATE]
proof (state)
this:
RF (TER\<^bsub>\<Gamma>' 0\<^esub> (f n)) = RF (\<Union>i\<le>n. TER\<^bsub>\<Gamma>' 0\<^esub> (g' i))

goal (1 subgoal):
 1. \<And>n. RF (TER\<^bsub>\<Gamma>' 0\<^esub> (f n)) = RF (\<Union>i\<le>n. TER\<^bsub>\<Gamma>' 0\<^esub> (g' i)) \<Longrightarrow> RF (TER\<^bsub>\<Gamma>' 0\<^esub> (f (Suc n))) = RF (\<Union>i\<le>Suc n. TER\<^bsub>\<Gamma>' 0\<^esub> (g' i))
[PROOF STEP]
have "RF (TER\<^bsub>\<Gamma>' 0\<^esub> (f (Suc n))) = RF\<^bsub>\<Gamma>' 0\<^esub> (TER\<^bsub>\<Gamma>' 0\<^esub> (f n \<frown>\<^bsub>\<Gamma>' 0\<^esub> g' (n + 1)))"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. RF (TER\<^bsub>\<Gamma>' 0\<^esub> (f (Suc n))) = RF\<^bsub>\<Gamma>' 0\<^esub> (TER\<^bsub>\<Gamma>' 0\<^esub> (f n \<frown>\<^bsub>\<Gamma>' 0\<^esub> g' (n + 1)))
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
RF (TER\<^bsub>\<Gamma>' 0\<^esub> (f (Suc n))) = RF\<^bsub>\<Gamma>' 0\<^esub> (TER\<^bsub>\<Gamma>' 0\<^esub> (f n \<frown>\<^bsub>\<Gamma>' 0\<^esub> g' (n + 1)))

goal (1 subgoal):
 1. \<And>n. RF (TER\<^bsub>\<Gamma>' 0\<^esub> (f n)) = RF (\<Union>i\<le>n. TER\<^bsub>\<Gamma>' 0\<^esub> (g' i)) \<Longrightarrow> RF (TER\<^bsub>\<Gamma>' 0\<^esub> (f (Suc n))) = RF (\<Union>i\<le>Suc n. TER\<^bsub>\<Gamma>' 0\<^esub> (g' i))
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
RF (TER\<^bsub>\<Gamma>' 0\<^esub> (f (Suc n))) = RF\<^bsub>\<Gamma>' 0\<^esub> (TER\<^bsub>\<Gamma>' 0\<^esub> (f n \<frown>\<^bsub>\<Gamma>' 0\<^esub> g' (n + 1)))

goal (1 subgoal):
 1. \<And>n. RF (TER\<^bsub>\<Gamma>' 0\<^esub> (f n)) = RF (\<Union>i\<le>n. TER\<^bsub>\<Gamma>' 0\<^esub> (g' i)) \<Longrightarrow> RF (TER\<^bsub>\<Gamma>' 0\<^esub> (f (Suc n))) = RF (\<Union>i\<le>Suc n. TER\<^bsub>\<Gamma>' 0\<^esub> (g' i))
[PROOF STEP]
have "\<dots> = RF\<^bsub>\<Gamma>' 0\<^esub> (TER\<^bsub>\<Gamma>' 0\<^esub> (f n) \<union> TER\<^bsub>\<Gamma>' 0\<^esub> (g' (n + 1)))"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. RF\<^bsub>\<Gamma>' 0\<^esub> (TER\<^bsub>\<Gamma>' 0\<^esub> (f n \<frown>\<^bsub>\<Gamma>' 0\<^esub> g' (n + 1))) = RF\<^bsub>\<Gamma>' 0\<^esub> (TER\<^bsub>\<Gamma>' 0\<^esub> (f n) \<union> TER\<^bsub>\<Gamma>' 0\<^esub> (g' (n + 1)))
[PROOF STEP]
using f fw g' w'
[PROOF STATE]
proof (prove)
using this:
current (\<Gamma>' 0) (f ?n)
wave (\<Gamma>' 0) (f ?n)
current (\<Gamma>' 0) (g' ?n)
wave (\<Gamma>' 0) (g' ?n)

goal (1 subgoal):
 1. RF\<^bsub>\<Gamma>' 0\<^esub> (TER\<^bsub>\<Gamma>' 0\<^esub> (f n \<frown>\<^bsub>\<Gamma>' 0\<^esub> g' (n + 1))) = RF\<^bsub>\<Gamma>' 0\<^esub> (TER\<^bsub>\<Gamma>' 0\<^esub> (f n) \<union> TER\<^bsub>\<Gamma>' 0\<^esub> (g' (n + 1)))
[PROOF STEP]
by(rule RF_TER_plus_web)
[PROOF STATE]
proof (state)
this:
RF\<^bsub>\<Gamma>' 0\<^esub> (TER\<^bsub>\<Gamma>' 0\<^esub> (f n \<frown>\<^bsub>\<Gamma>' 0\<^esub> g' (n + 1))) = RF\<^bsub>\<Gamma>' 0\<^esub> (TER\<^bsub>\<Gamma>' 0\<^esub> (f n) \<union> TER\<^bsub>\<Gamma>' 0\<^esub> (g' (n + 1)))

goal (1 subgoal):
 1. \<And>n. RF (TER\<^bsub>\<Gamma>' 0\<^esub> (f n)) = RF (\<Union>i\<le>n. TER\<^bsub>\<Gamma>' 0\<^esub> (g' i)) \<Longrightarrow> RF (TER\<^bsub>\<Gamma>' 0\<^esub> (f (Suc n))) = RF (\<Union>i\<le>Suc n. TER\<^bsub>\<Gamma>' 0\<^esub> (g' i))
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
RF\<^bsub>\<Gamma>' 0\<^esub> (TER\<^bsub>\<Gamma>' 0\<^esub> (f n \<frown>\<^bsub>\<Gamma>' 0\<^esub> g' (n + 1))) = RF\<^bsub>\<Gamma>' 0\<^esub> (TER\<^bsub>\<Gamma>' 0\<^esub> (f n) \<union> TER\<^bsub>\<Gamma>' 0\<^esub> (g' (n + 1)))

goal (1 subgoal):
 1. \<And>n. RF (TER\<^bsub>\<Gamma>' 0\<^esub> (f n)) = RF (\<Union>i\<le>n. TER\<^bsub>\<Gamma>' 0\<^esub> (g' i)) \<Longrightarrow> RF (TER\<^bsub>\<Gamma>' 0\<^esub> (f (Suc n))) = RF (\<Union>i\<le>Suc n. TER\<^bsub>\<Gamma>' 0\<^esub> (g' i))
[PROOF STEP]
have "\<dots> = RF\<^bsub>\<Gamma>' 0\<^esub> (RF\<^bsub>\<Gamma>' 0\<^esub> (TER\<^bsub>\<Gamma>' 0\<^esub> (f n)) \<union> TER\<^bsub>\<Gamma>' 0\<^esub> (g' (n + 1)))"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. RF\<^bsub>\<Gamma>' 0\<^esub> (TER\<^bsub>\<Gamma>' 0\<^esub> (f n) \<union> TER\<^bsub>\<Gamma>' 0\<^esub> (g' (n + 1))) = RF\<^bsub>\<Gamma>' 0\<^esub> (RF\<^bsub>\<Gamma>' 0\<^esub> (TER\<^bsub>\<Gamma>' 0\<^esub> (f n)) \<union> TER\<^bsub>\<Gamma>' 0\<^esub> (g' (n + 1)))
[PROOF STEP]
by(simp add: roofed_idem_Un1)
[PROOF STATE]
proof (state)
this:
RF\<^bsub>\<Gamma>' 0\<^esub> (TER\<^bsub>\<Gamma>' 0\<^esub> (f n) \<union> TER\<^bsub>\<Gamma>' 0\<^esub> (g' (n + 1))) = RF\<^bsub>\<Gamma>' 0\<^esub> (RF\<^bsub>\<Gamma>' 0\<^esub> (TER\<^bsub>\<Gamma>' 0\<^esub> (f n)) \<union> TER\<^bsub>\<Gamma>' 0\<^esub> (g' (n + 1)))

goal (1 subgoal):
 1. \<And>n. RF (TER\<^bsub>\<Gamma>' 0\<^esub> (f n)) = RF (\<Union>i\<le>n. TER\<^bsub>\<Gamma>' 0\<^esub> (g' i)) \<Longrightarrow> RF (TER\<^bsub>\<Gamma>' 0\<^esub> (f (Suc n))) = RF (\<Union>i\<le>Suc n. TER\<^bsub>\<Gamma>' 0\<^esub> (g' i))
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
RF\<^bsub>\<Gamma>' 0\<^esub> (TER\<^bsub>\<Gamma>' 0\<^esub> (f n) \<union> TER\<^bsub>\<Gamma>' 0\<^esub> (g' (n + 1))) = RF\<^bsub>\<Gamma>' 0\<^esub> (RF\<^bsub>\<Gamma>' 0\<^esub> (TER\<^bsub>\<Gamma>' 0\<^esub> (f n)) \<union> TER\<^bsub>\<Gamma>' 0\<^esub> (g' (n + 1)))

goal (1 subgoal):
 1. \<And>n. RF (TER\<^bsub>\<Gamma>' 0\<^esub> (f n)) = RF (\<Union>i\<le>n. TER\<^bsub>\<Gamma>' 0\<^esub> (g' i)) \<Longrightarrow> RF (TER\<^bsub>\<Gamma>' 0\<^esub> (f (Suc n))) = RF (\<Union>i\<le>Suc n. TER\<^bsub>\<Gamma>' 0\<^esub> (g' i))
[PROOF STEP]
have "RF\<^bsub>\<Gamma>' 0\<^esub> (TER\<^bsub>\<Gamma>' 0\<^esub> (f n)) = RF\<^bsub>\<Gamma>' 0\<^esub> (\<Union>i\<le>n. TER\<^bsub>\<Gamma>' 0\<^esub> (g' i))"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. RF\<^bsub>\<Gamma>' 0\<^esub> (TER\<^bsub>\<Gamma>' 0\<^esub> (f n)) = RF\<^bsub>\<Gamma>' 0\<^esub> (\<Union>i\<le>n. TER\<^bsub>\<Gamma>' 0\<^esub> (g' i))
[PROOF STEP]
by(simp add: Suc.IH)
[PROOF STATE]
proof (state)
this:
RF\<^bsub>\<Gamma>' 0\<^esub> (TER\<^bsub>\<Gamma>' 0\<^esub> (f n)) = RF\<^bsub>\<Gamma>' 0\<^esub> (\<Union>i\<le>n. TER\<^bsub>\<Gamma>' 0\<^esub> (g' i))

goal (1 subgoal):
 1. \<And>n. RF (TER\<^bsub>\<Gamma>' 0\<^esub> (f n)) = RF (\<Union>i\<le>n. TER\<^bsub>\<Gamma>' 0\<^esub> (g' i)) \<Longrightarrow> RF (TER\<^bsub>\<Gamma>' 0\<^esub> (f (Suc n))) = RF (\<Union>i\<le>Suc n. TER\<^bsub>\<Gamma>' 0\<^esub> (g' i))
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
RF\<^bsub>\<Gamma>' 0\<^esub> (TER\<^bsub>\<Gamma>' 0\<^esub> (f n)) = RF\<^bsub>\<Gamma>' 0\<^esub> (\<Union>i\<le>n. TER\<^bsub>\<Gamma>' 0\<^esub> (g' i))

goal (1 subgoal):
 1. \<And>n. RF (TER\<^bsub>\<Gamma>' 0\<^esub> (f n)) = RF (\<Union>i\<le>n. TER\<^bsub>\<Gamma>' 0\<^esub> (g' i)) \<Longrightarrow> RF (TER\<^bsub>\<Gamma>' 0\<^esub> (f (Suc n))) = RF (\<Union>i\<le>Suc n. TER\<^bsub>\<Gamma>' 0\<^esub> (g' i))
[PROOF STEP]
have "RF\<^bsub>\<Gamma>' 0\<^esub> (\<dots> \<union> TER\<^bsub>\<Gamma>' 0\<^esub> (g' (n + 1))) = RF\<^bsub>\<Gamma>' 0\<^esub> ((\<Union>i\<le>n. TER\<^bsub>\<Gamma>' 0\<^esub> (g' i)) \<union> TER\<^bsub>\<Gamma>' 0\<^esub> (g' (n + 1)))"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. RF\<^bsub>\<Gamma>' 0\<^esub> (RF\<^bsub>\<Gamma>' 0\<^esub> (\<Union>i\<le>n. TER\<^bsub>\<Gamma>' 0\<^esub> (g' i)) \<union> TER\<^bsub>\<Gamma>' 0\<^esub> (g' (n + 1))) = RF\<^bsub>\<Gamma>' 0\<^esub> ((\<Union>i\<le>n. TER\<^bsub>\<Gamma>' 0\<^esub> (g' i)) \<union> TER\<^bsub>\<Gamma>' 0\<^esub> (g' (n + 1)))
[PROOF STEP]
by(simp add: roofed_idem_Un1)
[PROOF STATE]
proof (state)
this:
RF\<^bsub>\<Gamma>' 0\<^esub> (RF\<^bsub>\<Gamma>' 0\<^esub> (\<Union>i\<le>n. TER\<^bsub>\<Gamma>' 0\<^esub> (g' i)) \<union> TER\<^bsub>\<Gamma>' 0\<^esub> (g' (n + 1))) = RF\<^bsub>\<Gamma>' 0\<^esub> ((\<Union>i\<le>n. TER\<^bsub>\<Gamma>' 0\<^esub> (g' i)) \<union> TER\<^bsub>\<Gamma>' 0\<^esub> (g' (n + 1)))

goal (1 subgoal):
 1. \<And>n. RF (TER\<^bsub>\<Gamma>' 0\<^esub> (f n)) = RF (\<Union>i\<le>n. TER\<^bsub>\<Gamma>' 0\<^esub> (g' i)) \<Longrightarrow> RF (TER\<^bsub>\<Gamma>' 0\<^esub> (f (Suc n))) = RF (\<Union>i\<le>Suc n. TER\<^bsub>\<Gamma>' 0\<^esub> (g' i))
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
RF\<^bsub>\<Gamma>' 0\<^esub> (RF\<^bsub>\<Gamma>' 0\<^esub> (\<Union>i\<le>n. TER\<^bsub>\<Gamma>' 0\<^esub> (g' i)) \<union> TER\<^bsub>\<Gamma>' 0\<^esub> (g' (n + 1))) = RF\<^bsub>\<Gamma>' 0\<^esub> ((\<Union>i\<le>n. TER\<^bsub>\<Gamma>' 0\<^esub> (g' i)) \<union> TER\<^bsub>\<Gamma>' 0\<^esub> (g' (n + 1)))

goal (1 subgoal):
 1. \<And>n. RF (TER\<^bsub>\<Gamma>' 0\<^esub> (f n)) = RF (\<Union>i\<le>n. TER\<^bsub>\<Gamma>' 0\<^esub> (g' i)) \<Longrightarrow> RF (TER\<^bsub>\<Gamma>' 0\<^esub> (f (Suc n))) = RF (\<Union>i\<le>Suc n. TER\<^bsub>\<Gamma>' 0\<^esub> (g' i))
[PROOF STEP]
have "(\<Union>i\<le>n. TER\<^bsub>\<Gamma>' 0\<^esub> (g' i)) \<union> TER\<^bsub>\<Gamma>' 0\<^esub> (g' (n + 1)) = (\<Union>i\<le>Suc n. TER\<^bsub>\<Gamma>' 0\<^esub> (g' i))"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (\<Union>i\<le>n. TER\<^bsub>\<Gamma>' 0\<^esub> (g' i)) \<union> TER\<^bsub>\<Gamma>' 0\<^esub> (g' (n + 1)) = (\<Union>i\<le>Suc n. TER\<^bsub>\<Gamma>' 0\<^esub> (g' i))
[PROOF STEP]
unfolding atMost_Suc UN_insert
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (\<Union>i\<le>n. TER\<^bsub>\<Gamma>' 0\<^esub> (g' i)) \<union> TER\<^bsub>\<Gamma>' 0\<^esub> (g' (n + 1)) = TER\<^bsub>\<Gamma>' 0\<^esub> (g' (Suc n)) \<union> (\<Union>i\<le>n. TER\<^bsub>\<Gamma>' 0\<^esub> (g' i))
[PROOF STEP]
by(simp add: Un_commute)
[PROOF STATE]
proof (state)
this:
(\<Union>i\<le>n. TER\<^bsub>\<Gamma>' 0\<^esub> (g' i)) \<union> TER\<^bsub>\<Gamma>' 0\<^esub> (g' (n + 1)) = (\<Union>i\<le>Suc n. TER\<^bsub>\<Gamma>' 0\<^esub> (g' i))

goal (1 subgoal):
 1. \<And>n. RF (TER\<^bsub>\<Gamma>' 0\<^esub> (f n)) = RF (\<Union>i\<le>n. TER\<^bsub>\<Gamma>' 0\<^esub> (g' i)) \<Longrightarrow> RF (TER\<^bsub>\<Gamma>' 0\<^esub> (f (Suc n))) = RF (\<Union>i\<le>Suc n. TER\<^bsub>\<Gamma>' 0\<^esub> (g' i))
[PROOF STEP]
finally
[PROOF STATE]
proof (chain)
picking this:
RF (TER\<^bsub>\<Gamma>' 0\<^esub> (f (Suc n))) = RF\<^bsub>\<Gamma>' 0\<^esub> (\<Union>i\<le>Suc n. TER\<^bsub>\<Gamma>' 0\<^esub> (g' i))
[PROOF STEP]
show ?case
[PROOF STATE]
proof (prove)
using this:
RF (TER\<^bsub>\<Gamma>' 0\<^esub> (f (Suc n))) = RF\<^bsub>\<Gamma>' 0\<^esub> (\<Union>i\<le>Suc n. TER\<^bsub>\<Gamma>' 0\<^esub> (g' i))

goal (1 subgoal):
 1. RF (TER\<^bsub>\<Gamma>' 0\<^esub> (f (Suc n))) = RF (\<Union>i\<le>Suc n. TER\<^bsub>\<Gamma>' 0\<^esub> (g' i))
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
RF (TER\<^bsub>\<Gamma>' 0\<^esub> (f (Suc n))) = RF (\<Union>i\<le>Suc n. TER\<^bsub>\<Gamma>' 0\<^esub> (g' i))

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
RF (TER\<^bsub>\<Gamma>' 0\<^esub> (f ?n)) = RF (\<Union>i\<le>?n. TER\<^bsub>\<Gamma>' 0\<^esub> (g' i))

goal (1 subgoal):
 1. \<not> (\<exists>\<epsilon>>0. \<epsilon> < \<delta> \<and> \<not> hindered (reduce_weight \<Gamma> b \<epsilon>)) \<Longrightarrow> False
[PROOF STEP]
define g\<omega> where "g\<omega> = (SUP n. f n)"
[PROOF STATE]
proof (state)
this:
g\<omega> = \<Squnion> range f

goal (1 subgoal):
 1. \<not> (\<exists>\<epsilon>>0. \<epsilon> < \<delta> \<and> \<not> hindered (reduce_weight \<Gamma> b \<epsilon>)) \<Longrightarrow> False
[PROOF STEP]
have g\<omega>: "current (\<Gamma>' 0) g\<omega>"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. current (\<Gamma>' 0) g\<omega>
[PROOF STEP]
unfolding g\<omega>_def
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. current (\<Gamma>' 0) (\<Squnion> range f)
[PROOF STEP]
using chain_f
[PROOF STATE]
proof (prove)
using this:
Complete_Partial_Order.chain (\<le>) (range f)

goal (1 subgoal):
 1. current (\<Gamma>' 0) (\<Squnion> range f)
[PROOF STEP]
by(rule current_Sup)(auto simp add: f supp_f)
[PROOF STATE]
proof (state)
this:
current (\<Gamma>' 0) g\<omega>

goal (1 subgoal):
 1. \<not> (\<exists>\<epsilon>>0. \<epsilon> < \<delta> \<and> \<not> hindered (reduce_weight \<Gamma> b \<epsilon>)) \<Longrightarrow> False
[PROOF STEP]
have w\<omega>: "wave (\<Gamma>' 0) g\<omega>"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. wave (\<Gamma>' 0) g\<omega>
[PROOF STEP]
unfolding g\<omega>_def
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. wave (\<Gamma>' 0) (\<Squnion> range f)
[PROOF STEP]
using chain_f
[PROOF STATE]
proof (prove)
using this:
Complete_Partial_Order.chain (\<le>) (range f)

goal (1 subgoal):
 1. wave (\<Gamma>' 0) (\<Squnion> range f)
[PROOF STEP]
by(rule wave_lub)(auto simp add: fw  supp_f)
[PROOF STATE]
proof (state)
this:
wave (\<Gamma>' 0) g\<omega>

goal (1 subgoal):
 1. \<not> (\<exists>\<epsilon>>0. \<epsilon> < \<delta> \<and> \<not> hindered (reduce_weight \<Gamma> b \<epsilon>)) \<Longrightarrow> False
[PROOF STEP]
from g\<omega>
[PROOF STATE]
proof (chain)
picking this:
current (\<Gamma>' 0) g\<omega>
[PROOF STEP]
have g\<omega>': "current (\<Gamma>' n) g\<omega>" for n
[PROOF STATE]
proof (prove)
using this:
current (\<Gamma>' 0) g\<omega>

goal (1 subgoal):
 1. current (\<Gamma>' n) g\<omega>
[PROOF STEP]
using wb_pos \<delta>
[PROOF STATE]
proof (prove)
using this:
current (\<Gamma>' 0) g\<omega>
0 < wb
0 < \<delta>

goal (1 subgoal):
 1. current (\<Gamma>' n) g\<omega>
[PROOF STEP]
by(elim current_weight_mono)(auto simp add: \<epsilon>_le wb_conv \<epsilon>_def field_simps ennreal_minus_if min_le_iff_disj)
[PROOF STATE]
proof (state)
this:
current (\<Gamma>' ?n) g\<omega>

goal (1 subgoal):
 1. \<not> (\<exists>\<epsilon>>0. \<epsilon> < \<delta> \<and> \<not> hindered (reduce_weight \<Gamma> b \<epsilon>)) \<Longrightarrow> False
[PROOF STEP]
have SINK_g\<omega>: "SINK g\<omega> = (\<Inter>n. SINK (f n))"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. SINK g\<omega> = (\<Inter>n. SINK (f n))
[PROOF STEP]
unfolding g\<omega>_def
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. SINK (\<Squnion> range f) = (\<Inter>n. SINK (f n))
[PROOF STEP]
by(subst SINK_Sup[OF chain_f])(simp_all add: supp_f)
[PROOF STATE]
proof (state)
this:
SINK g\<omega> = (\<Inter>n. SINK (f n))

goal (1 subgoal):
 1. \<not> (\<exists>\<epsilon>>0. \<epsilon> < \<delta> \<and> \<not> hindered (reduce_weight \<Gamma> b \<epsilon>)) \<Longrightarrow> False
[PROOF STEP]
have SAT_g\<omega>: "SAT (\<Gamma>' 0) (f n) \<subseteq> SAT (\<Gamma>' 0) g\<omega>" for n
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. SAT (\<Gamma>' 0) (f n) \<subseteq> SAT (\<Gamma>' 0) g\<omega>
[PROOF STEP]
unfolding g\<omega>_def
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. SAT (\<Gamma>' 0) (f n) \<subseteq> SAT (\<Gamma>' 0) (\<Squnion> range f)
[PROOF STEP]
by(rule SAT_Sup_upper) simp
[PROOF STATE]
proof (state)
this:
SAT (\<Gamma>' 0) (f ?n) \<subseteq> SAT (\<Gamma>' 0) g\<omega>

goal (1 subgoal):
 1. \<not> (\<exists>\<epsilon>>0. \<epsilon> < \<delta> \<and> \<not> hindered (reduce_weight \<Gamma> b \<epsilon>)) \<Longrightarrow> False
[PROOF STEP]
have g_b_out: "g n (b, x) = 0" for n x
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. g n (b, x) = 0
[PROOF STEP]
using b_TER[of n]
[PROOF STATE]
proof (prove)
using this:
b \<in> TER\<^bsub>\<Gamma>' n\<^esub> (g n)

goal (1 subgoal):
 1. g n (b, x) = 0
[PROOF STEP]
by(simp add: SINK.simps currentD_OUT_eq_0[OF g])
[PROOF STATE]
proof (state)
this:
g ?n (b, ?x) = 0

goal (1 subgoal):
 1. \<not> (\<exists>\<epsilon>>0. \<epsilon> < \<delta> \<and> \<not> hindered (reduce_weight \<Gamma> b \<epsilon>)) \<Longrightarrow> False
[PROOF STEP]
have g'_b_out: "g' n (b, x) = 0" for n x
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. g' n (b, x) = 0
[PROOF STEP]
by(simp add: g'_simps g_b_out)
[PROOF STATE]
proof (state)
this:
g' ?n (b, ?x) = 0

goal (1 subgoal):
 1. \<not> (\<exists>\<epsilon>>0. \<epsilon> < \<delta> \<and> \<not> hindered (reduce_weight \<Gamma> b \<epsilon>)) \<Longrightarrow> False
[PROOF STEP]
have "f n (b, x) = 0" for n x
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. f n (b, x) = 0
[PROOF STEP]
by(induction n)(simp_all add: g_b_out g'_b_out)
[PROOF STATE]
proof (state)
this:
f ?n (b, ?x) = 0

goal (1 subgoal):
 1. \<not> (\<exists>\<epsilon>>0. \<epsilon> < \<delta> \<and> \<not> hindered (reduce_weight \<Gamma> b \<epsilon>)) \<Longrightarrow> False
[PROOF STEP]
hence b_SINK_f: "b \<in> SINK (f n)" for n
[PROOF STATE]
proof (prove)
using this:
f ?n (b, ?x) = 0

goal (1 subgoal):
 1. b \<in> SINK (f n)
[PROOF STEP]
by(simp add: SINK.simps d_OUT_def)
[PROOF STATE]
proof (state)
this:
b \<in> SINK (f ?n)

goal (1 subgoal):
 1. \<not> (\<exists>\<epsilon>>0. \<epsilon> < \<delta> \<and> \<not> hindered (reduce_weight \<Gamma> b \<epsilon>)) \<Longrightarrow> False
[PROOF STEP]
hence b_SINK_g\<omega>: "b \<in> SINK g\<omega>"
[PROOF STATE]
proof (prove)
using this:
b \<in> SINK (f ?n)

goal (1 subgoal):
 1. b \<in> SINK g\<omega>
[PROOF STEP]
by(simp add: SINK_g\<omega>)
[PROOF STATE]
proof (state)
this:
b \<in> SINK g\<omega>

goal (1 subgoal):
 1. \<not> (\<exists>\<epsilon>>0. \<epsilon> < \<delta> \<and> \<not> hindered (reduce_weight \<Gamma> b \<epsilon>)) \<Longrightarrow> False
[PROOF STEP]
have RF_circ: "RF\<^sup>\<circ>\<^bsub>\<Gamma>' n\<^esub> (TER\<^bsub>\<Gamma>' 0\<^esub> (g' n)) = RF\<^sup>\<circ>\<^bsub>\<Gamma>' 0\<^esub> (TER\<^bsub>\<Gamma>' 0\<^esub> (g' n))" for n
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. RF\<^sup>\<circ>\<^bsub>\<Gamma>' n\<^esub> (TER\<^bsub>\<Gamma>' 0\<^esub> (g' n)) = RF\<^sup>\<circ>\<^bsub>\<Gamma>' 0\<^esub> (TER\<^bsub>\<Gamma>' 0\<^esub> (g' n))
[PROOF STEP]
by(simp add: roofed_circ_def)
[PROOF STATE]
proof (state)
this:
RF\<^sup>\<circ>\<^bsub>\<Gamma>' ?n\<^esub> (TER\<^bsub>\<Gamma>' 0\<^esub> (g' ?n)) = RF\<^sup>\<circ>\<^bsub>\<Gamma>' 0\<^esub> (TER\<^bsub>\<Gamma>' 0\<^esub> (g' ?n))

goal (1 subgoal):
 1. \<not> (\<exists>\<epsilon>>0. \<epsilon> < \<delta> \<and> \<not> hindered (reduce_weight \<Gamma> b \<epsilon>)) \<Longrightarrow> False
[PROOF STEP]
have edge_restrict_\<Gamma>': "edge (quotient_web (\<Gamma>' 0) (g' n)) = edge (quotient_web (\<Gamma>' n) (g n))" for n
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. edge (quotient_web (\<Gamma>' 0) (g' n)) = edge (quotient_web (\<Gamma>' n) (g n))
[PROOF STEP]
by(simp add: fun_eq_iff TER_g' RF_circ)
[PROOF STATE]
proof (state)
this:
edge (quotient_web (\<Gamma>' 0) (g' ?n)) = edge (quotient_web (\<Gamma>' ?n) (g ?n))

goal (1 subgoal):
 1. \<not> (\<exists>\<epsilon>>0. \<epsilon> < \<delta> \<and> \<not> hindered (reduce_weight \<Gamma> b \<epsilon>)) \<Longrightarrow> False
[PROOF STEP]
have restrict_curr_g': "f \<upharpoonleft> \<Gamma>' 0 / g' n = f \<upharpoonleft> \<Gamma>' n / g n" for n f
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. f \<upharpoonleft> \<Gamma>' 0 / g' n = f \<upharpoonleft> \<Gamma>' n / g n
[PROOF STEP]
by(simp add: restrict_current_def RF_circ TER_g')
[PROOF STATE]
proof (state)
this:
?f \<upharpoonleft> \<Gamma>' 0 / g' ?n = ?f \<upharpoonleft> \<Gamma>' ?n / g ?n

goal (1 subgoal):
 1. \<not> (\<exists>\<epsilon>>0. \<epsilon> < \<delta> \<and> \<not> hindered (reduce_weight \<Gamma> b \<epsilon>)) \<Longrightarrow> False
[PROOF STEP]
have RF_restrict: "roofed_gen (quotient_web (\<Gamma>' n) (g n)) = roofed_gen (quotient_web (\<Gamma>' 0) (g' n))" for n
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. roofed_gen (quotient_web (\<Gamma>' n) (g n)) = roofed_gen (quotient_web (\<Gamma>' 0) (g' n))
[PROOF STEP]
by(simp add: roofed_def fun_eq_iff edge_restrict_\<Gamma>')
[PROOF STATE]
proof (state)
this:
roofed_gen (quotient_web (\<Gamma>' ?n) (g ?n)) = roofed_gen (quotient_web (\<Gamma>' 0) (g' ?n))

goal (1 subgoal):
 1. \<not> (\<exists>\<epsilon>>0. \<epsilon> < \<delta> \<and> \<not> hindered (reduce_weight \<Gamma> b \<epsilon>)) \<Longrightarrow> False
[PROOF STEP]
have g\<omega>r': "current (quotient_web (\<Gamma>' 0) (g' n)) (g\<omega> \<upharpoonleft> \<Gamma>' 0 / g' n)" for n
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. current (quotient_web (\<Gamma>' 0) (g' n)) (g\<omega> \<upharpoonleft> \<Gamma>' 0 / g' n)
[PROOF STEP]
using w' g\<omega>
[PROOF STATE]
proof (prove)
using this:
wave (\<Gamma>' 0) (g' ?n)
current (\<Gamma>' 0) g\<omega>

goal (1 subgoal):
 1. current (quotient_web (\<Gamma>' 0) (g' n)) (g\<omega> \<upharpoonleft> \<Gamma>' 0 / g' n)
[PROOF STEP]
by(rule current_restrict_current)
[PROOF STATE]
proof (state)
this:
current (quotient_web (\<Gamma>' 0) (g' ?n)) (g\<omega> \<upharpoonleft> \<Gamma>' 0 / g' ?n)

goal (1 subgoal):
 1. \<not> (\<exists>\<epsilon>>0. \<epsilon> < \<delta> \<and> \<not> hindered (reduce_weight \<Gamma> b \<epsilon>)) \<Longrightarrow> False
[PROOF STEP]
have g\<omega>r: "current (quotient_web (\<Gamma>' n) (g n)) (g\<omega> \<upharpoonleft> \<Gamma>' n / g n)" for n
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. current (quotient_web (\<Gamma>' n) (g n)) (g\<omega> \<upharpoonleft> \<Gamma>' n / g n)
[PROOF STEP]
using w g\<omega>'
[PROOF STATE]
proof (prove)
using this:
wave (\<Gamma>' ?n) (g ?n)
current (\<Gamma>' ?n) g\<omega>

goal (1 subgoal):
 1. current (quotient_web (\<Gamma>' n) (g n)) (g\<omega> \<upharpoonleft> \<Gamma>' n / g n)
[PROOF STEP]
by(rule current_restrict_current)
[PROOF STATE]
proof (state)
this:
current (quotient_web (\<Gamma>' ?n) (g ?n)) (g\<omega> \<upharpoonleft> \<Gamma>' ?n / g ?n)

goal (1 subgoal):
 1. \<not> (\<exists>\<epsilon>>0. \<epsilon> < \<delta> \<and> \<not> hindered (reduce_weight \<Gamma> b \<epsilon>)) \<Longrightarrow> False
[PROOF STEP]
have w\<omega>r: "wave (quotient_web (\<Gamma>' n) (g n)) (g\<omega> \<upharpoonleft> \<Gamma>' n / g n)" (is "wave ?\<Gamma>' ?g\<omega>") for n
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. wave (quotient_web (\<Gamma>' n) (g n)) (g\<omega> \<upharpoonleft> \<Gamma>' n / g n)
[PROOF STEP]
proof
[PROOF STATE]
proof (state)
goal (2 subgoals):
 1. separating (quotient_web (\<Gamma>' n) (g n)) (TER\<^bsub>quotient_web (\<Gamma>' n) (g n)\<^esub> (g\<omega> \<upharpoonleft> \<Gamma>' n / g n))
 2. \<And>x. x \<notin> RF\<^bsub>quotient_web (\<Gamma>' n) (g n)\<^esub> (TER\<^bsub>quotient_web (\<Gamma>' n) (g n)\<^esub> (g\<omega> \<upharpoonleft> \<Gamma>' n / g n)) \<Longrightarrow> d_OUT (g\<omega> \<upharpoonleft> \<Gamma>' n / g n) x = 0
[PROOF STEP]
have *: "wave (quotient_web (\<Gamma>' 0) (g' n)) (g\<omega> \<upharpoonleft> \<Gamma>' 0 / g' n)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. wave (quotient_web (\<Gamma>' 0) (g' n)) (g\<omega> \<upharpoonleft> \<Gamma>' 0 / g' n)
[PROOF STEP]
using g' w' g\<omega> w\<omega>
[PROOF STATE]
proof (prove)
using this:
current (\<Gamma>' 0) (g' ?n)
wave (\<Gamma>' 0) (g' ?n)
current (\<Gamma>' 0) g\<omega>
wave (\<Gamma>' 0) g\<omega>

goal (1 subgoal):
 1. wave (quotient_web (\<Gamma>' 0) (g' n)) (g\<omega> \<upharpoonleft> \<Gamma>' 0 / g' n)
[PROOF STEP]
by(rule wave_restrict_current)
[PROOF STATE]
proof (state)
this:
wave (quotient_web (\<Gamma>' 0) (g' n)) (g\<omega> \<upharpoonleft> \<Gamma>' 0 / g' n)

goal (2 subgoals):
 1. separating (quotient_web (\<Gamma>' n) (g n)) (TER\<^bsub>quotient_web (\<Gamma>' n) (g n)\<^esub> (g\<omega> \<upharpoonleft> \<Gamma>' n / g n))
 2. \<And>x. x \<notin> RF\<^bsub>quotient_web (\<Gamma>' n) (g n)\<^esub> (TER\<^bsub>quotient_web (\<Gamma>' n) (g n)\<^esub> (g\<omega> \<upharpoonleft> \<Gamma>' n / g n)) \<Longrightarrow> d_OUT (g\<omega> \<upharpoonleft> \<Gamma>' n / g n) x = 0
[PROOF STEP]
have "d_IN (g\<omega> \<upharpoonleft> \<Gamma>' n / g n) b = 0"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. d_IN (g\<omega> \<upharpoonleft> \<Gamma>' n / g n) b = 0
[PROOF STEP]
by(rule d_IN_restrict_current_outside roofed_greaterI b_TER)+
[PROOF STATE]
proof (state)
this:
d_IN (g\<omega> \<upharpoonleft> \<Gamma>' n / g n) b = 0

goal (2 subgoals):
 1. separating (quotient_web (\<Gamma>' n) (g n)) (TER\<^bsub>quotient_web (\<Gamma>' n) (g n)\<^esub> (g\<omega> \<upharpoonleft> \<Gamma>' n / g n))
 2. \<And>x. x \<notin> RF\<^bsub>quotient_web (\<Gamma>' n) (g n)\<^esub> (TER\<^bsub>quotient_web (\<Gamma>' n) (g n)\<^esub> (g\<omega> \<upharpoonleft> \<Gamma>' n / g n)) \<Longrightarrow> d_OUT (g\<omega> \<upharpoonleft> \<Gamma>' n / g n) x = 0
[PROOF STEP]
hence SAT_subset: "SAT (quotient_web (\<Gamma>' 0) (g' n)) (g\<omega> \<upharpoonleft> \<Gamma>' n / g n) \<subseteq> SAT ?\<Gamma>' (g\<omega> \<upharpoonleft> \<Gamma>' n / g n)"
[PROOF STATE]
proof (prove)
using this:
d_IN (g\<omega> \<upharpoonleft> \<Gamma>' n / g n) b = 0

goal (1 subgoal):
 1. SAT (quotient_web (\<Gamma>' 0) (g' n)) (g\<omega> \<upharpoonleft> \<Gamma>' n / g n) \<subseteq> SAT (quotient_web (\<Gamma>' n) (g n)) (g\<omega> \<upharpoonleft> \<Gamma>' n / g n)
[PROOF STEP]
using b_TER[of n] wb_pos
[PROOF STATE]
proof (prove)
using this:
d_IN (g\<omega> \<upharpoonleft> \<Gamma>' n / g n) b = 0
b \<in> TER\<^bsub>\<Gamma>' n\<^esub> (g n)
0 < wb

goal (1 subgoal):
 1. SAT (quotient_web (\<Gamma>' 0) (g' n)) (g\<omega> \<upharpoonleft> \<Gamma>' n / g n) \<subseteq> SAT (quotient_web (\<Gamma>' n) (g n)) (g\<omega> \<upharpoonleft> \<Gamma>' n / g n)
[PROOF STEP]
by(auto simp add: SAT.simps TER_g' RF_circ wb_conv \<epsilon>_def field_simps
                        ennreal_minus_if split: if_split_asm)
[PROOF STATE]
proof (state)
this:
SAT (quotient_web (\<Gamma>' 0) (g' n)) (g\<omega> \<upharpoonleft> \<Gamma>' n / g n) \<subseteq> SAT (quotient_web (\<Gamma>' n) (g n)) (g\<omega> \<upharpoonleft> \<Gamma>' n / g n)

goal (2 subgoals):
 1. separating (quotient_web (\<Gamma>' n) (g n)) (TER\<^bsub>quotient_web (\<Gamma>' n) (g n)\<^esub> (g\<omega> \<upharpoonleft> \<Gamma>' n / g n))
 2. \<And>x. x \<notin> RF\<^bsub>quotient_web (\<Gamma>' n) (g n)\<^esub> (TER\<^bsub>quotient_web (\<Gamma>' n) (g n)\<^esub> (g\<omega> \<upharpoonleft> \<Gamma>' n / g n)) \<Longrightarrow> d_OUT (g\<omega> \<upharpoonleft> \<Gamma>' n / g n) x = 0
[PROOF STEP]
hence TER_subset: "TER\<^bsub>quotient_web (\<Gamma>' 0) (g' n)\<^esub> (g\<omega> \<upharpoonleft> \<Gamma>' n / g n) \<subseteq> TER\<^bsub>?\<Gamma>'\<^esub> (g\<omega> \<upharpoonleft> \<Gamma>' n / g n)"
[PROOF STATE]
proof (prove)
using this:
SAT (quotient_web (\<Gamma>' 0) (g' n)) (g\<omega> \<upharpoonleft> \<Gamma>' n / g n) \<subseteq> SAT (quotient_web (\<Gamma>' n) (g n)) (g\<omega> \<upharpoonleft> \<Gamma>' n / g n)

goal (1 subgoal):
 1. TER\<^bsub>quotient_web (\<Gamma>' 0) (g' n)\<^esub> (g\<omega> \<upharpoonleft> \<Gamma>' n / g n) \<subseteq> TER\<^bsub>quotient_web (\<Gamma>' n) (g n)\<^esub> (g\<omega> \<upharpoonleft> \<Gamma>' n / g n)
[PROOF STEP]
using SINK_g'
[PROOF STATE]
proof (prove)
using this:
SAT (quotient_web (\<Gamma>' 0) (g' n)) (g\<omega> \<upharpoonleft> \<Gamma>' n / g n) \<subseteq> SAT (quotient_web (\<Gamma>' n) (g n)) (g\<omega> \<upharpoonleft> \<Gamma>' n / g n)
SINK (g ?n) = SINK (g' ?n)

goal (1 subgoal):
 1. TER\<^bsub>quotient_web (\<Gamma>' 0) (g' n)\<^esub> (g\<omega> \<upharpoonleft> \<Gamma>' n / g n) \<subseteq> TER\<^bsub>quotient_web (\<Gamma>' n) (g n)\<^esub> (g\<omega> \<upharpoonleft> \<Gamma>' n / g n)
[PROOF STEP]
by(auto simp add: restrict_curr_g')
[PROOF STATE]
proof (state)
this:
TER\<^bsub>quotient_web (\<Gamma>' 0) (g' n)\<^esub> (g\<omega> \<upharpoonleft> \<Gamma>' n / g n) \<subseteq> TER\<^bsub>quotient_web (\<Gamma>' n) (g n)\<^esub> (g\<omega> \<upharpoonleft> \<Gamma>' n / g n)

goal (2 subgoals):
 1. separating (quotient_web (\<Gamma>' n) (g n)) (TER\<^bsub>quotient_web (\<Gamma>' n) (g n)\<^esub> (g\<omega> \<upharpoonleft> \<Gamma>' n / g n))
 2. \<And>x. x \<notin> RF\<^bsub>quotient_web (\<Gamma>' n) (g n)\<^esub> (TER\<^bsub>quotient_web (\<Gamma>' n) (g n)\<^esub> (g\<omega> \<upharpoonleft> \<Gamma>' n / g n)) \<Longrightarrow> d_OUT (g\<omega> \<upharpoonleft> \<Gamma>' n / g n) x = 0
[PROOF STEP]
show "separating ?\<Gamma>' (TER\<^bsub>?\<Gamma>'\<^esub> ?g\<omega>)" (is "separating _ ?TER")
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. separating (quotient_web (\<Gamma>' n) (g n)) (TER\<^bsub>quotient_web (\<Gamma>' n) (g n)\<^esub> (g\<omega> \<upharpoonleft> \<Gamma>' n / g n))
[PROOF STEP]
proof
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. \<And>x y p. \<lbrakk>x \<in> A (quotient_web (\<Gamma>' n) (g n)); y \<in> B (quotient_web (\<Gamma>' n) (g n)); path (quotient_web (\<Gamma>' n) (g n)) x p y\<rbrakk> \<Longrightarrow> (\<exists>z\<in>set p. z \<in> TER\<^bsub>quotient_web (\<Gamma>' n) (g n)\<^esub> (g\<omega> \<upharpoonleft> \<Gamma>' n / g n)) \<or> x \<in> TER\<^bsub>quotient_web (\<Gamma>' n) (g n)\<^esub> (g\<omega> \<upharpoonleft> \<Gamma>' n / g n)
[PROOF STEP]
fix x y p
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. \<And>x y p. \<lbrakk>x \<in> A (quotient_web (\<Gamma>' n) (g n)); y \<in> B (quotient_web (\<Gamma>' n) (g n)); path (quotient_web (\<Gamma>' n) (g n)) x p y\<rbrakk> \<Longrightarrow> (\<exists>z\<in>set p. z \<in> TER\<^bsub>quotient_web (\<Gamma>' n) (g n)\<^esub> (g\<omega> \<upharpoonleft> \<Gamma>' n / g n)) \<or> x \<in> TER\<^bsub>quotient_web (\<Gamma>' n) (g n)\<^esub> (g\<omega> \<upharpoonleft> \<Gamma>' n / g n)
[PROOF STEP]
assume xy: "x \<in> A ?\<Gamma>'" "y \<in> B ?\<Gamma>'" and p: "path ?\<Gamma>' x p y"
[PROOF STATE]
proof (state)
this:
x \<in> A (quotient_web (\<Gamma>' n) (g n))
y \<in> B (quotient_web (\<Gamma>' n) (g n))
path (quotient_web (\<Gamma>' n) (g n)) x p y

goal (1 subgoal):
 1. \<And>x y p. \<lbrakk>x \<in> A (quotient_web (\<Gamma>' n) (g n)); y \<in> B (quotient_web (\<Gamma>' n) (g n)); path (quotient_web (\<Gamma>' n) (g n)) x p y\<rbrakk> \<Longrightarrow> (\<exists>z\<in>set p. z \<in> TER\<^bsub>quotient_web (\<Gamma>' n) (g n)\<^esub> (g\<omega> \<upharpoonleft> \<Gamma>' n / g n)) \<or> x \<in> TER\<^bsub>quotient_web (\<Gamma>' n) (g n)\<^esub> (g\<omega> \<upharpoonleft> \<Gamma>' n / g n)
[PROOF STEP]
from p
[PROOF STATE]
proof (chain)
picking this:
path (quotient_web (\<Gamma>' n) (g n)) x p y
[PROOF STEP]
have p': "path (quotient_web (\<Gamma>' 0) (g' n)) x p y"
[PROOF STATE]
proof (prove)
using this:
path (quotient_web (\<Gamma>' n) (g n)) x p y

goal (1 subgoal):
 1. path (quotient_web (\<Gamma>' 0) (g' n)) x p y
[PROOF STEP]
by(simp add: edge_restrict_\<Gamma>')
[PROOF STATE]
proof (state)
this:
path (quotient_web (\<Gamma>' 0) (g' n)) x p y

goal (1 subgoal):
 1. \<And>x y p. \<lbrakk>x \<in> A (quotient_web (\<Gamma>' n) (g n)); y \<in> B (quotient_web (\<Gamma>' n) (g n)); path (quotient_web (\<Gamma>' n) (g n)) x p y\<rbrakk> \<Longrightarrow> (\<exists>z\<in>set p. z \<in> TER\<^bsub>quotient_web (\<Gamma>' n) (g n)\<^esub> (g\<omega> \<upharpoonleft> \<Gamma>' n / g n)) \<or> x \<in> TER\<^bsub>quotient_web (\<Gamma>' n) (g n)\<^esub> (g\<omega> \<upharpoonleft> \<Gamma>' n / g n)
[PROOF STEP]
with waveD_separating[OF *, THEN separatingD, simplified, OF p'] TER_g'[of n] SINK_g' SAT_g' restrict_curr_g' SAT_subset xy
[PROOF STATE]
proof (chain)
picking this:
\<lbrakk>x \<in> SAT (\<Gamma>' 0) (g' n) \<and> x \<in> SINK (g' n) \<and> essential \<Gamma> (B \<Gamma>) (TER\<^bsub>\<Gamma>' 0\<^esub> (g' n)) x \<and> (x \<in> B \<Gamma> \<longrightarrow> x \<in> A \<Gamma>); y \<in> B \<Gamma>\<rbrakk> \<Longrightarrow> (\<exists>z\<in>set p. z \<in> SAT (quotient_web (\<Gamma>' 0) (g' n)) (g\<omega> \<upharpoonleft> \<Gamma>' 0 / g' n) \<and> z \<in> SINK (g\<omega> \<upharpoonleft> \<Gamma>' 0 / g' n)) \<or> x \<in> SAT (quotient_web (\<Gamma>' 0) (g' n)) (g\<omega> \<upharpoonleft> \<Gamma>' 0 / g' n) \<and> x \<in> SINK (g\<omega> \<upharpoonleft> \<Gamma>' 0 / g' n)
TER\<^bsub>\<Gamma>' n\<^esub> (g n) = TER\<^bsub>\<Gamma>' 0\<^esub> (g' n)
SINK (g ?n) = SINK (g' ?n)
SAT (\<Gamma>' ?n) (g ?n) = SAT (\<Gamma>' 0) (g' ?n)
?f \<upharpoonleft> \<Gamma>' 0 / g' ?n = ?f \<upharpoonleft> \<Gamma>' ?n / g ?n
SAT (quotient_web (\<Gamma>' 0) (g' n)) (g\<omega> \<upharpoonleft> \<Gamma>' n / g n) \<subseteq> SAT (quotient_web (\<Gamma>' n) (g n)) (g\<omega> \<upharpoonleft> \<Gamma>' n / g n)
x \<in> A (quotient_web (\<Gamma>' n) (g n))
y \<in> B (quotient_web (\<Gamma>' n) (g n))
path (quotient_web (\<Gamma>' 0) (g' n)) x p y
[PROOF STEP]
show "(\<exists>z\<in>set p. z \<in> ?TER) \<or> x \<in> ?TER"
[PROOF STATE]
proof (prove)
using this:
\<lbrakk>x \<in> SAT (\<Gamma>' 0) (g' n) \<and> x \<in> SINK (g' n) \<and> essential \<Gamma> (B \<Gamma>) (TER\<^bsub>\<Gamma>' 0\<^esub> (g' n)) x \<and> (x \<in> B \<Gamma> \<longrightarrow> x \<in> A \<Gamma>); y \<in> B \<Gamma>\<rbrakk> \<Longrightarrow> (\<exists>z\<in>set p. z \<in> SAT (quotient_web (\<Gamma>' 0) (g' n)) (g\<omega> \<upharpoonleft> \<Gamma>' 0 / g' n) \<and> z \<in> SINK (g\<omega> \<upharpoonleft> \<Gamma>' 0 / g' n)) \<or> x \<in> SAT (quotient_web (\<Gamma>' 0) (g' n)) (g\<omega> \<upharpoonleft> \<Gamma>' 0 / g' n) \<and> x \<in> SINK (g\<omega> \<upharpoonleft> \<Gamma>' 0 / g' n)
TER\<^bsub>\<Gamma>' n\<^esub> (g n) = TER\<^bsub>\<Gamma>' 0\<^esub> (g' n)
SINK (g ?n) = SINK (g' ?n)
SAT (\<Gamma>' ?n) (g ?n) = SAT (\<Gamma>' 0) (g' ?n)
?f \<upharpoonleft> \<Gamma>' 0 / g' ?n = ?f \<upharpoonleft> \<Gamma>' ?n / g ?n
SAT (quotient_web (\<Gamma>' 0) (g' n)) (g\<omega> \<upharpoonleft> \<Gamma>' n / g n) \<subseteq> SAT (quotient_web (\<Gamma>' n) (g n)) (g\<omega> \<upharpoonleft> \<Gamma>' n / g n)
x \<in> A (quotient_web (\<Gamma>' n) (g n))
y \<in> B (quotient_web (\<Gamma>' n) (g n))
path (quotient_web (\<Gamma>' 0) (g' n)) x p y

goal (1 subgoal):
 1. (\<exists>z\<in>set p. z \<in> TER\<^bsub>quotient_web (\<Gamma>' n) (g n)\<^esub> (g\<omega> \<upharpoonleft> \<Gamma>' n / g n)) \<or> x \<in> TER\<^bsub>quotient_web (\<Gamma>' n) (g n)\<^esub> (g\<omega> \<upharpoonleft> \<Gamma>' n / g n)
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
(\<exists>z\<in>set p. z \<in> TER\<^bsub>quotient_web (\<Gamma>' n) (g n)\<^esub> (g\<omega> \<upharpoonleft> \<Gamma>' n / g n)) \<or> x \<in> TER\<^bsub>quotient_web (\<Gamma>' n) (g n)\<^esub> (g\<omega> \<upharpoonleft> \<Gamma>' n / g n)

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
separating (quotient_web (\<Gamma>' n) (g n)) (TER\<^bsub>quotient_web (\<Gamma>' n) (g n)\<^esub> (g\<omega> \<upharpoonleft> \<Gamma>' n / g n))

goal (1 subgoal):
 1. \<And>x. x \<notin> RF\<^bsub>quotient_web (\<Gamma>' n) (g n)\<^esub> (TER\<^bsub>quotient_web (\<Gamma>' n) (g n)\<^esub> (g\<omega> \<upharpoonleft> \<Gamma>' n / g n)) \<Longrightarrow> d_OUT (g\<omega> \<upharpoonleft> \<Gamma>' n / g n) x = 0
[PROOF STEP]
show "d_OUT (g\<omega> \<upharpoonleft> \<Gamma>' n / g n) x = 0" if "x \<notin> RF\<^bsub>?\<Gamma>'\<^esub> ?TER" for x
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. d_OUT (g\<omega> \<upharpoonleft> \<Gamma>' n / g n) x = 0
[PROOF STEP]
unfolding restrict_curr_g'[symmetric]
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. d_OUT (g\<omega> \<upharpoonleft> \<Gamma>' 0 / g' n) x = 0
[PROOF STEP]
using TER_subset that
[PROOF STATE]
proof (prove)
using this:
TER\<^bsub>quotient_web (\<Gamma>' 0) (g' n)\<^esub> (g\<omega> \<upharpoonleft> \<Gamma>' n / g n) \<subseteq> TER\<^bsub>quotient_web (\<Gamma>' n) (g n)\<^esub> (g\<omega> \<upharpoonleft> \<Gamma>' n / g n)
x \<notin> RF\<^bsub>quotient_web (\<Gamma>' n) (g n)\<^esub> (TER\<^bsub>quotient_web (\<Gamma>' n) (g n)\<^esub> (g\<omega> \<upharpoonleft> \<Gamma>' n / g n))

goal (1 subgoal):
 1. d_OUT (g\<omega> \<upharpoonleft> \<Gamma>' 0 / g' n) x = 0
[PROOF STEP]
by(intro waveD_OUT[OF *])(auto simp add: TER_g' restrict_curr_g' RF_restrict intro: in_roofed_mono)
[PROOF STATE]
proof (state)
this:
?x \<notin> RF\<^bsub>quotient_web (\<Gamma>' n) (g n)\<^esub> (TER\<^bsub>quotient_web (\<Gamma>' n) (g n)\<^esub> (g\<omega> \<upharpoonleft> \<Gamma>' n / g n)) \<Longrightarrow> d_OUT (g\<omega> \<upharpoonleft> \<Gamma>' n / g n) ?x = 0

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
wave (quotient_web (\<Gamma>' ?n) (g ?n)) (g\<omega> \<upharpoonleft> \<Gamma>' ?n / g ?n)

goal (1 subgoal):
 1. \<not> (\<exists>\<epsilon>>0. \<epsilon> < \<delta> \<and> \<not> hindered (reduce_weight \<Gamma> b \<epsilon>)) \<Longrightarrow> False
[PROOF STEP]
have RF_g\<omega>: "RF (TER\<^bsub>\<Gamma>' 0\<^esub> g\<omega>) = RF (\<Union>n. TER\<^bsub>\<Gamma>' 0\<^esub> (g' n))"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. RF (TER\<^bsub>\<Gamma>' 0\<^esub> g\<omega>) = RF (\<Union>n. TER\<^bsub>\<Gamma>' 0\<^esub> (g' n))
[PROOF STEP]
proof -
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. RF (TER\<^bsub>\<Gamma>' 0\<^esub> g\<omega>) = RF (\<Union>n. TER\<^bsub>\<Gamma>' 0\<^esub> (g' n))
[PROOF STEP]
have "RF\<^bsub>\<Gamma>' 0\<^esub> (TER\<^bsub>\<Gamma>' 0\<^esub> g\<omega>) = RF (\<Union>i. TER\<^bsub>\<Gamma>' 0\<^esub> (f i))"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. RF\<^bsub>\<Gamma>' 0\<^esub> (TER\<^bsub>\<Gamma>' 0\<^esub> g\<omega>) = RF (\<Union>i. TER\<^bsub>\<Gamma>' 0\<^esub> (f i))
[PROOF STEP]
unfolding g\<omega>_def
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. RF\<^bsub>\<Gamma>' 0\<^esub> (TER\<^bsub>\<Gamma>' 0\<^esub> (\<Squnion> range f)) = RF (\<Union>i. TER\<^bsub>\<Gamma>' 0\<^esub> (f i))
[PROOF STEP]
by(subst RF_TER_Sup[OF _ _ chain_f])(auto simp add: f fw supp_f)
[PROOF STATE]
proof (state)
this:
RF\<^bsub>\<Gamma>' 0\<^esub> (TER\<^bsub>\<Gamma>' 0\<^esub> g\<omega>) = RF (\<Union>i. TER\<^bsub>\<Gamma>' 0\<^esub> (f i))

goal (1 subgoal):
 1. RF (TER\<^bsub>\<Gamma>' 0\<^esub> g\<omega>) = RF (\<Union>n. TER\<^bsub>\<Gamma>' 0\<^esub> (g' n))
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
RF\<^bsub>\<Gamma>' 0\<^esub> (TER\<^bsub>\<Gamma>' 0\<^esub> g\<omega>) = RF (\<Union>i. TER\<^bsub>\<Gamma>' 0\<^esub> (f i))

goal (1 subgoal):
 1. RF (TER\<^bsub>\<Gamma>' 0\<^esub> g\<omega>) = RF (\<Union>n. TER\<^bsub>\<Gamma>' 0\<^esub> (g' n))
[PROOF STEP]
have "\<dots> = RF (\<Union>i. RF (TER\<^bsub>\<Gamma>' 0\<^esub> (f i)))"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. RF (\<Union>i. TER\<^bsub>\<Gamma>' 0\<^esub> (f i)) = RF (\<Union>i. RF (TER\<^bsub>\<Gamma>' 0\<^esub> (f i)))
[PROOF STEP]
by(simp add: roofed_UN)
[PROOF STATE]
proof (state)
this:
RF (\<Union>i. TER\<^bsub>\<Gamma>' 0\<^esub> (f i)) = RF (\<Union>i. RF (TER\<^bsub>\<Gamma>' 0\<^esub> (f i)))

goal (1 subgoal):
 1. RF (TER\<^bsub>\<Gamma>' 0\<^esub> g\<omega>) = RF (\<Union>n. TER\<^bsub>\<Gamma>' 0\<^esub> (g' n))
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
RF (\<Union>i. TER\<^bsub>\<Gamma>' 0\<^esub> (f i)) = RF (\<Union>i. RF (TER\<^bsub>\<Gamma>' 0\<^esub> (f i)))

goal (1 subgoal):
 1. RF (TER\<^bsub>\<Gamma>' 0\<^esub> g\<omega>) = RF (\<Union>n. TER\<^bsub>\<Gamma>' 0\<^esub> (g' n))
[PROOF STEP]
have "\<dots> = RF (\<Union>i. \<Union>j\<le>i. TER\<^bsub>\<Gamma>' 0\<^esub> (g' j))"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. RF (\<Union>i. RF (TER\<^bsub>\<Gamma>' 0\<^esub> (f i))) = RF (\<Union>i. \<Union>j\<le>i. TER\<^bsub>\<Gamma>' 0\<^esub> (g' j))
[PROOF STEP]
unfolding RF_f roofed_UN
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. RF (\<Union>i. \<Union>i\<le>i. TER\<^bsub>\<Gamma>' 0\<^esub> (g' i)) = RF (\<Union>i. \<Union>j\<le>i. TER\<^bsub>\<Gamma>' 0\<^esub> (g' j))
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
RF (\<Union>i. RF (TER\<^bsub>\<Gamma>' 0\<^esub> (f i))) = RF (\<Union>i. \<Union>j\<le>i. TER\<^bsub>\<Gamma>' 0\<^esub> (g' j))

goal (1 subgoal):
 1. RF (TER\<^bsub>\<Gamma>' 0\<^esub> g\<omega>) = RF (\<Union>n. TER\<^bsub>\<Gamma>' 0\<^esub> (g' n))
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
RF (\<Union>i. RF (TER\<^bsub>\<Gamma>' 0\<^esub> (f i))) = RF (\<Union>i. \<Union>j\<le>i. TER\<^bsub>\<Gamma>' 0\<^esub> (g' j))

goal (1 subgoal):
 1. RF (TER\<^bsub>\<Gamma>' 0\<^esub> g\<omega>) = RF (\<Union>n. TER\<^bsub>\<Gamma>' 0\<^esub> (g' n))
[PROOF STEP]
have "(\<Union>i. \<Union>j\<le>i. TER\<^bsub>\<Gamma>' 0\<^esub> (g' j)) = (\<Union>i. TER\<^bsub>\<Gamma>' 0\<^esub> (g' i))"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (\<Union>i. \<Union>j\<le>i. TER\<^bsub>\<Gamma>' 0\<^esub> (g' j)) = (\<Union>i. TER\<^bsub>\<Gamma>' 0\<^esub> (g' i))
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
(\<Union>i. \<Union>j\<le>i. TER\<^bsub>\<Gamma>' 0\<^esub> (g' j)) = (\<Union>i. TER\<^bsub>\<Gamma>' 0\<^esub> (g' i))

goal (1 subgoal):
 1. RF (TER\<^bsub>\<Gamma>' 0\<^esub> g\<omega>) = RF (\<Union>n. TER\<^bsub>\<Gamma>' 0\<^esub> (g' n))
[PROOF STEP]
finally
[PROOF STATE]
proof (chain)
picking this:
RF\<^bsub>\<Gamma>' 0\<^esub> (TER\<^bsub>\<Gamma>' 0\<^esub> g\<omega>) = RF (\<Union>i. TER\<^bsub>\<Gamma>' 0\<^esub> (g' i))
[PROOF STEP]
show ?thesis
[PROOF STATE]
proof (prove)
using this:
RF\<^bsub>\<Gamma>' 0\<^esub> (TER\<^bsub>\<Gamma>' 0\<^esub> g\<omega>) = RF (\<Union>i. TER\<^bsub>\<Gamma>' 0\<^esub> (g' i))

goal (1 subgoal):
 1. RF (TER\<^bsub>\<Gamma>' 0\<^esub> g\<omega>) = RF (\<Union>n. TER\<^bsub>\<Gamma>' 0\<^esub> (g' n))
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
RF (TER\<^bsub>\<Gamma>' 0\<^esub> g\<omega>) = RF (\<Union>n. TER\<^bsub>\<Gamma>' 0\<^esub> (g' n))

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
RF (TER\<^bsub>\<Gamma>' 0\<^esub> g\<omega>) = RF (\<Union>n. TER\<^bsub>\<Gamma>' 0\<^esub> (g' n))

goal (1 subgoal):
 1. \<not> (\<exists>\<epsilon>>0. \<epsilon> < \<delta> \<and> \<not> hindered (reduce_weight \<Gamma> b \<epsilon>)) \<Longrightarrow> False
[PROOF STEP]
have SAT_plus_\<omega>: "SAT (\<Gamma>' n) (g n \<frown>\<^bsub>\<Gamma>' n\<^esub> g\<omega>) = SAT (\<Gamma>' 0) (g' n \<frown>\<^bsub>\<Gamma>' 0\<^esub> g\<omega>)" for n
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. SAT (\<Gamma>' n) (g n \<frown>\<^bsub>\<Gamma>' n\<^esub> g\<omega>) = SAT (\<Gamma>' 0) (g' n \<frown>\<^bsub>\<Gamma>' 0\<^esub> g\<omega>)
[PROOF STEP]
apply(intro set_eqI)
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<And>x. (x \<in> SAT (\<Gamma>' n) (g n \<frown>\<^bsub>\<Gamma>' n\<^esub> g\<omega>)) = (x \<in> SAT (\<Gamma>' 0) (g' n \<frown>\<^bsub>\<Gamma>' 0\<^esub> g\<omega>))
[PROOF STEP]
apply(simp add: SAT.simps IN_plus_current[OF g w g\<omega>r] IN_plus_current[OF g' w' g\<omega>r'] TER_g')
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<And>x. (x = b \<longrightarrow> (b \<in> RF (TER\<^bsub>\<Gamma>' 0\<^esub> (g' n)) \<longrightarrow> (b \<in> A \<Gamma> \<or> weight \<Gamma> b - ennreal (\<epsilon> n) \<le> d_IN (g n) b) = (b \<in> A \<Gamma> \<or> weight \<Gamma> b - ennreal (\<epsilon> 0) \<le> d_IN (g' n) b)) \<and> (b \<notin> RF (TER\<^bsub>\<Gamma>' 0\<^esub> (g' n)) \<longrightarrow> (b \<in> A \<Gamma> \<or> weight \<Gamma> b - ennreal (\<epsilon> n) \<le> d_IN (g\<omega> \<upharpoonleft> \<Gamma>' n / g n) b) = (b \<in> A \<Gamma> \<or> weight \<Gamma> b - ennreal (\<epsilon> 0) \<le> d_IN (g\<omega> \<upharpoonleft> \<Gamma>' 0 / g' n) b))) \<and> (x \<noteq> b \<longrightarrow> (x \<in> RF (TER\<^bsub>\<Gamma>' 0\<^esub> (g' n)) \<longrightarrow> (x \<in> A \<Gamma> \<or> weight \<Gamma> x \<le> d_IN (g n) x) = (x \<in> A \<Gamma> \<or> weight \<Gamma> x \<le> d_IN (g' n) x)) \<and> (x \<notin> RF (TER\<^bsub>\<Gamma>' 0\<^esub> (g' n)) \<longrightarrow> (x \<in> A \<Gamma> \<or> weight \<Gamma> x \<le> d_IN (g\<omega> \<upharpoonleft> \<Gamma>' n / g n) x) = (x \<in> A \<Gamma> \<or> weight \<Gamma> x \<le> d_IN (g\<omega> \<upharpoonleft> \<Gamma>' 0 / g' n) x)))
[PROOF STEP]
apply(cases "d_IN (g\<omega> \<upharpoonleft> \<Gamma>' n / g n) b")
[PROOF STATE]
proof (prove)
goal (2 subgoals):
 1. \<And>x r. \<lbrakk>0 \<le> r; d_IN (g\<omega> \<upharpoonleft> \<Gamma>' n / g n) b = ennreal r\<rbrakk> \<Longrightarrow> (x = b \<longrightarrow> (b \<in> RF (TER\<^bsub>\<Gamma>' 0\<^esub> (g' n)) \<longrightarrow> (b \<in> A \<Gamma> \<or> weight \<Gamma> b - ennreal (\<epsilon> n) \<le> d_IN (g n) b) = (b \<in> A \<Gamma> \<or> weight \<Gamma> b - ennreal (\<epsilon> 0) \<le> d_IN (g' n) b)) \<and> (b \<notin> RF (TER\<^bsub>\<Gamma>' 0\<^esub> (g' n)) \<longrightarrow> (b \<in> A \<Gamma> \<or> weight \<Gamma> b - ennreal (\<epsilon> n) \<le> d_IN (g\<omega> \<upharpoonleft> \<Gamma>' n / g n) b) = (b \<in> A \<Gamma> \<or> weight \<Gamma> b - ennreal (\<epsilon> 0) \<le> d_IN (g\<omega> \<upharpoonleft> \<Gamma>' 0 / g' n) b))) \<and> (x \<noteq> b \<longrightarrow> (x \<in> RF (TER\<^bsub>\<Gamma>' 0\<^esub> (g' n)) \<longrightarrow> (x \<in> A \<Gamma> \<or> weight \<Gamma> x \<le> d_IN (g n) x) = (x \<in> A \<Gamma> \<or> weight \<Gamma> x \<le> d_IN (g' n) x)) \<and> (x \<notin> RF (TER\<^bsub>\<Gamma>' 0\<^esub> (g' n)) \<longrightarrow> (x \<in> A \<Gamma> \<or> weight \<Gamma> x \<le> d_IN (g\<omega> \<upharpoonleft> \<Gamma>' n / g n) x) = (x \<in> A \<Gamma> \<or> weight \<Gamma> x \<le> d_IN (g\<omega> \<upharpoonleft> \<Gamma>' 0 / g' n) x)))
 2. \<And>x. d_IN (g\<omega> \<upharpoonleft> \<Gamma>' n / g n) b = \<top> \<Longrightarrow> (x = b \<longrightarrow> (b \<in> RF (TER\<^bsub>\<Gamma>' 0\<^esub> (g' n)) \<longrightarrow> (b \<in> A \<Gamma> \<or> weight \<Gamma> b - ennreal (\<epsilon> n) \<le> d_IN (g n) b) = (b \<in> A \<Gamma> \<or> weight \<Gamma> b - ennreal (\<epsilon> 0) \<le> d_IN (g' n) b)) \<and> (b \<notin> RF (TER\<^bsub>\<Gamma>' 0\<^esub> (g' n)) \<longrightarrow> (b \<in> A \<Gamma> \<or> weight \<Gamma> b - ennreal (\<epsilon> n) \<le> d_IN (g\<omega> \<upharpoonleft> \<Gamma>' n / g n) b) = (b \<in> A \<Gamma> \<or> weight \<Gamma> b - ennreal (\<epsilon> 0) \<le> d_IN (g\<omega> \<upharpoonleft> \<Gamma>' 0 / g' n) b))) \<and> (x \<noteq> b \<longrightarrow> (x \<in> RF (TER\<^bsub>\<Gamma>' 0\<^esub> (g' n)) \<longrightarrow> (x \<in> A \<Gamma> \<or> weight \<Gamma> x \<le> d_IN (g n) x) = (x \<in> A \<Gamma> \<or> weight \<Gamma> x \<le> d_IN (g' n) x)) \<and> (x \<notin> RF (TER\<^bsub>\<Gamma>' 0\<^esub> (g' n)) \<longrightarrow> (x \<in> A \<Gamma> \<or> weight \<Gamma> x \<le> d_IN (g\<omega> \<upharpoonleft> \<Gamma>' n / g n) x) = (x \<in> A \<Gamma> \<or> weight \<Gamma> x \<le> d_IN (g\<omega> \<upharpoonleft> \<Gamma>' 0 / g' n) x)))
[PROOF STEP]
apply(auto simp add: SAT.simps wb_conv d_IN_plus_web IN_g')
[PROOF STATE]
proof (prove)
goal (9 subgoals):
 1. \<And>r. \<lbrakk>0 \<le> r; d_IN (g\<omega> \<upharpoonleft> \<Gamma>' n / g n) b = ennreal r; b \<in> RF (TER\<^bsub>\<Gamma>' 0\<^esub> (g' n)); \<not> ennreal wb - ennreal (\<epsilon> n) \<le> d_IN (g n) b\<rbrakk> \<Longrightarrow> b \<in> A \<Gamma>
 2. \<And>r. \<lbrakk>0 \<le> r; d_IN (g\<omega> \<upharpoonleft> \<Gamma>' n / g n) b = ennreal r; b \<notin> RF (TER\<^bsub>\<Gamma>' 0\<^esub> (g' n)); \<not> ennreal wb - ennreal (\<epsilon> 0) \<le> d_IN (g\<omega> \<upharpoonleft> \<Gamma>' 0 / g' n) b; ennreal wb - ennreal (\<epsilon> n) \<le> ennreal r\<rbrakk> \<Longrightarrow> b \<in> A \<Gamma>
 3. \<And>r. \<lbrakk>0 \<le> r; d_IN (g\<omega> \<upharpoonleft> \<Gamma>' n / g n) b = ennreal r; b \<notin> RF (TER\<^bsub>\<Gamma>' 0\<^esub> (g' n)); \<not> ennreal wb - ennreal (\<epsilon> n) \<le> ennreal r; ennreal wb - ennreal (\<epsilon> 0) \<le> d_IN (g\<omega> \<upharpoonleft> \<Gamma>' 0 / g' n) b\<rbrakk> \<Longrightarrow> b \<in> A \<Gamma>
 4. \<And>x r. \<lbrakk>0 \<le> r; d_IN (g\<omega> \<upharpoonleft> \<Gamma>' n / g n) b = ennreal r; x \<noteq> b; x \<notin> RF (TER\<^bsub>\<Gamma>' 0\<^esub> (g' n)); \<not> weight \<Gamma> x \<le> d_IN (g\<omega> \<upharpoonleft> \<Gamma>' 0 / g' n) x; weight \<Gamma> x \<le> d_IN (g\<omega> \<upharpoonleft> \<Gamma>' n / g n) x\<rbrakk> \<Longrightarrow> x \<in> A \<Gamma>
 5. \<And>x r. \<lbrakk>0 \<le> r; d_IN (g\<omega> \<upharpoonleft> \<Gamma>' n / g n) b = ennreal r; x \<noteq> b; x \<notin> RF (TER\<^bsub>\<Gamma>' 0\<^esub> (g' n)); \<not> weight \<Gamma> x \<le> d_IN (g\<omega> \<upharpoonleft> \<Gamma>' n / g n) x; weight \<Gamma> x \<le> d_IN (g\<omega> \<upharpoonleft> \<Gamma>' 0 / g' n) x\<rbrakk> \<Longrightarrow> x \<in> A \<Gamma>
 6. \<lbrakk>d_IN (g\<omega> \<upharpoonleft> \<Gamma>' n / g n) b = \<top>; b \<in> RF (TER\<^bsub>\<Gamma>' 0\<^esub> (g' n)); \<not> ennreal wb - ennreal (\<epsilon> n) \<le> d_IN (g n) b\<rbrakk> \<Longrightarrow> b \<in> A \<Gamma>
 7. \<lbrakk>d_IN (g\<omega> \<upharpoonleft> \<Gamma>' n / g n) b = \<top>; b \<notin> RF (TER\<^bsub>\<Gamma>' 0\<^esub> (g' n)); \<not> ennreal wb - ennreal (\<epsilon> 0) \<le> d_IN (g\<omega> \<upharpoonleft> \<Gamma>' 0 / g' n) b\<rbrakk> \<Longrightarrow> b \<in> A \<Gamma>
 8. \<And>x. \<lbrakk>d_IN (g\<omega> \<upharpoonleft> \<Gamma>' n / g n) b = \<top>; x \<noteq> b; x \<notin> RF (TER\<^bsub>\<Gamma>' 0\<^esub> (g' n)); \<not> weight \<Gamma> x \<le> d_IN (g\<omega> \<upharpoonleft> \<Gamma>' 0 / g' n) x; weight \<Gamma> x \<le> d_IN (g\<omega> \<upharpoonleft> \<Gamma>' n / g n) x\<rbrakk> \<Longrightarrow> x \<in> A \<Gamma>
 9. \<And>x. \<lbrakk>d_IN (g\<omega> \<upharpoonleft> \<Gamma>' n / g n) b = \<top>; x \<noteq> b; x \<notin> RF (TER\<^bsub>\<Gamma>' 0\<^esub> (g' n)); \<not> weight \<Gamma> x \<le> d_IN (g\<omega> \<upharpoonleft> \<Gamma>' n / g n) x; weight \<Gamma> x \<le> d_IN (g\<omega> \<upharpoonleft> \<Gamma>' 0 / g' n) x\<rbrakk> \<Longrightarrow> x \<in> A \<Gamma>
[PROOF STEP]
apply(simp_all add: wb_conv IN_g_b restrict_curr_g' \<epsilon>_def field_simps)
[PROOF STATE]
proof (prove)
goal (2 subgoals):
 1. \<And>r. \<lbrakk>0 \<le> r; d_IN (g\<omega> \<upharpoonleft> \<Gamma>' n / g n) b = ennreal r; b \<notin> RF (TER\<^bsub>\<Gamma>' 0\<^esub> (g' n)); \<not> ennreal wb - ennreal (min \<delta> wb / 2) \<le> ennreal r; ennreal wb - ennreal (min \<delta> wb / (real n + 2)) \<le> ennreal r\<rbrakk> \<Longrightarrow> b \<in> A \<Gamma>
 2. \<And>r. \<lbrakk>0 \<le> r; d_IN (g\<omega> \<upharpoonleft> \<Gamma>' n / g n) b = ennreal r; b \<notin> RF (TER\<^bsub>\<Gamma>' 0\<^esub> (g' n)); \<not> ennreal wb - ennreal (min \<delta> wb / (real n + 2)) \<le> ennreal r; ennreal wb - ennreal (min \<delta> wb / 2) \<le> ennreal r\<rbrakk> \<Longrightarrow> b \<in> A \<Gamma>
[PROOF STEP]
apply(metis TER_g' b_TER roofed_greaterI)+
[PROOF STATE]
proof (prove)
goal:
No subgoals!
[PROOF STEP]
done
[PROOF STATE]
proof (state)
this:
SAT (\<Gamma>' ?n) (g ?n \<frown>\<^bsub>\<Gamma>' ?n\<^esub> g\<omega>) = SAT (\<Gamma>' 0) (g' ?n \<frown>\<^bsub>\<Gamma>' 0\<^esub> g\<omega>)

goal (1 subgoal):
 1. \<not> (\<exists>\<epsilon>>0. \<epsilon> < \<delta> \<and> \<not> hindered (reduce_weight \<Gamma> b \<epsilon>)) \<Longrightarrow> False
[PROOF STEP]
have SINK_plus_\<omega>: "SINK (g n \<frown>\<^bsub>\<Gamma>' n\<^esub> g\<omega>) = SINK (g' n \<frown>\<^bsub>\<Gamma>' 0\<^esub> g\<omega>)" for n
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. SINK (g n \<frown>\<^bsub>\<Gamma>' n\<^esub> g\<omega>) = SINK (g' n \<frown>\<^bsub>\<Gamma>' 0\<^esub> g\<omega>)
[PROOF STEP]
apply(rule set_eqI; simp add: SINK.simps OUT_plus_current[OF g w g\<omega>r] OUT_plus_current[OF g' w'] current_restrict_current[OF w' g\<omega>])
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<And>x. (x \<in> RF\<^sup>\<circ>\<^bsub>\<Gamma>' n\<^esub> (TER\<^bsub>\<Gamma>' n\<^esub> (g n)) \<longrightarrow> (x \<in> RF\<^sup>\<circ>\<^bsub>\<Gamma>' 0\<^esub> (TER\<^bsub>\<Gamma>' 0\<^esub> (g' n)) \<longrightarrow> (d_OUT (g n) x = 0) = (d_OUT (g' n) x = 0)) \<and> (x \<notin> RF\<^sup>\<circ>\<^bsub>\<Gamma>' 0\<^esub> (TER\<^bsub>\<Gamma>' 0\<^esub> (g' n)) \<longrightarrow> (d_OUT (g n) x = 0) = (d_OUT (g\<omega> \<upharpoonleft> \<Gamma>' 0 / g' n) x = 0))) \<and> (x \<notin> RF\<^sup>\<circ>\<^bsub>\<Gamma>' n\<^esub> (TER\<^bsub>\<Gamma>' n\<^esub> (g n)) \<longrightarrow> (x \<in> RF\<^sup>\<circ>\<^bsub>\<Gamma>' 0\<^esub> (TER\<^bsub>\<Gamma>' 0\<^esub> (g' n)) \<longrightarrow> (d_OUT (g\<omega> \<upharpoonleft> \<Gamma>' n / g n) x = 0) = (d_OUT (g' n) x = 0)) \<and> (x \<notin> RF\<^sup>\<circ>\<^bsub>\<Gamma>' 0\<^esub> (TER\<^bsub>\<Gamma>' 0\<^esub> (g' n)) \<longrightarrow> (d_OUT (g\<omega> \<upharpoonleft> \<Gamma>' n / g n) x = 0) = (d_OUT (g\<omega> \<upharpoonleft> \<Gamma>' 0 / g' n) x = 0)))
[PROOF STEP]
using factor_pos[of n]
[PROOF STATE]
proof (prove)
using this:
0 < factor n

goal (1 subgoal):
 1. \<And>x. (x \<in> RF\<^sup>\<circ>\<^bsub>\<Gamma>' n\<^esub> (TER\<^bsub>\<Gamma>' n\<^esub> (g n)) \<longrightarrow> (x \<in> RF\<^sup>\<circ>\<^bsub>\<Gamma>' 0\<^esub> (TER\<^bsub>\<Gamma>' 0\<^esub> (g' n)) \<longrightarrow> (d_OUT (g n) x = 0) = (d_OUT (g' n) x = 0)) \<and> (x \<notin> RF\<^sup>\<circ>\<^bsub>\<Gamma>' 0\<^esub> (TER\<^bsub>\<Gamma>' 0\<^esub> (g' n)) \<longrightarrow> (d_OUT (g n) x = 0) = (d_OUT (g\<omega> \<upharpoonleft> \<Gamma>' 0 / g' n) x = 0))) \<and> (x \<notin> RF\<^sup>\<circ>\<^bsub>\<Gamma>' n\<^esub> (TER\<^bsub>\<Gamma>' n\<^esub> (g n)) \<longrightarrow> (x \<in> RF\<^sup>\<circ>\<^bsub>\<Gamma>' 0\<^esub> (TER\<^bsub>\<Gamma>' 0\<^esub> (g' n)) \<longrightarrow> (d_OUT (g\<omega> \<upharpoonleft> \<Gamma>' n / g n) x = 0) = (d_OUT (g' n) x = 0)) \<and> (x \<notin> RF\<^sup>\<circ>\<^bsub>\<Gamma>' 0\<^esub> (TER\<^bsub>\<Gamma>' 0\<^esub> (g' n)) \<longrightarrow> (d_OUT (g\<omega> \<upharpoonleft> \<Gamma>' n / g n) x = 0) = (d_OUT (g\<omega> \<upharpoonleft> \<Gamma>' 0 / g' n) x = 0)))
[PROOF STEP]
by(auto simp add: RF_circ TER_g' restrict_curr_g' currentD_OUT_eq_0[OF g] currentD_OUT_eq_0[OF g'] g'_simps split: if_split_asm)
[PROOF STATE]
proof (state)
this:
SINK (g ?n \<frown>\<^bsub>\<Gamma>' ?n\<^esub> g\<omega>) = SINK (g' ?n \<frown>\<^bsub>\<Gamma>' 0\<^esub> g\<omega>)

goal (1 subgoal):
 1. \<not> (\<exists>\<epsilon>>0. \<epsilon> < \<delta> \<and> \<not> hindered (reduce_weight \<Gamma> b \<epsilon>)) \<Longrightarrow> False
[PROOF STEP]
have TER_plus_\<omega>: "TER\<^bsub>\<Gamma>' n\<^esub> (g n \<frown>\<^bsub>\<Gamma>' n\<^esub> g\<omega>) = TER\<^bsub>\<Gamma>' 0\<^esub> (g' n \<frown>\<^bsub>\<Gamma>' 0\<^esub> g\<omega>)" for n
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. TER\<^bsub>\<Gamma>' n\<^esub> (g n \<frown>\<^bsub>\<Gamma>' n\<^esub> g\<omega>) = TER\<^bsub>\<Gamma>' 0\<^esub> (g' n \<frown>\<^bsub>\<Gamma>' 0\<^esub> g\<omega>)
[PROOF STEP]
by(rule set_eqI iffI)+(simp_all add: SAT_plus_\<omega> SINK_plus_\<omega>)
[PROOF STATE]
proof (state)
this:
TER\<^bsub>\<Gamma>' ?n\<^esub> (g ?n \<frown>\<^bsub>\<Gamma>' ?n\<^esub> g\<omega>) = TER\<^bsub>\<Gamma>' 0\<^esub> (g' ?n \<frown>\<^bsub>\<Gamma>' 0\<^esub> g\<omega>)

goal (1 subgoal):
 1. \<not> (\<exists>\<epsilon>>0. \<epsilon> < \<delta> \<and> \<not> hindered (reduce_weight \<Gamma> b \<epsilon>)) \<Longrightarrow> False
[PROOF STEP]
define h where "h n = g n \<frown>\<^bsub>\<Gamma>' n\<^esub> g\<omega>" for n
[PROOF STATE]
proof (state)
this:
h ?n = g ?n \<frown>\<^bsub>\<Gamma>' ?n\<^esub> g\<omega>

goal (1 subgoal):
 1. \<not> (\<exists>\<epsilon>>0. \<epsilon> < \<delta> \<and> \<not> hindered (reduce_weight \<Gamma> b \<epsilon>)) \<Longrightarrow> False
[PROOF STEP]
have h: "current (\<Gamma>' n) (h n)" for n
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. current (\<Gamma>' n) (h n)
[PROOF STEP]
unfolding h_def
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. current (\<Gamma>' n) (g n \<frown>\<^bsub>\<Gamma>' n\<^esub> g\<omega>)
[PROOF STEP]
using g w
[PROOF STATE]
proof (prove)
using this:
current (\<Gamma>' ?n) (g ?n)
wave (\<Gamma>' ?n) (g ?n)

goal (1 subgoal):
 1. current (\<Gamma>' n) (g n \<frown>\<^bsub>\<Gamma>' n\<^esub> g\<omega>)
[PROOF STEP]
by(rule current_plus_current)(rule current_restrict_current[OF w g\<omega>'])
[PROOF STATE]
proof (state)
this:
current (\<Gamma>' ?n) (h ?n)

goal (1 subgoal):
 1. \<not> (\<exists>\<epsilon>>0. \<epsilon> < \<delta> \<and> \<not> hindered (reduce_weight \<Gamma> b \<epsilon>)) \<Longrightarrow> False
[PROOF STEP]
have hw: "wave (\<Gamma>' n) (h n)" for n
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. wave (\<Gamma>' n) (h n)
[PROOF STEP]
unfolding h_def
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. wave (\<Gamma>' n) (g n \<frown>\<^bsub>\<Gamma>' n\<^esub> g\<omega>)
[PROOF STEP]
using g w g\<omega>' w\<omega>r
[PROOF STATE]
proof (prove)
using this:
current (\<Gamma>' ?n) (g ?n)
wave (\<Gamma>' ?n) (g ?n)
current (\<Gamma>' ?n) g\<omega>
wave (quotient_web (\<Gamma>' ?n) (g ?n)) (g\<omega> \<upharpoonleft> \<Gamma>' ?n / g ?n)

goal (1 subgoal):
 1. wave (\<Gamma>' n) (g n \<frown>\<^bsub>\<Gamma>' n\<^esub> g\<omega>)
[PROOF STEP]
by(rule wave_plus)
[PROOF STATE]
proof (state)
this:
wave (\<Gamma>' ?n) (h ?n)

goal (1 subgoal):
 1. \<not> (\<exists>\<epsilon>>0. \<epsilon> < \<delta> \<and> \<not> hindered (reduce_weight \<Gamma> b \<epsilon>)) \<Longrightarrow> False
[PROOF STEP]
define T where "T = TER\<^bsub>\<Gamma>' 0\<^esub> g\<omega>"
[PROOF STATE]
proof (state)
this:
T = TER\<^bsub>\<Gamma>' 0\<^esub> g\<omega>

goal (1 subgoal):
 1. \<not> (\<exists>\<epsilon>>0. \<epsilon> < \<delta> \<and> \<not> hindered (reduce_weight \<Gamma> b \<epsilon>)) \<Longrightarrow> False
[PROOF STEP]
have RF_h: "RF (TER\<^bsub>\<Gamma>' n\<^esub> (h n)) = RF T" for n
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. RF (TER\<^bsub>\<Gamma>' n\<^esub> (h n)) = RF T
[PROOF STEP]
proof -
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. RF (TER\<^bsub>\<Gamma>' n\<^esub> (h n)) = RF T
[PROOF STEP]
have "RF\<^bsub>\<Gamma>' 0\<^esub> (TER\<^bsub>\<Gamma>' n\<^esub> (h n)) = RF\<^bsub>\<Gamma>' 0\<^esub> (RF\<^bsub>\<Gamma>' 0\<^esub> (TER\<^bsub>\<Gamma>' 0\<^esub> g\<omega>) \<union> TER\<^bsub>\<Gamma>' 0\<^esub> (g' n))"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. RF\<^bsub>\<Gamma>' 0\<^esub> (TER\<^bsub>\<Gamma>' n\<^esub> (h n)) = RF\<^bsub>\<Gamma>' 0\<^esub> (RF\<^bsub>\<Gamma>' 0\<^esub> (TER\<^bsub>\<Gamma>' 0\<^esub> g\<omega>) \<union> TER\<^bsub>\<Gamma>' 0\<^esub> (g' n))
[PROOF STEP]
unfolding h_def TER_plus_\<omega> RF_TER_plus_web[OF g' w' g\<omega> w\<omega>] roofed_idem_Un1
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. RF\<^bsub>\<Gamma>' 0\<^esub> (TER\<^bsub>\<Gamma>' 0\<^esub> (g' n) \<union> TER\<^bsub>\<Gamma>' 0\<^esub> g\<omega>) = RF\<^bsub>\<Gamma>' 0\<^esub> (TER\<^bsub>\<Gamma>' 0\<^esub> g\<omega> \<union> TER\<^bsub>\<Gamma>' 0\<^esub> (g' n))
[PROOF STEP]
by(simp add: Un_commute)
[PROOF STATE]
proof (state)
this:
RF\<^bsub>\<Gamma>' 0\<^esub> (TER\<^bsub>\<Gamma>' n\<^esub> (h n)) = RF\<^bsub>\<Gamma>' 0\<^esub> (RF\<^bsub>\<Gamma>' 0\<^esub> (TER\<^bsub>\<Gamma>' 0\<^esub> g\<omega>) \<union> TER\<^bsub>\<Gamma>' 0\<^esub> (g' n))

goal (1 subgoal):
 1. RF (TER\<^bsub>\<Gamma>' n\<^esub> (h n)) = RF T
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
RF\<^bsub>\<Gamma>' 0\<^esub> (TER\<^bsub>\<Gamma>' n\<^esub> (h n)) = RF\<^bsub>\<Gamma>' 0\<^esub> (RF\<^bsub>\<Gamma>' 0\<^esub> (TER\<^bsub>\<Gamma>' 0\<^esub> g\<omega>) \<union> TER\<^bsub>\<Gamma>' 0\<^esub> (g' n))

goal (1 subgoal):
 1. RF (TER\<^bsub>\<Gamma>' n\<^esub> (h n)) = RF T
[PROOF STEP]
have "\<dots> = RF ((\<Union>n. TER\<^bsub>\<Gamma>' 0\<^esub> (g' n)) \<union> TER\<^bsub>\<Gamma>' 0\<^esub> (g' n))"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. RF\<^bsub>\<Gamma>' 0\<^esub> (RF\<^bsub>\<Gamma>' 0\<^esub> (TER\<^bsub>\<Gamma>' 0\<^esub> g\<omega>) \<union> TER\<^bsub>\<Gamma>' 0\<^esub> (g' n)) = RF ((\<Union>n. TER\<^bsub>\<Gamma>' 0\<^esub> (g' n)) \<union> TER\<^bsub>\<Gamma>' 0\<^esub> (g' n))
[PROOF STEP]
by(simp add: RF_g\<omega> roofed_idem_Un1)
[PROOF STATE]
proof (state)
this:
RF\<^bsub>\<Gamma>' 0\<^esub> (RF\<^bsub>\<Gamma>' 0\<^esub> (TER\<^bsub>\<Gamma>' 0\<^esub> g\<omega>) \<union> TER\<^bsub>\<Gamma>' 0\<^esub> (g' n)) = RF ((\<Union>n. TER\<^bsub>\<Gamma>' 0\<^esub> (g' n)) \<union> TER\<^bsub>\<Gamma>' 0\<^esub> (g' n))

goal (1 subgoal):
 1. RF (TER\<^bsub>\<Gamma>' n\<^esub> (h n)) = RF T
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
RF\<^bsub>\<Gamma>' 0\<^esub> (RF\<^bsub>\<Gamma>' 0\<^esub> (TER\<^bsub>\<Gamma>' 0\<^esub> g\<omega>) \<union> TER\<^bsub>\<Gamma>' 0\<^esub> (g' n)) = RF ((\<Union>n. TER\<^bsub>\<Gamma>' 0\<^esub> (g' n)) \<union> TER\<^bsub>\<Gamma>' 0\<^esub> (g' n))

goal (1 subgoal):
 1. RF (TER\<^bsub>\<Gamma>' n\<^esub> (h n)) = RF T
[PROOF STEP]
have "\<dots> = RF\<^bsub>\<Gamma>' 0\<^esub> T"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. RF ((\<Union>n. TER\<^bsub>\<Gamma>' 0\<^esub> (g' n)) \<union> TER\<^bsub>\<Gamma>' 0\<^esub> (g' n)) = RF\<^bsub>\<Gamma>' 0\<^esub> T
[PROOF STEP]
unfolding T_def
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. RF ((\<Union>n. TER\<^bsub>\<Gamma>' 0\<^esub> (g' n)) \<union> TER\<^bsub>\<Gamma>' 0\<^esub> (g' n)) = RF\<^bsub>\<Gamma>' 0\<^esub> (TER\<^bsub>\<Gamma>' 0\<^esub> g\<omega>)
[PROOF STEP]
by(auto simp add: RF_g\<omega> intro!: arg_cong2[where f=roofed] del: equalityI) auto
[PROOF STATE]
proof (state)
this:
RF ((\<Union>n. TER\<^bsub>\<Gamma>' 0\<^esub> (g' n)) \<union> TER\<^bsub>\<Gamma>' 0\<^esub> (g' n)) = RF\<^bsub>\<Gamma>' 0\<^esub> T

goal (1 subgoal):
 1. RF (TER\<^bsub>\<Gamma>' n\<^esub> (h n)) = RF T
[PROOF STEP]
finally
[PROOF STATE]
proof (chain)
picking this:
RF\<^bsub>\<Gamma>' 0\<^esub> (TER\<^bsub>\<Gamma>' n\<^esub> (h n)) = RF\<^bsub>\<Gamma>' 0\<^esub> T
[PROOF STEP]
show ?thesis
[PROOF STATE]
proof (prove)
using this:
RF\<^bsub>\<Gamma>' 0\<^esub> (TER\<^bsub>\<Gamma>' n\<^esub> (h n)) = RF\<^bsub>\<Gamma>' 0\<^esub> T

goal (1 subgoal):
 1. RF (TER\<^bsub>\<Gamma>' n\<^esub> (h n)) = RF T
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
RF (TER\<^bsub>\<Gamma>' n\<^esub> (h n)) = RF T

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
RF (TER\<^bsub>\<Gamma>' ?n\<^esub> (h ?n)) = RF T

goal (1 subgoal):
 1. \<not> (\<exists>\<epsilon>>0. \<epsilon> < \<delta> \<and> \<not> hindered (reduce_weight \<Gamma> b \<epsilon>)) \<Longrightarrow> False
[PROOF STEP]
have OUT_h_nT: "d_OUT (h n) x = 0" if "x \<notin> RF T" for n x
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. d_OUT (h n) x = 0
[PROOF STEP]
by(rule waveD_OUT[OF hw])(simp add: RF_h that)
[PROOF STATE]
proof (state)
this:
?x \<notin> RF T \<Longrightarrow> d_OUT (h ?n) ?x = 0

goal (1 subgoal):
 1. \<not> (\<exists>\<epsilon>>0. \<epsilon> < \<delta> \<and> \<not> hindered (reduce_weight \<Gamma> b \<epsilon>)) \<Longrightarrow> False
[PROOF STEP]
have IN_h_nT: "d_IN (h n) x = 0" if "x \<notin> RF T" for n x
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. d_IN (h n) x = 0
[PROOF STEP]
by(rule wave_not_RF_IN_zero[OF h hw])(simp add: RF_h that)
[PROOF STATE]
proof (state)
this:
?x \<notin> RF T \<Longrightarrow> d_IN (h ?n) ?x = 0

goal (1 subgoal):
 1. \<not> (\<exists>\<epsilon>>0. \<epsilon> < \<delta> \<and> \<not> hindered (reduce_weight \<Gamma> b \<epsilon>)) \<Longrightarrow> False
[PROOF STEP]
have OUT_h_b: "d_OUT (h n) b = 0" for n
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. d_OUT (h n) b = 0
[PROOF STEP]
using b_TER[of n] b_SINK_g\<omega>[THEN in_SINK_restrict_current]
[PROOF STATE]
proof (prove)
using this:
b \<in> TER\<^bsub>\<Gamma>' n\<^esub> (g n)
b \<in> SINK (g\<omega> \<upharpoonleft> ?\<Gamma> / ?f)

goal (1 subgoal):
 1. d_OUT (h n) b = 0
[PROOF STEP]
by(auto simp add: h_def OUT_plus_current[OF g w g\<omega>r] SINK.simps)
[PROOF STATE]
proof (state)
this:
d_OUT (h ?n) b = 0

goal (1 subgoal):
 1. \<not> (\<exists>\<epsilon>>0. \<epsilon> < \<delta> \<and> \<not> hindered (reduce_weight \<Gamma> b \<epsilon>)) \<Longrightarrow> False
[PROOF STEP]
have OUT_h_\<E>: "d_OUT (h n) x = 0" if "x \<in> \<E> T" for x n
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. d_OUT (h n) x = 0
[PROOF STEP]
using that
[PROOF STATE]
proof (prove)
using this:
x \<in> \<E> T

goal (1 subgoal):
 1. d_OUT (h n) x = 0
[PROOF STEP]
apply(subst (asm) \<E>_RF[symmetric])
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. x \<in> \<E> (RF T) \<Longrightarrow> d_OUT (h n) x = 0
[PROOF STEP]
apply(subst (asm) (1 2) RF_h[symmetric, of n])
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. x \<in> \<E> (RF (TER\<^bsub>\<Gamma>' n\<^esub> (h n))) \<Longrightarrow> d_OUT (h n) x = 0
[PROOF STEP]
apply(subst (asm) \<E>_RF)
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. x \<in> \<E> (TER\<^bsub>\<Gamma>' n\<^esub> (h n)) \<Longrightarrow> d_OUT (h n) x = 0
[PROOF STEP]
apply(simp add: SINK.simps)
[PROOF STATE]
proof (prove)
goal:
No subgoals!
[PROOF STEP]
done
[PROOF STATE]
proof (state)
this:
?x \<in> \<E> T \<Longrightarrow> d_OUT (h ?n) ?x = 0

goal (1 subgoal):
 1. \<not> (\<exists>\<epsilon>>0. \<epsilon> < \<delta> \<and> \<not> hindered (reduce_weight \<Gamma> b \<epsilon>)) \<Longrightarrow> False
[PROOF STEP]
have IN_h_\<E>: "d_IN (h n) x = weight (\<Gamma>' n) x" if "x \<in> \<E> T" "x \<notin> A \<Gamma>" for x n
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. d_IN (h n) x = weight (\<Gamma>' n) x
[PROOF STEP]
using that
[PROOF STATE]
proof (prove)
using this:
x \<in> \<E> T
x \<notin> A \<Gamma>

goal (1 subgoal):
 1. d_IN (h n) x = weight (\<Gamma>' n) x
[PROOF STEP]
apply(subst (asm) \<E>_RF[symmetric])
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<lbrakk>x \<in> \<E> (RF T); x \<notin> A \<Gamma>\<rbrakk> \<Longrightarrow> d_IN (h n) x = weight (\<Gamma>' n) x
[PROOF STEP]
apply(subst (asm) (1 2) RF_h[symmetric, of n])
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<lbrakk>x \<in> \<E> (RF (TER\<^bsub>\<Gamma>' n\<^esub> (h n))); x \<notin> A \<Gamma>\<rbrakk> \<Longrightarrow> d_IN (h n) x = weight (\<Gamma>' n) x
[PROOF STEP]
apply(subst (asm) \<E>_RF)
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<lbrakk>x \<in> \<E> (TER\<^bsub>\<Gamma>' n\<^esub> (h n)); x \<notin> A \<Gamma>\<rbrakk> \<Longrightarrow> d_IN (h n) x = weight (\<Gamma>' n) x
[PROOF STEP]
apply(simp add: currentD_SAT[OF h])
[PROOF STATE]
proof (prove)
goal:
No subgoals!
[PROOF STEP]
done
[PROOF STATE]
proof (state)
this:
\<lbrakk>?x \<in> \<E> T; ?x \<notin> A \<Gamma>\<rbrakk> \<Longrightarrow> d_IN (h ?n) ?x = weight (\<Gamma>' ?n) ?x

goal (1 subgoal):
 1. \<not> (\<exists>\<epsilon>>0. \<epsilon> < \<delta> \<and> \<not> hindered (reduce_weight \<Gamma> b \<epsilon>)) \<Longrightarrow> False
[PROOF STEP]
have b_SAT: "b \<in> SAT (\<Gamma>' 0) (h 0)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. b \<in> SAT (\<Gamma>' 0) (h 0)
[PROOF STEP]
using b_TER[of 0]
[PROOF STATE]
proof (prove)
using this:
b \<in> TER\<^bsub>\<Gamma>' 0\<^esub> (g 0)

goal (1 subgoal):
 1. b \<in> SAT (\<Gamma>' 0) (h 0)
[PROOF STEP]
by(auto simp add: h_def SAT.simps d_IN_plus_web intro: order_trans)
[PROOF STATE]
proof (state)
this:
b \<in> SAT (\<Gamma>' 0) (h 0)

goal (1 subgoal):
 1. \<not> (\<exists>\<epsilon>>0. \<epsilon> < \<delta> \<and> \<not> hindered (reduce_weight \<Gamma> b \<epsilon>)) \<Longrightarrow> False
[PROOF STEP]
have b_T: "b \<in> T"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. b \<in> T
[PROOF STEP]
using b_SINK_g\<omega> b_TER
[PROOF STATE]
proof (prove)
using this:
b \<in> SINK g\<omega>
b \<in> TER\<^bsub>\<Gamma>' ?n\<^esub> (g ?n)

goal (1 subgoal):
 1. b \<in> T
[PROOF STEP]
by(simp add: T_def)(metis SAT_g\<omega> subsetD f_simps(1))
[PROOF STATE]
proof (state)
this:
b \<in> T

goal (1 subgoal):
 1. \<not> (\<exists>\<epsilon>>0. \<epsilon> < \<delta> \<and> \<not> hindered (reduce_weight \<Gamma> b \<epsilon>)) \<Longrightarrow> False
[PROOF STEP]
have essential: "b \<in> \<E> T"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. b \<in> \<E> T
[PROOF STEP]
proof(rule ccontr)
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. b \<notin> \<E> T \<Longrightarrow> False
[PROOF STEP]
assume "b \<notin> \<E> T"
[PROOF STATE]
proof (state)
this:
b \<notin> \<E> T

goal (1 subgoal):
 1. b \<notin> \<E> T \<Longrightarrow> False
[PROOF STEP]
hence b: "b \<notin> \<E> (TER\<^bsub>\<Gamma>' 0\<^esub> (h 0))"
[PROOF STATE]
proof (prove)
using this:
b \<notin> \<E> T

goal (1 subgoal):
 1. b \<notin> \<E> (TER\<^bsub>\<Gamma>' 0\<^esub> (h 0))
[PROOF STEP]
proof(rule contrapos_nn)
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. b \<in> \<E> (TER\<^bsub>\<Gamma>' 0\<^esub> (h 0)) \<Longrightarrow> b \<in> \<E> T
[PROOF STEP]
assume "b \<in> \<E> (TER\<^bsub>\<Gamma>' 0\<^esub> (h 0))"
[PROOF STATE]
proof (state)
this:
b \<in> \<E> (TER\<^bsub>\<Gamma>' 0\<^esub> (h 0))

goal (1 subgoal):
 1. b \<in> \<E> (TER\<^bsub>\<Gamma>' 0\<^esub> (h 0)) \<Longrightarrow> b \<in> \<E> T
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
b \<in> \<E> (TER\<^bsub>\<Gamma>' 0\<^esub> (h 0))
[PROOF STEP]
obtain p y where p: "path \<Gamma> b p y" and y: "y \<in> B \<Gamma>" and distinct: "distinct (b # p)"
        and bypass: "\<And>z. z \<in> set p \<Longrightarrow> z \<notin> RF (TER\<^bsub>\<Gamma>' 0\<^esub> (h 0))"
[PROOF STATE]
proof (prove)
using this:
b \<in> \<E> (TER\<^bsub>\<Gamma>' 0\<^esub> (h 0))

goal (1 subgoal):
 1. (\<And>p y. \<lbrakk>path \<Gamma> b p y; y \<in> B \<Gamma>; distinct (b # p); \<And>z. z \<in> set p \<Longrightarrow> z \<notin> RF (TER\<^bsub>\<Gamma>' 0\<^esub> (h 0))\<rbrakk> \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by(rule \<E>_E_RF) auto
[PROOF STATE]
proof (state)
this:
path \<Gamma> b p y
y \<in> B \<Gamma>
distinct (b # p)
?z \<in> set p \<Longrightarrow> ?z \<notin> RF (TER\<^bsub>\<Gamma>' 0\<^esub> (h 0))

goal (1 subgoal):
 1. b \<in> \<E> (TER\<^bsub>\<Gamma>' 0\<^esub> (h 0)) \<Longrightarrow> b \<in> \<E> T
[PROOF STEP]
from bypass
[PROOF STATE]
proof (chain)
picking this:
?z \<in> set p \<Longrightarrow> ?z \<notin> RF (TER\<^bsub>\<Gamma>' 0\<^esub> (h 0))
[PROOF STEP]
have bypass': "\<And>z. z \<in> set p \<Longrightarrow> z \<notin> T"
[PROOF STATE]
proof (prove)
using this:
?z \<in> set p \<Longrightarrow> ?z \<notin> RF (TER\<^bsub>\<Gamma>' 0\<^esub> (h 0))

goal (1 subgoal):
 1. \<And>z. z \<in> set p \<Longrightarrow> z \<notin> T
[PROOF STEP]
unfolding RF_h
[PROOF STATE]
proof (prove)
using this:
?z \<in> set p \<Longrightarrow> ?z \<notin> RF T

goal (1 subgoal):
 1. \<And>z. z \<in> set p \<Longrightarrow> z \<notin> T
[PROOF STEP]
by(auto intro: roofed_greaterI)
[PROOF STATE]
proof (state)
this:
?z \<in> set p \<Longrightarrow> ?z \<notin> T

goal (1 subgoal):
 1. b \<in> \<E> (TER\<^bsub>\<Gamma>' 0\<^esub> (h 0)) \<Longrightarrow> b \<in> \<E> T
[PROOF STEP]
have "essential \<Gamma> (B \<Gamma>) T b"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. essential \<Gamma> (B \<Gamma>) T b
[PROOF STEP]
using p y
[PROOF STATE]
proof (prove)
using this:
path \<Gamma> b p y
y \<in> B \<Gamma>

goal (1 subgoal):
 1. essential \<Gamma> (B \<Gamma>) T b
[PROOF STEP]
by(rule essentialI)(auto dest: bypass')
[PROOF STATE]
proof (state)
this:
essential \<Gamma> (B \<Gamma>) T b

goal (1 subgoal):
 1. b \<in> \<E> (TER\<^bsub>\<Gamma>' 0\<^esub> (h 0)) \<Longrightarrow> b \<in> \<E> T
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
essential \<Gamma> (B \<Gamma>) T b
[PROOF STEP]
show "b \<in> \<E> T"
[PROOF STATE]
proof (prove)
using this:
essential \<Gamma> (B \<Gamma>) T b

goal (1 subgoal):
 1. b \<in> \<E> T
[PROOF STEP]
using b_T
[PROOF STATE]
proof (prove)
using this:
essential \<Gamma> (B \<Gamma>) T b
b \<in> T

goal (1 subgoal):
 1. b \<in> \<E> T
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
b \<in> \<E> T

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
b \<notin> \<E> (TER\<^bsub>\<Gamma>' 0\<^esub> (h 0))

goal (1 subgoal):
 1. b \<notin> \<E> T \<Longrightarrow> False
[PROOF STEP]
have h0: "current \<Gamma> (h 0)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. current \<Gamma> (h 0)
[PROOF STEP]
using h[of 0]
[PROOF STATE]
proof (prove)
using this:
current (\<Gamma>' 0) (h 0)

goal (1 subgoal):
 1. current \<Gamma> (h 0)
[PROOF STEP]
by(rule current_weight_mono)(simp_all add: wb_conv \<epsilon>_nonneg)
[PROOF STATE]
proof (state)
this:
current \<Gamma> (h 0)

goal (1 subgoal):
 1. b \<notin> \<E> T \<Longrightarrow> False
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
current \<Gamma> (h 0)

goal (1 subgoal):
 1. b \<notin> \<E> T \<Longrightarrow> False
[PROOF STEP]
have "wave \<Gamma> (h 0)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. wave \<Gamma> (h 0)
[PROOF STEP]
proof
[PROOF STATE]
proof (state)
goal (2 subgoals):
 1. separating \<Gamma> (TER (h 0))
 2. current \<Gamma> (h 0)
[PROOF STEP]
have "separating (\<Gamma>' 0) (\<E>\<^bsub>\<Gamma>' 0\<^esub> (TER\<^bsub>\<Gamma>' 0\<^esub> (h 0)))"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. separating (\<Gamma>' 0) (\<E>\<^bsub>\<Gamma>' 0\<^esub> (TER\<^bsub>\<Gamma>' 0\<^esub> (h 0)))
[PROOF STEP]
by(rule separating_essential)(rule waveD_separating[OF hw])
[PROOF STATE]
proof (state)
this:
separating (\<Gamma>' 0) (\<E>\<^bsub>\<Gamma>' 0\<^esub> (TER\<^bsub>\<Gamma>' 0\<^esub> (h 0)))

goal (2 subgoals):
 1. separating \<Gamma> (TER (h 0))
 2. current \<Gamma> (h 0)
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
separating (\<Gamma>' 0) (\<E>\<^bsub>\<Gamma>' 0\<^esub> (TER\<^bsub>\<Gamma>' 0\<^esub> (h 0)))
[PROOF STEP]
have "separating \<Gamma> (\<E> (TER\<^bsub>\<Gamma>' 0\<^esub> (h 0)))"
[PROOF STATE]
proof (prove)
using this:
separating (\<Gamma>' 0) (\<E>\<^bsub>\<Gamma>' 0\<^esub> (TER\<^bsub>\<Gamma>' 0\<^esub> (h 0)))

goal (1 subgoal):
 1. separating \<Gamma> (\<E> (TER\<^bsub>\<Gamma>' 0\<^esub> (h 0)))
[PROOF STEP]
by(simp add: separating_gen.simps)
[PROOF STATE]
proof (state)
this:
separating \<Gamma> (\<E> (TER\<^bsub>\<Gamma>' 0\<^esub> (h 0)))

goal (2 subgoals):
 1. separating \<Gamma> (TER (h 0))
 2. current \<Gamma> (h 0)
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
separating \<Gamma> (\<E> (TER\<^bsub>\<Gamma>' 0\<^esub> (h 0)))

goal (2 subgoals):
 1. separating \<Gamma> (TER (h 0))
 2. current \<Gamma> (h 0)
[PROOF STEP]
have subset: "\<E> (TER\<^bsub>\<Gamma>' 0\<^esub> (h 0)) \<subseteq> TER (h 0)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<E> (TER\<^bsub>\<Gamma>' 0\<^esub> (h 0)) \<subseteq> TER (h 0)
[PROOF STEP]
using \<epsilon>_nonneg[of 0] b
[PROOF STATE]
proof (prove)
using this:
0 \<le> \<epsilon> 0
b \<notin> \<E> (TER\<^bsub>\<Gamma>' 0\<^esub> (h 0))

goal (1 subgoal):
 1. \<E> (TER\<^bsub>\<Gamma>' 0\<^esub> (h 0)) \<subseteq> TER (h 0)
[PROOF STEP]
by(auto simp add: SAT.simps wb_conv split: if_split_asm)
[PROOF STATE]
proof (state)
this:
\<E> (TER\<^bsub>\<Gamma>' 0\<^esub> (h 0)) \<subseteq> TER (h 0)

goal (2 subgoals):
 1. separating \<Gamma> (TER (h 0))
 2. current \<Gamma> (h 0)
[PROOF STEP]
ultimately
[PROOF STATE]
proof (chain)
picking this:
separating \<Gamma> (\<E> (TER\<^bsub>\<Gamma>' 0\<^esub> (h 0)))
\<E> (TER\<^bsub>\<Gamma>' 0\<^esub> (h 0)) \<subseteq> TER (h 0)
[PROOF STEP]
show "separating \<Gamma> (TER (h 0))"
[PROOF STATE]
proof (prove)
using this:
separating \<Gamma> (\<E> (TER\<^bsub>\<Gamma>' 0\<^esub> (h 0)))
\<E> (TER\<^bsub>\<Gamma>' 0\<^esub> (h 0)) \<subseteq> TER (h 0)

goal (1 subgoal):
 1. separating \<Gamma> (TER (h 0))
[PROOF STEP]
by(rule separating_weakening)
[PROOF STATE]
proof (state)
this:
separating \<Gamma> (TER (h 0))

goal (1 subgoal):
 1. current \<Gamma> (h 0)
[PROOF STEP]
qed(rule h0)
[PROOF STATE]
proof (state)
this:
wave \<Gamma> (h 0)

goal (1 subgoal):
 1. b \<notin> \<E> T \<Longrightarrow> False
[PROOF STEP]
ultimately
[PROOF STATE]
proof (chain)
picking this:
current \<Gamma> (h 0)
wave \<Gamma> (h 0)
[PROOF STEP]
have "h 0 = zero_current"
[PROOF STATE]
proof (prove)
using this:
current \<Gamma> (h 0)
wave \<Gamma> (h 0)

goal (1 subgoal):
 1. h 0 = (\<lambda>_. 0)
[PROOF STEP]
by(rule looseD_wave[OF loose])
[PROOF STATE]
proof (state)
this:
h 0 = (\<lambda>_. 0)

goal (1 subgoal):
 1. b \<notin> \<E> T \<Longrightarrow> False
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
h 0 = (\<lambda>_. 0)
[PROOF STEP]
have "d_IN (h 0) b = 0"
[PROOF STATE]
proof (prove)
using this:
h 0 = (\<lambda>_. 0)

goal (1 subgoal):
 1. d_IN (h 0) b = 0
[PROOF STEP]
by(simp)
[PROOF STATE]
proof (state)
this:
d_IN (h 0) b = 0

goal (1 subgoal):
 1. b \<notin> \<E> T \<Longrightarrow> False
[PROOF STEP]
with b_SAT wb \<open>b \<notin> A \<Gamma>\<close>
[PROOF STATE]
proof (chain)
picking this:
b \<in> SAT (\<Gamma>' 0) (h 0)
0 < weight \<Gamma> b
b \<notin> A \<Gamma>
d_IN (h 0) b = 0
[PROOF STEP]
show False
[PROOF STATE]
proof (prove)
using this:
b \<in> SAT (\<Gamma>' 0) (h 0)
0 < weight \<Gamma> b
b \<notin> A \<Gamma>
d_IN (h 0) b = 0

goal (1 subgoal):
 1. False
[PROOF STEP]
by(simp add: SAT.simps wb_conv \<epsilon>_def ennreal_minus_if split: if_split_asm)
[PROOF STATE]
proof (state)
this:
False

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
b \<in> \<E> T

goal (1 subgoal):
 1. \<not> (\<exists>\<epsilon>>0. \<epsilon> < \<delta> \<and> \<not> hindered (reduce_weight \<Gamma> b \<epsilon>)) \<Longrightarrow> False
[PROOF STEP]
define S where "S = {x \<in> RF (T \<inter> B \<Gamma>) \<inter> A \<Gamma>. essential \<Gamma> (T \<inter> B \<Gamma>) (RF (T \<inter> B \<Gamma>) \<inter> A \<Gamma>) x}"
[PROOF STATE]
proof (state)
this:
S = {x \<in> RF (T \<inter> B \<Gamma>) \<inter> A \<Gamma>. essential \<Gamma> (T \<inter> B \<Gamma>) (RF (T \<inter> B \<Gamma>) \<inter> A \<Gamma>) x}

goal (1 subgoal):
 1. \<not> (\<exists>\<epsilon>>0. \<epsilon> < \<delta> \<and> \<not> hindered (reduce_weight \<Gamma> b \<epsilon>)) \<Longrightarrow> False
[PROOF STEP]
define \<Gamma>_h where "\<Gamma>_h = \<lparr> edge = \<lambda>x y. edge \<Gamma> x y \<and> x \<in> S \<and> y \<in> T \<and> y \<in> B \<Gamma>, weight = \<lambda>x. weight \<Gamma> x * indicator (S \<union> T \<inter> B \<Gamma>) x, A = S, B = T \<inter> B \<Gamma>\<rparr>"
[PROOF STATE]
proof (state)
this:
\<Gamma>_h = \<lparr>edge = \<lambda>x y. edge \<Gamma> x y \<and> x \<in> S \<and> y \<in> T \<and> y \<in> B \<Gamma>, weight = \<lambda>x. weight \<Gamma> x * indicator (S \<union> T \<inter> B \<Gamma>) x, A = S, B = T \<inter> B \<Gamma>\<rparr>

goal (1 subgoal):
 1. \<not> (\<exists>\<epsilon>>0. \<epsilon> < \<delta> \<and> \<not> hindered (reduce_weight \<Gamma> b \<epsilon>)) \<Longrightarrow> False
[PROOF STEP]
have \<Gamma>_h_sel [simp]:
    "edge \<Gamma>_h x y \<longleftrightarrow> edge \<Gamma> x y \<and> x \<in> S \<and> y \<in> T \<and> y \<in> B \<Gamma>"
    "A \<Gamma>_h = S"
    "B \<Gamma>_h = T \<inter> B \<Gamma>"
    "weight \<Gamma>_h x = weight \<Gamma> x * indicator (S \<union> T \<inter> B \<Gamma>) x"
    for x y
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (edge \<Gamma>_h x y = (edge \<Gamma> x y \<and> x \<in> S \<and> y \<in> T \<and> y \<in> B \<Gamma>) &&& A \<Gamma>_h = S) &&& B \<Gamma>_h = T \<inter> B \<Gamma> &&& weight \<Gamma>_h x = weight \<Gamma> x * indicator (S \<union> T \<inter> B \<Gamma>) x
[PROOF STEP]
by(simp_all add: \<Gamma>_h_def)
[PROOF STATE]
proof (state)
this:
edge \<Gamma>_h ?x ?y = (edge \<Gamma> ?x ?y \<and> ?x \<in> S \<and> ?y \<in> T \<and> ?y \<in> B \<Gamma>)
A \<Gamma>_h = S
B \<Gamma>_h = T \<inter> B \<Gamma>
weight \<Gamma>_h ?x = weight \<Gamma> ?x * indicator (S \<union> T \<inter> B \<Gamma>) ?x

goal (1 subgoal):
 1. \<not> (\<exists>\<epsilon>>0. \<epsilon> < \<delta> \<and> \<not> hindered (reduce_weight \<Gamma> b \<epsilon>)) \<Longrightarrow> False
[PROOF STEP]
have vertex_\<Gamma>_hD: "x \<in> S \<union> (T \<inter> B \<Gamma>)" if "vertex \<Gamma>_h x" for x
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. x \<in> S \<union> T \<inter> B \<Gamma>
[PROOF STEP]
using that
[PROOF STATE]
proof (prove)
using this:
vertex \<Gamma>_h x

goal (1 subgoal):
 1. x \<in> S \<union> T \<inter> B \<Gamma>
[PROOF STEP]
by(auto simp add: vertex_def)
[PROOF STATE]
proof (state)
this:
vertex \<Gamma>_h ?x \<Longrightarrow> ?x \<in> S \<union> T \<inter> B \<Gamma>

goal (1 subgoal):
 1. \<not> (\<exists>\<epsilon>>0. \<epsilon> < \<delta> \<and> \<not> hindered (reduce_weight \<Gamma> b \<epsilon>)) \<Longrightarrow> False
[PROOF STEP]
have S_vertex: "vertex \<Gamma>_h x" if "x \<in> S" for x
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. vertex \<Gamma>_h x
[PROOF STEP]
proof -
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. vertex \<Gamma>_h x
[PROOF STEP]
from that
[PROOF STATE]
proof (chain)
picking this:
x \<in> S
[PROOF STEP]
have a: "x \<in> A \<Gamma>" and RF: "x \<in> RF (T \<inter> B \<Gamma>)" and ess: "essential \<Gamma> (T \<inter> B \<Gamma>) (RF (T \<inter> B \<Gamma>) \<inter> A \<Gamma>) x"
[PROOF STATE]
proof (prove)
using this:
x \<in> S

goal (1 subgoal):
 1. x \<in> A \<Gamma> &&& x \<in> RF (T \<inter> B \<Gamma>) &&& essential \<Gamma> (T \<inter> B \<Gamma>) (RF (T \<inter> B \<Gamma>) \<inter> A \<Gamma>) x
[PROOF STEP]
by(simp_all add: S_def)
[PROOF STATE]
proof (state)
this:
x \<in> A \<Gamma>
x \<in> RF (T \<inter> B \<Gamma>)
essential \<Gamma> (T \<inter> B \<Gamma>) (RF (T \<inter> B \<Gamma>) \<inter> A \<Gamma>) x

goal (1 subgoal):
 1. vertex \<Gamma>_h x
[PROOF STEP]
from ess
[PROOF STATE]
proof (chain)
picking this:
essential \<Gamma> (T \<inter> B \<Gamma>) (RF (T \<inter> B \<Gamma>) \<inter> A \<Gamma>) x
[PROOF STEP]
obtain p y where p: "path \<Gamma> x p y" and y: "y \<in> B \<Gamma>" and yT: "y \<in> T"
      and bypass: "\<And>z. z \<in> set p \<Longrightarrow> z \<notin> RF (T \<inter> B \<Gamma>) \<inter> A \<Gamma>"
[PROOF STATE]
proof (prove)
using this:
essential \<Gamma> (T \<inter> B \<Gamma>) (RF (T \<inter> B \<Gamma>) \<inter> A \<Gamma>) x

goal (1 subgoal):
 1. (\<And>p y. \<lbrakk>path \<Gamma> x p y; y \<in> B \<Gamma>; y \<in> T; \<And>z. z \<in> set p \<Longrightarrow> z \<notin> RF (T \<inter> B \<Gamma>) \<inter> A \<Gamma>\<rbrakk> \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by(rule essentialE_RF)(auto intro: roofed_greaterI)
[PROOF STATE]
proof (state)
this:
path \<Gamma> x p y
y \<in> B \<Gamma>
y \<in> T
?z \<in> set p \<Longrightarrow> ?z \<notin> RF (T \<inter> B \<Gamma>) \<inter> A \<Gamma>

goal (1 subgoal):
 1. vertex \<Gamma>_h x
[PROOF STEP]
from p a y disjoint
[PROOF STATE]
proof (chain)
picking this:
path \<Gamma> x p y
x \<in> A \<Gamma>
y \<in> B \<Gamma>
A \<Gamma> \<inter> B \<Gamma> = {}
[PROOF STEP]
have "edge \<Gamma> x y"
[PROOF STATE]
proof (prove)
using this:
path \<Gamma> x p y
x \<in> A \<Gamma>
y \<in> B \<Gamma>
A \<Gamma> \<inter> B \<Gamma> = {}

goal (1 subgoal):
 1. edge \<Gamma> x y
[PROOF STEP]
by(cases)(auto 4 3 elim: rtrancl_path.cases dest: bipartite_E)
[PROOF STATE]
proof (state)
this:
edge \<Gamma> x y

goal (1 subgoal):
 1. vertex \<Gamma>_h x
[PROOF STEP]
with that y yT
[PROOF STATE]
proof (chain)
picking this:
x \<in> S
y \<in> B \<Gamma>
y \<in> T
edge \<Gamma> x y
[PROOF STEP]
show ?thesis
[PROOF STATE]
proof (prove)
using this:
x \<in> S
y \<in> B \<Gamma>
y \<in> T
edge \<Gamma> x y

goal (1 subgoal):
 1. vertex \<Gamma>_h x
[PROOF STEP]
by(auto intro!: vertexI1)
[PROOF STATE]
proof (state)
this:
vertex \<Gamma>_h x

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
?x \<in> S \<Longrightarrow> vertex \<Gamma>_h ?x

goal (1 subgoal):
 1. \<not> (\<exists>\<epsilon>>0. \<epsilon> < \<delta> \<and> \<not> hindered (reduce_weight \<Gamma> b \<epsilon>)) \<Longrightarrow> False
[PROOF STEP]
have OUT_not_S: "d_OUT (h n) x = 0" if "x \<notin> S" for x n
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. d_OUT (h n) x = 0
[PROOF STEP]
proof(rule classical)
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. d_OUT (h n) x \<noteq> 0 \<Longrightarrow> d_OUT (h n) x = 0
[PROOF STEP]
assume *: "d_OUT (h n) x \<noteq> 0"
[PROOF STATE]
proof (state)
this:
d_OUT (h n) x \<noteq> 0

goal (1 subgoal):
 1. d_OUT (h n) x \<noteq> 0 \<Longrightarrow> d_OUT (h n) x = 0
[PROOF STEP]
consider (A) "x \<in> A \<Gamma>" | (B) "x \<in> B \<Gamma>" | (outside) "x \<notin> A \<Gamma>" "x \<notin> B \<Gamma>"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<lbrakk>x \<in> A \<Gamma> \<Longrightarrow> thesis; x \<in> B \<Gamma> \<Longrightarrow> thesis; \<lbrakk>x \<notin> A \<Gamma>; x \<notin> B \<Gamma>\<rbrakk> \<Longrightarrow> thesis\<rbrakk> \<Longrightarrow> thesis
[PROOF STEP]
by blast
[PROOF STATE]
proof (state)
this:
\<lbrakk>x \<in> A \<Gamma> \<Longrightarrow> ?thesis; x \<in> B \<Gamma> \<Longrightarrow> ?thesis; \<lbrakk>x \<notin> A \<Gamma>; x \<notin> B \<Gamma>\<rbrakk> \<Longrightarrow> ?thesis\<rbrakk> \<Longrightarrow> ?thesis

goal (1 subgoal):
 1. d_OUT (h n) x \<noteq> 0 \<Longrightarrow> d_OUT (h n) x = 0
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
\<lbrakk>x \<in> A \<Gamma> \<Longrightarrow> ?thesis; x \<in> B \<Gamma> \<Longrightarrow> ?thesis; \<lbrakk>x \<notin> A \<Gamma>; x \<notin> B \<Gamma>\<rbrakk> \<Longrightarrow> ?thesis\<rbrakk> \<Longrightarrow> ?thesis
[PROOF STEP]
show ?thesis
[PROOF STATE]
proof (prove)
using this:
\<lbrakk>x \<in> A \<Gamma> \<Longrightarrow> ?thesis; x \<in> B \<Gamma> \<Longrightarrow> ?thesis; \<lbrakk>x \<notin> A \<Gamma>; x \<notin> B \<Gamma>\<rbrakk> \<Longrightarrow> ?thesis\<rbrakk> \<Longrightarrow> ?thesis

goal (1 subgoal):
 1. d_OUT (h n) x = 0
[PROOF STEP]
proof cases
[PROOF STATE]
proof (state)
goal (3 subgoals):
 1. x \<in> A \<Gamma> \<Longrightarrow> d_OUT (h n) x = 0
 2. x \<in> B \<Gamma> \<Longrightarrow> d_OUT (h n) x = 0
 3. \<lbrakk>x \<notin> A \<Gamma>; x \<notin> B \<Gamma>\<rbrakk> \<Longrightarrow> d_OUT (h n) x = 0
[PROOF STEP]
case B
[PROOF STATE]
proof (state)
this:
x \<in> B \<Gamma>

goal (3 subgoals):
 1. x \<in> A \<Gamma> \<Longrightarrow> d_OUT (h n) x = 0
 2. x \<in> B \<Gamma> \<Longrightarrow> d_OUT (h n) x = 0
 3. \<lbrakk>x \<notin> A \<Gamma>; x \<notin> B \<Gamma>\<rbrakk> \<Longrightarrow> d_OUT (h n) x = 0
[PROOF STEP]
with currentD_OUT[OF h, of x n]
[PROOF STATE]
proof (chain)
picking this:
x \<in> B (\<Gamma>' n) \<Longrightarrow> d_OUT (h n) x = 0
x \<in> B \<Gamma>
[PROOF STEP]
show ?thesis
[PROOF STATE]
proof (prove)
using this:
x \<in> B (\<Gamma>' n) \<Longrightarrow> d_OUT (h n) x = 0
x \<in> B \<Gamma>

goal (1 subgoal):
 1. d_OUT (h n) x = 0
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
d_OUT (h n) x = 0

goal (2 subgoals):
 1. x \<in> A \<Gamma> \<Longrightarrow> d_OUT (h n) x = 0
 2. \<lbrakk>x \<notin> A \<Gamma>; x \<notin> B \<Gamma>\<rbrakk> \<Longrightarrow> d_OUT (h n) x = 0
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (2 subgoals):
 1. x \<in> A \<Gamma> \<Longrightarrow> d_OUT (h n) x = 0
 2. \<lbrakk>x \<notin> A \<Gamma>; x \<notin> B \<Gamma>\<rbrakk> \<Longrightarrow> d_OUT (h n) x = 0
[PROOF STEP]
case outside
[PROOF STATE]
proof (state)
this:
x \<notin> A \<Gamma>
x \<notin> B \<Gamma>

goal (2 subgoals):
 1. x \<in> A \<Gamma> \<Longrightarrow> d_OUT (h n) x = 0
 2. \<lbrakk>x \<notin> A \<Gamma>; x \<notin> B \<Gamma>\<rbrakk> \<Longrightarrow> d_OUT (h n) x = 0
[PROOF STEP]
with currentD_outside_OUT[OF h, of x n]
[PROOF STATE]
proof (chain)
picking this:
x \<notin> \<^bold>V\<^bsub>\<Gamma>' n\<^esub> \<Longrightarrow> d_OUT (h n) x = 0
x \<notin> A \<Gamma>
x \<notin> B \<Gamma>
[PROOF STEP]
show ?thesis
[PROOF STATE]
proof (prove)
using this:
x \<notin> \<^bold>V\<^bsub>\<Gamma>' n\<^esub> \<Longrightarrow> d_OUT (h n) x = 0
x \<notin> A \<Gamma>
x \<notin> B \<Gamma>

goal (1 subgoal):
 1. d_OUT (h n) x = 0
[PROOF STEP]
by(simp add: not_vertex)
[PROOF STATE]
proof (state)
this:
d_OUT (h n) x = 0

goal (1 subgoal):
 1. x \<in> A \<Gamma> \<Longrightarrow> d_OUT (h n) x = 0
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. x \<in> A \<Gamma> \<Longrightarrow> d_OUT (h n) x = 0
[PROOF STEP]
case A
[PROOF STATE]
proof (state)
this:
x \<in> A \<Gamma>

goal (1 subgoal):
 1. x \<in> A \<Gamma> \<Longrightarrow> d_OUT (h n) x = 0
[PROOF STEP]
from *
[PROOF STATE]
proof (chain)
picking this:
d_OUT (h n) x \<noteq> 0
[PROOF STEP]
obtain y where xy: "h n (x, y) \<noteq> 0"
[PROOF STATE]
proof (prove)
using this:
d_OUT (h n) x \<noteq> 0

goal (1 subgoal):
 1. (\<And>y. h n (x, y) \<noteq> 0 \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
using currentD_OUT_eq_0[OF h, of n x]
[PROOF STATE]
proof (prove)
using this:
d_OUT (h n) x \<noteq> 0
(d_OUT (h n) x = 0) = (\<forall>y. h n (x, y) = 0)

goal (1 subgoal):
 1. (\<And>y. h n (x, y) \<noteq> 0 \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
h n (x, y) \<noteq> 0

goal (1 subgoal):
 1. x \<in> A \<Gamma> \<Longrightarrow> d_OUT (h n) x = 0
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
h n (x, y) \<noteq> 0
[PROOF STEP]
have edge: "edge \<Gamma> x y"
[PROOF STATE]
proof (prove)
using this:
h n (x, y) \<noteq> 0

goal (1 subgoal):
 1. edge \<Gamma> x y
[PROOF STEP]
using currentD_outside[OF h]
[PROOF STATE]
proof (prove)
using this:
h n (x, y) \<noteq> 0
\<not> edge (\<Gamma>' ?n1) ?x ?y \<Longrightarrow> h ?n1 (?x, ?y) = 0

goal (1 subgoal):
 1. edge \<Gamma> x y
[PROOF STEP]
by(auto)
[PROOF STATE]
proof (state)
this:
edge \<Gamma> x y

goal (1 subgoal):
 1. x \<in> A \<Gamma> \<Longrightarrow> d_OUT (h n) x = 0
[PROOF STEP]
hence p: "path \<Gamma> x [y] y"
[PROOF STATE]
proof (prove)
using this:
edge \<Gamma> x y

goal (1 subgoal):
 1. path \<Gamma> x [y] y
[PROOF STEP]
by(simp add: rtrancl_path_simps)
[PROOF STATE]
proof (state)
this:
path \<Gamma> x [y] y

goal (1 subgoal):
 1. x \<in> A \<Gamma> \<Longrightarrow> d_OUT (h n) x = 0
[PROOF STEP]
from bipartite_E[OF edge]
[PROOF STATE]
proof (chain)
picking this:
x \<in> A \<Gamma> \<and> y \<in> B \<Gamma>
[PROOF STEP]
have x: "x \<in> A \<Gamma>" and y: "y \<in> B \<Gamma>"
[PROOF STATE]
proof (prove)
using this:
x \<in> A \<Gamma> \<and> y \<in> B \<Gamma>

goal (1 subgoal):
 1. x \<in> A \<Gamma> &&& y \<in> B \<Gamma>
[PROOF STEP]
by simp_all
[PROOF STATE]
proof (state)
this:
x \<in> A \<Gamma>
y \<in> B \<Gamma>

goal (1 subgoal):
 1. x \<in> A \<Gamma> \<Longrightarrow> d_OUT (h n) x = 0
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
x \<in> A \<Gamma>
y \<in> B \<Gamma>

goal (1 subgoal):
 1. x \<in> A \<Gamma> \<Longrightarrow> d_OUT (h n) x = 0
[PROOF STEP]
have "x \<in> RF (RF (T \<inter> B \<Gamma>))"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. x \<in> RF (RF (T \<inter> B \<Gamma>))
[PROOF STEP]
proof
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. \<And>p y. \<lbrakk>path \<Gamma> x p y; y \<in> B \<Gamma>\<rbrakk> \<Longrightarrow> (\<exists>z\<in>set p. z \<in> RF (T \<inter> B \<Gamma>)) \<or> x \<in> RF (T \<inter> B \<Gamma>)
[PROOF STEP]
fix p y'
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. \<And>p y. \<lbrakk>path \<Gamma> x p y; y \<in> B \<Gamma>\<rbrakk> \<Longrightarrow> (\<exists>z\<in>set p. z \<in> RF (T \<inter> B \<Gamma>)) \<or> x \<in> RF (T \<inter> B \<Gamma>)
[PROOF STEP]
assume p: "path \<Gamma> x p y'" and y': "y' \<in> B \<Gamma>"
[PROOF STATE]
proof (state)
this:
path \<Gamma> x p y'
y' \<in> B \<Gamma>

goal (1 subgoal):
 1. \<And>p y. \<lbrakk>path \<Gamma> x p y; y \<in> B \<Gamma>\<rbrakk> \<Longrightarrow> (\<exists>z\<in>set p. z \<in> RF (T \<inter> B \<Gamma>)) \<or> x \<in> RF (T \<inter> B \<Gamma>)
[PROOF STEP]
from p x y' disjoint
[PROOF STATE]
proof (chain)
picking this:
path \<Gamma> x p y'
x \<in> A \<Gamma>
y' \<in> B \<Gamma>
A \<Gamma> \<inter> B \<Gamma> = {}
[PROOF STEP]
have py: "p = [y']"
[PROOF STATE]
proof (prove)
using this:
path \<Gamma> x p y'
x \<in> A \<Gamma>
y' \<in> B \<Gamma>
A \<Gamma> \<inter> B \<Gamma> = {}

goal (1 subgoal):
 1. p = [y']
[PROOF STEP]
by(cases)(auto 4 3 elim: rtrancl_path.cases dest: bipartite_E)
[PROOF STATE]
proof (state)
this:
p = [y']

goal (1 subgoal):
 1. \<And>p y. \<lbrakk>path \<Gamma> x p y; y \<in> B \<Gamma>\<rbrakk> \<Longrightarrow> (\<exists>z\<in>set p. z \<in> RF (T \<inter> B \<Gamma>)) \<or> x \<in> RF (T \<inter> B \<Gamma>)
[PROOF STEP]
have "separating (\<Gamma>' 0) (RF\<^bsub>\<Gamma>' 0\<^esub> (TER\<^bsub>\<Gamma>' 0\<^esub> (h 0)))"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. separating (\<Gamma>' 0) (RF\<^bsub>\<Gamma>' 0\<^esub> (TER\<^bsub>\<Gamma>' 0\<^esub> (h 0)))
[PROOF STEP]
unfolding separating_RF
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. separating (\<Gamma>' 0) (TER\<^bsub>\<Gamma>' 0\<^esub> (h 0))
[PROOF STEP]
by(rule waveD_separating[OF hw])
[PROOF STATE]
proof (state)
this:
separating (\<Gamma>' 0) (RF\<^bsub>\<Gamma>' 0\<^esub> (TER\<^bsub>\<Gamma>' 0\<^esub> (h 0)))

goal (1 subgoal):
 1. \<And>p y. \<lbrakk>path \<Gamma> x p y; y \<in> B \<Gamma>\<rbrakk> \<Longrightarrow> (\<exists>z\<in>set p. z \<in> RF (T \<inter> B \<Gamma>)) \<or> x \<in> RF (T \<inter> B \<Gamma>)
[PROOF STEP]
from separatingD[OF this, of x p y'] py p x y'
[PROOF STATE]
proof (chain)
picking this:
\<lbrakk>path (\<Gamma>' 0) x p y'; x \<in> A (\<Gamma>' 0); y' \<in> B (\<Gamma>' 0)\<rbrakk> \<Longrightarrow> (\<exists>z\<in>set p. z \<in> RF\<^bsub>\<Gamma>' 0\<^esub> (TER\<^bsub>\<Gamma>' 0\<^esub> (h 0))) \<or> x \<in> RF\<^bsub>\<Gamma>' 0\<^esub> (TER\<^bsub>\<Gamma>' 0\<^esub> (h 0))
p = [y']
path \<Gamma> x p y'
x \<in> A \<Gamma>
y' \<in> B \<Gamma>
[PROOF STEP]
have "x \<in> RF T \<or> y' \<in> RF T"
[PROOF STATE]
proof (prove)
using this:
\<lbrakk>path (\<Gamma>' 0) x p y'; x \<in> A (\<Gamma>' 0); y' \<in> B (\<Gamma>' 0)\<rbrakk> \<Longrightarrow> (\<exists>z\<in>set p. z \<in> RF\<^bsub>\<Gamma>' 0\<^esub> (TER\<^bsub>\<Gamma>' 0\<^esub> (h 0))) \<or> x \<in> RF\<^bsub>\<Gamma>' 0\<^esub> (TER\<^bsub>\<Gamma>' 0\<^esub> (h 0))
p = [y']
path \<Gamma> x p y'
x \<in> A \<Gamma>
y' \<in> B \<Gamma>

goal (1 subgoal):
 1. x \<in> RF T \<or> y' \<in> RF T
[PROOF STEP]
by(auto simp add: RF_h)
[PROOF STATE]
proof (state)
this:
x \<in> RF T \<or> y' \<in> RF T

goal (1 subgoal):
 1. \<And>p y. \<lbrakk>path \<Gamma> x p y; y \<in> B \<Gamma>\<rbrakk> \<Longrightarrow> (\<exists>z\<in>set p. z \<in> RF (T \<inter> B \<Gamma>)) \<or> x \<in> RF (T \<inter> B \<Gamma>)
[PROOF STEP]
thus "(\<exists>z\<in>set p. z \<in> RF (T \<inter> B \<Gamma>)) \<or> x \<in> RF (T \<inter> B \<Gamma>)"
[PROOF STATE]
proof (prove)
using this:
x \<in> RF T \<or> y' \<in> RF T

goal (1 subgoal):
 1. (\<exists>z\<in>set p. z \<in> RF (T \<inter> B \<Gamma>)) \<or> x \<in> RF (T \<inter> B \<Gamma>)
[PROOF STEP]
proof cases
[PROOF STATE]
proof (state)
goal (2 subgoals):
 1. x \<in> RF T \<Longrightarrow> (\<exists>z\<in>set p. z \<in> RF (T \<inter> B \<Gamma>)) \<or> x \<in> RF (T \<inter> B \<Gamma>)
 2. y' \<in> RF T \<Longrightarrow> (\<exists>z\<in>set p. z \<in> RF (T \<inter> B \<Gamma>)) \<or> x \<in> RF (T \<inter> B \<Gamma>)
[PROOF STEP]
case right
[PROOF STATE]
proof (state)
this:
y' \<in> RF T

goal (2 subgoals):
 1. x \<in> RF T \<Longrightarrow> (\<exists>z\<in>set p. z \<in> RF (T \<inter> B \<Gamma>)) \<or> x \<in> RF (T \<inter> B \<Gamma>)
 2. y' \<in> RF T \<Longrightarrow> (\<exists>z\<in>set p. z \<in> RF (T \<inter> B \<Gamma>)) \<or> x \<in> RF (T \<inter> B \<Gamma>)
[PROOF STEP]
with y' py
[PROOF STATE]
proof (chain)
picking this:
y' \<in> B \<Gamma>
p = [y']
y' \<in> RF T
[PROOF STEP]
show ?thesis
[PROOF STATE]
proof (prove)
using this:
y' \<in> B \<Gamma>
p = [y']
y' \<in> RF T

goal (1 subgoal):
 1. (\<exists>z\<in>set p. z \<in> RF (T \<inter> B \<Gamma>)) \<or> x \<in> RF (T \<inter> B \<Gamma>)
[PROOF STEP]
by(simp add: RF_in_B)
[PROOF STATE]
proof (state)
this:
(\<exists>z\<in>set p. z \<in> RF (T \<inter> B \<Gamma>)) \<or> x \<in> RF (T \<inter> B \<Gamma>)

goal (1 subgoal):
 1. x \<in> RF T \<Longrightarrow> (\<exists>z\<in>set p. z \<in> RF (T \<inter> B \<Gamma>)) \<or> x \<in> RF (T \<inter> B \<Gamma>)
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. x \<in> RF T \<Longrightarrow> (\<exists>z\<in>set p. z \<in> RF (T \<inter> B \<Gamma>)) \<or> x \<in> RF (T \<inter> B \<Gamma>)
[PROOF STEP]
case left
[PROOF STATE]
proof (state)
this:
x \<in> RF T

goal (1 subgoal):
 1. x \<in> RF T \<Longrightarrow> (\<exists>z\<in>set p. z \<in> RF (T \<inter> B \<Gamma>)) \<or> x \<in> RF (T \<inter> B \<Gamma>)
[PROOF STEP]
have "x \<notin> \<E> T"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. x \<notin> \<E> T
[PROOF STEP]
using OUT_h_\<E>[of x n] xy
[PROOF STATE]
proof (prove)
using this:
x \<in> \<E> T \<Longrightarrow> d_OUT (h n) x = 0
h n (x, y) \<noteq> 0

goal (1 subgoal):
 1. x \<notin> \<E> T
[PROOF STEP]
by(auto simp add: currentD_OUT_eq_0[OF h])
[PROOF STATE]
proof (state)
this:
x \<notin> \<E> T

goal (1 subgoal):
 1. x \<in> RF T \<Longrightarrow> (\<exists>z\<in>set p. z \<in> RF (T \<inter> B \<Gamma>)) \<or> x \<in> RF (T \<inter> B \<Gamma>)
[PROOF STEP]
with left
[PROOF STATE]
proof (chain)
picking this:
x \<in> RF T
x \<notin> \<E> T
[PROOF STEP]
have "x \<in> RF\<^sup>\<circ> T"
[PROOF STATE]
proof (prove)
using this:
x \<in> RF T
x \<notin> \<E> T

goal (1 subgoal):
 1. x \<in> RF\<^sup>\<circ> T
[PROOF STEP]
by(simp add: roofed_circ_def)
[PROOF STATE]
proof (state)
this:
x \<in> RF\<^sup>\<circ> T

goal (1 subgoal):
 1. x \<in> RF T \<Longrightarrow> (\<exists>z\<in>set p. z \<in> RF (T \<inter> B \<Gamma>)) \<or> x \<in> RF (T \<inter> B \<Gamma>)
[PROOF STEP]
from RF_circ_edge_forward[OF this, of y'] p py
[PROOF STATE]
proof (chain)
picking this:
edge \<Gamma> x y' \<Longrightarrow> y' \<in> RF T
path \<Gamma> x p y'
p = [y']
[PROOF STEP]
have "y' \<in> RF T"
[PROOF STATE]
proof (prove)
using this:
edge \<Gamma> x y' \<Longrightarrow> y' \<in> RF T
path \<Gamma> x p y'
p = [y']

goal (1 subgoal):
 1. y' \<in> RF T
[PROOF STEP]
by(simp add: rtrancl_path_simps)
[PROOF STATE]
proof (state)
this:
y' \<in> RF T

goal (1 subgoal):
 1. x \<in> RF T \<Longrightarrow> (\<exists>z\<in>set p. z \<in> RF (T \<inter> B \<Gamma>)) \<or> x \<in> RF (T \<inter> B \<Gamma>)
[PROOF STEP]
with y'
[PROOF STATE]
proof (chain)
picking this:
y' \<in> B \<Gamma>
y' \<in> RF T
[PROOF STEP]
have "y' \<in> T"
[PROOF STATE]
proof (prove)
using this:
y' \<in> B \<Gamma>
y' \<in> RF T

goal (1 subgoal):
 1. y' \<in> T
[PROOF STEP]
by(simp add: RF_in_B)
[PROOF STATE]
proof (state)
this:
y' \<in> T

goal (1 subgoal):
 1. x \<in> RF T \<Longrightarrow> (\<exists>z\<in>set p. z \<in> RF (T \<inter> B \<Gamma>)) \<or> x \<in> RF (T \<inter> B \<Gamma>)
[PROOF STEP]
with y'
[PROOF STATE]
proof (chain)
picking this:
y' \<in> B \<Gamma>
y' \<in> T
[PROOF STEP]
show ?thesis
[PROOF STATE]
proof (prove)
using this:
y' \<in> B \<Gamma>
y' \<in> T

goal (1 subgoal):
 1. (\<exists>z\<in>set p. z \<in> RF (T \<inter> B \<Gamma>)) \<or> x \<in> RF (T \<inter> B \<Gamma>)
[PROOF STEP]
using py
[PROOF STATE]
proof (prove)
using this:
y' \<in> B \<Gamma>
y' \<in> T
p = [y']

goal (1 subgoal):
 1. (\<exists>z\<in>set p. z \<in> RF (T \<inter> B \<Gamma>)) \<or> x \<in> RF (T \<inter> B \<Gamma>)
[PROOF STEP]
by(auto intro: roofed_greaterI)
[PROOF STATE]
proof (state)
this:
(\<exists>z\<in>set p. z \<in> RF (T \<inter> B \<Gamma>)) \<or> x \<in> RF (T \<inter> B \<Gamma>)

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
(\<exists>z\<in>set p. z \<in> RF (T \<inter> B \<Gamma>)) \<or> x \<in> RF (T \<inter> B \<Gamma>)

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
x \<in> RF (RF (T \<inter> B \<Gamma>))

goal (1 subgoal):
 1. x \<in> A \<Gamma> \<Longrightarrow> d_OUT (h n) x = 0
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
x \<in> RF (RF (T \<inter> B \<Gamma>))

goal (1 subgoal):
 1. x \<in> A \<Gamma> \<Longrightarrow> d_OUT (h n) x = 0
[PROOF STEP]
have "y \<in> T"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. y \<in> T
[PROOF STEP]
using IN_h_nT[of y n] y xy
[PROOF STATE]
proof (prove)
using this:
y \<notin> RF T \<Longrightarrow> d_IN (h n) y = 0
y \<in> B \<Gamma>
h n (x, y) \<noteq> 0

goal (1 subgoal):
 1. y \<in> T
[PROOF STEP]
by(auto simp add: RF_in_B currentD_IN_eq_0[OF h])
[PROOF STATE]
proof (state)
this:
y \<in> T

goal (1 subgoal):
 1. x \<in> A \<Gamma> \<Longrightarrow> d_OUT (h n) x = 0
[PROOF STEP]
with p x y disjoint
[PROOF STATE]
proof (chain)
picking this:
path \<Gamma> x [y] y
x \<in> A \<Gamma>
y \<in> B \<Gamma>
A \<Gamma> \<inter> B \<Gamma> = {}
y \<in> T
[PROOF STEP]
have "essential \<Gamma> (T \<inter> B \<Gamma>) (RF (T \<inter> B \<Gamma>) \<inter> A \<Gamma>) x"
[PROOF STATE]
proof (prove)
using this:
path \<Gamma> x [y] y
x \<in> A \<Gamma>
y \<in> B \<Gamma>
A \<Gamma> \<inter> B \<Gamma> = {}
y \<in> T

goal (1 subgoal):
 1. essential \<Gamma> (T \<inter> B \<Gamma>) (RF (T \<inter> B \<Gamma>) \<inter> A \<Gamma>) x
[PROOF STEP]
by(auto intro!: essentialI)
[PROOF STATE]
proof (state)
this:
essential \<Gamma> (T \<inter> B \<Gamma>) (RF (T \<inter> B \<Gamma>) \<inter> A \<Gamma>) x

goal (1 subgoal):
 1. x \<in> A \<Gamma> \<Longrightarrow> d_OUT (h n) x = 0
[PROOF STEP]
ultimately
[PROOF STATE]
proof (chain)
picking this:
x \<in> A \<Gamma>
y \<in> B \<Gamma>
x \<in> RF (RF (T \<inter> B \<Gamma>))
essential \<Gamma> (T \<inter> B \<Gamma>) (RF (T \<inter> B \<Gamma>) \<inter> A \<Gamma>) x
[PROOF STEP]
have "x \<in> S"
[PROOF STATE]
proof (prove)
using this:
x \<in> A \<Gamma>
y \<in> B \<Gamma>
x \<in> RF (RF (T \<inter> B \<Gamma>))
essential \<Gamma> (T \<inter> B \<Gamma>) (RF (T \<inter> B \<Gamma>) \<inter> A \<Gamma>) x

goal (1 subgoal):
 1. x \<in> S
[PROOF STEP]
unfolding roofed_idem
[PROOF STATE]
proof (prove)
using this:
x \<in> A \<Gamma>
y \<in> B \<Gamma>
x \<in> RF (T \<inter> B \<Gamma>)
essential \<Gamma> (T \<inter> B \<Gamma>) (RF (T \<inter> B \<Gamma>) \<inter> A \<Gamma>) x

goal (1 subgoal):
 1. x \<in> S
[PROOF STEP]
by(simp add: S_def)
[PROOF STATE]
proof (state)
this:
x \<in> S

goal (1 subgoal):
 1. x \<in> A \<Gamma> \<Longrightarrow> d_OUT (h n) x = 0
[PROOF STEP]
with that
[PROOF STATE]
proof (chain)
picking this:
x \<notin> S
x \<in> S
[PROOF STEP]
show ?thesis
[PROOF STATE]
proof (prove)
using this:
x \<notin> S
x \<in> S

goal (1 subgoal):
 1. d_OUT (h n) x = 0
[PROOF STEP]
by contradiction
[PROOF STATE]
proof (state)
this:
d_OUT (h n) x = 0

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
d_OUT (h n) x = 0

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
?x \<notin> S \<Longrightarrow> d_OUT (h ?n) ?x = 0

goal (1 subgoal):
 1. \<not> (\<exists>\<epsilon>>0. \<epsilon> < \<delta> \<and> \<not> hindered (reduce_weight \<Gamma> b \<epsilon>)) \<Longrightarrow> False
[PROOF STEP]
have B_vertex: "vertex \<Gamma>_h y" if T: "y \<in> T" and B: "y \<in> B \<Gamma>" and w: "weight \<Gamma> y > 0" for y
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. vertex \<Gamma>_h y
[PROOF STEP]
proof -
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. vertex \<Gamma>_h y
[PROOF STEP]
from T B disjoint \<epsilon>_less[of 0] w
[PROOF STATE]
proof (chain)
picking this:
y \<in> T
y \<in> B \<Gamma>
A \<Gamma> \<inter> B \<Gamma> = {}
\<epsilon> 0 < wb
0 < weight \<Gamma> y
[PROOF STEP]
have "d_IN (h 0) y > 0"
[PROOF STATE]
proof (prove)
using this:
y \<in> T
y \<in> B \<Gamma>
A \<Gamma> \<inter> B \<Gamma> = {}
\<epsilon> 0 < wb
0 < weight \<Gamma> y

goal (1 subgoal):
 1. 0 < d_IN (h 0) y
[PROOF STEP]
using IN_h_\<E>[of y 0]
[PROOF STATE]
proof (prove)
using this:
y \<in> T
y \<in> B \<Gamma>
A \<Gamma> \<inter> B \<Gamma> = {}
\<epsilon> 0 < wb
0 < weight \<Gamma> y
\<lbrakk>y \<in> \<E> T; y \<notin> A \<Gamma>\<rbrakk> \<Longrightarrow> d_IN (h 0) y = weight (\<Gamma>' 0) y

goal (1 subgoal):
 1. 0 < d_IN (h 0) y
[PROOF STEP]
by(cases "y \<in> A \<Gamma>")(auto simp add: essential_BI wb_conv ennreal_minus_if)
[PROOF STATE]
proof (state)
this:
0 < d_IN (h 0) y

goal (1 subgoal):
 1. vertex \<Gamma>_h y
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
0 < d_IN (h 0) y
[PROOF STEP]
obtain x where xy: "h 0 (x, y) \<noteq> 0"
[PROOF STATE]
proof (prove)
using this:
0 < d_IN (h 0) y

goal (1 subgoal):
 1. (\<And>x. h 0 (x, y) \<noteq> 0 \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
using currentD_IN_eq_0[OF h, of 0 y]
[PROOF STATE]
proof (prove)
using this:
0 < d_IN (h 0) y
(d_IN (h 0) y = 0) = (\<forall>ya. h 0 (ya, y) = 0)

goal (1 subgoal):
 1. (\<And>x. h 0 (x, y) \<noteq> 0 \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by(auto)
[PROOF STATE]
proof (state)
this:
h 0 (x, y) \<noteq> 0

goal (1 subgoal):
 1. vertex \<Gamma>_h y
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
h 0 (x, y) \<noteq> 0
[PROOF STEP]
have edge: "edge \<Gamma> x y"
[PROOF STATE]
proof (prove)
using this:
h 0 (x, y) \<noteq> 0

goal (1 subgoal):
 1. edge \<Gamma> x y
[PROOF STEP]
using currentD_outside[OF h]
[PROOF STATE]
proof (prove)
using this:
h 0 (x, y) \<noteq> 0
\<not> edge (\<Gamma>' ?n1) ?x ?y \<Longrightarrow> h ?n1 (?x, ?y) = 0

goal (1 subgoal):
 1. edge \<Gamma> x y
[PROOF STEP]
by(auto)
[PROOF STATE]
proof (state)
this:
edge \<Gamma> x y

goal (1 subgoal):
 1. vertex \<Gamma>_h y
[PROOF STEP]
from xy
[PROOF STATE]
proof (chain)
picking this:
h 0 (x, y) \<noteq> 0
[PROOF STEP]
have "d_OUT (h 0) x \<noteq> 0"
[PROOF STATE]
proof (prove)
using this:
h 0 (x, y) \<noteq> 0

goal (1 subgoal):
 1. d_OUT (h 0) x \<noteq> 0
[PROOF STEP]
by(auto simp add: currentD_OUT_eq_0[OF h])
[PROOF STATE]
proof (state)
this:
d_OUT (h 0) x \<noteq> 0

goal (1 subgoal):
 1. vertex \<Gamma>_h y
[PROOF STEP]
hence "x \<in> S"
[PROOF STATE]
proof (prove)
using this:
d_OUT (h 0) x \<noteq> 0

goal (1 subgoal):
 1. x \<in> S
[PROOF STEP]
using OUT_not_S[of x 0]
[PROOF STATE]
proof (prove)
using this:
d_OUT (h 0) x \<noteq> 0
x \<notin> S \<Longrightarrow> d_OUT (h 0) x = 0

goal (1 subgoal):
 1. x \<in> S
[PROOF STEP]
by(auto)
[PROOF STATE]
proof (state)
this:
x \<in> S

goal (1 subgoal):
 1. vertex \<Gamma>_h y
[PROOF STEP]
with edge T B
[PROOF STATE]
proof (chain)
picking this:
edge \<Gamma> x y
y \<in> T
y \<in> B \<Gamma>
x \<in> S
[PROOF STEP]
show ?thesis
[PROOF STATE]
proof (prove)
using this:
edge \<Gamma> x y
y \<in> T
y \<in> B \<Gamma>
x \<in> S

goal (1 subgoal):
 1. vertex \<Gamma>_h y
[PROOF STEP]
by(simp add: vertexI2)
[PROOF STATE]
proof (state)
this:
vertex \<Gamma>_h y

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
\<lbrakk>?y \<in> T; ?y \<in> B \<Gamma>; 0 < weight \<Gamma> ?y\<rbrakk> \<Longrightarrow> vertex \<Gamma>_h ?y

goal (1 subgoal):
 1. \<not> (\<exists>\<epsilon>>0. \<epsilon> < \<delta> \<and> \<not> hindered (reduce_weight \<Gamma> b \<epsilon>)) \<Longrightarrow> False
[PROOF STEP]
have \<Gamma>_h: "countable_bipartite_web \<Gamma>_h"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. countable_bipartite_web \<Gamma>_h
[PROOF STEP]
proof
[PROOF STATE]
proof (state)
goal (7 subgoals):
 1. \<^bold>V\<^bsub>\<Gamma>_h\<^esub> \<subseteq> A \<Gamma>_h \<union> B \<Gamma>_h
 2. A \<Gamma>_h \<subseteq> \<^bold>V\<^bsub>\<Gamma>_h\<^esub>
 3. \<And>x y. edge \<Gamma>_h x y \<Longrightarrow> x \<in> A \<Gamma>_h \<and> y \<in> B \<Gamma>_h
 4. A \<Gamma>_h \<inter> B \<Gamma>_h = {}
 5. \<And>x. x \<notin> \<^bold>V\<^bsub>\<Gamma>_h\<^esub> \<Longrightarrow> weight \<Gamma>_h x = 0
 6. \<And>x. weight \<Gamma>_h x \<noteq> \<top>
 7. countable \<^bold>E\<^bsub>\<Gamma>_h\<^esub>
[PROOF STEP]
show "\<^bold>V\<^bsub>\<Gamma>_h\<^esub> \<subseteq> A \<Gamma>_h \<union> B \<Gamma>_h"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<^bold>V\<^bsub>\<Gamma>_h\<^esub> \<subseteq> A \<Gamma>_h \<union> B \<Gamma>_h
[PROOF STEP]
by(auto simp add: vertex_def)
[PROOF STATE]
proof (state)
this:
\<^bold>V\<^bsub>\<Gamma>_h\<^esub> \<subseteq> A \<Gamma>_h \<union> B \<Gamma>_h

goal (6 subgoals):
 1. A \<Gamma>_h \<subseteq> \<^bold>V\<^bsub>\<Gamma>_h\<^esub>
 2. \<And>x y. edge \<Gamma>_h x y \<Longrightarrow> x \<in> A \<Gamma>_h \<and> y \<in> B \<Gamma>_h
 3. A \<Gamma>_h \<inter> B \<Gamma>_h = {}
 4. \<And>x. x \<notin> \<^bold>V\<^bsub>\<Gamma>_h\<^esub> \<Longrightarrow> weight \<Gamma>_h x = 0
 5. \<And>x. weight \<Gamma>_h x \<noteq> \<top>
 6. countable \<^bold>E\<^bsub>\<Gamma>_h\<^esub>
[PROOF STEP]
show "A \<Gamma>_h \<subseteq> \<^bold>V\<^bsub>\<Gamma>_h\<^esub>"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. A \<Gamma>_h \<subseteq> \<^bold>V\<^bsub>\<Gamma>_h\<^esub>
[PROOF STEP]
using S_vertex
[PROOF STATE]
proof (prove)
using this:
?x \<in> S \<Longrightarrow> vertex \<Gamma>_h ?x

goal (1 subgoal):
 1. A \<Gamma>_h \<subseteq> \<^bold>V\<^bsub>\<Gamma>_h\<^esub>
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
A \<Gamma>_h \<subseteq> \<^bold>V\<^bsub>\<Gamma>_h\<^esub>

goal (5 subgoals):
 1. \<And>x y. edge \<Gamma>_h x y \<Longrightarrow> x \<in> A \<Gamma>_h \<and> y \<in> B \<Gamma>_h
 2. A \<Gamma>_h \<inter> B \<Gamma>_h = {}
 3. \<And>x. x \<notin> \<^bold>V\<^bsub>\<Gamma>_h\<^esub> \<Longrightarrow> weight \<Gamma>_h x = 0
 4. \<And>x. weight \<Gamma>_h x \<noteq> \<top>
 5. countable \<^bold>E\<^bsub>\<Gamma>_h\<^esub>
[PROOF STEP]
show "x \<in> A \<Gamma>_h \<and> y \<in> B \<Gamma>_h" if "edge \<Gamma>_h x y" for x y
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. x \<in> A \<Gamma>_h \<and> y \<in> B \<Gamma>_h
[PROOF STEP]
using that
[PROOF STATE]
proof (prove)
using this:
edge \<Gamma>_h x y

goal (1 subgoal):
 1. x \<in> A \<Gamma>_h \<and> y \<in> B \<Gamma>_h
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
edge \<Gamma>_h ?x ?y \<Longrightarrow> ?x \<in> A \<Gamma>_h \<and> ?y \<in> B \<Gamma>_h

goal (4 subgoals):
 1. A \<Gamma>_h \<inter> B \<Gamma>_h = {}
 2. \<And>x. x \<notin> \<^bold>V\<^bsub>\<Gamma>_h\<^esub> \<Longrightarrow> weight \<Gamma>_h x = 0
 3. \<And>x. weight \<Gamma>_h x \<noteq> \<top>
 4. countable \<^bold>E\<^bsub>\<Gamma>_h\<^esub>
[PROOF STEP]
show "A \<Gamma>_h \<inter> B \<Gamma>_h = {}"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. A \<Gamma>_h \<inter> B \<Gamma>_h = {}
[PROOF STEP]
using disjoint
[PROOF STATE]
proof (prove)
using this:
A \<Gamma> \<inter> B \<Gamma> = {}

goal (1 subgoal):
 1. A \<Gamma>_h \<inter> B \<Gamma>_h = {}
[PROOF STEP]
by(auto simp add: S_def)
[PROOF STATE]
proof (state)
this:
A \<Gamma>_h \<inter> B \<Gamma>_h = {}

goal (3 subgoals):
 1. \<And>x. x \<notin> \<^bold>V\<^bsub>\<Gamma>_h\<^esub> \<Longrightarrow> weight \<Gamma>_h x = 0
 2. \<And>x. weight \<Gamma>_h x \<noteq> \<top>
 3. countable \<^bold>E\<^bsub>\<Gamma>_h\<^esub>
[PROOF STEP]
have "\<^bold>E\<^bsub>\<Gamma>_h\<^esub> \<subseteq> \<^bold>E"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<^bold>E\<^bsub>\<Gamma>_h\<^esub> \<subseteq> \<^bold>E
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
\<^bold>E\<^bsub>\<Gamma>_h\<^esub> \<subseteq> \<^bold>E

goal (3 subgoals):
 1. \<And>x. x \<notin> \<^bold>V\<^bsub>\<Gamma>_h\<^esub> \<Longrightarrow> weight \<Gamma>_h x = 0
 2. \<And>x. weight \<Gamma>_h x \<noteq> \<top>
 3. countable \<^bold>E\<^bsub>\<Gamma>_h\<^esub>
[PROOF STEP]
thus "countable \<^bold>E\<^bsub>\<Gamma>_h\<^esub>"
[PROOF STATE]
proof (prove)
using this:
\<^bold>E\<^bsub>\<Gamma>_h\<^esub> \<subseteq> \<^bold>E

goal (1 subgoal):
 1. countable \<^bold>E\<^bsub>\<Gamma>_h\<^esub>
[PROOF STEP]
by(rule countable_subset) simp
[PROOF STATE]
proof (state)
this:
countable \<^bold>E\<^bsub>\<Gamma>_h\<^esub>

goal (2 subgoals):
 1. \<And>x. x \<notin> \<^bold>V\<^bsub>\<Gamma>_h\<^esub> \<Longrightarrow> weight \<Gamma>_h x = 0
 2. \<And>x. weight \<Gamma>_h x \<noteq> \<top>
[PROOF STEP]
show "weight \<Gamma>_h x \<noteq> \<top>" for x
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. weight \<Gamma>_h x \<noteq> \<top>
[PROOF STEP]
by(simp split: split_indicator)
[PROOF STATE]
proof (state)
this:
weight \<Gamma>_h ?x \<noteq> \<top>

goal (1 subgoal):
 1. \<And>x. x \<notin> \<^bold>V\<^bsub>\<Gamma>_h\<^esub> \<Longrightarrow> weight \<Gamma>_h x = 0
[PROOF STEP]
show "weight \<Gamma>_h x = 0" if "x \<notin> \<^bold>V\<^bsub>\<Gamma>_h\<^esub>" for x
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. weight \<Gamma>_h x = 0
[PROOF STEP]
using that S_vertex B_vertex[of x]
[PROOF STATE]
proof (prove)
using this:
x \<notin> \<^bold>V\<^bsub>\<Gamma>_h\<^esub>
?x \<in> S \<Longrightarrow> vertex \<Gamma>_h ?x
\<lbrakk>x \<in> T; x \<in> B \<Gamma>; 0 < weight \<Gamma> x\<rbrakk> \<Longrightarrow> vertex \<Gamma>_h x

goal (1 subgoal):
 1. weight \<Gamma>_h x = 0
[PROOF STEP]
by(cases "weight \<Gamma>_h x > 0")(auto split: split_indicator)
[PROOF STATE]
proof (state)
this:
?x \<notin> \<^bold>V\<^bsub>\<Gamma>_h\<^esub> \<Longrightarrow> weight \<Gamma>_h ?x = 0

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
countable_bipartite_web \<Gamma>_h

goal (1 subgoal):
 1. \<not> (\<exists>\<epsilon>>0. \<epsilon> < \<delta> \<and> \<not> hindered (reduce_weight \<Gamma> b \<epsilon>)) \<Longrightarrow> False
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
countable_bipartite_web \<Gamma>_h
[PROOF STEP]
interpret \<Gamma>_h: countable_bipartite_web \<Gamma>_h
[PROOF STATE]
proof (prove)
using this:
countable_bipartite_web \<Gamma>_h

goal (1 subgoal):
 1. countable_bipartite_web \<Gamma>_h
[PROOF STEP]
.
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. \<not> (\<exists>\<epsilon>>0. \<epsilon> < \<delta> \<and> \<not> hindered (reduce_weight \<Gamma> b \<epsilon>)) \<Longrightarrow> False
[PROOF STEP]
have essential_T: "essential \<Gamma> (B \<Gamma>) T = essential \<Gamma> (B \<Gamma>) (TER\<^bsub>\<Gamma>' 0\<^esub> (h 0))"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. essential \<Gamma> (B \<Gamma>) T = essential \<Gamma> (B \<Gamma>) (TER\<^bsub>\<Gamma>' 0\<^esub> (h 0))
[PROOF STEP]
proof(rule ext iffI)+
[PROOF STATE]
proof (state)
goal (2 subgoals):
 1. \<And>x. essential \<Gamma> (B \<Gamma>) T x \<Longrightarrow> essential \<Gamma> (B \<Gamma>) (TER\<^bsub>\<Gamma>' 0\<^esub> (h 0)) x
 2. \<And>x. essential \<Gamma> (B \<Gamma>) (TER\<^bsub>\<Gamma>' 0\<^esub> (h 0)) x \<Longrightarrow> essential \<Gamma> (B \<Gamma>) T x
[PROOF STEP]
fix x
[PROOF STATE]
proof (state)
goal (2 subgoals):
 1. \<And>x. essential \<Gamma> (B \<Gamma>) T x \<Longrightarrow> essential \<Gamma> (B \<Gamma>) (TER\<^bsub>\<Gamma>' 0\<^esub> (h 0)) x
 2. \<And>x. essential \<Gamma> (B \<Gamma>) (TER\<^bsub>\<Gamma>' 0\<^esub> (h 0)) x \<Longrightarrow> essential \<Gamma> (B \<Gamma>) T x
[PROOF STEP]
assume "essential \<Gamma> (B \<Gamma>) T x"
[PROOF STATE]
proof (state)
this:
essential \<Gamma> (B \<Gamma>) T x

goal (2 subgoals):
 1. \<And>x. essential \<Gamma> (B \<Gamma>) T x \<Longrightarrow> essential \<Gamma> (B \<Gamma>) (TER\<^bsub>\<Gamma>' 0\<^esub> (h 0)) x
 2. \<And>x. essential \<Gamma> (B \<Gamma>) (TER\<^bsub>\<Gamma>' 0\<^esub> (h 0)) x \<Longrightarrow> essential \<Gamma> (B \<Gamma>) T x
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
essential \<Gamma> (B \<Gamma>) T x
[PROOF STEP]
obtain p y where p: "path \<Gamma> x p y" and y: "y \<in> B \<Gamma>" and distinct: "distinct (x # p)"
      and bypass: "\<And>z. z \<in> set p \<Longrightarrow> z \<notin> RF T"
[PROOF STATE]
proof (prove)
using this:
essential \<Gamma> (B \<Gamma>) T x

goal (1 subgoal):
 1. (\<And>p y. \<lbrakk>path \<Gamma> x p y; y \<in> B \<Gamma>; distinct (x # p); \<And>z. z \<in> set p \<Longrightarrow> z \<notin> RF T\<rbrakk> \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by(rule essentialE_RF)auto
[PROOF STATE]
proof (state)
this:
path \<Gamma> x p y
y \<in> B \<Gamma>
distinct (x # p)
?z \<in> set p \<Longrightarrow> ?z \<notin> RF T

goal (2 subgoals):
 1. \<And>x. essential \<Gamma> (B \<Gamma>) T x \<Longrightarrow> essential \<Gamma> (B \<Gamma>) (TER\<^bsub>\<Gamma>' 0\<^esub> (h 0)) x
 2. \<And>x. essential \<Gamma> (B \<Gamma>) (TER\<^bsub>\<Gamma>' 0\<^esub> (h 0)) x \<Longrightarrow> essential \<Gamma> (B \<Gamma>) T x
[PROOF STEP]
from bypass
[PROOF STATE]
proof (chain)
picking this:
?z \<in> set p \<Longrightarrow> ?z \<notin> RF T
[PROOF STEP]
have bypass': "\<And>z. z \<in> set p \<Longrightarrow> z \<notin> TER\<^bsub>\<Gamma>' 0\<^esub> (h 0)"
[PROOF STATE]
proof (prove)
using this:
?z \<in> set p \<Longrightarrow> ?z \<notin> RF T

goal (1 subgoal):
 1. \<And>z. z \<in> set p \<Longrightarrow> z \<notin> TER\<^bsub>\<Gamma>' 0\<^esub> (h 0)
[PROOF STEP]
unfolding RF_h[of 0, symmetric]
[PROOF STATE]
proof (prove)
using this:
?z \<in> set p \<Longrightarrow> ?z \<notin> RF (TER\<^bsub>\<Gamma>' 0\<^esub> (h 0))

goal (1 subgoal):
 1. \<And>z. z \<in> set p \<Longrightarrow> z \<notin> TER\<^bsub>\<Gamma>' 0\<^esub> (h 0)
[PROOF STEP]
by(blast intro: roofed_greaterI)
[PROOF STATE]
proof (state)
this:
?z \<in> set p \<Longrightarrow> ?z \<notin> TER\<^bsub>\<Gamma>' 0\<^esub> (h 0)

goal (2 subgoals):
 1. \<And>x. essential \<Gamma> (B \<Gamma>) T x \<Longrightarrow> essential \<Gamma> (B \<Gamma>) (TER\<^bsub>\<Gamma>' 0\<^esub> (h 0)) x
 2. \<And>x. essential \<Gamma> (B \<Gamma>) (TER\<^bsub>\<Gamma>' 0\<^esub> (h 0)) x \<Longrightarrow> essential \<Gamma> (B \<Gamma>) T x
[PROOF STEP]
show "essential \<Gamma> (B \<Gamma>) (TER\<^bsub>\<Gamma>' 0\<^esub> (h 0)) x"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. essential \<Gamma> (B \<Gamma>) (TER\<^bsub>\<Gamma>' 0\<^esub> (h 0)) x
[PROOF STEP]
using p y
[PROOF STATE]
proof (prove)
using this:
path \<Gamma> x p y
y \<in> B \<Gamma>

goal (1 subgoal):
 1. essential \<Gamma> (B \<Gamma>) (TER\<^bsub>\<Gamma>' 0\<^esub> (h 0)) x
[PROOF STEP]
by(blast intro: essentialI dest: bypass')
[PROOF STATE]
proof (state)
this:
essential \<Gamma> (B \<Gamma>) (TER\<^bsub>\<Gamma>' 0\<^esub> (h 0)) x

goal (1 subgoal):
 1. \<And>x. essential \<Gamma> (B \<Gamma>) (TER\<^bsub>\<Gamma>' 0\<^esub> (h 0)) x \<Longrightarrow> essential \<Gamma> (B \<Gamma>) T x
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. \<And>x. essential \<Gamma> (B \<Gamma>) (TER\<^bsub>\<Gamma>' 0\<^esub> (h 0)) x \<Longrightarrow> essential \<Gamma> (B \<Gamma>) T x
[PROOF STEP]
fix x
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. \<And>x. essential \<Gamma> (B \<Gamma>) (TER\<^bsub>\<Gamma>' 0\<^esub> (h 0)) x \<Longrightarrow> essential \<Gamma> (B \<Gamma>) T x
[PROOF STEP]
assume "essential \<Gamma> (B \<Gamma>) (TER\<^bsub>\<Gamma>' 0\<^esub> (h 0)) x"
[PROOF STATE]
proof (state)
this:
essential \<Gamma> (B \<Gamma>) (TER\<^bsub>\<Gamma>' 0\<^esub> (h 0)) x

goal (1 subgoal):
 1. \<And>x. essential \<Gamma> (B \<Gamma>) (TER\<^bsub>\<Gamma>' 0\<^esub> (h 0)) x \<Longrightarrow> essential \<Gamma> (B \<Gamma>) T x
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
essential \<Gamma> (B \<Gamma>) (TER\<^bsub>\<Gamma>' 0\<^esub> (h 0)) x
[PROOF STEP]
obtain p y where p: "path \<Gamma> x p y" and y: "y \<in> B \<Gamma>" and distinct: "distinct (x # p)"
      and bypass: "\<And>z. z \<in> set p \<Longrightarrow> z \<notin> RF (TER\<^bsub>\<Gamma>' 0\<^esub> (h 0))"
[PROOF STATE]
proof (prove)
using this:
essential \<Gamma> (B \<Gamma>) (TER\<^bsub>\<Gamma>' 0\<^esub> (h 0)) x

goal (1 subgoal):
 1. (\<And>p y. \<lbrakk>path \<Gamma> x p y; y \<in> B \<Gamma>; distinct (x # p); \<And>z. z \<in> set p \<Longrightarrow> z \<notin> RF (TER\<^bsub>\<Gamma>' 0\<^esub> (h 0))\<rbrakk> \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by(rule essentialE_RF)auto
[PROOF STATE]
proof (state)
this:
path \<Gamma> x p y
y \<in> B \<Gamma>
distinct (x # p)
?z \<in> set p \<Longrightarrow> ?z \<notin> RF (TER\<^bsub>\<Gamma>' 0\<^esub> (h 0))

goal (1 subgoal):
 1. \<And>x. essential \<Gamma> (B \<Gamma>) (TER\<^bsub>\<Gamma>' 0\<^esub> (h 0)) x \<Longrightarrow> essential \<Gamma> (B \<Gamma>) T x
[PROOF STEP]
from bypass
[PROOF STATE]
proof (chain)
picking this:
?z \<in> set p \<Longrightarrow> ?z \<notin> RF (TER\<^bsub>\<Gamma>' 0\<^esub> (h 0))
[PROOF STEP]
have bypass': "\<And>z. z \<in> set p \<Longrightarrow> z \<notin> T"
[PROOF STATE]
proof (prove)
using this:
?z \<in> set p \<Longrightarrow> ?z \<notin> RF (TER\<^bsub>\<Gamma>' 0\<^esub> (h 0))

goal (1 subgoal):
 1. \<And>z. z \<in> set p \<Longrightarrow> z \<notin> T
[PROOF STEP]
unfolding RF_h[of 0]
[PROOF STATE]
proof (prove)
using this:
?z \<in> set p \<Longrightarrow> ?z \<notin> RF T

goal (1 subgoal):
 1. \<And>z. z \<in> set p \<Longrightarrow> z \<notin> T
[PROOF STEP]
by(blast intro: roofed_greaterI)
[PROOF STATE]
proof (state)
this:
?z \<in> set p \<Longrightarrow> ?z \<notin> T

goal (1 subgoal):
 1. \<And>x. essential \<Gamma> (B \<Gamma>) (TER\<^bsub>\<Gamma>' 0\<^esub> (h 0)) x \<Longrightarrow> essential \<Gamma> (B \<Gamma>) T x
[PROOF STEP]
show "essential \<Gamma> (B \<Gamma>) T x"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. essential \<Gamma> (B \<Gamma>) T x
[PROOF STEP]
using p y
[PROOF STATE]
proof (prove)
using this:
path \<Gamma> x p y
y \<in> B \<Gamma>

goal (1 subgoal):
 1. essential \<Gamma> (B \<Gamma>) T x
[PROOF STEP]
by(blast intro: essentialI dest: bypass')
[PROOF STATE]
proof (state)
this:
essential \<Gamma> (B \<Gamma>) T x

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
essential \<Gamma> (B \<Gamma>) T = essential \<Gamma> (B \<Gamma>) (TER\<^bsub>\<Gamma>' 0\<^esub> (h 0))

goal (1 subgoal):
 1. \<not> (\<exists>\<epsilon>>0. \<epsilon> < \<delta> \<and> \<not> hindered (reduce_weight \<Gamma> b \<epsilon>)) \<Longrightarrow> False
[PROOF STEP]
have h': "current \<Gamma>_h (h n)" for n
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. current \<Gamma>_h (h n)
[PROOF STEP]
proof
[PROOF STATE]
proof (state)
goal (3 subgoals):
 1. \<And>x. d_OUT (h n) x \<le> weight \<Gamma>_h x
 2. \<And>x. d_IN (h n) x \<le> weight \<Gamma>_h x
 3. \<And>e. e \<notin> \<^bold>E\<^bsub>\<Gamma>_h\<^esub> \<Longrightarrow> h n e = 0
[PROOF STEP]
show "d_OUT (h n) x \<le> weight \<Gamma>_h x" for x
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. d_OUT (h n) x \<le> weight \<Gamma>_h x
[PROOF STEP]
using currentD_weight_OUT[OF h, of n x] \<epsilon>_nonneg[of n] \<Gamma>'.currentD_OUT'[OF h, of x n] OUT_not_S
[PROOF STATE]
proof (prove)
using this:
d_OUT (h n) x \<le> weight (\<Gamma>' n) x
0 \<le> \<epsilon> n
x \<notin> A (\<Gamma>' n) \<Longrightarrow> d_OUT (h n) x = 0
?x \<notin> S \<Longrightarrow> d_OUT (h ?n) ?x = 0

goal (1 subgoal):
 1. d_OUT (h n) x \<le> weight \<Gamma>_h x
[PROOF STEP]
by(auto split: split_indicator if_split_asm elim: order_trans intro: diff_le_self_ennreal in_roofed_mono simp add: OUT_h_b  roofed_circ_def)
[PROOF STATE]
proof (state)
this:
d_OUT (h n) ?x \<le> weight \<Gamma>_h ?x

goal (2 subgoals):
 1. \<And>x. d_IN (h n) x \<le> weight \<Gamma>_h x
 2. \<And>e. e \<notin> \<^bold>E\<^bsub>\<Gamma>_h\<^esub> \<Longrightarrow> h n e = 0
[PROOF STEP]
show "d_IN (h n) x \<le> weight \<Gamma>_h x" for x
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. d_IN (h n) x \<le> weight \<Gamma>_h x
[PROOF STEP]
using currentD_weight_IN[OF h, of n x] currentD_IN[OF h, of x n] \<epsilon>_nonneg[of n] b_T b \<Gamma>'.currentD_IN'[OF h, of x n] IN_h_nT[of x n]
[PROOF STATE]
proof (prove)
using this:
d_IN (h n) x \<le> weight (\<Gamma>' n) x
x \<in> A (\<Gamma>' n) \<Longrightarrow> d_IN (h n) x = 0
0 \<le> \<epsilon> n
b \<in> T
b \<in> B \<Gamma>
x \<notin> B (\<Gamma>' n) \<Longrightarrow> d_IN (h n) x = 0
x \<notin> RF T \<Longrightarrow> d_IN (h n) x = 0

goal (1 subgoal):
 1. d_IN (h n) x \<le> weight \<Gamma>_h x
[PROOF STEP]
by(cases "x \<in> B \<Gamma>")(auto 4 3 split: split_indicator split: if_split_asm elim: order_trans intro: diff_le_self_ennreal simp add: S_def  roofed_circ_def RF_in_B)
[PROOF STATE]
proof (state)
this:
d_IN (h n) ?x \<le> weight \<Gamma>_h ?x

goal (1 subgoal):
 1. \<And>e. e \<notin> \<^bold>E\<^bsub>\<Gamma>_h\<^esub> \<Longrightarrow> h n e = 0
[PROOF STEP]
show "h n e = 0" if "e \<notin> \<^bold>E\<^bsub>\<Gamma>_h\<^esub>" for e
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. h n e = 0
[PROOF STEP]
using that OUT_not_S[of "fst e" n] currentD_outside'[OF h, of e n] \<Gamma>'.currentD_IN'[OF h, of "snd e" n] disjoint
[PROOF STATE]
proof (prove)
using this:
e \<notin> \<^bold>E\<^bsub>\<Gamma>_h\<^esub>
fst e \<notin> S \<Longrightarrow> d_OUT (h n) (fst e) = 0
e \<notin> \<^bold>E\<^bsub>\<Gamma>' n\<^esub> \<Longrightarrow> h n e = 0
snd e \<notin> B (\<Gamma>' n) \<Longrightarrow> d_IN (h n) (snd e) = 0
A \<Gamma> \<inter> B \<Gamma> = {}

goal (1 subgoal):
 1. h n e = 0
[PROOF STEP]
apply(cases "e \<in> \<^bold>E")
[PROOF STATE]
proof (prove)
goal (2 subgoals):
 1. \<lbrakk>e \<notin> \<^bold>E\<^bsub>\<Gamma>_h\<^esub>; fst e \<notin> S \<Longrightarrow> d_OUT (h n) (fst e) = 0; e \<notin> \<^bold>E\<^bsub>\<Gamma>' n\<^esub> \<Longrightarrow> h n e = 0; snd e \<notin> B (\<Gamma>' n) \<Longrightarrow> d_IN (h n) (snd e) = 0; A \<Gamma> \<inter> B \<Gamma> = {}; e \<in> \<^bold>E\<rbrakk> \<Longrightarrow> h n e = 0
 2. \<lbrakk>e \<notin> \<^bold>E\<^bsub>\<Gamma>_h\<^esub>; fst e \<notin> S \<Longrightarrow> d_OUT (h n) (fst e) = 0; e \<notin> \<^bold>E\<^bsub>\<Gamma>' n\<^esub> \<Longrightarrow> h n e = 0; snd e \<notin> B (\<Gamma>' n) \<Longrightarrow> d_IN (h n) (snd e) = 0; A \<Gamma> \<inter> B \<Gamma> = {}; e \<notin> \<^bold>E\<rbrakk> \<Longrightarrow> h n e = 0
[PROOF STEP]
apply(auto split: prod.split_asm simp add: currentD_OUT_eq_0[OF h] currentD_IN_eq_0[OF h])
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<And>x1 x2. \<lbrakk>x1 \<notin> S \<Longrightarrow> \<forall>y. h n (x1, y) = 0; x2 \<notin> B \<Gamma> \<Longrightarrow> \<forall>y. h n (y, x2) = 0; A \<Gamma> \<inter> B \<Gamma> = {}; edge \<Gamma> x1 x2; e = (x1, x2); x2 \<notin> T\<rbrakk> \<Longrightarrow> h n (x1, x2) = 0
[PROOF STEP]
apply(cases "fst e \<in> S"; clarsimp simp add: S_def)
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<And>x1 x2. \<lbrakk>x2 \<notin> B \<Gamma> \<Longrightarrow> \<forall>y. h n (y, x2) = 0; A \<Gamma> \<inter> B \<Gamma> = {}; edge \<Gamma> x1 x2; e = (x1, x2); x2 \<notin> T; x1 \<in> RF (T \<inter> B \<Gamma>); x1 \<in> A \<Gamma>; essential \<Gamma> (T \<inter> B \<Gamma>) (RF (T \<inter> B \<Gamma>) \<inter> A \<Gamma>) x1\<rbrakk> \<Longrightarrow> h n (x1, x2) = 0
[PROOF STEP]
apply(frule RF_circ_edge_forward[rotated])
[PROOF STATE]
proof (prove)
goal (2 subgoals):
 1. \<And>x1 x2. \<lbrakk>x2 \<notin> B \<Gamma> \<Longrightarrow> \<forall>y. h n (y, x2) = 0; A \<Gamma> \<inter> B \<Gamma> = {}; edge \<Gamma> x1 x2; e = (x1, x2); x2 \<notin> T; x1 \<in> RF (T \<inter> B \<Gamma>); x1 \<in> A \<Gamma>; essential \<Gamma> (T \<inter> B \<Gamma>) (RF (T \<inter> B \<Gamma>) \<inter> A \<Gamma>) x1\<rbrakk> \<Longrightarrow> x1 \<in> RF\<^sup>\<circ> (?S105 x1 x2)
 2. \<And>x1 x2. \<lbrakk>x2 \<notin> B \<Gamma> \<Longrightarrow> \<forall>y. h n (y, x2) = 0; A \<Gamma> \<inter> B \<Gamma> = {}; edge \<Gamma> x1 x2; e = (x1, x2); x2 \<notin> T; x1 \<in> RF (T \<inter> B \<Gamma>); x1 \<in> A \<Gamma>; essential \<Gamma> (T \<inter> B \<Gamma>) (RF (T \<inter> B \<Gamma>) \<inter> A \<Gamma>) x1; x2 \<in> RF (?S105 x1 x2)\<rbrakk> \<Longrightarrow> h n (x1, x2) = 0
[PROOF STEP]
apply(erule roofed_circI, blast)
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<And>x1 x2. \<lbrakk>x2 \<notin> B \<Gamma> \<Longrightarrow> \<forall>y. h n (y, x2) = 0; A \<Gamma> \<inter> B \<Gamma> = {}; edge \<Gamma> x1 x2; e = (x1, x2); x2 \<notin> T; x1 \<in> RF (T \<inter> B \<Gamma>); x1 \<in> A \<Gamma>; essential \<Gamma> (T \<inter> B \<Gamma>) (RF (T \<inter> B \<Gamma>) \<inter> A \<Gamma>) x1; x2 \<in> RF (T \<inter> B \<Gamma>)\<rbrakk> \<Longrightarrow> h n (x1, x2) = 0
[PROOF STEP]
apply(drule bipartite_E)
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<And>x1 x2. \<lbrakk>x2 \<notin> B \<Gamma> \<Longrightarrow> \<forall>y. h n (y, x2) = 0; A \<Gamma> \<inter> B \<Gamma> = {}; e = (x1, x2); x2 \<notin> T; x1 \<in> RF (T \<inter> B \<Gamma>); x1 \<in> A \<Gamma>; essential \<Gamma> (T \<inter> B \<Gamma>) (RF (T \<inter> B \<Gamma>) \<inter> A \<Gamma>) x1; x2 \<in> RF (T \<inter> B \<Gamma>); x1 \<in> A \<Gamma> \<and> x2 \<in> B \<Gamma>\<rbrakk> \<Longrightarrow> h n (x1, x2) = 0
[PROOF STEP]
apply(simp add: RF_in_B)
[PROOF STATE]
proof (prove)
goal:
No subgoals!
[PROOF STEP]
done
[PROOF STATE]
proof (state)
this:
?e \<notin> \<^bold>E\<^bsub>\<Gamma>_h\<^esub> \<Longrightarrow> h n ?e = 0

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
current \<Gamma>_h (h ?n)

goal (1 subgoal):
 1. \<not> (\<exists>\<epsilon>>0. \<epsilon> < \<delta> \<and> \<not> hindered (reduce_weight \<Gamma> b \<epsilon>)) \<Longrightarrow> False
[PROOF STEP]
have SAT_h': "B \<Gamma>_h \<inter> \<^bold>V\<^bsub>\<Gamma>_h\<^esub> - {b} \<subseteq> SAT \<Gamma>_h (h n)" for n
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. B \<Gamma>_h \<inter> \<^bold>V\<^bsub>\<Gamma>_h\<^esub> - {b} \<subseteq> SAT \<Gamma>_h (h n)
[PROOF STEP]
proof
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. \<And>x. x \<in> B \<Gamma>_h \<inter> \<^bold>V\<^bsub>\<Gamma>_h\<^esub> - {b} \<Longrightarrow> x \<in> SAT \<Gamma>_h (h n)
[PROOF STEP]
fix x
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. \<And>x. x \<in> B \<Gamma>_h \<inter> \<^bold>V\<^bsub>\<Gamma>_h\<^esub> - {b} \<Longrightarrow> x \<in> SAT \<Gamma>_h (h n)
[PROOF STEP]
assume "x \<in> B \<Gamma>_h \<inter> \<^bold>V\<^bsub>\<Gamma>_h\<^esub> - {b}"
[PROOF STATE]
proof (state)
this:
x \<in> B \<Gamma>_h \<inter> \<^bold>V\<^bsub>\<Gamma>_h\<^esub> - {b}

goal (1 subgoal):
 1. \<And>x. x \<in> B \<Gamma>_h \<inter> \<^bold>V\<^bsub>\<Gamma>_h\<^esub> - {b} \<Longrightarrow> x \<in> SAT \<Gamma>_h (h n)
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
x \<in> B \<Gamma>_h \<inter> \<^bold>V\<^bsub>\<Gamma>_h\<^esub> - {b}
[PROOF STEP]
have x: "x \<in> T" and B: "x \<in> B \<Gamma>" and b: "x \<noteq> b" and vertex: "x \<in> \<^bold>V\<^bsub>\<Gamma>_h\<^esub>"
[PROOF STATE]
proof (prove)
using this:
x \<in> B \<Gamma>_h \<inter> \<^bold>V\<^bsub>\<Gamma>_h\<^esub> - {b}

goal (1 subgoal):
 1. (x \<in> T &&& x \<in> B \<Gamma>) &&& x \<noteq> b &&& x \<in> \<^bold>V\<^bsub>\<Gamma>_h\<^esub>
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
x \<in> T
x \<in> B \<Gamma>
x \<noteq> b
x \<in> \<^bold>V\<^bsub>\<Gamma>_h\<^esub>

goal (1 subgoal):
 1. \<And>x. x \<in> B \<Gamma>_h \<inter> \<^bold>V\<^bsub>\<Gamma>_h\<^esub> - {b} \<Longrightarrow> x \<in> SAT \<Gamma>_h (h n)
[PROOF STEP]
from B disjoint
[PROOF STATE]
proof (chain)
picking this:
x \<in> B \<Gamma>
A \<Gamma> \<inter> B \<Gamma> = {}
[PROOF STEP]
have xnA: "x \<notin> A \<Gamma>"
[PROOF STATE]
proof (prove)
using this:
x \<in> B \<Gamma>
A \<Gamma> \<inter> B \<Gamma> = {}

goal (1 subgoal):
 1. x \<notin> A \<Gamma>
[PROOF STEP]
by blast
[PROOF STATE]
proof (state)
this:
x \<notin> A \<Gamma>

goal (1 subgoal):
 1. \<And>x. x \<in> B \<Gamma>_h \<inter> \<^bold>V\<^bsub>\<Gamma>_h\<^esub> - {b} \<Longrightarrow> x \<in> SAT \<Gamma>_h (h n)
[PROOF STEP]
from x B
[PROOF STATE]
proof (chain)
picking this:
x \<in> T
x \<in> B \<Gamma>
[PROOF STEP]
have "x \<in> \<E> T"
[PROOF STATE]
proof (prove)
using this:
x \<in> T
x \<in> B \<Gamma>

goal (1 subgoal):
 1. x \<in> \<E> T
[PROOF STEP]
by(simp add: essential_BI)
[PROOF STATE]
proof (state)
this:
x \<in> \<E> T

goal (1 subgoal):
 1. \<And>x. x \<in> B \<Gamma>_h \<inter> \<^bold>V\<^bsub>\<Gamma>_h\<^esub> - {b} \<Longrightarrow> x \<in> SAT \<Gamma>_h (h n)
[PROOF STEP]
hence "d_IN (h n) x = weight (\<Gamma>' n) x"
[PROOF STATE]
proof (prove)
using this:
x \<in> \<E> T

goal (1 subgoal):
 1. d_IN (h n) x = weight (\<Gamma>' n) x
[PROOF STEP]
using xnA
[PROOF STATE]
proof (prove)
using this:
x \<in> \<E> T
x \<notin> A \<Gamma>

goal (1 subgoal):
 1. d_IN (h n) x = weight (\<Gamma>' n) x
[PROOF STEP]
by(rule IN_h_\<E>)
[PROOF STATE]
proof (state)
this:
d_IN (h n) x = weight (\<Gamma>' n) x

goal (1 subgoal):
 1. \<And>x. x \<in> B \<Gamma>_h \<inter> \<^bold>V\<^bsub>\<Gamma>_h\<^esub> - {b} \<Longrightarrow> x \<in> SAT \<Gamma>_h (h n)
[PROOF STEP]
with xnA b x B
[PROOF STATE]
proof (chain)
picking this:
x \<notin> A \<Gamma>
x \<noteq> b
x \<in> T
x \<in> B \<Gamma>
d_IN (h n) x = weight (\<Gamma>' n) x
[PROOF STEP]
show "x \<in> SAT \<Gamma>_h (h n)"
[PROOF STATE]
proof (prove)
using this:
x \<notin> A \<Gamma>
x \<noteq> b
x \<in> T
x \<in> B \<Gamma>
d_IN (h n) x = weight (\<Gamma>' n) x

goal (1 subgoal):
 1. x \<in> SAT \<Gamma>_h (h n)
[PROOF STEP]
by(simp add: currentD_SAT[OF h'])
[PROOF STATE]
proof (state)
this:
x \<in> SAT \<Gamma>_h (h n)

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
B \<Gamma>_h \<inter> \<^bold>V\<^bsub>\<Gamma>_h\<^esub> - {b} \<subseteq> SAT \<Gamma>_h (h ?n)

goal (1 subgoal):
 1. \<not> (\<exists>\<epsilon>>0. \<epsilon> < \<delta> \<and> \<not> hindered (reduce_weight \<Gamma> b \<epsilon>)) \<Longrightarrow> False
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
B \<Gamma>_h \<inter> \<^bold>V\<^bsub>\<Gamma>_h\<^esub> - {b} \<subseteq> SAT \<Gamma>_h (h ?n)

goal (1 subgoal):
 1. \<not> (\<exists>\<epsilon>>0. \<epsilon> < \<delta> \<and> \<not> hindered (reduce_weight \<Gamma> b \<epsilon>)) \<Longrightarrow> False
[PROOF STEP]
have "b \<in> B \<Gamma>_h"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. b \<in> B \<Gamma>_h
[PROOF STEP]
using b essential
[PROOF STATE]
proof (prove)
using this:
b \<in> B \<Gamma>
b \<in> \<E> T

goal (1 subgoal):
 1. b \<in> B \<Gamma>_h
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
b \<in> B \<Gamma>_h

goal (1 subgoal):
 1. \<not> (\<exists>\<epsilon>>0. \<epsilon> < \<delta> \<and> \<not> hindered (reduce_weight \<Gamma> b \<epsilon>)) \<Longrightarrow> False
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
b \<in> B \<Gamma>_h

goal (1 subgoal):
 1. \<not> (\<exists>\<epsilon>>0. \<epsilon> < \<delta> \<and> \<not> hindered (reduce_weight \<Gamma> b \<epsilon>)) \<Longrightarrow> False
[PROOF STEP]
have "(\<lambda>n. min \<delta> wb * (1 / (real (n + 2)))) \<longlonglongrightarrow> 0"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (\<lambda>n. min \<delta> wb * (1 / real (n + 2))) \<longlonglongrightarrow> 0
[PROOF STEP]
apply(rule LIMSEQ_ignore_initial_segment)
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (\<lambda>a. min \<delta> wb * (1 / real a)) \<longlonglongrightarrow> 0
[PROOF STEP]
apply(rule tendsto_mult_right_zero)
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (\<lambda>x. 1 / real x) \<longlonglongrightarrow> 0
[PROOF STEP]
apply(rule lim_1_over_real_power[where s=1, simplified])
[PROOF STATE]
proof (prove)
goal:
No subgoals!
[PROOF STEP]
done
[PROOF STATE]
proof (state)
this:
(\<lambda>n. min \<delta> wb * (1 / real (n + 2))) \<longlonglongrightarrow> 0

goal (1 subgoal):
 1. \<not> (\<exists>\<epsilon>>0. \<epsilon> < \<delta> \<and> \<not> hindered (reduce_weight \<Gamma> b \<epsilon>)) \<Longrightarrow> False
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
(\<lambda>n. min \<delta> wb * (1 / real (n + 2))) \<longlonglongrightarrow> 0
[PROOF STEP]
have "(INF n. ennreal (\<epsilon> n)) = 0"
[PROOF STATE]
proof (prove)
using this:
(\<lambda>n. min \<delta> wb * (1 / real (n + 2))) \<longlonglongrightarrow> 0

goal (1 subgoal):
 1. (\<Sqinter>n. ennreal (\<epsilon> n)) = 0
[PROOF STEP]
using wb_pos \<delta>
[PROOF STATE]
proof (prove)
using this:
(\<lambda>n. min \<delta> wb * (1 / real (n + 2))) \<longlonglongrightarrow> 0
0 < wb
0 < \<delta>

goal (1 subgoal):
 1. (\<Sqinter>n. ennreal (\<epsilon> n)) = 0
[PROOF STEP]
apply(simp add: \<epsilon>_def)
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<lbrakk>(\<lambda>n. min \<delta> wb / (2 + real n)) \<longlonglongrightarrow> 0; 0 < wb; 0 < \<delta>\<rbrakk> \<Longrightarrow> (\<Sqinter>x. ennreal (min \<delta> wb / (2 + real x))) = 0
[PROOF STEP]
apply(rule INF_Lim)
[PROOF STATE]
proof (prove)
goal (2 subgoals):
 1. \<lbrakk>(\<lambda>n. min \<delta> wb / (2 + real n)) \<longlonglongrightarrow> 0; 0 < wb; 0 < \<delta>\<rbrakk> \<Longrightarrow> decseq (\<lambda>n. ennreal (min \<delta> wb / (2 + real n)))
 2. \<lbrakk>(\<lambda>n. min \<delta> wb / (2 + real n)) \<longlonglongrightarrow> 0; 0 < wb; 0 < \<delta>\<rbrakk> \<Longrightarrow> (\<lambda>n. ennreal (min \<delta> wb / (2 + real n))) \<longlonglongrightarrow> 0
[PROOF STEP]
apply(rule decseq_SucI)
[PROOF STATE]
proof (prove)
goal (2 subgoals):
 1. \<And>n. \<lbrakk>(\<lambda>n. min \<delta> wb / (2 + real n)) \<longlonglongrightarrow> 0; 0 < wb; 0 < \<delta>\<rbrakk> \<Longrightarrow> ennreal (min \<delta> wb / (2 + real (Suc n))) \<le> ennreal (min \<delta> wb / (2 + real n))
 2. \<lbrakk>(\<lambda>n. min \<delta> wb / (2 + real n)) \<longlonglongrightarrow> 0; 0 < wb; 0 < \<delta>\<rbrakk> \<Longrightarrow> (\<lambda>n. ennreal (min \<delta> wb / (2 + real n))) \<longlonglongrightarrow> 0
[PROOF STEP]
apply(simp add: field_simps min_def)
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<lbrakk>(\<lambda>n. min \<delta> wb / (2 + real n)) \<longlonglongrightarrow> 0; 0 < wb; 0 < \<delta>\<rbrakk> \<Longrightarrow> (\<lambda>n. ennreal (min \<delta> wb / (2 + real n))) \<longlonglongrightarrow> 0
[PROOF STEP]
apply(simp add: add.commute ennreal_0[symmetric] del: ennreal_0)
[PROOF STATE]
proof (prove)
goal:
No subgoals!
[PROOF STEP]
done
[PROOF STATE]
proof (state)
this:
(\<Sqinter>n. ennreal (\<epsilon> n)) = 0

goal (1 subgoal):
 1. \<not> (\<exists>\<epsilon>>0. \<epsilon> < \<delta> \<and> \<not> hindered (reduce_weight \<Gamma> b \<epsilon>)) \<Longrightarrow> False
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
(\<Sqinter>n. ennreal (\<epsilon> n)) = 0
[PROOF STEP]
have "(SUP n. d_IN (h n) b) = weight \<Gamma>_h b"
[PROOF STATE]
proof (prove)
using this:
(\<Sqinter>n. ennreal (\<epsilon> n)) = 0

goal (1 subgoal):
 1. (\<Squnion>n. d_IN (h n) b) = weight \<Gamma>_h b
[PROOF STEP]
using essential b bnA wb IN_h_\<E>[of b]
[PROOF STATE]
proof (prove)
using this:
(\<Sqinter>n. ennreal (\<epsilon> n)) = 0
b \<in> \<E> T
b \<in> B \<Gamma>
b \<notin> A \<Gamma>
0 < weight \<Gamma> b
\<lbrakk>b \<in> \<E> T; b \<notin> A \<Gamma>\<rbrakk> \<Longrightarrow> d_IN (h ?n) b = weight (\<Gamma>' ?n) b

goal (1 subgoal):
 1. (\<Squnion>n. d_IN (h n) b) = weight \<Gamma>_h b
[PROOF STEP]
by(simp add: SUP_const_minus_ennreal)
[PROOF STATE]
proof (state)
this:
(\<Squnion>n. d_IN (h n) b) = weight \<Gamma>_h b

goal (1 subgoal):
 1. \<not> (\<exists>\<epsilon>>0. \<epsilon> < \<delta> \<and> \<not> hindered (reduce_weight \<Gamma> b \<epsilon>)) \<Longrightarrow> False
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
(\<Squnion>n. d_IN (h n) b) = weight \<Gamma>_h b

goal (1 subgoal):
 1. \<not> (\<exists>\<epsilon>>0. \<epsilon> < \<delta> \<and> \<not> hindered (reduce_weight \<Gamma> b \<epsilon>)) \<Longrightarrow> False
[PROOF STEP]
have "d_IN (h 0) b \<le> d_IN (h n) b" for n
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. d_IN (h 0) b \<le> d_IN (h n) b
[PROOF STEP]
using essential b bnA wb_pos \<delta> IN_h_\<E>[of b]
[PROOF STATE]
proof (prove)
using this:
b \<in> \<E> T
b \<in> B \<Gamma>
b \<notin> A \<Gamma>
0 < wb
0 < \<delta>
\<lbrakk>b \<in> \<E> T; b \<notin> A \<Gamma>\<rbrakk> \<Longrightarrow> d_IN (h ?n) b = weight (\<Gamma>' ?n) b

goal (1 subgoal):
 1. d_IN (h 0) b \<le> d_IN (h n) b
[PROOF STEP]
by(simp add: wb_conv \<epsilon>_def field_simps ennreal_minus_if min_le_iff_disj)
[PROOF STATE]
proof (state)
this:
d_IN (h 0) b \<le> d_IN (h ?n) b

goal (1 subgoal):
 1. \<not> (\<exists>\<epsilon>>0. \<epsilon> < \<delta> \<and> \<not> hindered (reduce_weight \<Gamma> b \<epsilon>)) \<Longrightarrow> False
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
d_IN (h 0) b \<le> d_IN (h ?n) b

goal (1 subgoal):
 1. \<not> (\<exists>\<epsilon>>0. \<epsilon> < \<delta> \<and> \<not> hindered (reduce_weight \<Gamma> b \<epsilon>)) \<Longrightarrow> False
[PROOF STEP]
have b_V: "b \<in> \<^bold>V\<^bsub>\<Gamma>_h\<^esub>"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. b \<in> \<^bold>V\<^bsub>\<Gamma>_h\<^esub>
[PROOF STEP]
using b wb essential
[PROOF STATE]
proof (prove)
using this:
b \<in> B \<Gamma>
0 < weight \<Gamma> b
b \<in> \<E> T

goal (1 subgoal):
 1. b \<in> \<^bold>V\<^bsub>\<Gamma>_h\<^esub>
[PROOF STEP]
by(auto dest: B_vertex)
[PROOF STATE]
proof (state)
this:
b \<in> \<^bold>V\<^bsub>\<Gamma>_h\<^esub>

goal (1 subgoal):
 1. \<not> (\<exists>\<epsilon>>0. \<epsilon> < \<delta> \<and> \<not> hindered (reduce_weight \<Gamma> b \<epsilon>)) \<Longrightarrow> False
[PROOF STEP]
ultimately
[PROOF STATE]
proof (chain)
picking this:
B \<Gamma>_h \<inter> \<^bold>V\<^bsub>\<Gamma>_h\<^esub> - {b} \<subseteq> SAT \<Gamma>_h (h ?n)
b \<in> B \<Gamma>_h
(\<Squnion>n. d_IN (h n) b) = weight \<Gamma>_h b
d_IN (h 0) b \<le> d_IN (h ?n) b
b \<in> \<^bold>V\<^bsub>\<Gamma>_h\<^esub>
[PROOF STEP]
have "\<exists>h'. current \<Gamma>_h h' \<and> wave \<Gamma>_h h' \<and> B \<Gamma>_h \<inter> \<^bold>V\<^bsub>\<Gamma>_h\<^esub> \<subseteq> SAT \<Gamma>_h h'"
[PROOF STATE]
proof (prove)
using this:
B \<Gamma>_h \<inter> \<^bold>V\<^bsub>\<Gamma>_h\<^esub> - {b} \<subseteq> SAT \<Gamma>_h (h ?n)
b \<in> B \<Gamma>_h
(\<Squnion>n. d_IN (h n) b) = weight \<Gamma>_h b
d_IN (h 0) b \<le> d_IN (h ?n) b
b \<in> \<^bold>V\<^bsub>\<Gamma>_h\<^esub>

goal (1 subgoal):
 1. \<exists>h'. current \<Gamma>_h h' \<and> wave \<Gamma>_h h' \<and> B \<Gamma>_h \<inter> \<^bold>V\<^bsub>\<Gamma>_h\<^esub> \<subseteq> SAT \<Gamma>_h h'
[PROOF STEP]
by(rule \<Gamma>_h.unhinder_bipartite[OF h'])
[PROOF STATE]
proof (state)
this:
\<exists>h'. current \<Gamma>_h h' \<and> wave \<Gamma>_h h' \<and> B \<Gamma>_h \<inter> \<^bold>V\<^bsub>\<Gamma>_h\<^esub> \<subseteq> SAT \<Gamma>_h h'

goal (1 subgoal):
 1. \<not> (\<exists>\<epsilon>>0. \<epsilon> < \<delta> \<and> \<not> hindered (reduce_weight \<Gamma> b \<epsilon>)) \<Longrightarrow> False
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
\<exists>h'. current \<Gamma>_h h' \<and> wave \<Gamma>_h h' \<and> B \<Gamma>_h \<inter> \<^bold>V\<^bsub>\<Gamma>_h\<^esub> \<subseteq> SAT \<Gamma>_h h'
[PROOF STEP]
obtain h' where h': "current \<Gamma>_h h'" and h'w: "wave \<Gamma>_h h'"
    and B_SAT': "B \<Gamma>_h \<inter> \<^bold>V\<^bsub>\<Gamma>_h\<^esub> \<subseteq> SAT \<Gamma>_h h'"
[PROOF STATE]
proof (prove)
using this:
\<exists>h'. current \<Gamma>_h h' \<and> wave \<Gamma>_h h' \<and> B \<Gamma>_h \<inter> \<^bold>V\<^bsub>\<Gamma>_h\<^esub> \<subseteq> SAT \<Gamma>_h h'

goal (1 subgoal):
 1. (\<And>h'. \<lbrakk>current \<Gamma>_h h'; wave \<Gamma>_h h'; B \<Gamma>_h \<inter> \<^bold>V\<^bsub>\<Gamma>_h\<^esub> \<subseteq> SAT \<Gamma>_h h'\<rbrakk> \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by blast
[PROOF STATE]
proof (state)
this:
current \<Gamma>_h h'
wave \<Gamma>_h h'
B \<Gamma>_h \<inter> \<^bold>V\<^bsub>\<Gamma>_h\<^esub> \<subseteq> SAT \<Gamma>_h h'

goal (1 subgoal):
 1. \<not> (\<exists>\<epsilon>>0. \<epsilon> < \<delta> \<and> \<not> hindered (reduce_weight \<Gamma> b \<epsilon>)) \<Longrightarrow> False
[PROOF STEP]
have h'': "current \<Gamma> h'"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. current \<Gamma> h'
[PROOF STEP]
proof
[PROOF STATE]
proof (state)
goal (3 subgoals):
 1. \<And>x. d_OUT h' x \<le> weight \<Gamma> x
 2. \<And>x. d_IN h' x \<le> weight \<Gamma> x
 3. \<And>e. e \<notin> \<^bold>E \<Longrightarrow> h' e = 0
[PROOF STEP]
show "d_OUT h' x \<le> weight \<Gamma> x" for x
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. d_OUT h' x \<le> weight \<Gamma> x
[PROOF STEP]
using currentD_weight_OUT[OF h', of x]
[PROOF STATE]
proof (prove)
using this:
d_OUT h' x \<le> weight \<Gamma>_h x

goal (1 subgoal):
 1. d_OUT h' x \<le> weight \<Gamma> x
[PROOF STEP]
by(auto split: split_indicator_asm elim: order_trans intro: )
[PROOF STATE]
proof (state)
this:
d_OUT h' ?x \<le> weight \<Gamma> ?x

goal (2 subgoals):
 1. \<And>x. d_IN h' x \<le> weight \<Gamma> x
 2. \<And>e. e \<notin> \<^bold>E \<Longrightarrow> h' e = 0
[PROOF STEP]
show "d_IN h' x \<le> weight \<Gamma> x" for x
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. d_IN h' x \<le> weight \<Gamma> x
[PROOF STEP]
using currentD_weight_IN[OF h', of x]
[PROOF STATE]
proof (prove)
using this:
d_IN h' x \<le> weight \<Gamma>_h x

goal (1 subgoal):
 1. d_IN h' x \<le> weight \<Gamma> x
[PROOF STEP]
by(auto split: split_indicator_asm elim: order_trans intro: )
[PROOF STATE]
proof (state)
this:
d_IN h' ?x \<le> weight \<Gamma> ?x

goal (1 subgoal):
 1. \<And>e. e \<notin> \<^bold>E \<Longrightarrow> h' e = 0
[PROOF STEP]
show "h' e = 0" if "e \<notin> \<^bold>E" for e
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. h' e = 0
[PROOF STEP]
using currentD_outside'[OF h', of e] that
[PROOF STATE]
proof (prove)
using this:
e \<notin> \<^bold>E\<^bsub>\<Gamma>_h\<^esub> \<Longrightarrow> h' e = 0
e \<notin> \<^bold>E

goal (1 subgoal):
 1. h' e = 0
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
?e \<notin> \<^bold>E \<Longrightarrow> h' ?e = 0

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
current \<Gamma> h'

goal (1 subgoal):
 1. \<not> (\<exists>\<epsilon>>0. \<epsilon> < \<delta> \<and> \<not> hindered (reduce_weight \<Gamma> b \<epsilon>)) \<Longrightarrow> False
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
current \<Gamma> h'

goal (1 subgoal):
 1. \<not> (\<exists>\<epsilon>>0. \<epsilon> < \<delta> \<and> \<not> hindered (reduce_weight \<Gamma> b \<epsilon>)) \<Longrightarrow> False
[PROOF STEP]
have "wave \<Gamma> h'"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. wave \<Gamma> h'
[PROOF STEP]
proof
[PROOF STATE]
proof (state)
goal (2 subgoals):
 1. separating \<Gamma> (TER h')
 2. current \<Gamma> h'
[PROOF STEP]
have "separating (\<Gamma>' 0) T"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. separating (\<Gamma>' 0) T
[PROOF STEP]
unfolding T_def
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. separating (\<Gamma>' 0) (TER\<^bsub>\<Gamma>' 0\<^esub> g\<omega>)
[PROOF STEP]
by(rule waveD_separating[OF w\<omega>])
[PROOF STATE]
proof (state)
this:
separating (\<Gamma>' 0) T

goal (2 subgoals):
 1. separating \<Gamma> (TER h')
 2. current \<Gamma> h'
[PROOF STEP]
hence "separating \<Gamma> T"
[PROOF STATE]
proof (prove)
using this:
separating (\<Gamma>' 0) T

goal (1 subgoal):
 1. separating \<Gamma> T
[PROOF STEP]
by(simp add: separating_gen.simps)
[PROOF STATE]
proof (state)
this:
separating \<Gamma> T

goal (2 subgoals):
 1. separating \<Gamma> (TER h')
 2. current \<Gamma> h'
[PROOF STEP]
hence *: "separating \<Gamma> (\<E> T)"
[PROOF STATE]
proof (prove)
using this:
separating \<Gamma> T

goal (1 subgoal):
 1. separating \<Gamma> (\<E> T)
[PROOF STEP]
by(rule separating_essential)
[PROOF STATE]
proof (state)
this:
separating \<Gamma> (\<E> T)

goal (2 subgoals):
 1. separating \<Gamma> (TER h')
 2. current \<Gamma> h'
[PROOF STEP]
show "separating \<Gamma> (TER h')"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. separating \<Gamma> (TER h')
[PROOF STEP]
proof
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. \<And>x y p. \<lbrakk>x \<in> A \<Gamma>; y \<in> B \<Gamma>; path \<Gamma> x p y\<rbrakk> \<Longrightarrow> (\<exists>z\<in>set p. z \<in> TER h') \<or> x \<in> TER h'
[PROOF STEP]
fix x p y
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. \<And>x y p. \<lbrakk>x \<in> A \<Gamma>; y \<in> B \<Gamma>; path \<Gamma> x p y\<rbrakk> \<Longrightarrow> (\<exists>z\<in>set p. z \<in> TER h') \<or> x \<in> TER h'
[PROOF STEP]
assume x: "x \<in> A \<Gamma>" and p: "path \<Gamma> x p y" and y: "y \<in> B \<Gamma>"
[PROOF STATE]
proof (state)
this:
x \<in> A \<Gamma>
path \<Gamma> x p y
y \<in> B \<Gamma>

goal (1 subgoal):
 1. \<And>x y p. \<lbrakk>x \<in> A \<Gamma>; y \<in> B \<Gamma>; path \<Gamma> x p y\<rbrakk> \<Longrightarrow> (\<exists>z\<in>set p. z \<in> TER h') \<or> x \<in> TER h'
[PROOF STEP]
from p x y disjoint
[PROOF STATE]
proof (chain)
picking this:
path \<Gamma> x p y
x \<in> A \<Gamma>
y \<in> B \<Gamma>
A \<Gamma> \<inter> B \<Gamma> = {}
[PROOF STEP]
have py: "p = [y]"
[PROOF STATE]
proof (prove)
using this:
path \<Gamma> x p y
x \<in> A \<Gamma>
y \<in> B \<Gamma>
A \<Gamma> \<inter> B \<Gamma> = {}

goal (1 subgoal):
 1. p = [y]
[PROOF STEP]
by(cases)(auto 4 3 elim: rtrancl_path.cases dest: bipartite_E)
[PROOF STATE]
proof (state)
this:
p = [y]

goal (1 subgoal):
 1. \<And>x y p. \<lbrakk>x \<in> A \<Gamma>; y \<in> B \<Gamma>; path \<Gamma> x p y\<rbrakk> \<Longrightarrow> (\<exists>z\<in>set p. z \<in> TER h') \<or> x \<in> TER h'
[PROOF STEP]
from separatingD[OF * p x y] py
[PROOF STATE]
proof (chain)
picking this:
(\<exists>z\<in>set p. z \<in> \<E> T) \<or> x \<in> \<E> T
p = [y]
[PROOF STEP]
have "x \<in> \<E> T \<or> y \<in> \<E> T"
[PROOF STATE]
proof (prove)
using this:
(\<exists>z\<in>set p. z \<in> \<E> T) \<or> x \<in> \<E> T
p = [y]

goal (1 subgoal):
 1. x \<in> \<E> T \<or> y \<in> \<E> T
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
x \<in> \<E> T \<or> y \<in> \<E> T

goal (1 subgoal):
 1. \<And>x y p. \<lbrakk>x \<in> A \<Gamma>; y \<in> B \<Gamma>; path \<Gamma> x p y\<rbrakk> \<Longrightarrow> (\<exists>z\<in>set p. z \<in> TER h') \<or> x \<in> TER h'
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
x \<in> \<E> T \<or> y \<in> \<E> T
[PROOF STEP]
show "(\<exists>z\<in>set p. z \<in> TER h') \<or> x \<in> TER h'"
[PROOF STATE]
proof (prove)
using this:
x \<in> \<E> T \<or> y \<in> \<E> T

goal (1 subgoal):
 1. (\<exists>z\<in>set p. z \<in> TER h') \<or> x \<in> TER h'
[PROOF STEP]
proof cases
[PROOF STATE]
proof (state)
goal (2 subgoals):
 1. x \<in> \<E> T \<Longrightarrow> (\<exists>z\<in>set p. z \<in> TER h') \<or> x \<in> TER h'
 2. y \<in> \<E> T \<Longrightarrow> (\<exists>z\<in>set p. z \<in> TER h') \<or> x \<in> TER h'
[PROOF STEP]
case left
[PROOF STATE]
proof (state)
this:
x \<in> \<E> T

goal (2 subgoals):
 1. x \<in> \<E> T \<Longrightarrow> (\<exists>z\<in>set p. z \<in> TER h') \<or> x \<in> TER h'
 2. y \<in> \<E> T \<Longrightarrow> (\<exists>z\<in>set p. z \<in> TER h') \<or> x \<in> TER h'
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
x \<in> \<E> T
[PROOF STEP]
have "x \<notin> \<^bold>V\<^bsub>\<Gamma>_h\<^esub>"
[PROOF STATE]
proof (prove)
using this:
x \<in> \<E> T

goal (1 subgoal):
 1. x \<notin> \<^bold>V\<^bsub>\<Gamma>_h\<^esub>
[PROOF STEP]
using x disjoint
[PROOF STATE]
proof (prove)
using this:
x \<in> \<E> T
x \<in> A \<Gamma>
A \<Gamma> \<inter> B \<Gamma> = {}

goal (1 subgoal):
 1. x \<notin> \<^bold>V\<^bsub>\<Gamma>_h\<^esub>
[PROOF STEP]
by(auto 4 4 dest!: vertex_\<Gamma>_hD simp add: S_def elim: essentialE_RF intro!: roofed_greaterI dest: roofedD)
[PROOF STATE]
proof (state)
this:
x \<notin> \<^bold>V\<^bsub>\<Gamma>_h\<^esub>

goal (2 subgoals):
 1. x \<in> \<E> T \<Longrightarrow> (\<exists>z\<in>set p. z \<in> TER h') \<or> x \<in> TER h'
 2. y \<in> \<E> T \<Longrightarrow> (\<exists>z\<in>set p. z \<in> TER h') \<or> x \<in> TER h'
[PROOF STEP]
hence "d_OUT h' x = 0"
[PROOF STATE]
proof (prove)
using this:
x \<notin> \<^bold>V\<^bsub>\<Gamma>_h\<^esub>

goal (1 subgoal):
 1. d_OUT h' x = 0
[PROOF STEP]
by(intro currentD_outside_OUT[OF h'])
[PROOF STATE]
proof (state)
this:
d_OUT h' x = 0

goal (2 subgoals):
 1. x \<in> \<E> T \<Longrightarrow> (\<exists>z\<in>set p. z \<in> TER h') \<or> x \<in> TER h'
 2. y \<in> \<E> T \<Longrightarrow> (\<exists>z\<in>set p. z \<in> TER h') \<or> x \<in> TER h'
[PROOF STEP]
with x
[PROOF STATE]
proof (chain)
picking this:
x \<in> A \<Gamma>
d_OUT h' x = 0
[PROOF STEP]
have "x \<in> TER h'"
[PROOF STATE]
proof (prove)
using this:
x \<in> A \<Gamma>
d_OUT h' x = 0

goal (1 subgoal):
 1. x \<in> TER h'
[PROOF STEP]
by(auto simp add: SAT.A SINK.simps)
[PROOF STATE]
proof (state)
this:
x \<in> TER h'

goal (2 subgoals):
 1. x \<in> \<E> T \<Longrightarrow> (\<exists>z\<in>set p. z \<in> TER h') \<or> x \<in> TER h'
 2. y \<in> \<E> T \<Longrightarrow> (\<exists>z\<in>set p. z \<in> TER h') \<or> x \<in> TER h'
[PROOF STEP]
thus ?thesis
[PROOF STATE]
proof (prove)
using this:
x \<in> TER h'

goal (1 subgoal):
 1. (\<exists>z\<in>set p. z \<in> TER h') \<or> x \<in> TER h'
[PROOF STEP]
..
[PROOF STATE]
proof (state)
this:
(\<exists>z\<in>set p. z \<in> TER h') \<or> x \<in> TER h'

goal (1 subgoal):
 1. y \<in> \<E> T \<Longrightarrow> (\<exists>z\<in>set p. z \<in> TER h') \<or> x \<in> TER h'
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. y \<in> \<E> T \<Longrightarrow> (\<exists>z\<in>set p. z \<in> TER h') \<or> x \<in> TER h'
[PROOF STEP]
case right
[PROOF STATE]
proof (state)
this:
y \<in> \<E> T

goal (1 subgoal):
 1. y \<in> \<E> T \<Longrightarrow> (\<exists>z\<in>set p. z \<in> TER h') \<or> x \<in> TER h'
[PROOF STEP]
have "y \<in> SAT \<Gamma> h'"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. y \<in> SAT \<Gamma> h'
[PROOF STEP]
proof(cases "weight \<Gamma> y > 0")
[PROOF STATE]
proof (state)
goal (2 subgoals):
 1. 0 < weight \<Gamma> y \<Longrightarrow> y \<in> SAT \<Gamma> h'
 2. \<not> 0 < weight \<Gamma> y \<Longrightarrow> y \<in> SAT \<Gamma> h'
[PROOF STEP]
case True
[PROOF STATE]
proof (state)
this:
0 < weight \<Gamma> y

goal (2 subgoals):
 1. 0 < weight \<Gamma> y \<Longrightarrow> y \<in> SAT \<Gamma> h'
 2. \<not> 0 < weight \<Gamma> y \<Longrightarrow> y \<in> SAT \<Gamma> h'
[PROOF STEP]
with py x y right
[PROOF STATE]
proof (chain)
picking this:
p = [y]
x \<in> A \<Gamma>
y \<in> B \<Gamma>
y \<in> \<E> T
0 < weight \<Gamma> y
[PROOF STEP]
have "vertex \<Gamma>_h y"
[PROOF STATE]
proof (prove)
using this:
p = [y]
x \<in> A \<Gamma>
y \<in> B \<Gamma>
y \<in> \<E> T
0 < weight \<Gamma> y

goal (1 subgoal):
 1. vertex \<Gamma>_h y
[PROOF STEP]
by(auto intro: B_vertex)
[PROOF STATE]
proof (state)
this:
vertex \<Gamma>_h y

goal (2 subgoals):
 1. 0 < weight \<Gamma> y \<Longrightarrow> y \<in> SAT \<Gamma> h'
 2. \<not> 0 < weight \<Gamma> y \<Longrightarrow> y \<in> SAT \<Gamma> h'
[PROOF STEP]
hence "y \<in> SAT \<Gamma>_h h'"
[PROOF STATE]
proof (prove)
using this:
vertex \<Gamma>_h y

goal (1 subgoal):
 1. y \<in> SAT \<Gamma>_h h'
[PROOF STEP]
using B_SAT' right y
[PROOF STATE]
proof (prove)
using this:
vertex \<Gamma>_h y
B \<Gamma>_h \<inter> \<^bold>V\<^bsub>\<Gamma>_h\<^esub> \<subseteq> SAT \<Gamma>_h h'
y \<in> \<E> T
y \<in> B \<Gamma>

goal (1 subgoal):
 1. y \<in> SAT \<Gamma>_h h'
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
y \<in> SAT \<Gamma>_h h'

goal (2 subgoals):
 1. 0 < weight \<Gamma> y \<Longrightarrow> y \<in> SAT \<Gamma> h'
 2. \<not> 0 < weight \<Gamma> y \<Longrightarrow> y \<in> SAT \<Gamma> h'
[PROOF STEP]
with right y disjoint
[PROOF STATE]
proof (chain)
picking this:
y \<in> \<E> T
y \<in> B \<Gamma>
A \<Gamma> \<inter> B \<Gamma> = {}
y \<in> SAT \<Gamma>_h h'
[PROOF STEP]
show ?thesis
[PROOF STATE]
proof (prove)
using this:
y \<in> \<E> T
y \<in> B \<Gamma>
A \<Gamma> \<inter> B \<Gamma> = {}
y \<in> SAT \<Gamma>_h h'

goal (1 subgoal):
 1. y \<in> SAT \<Gamma> h'
[PROOF STEP]
by(auto simp add: currentD_SAT[OF h'] currentD_SAT[OF h''] S_def)
[PROOF STATE]
proof (state)
this:
y \<in> SAT \<Gamma> h'

goal (1 subgoal):
 1. \<not> 0 < weight \<Gamma> y \<Longrightarrow> y \<in> SAT \<Gamma> h'
[PROOF STEP]
qed(auto simp add: SAT.simps)
[PROOF STATE]
proof (state)
this:
y \<in> SAT \<Gamma> h'

goal (1 subgoal):
 1. y \<in> \<E> T \<Longrightarrow> (\<exists>z\<in>set p. z \<in> TER h') \<or> x \<in> TER h'
[PROOF STEP]
with currentD_OUT[OF h', of y] y right
[PROOF STATE]
proof (chain)
picking this:
y \<in> B \<Gamma>_h \<Longrightarrow> d_OUT h' y = 0
y \<in> B \<Gamma>
y \<in> \<E> T
y \<in> SAT \<Gamma> h'
[PROOF STEP]
have "y \<in> TER h'"
[PROOF STATE]
proof (prove)
using this:
y \<in> B \<Gamma>_h \<Longrightarrow> d_OUT h' y = 0
y \<in> B \<Gamma>
y \<in> \<E> T
y \<in> SAT \<Gamma> h'

goal (1 subgoal):
 1. y \<in> TER h'
[PROOF STEP]
by(auto simp add: SINK)
[PROOF STATE]
proof (state)
this:
y \<in> TER h'

goal (1 subgoal):
 1. y \<in> \<E> T \<Longrightarrow> (\<exists>z\<in>set p. z \<in> TER h') \<or> x \<in> TER h'
[PROOF STEP]
thus ?thesis
[PROOF STATE]
proof (prove)
using this:
y \<in> TER h'

goal (1 subgoal):
 1. (\<exists>z\<in>set p. z \<in> TER h') \<or> x \<in> TER h'
[PROOF STEP]
using py
[PROOF STATE]
proof (prove)
using this:
y \<in> TER h'
p = [y]

goal (1 subgoal):
 1. (\<exists>z\<in>set p. z \<in> TER h') \<or> x \<in> TER h'
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
(\<exists>z\<in>set p. z \<in> TER h') \<or> x \<in> TER h'

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
(\<exists>z\<in>set p. z \<in> TER h') \<or> x \<in> TER h'

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
separating \<Gamma> (TER h')

goal (1 subgoal):
 1. current \<Gamma> h'
[PROOF STEP]
qed(rule h'')
[PROOF STATE]
proof (state)
this:
wave \<Gamma> h'

goal (1 subgoal):
 1. \<not> (\<exists>\<epsilon>>0. \<epsilon> < \<delta> \<and> \<not> hindered (reduce_weight \<Gamma> b \<epsilon>)) \<Longrightarrow> False
[PROOF STEP]
ultimately
[PROOF STATE]
proof (chain)
picking this:
current \<Gamma> h'
wave \<Gamma> h'
[PROOF STEP]
have "h' = zero_current"
[PROOF STATE]
proof (prove)
using this:
current \<Gamma> h'
wave \<Gamma> h'

goal (1 subgoal):
 1. h' = (\<lambda>_. 0)
[PROOF STEP]
by(rule looseD_wave[OF loose])
[PROOF STATE]
proof (state)
this:
h' = (\<lambda>_. 0)

goal (1 subgoal):
 1. \<not> (\<exists>\<epsilon>>0. \<epsilon> < \<delta> \<and> \<not> hindered (reduce_weight \<Gamma> b \<epsilon>)) \<Longrightarrow> False
[PROOF STEP]
hence "d_IN h' b = 0"
[PROOF STATE]
proof (prove)
using this:
h' = (\<lambda>_. 0)

goal (1 subgoal):
 1. d_IN h' b = 0
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
d_IN h' b = 0

goal (1 subgoal):
 1. \<not> (\<exists>\<epsilon>>0. \<epsilon> < \<delta> \<and> \<not> hindered (reduce_weight \<Gamma> b \<epsilon>)) \<Longrightarrow> False
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
d_IN h' b = 0

goal (1 subgoal):
 1. \<not> (\<exists>\<epsilon>>0. \<epsilon> < \<delta> \<and> \<not> hindered (reduce_weight \<Gamma> b \<epsilon>)) \<Longrightarrow> False
[PROOF STEP]
from essential b b_V B_SAT'
[PROOF STATE]
proof (chain)
picking this:
b \<in> \<E> T
b \<in> B \<Gamma>
b \<in> \<^bold>V\<^bsub>\<Gamma>_h\<^esub>
B \<Gamma>_h \<inter> \<^bold>V\<^bsub>\<Gamma>_h\<^esub> \<subseteq> SAT \<Gamma>_h h'
[PROOF STEP]
have "b \<in> SAT \<Gamma>_h h'"
[PROOF STATE]
proof (prove)
using this:
b \<in> \<E> T
b \<in> B \<Gamma>
b \<in> \<^bold>V\<^bsub>\<Gamma>_h\<^esub>
B \<Gamma>_h \<inter> \<^bold>V\<^bsub>\<Gamma>_h\<^esub> \<subseteq> SAT \<Gamma>_h h'

goal (1 subgoal):
 1. b \<in> SAT \<Gamma>_h h'
[PROOF STEP]
by(auto)
[PROOF STATE]
proof (state)
this:
b \<in> SAT \<Gamma>_h h'

goal (1 subgoal):
 1. \<not> (\<exists>\<epsilon>>0. \<epsilon> < \<delta> \<and> \<not> hindered (reduce_weight \<Gamma> b \<epsilon>)) \<Longrightarrow> False
[PROOF STEP]
ultimately
[PROOF STATE]
proof (chain)
picking this:
d_IN h' b = 0
b \<in> SAT \<Gamma>_h h'
[PROOF STEP]
show False
[PROOF STATE]
proof (prove)
using this:
d_IN h' b = 0
b \<in> SAT \<Gamma>_h h'

goal (1 subgoal):
 1. False
[PROOF STEP]
using wb b essential disjoint
[PROOF STATE]
proof (prove)
using this:
d_IN h' b = 0
b \<in> SAT \<Gamma>_h h'
0 < weight \<Gamma> b
b \<in> B \<Gamma>
b \<in> \<E> T
A \<Gamma> \<inter> B \<Gamma> = {}

goal (1 subgoal):
 1. False
[PROOF STEP]
by(auto simp add: SAT.simps S_def)
[PROOF STATE]
proof (state)
this:
False

goal:
No subgoals!
[PROOF STEP]
qed