[STATEMENT]
lemma finite_unsigned_Hahn_decomposition:
  assumes "finite_measure M" "finite_measure N" and [simp]: "sets N = sets M"
  shows "\<exists>Y\<in>sets M. (\<forall>X\<in>sets M. X \<subseteq> Y \<longrightarrow> N X \<le> M X) \<and> (\<forall>X\<in>sets M. X \<inter> Y = {} \<longrightarrow> M X \<le> N X)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<exists>Y\<in>sets M. (\<forall>X\<in>sets M. X \<subseteq> Y \<longrightarrow> emeasure N X \<le> emeasure M X) \<and> (\<forall>X\<in>sets M. X \<inter> Y = {} \<longrightarrow> emeasure M X \<le> emeasure N X)
[PROOF STEP]
proof -
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. \<exists>Y\<in>sets M. (\<forall>X\<in>sets M. X \<subseteq> Y \<longrightarrow> emeasure N X \<le> emeasure M X) \<and> (\<forall>X\<in>sets M. X \<inter> Y = {} \<longrightarrow> emeasure M X \<le> emeasure N X)
[PROOF STEP]
interpret M: finite_measure M
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. finite_measure M
[PROOF STEP]
by fact
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. \<exists>Y\<in>sets M. (\<forall>X\<in>sets M. X \<subseteq> Y \<longrightarrow> emeasure N X \<le> emeasure M X) \<and> (\<forall>X\<in>sets M. X \<inter> Y = {} \<longrightarrow> emeasure M X \<le> emeasure N X)
[PROOF STEP]
interpret N: finite_measure N
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. finite_measure N
[PROOF STEP]
by fact
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. \<exists>Y\<in>sets M. (\<forall>X\<in>sets M. X \<subseteq> Y \<longrightarrow> emeasure N X \<le> emeasure M X) \<and> (\<forall>X\<in>sets M. X \<inter> Y = {} \<longrightarrow> emeasure M X \<le> emeasure N X)
[PROOF STEP]
define d where "d X = measure M X - measure N X" for X
[PROOF STATE]
proof (state)
this:
d ?X = Sigma_Algebra.measure M ?X - Sigma_Algebra.measure N ?X

goal (1 subgoal):
 1. \<exists>Y\<in>sets M. (\<forall>X\<in>sets M. X \<subseteq> Y \<longrightarrow> emeasure N X \<le> emeasure M X) \<and> (\<forall>X\<in>sets M. X \<inter> Y = {} \<longrightarrow> emeasure M X \<le> emeasure N X)
[PROOF STEP]
have [intro]: "bdd_above (d`sets M)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. bdd_above (d ` sets M)
[PROOF STEP]
using sets.sets_into_space[of _ M]
[PROOF STATE]
proof (prove)
using this:
?x \<in> sets M \<Longrightarrow> ?x \<subseteq> space M

goal (1 subgoal):
 1. bdd_above (d ` sets M)
[PROOF STEP]
by (intro bdd_aboveI[where M="measure M (space M)"])
       (auto simp: d_def field_simps subset_eq intro!: add_increasing M.finite_measure_mono)
[PROOF STATE]
proof (state)
this:
bdd_above (d ` sets M)

goal (1 subgoal):
 1. \<exists>Y\<in>sets M. (\<forall>X\<in>sets M. X \<subseteq> Y \<longrightarrow> emeasure N X \<le> emeasure M X) \<and> (\<forall>X\<in>sets M. X \<inter> Y = {} \<longrightarrow> emeasure M X \<le> emeasure N X)
[PROOF STEP]
define \<gamma> where "\<gamma> = (SUP X\<in>sets M. d X)"
[PROOF STATE]
proof (state)
this:
\<gamma> = Sup (d ` sets M)

goal (1 subgoal):
 1. \<exists>Y\<in>sets M. (\<forall>X\<in>sets M. X \<subseteq> Y \<longrightarrow> emeasure N X \<le> emeasure M X) \<and> (\<forall>X\<in>sets M. X \<inter> Y = {} \<longrightarrow> emeasure M X \<le> emeasure N X)
[PROOF STEP]
have le_\<gamma>[intro]: "X \<in> sets M \<Longrightarrow> d X \<le> \<gamma>" for X
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. X \<in> sets M \<Longrightarrow> d X \<le> \<gamma>
[PROOF STEP]
by (auto simp: \<gamma>_def intro!: cSUP_upper)
[PROOF STATE]
proof (state)
this:
?X \<in> sets M \<Longrightarrow> d ?X \<le> \<gamma>

goal (1 subgoal):
 1. \<exists>Y\<in>sets M. (\<forall>X\<in>sets M. X \<subseteq> Y \<longrightarrow> emeasure N X \<le> emeasure M X) \<and> (\<forall>X\<in>sets M. X \<inter> Y = {} \<longrightarrow> emeasure M X \<le> emeasure N X)
[PROOF STEP]
have "\<exists>f. \<forall>n. f n \<in> sets M \<and> d (f n) > \<gamma> - 1 / 2^n"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<exists>f. \<forall>n. f n \<in> sets M \<and> \<gamma> - 1 / 2 ^ n < d (f n)
[PROOF STEP]
proof (intro choice_iff[THEN iffD1] allI)
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. \<And>n. \<exists>y. y \<in> sets M \<and> \<gamma> - 1 / 2 ^ n < d y
[PROOF STEP]
fix n
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. \<And>n. \<exists>y. y \<in> sets M \<and> \<gamma> - 1 / 2 ^ n < d y
[PROOF STEP]
have "\<exists>X\<in>sets M. \<gamma> - 1 / 2^n < d X"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<exists>X\<in>sets M. \<gamma> - 1 / 2 ^ n < d X
[PROOF STEP]
unfolding \<gamma>_def
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<exists>X\<in>sets M. Sup (d ` sets M) - 1 / 2 ^ n < d X
[PROOF STEP]
by (intro less_cSUP_iff[THEN iffD1]) auto
[PROOF STATE]
proof (state)
this:
\<exists>X\<in>sets M. \<gamma> - 1 / 2 ^ n < d X

goal (1 subgoal):
 1. \<And>n. \<exists>y. y \<in> sets M \<and> \<gamma> - 1 / 2 ^ n < d y
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
\<exists>X\<in>sets M. \<gamma> - 1 / 2 ^ n < d X
[PROOF STEP]
show "\<exists>y. y \<in> sets M \<and> \<gamma> - 1 / 2 ^ n < d y"
[PROOF STATE]
proof (prove)
using this:
\<exists>X\<in>sets M. \<gamma> - 1 / 2 ^ n < d X

goal (1 subgoal):
 1. \<exists>y. y \<in> sets M \<and> \<gamma> - 1 / 2 ^ n < d y
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
\<exists>y. y \<in> sets M \<and> \<gamma> - 1 / 2 ^ n < d y

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
\<exists>f. \<forall>n. f n \<in> sets M \<and> \<gamma> - 1 / 2 ^ n < d (f n)

goal (1 subgoal):
 1. \<exists>Y\<in>sets M. (\<forall>X\<in>sets M. X \<subseteq> Y \<longrightarrow> emeasure N X \<le> emeasure M X) \<and> (\<forall>X\<in>sets M. X \<inter> Y = {} \<longrightarrow> emeasure M X \<le> emeasure N X)
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
\<exists>f. \<forall>n. f n \<in> sets M \<and> \<gamma> - 1 / 2 ^ n < d (f n)
[PROOF STEP]
obtain E where [measurable]: "E n \<in> sets M" and E: "d (E n) > \<gamma> - 1 / 2^n" for n
[PROOF STATE]
proof (prove)
using this:
\<exists>f. \<forall>n. f n \<in> sets M \<and> \<gamma> - 1 / 2 ^ n < d (f n)

