[STATEMENT]
lemma ex_is_poincare_line_points:
  assumes "is_poincare_line H"
  shows "\<exists> u v. u \<in> unit_disc \<and> v \<in> unit_disc \<and> u \<noteq> v \<and> {u, v} \<subseteq> circline_set H"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<exists>u v. u \<in> unit_disc \<and> v \<in> unit_disc \<and> u \<noteq> v \<and> {u, v} \<subseteq> circline_set H
[PROOF STEP]
proof-
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. \<exists>u v. u \<in> unit_disc \<and> v \<in> unit_disc \<and> u \<noteq> v \<and> {u, v} \<subseteq> circline_set H
[PROOF STEP]
obtain u v w where *: "u \<noteq> v" "v \<noteq> w" "u \<noteq> w" "{u, v, w} \<subseteq> circline_set H"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (\<And>u v w. \<lbrakk>u \<noteq> v; v \<noteq> w; u \<noteq> w; {u, v, w} \<subseteq> circline_set H\<rbrakk> \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
using assms is_poincare_line_iff[of H]
[PROOF STATE]
proof (prove)
using this:
is_poincare_line H
is_poincare_line H = (circline_type H = - 1 \<and> perpendicular H unit_circle)

goal (1 subgoal):
 1. (\<And>u v w. \<lbrakk>u \<noteq> v; v \<noteq> w; u \<noteq> w; {u, v, w} \<subseteq> circline_set H\<rbrakk> \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
using circline_type_neg_card_gt3[of H]
[PROOF STATE]
proof (prove)
using this:
is_poincare_line H
is_poincare_line H = (circline_type H = - 1 \<and> perpendicular H unit_circle)
circline_type H < 0 \<Longrightarrow> \<exists>A B C. A \<noteq> B \<and> A \<noteq> C \<and> B \<noteq> C \<and> {A, B, C} \<subseteq> circline_set H

goal (1 subgoal):
 1. (\<And>u v w. \<lbrakk>u \<noteq> v; v \<noteq> w; u \<noteq> w; {u, v, w} \<subseteq> circline_set H\<rbrakk> \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
u \<noteq> v
v \<noteq> w
u \<noteq> w
{u, v, w} \<subseteq> circline_set H

goal (1 subgoal):
 1. \<exists>u v. u \<in> unit_disc \<and> v \<in> unit_disc \<and> u \<noteq> v \<and> {u, v} \<subseteq> circline_set H
[PROOF STEP]
have "\<not> {u, v, w} \<subseteq> unit_circle_set"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<not> {u, v, w} \<subseteq> unit_circle_set
[PROOF STEP]
using unique_circline_set[of u v w] *
[PROOF STATE]
proof (prove)
using this:
\<lbrakk>u \<noteq> v; u \<noteq> w; v \<noteq> w\<rbrakk> \<Longrightarrow> \<exists>!H. u \<in> circline_set H \<and> v \<in> circline_set H \<and> w \<in> circline_set H
u \<noteq> v
v \<noteq> w
u \<noteq> w
{u, v, w} \<subseteq> circline_set H

goal (1 subgoal):
 1. \<not> {u, v, w} \<subseteq> unit_circle_set
[PROOF STEP]
by (metis assms insert_subset not_is_poincare_line_unit_circle unit_circle_set_def)
[PROOF STATE]
proof (state)
this:
\<not> {u, v, w} \<subseteq> unit_circle_set

goal (1 subgoal):
 1. \<exists>u v. u \<in> unit_disc \<and> v \<in> unit_disc \<and> u \<noteq> v \<and> {u, v} \<subseteq> circline_set H
[PROOF STEP]
hence "H \<noteq> unit_circle"
[PROOF STATE]
proof (prove)
using this:
\<not> {u, v, w} \<subseteq> unit_circle_set

goal (1 subgoal):
 1. H \<noteq> unit_circle
[PROOF STEP]
unfolding unit_circle_set_def
[PROOF STATE]
proof (prove)
using this:
\<not> {u, v, w} \<subseteq> circline_set unit_circle

goal (1 subgoal):
 1. H \<noteq> unit_circle
[PROOF STEP]
using *
[PROOF STATE]
proof (prove)
using this:
\<not> {u, v, w} \<subseteq> circline_set unit_circle
u \<noteq> v
v \<noteq> w
u \<noteq> w
{u, v, w} \<subseteq> circline_set H

goal (1 subgoal):
 1. H \<noteq> unit_circle
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
H \<noteq> unit_circle

goal (1 subgoal):
 1. \<exists>u v. u \<in> unit_disc \<and> v \<in> unit_disc \<and> u \<noteq> v \<and> {u, v} \<subseteq> circline_set H
[PROOF STEP]
show ?thesis
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<exists>u v. u \<in> unit_disc \<and> v \<in> unit_disc \<and> u \<noteq> v \<and> {u, v} \<subseteq> circline_set H
[PROOF STEP]
proof (cases "(u \<in> unit_disc \<and> v \<in> unit_disc) \<or>
                (u \<in> unit_disc \<and> w \<in> unit_disc) \<or>
                (v \<in> unit_disc \<and> w \<in> unit_disc)")
[PROOF STATE]
proof (state)
goal (2 subgoals):
 1. u \<in> unit_disc \<and> v \<in> unit_disc \<or> u \<in> unit_disc \<and> w \<in> unit_disc \<or> v \<in> unit_disc \<and> w \<in> unit_disc \<Longrightarrow> \<exists>u v. u \<in> unit_disc \<and> v \<in> unit_disc \<and> u \<noteq> v \<and> {u, v} \<subseteq> circline_set H
 2. \<not> (u \<in> unit_disc \<and> v \<in> unit_disc \<or> u \<in> unit_disc \<and> w \<in> unit_disc \<or> v \<in> unit_disc \<and> w \<in> unit_disc) \<Longrightarrow> \<exists>u v. u \<in> unit_disc \<and> v \<in> unit_disc \<and> u \<noteq> v \<and> {u, v} \<subseteq> circline_set H
[PROOF STEP]
case True
[PROOF STATE]
proof (state)
this:
u \<in> unit_disc \<and> v \<in> unit_disc \<or> u \<in> unit_disc \<and> w \<in> unit_disc \<or> v \<in> unit_disc \<and> w \<in> unit_disc

goal (2 subgoals):
 1. u \<in> unit_disc \<and> v \<in> unit_disc \<or> u \<in> unit_disc \<and> w \<in> unit_disc \<or> v \<in> unit_disc \<and> w \<in> unit_disc \<Longrightarrow> \<exists>u v. u \<in> unit_disc \<and> v \<in> unit_disc \<and> u \<noteq> v \<and> {u, v} \<subseteq> circline_set H
 2. \<not> (u \<in> unit_disc \<and> v \<in> unit_disc \<or> u \<in> unit_disc \<and> w \<in> unit_disc \<or> v \<in> unit_disc \<and> w \<in> unit_disc) \<Longrightarrow> \<exists>u v. u \<in> unit_disc \<and> v \<in> unit_disc \<and> u \<noteq> v \<and> {u, v} \<subseteq> circline_set H
[PROOF STEP]
thus ?thesis
[PROOF STATE]
proof (prove)
using this:
u \<in> unit_disc \<and> v \<in> unit_disc \<or> u \<in> unit_disc \<and> w \<in> unit_disc \<or> v \<in> unit_disc \<and> w \<in> unit_disc

goal (1 subgoal):
 1. \<exists>u v. u \<in> unit_disc \<and> v \<in> unit_disc \<and> u \<noteq> v \<and> {u, v} \<subseteq> circline_set H
[PROOF STEP]
using *
[PROOF STATE]
proof (prove)
using this:
u \<in> unit_disc \<and> v \<in> unit_disc \<or> u \<in> unit_disc \<and> w \<in> unit_disc \<or> v \<in> unit_disc \<and> w \<in> unit_disc
u \<noteq> v
v \<noteq> w
u \<noteq> w
{u, v, w} \<subseteq> circline_set H

goal (1 subgoal):
 1. \<exists>u v. u \<in> unit_disc \<and> v \<in> unit_disc \<and> u \<noteq> v \<and> {u, v} \<subseteq> circline_set H
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
\<exists>u v. u \<in> unit_disc \<and> v \<in> unit_disc \<and> u \<noteq> v \<and> {u, v} \<subseteq> circline_set H

goal (1 subgoal):
 1. \<not> (u \<in> unit_disc \<and> v \<in> unit_disc \<or> u \<in> unit_disc \<and> w \<in> unit_disc \<or> v \<in> unit_disc \<and> w \<in> unit_disc) \<Longrightarrow> \<exists>u v. u \<in> unit_disc \<and> v \<in> unit_disc \<and> u \<noteq> v \<and> {u, v} \<subseteq> circline_set H
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. \<not> (u \<in> unit_disc \<and> v \<in> unit_disc \<or> u \<in> unit_disc \<and> w \<in> unit_disc \<or> v \<in> unit_disc \<and> w \<in> unit_disc) \<Longrightarrow> \<exists>u v. u \<in> unit_disc \<and> v \<in> unit_disc \<and> u \<noteq> v \<and> {u, v} \<subseteq> circline_set H
[PROOF STEP]
case False
[PROOF STATE]
proof (state)
this:
\<not> (u \<in> unit_disc \<and> v \<in> unit_disc \<or> u \<in> unit_disc \<and> w \<in> unit_disc \<or> v \<in> unit_disc \<and> w \<in> unit_disc)

goal (1 subgoal):
 1. \<not> (u \<in> unit_disc \<and> v \<in> unit_disc \<or> u \<in> unit_disc \<and> w \<in> unit_disc \<or> v \<in> unit_disc \<and> w \<in> unit_disc) \<Longrightarrow> \<exists>u v. u \<in> unit_disc \<and> v \<in> unit_disc \<and> u \<noteq> v \<and> {u, v} \<subseteq> circline_set H
[PROOF STEP]
have "\<exists> a b. a \<noteq> b \<and> a \<noteq> inversion b \<and> a \<in> circline_set H \<and> b \<in> circline_set H \<and> a \<notin> unit_circle_set \<and> b \<notin> unit_circle_set"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<exists>a b. a \<noteq> b \<and> a \<noteq> inversion b \<and> a \<in> circline_set H \<and> b \<in> circline_set H \<and> a \<notin> unit_circle_set \<and> b \<notin> unit_circle_set
[PROOF STEP]
proof (cases "(u \<in> unit_circle_set \<and> v \<in> unit_circle_set) \<or>
                  (u \<in> unit_circle_set \<and> w \<in> unit_circle_set) \<or>
                  (v \<in> unit_circle_set \<and> w \<in> unit_circle_set)")
[PROOF STATE]
proof (state)
goal (2 subgoals):
 1. u \<in> unit_circle_set \<and> v \<in> unit_circle_set \<or> u \<in> unit_circle_set \<and> w \<in> unit_circle_set \<or> v \<in> unit_circle_set \<and> w \<in> unit_circle_set \<Longrightarrow> \<exists>a b. a \<noteq> b \<and> a \<noteq> inversion b \<and> a \<in> circline_set H \<and> b \<in> circline_set H \<and> a \<notin> unit_circle_set \<and> b \<notin> unit_circle_set
 2. \<not> (u \<in> unit_circle_set \<and> v \<in> unit_circle_set \<or> u \<in> unit_circle_set \<and> w \<in> unit_circle_set \<or> v \<in> unit_circle_set \<and> w \<in> unit_circle_set) \<Longrightarrow> \<exists>a b. a \<noteq> b \<and> a \<noteq> inversion b \<and> a \<in> circline_set H \<and> b \<in> circline_set H \<and> a \<notin> unit_circle_set \<and> b \<notin> unit_circle_set
[PROOF STEP]
case True
[PROOF STATE]
proof (state)
this:
u \<in> unit_circle_set \<and> v \<in> unit_circle_set \<or> u \<in> unit_circle_set \<and> w \<in> unit_circle_set \<or> v \<in> unit_circle_set \<and> w \<in> unit_circle_set

goal (2 subgoals):
 1. u \<in> unit_circle_set \<and> v \<in> unit_circle_set \<or> u \<in> unit_circle_set \<and> w \<in> unit_circle_set \<or> v \<in> unit_circle_set \<and> w \<in> unit_circle_set \<Longrightarrow> \<exists>a b. a \<noteq> b \<and> a \<noteq> inversion b \<and> a \<in> circline_set H \<and> b \<in> circline_set H \<and> a \<notin> unit_circle_set \<and> b \<notin> unit_circle_set
 2. \<not> (u \<in> unit_circle_set \<and> v \<in> unit_circle_set \<or> u \<in> unit_circle_set \<and> w \<in> unit_circle_set \<or> v \<in> unit_circle_set \<and> w \<in> unit_circle_set) \<Longrightarrow> \<exists>a b. a \<noteq> b \<and> a \<noteq> inversion b \<and> a \<in> circline_set H \<and> b \<in> circline_set H \<and> a \<notin> unit_circle_set \<and> b \<notin> unit_circle_set
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
u \<in> unit_circle_set \<and> v \<in> unit_circle_set \<or> u \<in> unit_circle_set \<and> w \<in> unit_circle_set \<or> v \<in> unit_circle_set \<and> w \<in> unit_circle_set
[PROOF STEP]
obtain i1 i2 a where *:
        "i1 \<in> unit_circle_set \<inter> circline_set H" "i2 \<in> unit_circle_set \<inter> circline_set H"
        "a \<in> circline_set H" "a \<notin> unit_circle_set"
        "i1 \<noteq> i2" "i1 \<noteq> a" "i2 \<noteq> a"
[PROOF STATE]
proof (prove)
using this:
u \<in> unit_circle_set \<and> v \<in> unit_circle_set \<or> u \<in> unit_circle_set \<and> w \<in> unit_circle_set \<or> v \<in> unit_circle_set \<and> w \<in> unit_circle_set

goal (1 subgoal):
 1. (\<And>i1 i2 a. \<lbrakk>i1 \<in> unit_circle_set \<inter> circline_set H; i2 \<in> unit_circle_set \<inter> circline_set H; a \<in> circline_set H; a \<notin> unit_circle_set; i1 \<noteq> i2; i1 \<noteq> a; i2 \<noteq> a\<rbrakk> \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
using * \<open>\<not> {u, v, w} \<subseteq> unit_circle_set\<close>
[PROOF STATE]
proof (prove)
using this:
u \<in> unit_circle_set \<and> v \<in> unit_circle_set \<or> u \<in> unit_circle_set \<and> w \<in> unit_circle_set \<or> v \<in> unit_circle_set \<and> w \<in> unit_circle_set
u \<noteq> v
v \<noteq> w
u \<noteq> w
{u, v, w} \<subseteq> circline_set H
\<not> {u, v, w} \<subseteq> unit_circle_set

goal (1 subgoal):
 1. (\<And>i1 i2 a. \<lbrakk>i1 \<in> unit_circle_set \<inter> circline_set H; i2 \<in> unit_circle_set \<inter> circline_set H; a \<in> circline_set H; a \<notin> unit_circle_set; i1 \<noteq> i2; i1 \<noteq> a; i2 \<noteq> a\<rbrakk> \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
i1 \<in> unit_circle_set \<inter> circline_set H
i2 \<in> unit_circle_set \<inter> circline_set H
a \<in> circline_set H
a \<notin> unit_circle_set
i1 \<noteq> i2
i1 \<noteq> a
i2 \<noteq> a

goal (2 subgoals):
 1. u \<in> unit_circle_set \<and> v \<in> unit_circle_set \<or> u \<in> unit_circle_set \<and> w \<in> unit_circle_set \<or> v \<in> unit_circle_set \<and> w \<in> unit_circle_set \<Longrightarrow> \<exists>a b. a \<noteq> b \<and> a \<noteq> inversion b \<and> a \<in> circline_set H \<and> b \<in> circline_set H \<and> a \<notin> unit_circle_set \<and> b \<notin> unit_circle_set
 2. \<not> (u \<in> unit_circle_set \<and> v \<in> unit_circle_set \<or> u \<in> unit_circle_set \<and> w \<in> unit_circle_set \<or> v \<in> unit_circle_set \<and> w \<in> unit_circle_set) \<Longrightarrow> \<exists>a b. a \<noteq> b \<and> a \<noteq> inversion b \<and> a \<in> circline_set H \<and> b \<in> circline_set H \<and> a \<notin> unit_circle_set \<and> b \<notin> unit_circle_set
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
i1 \<in> unit_circle_set \<inter> circline_set H
i2 \<in> unit_circle_set \<inter> circline_set H
a \<in> circline_set H
a \<notin> unit_circle_set
i1 \<noteq> i2
i1 \<noteq> a
i2 \<noteq> a
[PROOF STEP]
obtain b where "b \<in> circline_set H" "b \<noteq> i1" "b \<noteq> i2" "b \<noteq> a" "b \<noteq> inversion a"
[PROOF STATE]
proof (prove)
using this:
i1 \<in> unit_circle_set \<inter> circline_set H
i2 \<in> unit_circle_set \<inter> circline_set H
a \<in> circline_set H
a \<notin> unit_circle_set
i1 \<noteq> i2
i1 \<noteq> a
i2 \<noteq> a

goal (1 subgoal):
 1. (\<And>b. \<lbrakk>b \<in> circline_set H; b \<noteq> i1; b \<noteq> i2; b \<noteq> a; b \<noteq> inversion a\<rbrakk> \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
using ex_is_poincare_line_points'[of i1 H i2 a]
[PROOF STATE]
proof (prove)
using this:
i1 \<in> unit_circle_set \<inter> circline_set H
i2 \<in> unit_circle_set \<inter> circline_set H
a \<in> circline_set H
a \<notin> unit_circle_set
i1 \<noteq> i2
i1 \<noteq> a
i2 \<noteq> a
\<lbrakk>i1 \<in> circline_set H \<inter> unit_circle_set; i2 \<in> circline_set H \<inter> unit_circle_set; i1 \<noteq> i2; a \<in> circline_set H; a \<notin> unit_circle_set\<rbrakk> \<Longrightarrow> \<exists>b. b \<noteq> i1 \<and> b \<noteq> i2 \<and> b \<noteq> a \<and> b \<noteq> inversion a \<and> b \<in> circline_set H

goal (1 subgoal):
 1. (\<And>b. \<lbrakk>b \<in> circline_set H; b \<noteq> i1; b \<noteq> i2; b \<noteq> a; b \<noteq> inversion a\<rbrakk> \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by blast
[PROOF STATE]
proof (state)
this:
b \<in> circline_set H
b \<noteq> i1
b \<noteq> i2
b \<noteq> a
b \<noteq> inversion a

goal (2 subgoals):
 1. u \<in> unit_circle_set \<and> v \<in> unit_circle_set \<or> u \<in> unit_circle_set \<and> w \<in> unit_circle_set \<or> v \<in> unit_circle_set \<and> w \<in> unit_circle_set \<Longrightarrow> \<exists>a b. a \<noteq> b \<and> a \<noteq> inversion b \<and> a \<in> circline_set H \<and> b \<in> circline_set H \<and> a \<notin> unit_circle_set \<and> b \<notin> unit_circle_set
 2. \<not> (u \<in> unit_circle_set \<and> v \<in> unit_circle_set \<or> u \<in> unit_circle_set \<and> w \<in> unit_circle_set \<or> v \<in> unit_circle_set \<and> w \<in> unit_circle_set) \<Longrightarrow> \<exists>a b. a \<noteq> b \<and> a \<noteq> inversion b \<and> a \<in> circline_set H \<and> b \<in> circline_set H \<and> a \<notin> unit_circle_set \<and> b \<notin> unit_circle_set
[PROOF STEP]
hence "b \<notin> unit_circle_set"
[PROOF STATE]
proof (prove)
using this:
b \<in> circline_set H
b \<noteq> i1
b \<noteq> i2
b \<noteq> a
b \<noteq> inversion a

goal (1 subgoal):
 1. b \<notin> unit_circle_set
[PROOF STEP]
using * \<open>H \<noteq> unit_circle\<close> unique_circline_set[of i1 i2 b]
[PROOF STATE]
proof (prove)
using this:
b \<in> circline_set H
b \<noteq> i1
b \<noteq> i2
b \<noteq> a
b \<noteq> inversion a
i1 \<in> unit_circle_set \<inter> circline_set H
i2 \<in> unit_circle_set \<inter> circline_set H
a \<in> circline_set H
a \<notin> unit_circle_set
i1 \<noteq> i2
i1 \<noteq> a
i2 \<noteq> a
H \<noteq> unit_circle
\<lbrakk>i1 \<noteq> i2; i1 \<noteq> b; i2 \<noteq> b\<rbrakk> \<Longrightarrow> \<exists>!H. i1 \<in> circline_set H \<and> i2 \<in> circline_set H \<and> b \<in> circline_set H

goal (1 subgoal):
 1. b \<notin> unit_circle_set
[PROOF STEP]
unfolding unit_circle_set_def
[PROOF STATE]
proof (prove)
using this:
b \<in> circline_set H
b \<noteq> i1
b \<noteq> i2
b \<noteq> a
b \<noteq> inversion a
i1 \<in> circline_set unit_circle \<inter> circline_set H
i2 \<in> circline_set unit_circle \<inter> circline_set H
a \<in> circline_set H
a \<notin> circline_set unit_circle
i1 \<noteq> i2
i1 \<noteq> a
i2 \<noteq> a
H \<noteq> unit_circle
\<lbrakk>i1 \<noteq> i2; i1 \<noteq> b; i2 \<noteq> b\<rbrakk> \<Longrightarrow> \<exists>!H. i1 \<in> circline_set H \<and> i2 \<in> circline_set H \<and> b \<in> circline_set H

goal (1 subgoal):
 1. b \<notin> circline_set unit_circle
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
b \<notin> unit_circle_set

goal (2 subgoals):
 1. u \<in> unit_circle_set \<and> v \<in> unit_circle_set \<or> u \<in> unit_circle_set \<and> w \<in> unit_circle_set \<or> v \<in> unit_circle_set \<and> w \<in> unit_circle_set \<Longrightarrow> \<exists>a b. a \<noteq> b \<and> a \<noteq> inversion b \<and> a \<in> circline_set H \<and> b \<in> circline_set H \<and> a \<notin> unit_circle_set \<and> b \<notin> unit_circle_set
 2. \<not> (u \<in> unit_circle_set \<and> v \<in> unit_circle_set \<or> u \<in> unit_circle_set \<and> w \<in> unit_circle_set \<or> v \<in> unit_circle_set \<and> w \<in> unit_circle_set) \<Longrightarrow> \<exists>a b. a \<noteq> b \<and> a \<noteq> inversion b \<and> a \<in> circline_set H \<and> b \<in> circline_set H \<and> a \<notin> unit_circle_set \<and> b \<notin> unit_circle_set
[PROOF STEP]
thus ?thesis
[PROOF STATE]
proof (prove)
using this:
b \<notin> unit_circle_set

goal (1 subgoal):
 1. \<exists>a b. a \<noteq> b \<and> a \<noteq> inversion b \<and> a \<in> circline_set H \<and> b \<in> circline_set H \<and> a \<notin> unit_circle_set \<and> b \<notin> unit_circle_set
[PROOF STEP]
using * \<open>b \<in> circline_set H\<close> \<open>b \<noteq> a\<close> \<open>b \<noteq> inversion a\<close>
[PROOF STATE]
proof (prove)
using this:
b \<notin> unit_circle_set
i1 \<in> unit_circle_set \<inter> circline_set H
i2 \<in> unit_circle_set \<inter> circline_set H
a \<in> circline_set H
a \<notin> unit_circle_set
i1 \<noteq> i2
i1 \<noteq> a
i2 \<noteq> a
b \<in> circline_set H
b \<noteq> a
b \<noteq> inversion a

goal (1 subgoal):
 1. \<exists>a b. a \<noteq> b \<and> a \<noteq> inversion b \<and> a \<in> circline_set H \<and> b \<in> circline_set H \<and> a \<notin> unit_circle_set \<and> b \<notin> unit_circle_set
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
\<exists>a b. a \<noteq> b \<and> a \<noteq> inversion b \<and> a \<in> circline_set H \<and> b \<in> circline_set H \<and> a \<notin> unit_circle_set \<and> b \<notin> unit_circle_set

goal (1 subgoal):
 1. \<not> (u \<in> unit_circle_set \<and> v \<in> unit_circle_set \<or> u \<in> unit_circle_set \<and> w \<in> unit_circle_set \<or> v \<in> unit_circle_set \<and> w \<in> unit_circle_set) \<Longrightarrow> \<exists>a b. a \<noteq> b \<and> a \<noteq> inversion b \<and> a \<in> circline_set H \<and> b \<in> circline_set H \<and> a \<notin> unit_circle_set \<and> b \<notin> unit_circle_set
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. \<not> (u \<in> unit_circle_set \<and> v \<in> unit_circle_set \<or> u \<in> unit_circle_set \<and> w \<in> unit_circle_set \<or> v \<in> unit_circle_set \<and> w \<in> unit_circle_set) \<Longrightarrow> \<exists>a b. a \<noteq> b \<and> a \<noteq> inversion b \<and> a \<in> circline_set H \<and> b \<in> circline_set H \<and> a \<notin> unit_circle_set \<and> b \<notin> unit_circle_set
[PROOF STEP]
case False
[PROOF STATE]
proof (state)
this:
\<not> (u \<in> unit_circle_set \<and> v \<in> unit_circle_set \<or> u \<in> unit_circle_set \<and> w \<in> unit_circle_set \<or> v \<in> unit_circle_set \<and> w \<in> unit_circle_set)

goal (1 subgoal):
 1. \<not> (u \<in> unit_circle_set \<and> v \<in> unit_circle_set \<or> u \<in> unit_circle_set \<and> w \<in> unit_circle_set \<or> v \<in> unit_circle_set \<and> w \<in> unit_circle_set) \<Longrightarrow> \<exists>a b. a \<noteq> b \<and> a \<noteq> inversion b \<and> a \<in> circline_set H \<and> b \<in> circline_set H \<and> a \<notin> unit_circle_set \<and> b \<notin> unit_circle_set
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
\<not> (u \<in> unit_circle_set \<and> v \<in> unit_circle_set \<or> u \<in> unit_circle_set \<and> w \<in> unit_circle_set \<or> v \<in> unit_circle_set \<and> w \<in> unit_circle_set)
[PROOF STEP]
obtain f g h where
        *: "f \<noteq> g" "f \<in> circline_set H" "f \<notin> unit_circle_set"
                    "g \<in> circline_set H" "g \<notin> unit_circle_set"
                    "h \<in> circline_set H" "h \<noteq> f" "h \<noteq> g"
[PROOF STATE]
proof (prove)
using this:
\<not> (u \<in> unit_circle_set \<and> v \<in> unit_circle_set \<or> u \<in> unit_circle_set \<and> w \<in> unit_circle_set \<or> v \<in> unit_circle_set \<and> w \<in> unit_circle_set)

goal (1 subgoal):
 1. (\<And>f g h. \<lbrakk>f \<noteq> g; f \<in> circline_set H; f \<notin> unit_circle_set; g \<in> circline_set H; g \<notin> unit_circle_set; h \<in> circline_set H; h \<noteq> f; h \<noteq> g\<rbrakk> \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
using *
[PROOF STATE]
proof (prove)
using this:
\<not> (u \<in> unit_circle_set \<and> v \<in> unit_circle_set \<or> u \<in> unit_circle_set \<and> w \<in> unit_circle_set \<or> v \<in> unit_circle_set \<and> w \<in> unit_circle_set)
u \<noteq> v
v \<noteq> w
u \<noteq> w
{u, v, w} \<subseteq> circline_set H

goal (1 subgoal):
 1. (\<And>f g h. \<lbrakk>f \<noteq> g; f \<in> circline_set H; f \<notin> unit_circle_set; g \<in> circline_set H; g \<notin> unit_circle_set; h \<in> circline_set H; h \<noteq> f; h \<noteq> g\<rbrakk> \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
f \<noteq> g
f \<in> circline_set H
f \<notin> unit_circle_set
g \<in> circline_set H
g \<notin> unit_circle_set
h \<in> circline_set H
h \<noteq> f
h \<noteq> g

goal (1 subgoal):
 1. \<not> (u \<in> unit_circle_set \<and> v \<in> unit_circle_set \<or> u \<in> unit_circle_set \<and> w \<in> unit_circle_set \<or> v \<in> unit_circle_set \<and> w \<in> unit_circle_set) \<Longrightarrow> \<exists>a b. a \<noteq> b \<and> a \<noteq> inversion b \<and> a \<in> circline_set H \<and> b \<in> circline_set H \<and> a \<notin> unit_circle_set \<and> b \<notin> unit_circle_set
[PROOF STEP]
show ?thesis
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<exists>a b. a \<noteq> b \<and> a \<noteq> inversion b \<and> a \<in> circline_set H \<and> b \<in> circline_set H \<and> a \<notin> unit_circle_set \<and> b \<notin> unit_circle_set
[PROOF STEP]
proof (cases "f = inversion g")
[PROOF STATE]
proof (state)
goal (2 subgoals):
 1. f = inversion g \<Longrightarrow> \<exists>a b. a \<noteq> b \<and> a \<noteq> inversion b \<and> a \<in> circline_set H \<and> b \<in> circline_set H \<and> a \<notin> unit_circle_set \<and> b \<notin> unit_circle_set
 2. f \<noteq> inversion g \<Longrightarrow> \<exists>a b. a \<noteq> b \<and> a \<noteq> inversion b \<and> a \<in> circline_set H \<and> b \<in> circline_set H \<and> a \<notin> unit_circle_set \<and> b \<notin> unit_circle_set
[PROOF STEP]
case False
[PROOF STATE]
proof (state)
this:
f \<noteq> inversion g

goal (2 subgoals):
 1. f = inversion g \<Longrightarrow> \<exists>a b. a \<noteq> b \<and> a \<noteq> inversion b \<and> a \<in> circline_set H \<and> b \<in> circline_set H \<and> a \<notin> unit_circle_set \<and> b \<notin> unit_circle_set
 2. f \<noteq> inversion g \<Longrightarrow> \<exists>a b. a \<noteq> b \<and> a \<noteq> inversion b \<and> a \<in> circline_set H \<and> b \<in> circline_set H \<and> a \<notin> unit_circle_set \<and> b \<notin> unit_circle_set
[PROOF STEP]
thus ?thesis
[PROOF STATE]
proof (prove)
using this:
f \<noteq> inversion g

goal (1 subgoal):
 1. \<exists>a b. a \<noteq> b \<and> a \<noteq> inversion b \<and> a \<in> circline_set H \<and> b \<in> circline_set H \<and> a \<notin> unit_circle_set \<and> b \<notin> unit_circle_set
[PROOF STEP]
using *
[PROOF STATE]
proof (prove)
using this:
f \<noteq> inversion g
f \<noteq> g
f \<in> circline_set H
f \<notin> unit_circle_set
g \<in> circline_set H
g \<notin> unit_circle_set
h \<in> circline_set H
h \<noteq> f
h \<noteq> g

goal (1 subgoal):
 1. \<exists>a b. a \<noteq> b \<and> a \<noteq> inversion b \<and> a \<in> circline_set H \<and> b \<in> circline_set H \<and> a \<notin> unit_circle_set \<and> b \<notin> unit_circle_set
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
\<exists>a b. a \<noteq> b \<and> a \<noteq> inversion b \<and> a \<in> circline_set H \<and> b \<in> circline_set H \<and> a \<notin> unit_circle_set \<and> b \<notin> unit_circle_set

goal (1 subgoal):
 1. f = inversion g \<Longrightarrow> \<exists>a b. a \<noteq> b \<and> a \<noteq> inversion b \<and> a \<in> circline_set H \<and> b \<in> circline_set H \<and> a \<notin> unit_circle_set \<and> b \<notin> unit_circle_set
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. f = inversion g \<Longrightarrow> \<exists>a b. a \<noteq> b \<and> a \<noteq> inversion b \<and> a \<in> circline_set H \<and> b \<in> circline_set H \<and> a \<notin> unit_circle_set \<and> b \<notin> unit_circle_set
[PROOF STEP]
case True
[PROOF STATE]
proof (state)
this:
f = inversion g

goal (1 subgoal):
 1. f = inversion g \<Longrightarrow> \<exists>a b. a \<noteq> b \<and> a \<noteq> inversion b \<and> a \<in> circline_set H \<and> b \<in> circline_set H \<and> a \<notin> unit_circle_set \<and> b \<notin> unit_circle_set
[PROOF STEP]
show ?thesis
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<exists>a b. a \<noteq> b \<and> a \<noteq> inversion b \<and> a \<in> circline_set H \<and> b \<in> circline_set H \<and> a \<notin> unit_circle_set \<and> b \<notin> unit_circle_set
[PROOF STEP]
proof (cases "h \<in> unit_circle_set")
[PROOF STATE]
proof (state)
goal (2 subgoals):
 1. h \<in> unit_circle_set \<Longrightarrow> \<exists>a b. a \<noteq> b \<and> a \<noteq> inversion b \<and> a \<in> circline_set H \<and> b \<in> circline_set H \<and> a \<notin> unit_circle_set \<and> b \<notin> unit_circle_set
 2. h \<notin> unit_circle_set \<Longrightarrow> \<exists>a b. a \<noteq> b \<and> a \<noteq> inversion b \<and> a \<in> circline_set H \<and> b \<in> circline_set H \<and> a \<notin> unit_circle_set \<and> b \<notin> unit_circle_set
[PROOF STEP]
case False
[PROOF STATE]
proof (state)
this:
h \<notin> unit_circle_set

goal (2 subgoals):
 1. h \<in> unit_circle_set \<Longrightarrow> \<exists>a b. a \<noteq> b \<and> a \<noteq> inversion b \<and> a \<in> circline_set H \<and> b \<in> circline_set H \<and> a \<notin> unit_circle_set \<and> b \<notin> unit_circle_set
 2. h \<notin> unit_circle_set \<Longrightarrow> \<exists>a b. a \<noteq> b \<and> a \<noteq> inversion b \<and> a \<in> circline_set H \<and> b \<in> circline_set H \<and> a \<notin> unit_circle_set \<and> b \<notin> unit_circle_set
[PROOF STEP]
thus ?thesis
[PROOF STATE]
proof (prove)
using this:
h \<notin> unit_circle_set

goal (1 subgoal):
 1. \<exists>a b. a \<noteq> b \<and> a \<noteq> inversion b \<and> a \<in> circline_set H \<and> b \<in> circline_set H \<and> a \<notin> unit_circle_set \<and> b \<notin> unit_circle_set
[PROOF STEP]
using * \<open>f = inversion g\<close>
[PROOF STATE]
proof (prove)
using this:
h \<notin> unit_circle_set
f \<noteq> g
f \<in> circline_set H
f \<notin> unit_circle_set
g \<in> circline_set H
g \<notin> unit_circle_set
h \<in> circline_set H
h \<noteq> f
h \<noteq> g
f = inversion g

goal (1 subgoal):
 1. \<exists>a b. a \<noteq> b \<and> a \<noteq> inversion b \<and> a \<in> circline_set H \<and> b \<in> circline_set H \<and> a \<notin> unit_circle_set \<and> b \<notin> unit_circle_set
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
\<exists>a b. a \<noteq> b \<and> a \<noteq> inversion b \<and> a \<in> circline_set H \<and> b \<in> circline_set H \<and> a \<notin> unit_circle_set \<and> b \<notin> unit_circle_set

goal (1 subgoal):
 1. h \<in> unit_circle_set \<Longrightarrow> \<exists>a b. a \<noteq> b \<and> a \<noteq> inversion b \<and> a \<in> circline_set H \<and> b \<in> circline_set H \<and> a \<notin> unit_circle_set \<and> b \<notin> unit_circle_set
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. h \<in> unit_circle_set \<Longrightarrow> \<exists>a b. a \<noteq> b \<and> a \<noteq> inversion b \<and> a \<in> circline_set H \<and> b \<in> circline_set H \<and> a \<notin> unit_circle_set \<and> b \<notin> unit_circle_set
[PROOF STEP]
case True
[PROOF STATE]
proof (state)
this:
h \<in> unit_circle_set

goal (1 subgoal):
 1. h \<in> unit_circle_set \<Longrightarrow> \<exists>a b. a \<noteq> b \<and> a \<noteq> inversion b \<and> a \<in> circline_set H \<and> b \<in> circline_set H \<and> a \<notin> unit_circle_set \<and> b \<notin> unit_circle_set
[PROOF STEP]
obtain m where cr2: "cross_ratio m h f g = of_complex 2"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (\<And>m. cross_ratio m h f g = of_complex 2 \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
using ex_cross_ratio[of h f g] * \<open>f \<noteq> g\<close> \<open>h \<noteq> f\<close> \<open>h \<noteq> g\<close>
[PROOF STATE]
proof (prove)
using this:
\<lbrakk>h \<noteq> f; h \<noteq> g; f \<noteq> g\<rbrakk> \<Longrightarrow> \<exists>z. cross_ratio z h f g = ?c
f \<noteq> g
f \<in> circline_set H
f \<notin> unit_circle_set
g \<in> circline_set H
g \<notin> unit_circle_set
h \<in> circline_set H
h \<noteq> f
h \<noteq> g
f \<noteq> g
h \<noteq> f
h \<noteq> g

goal (1 subgoal):
 1. (\<And>m. cross_ratio m h f g = of_complex 2 \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
cross_ratio m h f g = of_complex 2

goal (1 subgoal):
 1. h \<in> unit_circle_set \<Longrightarrow> \<exists>a b. a \<noteq> b \<and> a \<noteq> inversion b \<and> a \<in> circline_set H \<and> b \<in> circline_set H \<and> a \<notin> unit_circle_set \<and> b \<notin> unit_circle_set
[PROOF STEP]
hence "m \<noteq> h" "m \<noteq> f" "m \<noteq> g"
[PROOF STATE]
proof (prove)
using this:
cross_ratio m h f g = of_complex 2

goal (1 subgoal):
 1. m \<noteq> h &&& m \<noteq> f &&& m \<noteq> g
[PROOF STEP]
using \<open>h \<noteq> f\<close> \<open>h \<noteq> g\<close> \<open>f \<noteq> g\<close>
[PROOF STATE]
proof (prove)
using this:
cross_ratio m h f g = of_complex 2
h \<noteq> f
h \<noteq> g
f \<noteq> g

goal (1 subgoal):
 1. m \<noteq> h &&& m \<noteq> f &&& m \<noteq> g
[PROOF STEP]
using ex1_cross_ratio[of h f g]
[PROOF STATE]
proof (prove)
using this:
cross_ratio m h f g = of_complex 2
h \<noteq> f
h \<noteq> g
f \<noteq> g
\<lbrakk>h \<noteq> f; h \<noteq> g; f \<noteq> g\<rbrakk> \<Longrightarrow> \<exists>!z. cross_ratio z h f g = ?c

goal (1 subgoal):
 1. m \<noteq> h &&& m \<noteq> f &&& m \<noteq> g
[PROOF STEP]
using cross_ratio_0[of h f g] cross_ratio_1[of h f g] cross_ratio_inf[of h g f]
[PROOF STATE]
proof (prove)
using this:
cross_ratio m h f g = of_complex 2
h \<noteq> f
h \<noteq> g
f \<noteq> g
\<lbrakk>h \<noteq> f; h \<noteq> g; f \<noteq> g\<rbrakk> \<Longrightarrow> \<exists>!z. cross_ratio z h f g = ?c
\<lbrakk>h \<noteq> f; h \<noteq> g\<rbrakk> \<Longrightarrow> cross_ratio h h f g = 0\<^sub>h
\<lbrakk>h \<noteq> f; f \<noteq> g\<rbrakk> \<Longrightarrow> cross_ratio f h f g = 1\<^sub>h
\<lbrakk>h \<noteq> g; f \<noteq> g\<rbrakk> \<Longrightarrow> cross_ratio g h f g = \<infinity>\<^sub>h

goal (1 subgoal):
 1. m \<noteq> h &&& m \<noteq> f &&& m \<noteq> g
[PROOF STEP]
using cr2
[PROOF STATE]
proof (prove)
using this:
cross_ratio m h f g = of_complex 2
h \<noteq> f
h \<noteq> g
f \<noteq> g
\<lbrakk>h \<noteq> f; h \<noteq> g; f \<noteq> g\<rbrakk> \<Longrightarrow> \<exists>!z. cross_ratio z h f g = ?c
\<lbrakk>h \<noteq> f; h \<noteq> g\<rbrakk> \<Longrightarrow> cross_ratio h h f g = 0\<^sub>h
\<lbrakk>h \<noteq> f; f \<noteq> g\<rbrakk> \<Longrightarrow> cross_ratio f h f g = 1\<^sub>h
\<lbrakk>h \<noteq> g; f \<noteq> g\<rbrakk> \<Longrightarrow> cross_ratio g h f g = \<infinity>\<^sub>h
cross_ratio m h f g = of_complex 2

goal (1 subgoal):
 1. m \<noteq> h &&& m \<noteq> f &&& m \<noteq> g
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
m \<noteq> h
m \<noteq> f
m \<noteq> g

goal (1 subgoal):
 1. h \<in> unit_circle_set \<Longrightarrow> \<exists>a b. a \<noteq> b \<and> a \<noteq> inversion b \<and> a \<in> circline_set H \<and> b \<in> circline_set H \<and> a \<notin> unit_circle_set \<and> b \<notin> unit_circle_set
[PROOF STEP]
hence "m \<in> circline_set H"
[PROOF STATE]
proof (prove)
using this:
m \<noteq> h
m \<noteq> f
m \<noteq> g

goal (1 subgoal):
 1. m \<in> circline_set H
[PROOF STEP]
using four_points_on_circline_iff_cross_ratio_real[of m h f g] cr2
[PROOF STATE]
proof (prove)
using this:
m \<noteq> h
m \<noteq> f
m \<noteq> g
distinct [m, h, f, g] \<Longrightarrow> is_real (to_complex (cross_ratio m h f g)) = (\<exists>H. {m, h, f, g} \<subseteq> circline_set H)
cross_ratio m h f g = of_complex 2

goal (1 subgoal):
 1. m \<in> circline_set H
[PROOF STEP]
using \<open>h \<noteq> f\<close> \<open>h \<noteq> g\<close> \<open>f \<noteq> g\<close> *
[PROOF STATE]
proof (prove)
using this:
m \<noteq> h
m \<noteq> f
m \<noteq> g
distinct [m, h, f, g] \<Longrightarrow> is_real (to_complex (cross_ratio m h f g)) = (\<exists>H. {m, h, f, g} \<subseteq> circline_set H)
cross_ratio m h f g = of_complex 2
h \<noteq> f
h \<noteq> g
f \<noteq> g
f \<noteq> g
f \<in> circline_set H
f \<notin> unit_circle_set
g \<in> circline_set H
g \<notin> unit_circle_set
h \<in> circline_set H
h \<noteq> f
h \<noteq> g

goal (1 subgoal):
 1. m \<in> circline_set H
[PROOF STEP]
using unique_circline_set[of h f g]
[PROOF STATE]
proof (prove)
using this:
m \<noteq> h
m \<noteq> f
m \<noteq> g
distinct [m, h, f, g] \<Longrightarrow> is_real (to_complex (cross_ratio m h f g)) = (\<exists>H. {m, h, f, g} \<subseteq> circline_set H)
cross_ratio m h f g = of_complex 2
h \<noteq> f
h \<noteq> g
f \<noteq> g
f \<noteq> g
f \<in> circline_set H
f \<notin> unit_circle_set
g \<in> circline_set H
g \<notin> unit_circle_set
h \<in> circline_set H
h \<noteq> f
h \<noteq> g
\<lbrakk>h \<noteq> f; h \<noteq> g; f \<noteq> g\<rbrakk> \<Longrightarrow> \<exists>!H. h \<in> circline_set H \<and> f \<in> circline_set H \<and> g \<in> circline_set H

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

goal (1 subgoal):
 1. h \<in> unit_circle_set \<Longrightarrow> \<exists>a b. a \<noteq> b \<and> a \<noteq> inversion b \<and> a \<in> circline_set H \<and> b \<in> circline_set H \<and> a \<notin> unit_circle_set \<and> b \<notin> unit_circle_set
[PROOF STEP]
show ?thesis
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<exists>a b. a \<noteq> b \<and> a \<noteq> inversion b \<and> a \<in> circline_set H \<and> b \<in> circline_set H \<and> a \<notin> unit_circle_set \<and> b \<notin> unit_circle_set
[PROOF STEP]
proof (cases "m \<in> unit_circle_set")
[PROOF STATE]
proof (state)
goal (2 subgoals):
 1. m \<in> unit_circle_set \<Longrightarrow> \<exists>a b. a \<noteq> b \<and> a \<noteq> inversion b \<and> a \<in> circline_set H \<and> b \<in> circline_set H \<and> a \<notin> unit_circle_set \<and> b \<notin> unit_circle_set
 2. m \<notin> unit_circle_set \<Longrightarrow> \<exists>a b. a \<noteq> b \<and> a \<noteq> inversion b \<and> a \<in> circline_set H \<and> b \<in> circline_set H \<and> a \<notin> unit_circle_set \<and> b \<notin> unit_circle_set
[PROOF STEP]
case False
[PROOF STATE]
proof (state)
this:
m \<notin> unit_circle_set

goal (2 subgoals):
 1. m \<in> unit_circle_set \<Longrightarrow> \<exists>a b. a \<noteq> b \<and> a \<noteq> inversion b \<and> a \<in> circline_set H \<and> b \<in> circline_set H \<and> a \<notin> unit_circle_set \<and> b \<notin> unit_circle_set
 2. m \<notin> unit_circle_set \<Longrightarrow> \<exists>a b. a \<noteq> b \<and> a \<noteq> inversion b \<and> a \<in> circline_set H \<and> b \<in> circline_set H \<and> a \<notin> unit_circle_set \<and> b \<notin> unit_circle_set
[PROOF STEP]
thus ?thesis
[PROOF STATE]
proof (prove)
using this:
m \<notin> unit_circle_set

goal (1 subgoal):
 1. \<exists>a b. a \<noteq> b \<and> a \<noteq> inversion b \<and> a \<in> circline_set H \<and> b \<in> circline_set H \<and> a \<notin> unit_circle_set \<and> b \<notin> unit_circle_set
[PROOF STEP]
using \<open>m \<noteq> f\<close> \<open>m \<noteq> g\<close> \<open>f = inversion g\<close> * \<open>m \<in> circline_set H\<close>
[PROOF STATE]
proof (prove)
using this:
m \<notin> unit_circle_set
m \<noteq> f
m \<noteq> g
f = inversion g
f \<noteq> g
f \<in> circline_set H
f \<notin> unit_circle_set
g \<in> circline_set H
g \<notin> unit_circle_set
h \<in> circline_set H
h \<noteq> f
h \<noteq> g
m \<in> circline_set H

goal (1 subgoal):
 1. \<exists>a b. a \<noteq> b \<and> a \<noteq> inversion b \<and> a \<in> circline_set H \<and> b \<in> circline_set H \<and> a \<notin> unit_circle_set \<and> b \<notin> unit_circle_set
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
\<exists>a b. a \<noteq> b \<and> a \<noteq> inversion b \<and> a \<in> circline_set H \<and> b \<in> circline_set H \<and> a \<notin> unit_circle_set \<and> b \<notin> unit_circle_set

goal (1 subgoal):
 1. m \<in> unit_circle_set \<Longrightarrow> \<exists>a b. a \<noteq> b \<and> a \<noteq> inversion b \<and> a \<in> circline_set H \<and> b \<in> circline_set H \<and> a \<notin> unit_circle_set \<and> b \<notin> unit_circle_set
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. m \<in> unit_circle_set \<Longrightarrow> \<exists>a b. a \<noteq> b \<and> a \<noteq> inversion b \<and> a \<in> circline_set H \<and> b \<in> circline_set H \<and> a \<notin> unit_circle_set \<and> b \<notin> unit_circle_set
[PROOF STEP]
case True
[PROOF STATE]
proof (state)
this:
m \<in> unit_circle_set

goal (1 subgoal):
 1. m \<in> unit_circle_set \<Longrightarrow> \<exists>a b. a \<noteq> b \<and> a \<noteq> inversion b \<and> a \<in> circline_set H \<and> b \<in> circline_set H \<and> a \<notin> unit_circle_set \<and> b \<notin> unit_circle_set
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
m \<in> unit_circle_set
[PROOF STEP]
obtain n where "n \<noteq> h" "n \<noteq> m" "n \<noteq> f" "n \<noteq> inversion f" "n \<in> circline_set H"
[PROOF STATE]
proof (prove)
using this:
m \<in> unit_circle_set

goal (1 subgoal):
 1. (\<And>n. \<lbrakk>n \<noteq> h; n \<noteq> m; n \<noteq> f; n \<noteq> inversion f; n \<in> circline_set H\<rbrakk> \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
using ex_is_poincare_line_points'[of h H m f] * \<open>m \<in> circline_set H\<close> \<open>h \<in> unit_circle_set\<close> \<open>m \<noteq> h\<close>
[PROOF STATE]
proof (prove)
using this:
m \<in> unit_circle_set
\<lbrakk>h \<in> circline_set H \<inter> unit_circle_set; m \<in> circline_set H \<inter> unit_circle_set; h \<noteq> m; f \<in> circline_set H; f \<notin> unit_circle_set\<rbrakk> \<Longrightarrow> \<exists>b. b \<noteq> h \<and> b \<noteq> m \<and> b \<noteq> f \<and> b \<noteq> inversion f \<and> b \<in> circline_set H
f \<noteq> g
f \<in> circline_set H
f \<notin> unit_circle_set
g \<in> circline_set H
g \<notin> unit_circle_set
h \<in> circline_set H
h \<noteq> f
h \<noteq> g
m \<in> circline_set H
h \<in> unit_circle_set
m \<noteq> h

goal (1 subgoal):
 1. (\<And>n. \<lbrakk>n \<noteq> h; n \<noteq> m; n \<noteq> f; n \<noteq> inversion f; n \<in> circline_set H\<rbrakk> \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
n \<noteq> h
n \<noteq> m
n \<noteq> f
n \<noteq> inversion f
n \<in> circline_set H

goal (1 subgoal):
 1. m \<in> unit_circle_set \<Longrightarrow> \<exists>a b. a \<noteq> b \<and> a \<noteq> inversion b \<and> a \<in> circline_set H \<and> b \<in> circline_set H \<and> a \<notin> unit_circle_set \<and> b \<notin> unit_circle_set
[PROOF STEP]
hence "n \<notin> unit_circle_set"
[PROOF STATE]
proof (prove)
using this:
n \<noteq> h
n \<noteq> m
n \<noteq> f
n \<noteq> inversion f
n \<in> circline_set H

goal (1 subgoal):
 1. n \<notin> unit_circle_set
[PROOF STEP]
using * \<open>H \<noteq> unit_circle\<close> unique_circline_set[of m n h]
[PROOF STATE]
proof (prove)
using this:
n \<noteq> h
n \<noteq> m
n \<noteq> f
n \<noteq> inversion f
n \<in> circline_set H
f \<noteq> g
f \<in> circline_set H
f \<notin> unit_circle_set
g \<in> circline_set H
g \<notin> unit_circle_set
h \<in> circline_set H
h \<noteq> f
h \<noteq> g
H \<noteq> unit_circle
\<lbrakk>m \<noteq> n; m \<noteq> h; n \<noteq> h\<rbrakk> \<Longrightarrow> \<exists>!H. m \<in> circline_set H \<and> n \<in> circline_set H \<and> h \<in> circline_set H

goal (1 subgoal):
 1. n \<notin> unit_circle_set
[PROOF STEP]
using \<open>m \<noteq> h\<close> \<open>m \<in> unit_circle_set\<close> \<open>h \<in> unit_circle_set\<close> \<open>m \<in> circline_set H\<close>
[PROOF STATE]
proof (prove)
using this:
n \<noteq> h
n \<noteq> m
n \<noteq> f
n \<noteq> inversion f
n \<in> circline_set H
f \<noteq> g
f \<in> circline_set H
f \<notin> unit_circle_set
g \<in> circline_set H
g \<notin> unit_circle_set
h \<in> circline_set H
h \<noteq> f
h \<noteq> g
H \<noteq> unit_circle
\<lbrakk>m \<noteq> n; m \<noteq> h; n \<noteq> h\<rbrakk> \<Longrightarrow> \<exists>!H. m \<in> circline_set H \<and> n \<in> circline_set H \<and> h \<in> circline_set H
m \<noteq> h
m \<in> unit_circle_set
h \<in> unit_circle_set
m \<in> circline_set H

goal (1 subgoal):
 1. n \<notin> unit_circle_set
[PROOF STEP]
unfolding unit_circle_set_def
[PROOF STATE]
proof (prove)
using this:
n \<noteq> h
n \<noteq> m
n \<noteq> f
n \<noteq> inversion f
n \<in> circline_set H
f \<noteq> g
f \<in> circline_set H
f \<notin> circline_set unit_circle
g \<in> circline_set H
g \<notin> circline_set unit_circle
h \<in> circline_set H
h \<noteq> f
h \<noteq> g
H \<noteq> unit_circle
\<lbrakk>m \<noteq> n; m \<noteq> h; n \<noteq> h\<rbrakk> \<Longrightarrow> \<exists>!H. m \<in> circline_set H \<and> n \<in> circline_set H \<and> h \<in> circline_set H
m \<noteq> h
m \<in> circline_set unit_circle
h \<in> circline_set unit_circle
m \<in> circline_set H

goal (1 subgoal):
 1. n \<notin> circline_set unit_circle
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
n \<notin> unit_circle_set

goal (1 subgoal):
 1. m \<in> unit_circle_set \<Longrightarrow> \<exists>a b. a \<noteq> b \<and> a \<noteq> inversion b \<and> a \<in> circline_set H \<and> b \<in> circline_set H \<and> a \<notin> unit_circle_set \<and> b \<notin> unit_circle_set
[PROOF STEP]
thus ?thesis
[PROOF STATE]
proof (prove)
using this:
n \<notin> unit_circle_set

goal (1 subgoal):
 1. \<exists>a b. a \<noteq> b \<and> a \<noteq> inversion b \<and> a \<in> circline_set H \<and> b \<in> circline_set H \<and> a \<notin> unit_circle_set \<and> b \<notin> unit_circle_set
[PROOF STEP]
using * \<open>n \<in> circline_set H\<close> \<open>n \<noteq> f\<close> \<open>n \<noteq> inversion f\<close>
[PROOF STATE]
proof (prove)
using this:
n \<notin> unit_circle_set
f \<noteq> g
f \<in> circline_set H
f \<notin> unit_circle_set
g \<in> circline_set H
g \<notin> unit_circle_set
h \<in> circline_set H
h \<noteq> f
h \<noteq> g
n \<in> circline_set H
n \<noteq> f
n \<noteq> inversion f

goal (1 subgoal):
 1. \<exists>a b. a \<noteq> b \<and> a \<noteq> inversion b \<and> a \<in> circline_set H \<and> b \<in> circline_set H \<and> a \<notin> unit_circle_set \<and> b \<notin> unit_circle_set
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
\<exists>a b. a \<noteq> b \<and> a \<noteq> inversion b \<and> a \<in> circline_set H \<and> b \<in> circline_set H \<and> a \<notin> unit_circle_set \<and> b \<notin> unit_circle_set

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
\<exists>a b. a \<noteq> b \<and> a \<noteq> inversion b \<and> a \<in> circline_set H \<and> b \<in> circline_set H \<and> a \<notin> unit_circle_set \<and> b \<notin> unit_circle_set

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
\<exists>a b. a \<noteq> b \<and> a \<noteq> inversion b \<and> a \<in> circline_set H \<and> b \<in> circline_set H \<and> a \<notin> unit_circle_set \<and> b \<notin> unit_circle_set

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
\<exists>a b. a \<noteq> b \<and> a \<noteq> inversion b \<and> a \<in> circline_set H \<and> b \<in> circline_set H \<and> a \<notin> unit_circle_set \<and> b \<notin> unit_circle_set

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
\<exists>a b. a \<noteq> b \<and> a \<noteq> inversion b \<and> a \<in> circline_set H \<and> b \<in> circline_set H \<and> a \<notin> unit_circle_set \<and> b \<notin> unit_circle_set

goal (1 subgoal):
 1. \<not> (u \<in> unit_disc \<and> v \<in> unit_disc \<or> u \<in> unit_disc \<and> w \<in> unit_disc \<or> v \<in> unit_disc \<and> w \<in> unit_disc) \<Longrightarrow> \<exists>u v. u \<in> unit_disc \<and> v \<in> unit_disc \<and> u \<noteq> v \<and> {u, v} \<subseteq> circline_set H
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
\<exists>a b. a \<noteq> b \<and> a \<noteq> inversion b \<and> a \<in> circline_set H \<and> b \<in> circline_set H \<and> a \<notin> unit_circle_set \<and> b \<notin> unit_circle_set
[PROOF STEP]
obtain a b where ab: "a \<noteq> b" "a \<noteq> inversion b" "a \<in> circline_set H" "b \<in> circline_set H" "a \<notin> unit_circle_set" "b \<notin> unit_circle_set"
[PROOF STATE]
proof (prove)
using this:
\<exists>a b. a \<noteq> b \<and> a \<noteq> inversion b \<and> a \<in> circline_set H \<and> b \<in> circline_set H \<and> a \<notin> unit_circle_set \<and> b \<notin> unit_circle_set

goal (1 subgoal):
 1. (\<And>a b. \<lbrakk>a \<noteq> b; a \<noteq> inversion b; a \<in> circline_set H; b \<in> circline_set H; a \<notin> unit_circle_set; b \<notin> unit_circle_set\<rbrakk> \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by blast
[PROOF STATE]
proof (state)
this:
a \<noteq> b
a \<noteq> inversion b
a \<in> circline_set H
b \<in> circline_set H
a \<notin> unit_circle_set
b \<notin> unit_circle_set

goal (1 subgoal):
 1. \<not> (u \<in> unit_disc \<and> v \<in> unit_disc \<or> u \<in> unit_disc \<and> w \<in> unit_disc \<or> v \<in> unit_disc \<and> w \<in> unit_disc) \<Longrightarrow> \<exists>u v. u \<in> unit_disc \<and> v \<in> unit_disc \<and> u \<noteq> v \<and> {u, v} \<subseteq> circline_set H
[PROOF STEP]
have "\<forall> x. x \<in> circline_set H \<and> x \<notin> unit_circle_set \<longrightarrow> (\<exists> x'. x' \<in> circline_set H \<inter> unit_disc \<and> (x' = x \<or> x' = inversion x))"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<forall>x. x \<in> circline_set H \<and> x \<notin> unit_circle_set \<longrightarrow> (\<exists>x'. x' \<in> circline_set H \<inter> unit_disc \<and> (x' = x \<or> x' = inversion x))
[PROOF STEP]
proof safe
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. \<And>x. \<lbrakk>x \<in> circline_set H; x \<notin> unit_circle_set\<rbrakk> \<Longrightarrow> \<exists>x'. x' \<in> circline_set H \<inter> unit_disc \<and> (x' = x \<or> x' = inversion x)
[PROOF STEP]
fix x
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. \<And>x. \<lbrakk>x \<in> circline_set H; x \<notin> unit_circle_set\<rbrakk> \<Longrightarrow> \<exists>x'. x' \<in> circline_set H \<inter> unit_disc \<and> (x' = x \<or> x' = inversion x)
[PROOF STEP]
assume x: "x \<in> circline_set H" "x \<notin> unit_circle_set"
[PROOF STATE]
proof (state)
this:
x \<in> circline_set H
x \<notin> unit_circle_set

goal (1 subgoal):
 1. \<And>x. \<lbrakk>x \<in> circline_set H; x \<notin> unit_circle_set\<rbrakk> \<Longrightarrow> \<exists>x'. x' \<in> circline_set H \<inter> unit_disc \<and> (x' = x \<or> x' = inversion x)
[PROOF STEP]
show "\<exists> x'. x' \<in> circline_set H \<inter> unit_disc \<and> (x' = x \<or> x' = inversion x)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<exists>x'. x' \<in> circline_set H \<inter> unit_disc \<and> (x' = x \<or> x' = inversion x)
[PROOF STEP]
proof (cases "x \<in> unit_disc")
[PROOF STATE]
proof (state)
goal (2 subgoals):
 1. x \<in> unit_disc \<Longrightarrow> \<exists>x'. x' \<in> circline_set H \<inter> unit_disc \<and> (x' = x \<or> x' = inversion x)
 2. x \<notin> unit_disc \<Longrightarrow> \<exists>x'. x' \<in> circline_set H \<inter> unit_disc \<and> (x' = x \<or> x' = inversion x)
[PROOF STEP]
case True
[PROOF STATE]
proof (state)
this:
x \<in> unit_disc

goal (2 subgoals):
 1. x \<in> unit_disc \<Longrightarrow> \<exists>x'. x' \<in> circline_set H \<inter> unit_disc \<and> (x' = x \<or> x' = inversion x)
 2. x \<notin> unit_disc \<Longrightarrow> \<exists>x'. x' \<in> circline_set H \<inter> unit_disc \<and> (x' = x \<or> x' = inversion x)
[PROOF STEP]
thus ?thesis
[PROOF STATE]
proof (prove)
using this:
x \<in> unit_disc

goal (1 subgoal):
 1. \<exists>x'. x' \<in> circline_set H \<inter> unit_disc \<and> (x' = x \<or> x' = inversion x)
[PROOF STEP]
using x
[PROOF STATE]
proof (prove)
using this:
x \<in> unit_disc
x \<in> circline_set H
x \<notin> unit_circle_set

goal (1 subgoal):
 1. \<exists>x'. x' \<in> circline_set H \<inter> unit_disc \<and> (x' = x \<or> x' = inversion x)
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
\<exists>x'. x' \<in> circline_set H \<inter> unit_disc \<and> (x' = x \<or> x' = inversion x)

goal (1 subgoal):
 1. x \<notin> unit_disc \<Longrightarrow> \<exists>x'. x' \<in> circline_set H \<inter> unit_disc \<and> (x' = x \<or> x' = inversion x)
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. x \<notin> unit_disc \<Longrightarrow> \<exists>x'. x' \<in> circline_set H \<inter> unit_disc \<and> (x' = x \<or> x' = inversion x)
[PROOF STEP]
case False
[PROOF STATE]
proof (state)
this:
x \<notin> unit_disc

goal (1 subgoal):
 1. x \<notin> unit_disc \<Longrightarrow> \<exists>x'. x' \<in> circline_set H \<inter> unit_disc \<and> (x' = x \<or> x' = inversion x)
[PROOF STEP]
hence "x \<in> unit_disc_compl"
[PROOF STATE]
proof (prove)
using this:
x \<notin> unit_disc

goal (1 subgoal):
 1. x \<in> unit_disc_compl
[PROOF STEP]
using x  in_on_out_univ[of "ounit_circle"]
[PROOF STATE]
proof (prove)
using this:
x \<notin> unit_disc
x \<in> circline_set H
x \<notin> unit_circle_set
disc ounit_circle \<union> disc_compl ounit_circle \<union> ocircline_set ounit_circle = UNIV

goal (1 subgoal):
 1. x \<in> unit_disc_compl
[PROOF STEP]
unfolding unit_circle_set_def unit_disc_def unit_disc_compl_def
[PROOF STATE]
proof (prove)
using this:
x \<notin> disc ounit_circle
x \<in> circline_set H
x \<notin> circline_set unit_circle
disc ounit_circle \<union> disc_compl ounit_circle \<union> ocircline_set ounit_circle = UNIV

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

goal (1 subgoal):
 1. x \<notin> unit_disc \<Longrightarrow> \<exists>x'. x' \<in> circline_set H \<inter> unit_disc \<and> (x' = x \<or> x' = inversion x)
[PROOF STEP]
hence "inversion x \<in> unit_disc"
[PROOF STATE]
proof (prove)
using this:
x \<in> unit_disc_compl

goal (1 subgoal):
 1. inversion x \<in> unit_disc
[PROOF STEP]
using inversion_unit_disc_compl
[PROOF STATE]
proof (prove)
using this:
x \<in> unit_disc_compl
inversion ` unit_disc_compl = unit_disc

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

goal (1 subgoal):
 1. x \<notin> unit_disc \<Longrightarrow> \<exists>x'. x' \<in> circline_set H \<inter> unit_disc \<and> (x' = x \<or> x' = inversion x)
[PROOF STEP]
thus ?thesis
[PROOF STATE]
proof (prove)
using this:
inversion x \<in> unit_disc

goal (1 subgoal):
 1. \<exists>x'. x' \<in> circline_set H \<inter> unit_disc \<and> (x' = x \<or> x' = inversion x)
[PROOF STEP]
using is_poincare_line_inverse_point[OF assms, of x] x
[PROOF STATE]
proof (prove)
using this:
inversion x \<in> unit_disc
x \<in> circline_set H \<Longrightarrow> inversion x \<in> circline_set H
x \<in> circline_set H
x \<notin> unit_circle_set

goal (1 subgoal):
 1. \<exists>x'. x' \<in> circline_set H \<inter> unit_disc \<and> (x' = x \<or> x' = inversion x)
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
\<exists>x'. x' \<in> circline_set H \<inter> unit_disc \<and> (x' = x \<or> x' = inversion x)

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
\<exists>x'. x' \<in> circline_set H \<inter> unit_disc \<and> (x' = x \<or> x' = inversion x)

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
\<forall>x. x \<in> circline_set H \<and> x \<notin> unit_circle_set \<longrightarrow> (\<exists>x'. x' \<in> circline_set H \<inter> unit_disc \<and> (x' = x \<or> x' = inversion x))

goal (1 subgoal):
 1. \<not> (u \<in> unit_disc \<and> v \<in> unit_disc \<or> u \<in> unit_disc \<and> w \<in> unit_disc \<or> v \<in> unit_disc \<and> w \<in> unit_disc) \<Longrightarrow> \<exists>u v. u \<in> unit_disc \<and> v \<in> unit_disc \<and> u \<noteq> v \<and> {u, v} \<subseteq> circline_set H
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
\<forall>x. x \<in> circline_set H \<and> x \<notin> unit_circle_set \<longrightarrow> (\<exists>x'. x' \<in> circline_set H \<inter> unit_disc \<and> (x' = x \<or> x' = inversion x))
[PROOF STEP]
obtain a' b' where
      *: "a' \<in> circline_set H" "a' \<in> unit_disc" "b' \<in> circline_set H" "b' \<in> unit_disc" and
      **: "a' = a \<or> a' = inversion a" "b' = b \<or> b' = inversion b"
[PROOF STATE]
proof (prove)
using this:
\<forall>x. x \<in> circline_set H \<and> x \<notin> unit_circle_set \<longrightarrow> (\<exists>x'. x' \<in> circline_set H \<inter> unit_disc \<and> (x' = x \<or> x' = inversion x))

goal (1 subgoal):
 1. (\<And>a' b'. \<lbrakk>a' \<in> circline_set H; a' \<in> unit_disc; b' \<in> circline_set H; b' \<in> unit_disc; a' = a \<or> a' = inversion a; b' = b \<or> b' = inversion b\<rbrakk> \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
using ab
[PROOF STATE]
proof (prove)
using this:
\<forall>x. x \<in> circline_set H \<and> x \<notin> unit_circle_set \<longrightarrow> (\<exists>x'. x' \<in> circline_set H \<inter> unit_disc \<and> (x' = x \<or> x' = inversion x))
a \<noteq> b
a \<noteq> inversion b
a \<in> circline_set H
b \<in> circline_set H
a \<notin> unit_circle_set
b \<notin> unit_circle_set

goal (1 subgoal):
 1. (\<And>a' b'. \<lbrakk>a' \<in> circline_set H; a' \<in> unit_disc; b' \<in> circline_set H; b' \<in> unit_disc; a' = a \<or> a' = inversion a; b' = b \<or> b' = inversion b\<rbrakk> \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by blast
[PROOF STATE]
proof (state)
this:
a' \<in> circline_set H
a' \<in> unit_disc
b' \<in> circline_set H
b' \<in> unit_disc
a' = a \<or> a' = inversion a
b' = b \<or> b' = inversion b

goal (1 subgoal):
 1. \<not> (u \<in> unit_disc \<and> v \<in> unit_disc \<or> u \<in> unit_disc \<and> w \<in> unit_disc \<or> v \<in> unit_disc \<and> w \<in> unit_disc) \<Longrightarrow> \<exists>u v. u \<in> unit_disc \<and> v \<in> unit_disc \<and> u \<noteq> v \<and> {u, v} \<subseteq> circline_set H
[PROOF STEP]
have "a' \<noteq> b'"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. a' \<noteq> b'
[PROOF STEP]
using \<open>a \<noteq> b\<close> \<open>a \<noteq> inversion b\<close> ** *
[PROOF STATE]
proof (prove)
using this:
a \<noteq> b
a \<noteq> inversion b
a' = a \<or> a' = inversion a
b' = b \<or> b' = inversion b
a' \<in> circline_set H
a' \<in> unit_disc
b' \<in> circline_set H
b' \<in> unit_disc

goal (1 subgoal):
 1. a' \<noteq> b'
[PROOF STEP]
by (metis inversion_involution)
[PROOF STATE]
proof (state)
this:
a' \<noteq> b'

goal (1 subgoal):
 1. \<not> (u \<in> unit_disc \<and> v \<in> unit_disc \<or> u \<in> unit_disc \<and> w \<in> unit_disc \<or> v \<in> unit_disc \<and> w \<in> unit_disc) \<Longrightarrow> \<exists>u v. u \<in> unit_disc \<and> v \<in> unit_disc \<and> u \<noteq> v \<and> {u, v} \<subseteq> circline_set H
[PROOF STEP]
thus ?thesis
[PROOF STATE]
proof (prove)
using this:
a' \<noteq> b'

goal (1 subgoal):
 1. \<exists>u v. u \<in> unit_disc \<and> v \<in> unit_disc \<and> u \<noteq> v \<and> {u, v} \<subseteq> circline_set H
[PROOF STEP]
using *
[PROOF STATE]
proof (prove)
using this:
a' \<noteq> b'
a' \<in> circline_set H
a' \<in> unit_disc
b' \<in> circline_set H
b' \<in> unit_disc

goal (1 subgoal):
 1. \<exists>u v. u \<in> unit_disc \<and> v \<in> unit_disc \<and> u \<noteq> v \<and> {u, v} \<subseteq> circline_set H
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
\<exists>u v. u \<in> unit_disc \<and> v \<in> unit_disc \<and> u \<noteq> v \<and> {u, v} \<subseteq> circline_set H

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
\<exists>u v. u \<in> unit_disc \<and> v \<in> unit_disc \<and> u \<noteq> v \<and> {u, v} \<subseteq> circline_set H

goal:
No subgoals!
[PROOF STEP]
qed


[STATEMENT]
lemma integrable_Gamma_integral_bound:
  fixes a c :: real
  assumes a: "a > -1" and c: "c \<ge> 0"
  defines "f \<equiv> \<lambda>x. if x \<in> {0..c} then x powr a else exp (-x/2)"
  shows   "f integrable_on {0..}"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. f integrable_on {0..}
[PROOF STEP]
proof -
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. f integrable_on {0..}
[PROOF STEP]
have "f integrable_on {0..c}"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. f integrable_on {0..c}
[PROOF STEP]
by (rule integrable_spike_finite[of "{}", OF _ _ integrable_on_powr_from_0[of a c]])
       (insert a c, simp_all add: f_def)
[PROOF STATE]
proof (state)
this:
f integrable_on {0..c}

goal (1 subgoal):
 1. f integrable_on {0..}
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
f integrable_on {0..c}

goal (1 subgoal):
 1. f integrable_on {0..}
[PROOF STEP]
have A: "(\<lambda>x. exp (-x/2)) integrable_on {c..}"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (\<lambda>x. exp (- x / 2)) integrable_on {c..}
[PROOF STEP]
using integrable_on_exp_minus_to_infinity[of "1/2"]
[PROOF STATE]
proof (prove)
using this:
0 < 1 / 2 \<Longrightarrow> (\<lambda>x. exp (- (1 / 2) * x)) integrable_on {?c..}

goal (1 subgoal):
 1. (\<lambda>x. exp (- x / 2)) integrable_on {c..}
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
(\<lambda>x. exp (- x / 2)) integrable_on {c..}

goal (1 subgoal):
 1. f integrable_on {0..}
[PROOF STEP]
have "f integrable_on {c..}"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. f integrable_on {c..}
[PROOF STEP]
by (rule integrable_spike_finite[of "{c}", OF _ _ A]) (simp_all add: f_def)
[PROOF STATE]
proof (state)
this:
f integrable_on {c..}

goal (1 subgoal):
 1. f integrable_on {0..}
[PROOF STEP]
ultimately
[PROOF STATE]
proof (chain)
picking this:
f integrable_on {0..c}
f integrable_on {c..}
[PROOF STEP]
show "f integrable_on {0..}"
[PROOF STATE]
proof (prove)
using this:
f integrable_on {0..c}
f integrable_on {c..}

goal (1 subgoal):
 1. f integrable_on {0..}
[PROOF STEP]
by (rule integrable_Un') (insert c, auto simp: max_def)
[PROOF STATE]
proof (state)
this:
f integrable_on {0..}

goal:
No subgoals!
[PROOF STEP]
qed


[STATEMENT]
lemma Inf_eq_minimum_componentwise:
  assumes i: "\<And>b. b \<in> Basis \<Longrightarrow> X \<bullet> b = i b \<bullet> b"
  assumes sup: "\<And>b x. b \<in> Basis \<Longrightarrow> x \<in> s \<Longrightarrow> X \<bullet> b \<le> x \<bullet> b"
  assumes i_s: "\<And>b. b \<in> Basis \<Longrightarrow> (i b \<bullet> b) \<in> (\<lambda>x. x \<bullet> b) ` s"
  shows "Inf s = X"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. Inf s = X
[PROOF STEP]
using assms
[PROOF STATE]
proof (prove)
using this:
?b1 \<in> Basis \<Longrightarrow> X \<bullet> ?b1 = i ?b1 \<bullet> ?b1
\<lbrakk>?b1 \<in> Basis; ?x1 \<in> s\<rbrakk> \<Longrightarrow> X \<bullet> ?b1 \<le> ?x1 \<bullet> ?b1
?b1 \<in> Basis \<Longrightarrow> i ?b1 \<bullet> ?b1 \<in> (\<lambda>x. x \<bullet> ?b1) ` s

goal (1 subgoal):
 1. Inf s = X
[PROOF STEP]
unfolding eucl_Inf euclidean_representation_sum
[PROOF STATE]
proof (prove)
using this:
?b1 \<in> Basis \<Longrightarrow> X \<bullet> ?b1 = i ?b1 \<bullet> ?b1
\<lbrakk>?b1 \<in> Basis; ?x1 \<in> s\<rbrakk> \<Longrightarrow> X \<bullet> ?b1 \<le> ?x1 \<bullet> ?b1
?b1 \<in> Basis \<Longrightarrow> i ?b1 \<bullet> ?b1 \<in> (\<lambda>x. x \<bullet> ?b1) ` s

goal (1 subgoal):
 1. \<forall>i\<in>Basis. (INF x\<in>s. x \<bullet> i) = X \<bullet> i
[PROOF STEP]
by (auto intro!: conditionally_complete_lattice_class.cInf_eq_minimum)


[STATEMENT]
lemma carrier_mat_code[code]: "carrier_mat nr nc = Collect_set (\<lambda> A. dim_row A = nr \<and> dim_col A = nc)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. carrier_mat nr nc = Collect_set (\<lambda>A. dim_row A = nr \<and> dim_col A = nc)
[PROOF STEP]
by auto


[STATEMENT]
lemma closure_greaterThanAtMost[simp]:
  fixes a b::"'a::{linorder_topology, dense_order}"
  assumes "a < b"
  shows "closure {a <.. b} = {a .. b}"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. closure {a<..b} = {a..b}
[PROOF STEP]
proof -
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. closure {a<..b} = {a..b}
[PROOF STEP]
from assms
[PROOF STATE]
proof (chain)
picking this:
a < b
[PROOF STEP]
have "{a <.. b} = {b} \<union> {a <..< b}"
[PROOF STATE]
proof (prove)
using this:
a < b

goal (1 subgoal):
 1. {a<..b} = {b} \<union> {a<..<b}
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
{a<..b} = {b} \<union> {a<..<b}

goal (1 subgoal):
 1. closure {a<..b} = {a..b}
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
{a<..b} = {b} \<union> {a<..<b}

goal (1 subgoal):
 1. closure {a<..b} = {a..b}
[PROOF STEP]
have "closure \<dots> = {a .. b}"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. closure ({b} \<union> {a<..<b}) = {a..b}
[PROOF STEP]
unfolding closure_Un
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. closure {b} \<union> closure {a<..<b} = {a..b}
[PROOF STEP]
by (auto simp: assms less_imp_le)
[PROOF STATE]
proof (state)
this:
closure ({b} \<union> {a<..<b}) = {a..b}

goal (1 subgoal):
 1. closure {a<..b} = {a..b}
[PROOF STEP]
finally
[PROOF STATE]
proof (chain)
picking this:
closure {a<..b} = {a..b}
[PROOF STEP]
show ?thesis
[PROOF STATE]
proof (prove)
using this:
closure {a<..b} = {a..b}

goal (1 subgoal):
 1. closure {a<..b} = {a..b}
[PROOF STEP]
.
[PROOF STATE]
proof (state)
this:
closure {a<..b} = {a..b}

goal:
No subgoals!
[PROOF STEP]
qed


[STATEMENT]
lemma inj_on_infinite:
  assumes "infinite A" "inj_on f A" "range f \<subseteq> B"
  shows "infinite B"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. infinite B
[PROOF STEP]
proof -
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. infinite B
[PROOF STEP]
from assms[unfolded infinite_iff_countable_subset]
[PROOF STATE]
proof (chain)
picking this:
\<exists>f. inj f \<and> range f \<subseteq> A
inj_on f A
range f \<subseteq> B
[PROOF STEP]
obtain g::"nat \<Rightarrow> 'a" where
    g:"inj g \<and> range g \<subseteq> A"
[PROOF STATE]
proof (prove)
using this:
\<exists>f. inj f \<and> range f \<subseteq> A
inj_on f A
range f \<subseteq> B

goal (1 subgoal):
 1. (\<And>g. inj g \<and> range g \<subseteq> A \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by blast
[PROOF STATE]
proof (state)
this:
inj g \<and> range g \<subseteq> A

goal (1 subgoal):
 1. infinite B
[PROOF STEP]
hence i:"inj (f o g)"
[PROOF STATE]
proof (prove)
using this:
inj g \<and> range g \<subseteq> A

goal (1 subgoal):
 1. inj (f \<circ> g)
[PROOF STEP]
using assms(2)
[PROOF STATE]
proof (prove)
using this:
inj g \<and> range g \<subseteq> A
inj_on f A

goal (1 subgoal):
 1. inj (f \<circ> g)
[PROOF STEP]
using comp_inj_on inj_on_subset
[PROOF STATE]
proof (prove)
using this:
inj g \<and> range g \<subseteq> A
inj_on f A
\<lbrakk>inj_on ?f ?A; inj_on ?g (?f ` ?A)\<rbrakk> \<Longrightarrow> inj_on (?g \<circ> ?f) ?A
\<lbrakk>inj_on ?f ?A; ?B \<subseteq> ?A\<rbrakk> \<Longrightarrow> inj_on ?f ?B

goal (1 subgoal):
 1. inj (f \<circ> g)
[PROOF STEP]
by blast
[PROOF STATE]
proof (state)
this:
inj (f \<circ> g)

goal (1 subgoal):
 1. infinite B
[PROOF STEP]
have "range (f o g) \<subseteq> B"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. range (f \<circ> g) \<subseteq> B
[PROOF STEP]
using assms(3)
[PROOF STATE]
proof (prove)
using this:
range f \<subseteq> B

goal (1 subgoal):
 1. range (f \<circ> g) \<subseteq> B
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
range (f \<circ> g) \<subseteq> B

goal (1 subgoal):
 1. infinite B
[PROOF STEP]
with i
[PROOF STATE]
proof (chain)
picking this:
inj (f \<circ> g)
range (f \<circ> g) \<subseteq> B
[PROOF STEP]
show ?thesis
[PROOF STATE]
proof (prove)
using this:
inj (f \<circ> g)
range (f \<circ> g) \<subseteq> B

goal (1 subgoal):
 1. infinite B
[PROOF STEP]
unfolding infinite_iff_countable_subset
[PROOF STATE]
proof (prove)
using this:
inj (f \<circ> g)
range (f \<circ> g) \<subseteq> B

goal (1 subgoal):
 1. \<exists>f. inj f \<and> range f \<subseteq> B
[PROOF STEP]
by blast
[PROOF STATE]
proof (state)
this:
infinite B

goal:
No subgoals!
[PROOF STEP]
qed


[STATEMENT]
lemma sq_mtx_minus_ith[simp]:"(A - B) $$ i = A $$ i - B $$ i"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (A - B) $$ i = A $$ i - B $$ i
[PROOF STEP]
unfolding sq_mtx_minus_eq
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. to_mtx (\<chi>i j. A $$ i $ j - B $$ i $ j) $$ i = A $$ i - B $$ i
[PROOF STEP]
by (simp add: vec_eq_iff)


[STATEMENT]
lemma index_extract_matrix:
assumes "i<m" "j<n"
shows "extract_matrix a m n $$ (i,j) = a (i*n + j)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. extract_matrix a m n $$ (i, j) = a (i * n + j)
[PROOF STEP]
unfolding extract_matrix_def
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. mat m n (\<lambda>(i, j). a (i * n + j)) $$ (i, j) = a (i * n + j)
[PROOF STEP]
using assms
[PROOF STATE]
proof (prove)
using this:
i < m
j < n

goal (1 subgoal):
 1. mat m n (\<lambda>(i, j). a (i * n + j)) $$ (i, j) = a (i * n + j)
[PROOF STEP]
by simp


[STATEMENT]
lemma  plus_length2[simp]: "rotate ((length ls)+k) ls = rotate k ls "
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. rotate (|ls| + k) ls = rotate k ls
[PROOF STEP]
proof -
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. rotate (|ls| + k) ls = rotate k ls
[PROOF STEP]
define x where "x = (length ls)+k"
[PROOF STATE]
proof (state)
this:
x = |ls| + k

goal (1 subgoal):
 1. rotate (|ls| + k) ls = rotate k ls
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
x = |ls| + k
[PROOF STEP]
have "x = k+(length ls)"
[PROOF STATE]
proof (prove)
using this:
x = |ls| + k

goal (1 subgoal):
 1. x = k + |ls|
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
x = k + |ls|

goal (1 subgoal):
 1. rotate (|ls| + k) ls = rotate k ls
[PROOF STEP]
with x_def
[PROOF STATE]
proof (chain)
picking this:
x = |ls| + k
x = k + |ls|
[PROOF STEP]
have "rotate x ls = rotate (k+(length ls)) ls"
[PROOF STATE]
proof (prove)
using this:
x = |ls| + k
x = k + |ls|

goal (1 subgoal):
 1. rotate x ls = rotate (k + |ls|) ls
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
rotate x ls = rotate (k + |ls|) ls

goal (1 subgoal):
 1. rotate (|ls| + k) ls = rotate k ls
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
rotate x ls = rotate (k + |ls|) ls
[PROOF STEP]
have "rotate x ls = rotate k ls"
[PROOF STATE]
proof (prove)
using this:
rotate x ls = rotate (k + |ls|) ls

goal (1 subgoal):
 1. rotate x ls = rotate k ls
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
rotate x ls = rotate k ls

goal (1 subgoal):
 1. rotate (|ls| + k) ls = rotate k ls
[PROOF STEP]
with x_def
[PROOF STATE]
proof (chain)
picking this:
x = |ls| + k
rotate x ls = rotate k ls
[PROOF STEP]
show ?thesis
[PROOF STATE]
proof (prove)
using this:
x = |ls| + k
rotate x ls = rotate k ls

goal (1 subgoal):
 1. rotate (|ls| + k) ls = rotate k ls
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
rotate (|ls| + k) ls = rotate k ls

goal:
No subgoals!
[PROOF STEP]
qed


[STATEMENT]
lemma path_component_of_discrete_topology [simp]:
  "Collect (path_component_of (discrete_topology U) x) = (if x \<in> U then {x} else {})"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. path_component_of_set (discrete_topology U) x = (if x \<in> U then {x} else {})
[PROOF STEP]
proof -
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. path_component_of_set (discrete_topology U) x = (if x \<in> U then {x} else {})
[PROOF STEP]
have "\<And>C'. \<lbrakk>x \<in> C'; path_connectedin (discrete_topology U) C'\<rbrakk> \<Longrightarrow> C' \<subseteq> {x}"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<And>C'. \<lbrakk>x \<in> C'; path_connectedin (discrete_topology U) C'\<rbrakk> \<Longrightarrow> C' \<subseteq> {x}
[PROOF STEP]
by (metis path_connectedin_discrete_topology subsetD singletonD)
[PROOF STATE]
proof (state)
this:
\<lbrakk>x \<in> ?C'; path_connectedin (discrete_topology U) ?C'\<rbrakk> \<Longrightarrow> ?C' \<subseteq> {x}

goal (1 subgoal):
 1. path_component_of_set (discrete_topology U) x = (if x \<in> U then {x} else {})
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
\<lbrakk>x \<in> ?C'; path_connectedin (discrete_topology U) ?C'\<rbrakk> \<Longrightarrow> ?C' \<subseteq> {x}
[PROOF STEP]
have "x \<in> U \<Longrightarrow> Collect (path_component_of (discrete_topology U) x) = {x}"
[PROOF STATE]
proof (prove)
using this:
\<lbrakk>x \<in> ?C'; path_connectedin (discrete_topology U) ?C'\<rbrakk> \<Longrightarrow> ?C' \<subseteq> {x}

goal (1 subgoal):
 1. x \<in> U \<Longrightarrow> path_component_of_set (discrete_topology U) x = {x}
[PROOF STEP]
by (simp add: path_component_of_unique)
[PROOF STATE]
proof (state)
this:
x \<in> U \<Longrightarrow> path_component_of_set (discrete_topology U) x = {x}

goal (1 subgoal):
 1. path_component_of_set (discrete_topology U) x = (if x \<in> U then {x} else {})
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
x \<in> U \<Longrightarrow> path_component_of_set (discrete_topology U) x = {x}
[PROOF STEP]
show ?thesis
[PROOF STATE]
proof (prove)
using this:
x \<in> U \<Longrightarrow> path_component_of_set (discrete_topology U) x = {x}

goal (1 subgoal):
 1. path_component_of_set (discrete_topology U) x = (if x \<in> U then {x} else {})
[PROOF STEP]
using path_component_in_topspace
[PROOF STATE]
proof (prove)
using this:
x \<in> U \<Longrightarrow> path_component_of_set (discrete_topology U) x = {x}
path_component_of ?X ?x ?y \<Longrightarrow> ?x \<in> topspace ?X \<and> ?y \<in> topspace ?X

goal (1 subgoal):
 1. path_component_of_set (discrete_topology U) x = (if x \<in> U then {x} else {})
[PROOF STEP]
by fastforce
[PROOF STATE]
proof (state)
this:
path_component_of_set (discrete_topology U) x = (if x \<in> U then {x} else {})

goal:
No subgoals!
[PROOF STEP]
qed


[STATEMENT]
lemma card_setsum_partition:
  assumes "finite A" "finite B" "f \<in> A \<rightarrow>\<^sub>E B"
  shows "sum card ((\<lambda>b. {x \<in> A. f x = b}) ` B - {{}}) = card A"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. sum card ((\<lambda>b. {x \<in> A. f x = b}) ` B - {{}}) = card A
[PROOF STEP]
proof -
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. sum card ((\<lambda>b. {x \<in> A. f x = b}) ` B - {{}}) = card A
[PROOF STEP]
have "finite ((\<lambda>b. {x \<in> A. f x = b}) ` B - {{}})"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. finite ((\<lambda>b. {x \<in> A. f x = b}) ` B - {{}})
[PROOF STEP]
using \<open>finite B\<close>
[PROOF STATE]
proof (prove)
using this:
finite B

goal (1 subgoal):
 1. finite ((\<lambda>b. {x \<in> A. f x = b}) ` B - {{}})
[PROOF STEP]
by blast
[PROOF STATE]
proof (state)
this:
finite ((\<lambda>b. {x \<in> A. f x = b}) ` B - {{}})

goal (1 subgoal):
 1. sum card ((\<lambda>b. {x \<in> A. f x = b}) ` B - {{}}) = card A
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
finite ((\<lambda>b. {x \<in> A. f x = b}) ` B - {{}})

goal (1 subgoal):
 1. sum card ((\<lambda>b. {x \<in> A. f x = b}) ` B - {{}}) = card A
[PROOF STEP]
have "\<forall>X\<in>(\<lambda>b. {x \<in> A. f x = b}) ` B - {{}}. finite X"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<forall>X\<in>(\<lambda>b. {x \<in> A. f x = b}) ` B - {{}}. finite X
[PROOF STEP]
using \<open>finite A\<close>
[PROOF STATE]
proof (prove)
using this:
finite A

goal (1 subgoal):
 1. \<forall>X\<in>(\<lambda>b. {x \<in> A. f x = b}) ` B - {{}}. finite X
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
\<forall>X\<in>(\<lambda>b. {x \<in> A. f x = b}) ` B - {{}}. finite X

goal (1 subgoal):
 1. sum card ((\<lambda>b. {x \<in> A. f x = b}) ` B - {{}}) = card A
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
\<forall>X\<in>(\<lambda>b. {x \<in> A. f x = b}) ` B - {{}}. finite X

goal (1 subgoal):
 1. sum card ((\<lambda>b. {x \<in> A. f x = b}) ` B - {{}}) = card A
[PROOF STEP]
have "\<Union>((\<lambda>b. {x \<in> A. f x = b}) ` B - {{}}) = A"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<Union> ((\<lambda>b. {x \<in> A. f x = b}) ` B - {{}}) = A
[PROOF STEP]
using \<open>f \<in> A \<rightarrow>\<^sub>E B\<close>
[PROOF STATE]
proof (prove)
using this:
f \<in> A \<rightarrow>\<^sub>E B

goal (1 subgoal):
 1. \<Union> ((\<lambda>b. {x \<in> A. f x = b}) ` B - {{}}) = A
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
\<Union> ((\<lambda>b. {x \<in> A. f x = b}) ` B - {{}}) = A

goal (1 subgoal):
 1. sum card ((\<lambda>b. {x \<in> A. f x = b}) ` B - {{}}) = card A
[PROOF STEP]
ultimately
[PROOF STATE]
proof (chain)
picking this:
finite ((\<lambda>b. {x \<in> A. f x = b}) ` B - {{}})
\<forall>X\<in>(\<lambda>b. {x \<in> A. f x = b}) ` B - {{}}. finite X
\<Union> ((\<lambda>b. {x \<in> A. f x = b}) ` B - {{}}) = A
[PROOF STEP]
show ?thesis
[PROOF STATE]
proof (prove)
using this:
finite ((\<lambda>b. {x \<in> A. f x = b}) ` B - {{}})
\<forall>X\<in>(\<lambda>b. {x \<in> A. f x = b}) ` B - {{}}. finite X
\<Union> ((\<lambda>b. {x \<in> A. f x = b}) ` B - {{}}) = A

goal (1 subgoal):
 1. sum card ((\<lambda>b. {x \<in> A. f x = b}) ` B - {{}}) = card A
[PROOF STEP]
by (subst card_Union_disjoint[symmetric]) (auto simp: pairwise_def disjnt_def)
[PROOF STATE]
proof (state)
this:
sum card ((\<lambda>b. {x \<in> A. f x = b}) ` B - {{}}) = card A

goal:
No subgoals!
[PROOF STEP]
qed


[STATEMENT]
lemma open_times_image:
  fixes S::"'a::real_normed_field set"
  assumes "open S" "c\<noteq>0"
  shows "open (((*) c) ` S)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. open ((*) c ` S)
[PROOF STEP]
proof -
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. open ((*) c ` S)
[PROOF STEP]
let ?f = "\<lambda>x. x/c" and ?g="((*) c)"
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. open ((*) c ` S)
[PROOF STEP]
have "continuous_on UNIV ?f"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. continuous_on UNIV (\<lambda>x. x / c)
[PROOF STEP]
using \<open>c\<noteq>0\<close>
[PROOF STATE]
proof (prove)
using this:
c \<noteq> (0::'a)

goal (1 subgoal):
 1. continuous_on UNIV (\<lambda>x. x / c)
[PROOF STEP]
by (auto intro:continuous_intros)
[PROOF STATE]
proof (state)
this:
continuous_on UNIV (\<lambda>x. x / c)

goal (1 subgoal):
 1. open ((*) c ` S)
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
continuous_on UNIV (\<lambda>x. x / c)
[PROOF STEP]
have "open (?f -` S)"
[PROOF STATE]
proof (prove)
using this:
continuous_on UNIV (\<lambda>x. x / c)

goal (1 subgoal):
 1. open ((\<lambda>x. x / c) -` S)
[PROOF STEP]
using \<open>open S\<close>
[PROOF STATE]
proof (prove)
using this:
continuous_on UNIV (\<lambda>x. x / c)
open S

goal (1 subgoal):
 1. open ((\<lambda>x. x / c) -` S)
[PROOF STEP]
by (auto elim:open_vimage)
[PROOF STATE]
proof (state)
this:
open ((\<lambda>x. x / c) -` S)

goal (1 subgoal):
 1. open ((*) c ` S)
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
open ((\<lambda>x. x / c) -` S)

goal (1 subgoal):
 1. open ((*) c ` S)
[PROOF STEP]
have "?g ` S = ?f -` S"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (*) c ` S = (\<lambda>x. x / c) -` S
[PROOF STEP]
using \<open>c\<noteq>0\<close>
[PROOF STATE]
proof (prove)
using this:
c \<noteq> (0::'a)

goal (1 subgoal):
 1. (*) c ` S = (\<lambda>x. x / c) -` S
[PROOF STEP]
apply auto
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<And>x. \<lbrakk>c \<noteq> (0::'a); x / c \<in> S\<rbrakk> \<Longrightarrow> x \<in> (*) c ` S
[PROOF STEP]
using image_iff
[PROOF STATE]
proof (prove)
using this:
(?z \<in> ?f ` ?A) = (\<exists>x\<in>?A. ?z = ?f x)

goal (1 subgoal):
 1. \<And>x. \<lbrakk>c \<noteq> (0::'a); x / c \<in> S\<rbrakk> \<Longrightarrow> x \<in> (*) c ` S
[PROOF STEP]
by fastforce
[PROOF STATE]
proof (state)
this:
(*) c ` S = (\<lambda>x. x / c) -` S

goal (1 subgoal):
 1. open ((*) c ` S)
[PROOF STEP]
ultimately
[PROOF STATE]
proof (chain)
picking this:
open ((\<lambda>x. x / c) -` S)
(*) c ` S = (\<lambda>x. x / c) -` S
[PROOF STEP]
show ?thesis
[PROOF STATE]
proof (prove)
using this:
open ((\<lambda>x. x / c) -` S)
(*) c ` S = (\<lambda>x. x / c) -` S

goal (1 subgoal):
 1. open ((*) c ` S)
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
open ((*) c ` S)

goal:
No subgoals!
[PROOF STEP]
qed


[STATEMENT]
lemma diagonal_mat_times_diag:
  assumes "A\<in> carrier_mat n n"
  and "B\<in> carrier_mat n n"
  and "diagonal_mat A"
and "diagonal_mat B"
shows "diagonal_mat (A*B)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. diagonal_mat (A * B)
[PROOF STEP]
unfolding diagonal_mat_def
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<forall>i<dim_row (A * B). \<forall>j<dim_col (A * B). i \<noteq> j \<longrightarrow> (A * B) $$ (i, j) = (0::'a)
[PROOF STEP]
proof (intro allI impI)
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. \<And>i j. \<lbrakk>i < dim_row (A * B); j < dim_col (A * B); i \<noteq> j\<rbrakk> \<Longrightarrow> (A * B) $$ (i, j) = (0::'a)
[PROOF STEP]
fix i j
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. \<And>i j. \<lbrakk>i < dim_row (A * B); j < dim_col (A * B); i \<noteq> j\<rbrakk> \<Longrightarrow> (A * B) $$ (i, j) = (0::'a)
[PROOF STEP]
assume "i < dim_row (A * B)" and "j < dim_col (A * B)" and "i \<noteq> j"
[PROOF STATE]
proof (state)
this:
i < dim_row (A * B)
j < dim_col (A * B)
i \<noteq> j

goal (1 subgoal):
 1. \<And>i j. \<lbrakk>i < dim_row (A * B); j < dim_col (A * B); i \<noteq> j\<rbrakk> \<Longrightarrow> (A * B) $$ (i, j) = (0::'a)
[PROOF STEP]
thus "(A * B) $$ (i, j) = 0"
[PROOF STATE]
proof (prove)
using this:
i < dim_row (A * B)
j < dim_col (A * B)
i \<noteq> j

goal (1 subgoal):
 1. (A * B) $$ (i, j) = (0::'a)
[PROOF STEP]
using assms diag_mat_mult_diag_mat[of A n B]
[PROOF STATE]
proof (prove)
using this:
i < dim_row (A * B)
j < dim_col (A * B)
i \<noteq> j
A \<in> carrier_mat n n
B \<in> carrier_mat n n
diagonal_mat A
diagonal_mat B
\<lbrakk>A \<in> carrier_mat n n; B \<in> carrier_mat n n; diagonal_mat A; diagonal_mat B\<rbrakk> \<Longrightarrow> A * B = Matrix.mat n n (\<lambda>(i, j). if i = j then A $$ (i, i) * B $$ (i, i) else (0::'a))

goal (1 subgoal):
 1. (A * B) $$ (i, j) = (0::'a)
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
(A * B) $$ (i, j) = (0::'a)

goal:
No subgoals!
[PROOF STEP]
qed


[STATEMENT]
lemma aprimedivisor_of_prime [simp]:
  assumes "prime p"
  shows   "aprimedivisor p = p"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. aprimedivisor p = p
[PROOF STEP]
proof -
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. aprimedivisor p = p
[PROOF STEP]
from assms
[PROOF STATE]
proof (chain)
picking this:
prime p
[PROOF STEP]
have "\<exists>q. prime q \<and> q dvd p"
[PROOF STATE]
proof (prove)
using this:
prime p

goal (1 subgoal):
 1. \<exists>q. prime q \<and> q dvd p
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
\<exists>q. prime q \<and> q dvd p

goal (1 subgoal):
 1. aprimedivisor p = p
[PROOF STEP]
from someI_ex[OF this, folded aprimedivisor_def] assms
[PROOF STATE]
proof (chain)
picking this:
prime (aprimedivisor p) \<and> aprimedivisor p dvd p
prime p
[PROOF STEP]
show ?thesis
[PROOF STATE]
proof (prove)
using this:
prime (aprimedivisor p) \<and> aprimedivisor p dvd p
prime p

goal (1 subgoal):
 1. aprimedivisor p = p
[PROOF STEP]
by (auto intro: primes_dvd_imp_eq)
[PROOF STATE]
proof (state)
this:
aprimedivisor p = p

goal:
No subgoals!
[PROOF STEP]
qed


[STATEMENT]
lemma sin_lt_zero: "pi < x \<Longrightarrow> x < 2 * pi \<Longrightarrow> sin x < 0"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<lbrakk>pi < x; x < 2 * pi\<rbrakk> \<Longrightarrow> sin x < 0
[PROOF STEP]
using sin_gt_zero [of "x - pi"]
[PROOF STATE]
proof (prove)
using this:
\<lbrakk>0 < x - pi; x - pi < pi\<rbrakk> \<Longrightarrow> 0 < sin (x - pi)

goal (1 subgoal):
 1. \<lbrakk>pi < x; x < 2 * pi\<rbrakk> \<Longrightarrow> sin x < 0
[PROOF STEP]
by (simp add: sin_diff)


[STATEMENT]
lemma split_time_nempty_Suc:
  assumes "0 < n"
  shows   "split_time s (Suc n) ((Suc n) * t) = split_time s n (n * t)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. split_time s (Suc n) (Suc n * t) = split_time s n (n * t)
[PROOF STEP]
proof -
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. split_time s (Suc n) (Suc n * t) = split_time s n (n * t)
[PROOF STEP]
have "0 < Suc n"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. 0 < Suc n
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
0 < Suc n

goal (1 subgoal):
 1. split_time s (Suc n) (Suc n * t) = split_time s n (n * t)
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
0 < Suc n
[PROOF STEP]
have sg1:"split_time s (Suc n) ((Suc n) * t) =  s t"
[PROOF STATE]
proof (prove)
using this:
0 < Suc n

goal (1 subgoal):
 1. split_time s (Suc n) (Suc n * t) = s t
[PROOF STEP]
by (rule split_time_nempty)
[PROOF STATE]
proof (state)
this:
split_time s (Suc n) (Suc n * t) = s t

goal (1 subgoal):
 1. split_time s (Suc n) (Suc n * t) = split_time s n (n * t)
[PROOF STEP]
from assms
[PROOF STATE]
proof (chain)
picking this:
0 < n
[PROOF STEP]
have sg2:"split_time s n (n * t) = s t"
[PROOF STATE]
proof (prove)
using this:
0 < n

goal (1 subgoal):
 1. split_time s n (n * t) = s t
[PROOF STEP]
by (rule split_time_nempty)
[PROOF STATE]
proof (state)
this:
split_time s n (n * t) = s t

goal (1 subgoal):
 1. split_time s (Suc n) (Suc n * t) = split_time s n (n * t)
[PROOF STEP]
from sg1 and sg2
[PROOF STATE]
proof (chain)
picking this:
split_time s (Suc n) (Suc n * t) = s t
split_time s n (n * t) = s t
[PROOF STEP]
show ?thesis
[PROOF STATE]
proof (prove)
using this:
split_time s (Suc n) (Suc n * t) = s t
split_time s n (n * t) = s t

goal (1 subgoal):
 1. split_time s (Suc n) (Suc n * t) = split_time s n (n * t)
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
split_time s (Suc n) (Suc n * t) = split_time s n (n * t)

goal:
No subgoals!
[PROOF STEP]
qed


[STATEMENT]
lemma bw_diff_id_pow:
  "(bw_diff ^^ k) (\<lambda>x. x) = (if k = 0 then (\<lambda>x. x) else if k = 1 then (\<lambda>_. 1) else (\<lambda>_. 0))"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (bw_diff ^^ k) (\<lambda>x. x) = (if k = 0 then \<lambda>x. x else if k = 1 then \<lambda>_. 1::'a else (\<lambda>_. 0::'a))
[PROOF STEP]
by (induct k, simp_all)


[STATEMENT]
lemma floor_log2_div2: fixes n :: nat assumes "n \<ge> 2"
shows "floor(log 2 n) = floor(log 2 (n div 2)) + 1"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<lfloor>log 2 (real n)\<rfloor> = \<lfloor>log 2 (real (n div 2))\<rfloor> + 1
[PROOF STEP]
proof cases
[PROOF STATE]
proof (state)
goal (2 subgoals):
 1. ?P \<Longrightarrow> \<lfloor>log 2 (real n)\<rfloor> = \<lfloor>log 2 (real (n div 2))\<rfloor> + 1
 2. \<not> ?P \<Longrightarrow> \<lfloor>log 2 (real n)\<rfloor> = \<lfloor>log 2 (real (n div 2))\<rfloor> + 1
[PROOF STEP]
assume "n=2"
[PROOF STATE]
proof (state)
this:
n = 2

goal (2 subgoals):
 1. ?P \<Longrightarrow> \<lfloor>log 2 (real n)\<rfloor> = \<lfloor>log 2 (real (n div 2))\<rfloor> + 1
 2. \<not> ?P \<Longrightarrow> \<lfloor>log 2 (real n)\<rfloor> = \<lfloor>log 2 (real (n div 2))\<rfloor> + 1
[PROOF STEP]
thus ?thesis
[PROOF STATE]
proof (prove)
using this:
n = 2

goal (1 subgoal):
 1. \<lfloor>log 2 (real n)\<rfloor> = \<lfloor>log 2 (real (n div 2))\<rfloor> + 1
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
\<lfloor>log 2 (real n)\<rfloor> = \<lfloor>log 2 (real (n div 2))\<rfloor> + 1

goal (1 subgoal):
 1. n \<noteq> 2 \<Longrightarrow> \<lfloor>log 2 (real n)\<rfloor> = \<lfloor>log 2 (real (n div 2))\<rfloor> + 1
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. n \<noteq> 2 \<Longrightarrow> \<lfloor>log 2 (real n)\<rfloor> = \<lfloor>log 2 (real (n div 2))\<rfloor> + 1
[PROOF STEP]
let ?m = "n div 2"
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. n \<noteq> 2 \<Longrightarrow> \<lfloor>log 2 (real n)\<rfloor> = \<lfloor>log 2 (real (n div 2))\<rfloor> + 1
[PROOF STEP]
assume "n\<noteq>2"
[PROOF STATE]
proof (state)
this:
n \<noteq> 2

goal (1 subgoal):
 1. n \<noteq> 2 \<Longrightarrow> \<lfloor>log 2 (real n)\<rfloor> = \<lfloor>log 2 (real (n div 2))\<rfloor> + 1
[PROOF STEP]
hence "1 \<le> ?m"
[PROOF STATE]
proof (prove)
using this:
n \<noteq> 2

goal (1 subgoal):
 1. 1 \<le> n div 2
[PROOF STEP]
using assms
[PROOF STATE]
proof (prove)
using this:
n \<noteq> 2
2 \<le> n

goal (1 subgoal):
 1. 1 \<le> n div 2
[PROOF STEP]
by arith
[PROOF STATE]
proof (state)
this:
1 \<le> n div 2

goal (1 subgoal):
 1. n \<noteq> 2 \<Longrightarrow> \<lfloor>log 2 (real n)\<rfloor> = \<lfloor>log 2 (real (n div 2))\<rfloor> + 1
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
1 \<le> n div 2
[PROOF STEP]
obtain i where i: "2 ^ i \<le> ?m" "?m < 2 ^ (i + 1)"
[PROOF STATE]
proof (prove)
using this:
1 \<le> n div 2

goal (1 subgoal):
 1. (\<And>i. \<lbrakk>2 ^ i \<le> n div 2; n div 2 < 2 ^ (i + 1)\<rbrakk> \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
using ex_power_ivl1[of 2 ?m]
[PROOF STATE]
proof (prove)
using this:
1 \<le> n div 2
\<lbrakk>2 \<le> 2; 1 \<le> n div 2\<rbrakk> \<Longrightarrow> \<exists>na. 2 ^ na \<le> n div 2 \<and> n div 2 < 2 ^ (na + 1)

goal (1 subgoal):
 1. (\<And>i. \<lbrakk>2 ^ i \<le> n div 2; n div 2 < 2 ^ (i + 1)\<rbrakk> \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
2 ^ i \<le> n div 2
n div 2 < 2 ^ (i + 1)

goal (1 subgoal):
 1. n \<noteq> 2 \<Longrightarrow> \<lfloor>log 2 (real n)\<rfloor> = \<lfloor>log 2 (real (n div 2))\<rfloor> + 1
[PROOF STEP]
have "2^(i+1) \<le> 2*?m"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. 2 ^ (i + 1) \<le> 2 * (n div 2)
[PROOF STEP]
using i(1)
[PROOF STATE]
proof (prove)
using this:
2 ^ i \<le> n div 2

goal (1 subgoal):
 1. 2 ^ (i + 1) \<le> 2 * (n div 2)
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
2 ^ (i + 1) \<le> 2 * (n div 2)

goal (1 subgoal):
 1. n \<noteq> 2 \<Longrightarrow> \<lfloor>log 2 (real n)\<rfloor> = \<lfloor>log 2 (real (n div 2))\<rfloor> + 1
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
2 ^ (i + 1) \<le> 2 * (n div 2)

goal (1 subgoal):
 1. n \<noteq> 2 \<Longrightarrow> \<lfloor>log 2 (real n)\<rfloor> = \<lfloor>log 2 (real (n div 2))\<rfloor> + 1
[PROOF STEP]
have "2*?m \<le> n"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. 2 * (n div 2) \<le> n
[PROOF STEP]
by arith
[PROOF STATE]
proof (state)
this:
2 * (n div 2) \<le> n

goal (1 subgoal):
 1. n \<noteq> 2 \<Longrightarrow> \<lfloor>log 2 (real n)\<rfloor> = \<lfloor>log 2 (real (n div 2))\<rfloor> + 1
[PROOF STEP]
finally
[PROOF STATE]
proof (chain)
picking this:
2 ^ (i + 1) \<le> n
[PROOF STEP]
have *: "2^(i+1) \<le> \<dots>"
[PROOF STATE]
proof (prove)
using this:
2 ^ (i + 1) \<le> n

goal (1 subgoal):
 1. 2 ^ (i + 1) \<le> n
[PROOF STEP]
.
[PROOF STATE]
proof (state)
this:
2 ^ (i + 1) \<le> n

goal (1 subgoal):
 1. n \<noteq> 2 \<Longrightarrow> \<lfloor>log 2 (real n)\<rfloor> = \<lfloor>log 2 (real (n div 2))\<rfloor> + 1
[PROOF STEP]
have "n < 2^(i+1+1)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. n < 2 ^ (i + 1 + 1)
[PROOF STEP]
using i(2)
[PROOF STATE]
proof (prove)
using this:
n div 2 < 2 ^ (i + 1)

goal (1 subgoal):
 1. n < 2 ^ (i + 1 + 1)
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
n < 2 ^ (i + 1 + 1)

goal (1 subgoal):
 1. n \<noteq> 2 \<Longrightarrow> \<lfloor>log 2 (real n)\<rfloor> = \<lfloor>log 2 (real (n div 2))\<rfloor> + 1
[PROOF STEP]
from floor_log_nat_eq_if[OF * this] floor_log_nat_eq_if[OF i]
[PROOF STATE]
proof (chain)
picking this:
2 \<le> 2 \<Longrightarrow> \<lfloor>log (real 2) (real n)\<rfloor> = int (i + 1)
2 \<le> 2 \<Longrightarrow> \<lfloor>log (real 2) (real (n div 2))\<rfloor> = int i
[PROOF STEP]
show ?thesis
[PROOF STATE]
proof (prove)
using this:
2 \<le> 2 \<Longrightarrow> \<lfloor>log (real 2) (real n)\<rfloor> = int (i + 1)
2 \<le> 2 \<Longrightarrow> \<lfloor>log (real 2) (real (n div 2))\<rfloor> = int i

goal (1 subgoal):
 1. \<lfloor>log 2 (real n)\<rfloor> = \<lfloor>log 2 (real (n div 2))\<rfloor> + 1
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
\<lfloor>log 2 (real n)\<rfloor> = \<lfloor>log 2 (real (n div 2))\<rfloor> + 1

goal:
No subgoals!
[PROOF STEP]
qed


[STATEMENT]
lemma pv:
  assumes "vector v"
    shows "(prim_P w v e)\<^sup>T * v = bot"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. prim_P w v e\<^sup>T * v = bot
[PROOF STEP]
proof -
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. prim_P w v e\<^sup>T * v = bot
[PROOF STEP]
have "(prim_P w v e)\<^sup>T * v \<le> (-v * -v\<^sup>T)\<^sup>T * v"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. prim_P w v e\<^sup>T * v \<le> (- v * - v\<^sup>T)\<^sup>T * v
[PROOF STEP]
by (meson conv_isotone inf_le1 inf_le2 mult_left_isotone order_trans)
[PROOF STATE]
proof (state)
this:
prim_P w v e\<^sup>T * v \<le> (- v * - v\<^sup>T)\<^sup>T * v

goal (1 subgoal):
 1. prim_P w v e\<^sup>T * v = bot
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
prim_P w v e\<^sup>T * v \<le> (- v * - v\<^sup>T)\<^sup>T * v

goal (1 subgoal):
 1. prim_P w v e\<^sup>T * v = bot
[PROOF STEP]
have "... = -v * -v\<^sup>T * v"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (- v * - v\<^sup>T)\<^sup>T * v = - v * - v\<^sup>T * v
[PROOF STEP]
by (simp add: conv_complement conv_dist_comp)
[PROOF STATE]
proof (state)
this:
(- v * - v\<^sup>T)\<^sup>T * v = - v * - v\<^sup>T * v

goal (1 subgoal):
 1. prim_P w v e\<^sup>T * v = bot
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
(- v * - v\<^sup>T)\<^sup>T * v = - v * - v\<^sup>T * v

goal (1 subgoal):
 1. prim_P w v e\<^sup>T * v = bot
[PROOF STEP]
have "... = bot"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. - v * - v\<^sup>T * v = bot
[PROOF STEP]
by (simp add: assms covector_vector_comp mult_assoc)
[PROOF STATE]
proof (state)
this:
- v * - v\<^sup>T * v = bot

goal (1 subgoal):
 1. prim_P w v e\<^sup>T * v = bot
[PROOF STEP]
finally
[PROOF STATE]
proof (chain)
picking this:
prim_P w v e\<^sup>T * v \<le> bot
[PROOF STEP]
show ?thesis
[PROOF STATE]
proof (prove)
using this:
prim_P w v e\<^sup>T * v \<le> bot

goal (1 subgoal):
 1. prim_P w v e\<^sup>T * v = bot
[PROOF STEP]
by (simp add: order.antisym)
[PROOF STATE]
proof (state)
this:
prim_P w v e\<^sup>T * v = bot

goal:
No subgoals!
[PROOF STEP]
qed


[STATEMENT]
lemma diag_mat_vec_nth_simps[simp]:
  "i = j \<Longrightarrow> diag_mat f $ i $ j = f i"
  "i \<noteq> j \<Longrightarrow> diag_mat f $ i $ j = 0"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (i = j \<Longrightarrow> diag_mat f $ i $ j = f i) &&& (i \<noteq> j \<Longrightarrow> diag_mat f $ i $ j = (0::'b))
[PROOF STEP]
unfolding diag_mat_def
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (i = j \<Longrightarrow> (\<chi>i j. if i = j then f i else (0::'b)) $ i $ j = f i) &&& (i \<noteq> j \<Longrightarrow> (\<chi>i j. if i = j then f i else (0::'b)) $ i $ j = (0::'b))
[PROOF STEP]
by simp_all


[STATEMENT]
lemma finite_verts_edges :
  assumes "uwellformed G" and "finite (uverts G)"
  shows "finite (uedges G)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. finite (uedges G)
[PROOF STEP]
proof -
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. finite (uedges G)
[PROOF STEP]
have sub_pow: "uwellformed G \<Longrightarrow> uedges G \<subseteq> {S. S \<subseteq> uverts G}"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. uwellformed G \<Longrightarrow> uedges G \<subseteq> {S. S \<subseteq> uverts G}
[PROOF STEP]
by (cases G, auto simp add: uwellformed_def)
[PROOF STATE]
proof (state)
this:
uwellformed G \<Longrightarrow> uedges G \<subseteq> {S. S \<subseteq> uverts G}

goal (1 subgoal):
 1. finite (uedges G)
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
uwellformed G \<Longrightarrow> uedges G \<subseteq> {S. S \<subseteq> uverts G}
[PROOF STEP]
have "finite {S. S \<subseteq> uverts G}"
[PROOF STATE]
proof (prove)
using this:
uwellformed G \<Longrightarrow> uedges G \<subseteq> {S. S \<subseteq> uverts G}

goal (1 subgoal):
 1. finite {S. S \<subseteq> uverts G}
[PROOF STEP]
using assms
[PROOF STATE]
proof (prove)
using this:
uwellformed G \<Longrightarrow> uedges G \<subseteq> {S. S \<subseteq> uverts G}
uwellformed G
finite (uverts G)

goal (1 subgoal):
 1. finite {S. S \<subseteq> uverts G}
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
finite {S. S \<subseteq> uverts G}

goal (1 subgoal):
 1. finite (uedges G)
[PROOF STEP]
with sub_pow assms
[PROOF STATE]
proof (chain)
picking this:
uwellformed G \<Longrightarrow> uedges G \<subseteq> {S. S \<subseteq> uverts G}
uwellformed G
finite (uverts G)
finite {S. S \<subseteq> uverts G}
[PROOF STEP]
show "finite (uedges G)"
[PROOF STATE]
proof (prove)
using this:
uwellformed G \<Longrightarrow> uedges G \<subseteq> {S. S \<subseteq> uverts G}
uwellformed G
finite (uverts G)
finite {S. S \<subseteq> uverts G}

goal (1 subgoal):
 1. finite (uedges G)
[PROOF STEP]
using finite_subset
[PROOF STATE]
proof (prove)
using this:
uwellformed G \<Longrightarrow> uedges G \<subseteq> {S. S \<subseteq> uverts G}
uwellformed G
finite (uverts G)
finite {S. S \<subseteq> uverts G}
\<lbrakk>?A \<subseteq> ?B; finite ?B\<rbrakk> \<Longrightarrow> finite ?A

goal (1 subgoal):
 1. finite (uedges G)
[PROOF STEP]
by blast
[PROOF STATE]
proof (state)
this:
finite (uedges G)

goal:
No subgoals!
[PROOF STEP]
qed


[STATEMENT]
lemma nfv_Ands[simp]: "nfv (Ands l) = Max (insert 0 (nfv ` set l))"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. nfv (Ands l) = Max (insert 0 (nfv ` set l))
[PROOF STEP]
proof (induction l)
[PROOF STATE]
proof (state)
goal (2 subgoals):
 1. nfv (Ands []) = Max (insert 0 (nfv ` set []))
 2. \<And>a l. nfv (Ands l) = Max (insert 0 (nfv ` set l)) \<Longrightarrow> nfv (Ands (a # l)) = Max (insert 0 (nfv ` set (a # l)))
[PROOF STEP]
case Nil
[PROOF STATE]
proof (state)
this:

goal (2 subgoals):
 1. nfv (Ands []) = Max (insert 0 (nfv ` set []))
 2. \<And>a l. nfv (Ands l) = Max (insert 0 (nfv ` set l)) \<Longrightarrow> nfv (Ands (a # l)) = Max (insert 0 (nfv ` set (a # l)))
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
[PROOF STEP]
show ?case
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. nfv (Ands []) = Max (insert 0 (nfv ` set []))
[PROOF STEP]
unfolding nfv_def
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. Max (insert 0 (Suc ` fv (Ands []))) = Max (insert 0 ((\<lambda>a. Max (insert 0 (Suc ` fv a))) ` set []))
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
nfv (Ands []) = Max (insert 0 (nfv ` set []))

goal (1 subgoal):
 1. \<And>a l. nfv (Ands l) = Max (insert 0 (nfv ` set l)) \<Longrightarrow> nfv (Ands (a # l)) = Max (insert 0 (nfv ` set (a # l)))
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. \<And>a l. nfv (Ands l) = Max (insert 0 (nfv ` set l)) \<Longrightarrow> nfv (Ands (a # l)) = Max (insert 0 (nfv ` set (a # l)))
[PROOF STEP]
case (Cons a l)
[PROOF STATE]
proof (state)
this:
nfv (Ands l) = Max (insert 0 (nfv ` set l))

goal (1 subgoal):
 1. \<And>a l. nfv (Ands l) = Max (insert 0 (nfv ` set l)) \<Longrightarrow> nfv (Ands (a # l)) = Max (insert 0 (nfv ` set (a # l)))
[PROOF STEP]
have "fv (Ands (a # l)) = fv a \<union> fv (Ands l)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. fv (Ands (a # l)) = fv a \<union> fv (Ands l)
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
fv (Ands (a # l)) = fv a \<union> fv (Ands l)

goal (1 subgoal):
 1. \<And>a l. nfv (Ands l) = Max (insert 0 (nfv ` set l)) \<Longrightarrow> nfv (Ands (a # l)) = Max (insert 0 (nfv ` set (a # l)))
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
fv (Ands (a # l)) = fv a \<union> fv (Ands l)
[PROOF STEP]
have "nfv (Ands (a # l)) = max (nfv a) (nfv (Ands l))"
[PROOF STATE]
proof (prove)
using this:
fv (Ands (a # l)) = fv a \<union> fv (Ands l)

goal (1 subgoal):
 1. nfv (Ands (a # l)) = max (nfv a) (nfv (Ands l))
[PROOF STEP]
unfolding nfv_def
[PROOF STATE]
proof (prove)
using this:
fv (Ands (a # l)) = fv a \<union> fv (Ands l)

goal (1 subgoal):
 1. Max (insert 0 (Suc ` fv (Ands (a # l)))) = max (Max (insert 0 (Suc ` fv a))) (Max (insert 0 (Suc ` fv (Ands l))))
[PROOF STEP]
by (auto simp: image_Un Max.union[symmetric])
[PROOF STATE]
proof (state)
this:
nfv (Ands (a # l)) = max (nfv a) (nfv (Ands l))

goal (1 subgoal):
 1. \<And>a l. nfv (Ands l) = Max (insert 0 (nfv ` set l)) \<Longrightarrow> nfv (Ands (a # l)) = Max (insert 0 (nfv ` set (a # l)))
[PROOF STEP]
with Cons.IH
[PROOF STATE]
proof (chain)
picking this:
nfv (Ands l) = Max (insert 0 (nfv ` set l))
nfv (Ands (a # l)) = max (nfv a) (nfv (Ands l))
[PROOF STEP]
show ?case
[PROOF STATE]
proof (prove)
using this:
nfv (Ands l) = Max (insert 0 (nfv ` set l))
nfv (Ands (a # l)) = max (nfv a) (nfv (Ands l))

goal (1 subgoal):
 1. nfv (Ands (a # l)) = Max (insert 0 (nfv ` set (a # l)))
[PROOF STEP]
by (cases l) auto
[PROOF STATE]
proof (state)
this:
nfv (Ands (a # l)) = Max (insert 0 (nfv ` set (a # l)))

goal:
No subgoals!
[PROOF STEP]
qed