goal (1 subgoal):
 1. (\<And>E. \<lbrakk>\<And>n. E n \<in> sets M; \<And>n. \<gamma> - 1 / 2 ^ n < d (E n)\<rbrakk> \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
E ?n \<in> sets M
\<gamma> - 1 / 2 ^ ?n < d (E ?n)

goal (1 subgoal):
 1. \<exists>Y\<in>sets M. (\<forall>X\<in>sets M. X \<subseteq> Y \<longrightarrow> emeasure N X \<le> emeasure M X) \<and> (\<forall>X\<in>sets M. X \<inter> Y = {} \<longrightarrow> emeasure M X \<le> emeasure N X)
[PROOF STEP]
define F where "F m n = (if m \<le> n then \<Inter>i\<in>{m..n}. E i else space M)" for m n
[PROOF STATE]
proof (state)
this:
F ?m ?n = (if ?m \<le> ?n then \<Inter> (E ` {?m..?n}) else space M)

goal (1 subgoal):
 1. \<exists>Y\<in>sets M. (\<forall>X\<in>sets M. X \<subseteq> Y \<longrightarrow> emeasure N X \<le> emeasure M X) \<and> (\<forall>X\<in>sets M. X \<inter> Y = {} \<longrightarrow> emeasure M X \<le> emeasure N X)
[PROOF STEP]
have [measurable]: "m \<le> n \<Longrightarrow> F m n \<in> sets M" for m n
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. m \<le> n \<Longrightarrow> F m n \<in> sets M
[PROOF STEP]
by (auto simp: F_def)
[PROOF STATE]
proof (state)
this:
?m \<le> ?n \<Longrightarrow> F ?m ?n \<in> sets M

goal (1 subgoal):
 1. \<exists>Y\<in>sets M. (\<forall>X\<in>sets M. X \<subseteq> Y \<longrightarrow> emeasure N X \<le> emeasure M X) \<and> (\<forall>X\<in>sets M. X \<inter> Y = {} \<longrightarrow> emeasure M X \<le> emeasure N X)
[PROOF STEP]
have 1: "\<gamma> - 2 / 2 ^ m + 1 / 2 ^ n \<le> d (F m n)" if "m \<le> n" for m n
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<gamma> - 2 / 2 ^ m + 1 / 2 ^ n \<le> d (F m n)
[PROOF STEP]
using that
[PROOF STATE]
proof (prove)
using this:
m \<le> n

goal (1 subgoal):
 1. \<gamma> - 2 / 2 ^ m + 1 / 2 ^ n \<le> d (F m n)
[PROOF STEP]
proof (induct rule: dec_induct)
[PROOF STATE]
proof (state)
goal (2 subgoals):
 1. \<gamma> - 2 / 2 ^ m + 1 / 2 ^ m \<le> d (F m m)
 2. \<And>na. \<lbrakk>m \<le> na; na < n; \<gamma> - 2 / 2 ^ m + 1 / 2 ^ na \<le> d (F m na)\<rbrakk> \<Longrightarrow> \<gamma> - 2 / 2 ^ m + 1 / 2 ^ Suc na \<le> d (F m (Suc na))
[PROOF STEP]
case base
[PROOF STATE]
proof (state)
this:

goal (2 subgoals):
 1. \<gamma> - 2 / 2 ^ m + 1 / 2 ^ m \<le> d (F m m)
 2. \<And>na. \<lbrakk>m \<le> na; na < n; \<gamma> - 2 / 2 ^ m + 1 / 2 ^ na \<le> d (F m na)\<rbrakk> \<Longrightarrow> \<gamma> - 2 / 2 ^ m + 1 / 2 ^ Suc na \<le> d (F m (Suc na))
[PROOF STEP]
with E[of m]
[PROOF STATE]
proof (chain)
picking this:
\<gamma> - 1 / 2 ^ m < d (E m)
[PROOF STEP]
show ?case
[PROOF STATE]
proof (prove)
using this:
\<gamma> - 1 / 2 ^ m < d (E m)

goal (1 subgoal):
 1. \<gamma> - 2 / 2 ^ m + 1 / 2 ^ m \<le> d (F m m)
[PROOF STEP]
by (simp add: F_def field_simps)
[PROOF STATE]
proof (state)
this:
\<gamma> - 2 / 2 ^ m + 1 / 2 ^ m \<le> d (F m m)

goal (1 subgoal):
 1. \<And>na. \<lbrakk>m \<le> na; na < n; \<gamma> - 2 / 2 ^ m + 1 / 2 ^ na \<le> d (F m na)\<rbrakk> \<Longrightarrow> \<gamma> - 2 / 2 ^ m + 1 / 2 ^ Suc na \<le> d (F m (Suc na))
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. \<And>na. \<lbrakk>m \<le> na; na < n; \<gamma> - 2 / 2 ^ m + 1 / 2 ^ na \<le> d (F m na)\<rbrakk> \<Longrightarrow> \<gamma> - 2 / 2 ^ m + 1 / 2 ^ Suc na \<le> d (F m (Suc na))
[PROOF STEP]
case (step i)
[PROOF STATE]
proof (state)
this:
m \<le> i
i < n
\<gamma> - 2 / 2 ^ m + 1 / 2 ^ i \<le> d (F m i)

goal (1 subgoal):
 1. \<And>na. \<lbrakk>m \<le> na; na < n; \<gamma> - 2 / 2 ^ m + 1 / 2 ^ na \<le> d (F m na)\<rbrakk> \<Longrightarrow> \<gamma> - 2 / 2 ^ m + 1 / 2 ^ Suc na \<le> d (F m (Suc na))
[PROOF STEP]
have F_Suc: "F m (Suc i) = F m i \<inter> E (Suc i)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. F m (Suc i) = F m i \<inter> E (Suc i)
[PROOF STEP]
using \<open>m \<le> i\<close>
[PROOF STATE]
proof (prove)
using this:
m \<le> i

goal (1 subgoal):
 1. F m (Suc i) = F m i \<inter> E (Suc i)
[PROOF STEP]
by (auto simp: F_def le_Suc_eq)
[PROOF STATE]
proof (state)
this:
F m (Suc i) = F m i \<inter> E (Suc i)

goal (1 subgoal):
 1. \<And>na. \<lbrakk>m \<le> na; na < n; \<gamma> - 2 / 2 ^ m + 1 / 2 ^ na \<le> d (F m na)\<rbrakk> \<Longrightarrow> \<gamma> - 2 / 2 ^ m + 1 / 2 ^ Suc na \<le> d (F m (Suc na))
[PROOF STEP]
have "\<gamma> + (\<gamma> - 2 / 2^m + 1 / 2 ^ Suc i) \<le> (\<gamma> - 1 / 2^Suc i) + (\<gamma> - 2 / 2^m + 1 / 2^i)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<gamma> + (\<gamma> - 2 / 2 ^ m + 1 / 2 ^ Suc i) \<le> \<gamma> - 1 / 2 ^ Suc i + (\<gamma> - 2 / 2 ^ m + 1 / 2 ^ i)
[PROOF STEP]
by (simp add: field_simps)
[PROOF STATE]
proof (state)
this:
\<gamma> + (\<gamma> - 2 / 2 ^ m + 1 / 2 ^ Suc i) \<le> \<gamma> - 1 / 2 ^ Suc i + (\<gamma> - 2 / 2 ^ m + 1 / 2 ^ i)

goal (1 subgoal):
 1. \<And>na. \<lbrakk>m \<le> na; na < n; \<gamma> - 2 / 2 ^ m + 1 / 2 ^ na \<le> d (F m na)\<rbrakk> \<Longrightarrow> \<gamma> - 2 / 2 ^ m + 1 / 2 ^ Suc na \<le> d (F m (Suc na))
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
\<gamma> + (\<gamma> - 2 / 2 ^ m + 1 / 2 ^ Suc i) \<le> \<gamma> - 1 / 2 ^ Suc i + (\<gamma> - 2 / 2 ^ m + 1 / 2 ^ i)

goal (1 subgoal):
 1. \<And>na. \<lbrakk>m \<le> na; na < n; \<gamma> - 2 / 2 ^ m + 1 / 2 ^ na \<le> d (F m na)\<rbrakk> \<Longrightarrow> \<gamma> - 2 / 2 ^ m + 1 / 2 ^ Suc na \<le> d (F m (Suc na))
[PROOF STEP]
have "\<dots> \<le> d (E (Suc i)) + d (F m i)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<gamma> - 1 / 2 ^ Suc i + (\<gamma> - 2 / 2 ^ m + 1 / 2 ^ i) \<le> d (E (Suc i)) + d (F m i)
[PROOF STEP]
using E[of "Suc i"]
[PROOF STATE]
proof (prove)
using this:
\<gamma> - 1 / 2 ^ Suc i < d (E (Suc i))

goal (1 subgoal):
 1. \<gamma> - 1 / 2 ^ Suc i + (\<gamma> - 2 / 2 ^ m + 1 / 2 ^ i) \<le> d (E (Suc i)) + d (F m i)
[PROOF STEP]
by (intro add_mono step) auto
[PROOF STATE]
proof (state)
this:
\<gamma> - 1 / 2 ^ Suc i + (\<gamma> - 2 / 2 ^ m + 1 / 2 ^ i) \<le> d (E (Suc i)) + d (F m i)

goal (1 subgoal):
 1. \<And>na. \<lbrakk>m \<le> na; na < n; \<gamma> - 2 / 2 ^ m + 1 / 2 ^ na \<le> d (F m na)\<rbrakk> \<Longrightarrow> \<gamma> - 2 / 2 ^ m + 1 / 2 ^ Suc na \<le> d (F m (Suc na))
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
\<gamma> - 1 / 2 ^ Suc i + (\<gamma> - 2 / 2 ^ m + 1 / 2 ^ i) \<le> d (E (Suc i)) + d (F m i)

goal (1 subgoal):
 1. \<And>na. \<lbrakk>m \<le> na; na < n; \<gamma> - 2 / 2 ^ m + 1 / 2 ^ na \<le> d (F m na)\<rbrakk> \<Longrightarrow> \<gamma> - 2 / 2 ^ m + 1 / 2 ^ Suc na \<le> d (F m (Suc na))
[PROOF STEP]
have "\<dots> = d (E (Suc i)) + d (F m i - E (Suc i)) + d (F m (Suc i))"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. d (E (Suc i)) + d (F m i) = d (E (Suc i)) + d (F m i - E (Suc i)) + d (F m (Suc i))
[PROOF STEP]
using \<open>m \<le> i\<close>
[PROOF STATE]
proof (prove)
using this:
m \<le> i

goal (1 subgoal):
 1. d (E (Suc i)) + d (F m i) = d (E (Suc i)) + d (F m i - E (Suc i)) + d (F m (Suc i))
[PROOF STEP]
by (simp add: d_def field_simps F_Suc M.finite_measure_Diff' N.finite_measure_Diff')
[PROOF STATE]
proof (state)
this:
d (E (Suc i)) + d (F m i) = d (E (Suc i)) + d (F m i - E (Suc i)) + d (F m (Suc i))

goal (1 subgoal):
 1. \<And>na. \<lbrakk>m \<le> na; na < n; \<gamma> - 2 / 2 ^ m + 1 / 2 ^ na \<le> d (F m na)\<rbrakk> \<Longrightarrow> \<gamma> - 2 / 2 ^ m + 1 / 2 ^ Suc na \<le> d (F m (Suc na))
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
d (E (Suc i)) + d (F m i) = d (E (Suc i)) + d (F m i - E (Suc i)) + d (F m (Suc i))

goal (1 subgoal):
 1. \<And>na. \<lbrakk>m \<le> na; na < n; \<gamma> - 2 / 2 ^ m + 1 / 2 ^ na \<le> d (F m na)\<rbrakk> \<Longrightarrow> \<gamma> - 2 / 2 ^ m + 1 / 2 ^ Suc na \<le> d (F m (Suc na))
[PROOF STEP]
have "\<dots> = d (E (Suc i) \<union> F m i) + d (F m (Suc i))"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. d (E (Suc i)) + d (F m i - E (Suc i)) + d (F m (Suc i)) = d (E (Suc i) \<union> F m i) + d (F m (Suc i))
[PROOF STEP]
using \<open>m \<le> i\<close>
[PROOF STATE]
proof (prove)
using this:
m \<le> i

goal (1 subgoal):
 1. d (E (Suc i)) + d (F m i - E (Suc i)) + d (F m (Suc i)) = d (E (Suc i) \<union> F m i) + d (F m (Suc i))
[PROOF STEP]
by (simp add: d_def field_simps M.finite_measure_Union' N.finite_measure_Union')
[PROOF STATE]
proof (state)
this:
d (E (Suc i)) + d (F m i - E (Suc i)) + d (F m (Suc i)) = d (E (Suc i) \<union> F m i) + d (F m (Suc i))

goal (1 subgoal):
 1. \<And>na. \<lbrakk>m \<le> na; na < n; \<gamma> - 2 / 2 ^ m + 1 / 2 ^ na \<le> d (F m na)\<rbrakk> \<Longrightarrow> \<gamma> - 2 / 2 ^ m + 1 / 2 ^ Suc na \<le> d (F m (Suc na))
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
d (E (Suc i)) + d (F m i - E (Suc i)) + d (F m (Suc i)) = d (E (Suc i) \<union> F m i) + d (F m (Suc i))

goal (1 subgoal):
 1. \<And>na. \<lbrakk>m \<le> na; na < n; \<gamma> - 2 / 2 ^ m + 1 / 2 ^ na \<le> d (F m na)\<rbrakk> \<Longrightarrow> \<gamma> - 2 / 2 ^ m + 1 / 2 ^ Suc na \<le> d (F m (Suc na))
[PROOF STEP]
have "\<dots> \<le> \<gamma> + d (F m (Suc i))"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. d (E (Suc i) \<union> F m i) + d (F m (Suc i)) \<le> \<gamma> + d (F m (Suc i))
[PROOF STEP]
using \<open>m \<le> i\<close>
[PROOF STATE]
proof (prove)
using this:
m \<le> i

goal (1 subgoal):
 1. d (E (Suc i) \<union> F m i) + d (F m (Suc i)) \<le> \<gamma> + d (F m (Suc i))
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
d (E (Suc i) \<union> F m i) + d (F m (Suc i)) \<le> \<gamma> + d (F m (Suc i))

goal (1 subgoal):
 1. \<And>na. \<lbrakk>m \<le> na; na < n; \<gamma> - 2 / 2 ^ m + 1 / 2 ^ na \<le> d (F m na)\<rbrakk> \<Longrightarrow> \<gamma> - 2 / 2 ^ m + 1 / 2 ^ Suc na \<le> d (F m (Suc na))
[PROOF STEP]
finally
[PROOF STATE]
proof (chain)
picking this:
\<gamma> + (\<gamma> - 2 / 2 ^ m + 1 / 2 ^ Suc i) \<le> \<gamma> + d (F m (Suc i))
[PROOF STEP]
show ?case
[PROOF STATE]
proof (prove)
using this:
\<gamma> + (\<gamma> - 2 / 2 ^ m + 1 / 2 ^ Suc i) \<le> \<gamma> + d (F m (Suc i))

goal (1 subgoal):
 1. \<gamma> - 2 / 2 ^ m + 1 / 2 ^ Suc i \<le> d (F m (Suc i))
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
\<gamma> - 2 / 2 ^ m + 1 / 2 ^ Suc i \<le> d (F m (Suc i))

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
?m \<le> ?n \<Longrightarrow> \<gamma> - 2 / 2 ^ ?m + 1 / 2 ^ ?n \<le> d (F ?m ?n)

goal (1 subgoal):
 1. \<exists>Y\<in>sets M. (\<forall>X\<in>sets M. X \<subseteq> Y \<longrightarrow> emeasure N X \<le> emeasure M X) \<and> (\<forall>X\<in>sets M. X \<inter> Y = {} \<longrightarrow> emeasure M X \<le> emeasure N X)
[PROOF STEP]
define F' where "F' m = (\<Inter>i\<in>{m..}. E i)" for m
[PROOF STATE]
proof (state)
this:
F' ?m = \<Inter> (E ` {?m..})

goal (1 subgoal):
 1. \<exists>Y\<in>sets M. (\<forall>X\<in>sets M. X \<subseteq> Y \<longrightarrow> emeasure N X \<le> emeasure M X) \<and> (\<forall>X\<in>sets M. X \<inter> Y = {} \<longrightarrow> emeasure M X \<le> emeasure N X)
[PROOF STEP]
have F'_eq: "F' m = (\<Inter>i. F m (i + m))" for m
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. F' m = (\<Inter>i. F m (i + m))
[PROOF STEP]
by (fastforce simp: le_iff_add[of m] F'_def F_def)
[PROOF STATE]
proof (state)
this:
F' ?m = (\<Inter>i. F ?m (i + ?m))

goal (1 subgoal):
 1. \<exists>Y\<in>sets M. (\<forall>X\<in>sets M. X \<subseteq> Y \<longrightarrow> emeasure N X \<le> emeasure M X) \<and> (\<forall>X\<in>sets M. X \<inter> Y = {} \<longrightarrow> emeasure M X \<le> emeasure N X)
[PROOF STEP]
have [measurable]: "F' m \<in> sets M" for m
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. F' m \<in> sets M
[PROOF STEP]
by (auto simp: F'_def)
[PROOF STATE]
proof (state)
this:
F' ?m \<in> sets M

goal (1 subgoal):
 1. \<exists>Y\<in>sets M. (\<forall>X\<in>sets M. X \<subseteq> Y \<longrightarrow> emeasure N X \<le> emeasure M X) \<and> (\<forall>X\<in>sets M. X \<inter> Y = {} \<longrightarrow> emeasure M X \<le> emeasure N X)
[PROOF STEP]
have \<gamma>_le: "\<gamma> - 0 \<le> d (\<Union>m. F' m)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<gamma> - 0 \<le> d (\<Union> (range F'))
[PROOF STEP]
proof (rule LIMSEQ_le)
[PROOF STATE]
proof (state)
goal (3 subgoals):
 1. ?X \<longlonglongrightarrow> \<gamma> - 0
 2. ?Y \<longlonglongrightarrow> d (\<Union> (range F'))
 3. \<exists>N. \<forall>n\<ge>N. ?X n \<le> ?Y n
[PROOF STEP]
show "(\<lambda>n. \<gamma> - 2 / 2 ^ n) \<longlonglongrightarrow> \<gamma> - 0"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (\<lambda>n. \<gamma> - 2 / 2 ^ n) \<longlonglongrightarrow> \<gamma> - 0
[PROOF STEP]
by (intro tendsto_intros LIMSEQ_divide_realpow_zero) auto
[PROOF STATE]
proof (state)
this:
(\<lambda>n. \<gamma> - 2 / 2 ^ n) \<longlonglongrightarrow> \<gamma> - 0

goal (2 subgoals):
 1. ?Y \<longlonglongrightarrow> d (\<Union> (range F'))
 2. \<exists>N. \<forall>n\<ge>N. \<gamma> - 2 / 2 ^ n \<le> ?Y n
[PROOF STEP]
have "incseq F'"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. incseq F'
[PROOF STEP]
by (auto simp: incseq_def F'_def)
[PROOF STATE]
proof (state)
this:
incseq F'

goal (2 subgoals):
 1. ?Y \<longlonglongrightarrow> d (\<Union> (range F'))
 2. \<exists>N. \<forall>n\<ge>N. \<gamma> - 2 / 2 ^ n \<le> ?Y n
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
incseq F'
[PROOF STEP]
show "(\<lambda>m. d (F' m)) \<longlonglongrightarrow> d (\<Union>m. F' m)"
[PROOF STATE]
proof (prove)
using this:
incseq F'

goal (1 subgoal):
 1. (\<lambda>m. d (F' m)) \<longlonglongrightarrow> d (\<Union> (range F'))
[PROOF STEP]
unfolding d_def
[PROOF STATE]
proof (prove)
using this:
incseq F'

goal (1 subgoal):
 1. (\<lambda>m. Sigma_Algebra.measure M (F' m) - Sigma_Algebra.measure N (F' m)) \<longlonglongrightarrow> Sigma_Algebra.measure M (\<Union> (range F')) - Sigma_Algebra.measure N (\<Union> (range F'))
[PROOF STEP]
by (intro tendsto_diff M.finite_Lim_measure_incseq N.finite_Lim_measure_incseq) auto
[PROOF STATE]
proof (state)
this:
(\<lambda>m. d (F' m)) \<longlonglongrightarrow> d (\<Union> (range F'))

goal (1 subgoal):
 1. \<exists>N. \<forall>n\<ge>N. \<gamma> - 2 / 2 ^ n \<le> d (F' n)
[PROOF STEP]
have "\<gamma> - 2 / 2 ^ m + 0 \<le> d (F' m)" for m
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<gamma> - 2 / 2 ^ m + 0 \<le> d (F' m)
[PROOF STEP]
proof (rule LIMSEQ_le)
[PROOF STATE]
proof (state)
goal (3 subgoals):
 1. ?X \<longlonglongrightarrow> \<gamma> - 2 / 2 ^ m + 0
 2. ?Y \<longlonglongrightarrow> d (F' m)
 3. \<exists>N. \<forall>n\<ge>N. ?X n \<le> ?Y n
[PROOF STEP]
have *: "decseq (\<lambda>n. F m (n + m))"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. monotone (\<le>) (\<lambda>x y. y \<subseteq> x) (\<lambda>n. F m (n + m))
[PROOF STEP]
by (auto simp: decseq_def F_def)
[PROOF STATE]
proof (state)
this:
monotone (\<le>) (\<lambda>x y. y \<subseteq> x) (\<lambda>n. F m (n + m))

goal (3 subgoals):
 1. ?X \<longlonglongrightarrow> \<gamma> - 2 / 2 ^ m + 0
 2. ?Y \<longlonglongrightarrow> d (F' m)
 3. \<exists>N. \<forall>n\<ge>N. ?X n \<le> ?Y n
[PROOF STEP]
show "(\<lambda>n. d (F m n)) \<longlonglongrightarrow> d (F' m)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (\<lambda>n. d (F m n)) \<longlonglongrightarrow> d (F' m)
[PROOF STEP]
unfolding d_def F'_eq
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (\<lambda>n. Sigma_Algebra.measure M (F m n) - Sigma_Algebra.measure N (F m n)) \<longlonglongrightarrow> Sigma_Algebra.measure M (\<Inter>i. F m (i + m)) - Sigma_Algebra.measure N (\<Inter>i. F m (i + m))
[PROOF STEP]
by (rule LIMSEQ_offset[where k=m])
           (auto intro!: tendsto_diff M.finite_Lim_measure_decseq N.finite_Lim_measure_decseq *)
[PROOF STATE]
proof (state)
this:
(\<lambda>n. d (F m n)) \<longlonglongrightarrow> d (F' m)

goal (2 subgoals):
 1. ?X \<longlonglongrightarrow> \<gamma> - 2 / 2 ^ m + 0
 2. \<exists>N. \<forall>n\<ge>N. ?X n \<le> d (F m n)
[PROOF STEP]
show "(\<lambda>n. \<gamma> - 2 / 2 ^ m + 1 / 2 ^ n) \<longlonglongrightarrow> \<gamma> - 2 / 2 ^ m + 0"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (\<lambda>n. \<gamma> - 2 / 2 ^ m + 1 / 2 ^ n) \<longlonglongrightarrow> \<gamma> - 2 / 2 ^ m + 0
[PROOF STEP]
by (intro tendsto_add LIMSEQ_divide_realpow_zero tendsto_const) auto
[PROOF STATE]
proof (state)
this:
(\<lambda>n. \<gamma> - 2 / 2 ^ m + 1 / 2 ^ n) \<longlonglongrightarrow> \<gamma> - 2 / 2 ^ m + 0

goal (1 subgoal):
 1. \<exists>N. \<forall>n\<ge>N. \<gamma> - 2 / 2 ^ m + 1 / 2 ^ n \<le> d (F m n)
[PROOF STEP]
show "\<exists>N. \<forall>n\<ge>N. \<gamma> - 2 / 2 ^ m + 1 / 2 ^ n \<le> d (F m n)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<exists>N. \<forall>n\<ge>N. \<gamma> - 2 / 2 ^ m + 1 / 2 ^ n \<le> d (F m n)
[PROOF STEP]
using 1[of m]
[PROOF STATE]
proof (prove)
using this:
m \<le> ?n \<Longrightarrow> \<gamma> - 2 / 2 ^ m + 1 / 2 ^ ?n \<le> d (F m ?n)

goal (1 subgoal):
 1. \<exists>N. \<forall>n\<ge>N. \<gamma> - 2 / 2 ^ m + 1 / 2 ^ n \<le> d (F m n)
[PROOF STEP]
by (intro exI[of _ m]) auto
[PROOF STATE]
proof (state)
this:
\<exists>N. \<forall>n\<ge>N. \<gamma> - 2 / 2 ^ m + 1 / 2 ^ n \<le> d (F m n)

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
\<gamma> - 2 / 2 ^ ?m + 0 \<le> d (F' ?m)

goal (1 subgoal):
 1. \<exists>N. \<forall>n\<ge>N. \<gamma> - 2 / 2 ^ n \<le> d (F' n)
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
\<gamma> - 2 / 2 ^ ?m + 0 \<le> d (F' ?m)
[PROOF STEP]
show "\<exists>N. \<forall>n\<ge>N. \<gamma> - 2 / 2 ^ n \<le> d (F' n)"
[PROOF STATE]
proof (prove)
using this:
\<gamma> - 2 / 2 ^ ?m + 0 \<le> d (F' ?m)

goal (1 subgoal):
 1. \<exists>N. \<forall>n\<ge>N. \<gamma> - 2 / 2 ^ n \<le> d (F' n)
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
\<exists>N. \<forall>n\<ge>N. \<gamma> - 2 / 2 ^ n \<le> d (F' n)

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
\<gamma> - 0 \<le> d (\<Union> (range F'))

goal (1 subgoal):
 1. \<exists>Y\<in>sets M. (\<forall>X\<in>sets M. X \<subseteq> Y \<longrightarrow> emeasure N X \<le> emeasure M X) \<and> (\<forall>X\<in>sets M. X \<inter> Y = {} \<longrightarrow> emeasure M X \<le> emeasure N X)
[PROOF STEP]
show ?thesis
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<exists>Y\<in>sets M. (\<forall>X\<in>sets M. X \<subseteq> Y \<longrightarrow> emeasure N X \<le> emeasure M X) \<and> (\<forall>X\<in>sets M. X \<inter> Y = {} \<longrightarrow> emeasure M X \<le> emeasure N X)
[PROOF STEP]
proof (safe intro!: bexI[of _ "\<Union>m. F' m"])
[PROOF STATE]
proof (state)
goal (3 subgoals):
 1. \<And>X. \<lbrakk>X \<in> sets M; X \<subseteq> \<Union> (range F')\<rbrakk> \<Longrightarrow> emeasure N X \<le> emeasure M X
 2. \<And>X. \<lbrakk>X \<in> sets M; X \<inter> \<Union> (range F') = {}\<rbrakk> \<Longrightarrow> emeasure M X \<le> emeasure N X
 3. \<Union> (range F') \<in> sets M
[PROOF STEP]
fix X
[PROOF STATE]
proof (state)
goal (3 subgoals):
 1. \<And>X. \<lbrakk>X \<in> sets M; X \<subseteq> \<Union> (range F')\<rbrakk> \<Longrightarrow> emeasure N X \<le> emeasure M X
 2. \<And>X. \<lbrakk>X \<in> sets M; X \<inter> \<Union> (range F') = {}\<rbrakk> \<Longrightarrow> emeasure M X \<le> emeasure N X
 3. \<Union> (range F') \<in> sets M
[PROOF STEP]
assume [measurable]: "X \<in> sets M" and X: "X \<subseteq> (\<Union>m. F' m)"
[PROOF STATE]
proof (state)
this:
X \<in> sets M
X \<subseteq> \<Union> (range F')

goal (3 subgoals):
 1. \<And>X. \<lbrakk>X \<in> sets M; X \<subseteq> \<Union> (range F')\<rbrakk> \<Longrightarrow> emeasure N X \<le> emeasure M X
 2. \<And>X. \<lbrakk>X \<in> sets M; X \<inter> \<Union> (range F') = {}\<rbrakk> \<Longrightarrow> emeasure M X \<le> emeasure N X
 3. \<Union> (range F') \<in> sets M
[PROOF STEP]
have "d (\<Union>m. F' m) - d X = d ((\<Union>m. F' m) - X)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. d (\<Union> (range F')) - d X = d (\<Union> (range F') - X)
[PROOF STEP]
using X
[PROOF STATE]
proof (prove)
using this:
X \<subseteq> \<Union> (range F')

goal (1 subgoal):
 1. d (\<Union> (range F')) - d X = d (\<Union> (range F') - X)
[PROOF STEP]
by (auto simp: d_def M.finite_measure_Diff N.finite_measure_Diff)
[PROOF STATE]
proof (state)
this:
d (\<Union> (range F')) - d X = d (\<Union> (range F') - X)

goal (3 subgoals):
 1. \<And>X. \<lbrakk>X \<in> sets M; X \<subseteq> \<Union> (range F')\<rbrakk> \<Longrightarrow> emeasure N X \<le> emeasure M X
 2. \<And>X. \<lbrakk>X \<in> sets M; X \<inter> \<Union> (range F') = {}\<rbrakk> \<Longrightarrow> emeasure M X \<le> emeasure N X
 3. \<Union> (range F') \<in> sets M
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
d (\<Union> (range F')) - d X = d (\<Union> (range F') - X)

goal (3 subgoals):
 1. \<And>X. \<lbrakk>X \<in> sets M; X \<subseteq> \<Union> (range F')\<rbrakk> \<Longrightarrow> emeasure N X \<le> emeasure M X
 2. \<And>X. \<lbrakk>X \<in> sets M; X \<inter> \<Union> (range F') = {}\<rbrakk> \<Longrightarrow> emeasure M X \<le> emeasure N X
 3. \<Union> (range F') \<in> sets M
[PROOF STEP]
have "\<dots> \<le> \<gamma>"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. d (\<Union> (range F') - X) \<le> \<gamma>
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
d (\<Union> (range F') - X) \<le> \<gamma>

goal (3 subgoals):
 1. \<And>X. \<lbrakk>X \<in> sets M; X \<subseteq> \<Union> (range F')\<rbrakk> \<Longrightarrow> emeasure N X \<le> emeasure M X
 2. \<And>X. \<lbrakk>X \<in> sets M; X \<inter> \<Union> (range F') = {}\<rbrakk> \<Longrightarrow> emeasure M X \<le> emeasure N X
 3. \<Union> (range F') \<in> sets M
[PROOF STEP]
finally
[PROOF STATE]
proof (chain)
picking this:
d (\<Union> (range F')) - d X \<le> \<gamma>
[PROOF STEP]
have "0 \<le> d X"
[PROOF STATE]
proof (prove)
using this:
d (\<Union> (range F')) - d X \<le> \<gamma>

goal (1 subgoal):
 1. 0 \<le> d X
[PROOF STEP]
using \<gamma>_le
[PROOF STATE]
proof (prove)
using this:
d (\<Union> (range F')) - d X \<le> \<gamma>
\<gamma> - 0 \<le> d (\<Union> (range F'))

goal (1 subgoal):
 1. 0 \<le> d X
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
0 \<le> d X

goal (3 subgoals):
 1. \<And>X. \<lbrakk>X \<in> sets M; X \<subseteq> \<Union> (range F')\<rbrakk> \<Longrightarrow> emeasure N X \<le> emeasure M X
 2. \<And>X. \<lbrakk>X \<in> sets M; X \<inter> \<Union> (range F') = {}\<rbrakk> \<Longrightarrow> emeasure M X \<le> emeasure N X
 3. \<Union> (range F') \<in> sets M
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
0 \<le> d X
[PROOF STEP]
show "emeasure N X \<le> emeasure M X"
[PROOF STATE]
proof (prove)
using this:
0 \<le> d X

goal (1 subgoal):
 1. emeasure N X \<le> emeasure M X
[PROOF STEP]
by (auto simp: d_def M.emeasure_eq_measure N.emeasure_eq_measure)
[PROOF STATE]
proof (state)
this:
emeasure N X \<le> emeasure M X

goal (2 subgoals):
 1. \<And>X. \<lbrakk>X \<in> sets M; X \<inter> \<Union> (range F') = {}\<rbrakk> \<Longrightarrow> emeasure M X \<le> emeasure N X
 2. \<Union> (range F') \<in> sets M
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (2 subgoals):
 1. \<And>X. \<lbrakk>X \<in> sets M; X \<inter> \<Union> (range F') = {}\<rbrakk> \<Longrightarrow> emeasure M X \<le> emeasure N X
 2. \<Union> (range F') \<in> sets M
[PROOF STEP]
fix X
[PROOF STATE]
proof (state)
goal (2 subgoals):
 1. \<And>X. \<lbrakk>X \<in> sets M; X \<inter> \<Union> (range F') = {}\<rbrakk> \<Longrightarrow> emeasure M X \<le> emeasure N X
 2. \<Union> (range F') \<in> sets M
[PROOF STEP]
assume [measurable]: "X \<in> sets M" and X: "X \<inter> (\<Union>m. F' m) = {}"
[PROOF STATE]
proof (state)
this:
X \<in> sets M
X \<inter> \<Union> (range F') = {}

goal (2 subgoals):
 1. \<And>X. \<lbrakk>X \<in> sets M; X \<inter> \<Union> (range F') = {}\<rbrakk> \<Longrightarrow> emeasure M X \<le> emeasure N X
 2. \<Union> (range F') \<in> sets M
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
X \<in> sets M
X \<inter> \<Union> (range F') = {}
[PROOF STEP]
have "d (\<Union>m. F' m) + d X = d (X \<union> (\<Union>m. F' m))"
[PROOF STATE]
proof (prove)
using this:
X \<in> sets M
X \<inter> \<Union> (range F') = {}

goal (1 subgoal):
 1. d (\<Union> (range F')) + d X = d (X \<union> \<Union> (range F'))
[PROOF STEP]
by (auto simp: d_def M.finite_measure_Union N.finite_measure_Union)
[PROOF STATE]
proof (state)
this:
d (\<Union> (range F')) + d X = d (X \<union> \<Union> (range F'))

goal (2 subgoals):
 1. \<And>X. \<lbrakk>X \<in> sets M; X \<inter> \<Union> (range F') = {}\<rbrakk> \<Longrightarrow> emeasure M X \<le> emeasure N X
 2. \<Union> (range F') \<in> sets M
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
d (\<Union> (range F')) + d X = d (X \<union> \<Union> (range F'))

goal (2 subgoals):
 1. \<And>X. \<lbrakk>X \<in> sets M; X \<inter> \<Union> (range F') = {}\<rbrakk> \<Longrightarrow> emeasure M X \<le> emeasure N X
 2. \<Union> (range F') \<in> sets M
[PROOF STEP]
have "\<dots> \<le> \<gamma>"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. d (X \<union> \<Union> (range F')) \<le> \<gamma>
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
d (X \<union> \<Union> (range F')) \<le> \<gamma>

goal (2 subgoals):
 1. \<And>X. \<lbrakk>X \<in> sets M; X \<inter> \<Union> (range F') = {}\<rbrakk> \<Longrightarrow> emeasure M X \<le> emeasure N X
 2. \<Union> (range F') \<in> sets M
[PROOF STEP]
finally
[PROOF STATE]
proof (chain)
picking this:
d (\<Union> (range F')) + d X \<le> \<gamma>
[PROOF STEP]
have "d X \<le> 0"
[PROOF STATE]
proof (prove)
using this:
d (\<Union> (range F')) + d X \<le> \<gamma>

goal (1 subgoal):
 1. d X \<le> 0
[PROOF STEP]
using \<gamma>_le
[PROOF STATE]
proof (prove)
using this:
d (\<Union> (range F')) + d X \<le> \<gamma>
\<gamma> - 0 \<le> d (\<Union> (range F'))

goal (1 subgoal):
 1. d X \<le> 0
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
d X \<le> 0

goal (2 subgoals):
 1. \<And>X. \<lbrakk>X \<in> sets M; X \<inter> \<Union> (range F') = {}\<rbrakk> \<Longrightarrow> emeasure M X \<le> emeasure N X
 2. \<Union> (range F') \<in> sets M
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
d X \<le> 0
[PROOF STEP]
show "emeasure M X \<le> emeasure N X"
[PROOF STATE]
proof (prove)
using this:
d X \<le> 0

goal (1 subgoal):
 1. emeasure M X \<le> emeasure N X
[PROOF STEP]
by (auto simp: d_def M.emeasure_eq_measure N.emeasure_eq_measure)
[PROOF STATE]
proof (state)
this:
emeasure M X \<le> emeasure N X

goal (1 subgoal):
 1. \<Union> (range F') \<in> sets M
[PROOF STEP]
qed auto
[PROOF STATE]
proof (state)
this:
\<exists>Y\<in>sets M. (\<forall>X\<in>sets M. X \<subseteq> Y \<longrightarrow> emeasure N X \<le> emeasure M X) \<and> (\<forall>X\<in>sets M. X \<inter> Y = {} \<longrightarrow> emeasure M X \<le> emeasure N X)

goal:
No subgoals!
[PROOF STEP]
qed


[STATEMENT]
lemma af_trans_imp_wf:
  assumes "almost_full_on P A"
    and "transp_on P A"
  shows "wfp_on (strict P) A"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. wfp_on (strict P) A
[PROOF STEP]
using assms
[PROOF STATE]
proof (prove)
using this:
almost_full_on P A
transp_on P A

goal (1 subgoal):
 1. wfp_on (strict P) A
[PROOF STEP]
by (intro af_trans_extension_imp_wf)


[STATEMENT]
lemma Id_on_Set [code]: "Id_on (Set t) =  fold_keys (\<lambda>x. Set.insert (x, x)) t {}"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. Id_on (Set t) = fold_keys (\<lambda>x. insert (x, x)) t {}
[PROOF STEP]
proof -
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. Id_on (Set t) = fold_keys (\<lambda>x. insert (x, x)) t {}
[PROOF STEP]
have "comp_fun_commute (\<lambda>x. Set.insert (x, x))"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. comp_fun_commute (\<lambda>x. insert (x, x))
[PROOF STEP]
by standard auto
[PROOF STATE]
proof (state)
this:
comp_fun_commute (\<lambda>x. insert (x, x))

goal (1 subgoal):
 1. Id_on (Set t) = fold_keys (\<lambda>x. insert (x, x)) t {}
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
comp_fun_commute (\<lambda>x. insert (x, x))
[PROOF STEP]
show ?thesis
[PROOF STATE]
proof (prove)
using this:
comp_fun_commute (\<lambda>x. insert (x, x))

goal (1 subgoal):
 1. Id_on (Set t) = fold_keys (\<lambda>x. insert (x, x)) t {}
[PROOF STEP]
by (auto simp add: Id_on_fold intro!: finite_fold_fold_keys)
[PROOF STATE]
proof (state)
this:
Id_on (Set t) = fold_keys (\<lambda>x. insert (x, x)) t {}

goal:
No subgoals!
[PROOF STEP]
qed


[STATEMENT]
lemma commutant_tensor1: \<open>commutant (range (\<lambda>a. a \<otimes>\<^sub>o id_cblinfun)) = range (\<lambda>b. id_cblinfun \<otimes>\<^sub>o b)\<close>
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. commutant (range (\<lambda>a. a \<otimes>\<^sub>o id_cblinfun)) = range ((\<otimes>\<^sub>o) id_cblinfun)
[PROOF STEP]
proof (rule Set.set_eqI, rule iffI)
[PROOF STATE]
proof (state)
goal (2 subgoals):
 1. \<And>x. x \<in> commutant (range (\<lambda>a. a \<otimes>\<^sub>o id_cblinfun)) \<Longrightarrow> x \<in> range ((\<otimes>\<^sub>o) id_cblinfun)
 2. \<And>x. x \<in> range ((\<otimes>\<^sub>o) id_cblinfun) \<Longrightarrow> x \<in> commutant (range (\<lambda>a. a \<otimes>\<^sub>o id_cblinfun))
[PROOF STEP]
fix x :: \<open>('a \<times> 'b) ell2 \<Rightarrow>\<^sub>C\<^sub>L ('a \<times> 'b) ell2\<close>
[PROOF STATE]
proof (state)
goal (2 subgoals):
 1. \<And>x. x \<in> commutant (range (\<lambda>a. a \<otimes>\<^sub>o id_cblinfun)) \<Longrightarrow> x \<in> range ((\<otimes>\<^sub>o) id_cblinfun)
 2. \<And>x. x \<in> range ((\<otimes>\<^sub>o) id_cblinfun) \<Longrightarrow> x \<in> commutant (range (\<lambda>a. a \<otimes>\<^sub>o id_cblinfun))
[PROOF STEP]
fix \<gamma> :: 'a
[PROOF STATE]
proof (state)
goal (2 subgoals):
 1. \<And>x. x \<in> commutant (range (\<lambda>a. a \<otimes>\<^sub>o id_cblinfun)) \<Longrightarrow> x \<in> range ((\<otimes>\<^sub>o) id_cblinfun)
 2. \<And>x. x \<in> range ((\<otimes>\<^sub>o) id_cblinfun) \<Longrightarrow> x \<in> commutant (range (\<lambda>a. a \<otimes>\<^sub>o id_cblinfun))
[PROOF STEP]
assume \<open>x \<in> commutant (range (\<lambda>a. a \<otimes>\<^sub>o id_cblinfun))\<close>
[PROOF STATE]
proof (state)
this:
x \<in> commutant (range (\<lambda>a. a \<otimes>\<^sub>o id_cblinfun))

goal (2 subgoals):
 1. \<And>x. x \<in> commutant (range (\<lambda>a. a \<otimes>\<^sub>o id_cblinfun)) \<Longrightarrow> x \<in> range ((\<otimes>\<^sub>o) id_cblinfun)
 2. \<And>x. x \<in> range ((\<otimes>\<^sub>o) id_cblinfun) \<Longrightarrow> x \<in> commutant (range (\<lambda>a. a \<otimes>\<^sub>o id_cblinfun))
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
x \<in> commutant (range (\<lambda>a. a \<otimes>\<^sub>o id_cblinfun))
[PROOF STEP]
have comm: \<open>(a \<otimes>\<^sub>o id_cblinfun) *\<^sub>V x *\<^sub>V \<psi> = x *\<^sub>V (a \<otimes>\<^sub>o id_cblinfun) *\<^sub>V \<psi>\<close> for a \<psi>
[PROOF STATE]
proof (prove)
using this:
x \<in> commutant (range (\<lambda>a. a \<otimes>\<^sub>o id_cblinfun))

goal (1 subgoal):
 1. (a \<otimes>\<^sub>o id_cblinfun) *\<^sub>V x *\<^sub>V \<psi> = x *\<^sub>V (a \<otimes>\<^sub>o id_cblinfun) *\<^sub>V \<psi>
[PROOF STEP]
by (metis (mono_tags, lifting) commutant_def mem_Collect_eq rangeI cblinfun_apply_cblinfun_compose)
[PROOF STATE]
proof (state)
this:
(?a \<otimes>\<^sub>o id_cblinfun) *\<^sub>V x *\<^sub>V ?\<psi> = x *\<^sub>V (?a \<otimes>\<^sub>o id_cblinfun) *\<^sub>V ?\<psi>

goal (2 subgoals):
 1. \<And>x. x \<in> commutant (range (\<lambda>a. a \<otimes>\<^sub>o id_cblinfun)) \<Longrightarrow> x \<in> range ((\<otimes>\<^sub>o) id_cblinfun)
 2. \<And>x. x \<in> range ((\<otimes>\<^sub>o) id_cblinfun) \<Longrightarrow> x \<in> commutant (range (\<lambda>a. a \<otimes>\<^sub>o id_cblinfun))
[PROOF STEP]
obtain x' where x': \<open>cinner (ket j) (x' *\<^sub>V ket l) = cinner (ket (\<gamma>,j)) (x *\<^sub>V ket (\<gamma>,l))\<close> for j l
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (\<And>x'. (\<And>j l. ket j \<bullet>\<^sub>C (x' *\<^sub>V ket l) = ket (\<gamma>, j) \<bullet>\<^sub>C (x *\<^sub>V ket (\<gamma>, l))) \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
proof atomize_elim
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. \<exists>x'. \<forall>j l. ket j \<bullet>\<^sub>C (x' *\<^sub>V ket l) = ket (\<gamma>, j) \<bullet>\<^sub>C (x *\<^sub>V ket (\<gamma>, l))
[PROOF STEP]
obtain \<psi> where \<psi>: \<open>cinner (ket j) (\<psi> l) = cinner (ket (\<gamma>, j)) (x *\<^sub>V ket (\<gamma>, l))\<close> for l j
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (\<And>\<psi>. (\<And>l j. ket j \<bullet>\<^sub>C \<psi> l = ket (\<gamma>, j) \<bullet>\<^sub>C (x *\<^sub>V ket (\<gamma>, l))) \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
apply (atomize_elim, rule choice, rule allI)
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<And>l. \<exists>y. \<forall>j. ket j \<bullet>\<^sub>C y = ket (\<gamma>, j) \<bullet>\<^sub>C (x *\<^sub>V ket (\<gamma>, l))
[PROOF STEP]
apply (rule_tac x=\<open>Abs_ell2 (\<lambda>j. cinner (ket (\<gamma>, j)) (x *\<^sub>V ket (\<gamma>, l)))\<close> in exI)
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<And>l. \<forall>j. ket j \<bullet>\<^sub>C Abs_ell2 (\<lambda>j. ket (\<gamma>, j) \<bullet>\<^sub>C (x *\<^sub>V ket (\<gamma>, l))) = ket (\<gamma>, j) \<bullet>\<^sub>C (x *\<^sub>V ket (\<gamma>, l))
[PROOF STEP]
by (simp add: cinner_ket_left Abs_ell2_inverse)
[PROOF STATE]
proof (state)
this:
ket ?j \<bullet>\<^sub>C \<psi> ?l = ket (\<gamma>, ?j) \<bullet>\<^sub>C (x *\<^sub>V ket (\<gamma>, ?l))

goal (1 subgoal):
 1. \<exists>x'. \<forall>j l. ket j \<bullet>\<^sub>C (x' *\<^sub>V ket l) = ket (\<gamma>, j) \<bullet>\<^sub>C (x *\<^sub>V ket (\<gamma>, l))
[PROOF STEP]
obtain x' where \<open>x' *\<^sub>V ket l = \<psi> l\<close> for l
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (\<And>x'. (\<And>l. x' *\<^sub>V ket l = \<psi> l) \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
apply atomize_elim
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<exists>x'. \<forall>l. x' *\<^sub>V ket l = \<psi> l
[PROOF STEP]
apply (rule exI[of _ \<open>cblinfun_extension (range ket) (\<lambda>l. \<psi> (inv ket l))\<close>])
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<forall>l. cblinfun_extension (range ket) (\<lambda>l. \<psi> (inv ket l)) *\<^sub>V ket l = \<psi> l
[PROOF STEP]
apply (subst cblinfun_extension_apply)
[PROOF STATE]
proof (prove)
goal (3 subgoals):
 1. \<And>l. cblinfun_extension_exists (range ket) (\<lambda>l. \<psi> (inv ket l))
 2. \<And>l. ket l \<in> range ket
 3. \<forall>l. \<psi> (inv ket (ket l)) = \<psi> l
[PROOF STEP]
apply (rule cblinfun_extension_exists_finite_dim)
[PROOF STATE]
proof (prove)
goal (4 subgoals):
 1. \<And>l. cindependent (range ket)
 2. \<And>l. cspan (range ket) = UNIV
 3. \<And>l. ket l \<in> range ket
 4. \<forall>l. \<psi> (inv ket (ket l)) = \<psi> l
[PROOF STEP]
by (auto simp add: inj_ket cindependent_ket)
[PROOF STATE]
proof (state)
this:
x' *\<^sub>V ket ?l = \<psi> ?l

goal (1 subgoal):
 1. \<exists>x'. \<forall>j l. ket j \<bullet>\<^sub>C (x' *\<^sub>V ket l) = ket (\<gamma>, j) \<bullet>\<^sub>C (x *\<^sub>V ket (\<gamma>, l))
[PROOF STEP]
with \<psi>
[PROOF STATE]
proof (chain)
picking this:
ket ?j \<bullet>\<^sub>C \<psi> ?l = ket (\<gamma>, ?j) \<bullet>\<^sub>C (x *\<^sub>V ket (\<gamma>, ?l))
x' *\<^sub>V ket ?l = \<psi> ?l
[PROOF STEP]
have \<open>cinner (ket j) (x' *\<^sub>V ket l) = cinner (ket (\<gamma>, j)) (x *\<^sub>V ket (\<gamma>, l))\<close> for j l
[PROOF STATE]
proof (prove)
using this:
ket ?j \<bullet>\<^sub>C \<psi> ?l = ket (\<gamma>, ?j) \<bullet>\<^sub>C (x *\<^sub>V ket (\<gamma>, ?l))
x' *\<^sub>V ket ?l = \<psi> ?l

goal (1 subgoal):
 1. ket j \<bullet>\<^sub>C (x' *\<^sub>V ket l) = ket (\<gamma>, j) \<bullet>\<^sub>C (x *\<^sub>V ket (\<gamma>, l))
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
ket ?j \<bullet>\<^sub>C (x' *\<^sub>V ket ?l) = ket (\<gamma>, ?j) \<bullet>\<^sub>C (x *\<^sub>V ket (\<gamma>, ?l))

goal (1 subgoal):
 1. \<exists>x'. \<forall>j l. ket j \<bullet>\<^sub>C (x' *\<^sub>V ket l) = ket (\<gamma>, j) \<bullet>\<^sub>C (x *\<^sub>V ket (\<gamma>, l))
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
ket ?j \<bullet>\<^sub>C (x' *\<^sub>V ket ?l) = ket (\<gamma>, ?j) \<bullet>\<^sub>C (x *\<^sub>V ket (\<gamma>, ?l))
[PROOF STEP]
show \<open>\<exists>x'. \<forall>j l. cinner (ket j) (x' *\<^sub>V ket l) = cinner (ket (\<gamma>, j)) (x *\<^sub>V ket (\<gamma>, l))\<close>
[PROOF STATE]
proof (prove)
using this:
ket ?j \<bullet>\<^sub>C (x' *\<^sub>V ket ?l) = ket (\<gamma>, ?j) \<bullet>\<^sub>C (x *\<^sub>V ket (\<gamma>, ?l))

goal (1 subgoal):
 1. \<exists>x'. \<forall>j l. ket j \<bullet>\<^sub>C (x' *\<^sub>V ket l) = ket (\<gamma>, j) \<bullet>\<^sub>C (x *\<^sub>V ket (\<gamma>, l))
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
\<exists>x'. \<forall>j l. ket j \<bullet>\<^sub>C (x' *\<^sub>V ket l) = ket (\<gamma>, j) \<bullet>\<^sub>C (x *\<^sub>V ket (\<gamma>, l))

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
ket ?j \<bullet>\<^sub>C (x' *\<^sub>V ket ?l) = ket (\<gamma>, ?j) \<bullet>\<^sub>C (x *\<^sub>V ket (\<gamma>, ?l))

goal (2 subgoals):
 1. \<And>x. x \<in> commutant (range (\<lambda>a. a \<otimes>\<^sub>o id_cblinfun)) \<Longrightarrow> x \<in> range ((\<otimes>\<^sub>o) id_cblinfun)
 2. \<And>x. x \<in> range ((\<otimes>\<^sub>o) id_cblinfun) \<Longrightarrow> x \<in> commutant (range (\<lambda>a. a \<otimes>\<^sub>o id_cblinfun))
[PROOF STEP]
have \<open>cinner (ket (i,j)) (x *\<^sub>V ket (k,l)) = cinner (ket (i,j)) ((id_cblinfun \<otimes>\<^sub>o x') *\<^sub>V ket (k,l))\<close> for i j k l
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. ket (i, j) \<bullet>\<^sub>C (x *\<^sub>V ket (k, l)) = ket (i, j) \<bullet>\<^sub>C ((id_cblinfun \<otimes>\<^sub>o x') *\<^sub>V ket (k, l))
[PROOF STEP]
proof -
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. ket (i, j) \<bullet>\<^sub>C (x *\<^sub>V ket (k, l)) = ket (i, j) \<bullet>\<^sub>C ((id_cblinfun \<otimes>\<^sub>o x') *\<^sub>V ket (k, l))
[PROOF STEP]
have \<open>cinner (ket (i,j)) (x *\<^sub>V ket (k,l))
        = cinner ((butterket i \<gamma> \<otimes>\<^sub>o id_cblinfun) *\<^sub>V ket (\<gamma>,j)) (x *\<^sub>V (butterket k \<gamma> \<otimes>\<^sub>o id_cblinfun) *\<^sub>V ket (\<gamma>,l))\<close>
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. ket (i, j) \<bullet>\<^sub>C (x *\<^sub>V ket (k, l)) = ((butterket i \<gamma> \<otimes>\<^sub>o id_cblinfun) *\<^sub>V ket (\<gamma>, j)) \<bullet>\<^sub>C (x *\<^sub>V (butterket k \<gamma> \<otimes>\<^sub>o id_cblinfun) *\<^sub>V ket (\<gamma>, l))
[PROOF STEP]
by (auto simp: tensor_op_ket)
[PROOF STATE]
proof (state)
this:
ket (i, j) \<bullet>\<^sub>C (x *\<^sub>V ket (k, l)) = ((butterket i \<gamma> \<otimes>\<^sub>o id_cblinfun) *\<^sub>V ket (\<gamma>, j)) \<bullet>\<^sub>C (x *\<^sub>V (butterket k \<gamma> \<otimes>\<^sub>o id_cblinfun) *\<^sub>V ket (\<gamma>, l))

goal (1 subgoal):
 1. ket (i, j) \<bullet>\<^sub>C (x *\<^sub>V ket (k, l)) = ket (i, j) \<bullet>\<^sub>C ((id_cblinfun \<otimes>\<^sub>o x') *\<^sub>V ket (k, l))
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
ket (i, j) \<bullet>\<^sub>C (x *\<^sub>V ket (k, l)) = ((butterket i \<gamma> \<otimes>\<^sub>o id_cblinfun) *\<^sub>V ket (\<gamma>, j)) \<bullet>\<^sub>C (x *\<^sub>V (butterket k \<gamma> \<otimes>\<^sub>o id_cblinfun) *\<^sub>V ket (\<gamma>, l))

goal (1 subgoal):
 1. ket (i, j) \<bullet>\<^sub>C (x *\<^sub>V ket (k, l)) = ket (i, j) \<bullet>\<^sub>C ((id_cblinfun \<otimes>\<^sub>o x') *\<^sub>V ket (k, l))
[PROOF STEP]
have \<open>\<dots> = cinner (ket (\<gamma>,j)) ((butterket \<gamma> i \<otimes>\<^sub>o id_cblinfun) *\<^sub>V x *\<^sub>V (butterket k \<gamma> \<otimes>\<^sub>o id_cblinfun) *\<^sub>V ket (\<gamma>,l))\<close>
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. ((butterket i \<gamma> \<otimes>\<^sub>o id_cblinfun) *\<^sub>V ket (\<gamma>, j)) \<bullet>\<^sub>C (x *\<^sub>V (butterket k \<gamma> \<otimes>\<^sub>o id_cblinfun) *\<^sub>V ket (\<gamma>, l)) = ket (\<gamma>, j) \<bullet>\<^sub>C ((butterket \<gamma> i \<otimes>\<^sub>o id_cblinfun) *\<^sub>V x *\<^sub>V (butterket k \<gamma> \<otimes>\<^sub>o id_cblinfun) *\<^sub>V ket (\<gamma>, l))
[PROOF STEP]
by (metis (no_types, lifting) cinner_adj_left butterfly_adjoint id_cblinfun_adjoint tensor_op_adjoint)
[PROOF STATE]
proof (state)
this:
((butterket i \<gamma> \<otimes>\<^sub>o id_cblinfun) *\<^sub>V ket (\<gamma>, j)) \<bullet>\<^sub>C (x *\<^sub>V (butterket k \<gamma> \<otimes>\<^sub>o id_cblinfun) *\<^sub>V ket (\<gamma>, l)) = ket (\<gamma>, j) \<bullet>\<^sub>C ((butterket \<gamma> i \<otimes>\<^sub>o id_cblinfun) *\<^sub>V x *\<^sub>V (butterket k \<gamma> \<otimes>\<^sub>o id_cblinfun) *\<^sub>V ket (\<gamma>, l))

goal (1 subgoal):
 1. ket (i, j) \<bullet>\<^sub>C (x *\<^sub>V ket (k, l)) = ket (i, j) \<bullet>\<^sub>C ((id_cblinfun \<otimes>\<^sub>o x') *\<^sub>V ket (k, l))
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
((butterket i \<gamma> \<otimes>\<^sub>o id_cblinfun) *\<^sub>V ket (\<gamma>, j)) \<bullet>\<^sub>C (x *\<^sub>V (butterket k \<gamma> \<otimes>\<^sub>o id_cblinfun) *\<^sub>V ket (\<gamma>, l)) = ket (\<gamma>, j) \<bullet>\<^sub>C ((butterket \<gamma> i \<otimes>\<^sub>o id_cblinfun) *\<^sub>V x *\<^sub>V (butterket k \<gamma> \<otimes>\<^sub>o id_cblinfun) *\<^sub>V ket (\<gamma>, l))

goal (1 subgoal):
 1. ket (i, j) \<bullet>\<^sub>C (x *\<^sub>V ket (k, l)) = ket (i, j) \<bullet>\<^sub>C ((id_cblinfun \<otimes>\<^sub>o x') *\<^sub>V ket (k, l))
[PROOF STEP]
have \<open>\<dots> = cinner (ket (\<gamma>,j)) (x *\<^sub>V (butterket \<gamma> i \<otimes>\<^sub>o id_cblinfun o\<^sub>C\<^sub>L butterket k \<gamma> \<otimes>\<^sub>o id_cblinfun) *\<^sub>V ket (\<gamma>,l))\<close>
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. ket (\<gamma>, j) \<bullet>\<^sub>C ((butterket \<gamma> i \<otimes>\<^sub>o id_cblinfun) *\<^sub>V x *\<^sub>V (butterket k \<gamma> \<otimes>\<^sub>o id_cblinfun) *\<^sub>V ket (\<gamma>, l)) = ket (\<gamma>, j) \<bullet>\<^sub>C (x *\<^sub>V (butterket \<gamma> i \<otimes>\<^sub>o id_cblinfun o\<^sub>C\<^sub>L butterket k \<gamma> \<otimes>\<^sub>o id_cblinfun) *\<^sub>V ket (\<gamma>, l))
[PROOF STEP]
unfolding comm
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. ket (\<gamma>, j) \<bullet>\<^sub>C (x *\<^sub>V (butterket \<gamma> i \<otimes>\<^sub>o id_cblinfun) *\<^sub>V (butterket k \<gamma> \<otimes>\<^sub>o id_cblinfun) *\<^sub>V ket (\<gamma>, l)) = ket (\<gamma>, j) \<bullet>\<^sub>C (x *\<^sub>V (butterket \<gamma> i \<otimes>\<^sub>o id_cblinfun o\<^sub>C\<^sub>L butterket k \<gamma> \<otimes>\<^sub>o id_cblinfun) *\<^sub>V ket (\<gamma>, l))
[PROOF STEP]
by (simp add: cblinfun_apply_cblinfun_compose)
[PROOF STATE]
proof (state)
this:
ket (\<gamma>, j) \<bullet>\<^sub>C ((butterket \<gamma> i \<otimes>\<^sub>o id_cblinfun) *\<^sub>V x *\<^sub>V (butterket k \<gamma> \<otimes>\<^sub>o id_cblinfun) *\<^sub>V ket (\<gamma>, l)) = ket (\<gamma>, j) \<bullet>\<^sub>C (x *\<^sub>V (butterket \<gamma> i \<otimes>\<^sub>o id_cblinfun o\<^sub>C\<^sub>L butterket k \<gamma> \<otimes>\<^sub>o id_cblinfun) *\<^sub>V ket (\<gamma>, l))

goal (1 subgoal):
 1. ket (i, j) \<bullet>\<^sub>C (x *\<^sub>V ket (k, l)) = ket (i, j) \<bullet>\<^sub>C ((id_cblinfun \<otimes>\<^sub>o x') *\<^sub>V ket (k, l))
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
ket (\<gamma>, j) \<bullet>\<^sub>C ((butterket \<gamma> i \<otimes>\<^sub>o id_cblinfun) *\<^sub>V x *\<^sub>V (butterket k \<gamma> \<otimes>\<^sub>o id_cblinfun) *\<^sub>V ket (\<gamma>, l)) = ket (\<gamma>, j) \<bullet>\<^sub>C (x *\<^sub>V (butterket \<gamma> i \<otimes>\<^sub>o id_cblinfun o\<^sub>C\<^sub>L butterket k \<gamma> \<otimes>\<^sub>o id_cblinfun) *\<^sub>V ket (\<gamma>, l))

goal (1 subgoal):
 1. ket (i, j) \<bullet>\<^sub>C (x *\<^sub>V ket (k, l)) = ket (i, j) \<bullet>\<^sub>C ((id_cblinfun \<otimes>\<^sub>o x') *\<^sub>V ket (k, l))
[PROOF STEP]
have \<open>\<dots> = cinner (ket i) (ket k) * cinner (ket (\<gamma>,j)) (x *\<^sub>V ket (\<gamma>,l))\<close>
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. ket (\<gamma>, j) \<bullet>\<^sub>C (x *\<^sub>V (butterket \<gamma> i \<otimes>\<^sub>o id_cblinfun o\<^sub>C\<^sub>L butterket k \<gamma> \<otimes>\<^sub>o id_cblinfun) *\<^sub>V ket (\<gamma>, l)) = ket i \<bullet>\<^sub>C ket k * (ket (\<gamma>, j) \<bullet>\<^sub>C (x *\<^sub>V ket (\<gamma>, l)))
[PROOF STEP]
by (simp add: comp_tensor_op tensor_op_ket tensor_op_scaleC_left)
[PROOF STATE]
proof (state)
this:
ket (\<gamma>, j) \<bullet>\<^sub>C (x *\<^sub>V (butterket \<gamma> i \<otimes>\<^sub>o id_cblinfun o\<^sub>C\<^sub>L butterket k \<gamma> \<otimes>\<^sub>o id_cblinfun) *\<^sub>V ket (\<gamma>, l)) = ket i \<bullet>\<^sub>C ket k * (ket (\<gamma>, j) \<bullet>\<^sub>C (x *\<^sub>V ket (\<gamma>, l)))

goal (1 subgoal):
 1. ket (i, j) \<bullet>\<^sub>C (x *\<^sub>V ket (k, l)) = ket (i, j) \<bullet>\<^sub>C ((id_cblinfun \<otimes>\<^sub>o x') *\<^sub>V ket (k, l))
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
ket (\<gamma>, j) \<bullet>\<^sub>C (x *\<^sub>V (butterket \<gamma> i \<otimes>\<^sub>o id_cblinfun o\<^sub>C\<^sub>L butterket k \<gamma> \<otimes>\<^sub>o id_cblinfun) *\<^sub>V ket (\<gamma>, l)) = ket i \<bullet>\<^sub>C ket k * (ket (\<gamma>, j) \<bullet>\<^sub>C (x *\<^sub>V ket (\<gamma>, l)))

goal (1 subgoal):
 1. ket (i, j) \<bullet>\<^sub>C (x *\<^sub>V ket (k, l)) = ket (i, j) \<bullet>\<^sub>C ((id_cblinfun \<otimes>\<^sub>o x') *\<^sub>V ket (k, l))
[PROOF STEP]
have \<open>\<dots> = cinner (ket i) (ket k) * cinner (ket j) (x' *\<^sub>V ket l)\<close>
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. ket i \<bullet>\<^sub>C ket k * (ket (\<gamma>, j) \<bullet>\<^sub>C (x *\<^sub>V ket (\<gamma>, l))) = ket i \<bullet>\<^sub>C ket k * (ket j \<bullet>\<^sub>C (x' *\<^sub>V ket l))
[PROOF STEP]
by (simp add: x')
[PROOF STATE]
proof (state)
this:
ket i \<bullet>\<^sub>C ket k * (ket (\<gamma>, j) \<bullet>\<^sub>C (x *\<^sub>V ket (\<gamma>, l))) = ket i \<bullet>\<^sub>C ket k * (ket j \<bullet>\<^sub>C (x' *\<^sub>V ket l))

goal (1 subgoal):
 1. ket (i, j) \<bullet>\<^sub>C (x *\<^sub>V ket (k, l)) = ket (i, j) \<bullet>\<^sub>C ((id_cblinfun \<otimes>\<^sub>o x') *\<^sub>V ket (k, l))
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
ket i \<bullet>\<^sub>C ket k * (ket (\<gamma>, j) \<bullet>\<^sub>C (x *\<^sub>V ket (\<gamma>, l))) = ket i \<bullet>\<^sub>C ket k * (ket j \<bullet>\<^sub>C (x' *\<^sub>V ket l))

goal (1 subgoal):
 1. ket (i, j) \<bullet>\<^sub>C (x *\<^sub>V ket (k, l)) = ket (i, j) \<bullet>\<^sub>C ((id_cblinfun \<otimes>\<^sub>o x') *\<^sub>V ket (k, l))
[PROOF STEP]
have \<open>\<dots> = cinner (ket (i,j)) ((id_cblinfun \<otimes>\<^sub>o x') *\<^sub>V ket (k,l))\<close>
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. ket i \<bullet>\<^sub>C ket k * (ket j \<bullet>\<^sub>C (x' *\<^sub>V ket l)) = ket (i, j) \<bullet>\<^sub>C ((id_cblinfun \<otimes>\<^sub>o x') *\<^sub>V ket (k, l))
[PROOF STEP]
apply (simp add: tensor_op_ket)
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. ket i \<bullet>\<^sub>C ket k * (ket j \<bullet>\<^sub>C (x' *\<^sub>V ket l)) = ket (i, j) \<bullet>\<^sub>C (ket k \<otimes>\<^sub>s x' *\<^sub>V ket l)
[PROOF STEP]
by (simp flip: tensor_ell2_ket)
[PROOF STATE]
proof (state)
this:
ket i \<bullet>\<^sub>C ket k * (ket j \<bullet>\<^sub>C (x' *\<^sub>V ket l)) = ket (i, j) \<bullet>\<^sub>C ((id_cblinfun \<otimes>\<^sub>o x') *\<^sub>V ket (k, l))

goal (1 subgoal):
 1. ket (i, j) \<bullet>\<^sub>C (x *\<^sub>V ket (k, l)) = ket (i, j) \<bullet>\<^sub>C ((id_cblinfun \<otimes>\<^sub>o x') *\<^sub>V ket (k, l))
[PROOF STEP]
finally
[PROOF STATE]
proof (chain)
picking this:
ket (i, j) \<bullet>\<^sub>C (x *\<^sub>V ket (k, l)) = ket (i, j) \<bullet>\<^sub>C ((id_cblinfun \<otimes>\<^sub>o x') *\<^sub>V ket (k, l))
[PROOF STEP]
show ?thesis
[PROOF STATE]
proof (prove)
using this:
ket (i, j) \<bullet>\<^sub>C (x *\<^sub>V ket (k, l)) = ket (i, j) \<bullet>\<^sub>C ((id_cblinfun \<otimes>\<^sub>o x') *\<^sub>V ket (k, l))

goal (1 subgoal):
 1. ket (i, j) \<bullet>\<^sub>C (x *\<^sub>V ket (k, l)) = ket (i, j) \<bullet>\<^sub>C ((id_cblinfun \<otimes>\<^sub>o x') *\<^sub>V ket (k, l))
[PROOF STEP]
by -
[PROOF STATE]
proof (state)
this:
ket (i, j) \<bullet>\<^sub>C (x *\<^sub>V ket (k, l)) = ket (i, j) \<bullet>\<^sub>C ((id_cblinfun \<otimes>\<^sub>o x') *\<^sub>V ket (k, l))

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
ket (?i, ?j) \<bullet>\<^sub>C (x *\<^sub>V ket (?k, ?l)) = ket (?i, ?j) \<bullet>\<^sub>C ((id_cblinfun \<otimes>\<^sub>o x') *\<^sub>V ket (?k, ?l))

goal (2 subgoals):
 1. \<And>x. x \<in> commutant (range (\<lambda>a. a \<otimes>\<^sub>o id_cblinfun)) \<Longrightarrow> x \<in> range ((\<otimes>\<^sub>o) id_cblinfun)
 2. \<And>x. x \<in> range ((\<otimes>\<^sub>o) id_cblinfun) \<Longrightarrow> x \<in> commutant (range (\<lambda>a. a \<otimes>\<^sub>o id_cblinfun))
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
ket (?i, ?j) \<bullet>\<^sub>C (x *\<^sub>V ket (?k, ?l)) = ket (?i, ?j) \<bullet>\<^sub>C ((id_cblinfun \<otimes>\<^sub>o x') *\<^sub>V ket (?k, ?l))
[PROOF STEP]
have \<open>x = (id_cblinfun \<otimes>\<^sub>o x')\<close>
[PROOF STATE]
proof (prove)
using this:
ket (?i, ?j) \<bullet>\<^sub>C (x *\<^sub>V ket (?k, ?l)) = ket (?i, ?j) \<bullet>\<^sub>C ((id_cblinfun \<otimes>\<^sub>o x') *\<^sub>V ket (?k, ?l))

goal (1 subgoal):
 1. x = id_cblinfun \<otimes>\<^sub>o x'
[PROOF STEP]
by (auto intro!: equal_ket cinner_ket_eqI)
[PROOF STATE]
proof (state)
this:
x = id_cblinfun \<otimes>\<^sub>o x'

goal (2 subgoals):
 1. \<And>x. x \<in> commutant (range (\<lambda>a. a \<otimes>\<^sub>o id_cblinfun)) \<Longrightarrow> x \<in> range ((\<otimes>\<^sub>o) id_cblinfun)
 2. \<And>x. x \<in> range ((\<otimes>\<^sub>o) id_cblinfun) \<Longrightarrow> x \<in> commutant (range (\<lambda>a. a \<otimes>\<^sub>o id_cblinfun))
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
x = id_cblinfun \<otimes>\<^sub>o x'
[PROOF STEP]
show \<open>x \<in> range (\<lambda>b. id_cblinfun \<otimes>\<^sub>o b)\<close>
[PROOF STATE]
proof (prove)
using this:
x = id_cblinfun \<otimes>\<^sub>o x'

goal (1 subgoal):
 1. x \<in> range ((\<otimes>\<^sub>o) id_cblinfun)
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
x \<in> range ((\<otimes>\<^sub>o) id_cblinfun)

goal (1 subgoal):
 1. \<And>x. x \<in> range ((\<otimes>\<^sub>o) id_cblinfun) \<Longrightarrow> x \<in> commutant (range (\<lambda>a. a \<otimes>\<^sub>o id_cblinfun))
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. \<And>x. x \<in> range ((\<otimes>\<^sub>o) id_cblinfun) \<Longrightarrow> x \<in> commutant (range (\<lambda>a. a \<otimes>\<^sub>o id_cblinfun))
[PROOF STEP]
fix x :: \<open>('a \<times> 'b) ell2 \<Rightarrow>\<^sub>C\<^sub>L ('a \<times> 'b) ell2\<close>
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. \<And>x. x \<in> range ((\<otimes>\<^sub>o) id_cblinfun) \<Longrightarrow> x \<in> commutant (range (\<lambda>a. a \<otimes>\<^sub>o id_cblinfun))
[PROOF STEP]
assume \<open>x \<in> range (\<lambda>b. id_cblinfun \<otimes>\<^sub>o b)\<close>
[PROOF STATE]
proof (state)
this:
x \<in> range ((\<otimes>\<^sub>o) id_cblinfun)

goal (1 subgoal):
 1. \<And>x. x \<in> range ((\<otimes>\<^sub>o) id_cblinfun) \<Longrightarrow> x \<in> commutant (range (\<lambda>a. a \<otimes>\<^sub>o id_cblinfun))
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
x \<in> range ((\<otimes>\<^sub>o) id_cblinfun)
[PROOF STEP]
obtain b where x: \<open>x = id_cblinfun \<otimes>\<^sub>o b\<close>
[PROOF STATE]
proof (prove)
using this:
x \<in> range ((\<otimes>\<^sub>o) id_cblinfun)

goal (1 subgoal):
 1. (\<And>b. x = id_cblinfun \<otimes>\<^sub>o b \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
x = id_cblinfun \<otimes>\<^sub>o b

goal (1 subgoal):
 1. \<And>x. x \<in> range ((\<otimes>\<^sub>o) id_cblinfun) \<Longrightarrow> x \<in> commutant (range (\<lambda>a. a \<otimes>\<^sub>o id_cblinfun))
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
x = id_cblinfun \<otimes>\<^sub>o b
[PROOF STEP]
show \<open>x \<in> commutant (range (\<lambda>a. a \<otimes>\<^sub>o id_cblinfun))\<close>
[PROOF STATE]
proof (prove)
using this:
x = id_cblinfun \<otimes>\<^sub>o b

goal (1 subgoal):
 1. x \<in> commutant (range (\<lambda>a. a \<otimes>\<^sub>o id_cblinfun))
[PROOF STEP]
by (auto simp: x commutant_def comp_tensor_op)
[PROOF STATE]
proof (state)
this:
x \<in> commutant (range (\<lambda>a. a \<otimes>\<^sub>o id_cblinfun))

goal:
No subgoals!
[PROOF STEP]
qed


[STATEMENT]
lemma splitting_permutation_case_3_unique:
  assumes "i \<le> l1"
  assumes "l2 + i \<le> y \<and> y < l1 + l2"
  assumes "splitting_permutation l1 l2 i j = y"
  shows "j = y - l2"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. j = y - l2
[PROOF STEP]
unfolding splitting_permutation_def
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. j = y - l2
[PROOF STEP]
by (smt Nat.le_diff_conv2 add_diff_cancel_left' add_diff_cancel_right' add_leD2
      assms(2) assms(3) le_add1 le_diff_iff not_le splitting_permutation_def)


[STATEMENT]
lemma real_powr_at_bot:
  assumes "(a::real) > 1"
  shows   "((\<lambda>x. a powr x) \<longlongrightarrow> 0) at_bot"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. ((powr) a \<longlongrightarrow> 0) at_bot
[PROOF STEP]
proof-
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. ((powr) a \<longlongrightarrow> 0) at_bot
[PROOF STEP]
from assms
[PROOF STATE]
proof (chain)
picking this:
1 < a
[PROOF STEP]
have "filterlim (\<lambda>x. ln a * x) at_bot at_bot"
[PROOF STATE]
proof (prove)
using this:
1 < a

goal (1 subgoal):
 1. filterlim ((*) (ln a)) at_bot at_bot
[PROOF STEP]
by (intro filterlim_tendsto_pos_mult_at_bot[OF tendsto_const _ filterlim_ident]) auto
[PROOF STATE]
proof (state)
this:
filterlim ((*) (ln a)) at_bot at_bot

goal (1 subgoal):
 1. ((powr) a \<longlongrightarrow> 0) at_bot
[PROOF STEP]
hence "((\<lambda>x. exp (x * ln a)) \<longlongrightarrow> 0) at_bot"
[PROOF STATE]
proof (prove)
using this:
filterlim ((*) (ln a)) at_bot at_bot

goal (1 subgoal):
 1. ((\<lambda>x. exp (x * ln a)) \<longlongrightarrow> 0) at_bot
[PROOF STEP]
by (intro filterlim_compose[OF exp_at_bot]) (simp add: algebra_simps)
[PROOF STATE]
proof (state)
this:
((\<lambda>x. exp (x * ln a)) \<longlongrightarrow> 0) at_bot

goal (1 subgoal):
 1. ((powr) a \<longlongrightarrow> 0) at_bot
[PROOF STEP]
thus ?thesis
[PROOF STATE]
proof (prove)
using this:
((\<lambda>x. exp (x * ln a)) \<longlongrightarrow> 0) at_bot

goal (1 subgoal):
 1. ((powr) a \<longlongrightarrow> 0) at_bot
[PROOF STEP]
using assms
[PROOF STATE]
proof (prove)
using this:
((\<lambda>x. exp (x * ln a)) \<longlongrightarrow> 0) at_bot
1 < a

goal (1 subgoal):
 1. ((powr) a \<longlongrightarrow> 0) at_bot
[PROOF STEP]
unfolding powr_def
[PROOF STATE]
proof (prove)
using this:
((\<lambda>x. exp (x * ln a)) \<longlongrightarrow> 0) at_bot
1 < a

goal (1 subgoal):
 1. ((\<lambda>x. if a = 0 then 0 else exp (x * ln a)) \<longlongrightarrow> 0) at_bot
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
((powr) a \<longlongrightarrow> 0) at_bot

goal:
No subgoals!
[PROOF STEP]
qed


[STATEMENT]
lemma nth_equalityI:
  "\<lbrakk>length xs = length ys; \<And>i. i < length xs \<Longrightarrow> xs!i = ys!i\<rbrakk> \<Longrightarrow> xs = ys"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<lbrakk>length xs = length ys; \<And>i. i < length xs \<Longrightarrow> xs ! i = ys ! i\<rbrakk> \<Longrightarrow> xs = ys
[PROOF STEP]
by (frule nth_take_lemma [OF le_refl eq_imp_le]) simp_all


[STATEMENT]
lemma word_plus_mcs_4':
  fixes x :: "'a :: len word"
  shows "\<lbrakk>x + v \<le> x + w; x \<le> x + v\<rbrakk> \<Longrightarrow> v \<le> w"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<lbrakk>x + v \<le> x + w; x \<le> x + v\<rbrakk> \<Longrightarrow> v \<le> w
[PROOF STEP]
apply (rule word_plus_mcs_4)
[PROOF STATE]
proof (prove)
goal (2 subgoals):
 1. \<lbrakk>x + v \<le> x + w; x \<le> x + v\<rbrakk> \<Longrightarrow> v + ?x \<le> w + ?x
 2. \<lbrakk>x + v \<le> x + w; x \<le> x + v\<rbrakk> \<Longrightarrow> ?x \<le> v + ?x
[PROOF STEP]
apply (simp add: add.commute)
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<lbrakk>x + v \<le> x + w; x \<le> x + v\<rbrakk> \<Longrightarrow> x \<le> v + x
[PROOF STEP]
apply (simp add: add.commute)
[PROOF STATE]
proof (prove)
goal:
No subgoals!
[PROOF STEP]
done


[STATEMENT]
lemma pderiv_monom:
  assumes "a \<in> carrier R"
  shows "pderiv (monom P a n) = monom P ([n]\<cdot>a) (n-1)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. pderiv (monom P a n) = monom P ([n] \<cdot> a) (n - 1)
[PROOF STEP]
apply(cases "n = 0")
[PROOF STATE]
proof (prove)
goal (2 subgoals):
 1. n = 0 \<Longrightarrow> pderiv (monom P a n) = monom P ([n] \<cdot> a) (n - 1)
 2. n \<noteq> 0 \<Longrightarrow> pderiv (monom P a n) = monom P ([n] \<cdot> a) (n - 1)
[PROOF STEP]
apply (simp add: assms)
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. n \<noteq> 0 \<Longrightarrow> pderiv (monom P a n) = monom P ([n] \<cdot> a) (n - 1)
[PROOF STEP]
unfolding pderiv_def
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. n \<noteq> 0 \<Longrightarrow> poly_shift (n_mult (monom P a n)) = monom P ([n] \<cdot> a) (n - 1)
[PROOF STEP]
using assms Suc_diff_1[of n] n_mult_monom[of a "n-1"] poly_shift_monom[of "[Suc (n-1)]\<cdot>a" "Suc (n-1)"]
[PROOF STATE]
proof (prove)
using this:
a \<in> carrier R
0 < n \<Longrightarrow> Suc (n - 1) = n
a \<in> carrier R \<Longrightarrow> n_mult (monom P a (Suc (n - 1))) = monom P ([Suc (n - 1)] \<cdot> a) (Suc (n - 1))
[Suc (n - 1)] \<cdot> a \<in> carrier R \<Longrightarrow> poly_shift (monom P ([Suc (n - 1)] \<cdot> a) (Suc (Suc (n - 1)))) = monom P ([Suc (n - 1)] \<cdot> a) (Suc (n - 1))

goal (1 subgoal):
 1. n \<noteq> 0 \<Longrightarrow> poly_shift (n_mult (monom P a n)) = monom P ([n] \<cdot> a) (n - 1)
[PROOF STEP]
by (metis R.add.nat_pow_closed neq0_conv poly_shift_monom)


[STATEMENT]
lemma divide_le_0_abs_iff [simp]: "(a / \<bar>b\<bar> \<le> 0) = (a \<le> 0 | b = 0)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (a / \<bar>b\<bar> \<le> (0::'a)) = (a \<le> (0::'a) \<or> b = (0::'a))
[PROOF STEP]
by (metis local.minus_divide_left local.neg_0_le_iff_le local.zero_le_divide_abs_iff)


[STATEMENT]
lemma summable_norm_cancel: "summable (\<lambda>n. norm (f n)) \<Longrightarrow> summable f"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. summable (\<lambda>n. norm (f n)) \<Longrightarrow> summable f
[PROOF STEP]
unfolding summable_Cauchy
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<forall>e>0. \<exists>N. \<forall>m\<ge>N. \<forall>n. norm (\<Sum>n = m..<n. norm (f n)) < e \<Longrightarrow> \<forall>e>0. \<exists>N. \<forall>m\<ge>N. \<forall>n. norm (sum f {m..<n}) < e
[PROOF STEP]
apply (erule all_forward imp_forward ex_forward | assumption)+
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<And>e N m n. norm (\<Sum>n = m..<n. norm (f n)) < e \<Longrightarrow> norm (sum f {m..<n}) < e
[PROOF STEP]
apply (fastforce simp add: order_le_less_trans [OF norm_sum] order_le_less_trans [OF abs_ge_self])
[PROOF STATE]
proof (prove)
goal:
No subgoals!
[PROOF STEP]
done


[STATEMENT]
lemma "(10::nat) mod 3 = 1"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. 10 mod 3 = 1
[PROOF STEP]
by simp


[STATEMENT]
lemma "x < y \<and> y < z \<longrightarrow> \<not> (z < (x::nat))"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. x < y \<and> y < z \<longrightarrow> \<not> z < x
[PROOF STEP]
by (meson order_less_irrefl order_less_trans)


[STATEMENT]
lemma infinite_imp_elem: "\<not> finite A \<Longrightarrow> \<exists> x. x \<in> A"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. infinite A \<Longrightarrow> \<exists>x. x \<in> A
[PROOF STEP]
by (cases "A = {}", auto)


[STATEMENT]
lemma between_norm:
    fixes a :: "'a :: euclidean_space"
    shows "between (a,b) x \<longleftrightarrow> norm(x - a) *\<^sub>R (b - x) = norm(b - x) *\<^sub>R (x - a)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. between (a, b) x = (norm (x - a) *\<^sub>R (b - x) = norm (b - x) *\<^sub>R (x - a))
[PROOF STEP]
by (auto simp: between dist_triangle_eq norm_minus_commute algebra_simps)


[STATEMENT]
lemma runiq_basic: "runiq R \<longleftrightarrow> (\<forall> x y y' . (x, y) \<in> R \<and> (x, y') \<in> R \<longrightarrow> y = y')"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. runiq R = (\<forall>x y y'. (x, y) \<in> R \<and> (x, y') \<in> R \<longrightarrow> y = y')
[PROOF STEP]
unfolding runiq_alt trivial_same
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (\<forall>x. \<forall>x1\<in>R `` {x}. Ball (R `` {x}) ((=) x1)) = (\<forall>x y y'. (x, y) \<in> R \<and> (x, y') \<in> R \<longrightarrow> y = y')
[PROOF STEP]
by blast


[STATEMENT]
lemma degree_times_X:
  assumes "p \<in> carrier P"
  assumes "p \<noteq> \<zero>\<^bsub>P\<^esub>"
  shows "degree (X \<otimes>\<^bsub>P\<^esub> p) = degree p + 1"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. deg R (X_poly R \<otimes>\<^bsub>P\<^esub> p) = deg R p + 1
[PROOF STEP]
using cring_deg_mult[of X p] assms times_X_not_zero[of p]
[PROOF STATE]
proof (prove)
using this:
\<lbrakk>X_poly R \<in> carrier P; p \<in> carrier P; X_poly R (deg R (X_poly R)) \<otimes> p (deg R p) \<noteq> \<zero>\<rbrakk> \<Longrightarrow> deg R (X_poly R \<otimes>\<^bsub>P\<^esub> p) = deg R p + deg R (X_poly R)
p \<in> carrier P
p \<noteq> \<zero>\<^bsub>P\<^esub>
\<lbrakk>p \<in> carrier P; p \<noteq> \<zero>\<^bsub>P\<^esub>\<rbrakk> \<Longrightarrow> X_poly R \<otimes>\<^bsub>P\<^esub> p \<noteq> \<zero>\<^bsub>P\<^esub>

goal (1 subgoal):
 1. deg R (X_poly R \<otimes>\<^bsub>P\<^esub> p) = deg R p + 1
[PROOF STEP]
by (metis (no_types, lifting) P.r_null P.r_one P_def R.l_one R.one_closed
      UP_cring.lcf_monom(1) UP_cring_axioms UP_zero_closed X_closed X_poly_def cfs_closed
      deg_zero deg_ltrm degree_X monom_one monom_zero to_poly_inverse)


[STATEMENT]
lemma "-(i::int) * 1 = 0 ==> i = 0"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. - i * 1 = 0 \<Longrightarrow> i = 0
[PROOF STEP]
by linarith


[STATEMENT]
lemma sin_npi2 [simp]: "sin (pi * real n) = 0"
  for n :: nat
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. sin (pi * real n) = 0
[PROOF STEP]
by (simp add: mult.commute [of pi])


[STATEMENT]
theorem projection_bounded_clinear:
  fixes M :: \<open>('a::chilbert_space) set\<close>
  assumes a1: "closed_csubspace M"
  shows \<open>bounded_clinear (projection M)\<close>
    \<comment> \<open>Theorem 2.7 in @{cite conway2013course}\<close>
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. bounded_clinear (projection M)
[PROOF STEP]
using assms is_projection_on_iff_orthog orthog_proj_exists is_projection_on_bounded_clinear projection_eqI
[PROOF STATE]
proof (prove)
using this:
closed_csubspace M
closed_csubspace ?M \<Longrightarrow> is_projection_on ?\<pi> ?M = (\<forall>h. h - ?\<pi> h \<in> orthogonal_complement ?M \<and> ?\<pi> h \<in> ?M)
closed_csubspace ?M \<Longrightarrow> \<exists>k. ?h - k \<in> orthogonal_complement ?M \<and> k \<in> ?M
\<lbrakk>is_projection_on ?\<pi> ?M; closed_csubspace ?M\<rbrakk> \<Longrightarrow> bounded_clinear ?\<pi>
\<lbrakk>closed_csubspace ?M; ?h - ?x \<in> orthogonal_complement ?M; ?x \<in> ?M\<rbrakk> \<Longrightarrow> projection ?M ?h = ?x

goal (1 subgoal):
 1. bounded_clinear (projection M)
[PROOF STEP]
by blast


[STATEMENT]
lemma map2_length: "length (map2 f xs ys) =  min (length xs) (length ys)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. length (map2 f xs ys) = min (length xs) (length ys)
[PROOF STEP]
by (induction xs arbitrary: ys) auto


[STATEMENT]
lemma has_real_derivative_neg_dec_right:
  fixes f :: "real \<Rightarrow> real"
  shows "(f has_real_derivative l) (at x within S) \<Longrightarrow> l < 0 \<Longrightarrow>
    \<exists>d > 0. \<forall>h > 0. x + h \<in> S \<longrightarrow> h < d \<longrightarrow> f x > f (x + h)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<lbrakk>(f has_real_derivative l) (at x within S); l < 0\<rbrakk> \<Longrightarrow> \<exists>d>0. \<forall>h>0. x + h \<in> S \<longrightarrow> h < d \<longrightarrow> f (x + h) < f x
[PROOF STEP]
by (rule has_real_derivative_pos_inc_right [of "\<lambda>x. - f x" "-l" x S, simplified])
      (auto simp add: DERIV_minus)


[STATEMENT]
lemma apath_ends:
 assumes "apath u p v" and "apath u' p v'"
  shows "(p \<noteq> [] \<and> u \<noteq> v \<and> u = u' \<and> v = v') \<or> (p = [] \<and> u = v \<and> u' = v')"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. p \<noteq> [] \<and> u \<noteq> v \<and> u = u' \<and> v = v' \<or> p = [] \<and> u = v \<and> u' = v'
[PROOF STEP]
using assms
[PROOF STATE]
proof (prove)
using this:
apath u p v
apath u' p v'

goal (1 subgoal):
 1. p \<noteq> [] \<and> u \<noteq> v \<and> u = u' \<and> v = v' \<or> p = [] \<and> u = v \<and> u' = v'
[PROOF STEP]
unfolding apath_def
[PROOF STATE]
proof (prove)
using this:
awalk u p v \<and> distinct (awalk_verts u p)
awalk u' p v' \<and> distinct (awalk_verts u' p)

goal (1 subgoal):
 1. p \<noteq> [] \<and> u \<noteq> v \<and> u = u' \<and> v = v' \<or> p = [] \<and> u = v \<and> u' = v'
[PROOF STEP]
by (metis assms(2) apath_nonempty_ends  awalk_ends)


[STATEMENT]
lemma mset_set_empty_iff: "mset_set A = {#} \<longleftrightarrow> A = {} \<or> infinite A"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (mset_set A = {#}) = (A = {} \<or> infinite A)
[PROOF STEP]
using finite_set_mset_mset_set
[PROOF STATE]
proof (prove)
using this:
finite ?A \<Longrightarrow> set_mset (mset_set ?A) = ?A

goal (1 subgoal):
 1. (mset_set A = {#}) = (A = {} \<or> infinite A)
[PROOF STEP]
by fastforce


[STATEMENT]
lemma isomorphic_relative_homology_by_contractible:
   "\<lbrakk>contractible_space(subtopology X S); topspace X \<inter> S \<noteq> {}\<rbrakk>
      \<Longrightarrow> relative_homology_group p X S \<cong> reduced_homology_group p X"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<lbrakk>contractible_space (subtopology X S); topspace X \<inter> S \<noteq> {}\<rbrakk> \<Longrightarrow> relative_homology_group p X S \<cong> reduced_homology_group p X
[PROOF STEP]
using group.iso_sym group_reduced_homology_group isomorphic_reduced_homology_by_contractible
[PROOF STATE]
proof (prove)
using this:
\<lbrakk>Group.group ?G; ?G \<cong> ?H\<rbrakk> \<Longrightarrow> ?H \<cong> ?G
Group.group (reduced_homology_group ?p ?X)
\<lbrakk>contractible_space (subtopology ?X ?S); topspace ?X \<inter> ?S \<noteq> {}\<rbrakk> \<Longrightarrow> reduced_homology_group ?p ?X \<cong> relative_homology_group ?p ?X ?S

goal (1 subgoal):
 1. \<lbrakk>contractible_space (subtopology X S); topspace X \<inter> S \<noteq> {}\<rbrakk> \<Longrightarrow> relative_homology_group p X S \<cong> reduced_homology_group p X
[PROOF STEP]
by blast


[STATEMENT]
lemma lub_dual_glb: "lub S cl = glb S (dual cl)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. lub S cl = glb S (dual cl)
[PROOF STEP]
by (simp add: lub_def glb_def least_def greatest_def dual_def converse_unfold)


[STATEMENT]
lemma R2_S2_False:
  assumes "((if \<sigma> then b0 else b1) = False)"
  shows "spmf (R2 (b0,b1) \<sigma> \<bind> (D2 :: (bool \<times> 'index \<times> bool \<times> bool) \<Rightarrow> bool spmf)) True
                = spmf (funct_OT_12 (b0,b1) \<sigma> \<bind> (\<lambda> (out1,out2). S2 \<sigma> out2 \<bind> D2)) True"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. spmf (R2 (b0, b1) \<sigma> \<bind> D2) True = spmf (funct_OT_12 (b0, b1) \<sigma> \<bind> (\<lambda>(out1, out2). S2 \<sigma> out2 \<bind> D2)) True
[PROOF STEP]
proof-
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. spmf (R2 (b0, b1) \<sigma> \<bind> D2) True = spmf (funct_OT_12 (b0, b1) \<sigma> \<bind> (\<lambda>(out1, out2). S2 \<sigma> out2 \<bind> D2)) True
[PROOF STEP]
have "\<sigma> \<Longrightarrow> \<not> b0"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<sigma> \<Longrightarrow> \<not> b0
[PROOF STEP]
using assms
[PROOF STATE]
proof (prove)
using this:
(if \<sigma> then b0 else b1) = False

goal (1 subgoal):
 1. \<sigma> \<Longrightarrow> \<not> b0
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
\<sigma> \<Longrightarrow> \<not> b0

goal (1 subgoal):
 1. spmf (R2 (b0, b1) \<sigma> \<bind> D2) True = spmf (funct_OT_12 (b0, b1) \<sigma> \<bind> (\<lambda>(out1, out2). S2 \<sigma> out2 \<bind> D2)) True
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
\<sigma> \<Longrightarrow> \<not> b0

goal (1 subgoal):
 1. spmf (R2 (b0, b1) \<sigma> \<bind> D2) True = spmf (funct_OT_12 (b0, b1) \<sigma> \<bind> (\<lambda>(out1, out2). S2 \<sigma> out2 \<bind> D2)) True
[PROOF STEP]
have "\<not> \<sigma> \<Longrightarrow> \<not> b1"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<not> \<sigma> \<Longrightarrow> \<not> b1
[PROOF STEP]
using assms
[PROOF STATE]
proof (prove)
using this:
(if \<sigma> then b0 else b1) = False

goal (1 subgoal):
 1. \<not> \<sigma> \<Longrightarrow> \<not> b1
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
\<not> \<sigma> \<Longrightarrow> \<not> b1

goal (1 subgoal):
 1. spmf (R2 (b0, b1) \<sigma> \<bind> D2) True = spmf (funct_OT_12 (b0, b1) \<sigma> \<bind> (\<lambda>(out1, out2). S2 \<sigma> out2 \<bind> D2)) True
[PROOF STEP]
ultimately
[PROOF STATE]
proof (chain)
picking this:
\<sigma> \<Longrightarrow> \<not> b0
\<not> \<sigma> \<Longrightarrow> \<not> b1
[PROOF STEP]
show ?thesis
[PROOF STATE]
proof (prove)
using this:
\<sigma> \<Longrightarrow> \<not> b0
\<not> \<sigma> \<Longrightarrow> \<not> b1

goal (1 subgoal):
 1. spmf (R2 (b0, b1) \<sigma> \<bind> D2) True = spmf (funct_OT_12 (b0, b1) \<sigma> \<bind> (\<lambda>(out1, out2). S2 \<sigma> out2 \<bind> D2)) True
[PROOF STEP]
by(auto simp add: R2_def S2_def split_def local.etp.F_f_inv assms funct_OT_12_def cong: bind_spmf_cong_simp)
[PROOF STATE]
proof (state)
this:
spmf (R2 (b0, b1) \<sigma> \<bind> D2) True = spmf (funct_OT_12 (b0, b1) \<sigma> \<bind> (\<lambda>(out1, out2). S2 \<sigma> out2 \<bind> D2)) True

goal:
No subgoals!
[PROOF STEP]
qed


[STATEMENT]
lemma  X_I_spectrum:
  shows "{Re x |x. x \<in> spectrum X_I} \<subseteq> {- 1, 1}"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. {Re x |x. x \<in> spectrum X_I} \<subseteq> {- 1, 1}
[PROOF STEP]
using unitary_hermitian_Re_spectrum X_I_hermitian
    X_I_unitary X_I_carrier
[PROOF STATE]
proof (prove)
using this:
\<lbrakk>Complex_Matrix.unitary ?U; hermitian ?U; ?U \<in> carrier_mat ?n ?n; 0 < ?n\<rbrakk> \<Longrightarrow> {Re x |x. x \<in> spectrum ?U} \<subseteq> {- 1, 1}
hermitian X_I
Complex_Matrix.unitary X_I
X_I \<in> carrier_mat 4 4

goal (1 subgoal):
 1. {Re x |x. x \<in> spectrum X_I} \<subseteq> {- 1, 1}
[PROOF STEP]
by simp


[STATEMENT]
lemma succs_append [simp]:
  "succs (xs @ ys) n = succs xs n \<union> succs ys (n + size xs)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. succs (xs @ ys) n = succs xs n \<union> succs ys (n + size xs)
[PROOF STEP]
by (induct xs arbitrary: n) (auto simp: succs_Cons algebra_simps)


[STATEMENT]
lemma zero_mtx2: "(0::2 sq_mtx) = diag2 0 0"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. 0 = diag2 0 0
[PROOF STEP]
by (simp add: sq_mtx_eq_iff)


[STATEMENT]
lemma LIMSEQ_inverse_real_of_nat_add: "(\<lambda>n. r + inverse (real (Suc n))) \<longlonglongrightarrow> r"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (\<lambda>n. r + inverse (real (Suc n))) \<longlonglongrightarrow> r
[PROOF STEP]
using tendsto_add [OF tendsto_const LIMSEQ_inverse_real_of_nat]
[PROOF STATE]
proof (prove)
using this:
(\<lambda>x. ?a + inverse (real (Suc x))) \<longlonglongrightarrow> ?a + 0

goal (1 subgoal):
 1. (\<lambda>n. r + inverse (real (Suc n))) \<longlonglongrightarrow> r
[PROOF STEP]
by auto


[STATEMENT]
lemma fs_prod_inst:
  assumes fsa: "fs TYPE('a) TYPE('x)"
  and     fsb: "fs TYPE('b) TYPE('x)"
  shows "fs TYPE('a\<times>'b) TYPE('x)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. fs TYPE('a \<times> 'b) TYPE('x)
[PROOF STEP]
apply(unfold fs_def)
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<forall>x. finite (supp x)
[PROOF STEP]
apply(auto simp add: supp_prod)
[PROOF STATE]
proof (prove)
goal (2 subgoals):
 1. \<And>a. finite (supp a)
 2. \<And>b. finite (supp b)
[PROOF STEP]
apply(rule fs1[OF fsa])
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<And>b. finite (supp b)
[PROOF STEP]
apply(rule fs1[OF fsb])
[PROOF STATE]
proof (prove)
goal:
No subgoals!
[PROOF STEP]
done


[STATEMENT]
lemma fimage_mono:
  assumes "r' \<subseteq>\<^sub>\<circ> r" and "A' \<subseteq>\<^sub>\<circ> A"
  shows "(r' `\<^sub>\<bullet> A') \<subseteq>\<^sub>\<circ> (r `\<^sub>\<bullet> A)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. r' `\<^sub>\<bullet> A' \<subseteq>\<^sub>\<circ> r `\<^sub>\<bullet> A
[PROOF STEP]
using assms
[PROOF STATE]
proof (prove)
using this:
r' \<subseteq>\<^sub>\<circ> r
A' \<subseteq>\<^sub>\<circ> A

goal (1 subgoal):
 1. r' `\<^sub>\<bullet> A' \<subseteq>\<^sub>\<circ> r `\<^sub>\<bullet> A
[PROOF STEP]
by fastforce


[STATEMENT]
lemma le_log_of_power:
  assumes "b ^ n \<le> m" "1 < b"
  shows "n \<le> log b m"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. real n \<le> log b m
[PROOF STEP]
proof -
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. real n \<le> log b m
[PROOF STEP]
from assms
[PROOF STATE]
proof (chain)
picking this:
b ^ n \<le> m
1 < b
[PROOF STEP]
have "0 < m"
[PROOF STATE]
proof (prove)
using this:
b ^ n \<le> m
1 < b

goal (1 subgoal):
 1. 0 < m
[PROOF STEP]
by (metis less_trans zero_less_power less_le_trans zero_less_one)
[PROOF STATE]
proof (state)
this:
0 < m

goal (1 subgoal):
 1. real n \<le> log b m
[PROOF STEP]
thus ?thesis
[PROOF STATE]
proof (prove)
using this:
0 < m

goal (1 subgoal):
 1. real n \<le> log b m
[PROOF STEP]
using assms
[PROOF STATE]
proof (prove)
using this:
0 < m
b ^ n \<le> m
1 < b

goal (1 subgoal):
 1. real n \<le> log b m
[PROOF STEP]
by (simp add: le_log_iff powr_realpow)
[PROOF STATE]
proof (state)
this:
real n \<le> log b m

goal:
No subgoals!
[PROOF STEP]
qed


[STATEMENT]
lemma (in comm_monoid) finprod_cong2:
  "[| A = B;
      !!i. i \<in> B ==> f i = g i; f \<in> B \<rightarrow> carrier G|] ==>
finprod G f A = finprod G g B"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<lbrakk>A = B; \<And>i. i \<in> B \<Longrightarrow> f i = g i; f \<in> B \<rightarrow> carrier G\<rbrakk> \<Longrightarrow> finprod G f A = finprod G g B
[PROOF STEP]
by (intro finprod_cong, auto)


[STATEMENT]
lemma vconst_on_vintersection:
  "vconst_on (A \<inter>\<^sub>\<circ> B) c = vconst_on A c \<inter>\<^sub>\<circ> vconst_on B c"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. vconst_on (A \<inter>\<^sub>\<circ> B) c = vconst_on A c \<inter>\<^sub>\<circ> vconst_on B c
[PROOF STEP]
by auto


[STATEMENT]
lemma compl_ifte: "- ifte a x y = ifte a (- x) (- y)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. - ifte a x y = ifte a (- x) (- y)
[PROOF STEP]
unfolding ifte_def
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. - (a \<sqinter> x \<squnion> - a \<sqinter> y) = a \<sqinter> - x \<squnion> - a \<sqinter> - y
[PROOF STEP]
apply (rule order_antisym)
[PROOF STATE]
proof (prove)
goal (2 subgoals):
 1. - (a \<sqinter> x \<squnion> - a \<sqinter> y) \<le> a \<sqinter> - x \<squnion> - a \<sqinter> - y
 2. a \<sqinter> - x \<squnion> - a \<sqinter> - y \<le> - (a \<sqinter> x \<squnion> - a \<sqinter> y)
[PROOF STEP]
apply (simp add: inf_sup_distrib1 inf_sup_distrib2 compl_inf_bot)
[PROOF STATE]
proof (prove)
goal (2 subgoals):
 1. - x \<sqinter> a \<le> a \<sqinter> - x \<squnion> - a \<sqinter> - y \<and> - x \<sqinter> - y \<le> a \<sqinter> - x \<squnion> - a \<sqinter> - y
 2. a \<sqinter> - x \<squnion> - a \<sqinter> - y \<le> - (a \<sqinter> x \<squnion> - a \<sqinter> y)
[PROOF STEP]
apply (simp add: sup_inf_distrib1 sup_inf_distrib2 sup_compl_top)
[PROOF STATE]
proof (prove)
goal (2 subgoals):
 1. - x \<sqinter> a \<le> - x \<squnion> - a \<and> - x \<sqinter> a \<le> a \<squnion> - y \<and> - x \<sqinter> a \<le> - x \<squnion> - y \<and> - x \<sqinter> - y \<le> - x \<squnion> - a \<and> - x \<sqinter> - y \<le> a \<squnion> - y \<and> - x \<sqinter> - y \<le> - x \<squnion> - y
 2. a \<sqinter> - x \<squnion> - a \<sqinter> - y \<le> - (a \<sqinter> x \<squnion> - a \<sqinter> y)
[PROOF STEP]
apply (simp add: le_infI1 le_infI2 le_supI1 le_supI2)
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. a \<sqinter> - x \<squnion> - a \<sqinter> - y \<le> - (a \<sqinter> x \<squnion> - a \<sqinter> y)
[PROOF STEP]
apply (simp add: le_infI1 le_infI2 le_supI1 le_supI2)
[PROOF STATE]
proof (prove)
goal:
No subgoals!
[PROOF STEP]
done