[STATEMENT]
lemma Hausdorff_space_product_topology:
   "Hausdorff_space (product_topology X I) \<longleftrightarrow> (\<Pi>\<^sub>E i\<in>I. topspace(X i)) = {} \<or> (\<forall>i \<in> I. Hausdorff_space (X i))"
  (is "?lhs = ?rhs")
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. Hausdorff_space (product_topology X I) = ((\<Pi>\<^sub>E i\<in>I. topspace (X i)) = {} \<or> (\<forall>i\<in>I. Hausdorff_space (X i)))
[PROOF STEP]
proof
[PROOF STATE]
proof (state)
goal (2 subgoals):
 1. Hausdorff_space (product_topology X I) \<Longrightarrow> (\<Pi>\<^sub>E i\<in>I. topspace (X i)) = {} \<or> (\<forall>i\<in>I. Hausdorff_space (X i))
 2. (\<Pi>\<^sub>E i\<in>I. topspace (X i)) = {} \<or> (\<forall>i\<in>I. Hausdorff_space (X i)) \<Longrightarrow> Hausdorff_space (product_topology X I)
[PROOF STEP]
assume ?lhs
[PROOF STATE]
proof (state)
this:
Hausdorff_space (product_topology X I)

goal (2 subgoals):
 1. Hausdorff_space (product_topology X I) \<Longrightarrow> (\<Pi>\<^sub>E i\<in>I. topspace (X i)) = {} \<or> (\<forall>i\<in>I. Hausdorff_space (X i))
 2. (\<Pi>\<^sub>E i\<in>I. topspace (X i)) = {} \<or> (\<forall>i\<in>I. Hausdorff_space (X i)) \<Longrightarrow> Hausdorff_space (product_topology X I)
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
Hausdorff_space (product_topology X I)
[PROOF STEP]
show ?rhs
[PROOF STATE]
proof (prove)
using this:
Hausdorff_space (product_topology X I)

goal (1 subgoal):
 1. (\<Pi>\<^sub>E i\<in>I. topspace (X i)) = {} \<or> (\<forall>i\<in>I. Hausdorff_space (X i))
[PROOF STEP]
apply (rule topological_property_of_product_component)
[PROOF STATE]
proof (prove)
goal (2 subgoals):
 1. \<And>z i. \<lbrakk>z \<in> (\<Pi>\<^sub>E i\<in>I. topspace (X i)); Hausdorff_space (product_topology X I); i \<in> I\<rbrakk> \<Longrightarrow> Hausdorff_space (subtopology (product_topology X I) (\<Pi>\<^sub>E j\<in>I. if j = i then topspace (X i) else {z j}))
 2. \<And>X X'. X homeomorphic_space X' \<Longrightarrow> Hausdorff_space X = Hausdorff_space X'
[PROOF STEP]
apply (blast dest: Hausdorff_space_subtopology homeomorphic_Hausdorff_space)+
[PROOF STATE]
proof (prove)
goal:
No subgoals!
[PROOF STEP]
done
[PROOF STATE]
proof (state)
this:
(\<Pi>\<^sub>E i\<in>I. topspace (X i)) = {} \<or> (\<forall>i\<in>I. Hausdorff_space (X i))

goal (1 subgoal):
 1. (\<Pi>\<^sub>E i\<in>I. topspace (X i)) = {} \<or> (\<forall>i\<in>I. Hausdorff_space (X i)) \<Longrightarrow> Hausdorff_space (product_topology X I)
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. (\<Pi>\<^sub>E i\<in>I. topspace (X i)) = {} \<or> (\<forall>i\<in>I. Hausdorff_space (X i)) \<Longrightarrow> Hausdorff_space (product_topology X I)
[PROOF STEP]
assume R: ?rhs
[PROOF STATE]
proof (state)
this:
(\<Pi>\<^sub>E i\<in>I. topspace (X i)) = {} \<or> (\<forall>i\<in>I. Hausdorff_space (X i))

goal (1 subgoal):
 1. (\<Pi>\<^sub>E i\<in>I. topspace (X i)) = {} \<or> (\<forall>i\<in>I. Hausdorff_space (X i)) \<Longrightarrow> Hausdorff_space (product_topology X I)
[PROOF STEP]
show ?lhs
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. Hausdorff_space (product_topology X I)
[PROOF STEP]
proof (cases "(\<Pi>\<^sub>E i\<in>I. topspace(X i)) = {}")
[PROOF STATE]
proof (state)
goal (2 subgoals):
 1. (\<Pi>\<^sub>E i\<in>I. topspace (X i)) = {} \<Longrightarrow> Hausdorff_space (product_topology X I)
 2. (\<Pi>\<^sub>E i\<in>I. topspace (X i)) \<noteq> {} \<Longrightarrow> Hausdorff_space (product_topology X I)
[PROOF STEP]
case True
[PROOF STATE]
proof (state)
this:
(\<Pi>\<^sub>E i\<in>I. topspace (X i)) = {}

goal (2 subgoals):
 1. (\<Pi>\<^sub>E i\<in>I. topspace (X i)) = {} \<Longrightarrow> Hausdorff_space (product_topology X I)
 2. (\<Pi>\<^sub>E i\<in>I. topspace (X i)) \<noteq> {} \<Longrightarrow> Hausdorff_space (product_topology X I)
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
(\<Pi>\<^sub>E i\<in>I. topspace (X i)) = {}
[PROOF STEP]
show ?thesis
[PROOF STATE]
proof (prove)
using this:
(\<Pi>\<^sub>E i\<in>I. topspace (X i)) = {}

goal (1 subgoal):
 1. Hausdorff_space (product_topology X I)
[PROOF STEP]
by (simp add: Hausdorff_space_topspace_empty)
[PROOF STATE]
proof (state)
this:
Hausdorff_space (product_topology X I)

goal (1 subgoal):
 1. (\<Pi>\<^sub>E i\<in>I. topspace (X i)) \<noteq> {} \<Longrightarrow> Hausdorff_space (product_topology X I)
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. (\<Pi>\<^sub>E i\<in>I. topspace (X i)) \<noteq> {} \<Longrightarrow> Hausdorff_space (product_topology X I)
[PROOF STEP]
case False
[PROOF STATE]
proof (state)
this:
(\<Pi>\<^sub>E i\<in>I. topspace (X i)) \<noteq> {}

goal (1 subgoal):
 1. (\<Pi>\<^sub>E i\<in>I. topspace (X i)) \<noteq> {} \<Longrightarrow> Hausdorff_space (product_topology X I)
[PROOF STEP]
have "\<exists>U V. openin (product_topology X I) U \<and> openin (product_topology X I) V \<and> f \<in> U \<and> g \<in> V \<and> disjnt U V"
      if f: "f \<in> (\<Pi>\<^sub>E i\<in>I. topspace (X i))" and g: "g \<in> (\<Pi>\<^sub>E i\<in>I. topspace (X i))" and "f \<noteq> g"
      for f g :: "'a \<Rightarrow> 'b"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<exists>U V. openin (product_topology X I) U \<and> openin (product_topology X I) V \<and> f \<in> U \<and> g \<in> V \<and> disjnt U V
[PROOF STEP]
proof -
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. \<exists>U V. openin (product_topology X I) U \<and> openin (product_topology X I) V \<and> f \<in> U \<and> g \<in> V \<and> disjnt U V
[PROOF STEP]
obtain m where "f m \<noteq> g m"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (\<And>m. f m \<noteq> g m \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
using \<open>f \<noteq> g\<close>
[PROOF STATE]
proof (prove)
using this:
f \<noteq> g

goal (1 subgoal):
 1. (\<And>m. f m \<noteq> g m \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by blast
[PROOF STATE]
proof (state)
this:
f m \<noteq> g m

goal (1 subgoal):
 1. \<exists>U V. openin (product_topology X I) U \<and> openin (product_topology X I) V \<and> f \<in> U \<and> g \<in> V \<and> disjnt U V
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
f m \<noteq> g m
[PROOF STEP]
have "m \<in> I"
[PROOF STATE]
proof (prove)
using this:
f m \<noteq> g m

goal (1 subgoal):
 1. m \<in> I
[PROOF STEP]
using f g
[PROOF STATE]
proof (prove)
using this:
f m \<noteq> g m
f \<in> (\<Pi>\<^sub>E i\<in>I. topspace (X i))
g \<in> (\<Pi>\<^sub>E i\<in>I. topspace (X i))

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

goal (1 subgoal):
 1. \<exists>U V. openin (product_topology X I) U \<and> openin (product_topology X I) V \<and> f \<in> U \<and> g \<in> V \<and> disjnt U V
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
m \<in> I
[PROOF STEP]
have "Hausdorff_space (X m)"
[PROOF STATE]
proof (prove)
using this:
m \<in> I

goal (1 subgoal):
 1. Hausdorff_space (X m)
[PROOF STEP]
using False that R
[PROOF STATE]
proof (prove)
using this:
m \<in> I
(\<Pi>\<^sub>E i\<in>I. topspace (X i)) \<noteq> {}
f \<in> (\<Pi>\<^sub>E i\<in>I. topspace (X i))
g \<in> (\<Pi>\<^sub>E i\<in>I. topspace (X i))
f \<noteq> g
(\<Pi>\<^sub>E i\<in>I. topspace (X i)) = {} \<or> (\<forall>i\<in>I. Hausdorff_space (X i))

goal (1 subgoal):
 1. Hausdorff_space (X m)
[PROOF STEP]
by blast
[PROOF STATE]
proof (state)
this:
Hausdorff_space (X m)

goal (1 subgoal):
 1. \<exists>U V. openin (product_topology X I) U \<and> openin (product_topology X I) V \<and> f \<in> U \<and> g \<in> V \<and> disjnt U V
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
Hausdorff_space (X m)
[PROOF STEP]
obtain U V where U: "openin (X m) U" and V: "openin (X m) V" and "f m \<in> U" "g m \<in> V" "disjnt U V"
[PROOF STATE]
proof (prove)
using this:
Hausdorff_space (X m)

goal (1 subgoal):
 1. (\<And>U V. \<lbrakk>openin (X m) U; openin (X m) V; f m \<in> U; g m \<in> V; disjnt U V\<rbrakk> \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by (metis Hausdorff_space_def PiE_mem \<open>f m \<noteq> g m\<close> \<open>m \<in> I\<close> f g)
[PROOF STATE]
proof (state)
this:
openin (X m) U
openin (X m) V
f m \<in> U
g m \<in> V
disjnt U V

goal (1 subgoal):
 1. \<exists>U V. openin (product_topology X I) U \<and> openin (product_topology X I) V \<and> f \<in> U \<and> g \<in> V \<and> disjnt U V
[PROOF STEP]
show ?thesis
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<exists>U V. openin (product_topology X I) U \<and> openin (product_topology X I) V \<and> f \<in> U \<and> g \<in> V \<and> disjnt U V
[PROOF STEP]
proof (intro exI conjI)
[PROOF STATE]
proof (state)
goal (5 subgoals):
 1. openin (product_topology X I) ?U
 2. openin (product_topology X I) ?V1
 3. f \<in> ?U
 4. g \<in> ?V1
 5. disjnt ?U ?V1
[PROOF STEP]
let ?U = "(\<Pi>\<^sub>E i\<in>I. topspace(X i)) \<inter> {x. x m \<in> U}"
[PROOF STATE]
proof (state)
goal (5 subgoals):
 1. openin (product_topology X I) ?U
 2. openin (product_topology X I) ?V1
 3. f \<in> ?U
 4. g \<in> ?V1
 5. disjnt ?U ?V1
[PROOF STEP]
let ?V = "(\<Pi>\<^sub>E i\<in>I. topspace(X i)) \<inter> {x. x m \<in> V}"
[PROOF STATE]
proof (state)
goal (5 subgoals):
 1. openin (product_topology X I) ?U
 2. openin (product_topology X I) ?V1
 3. f \<in> ?U
 4. g \<in> ?V1
 5. disjnt ?U ?V1
[PROOF STEP]
show "openin (product_topology X I) ?U" "openin (product_topology X I) ?V"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. openin (product_topology X I) ((\<Pi>\<^sub>E i\<in>I. topspace (X i)) \<inter> {x. x m \<in> U}) &&& openin (product_topology X I) ((\<Pi>\<^sub>E i\<in>I. topspace (X i)) \<inter> {x. x m \<in> V})
[PROOF STEP]
using \<open>m \<in> I\<close> U V
[PROOF STATE]
proof (prove)
using this:
m \<in> I
openin (X m) U
openin (X m) V

goal (1 subgoal):
 1. openin (product_topology X I) ((\<Pi>\<^sub>E i\<in>I. topspace (X i)) \<inter> {x. x m \<in> U}) &&& openin (product_topology X I) ((\<Pi>\<^sub>E i\<in>I. topspace (X i)) \<inter> {x. x m \<in> V})
[PROOF STEP]
by (force simp add: openin_product_topology intro: arbitrary_union_of_inc relative_to_inc finite_intersection_of_inc)+
[PROOF STATE]
proof (state)
this:
openin (product_topology X I) ((\<Pi>\<^sub>E i\<in>I. topspace (X i)) \<inter> {x. x m \<in> U})
openin (product_topology X I) ((\<Pi>\<^sub>E i\<in>I. topspace (X i)) \<inter> {x. x m \<in> V})

goal (3 subgoals):
 1. f \<in> (\<Pi>\<^sub>E i\<in>I. topspace (X i)) \<inter> {x. x m \<in> U}
 2. g \<in> (\<Pi>\<^sub>E i\<in>I. topspace (X i)) \<inter> {x. x m \<in> V}
 3. disjnt ((\<Pi>\<^sub>E i\<in>I. topspace (X i)) \<inter> {x. x m \<in> U}) ((\<Pi>\<^sub>E i\<in>I. topspace (X i)) \<inter> {x. x m \<in> V})
[PROOF STEP]
show "f \<in> ?U"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. f \<in> (\<Pi>\<^sub>E i\<in>I. topspace (X i)) \<inter> {x. x m \<in> U}
[PROOF STEP]
using \<open>f m \<in> U\<close> f
[PROOF STATE]
proof (prove)
using this:
f m \<in> U
f \<in> (\<Pi>\<^sub>E i\<in>I. topspace (X i))

goal (1 subgoal):
 1. f \<in> (\<Pi>\<^sub>E i\<in>I. topspace (X i)) \<inter> {x. x m \<in> U}
[PROOF STEP]
by blast
[PROOF STATE]
proof (state)
this:
f \<in> (\<Pi>\<^sub>E i\<in>I. topspace (X i)) \<inter> {x. x m \<in> U}

goal (2 subgoals):
 1. g \<in> (\<Pi>\<^sub>E i\<in>I. topspace (X i)) \<inter> {x. x m \<in> V}
 2. disjnt ((\<Pi>\<^sub>E i\<in>I. topspace (X i)) \<inter> {x. x m \<in> U}) ((\<Pi>\<^sub>E i\<in>I. topspace (X i)) \<inter> {x. x m \<in> V})
[PROOF STEP]
show "g \<in> ?V"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. g \<in> (\<Pi>\<^sub>E i\<in>I. topspace (X i)) \<inter> {x. x m \<in> V}
[PROOF STEP]
using \<open>g m \<in> V\<close> g
[PROOF STATE]
proof (prove)
using this:
g m \<in> V
g \<in> (\<Pi>\<^sub>E i\<in>I. topspace (X i))

goal (1 subgoal):
 1. g \<in> (\<Pi>\<^sub>E i\<in>I. topspace (X i)) \<inter> {x. x m \<in> V}
[PROOF STEP]
by blast
[PROOF STATE]
proof (state)
this:
g \<in> (\<Pi>\<^sub>E i\<in>I. topspace (X i)) \<inter> {x. x m \<in> V}

goal (1 subgoal):
 1. disjnt ((\<Pi>\<^sub>E i\<in>I. topspace (X i)) \<inter> {x. x m \<in> U}) ((\<Pi>\<^sub>E i\<in>I. topspace (X i)) \<inter> {x. x m \<in> V})
[PROOF STEP]
show "disjnt ?U ?V"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. disjnt ((\<Pi>\<^sub>E i\<in>I. topspace (X i)) \<inter> {x. x m \<in> U}) ((\<Pi>\<^sub>E i\<in>I. topspace (X i)) \<inter> {x. x m \<in> V})
[PROOF STEP]
using \<open>disjnt U V\<close>
[PROOF STATE]
proof (prove)
using this:
disjnt U V

goal (1 subgoal):
 1. disjnt ((\<Pi>\<^sub>E i\<in>I. topspace (X i)) \<inter> {x. x m \<in> U}) ((\<Pi>\<^sub>E i\<in>I. topspace (X i)) \<inter> {x. x m \<in> V})
[PROOF STEP]
by (auto simp: PiE_def Pi_def disjnt_def)
[PROOF STATE]
proof (state)
this:
disjnt ((\<Pi>\<^sub>E i\<in>I. topspace (X i)) \<inter> {x. x m \<in> U}) ((\<Pi>\<^sub>E i\<in>I. topspace (X i)) \<inter> {x. x m \<in> V})

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
\<exists>U V. openin (product_topology X I) U \<and> openin (product_topology X I) V \<and> f \<in> U \<and> g \<in> V \<and> disjnt U V

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
\<lbrakk>?f \<in> (\<Pi>\<^sub>E i\<in>I. topspace (X i)); ?g \<in> (\<Pi>\<^sub>E i\<in>I. topspace (X i)); ?f \<noteq> ?g\<rbrakk> \<Longrightarrow> \<exists>U V. openin (product_topology X I) U \<and> openin (product_topology X I) V \<and> ?f \<in> U \<and> ?g \<in> V \<and> disjnt U V

goal (1 subgoal):
 1. (\<Pi>\<^sub>E i\<in>I. topspace (X i)) \<noteq> {} \<Longrightarrow> Hausdorff_space (product_topology X I)
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
\<lbrakk>?f \<in> (\<Pi>\<^sub>E i\<in>I. topspace (X i)); ?g \<in> (\<Pi>\<^sub>E i\<in>I. topspace (X i)); ?f \<noteq> ?g\<rbrakk> \<Longrightarrow> \<exists>U V. openin (product_topology X I) U \<and> openin (product_topology X I) V \<and> ?f \<in> U \<and> ?g \<in> V \<and> disjnt U V
[PROOF STEP]
show ?thesis
[PROOF STATE]
proof (prove)
using this:
\<lbrakk>?f \<in> (\<Pi>\<^sub>E i\<in>I. topspace (X i)); ?g \<in> (\<Pi>\<^sub>E i\<in>I. topspace (X i)); ?f \<noteq> ?g\<rbrakk> \<Longrightarrow> \<exists>U V. openin (product_topology X I) U \<and> openin (product_topology X I) V \<and> ?f \<in> U \<and> ?g \<in> V \<and> disjnt U V

goal (1 subgoal):
 1. Hausdorff_space (product_topology X I)
[PROOF STEP]
by (simp add: Hausdorff_space_def)
[PROOF STATE]
proof (state)
this:
Hausdorff_space (product_topology X I)

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
Hausdorff_space (product_topology X I)

goal:
No subgoals!
[PROOF STEP]
qed


[STATEMENT]
lemma prv_lcnj_imp_remdups:
  assumes "set \<phi>s \<subseteq> fmla"
  shows "prv (imp (lcnj (remdups \<phi>s)) (lcnj \<phi>s))"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. prv (imp (lcnj (remdups \<phi>s)) (lcnj \<phi>s))
[PROOF STEP]
using assms
[PROOF STATE]
proof (prove)
using this:
set \<phi>s \<subseteq> fmla

goal (1 subgoal):
 1. prv (imp (lcnj (remdups \<phi>s)) (lcnj \<phi>s))
[PROOF STEP]
apply(induct \<phi>s)
[PROOF STATE]
proof (prove)
goal (2 subgoals):
 1. set [] \<subseteq> fmla \<Longrightarrow> prv (imp (lcnj (remdups [])) (lcnj []))
 2. \<And>a \<phi>s. \<lbrakk>set \<phi>s \<subseteq> fmla \<Longrightarrow> prv (imp (lcnj (remdups \<phi>s)) (lcnj \<phi>s)); set (a # \<phi>s) \<subseteq> fmla\<rbrakk> \<Longrightarrow> prv (imp (lcnj (remdups (a # \<phi>s))) (lcnj (a # \<phi>s)))
[PROOF STEP]
by (auto simp: prv_imp_cnj prv_lcnj_imp_in prv_cnj_mono prv_imp_refl)


[STATEMENT]
lemma frees_strip_comb: "frees t = frees (fst (strip_comb t)) |\<union>| freess (snd (strip_comb t))"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. frees t = frees (fst (strip_comb t)) |\<union>| freess (snd (strip_comb t))
[PROOF STEP]
by (metis list_strip_comb frees_list_comb)


[STATEMENT]
lemma kat_3_equiv_opp: "ad z \<cdot> y \<cdot> d x = 0 \<longleftrightarrow> y \<cdot> d x = d z \<cdot> y \<cdot> d x"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (ad z \<cdot> y \<cdot> d x = (zero_class.zero::'a)) = (y \<cdot> d x = d z \<cdot> y \<cdot> d x)
[PROOF STEP]
proof -
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. (ad z \<cdot> y \<cdot> d x = (zero_class.zero::'a)) = (y \<cdot> d x = d z \<cdot> y \<cdot> d x)
[PROOF STEP]
have "ad z \<cdot> (y \<cdot> d x) = 0 \<longrightarrow> (ad z \<cdot> y \<cdot> d x = 0) = (y \<cdot> d x = d z \<cdot> y \<cdot> d x)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. ad z \<cdot> (y \<cdot> d x) = (zero_class.zero::'a) \<longrightarrow> (ad z \<cdot> y \<cdot> d x = (zero_class.zero::'a)) = (y \<cdot> d x = d z \<cdot> y \<cdot> d x)
[PROOF STEP]
by (metis (no_types, opaque_lifting) add_commute local.add_zerol local.ads_d_def local.as3 local.distrib_right' local.mult_1_left mult_assoc)
[PROOF STATE]
proof (state)
this:
ad z \<cdot> (y \<cdot> d x) = (zero_class.zero::'a) \<longrightarrow> (ad z \<cdot> y \<cdot> d x = (zero_class.zero::'a)) = (y \<cdot> d x = d z \<cdot> y \<cdot> d x)

goal (1 subgoal):
 1. (ad z \<cdot> y \<cdot> d x = (zero_class.zero::'a)) = (y \<cdot> d x = d z \<cdot> y \<cdot> d x)
[PROOF STEP]
thus ?thesis
[PROOF STATE]
proof (prove)
using this:
ad z \<cdot> (y \<cdot> d x) = (zero_class.zero::'a) \<longrightarrow> (ad z \<cdot> y \<cdot> d x = (zero_class.zero::'a)) = (y \<cdot> d x = d z \<cdot> y \<cdot> d x)

goal (1 subgoal):
 1. (ad z \<cdot> y \<cdot> d x = (zero_class.zero::'a)) = (y \<cdot> d x = d z \<cdot> y \<cdot> d x)
[PROOF STEP]
by (metis a_4 local.a_add_idem local.a_gla2 local.ads_d_def mult_assoc am_add_op_def)
[PROOF STATE]
proof (state)
this:
(ad z \<cdot> y \<cdot> d x = (zero_class.zero::'a)) = (y \<cdot> d x = d z \<cdot> y \<cdot> d x)

goal:
No subgoals!
[PROOF STEP]
qed


[STATEMENT]
lemma l6_21:
  assumes "\<not> Col A B C" and
    "C \<noteq> D" and
    "Col A B P" and
    "Col A B Q" and
    "Col C D P" and
    "Col C D Q"
  shows "P = Q"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. P = Q
[PROOF STEP]
by (metis assms(1) assms(2) assms(3) assms(4) assms(5) assms(6) col_transitivity_1 l6_16_1 not_col_distincts)


[STATEMENT]
lemma hballI [intro!]: "(\<And>x. x\<^bold>\<in>A \<Longrightarrow> P x) \<Longrightarrow> \<forall>x\<^bold>\<in>A. P x"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (\<And>x. x \<^bold>\<in> A \<Longrightarrow> P x) \<Longrightarrow> HBall A P
[PROOF STEP]
by (simp add: HBall_def)


[STATEMENT]
lemma i_join_i_shrink_iT_Plus_iT_Div_mod: "
  \<lbrakk> 0 < k; I \<noteq> {}; \<forall>x\<in>I. x mod k = 0 \<rbrakk> \<Longrightarrow>
  (f \<longmapsto>\<^sub>i k) \<Join>\<^sub>i (I \<oplus> (k - 1))= f \<div>\<^sub>i k \<Join>\<^sub>i (I \<oslash> k)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<lbrakk>0 < k; I \<noteq> {}; \<forall>x\<in>I. x mod k = 0\<rbrakk> \<Longrightarrow> f \<longmapsto> k \<Join>\<^sub> (I \<oplus> k - 1) = f \<div> k \<Join>\<^sub> (I \<oslash> k)
[PROOF STEP]
apply (simp (no_asm) add: ilist_eq_iff, clarify)
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<And>x. \<lbrakk>0 < k; I \<noteq> {}; \<forall>x\<in>I. x mod k = 0\<rbrakk> \<Longrightarrow> (f \<longmapsto> k \<Join>\<^sub> (I \<oplus> k - Suc 0)) x = (f \<div> k \<Join>\<^sub> (I \<oslash> k)) x
[PROOF STEP]
apply (simp add: i_join_nth)
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<And>x. \<lbrakk>0 < k; I \<noteq> {}; \<forall>x\<in>I. x mod k = 0\<rbrakk> \<Longrightarrow> (f \<longmapsto> k) ((I \<oplus> k - Suc 0) \<rightarrow> x) = (f \<div> k) ((I \<oslash> k) \<rightarrow> x)
[PROOF STEP]
apply (simp add: i_shrink_nth_eq_i_last_message_hold_nth)
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<And>x. \<lbrakk>0 < k; I \<noteq> {}; \<forall>x\<in>I. x mod k = 0\<rbrakk> \<Longrightarrow> (f \<longmapsto> k) ((I \<oplus> k - Suc 0) \<rightarrow> x) = (f \<longmapsto> k) (((I \<oslash> k) \<rightarrow> x) * k + k - Suc 0)
[PROOF STEP]
apply (simp add: iT_Plus_inext_nth iT_Div_mod_inext_nth)
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<And>x. \<lbrakk>0 < k; I \<noteq> {}; \<forall>x\<in>I. x mod k = 0\<rbrakk> \<Longrightarrow> (f \<longmapsto> k) ((I \<rightarrow> x) + k - Suc 0) = (f \<longmapsto> k) ((I \<rightarrow> x) div k * k + k - Suc 0)
[PROOF STEP]
apply (drule_tac x="I \<rightarrow> x" in bspec)
[PROOF STATE]
proof (prove)
goal (2 subgoals):
 1. \<And>x. \<lbrakk>0 < k; I \<noteq> {}\<rbrakk> \<Longrightarrow> I \<rightarrow> x \<in> I
 2. \<And>x. \<lbrakk>0 < k; I \<noteq> {}; (I \<rightarrow> x) mod k = 0\<rbrakk> \<Longrightarrow> (f \<longmapsto> k) ((I \<rightarrow> x) + k - Suc 0) = (f \<longmapsto> k) ((I \<rightarrow> x) div k * k + k - Suc 0)
[PROOF STEP]
apply (simp add: inext_nth_closed)
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<And>x. \<lbrakk>0 < k; I \<noteq> {}; (I \<rightarrow> x) mod k = 0\<rbrakk> \<Longrightarrow> (f \<longmapsto> k) ((I \<rightarrow> x) + k - Suc 0) = (f \<longmapsto> k) ((I \<rightarrow> x) div k * k + k - Suc 0)
[PROOF STEP]
apply (simp add: mod_0_div_mult_cancel)
[PROOF STATE]
proof (prove)
goal:
No subgoals!
[PROOF STEP]
done


[STATEMENT]
lemma order_uminus[simp]: "order x (-p) = order x p"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. order x (- p) = order x p
[PROOF STEP]
by (metis neg_equal_0_iff_equal order_smult smult_1_left smult_minus_left)


[STATEMENT]
lemma pE_by_vE: "pE = (E \<inter> \<Union>(set p) \<times> UNIV) - lvE"
    \<comment> \<open>Pending edges are edges from path not yet visited\<close>
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. pE = E \<inter> \<Union> (set p) \<times> UNIV - lvE
[PROOF STEP]
unfolding vE_def touched_def
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. pE = E \<inter> \<Union> (set p) \<times> UNIV - (E \<inter> (D \<union> \<Union> (set p)) \<times> UNIV - pE)
[PROOF STEP]
using pE_E_from_p
[PROOF STATE]
proof (prove)
using this:
pE \<subseteq> E \<inter> \<Union> (set p) \<times> UNIV

goal (1 subgoal):
 1. pE = E \<inter> \<Union> (set p) \<times> UNIV - (E \<inter> (D \<union> \<Union> (set p)) \<times> UNIV - pE)
[PROOF STEP]
by auto


[STATEMENT]
lemma snd_splitAt_rev:
 "distinct xs \<Longrightarrow> x \<in> set xs \<Longrightarrow>
  snd(splitAt x (rev xs)) = rev(fst(splitAt x xs))"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<lbrakk>distinct xs; x \<in> set xs\<rbrakk> \<Longrightarrow> snd (splitAt x (rev xs)) = rev (fst (splitAt x xs))
[PROOF STEP]
by(simp add:splitAt_conv dropWhile_neq_rev)


[STATEMENT]
lemma Minimal_Solutions_sym:
  assumes "0 \<notin> set a" and "0 \<notin> set b"
  shows "(xs, ys) \<in> Minimal_Solutions a b \<longrightarrow> (ys, xs) \<in> Minimal_Solutions b a"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (xs, ys) \<in> Minimal_Solutions a b \<longrightarrow> (ys, xs) \<in> Minimal_Solutions b a
[PROOF STEP]
using assms
[PROOF STATE]
proof (prove)
using this:
0 \<notin> set a
0 \<notin> set b

goal (1 subgoal):
 1. (xs, ys) \<in> Minimal_Solutions a b \<longrightarrow> (ys, xs) \<in> Minimal_Solutions b a
[PROOF STEP]
by (auto simp: hlde_ops.Minimal_Solutions_def hlde_ops.Solutions_def
           dest: dotprod_eq_nonzero_iff dest!: less_append_swap [of _ _ ys xs])


[STATEMENT]
lemma minus_mult_cancel [simp]: "x \<in> V \<Longrightarrow> (- a) \<cdot> - x = a \<cdot> x"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. x \<in> V \<Longrightarrow> - a \<cdot> - x = a \<cdot> x
[PROOF STEP]
by (simp add: negate_eq1 mult_assoc2)


[STATEMENT]
theorem (in ring) chinese_remainder_simple:
  assumes "ideal I R" "ideal J R" and "I <+> J = carrier R"
  shows "R Quot (I \<inter> J) \<simeq> RDirProd (R Quot I) (R Quot J)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. R Quot I \<inter> J \<simeq> RDirProd (R Quot I) (R Quot J)
[PROOF STEP]
using ring_hom_ring.FactRing_iso[OF canonical_proj_ring_hom canonical_proj_is_surj]
[PROOF STATE]
proof (prove)
using this:
\<lbrakk>ideal ?I1 R; ideal ?J1 R; ideal ?I1 R; ideal ?J1 R; ?I1 <+> ?J1 = carrier R\<rbrakk> \<Longrightarrow> R Quot a_kernel R (RDirProd (R Quot ?I1) (R Quot ?J1)) (canonical_proj ?I1 ?J1) \<simeq> RDirProd (R Quot ?I1) (R Quot ?J1)

goal (1 subgoal):
 1. R Quot I \<inter> J \<simeq> RDirProd (R Quot I) (R Quot J)
[PROOF STEP]
by (simp add: canonical_proj_ker assms)


[STATEMENT]
lemma "filterlim (\<lambda>x::real. (x^2 - 1) / (x^2 + 3*x - 4)) (nhds (2/5)) (at 1)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (\<lambda>x. (x\<^sup>2 - 1) / (x\<^sup>2 + 3 * x - 4)) \<midarrow>1\<rightarrow> 2 / 5
[PROOF STEP]
by real_asymp


[STATEMENT]
lemma cat_obj_coprod_2_ex_is_iso_arr:
  assumes "\<pi> : {a,b} >\<^sub>C\<^sub>F\<^sub>.\<^sub>\<uplus> U : 2\<^sub>C \<mapsto>\<mapsto>\<^sub>C\<^bsub>\<alpha>\<^esub> \<CC>"
    and "\<pi>' : {a,b} >\<^sub>C\<^sub>F\<^sub>.\<^sub>\<uplus> U' : 2\<^sub>C \<mapsto>\<mapsto>\<^sub>C\<^bsub>\<alpha>\<^esub> \<CC>"
  obtains f where "f : U \<mapsto>\<^sub>i\<^sub>s\<^sub>o\<^bsub>\<CC>\<^esub> U'" and "\<pi>' = ntcf_const (:\<^sub>C (2\<^sub>\<nat>)) \<CC> f \<bullet>\<^sub>N\<^sub>T\<^sub>C\<^sub>F \<pi>"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (\<And>f. \<lbrakk>f : U \<mapsto>\<^sub>i\<^sub>s\<^sub>o\<^bsub>\<CC>\<^esub> U'; \<pi>' = ntcf_const (:\<^sub>C (2\<^sub>\<nat>)) \<CC> f \<bullet>\<^sub>N\<^sub>T\<^sub>S\<^sub>M\<^sub>C\<^sub>F \<pi>\<rbrakk> \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
proof-
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. (\<And>f. \<lbrakk>f : U \<mapsto>\<^sub>i\<^sub>s\<^sub>o\<^bsub>\<CC>\<^esub> U'; \<pi>' = ntcf_const (:\<^sub>C (2\<^sub>\<nat>)) \<CC> f \<bullet>\<^sub>N\<^sub>T\<^sub>S\<^sub>M\<^sub>C\<^sub>F \<pi>\<rbrakk> \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
interpret \<pi>: is_cat_obj_coprod_2 \<alpha> a b \<CC> U \<pi>
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<pi> : {a,b} >\<^sub>C\<^sub>F\<^sub>.\<^sub>\<uplus> U : 2\<^sub>C \<mapsto>\<mapsto>\<^sub>C\<^bsub>\<alpha>\<^esub> \<CC>
[PROOF STEP]
by (rule assms(1))
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. (\<And>f. \<lbrakk>f : U \<mapsto>\<^sub>i\<^sub>s\<^sub>o\<^bsub>\<CC>\<^esub> U'; \<pi>' = ntcf_const (:\<^sub>C (2\<^sub>\<nat>)) \<CC> f \<bullet>\<^sub>N\<^sub>T\<^sub>S\<^sub>M\<^sub>C\<^sub>F \<pi>\<rbrakk> \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
interpret \<pi>': is_cat_obj_coprod_2 \<alpha> a b \<CC> U' \<pi>'
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<pi>' : {a,b} >\<^sub>C\<^sub>F\<^sub>.\<^sub>\<uplus> U' : 2\<^sub>C \<mapsto>\<mapsto>\<^sub>C\<^bsub>\<alpha>\<^esub> \<CC>
[PROOF STEP]
by (rule assms(2))
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. (\<And>f. \<lbrakk>f : U \<mapsto>\<^sub>i\<^sub>s\<^sub>o\<^bsub>\<CC>\<^esub> U'; \<pi>' = ntcf_const (:\<^sub>C (2\<^sub>\<nat>)) \<CC> f \<bullet>\<^sub>N\<^sub>T\<^sub>S\<^sub>M\<^sub>C\<^sub>F \<pi>\<rbrakk> \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
from that
[PROOF STATE]
proof (chain)
picking this:
\<lbrakk>?f : U \<mapsto>\<^sub>i\<^sub>s\<^sub>o\<^bsub>\<CC>\<^esub> U'; \<pi>' = ntcf_const (:\<^sub>C (2\<^sub>\<nat>)) \<CC> ?f \<bullet>\<^sub>N\<^sub>T\<^sub>S\<^sub>M\<^sub>C\<^sub>F \<pi>\<rbrakk> \<Longrightarrow> thesis
[PROOF STEP]
show ?thesis
[PROOF STATE]
proof (prove)
using this:
\<lbrakk>?f : U \<mapsto>\<^sub>i\<^sub>s\<^sub>o\<^bsub>\<CC>\<^esub> U'; \<pi>' = ntcf_const (:\<^sub>C (2\<^sub>\<nat>)) \<CC> ?f \<bullet>\<^sub>N\<^sub>T\<^sub>S\<^sub>M\<^sub>C\<^sub>F \<pi>\<rbrakk> \<Longrightarrow> thesis

goal (1 subgoal):
 1. thesis
[PROOF STEP]
by
      (
        elim cat_obj_coprod_ex_is_iso_arr[
          OF \<pi>.is_cat_obj_coprod_axioms \<pi>'.is_cat_obj_coprod_axioms
          ]
      )
[PROOF STATE]
proof (state)
this:
thesis

goal:
No subgoals!
[PROOF STEP]
qed


[STATEMENT]
lemma tensor_op_scaleC_left: \<open>(c *\<^sub>C x) \<otimes>\<^sub>o b = c *\<^sub>C (x \<otimes>\<^sub>o b)\<close>
  for x :: \<open>'a::finite ell2 \<Rightarrow>\<^sub>C\<^sub>L 'c::finite ell2\<close> and b :: \<open>'b::finite ell2 \<Rightarrow>\<^sub>C\<^sub>L 'd::finite ell2\<close>
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. c *\<^sub>C x \<otimes>\<^sub>o b = c *\<^sub>C (x \<otimes>\<^sub>o b)
[PROOF STEP]
apply (auto intro!: equal_ket simp: tensor_op_ket)
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<And>a ba. c *\<^sub>C (x *\<^sub>V ket a) \<otimes>\<^sub>s b *\<^sub>V ket ba = c *\<^sub>C ((x *\<^sub>V ket a) \<otimes>\<^sub>s b *\<^sub>V ket ba)
[PROOF STEP]
by (metis scaleC_cblinfun.rep_eq tensor_ell2_ket tensor_ell2_scaleC1 tensor_op_ell2)


[STATEMENT]
lemma substitutes_iia:
  assumes "finite A"
  shows "substitutes_on A f \<longleftrightarrow> iia_on A f"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. substitutes_on A f = iia_on A f
[PROOF STEP]
using %invisible Rf_mono_on_iia_on Rf_mono_on_substitutes substitutes_on_Rf_mono_on[OF _ assms]
[PROOF STATE]
proof (prove)
using this:
Basis.mono_on (Pow ?A) (Rf ?f) = iia_on ?A ?f
Basis.mono_on (Pow ?A) (Rf ?f) \<Longrightarrow> substitutes_on ?A ?f
substitutes_on A ?f \<Longrightarrow> Basis.mono_on (Pow A) (Rf ?f)

goal (1 subgoal):
 1. substitutes_on A f = iia_on A f
[PROOF STEP]
by blast


[STATEMENT]
lemma filter_tab_weaken:
"\<lbrakk>\<forall> a \<in> t k: \<exists> b \<in> s k: P a b;
  \<And> k x y. \<lbrakk>t k = Some x;s k = Some y\<rbrakk> \<Longrightarrow> cond k x \<longrightarrow> cond k y
 \<rbrakk> \<Longrightarrow> \<forall> a \<in> filter_tab cond t k: \<exists> b \<in> filter_tab cond s k: P a b"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<lbrakk>! a:t k: ? b:s k: P a b; \<And>k x y. \<lbrakk>t k = Some x; s k = Some y\<rbrakk> \<Longrightarrow> cond k x \<longrightarrow> cond k y\<rbrakk> \<Longrightarrow> ! a:filter_tab cond t k: ? b:filter_tab cond s k: P a b
[PROOF STEP]
by (force simp add: filter_tab_def)


[STATEMENT]
lemma sameDom_swapBinp_gSwapBinp[simp]:
assumes "wlsBinp delta binp'" and "gWlsBinp MOD delta binp"
shows "sameDom (swapBinp zs z1 z2 binp') (gSwapBinp MOD zs z1 z2 binp' binp)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. sameDom (binp' %%[z1 \<and> z2]_zs) (gSwapBinp MOD zs z1 z2 binp' binp)
[PROOF STEP]
using assms
[PROOF STATE]
proof (prove)
using this:
wlsBinp delta binp'
gWlsBinp MOD delta binp

goal (1 subgoal):
 1. sameDom (binp' %%[z1 \<and> z2]_zs) (gSwapBinp MOD zs z1 z2 binp' binp)
[PROOF STEP]
by(simp add: wlsBinp_iff gWlsBinp_def swapBinp_def gSwapBinp_def
liftAll2_def lift_def lift2_def sameDom_def split: option.splits)


[STATEMENT]
lemma max_fun_diff_le_eq:
  "\<lbrakk>(s.max_fun_diff f g, x) \<in> s; f \<noteq> g; f \<in> FINFUNC; g \<in> FINFUNC; x \<noteq> s.max_fun_diff f g\<rbrakk> \<Longrightarrow>
  f x = g x"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<lbrakk>(s.max_fun_diff f g, x) \<in> s; f \<noteq> g; f \<in> FINFUNC; g \<in> FINFUNC; x \<noteq> s.max_fun_diff f g\<rbrakk> \<Longrightarrow> f x = g x
[PROOF STEP]
using max_fun_diff_max[of f g x] antisymD[OF s.ANTISYM, of "s.max_fun_diff f g" x]
[PROOF STATE]
proof (prove)
using this:
\<lbrakk>f \<noteq> g; f \<in> FINFUNC; g \<in> FINFUNC; x \<in> {a \<in> Field s. f a \<noteq> g a}\<rbrakk> \<Longrightarrow> (x, s.max_fun_diff f g) \<in> s
\<lbrakk>(s.max_fun_diff f g, x) \<in> s; (x, s.max_fun_diff f g) \<in> s\<rbrakk> \<Longrightarrow> s.max_fun_diff f g = x

goal (1 subgoal):
 1. \<lbrakk>(s.max_fun_diff f g, x) \<in> s; f \<noteq> g; f \<in> FINFUNC; g \<in> FINFUNC; x \<noteq> s.max_fun_diff f g\<rbrakk> \<Longrightarrow> f x = g x
[PROOF STEP]
by (auto simp: Field_def)


[STATEMENT]
lemma quad_next4_id:
 "\<lbrakk> |vertices f| = 4; distinct(vertices f); v \<in> \<V> f \<rbrakk> \<Longrightarrow>
  f \<bullet> (f \<bullet> (f \<bullet> (f \<bullet> v))) = v"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<lbrakk>|vertices f| = 4; distinct (vertices f); v \<in> \<V> f\<rbrakk> \<Longrightarrow> f \<bullet> (f \<bullet> (f \<bullet> (f \<bullet> v))) = v
[PROOF STEP]
apply(subgoal_tac "\<forall>(i::nat) < 4.
 (((((((i+1) mod 4)+1) mod 4)+1) mod 4)+1) mod 4 = i")
[PROOF STATE]
proof (prove)
goal (2 subgoals):
 1. \<lbrakk>|vertices f| = 4; distinct (vertices f); v \<in> \<V> f; \<forall>i<4. ((((i + 1) mod 4 + 1) mod 4 + 1) mod 4 + 1) mod 4 = i\<rbrakk> \<Longrightarrow> f \<bullet> (f \<bullet> (f \<bullet> (f \<bullet> v))) = v
 2. \<lbrakk>|vertices f| = 4; distinct (vertices f); v \<in> \<V> f\<rbrakk> \<Longrightarrow> \<forall>i<4. ((((i + 1) mod 4 + 1) mod 4 + 1) mod 4 + 1) mod 4 = i
[PROOF STEP]
apply(clarsimp simp:in_set_conv_nth nextVertex_nth)
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<lbrakk>|vertices f| = 4; distinct (vertices f); v \<in> \<V> f\<rbrakk> \<Longrightarrow> \<forall>i<4. ((((i + 1) mod 4 + 1) mod 4 + 1) mod 4 + 1) mod 4 = i
[PROOF STEP]
apply(presburger)
[PROOF STATE]
proof (prove)
goal:
No subgoals!
[PROOF STEP]
done


[STATEMENT]
lemma iso_tuple_cons_conj_eqI:
  "a = c \<and> b = d \<and> P \<longleftrightarrow> Q \<Longrightarrow>
    iso_tuple_cons isom a b = iso_tuple_cons isom c d \<and> P \<longleftrightarrow> Q"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (a = c \<and> b = d \<and> P) = Q \<Longrightarrow> (iso_tuple_cons isom a b = iso_tuple_cons isom c d \<and> P) = Q
[PROOF STEP]
by (clarsimp simp: iso_tuple_cons_def simps)


[STATEMENT]
lemma not_sub:"\<not> A \<subseteq> B \<Longrightarrow> \<exists>a. a\<in>A \<and> a \<notin> B"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<not> A \<subseteq> B \<Longrightarrow> \<exists>a. a \<in> A \<and> a \<notin> B
[PROOF STEP]
by blast


[STATEMENT]
lemma Lim_component_eq:
  fixes f :: "'a \<Rightarrow> 'b::euclidean_space"
  assumes net: "(f \<longlongrightarrow> l) net" "\<not> trivial_limit net"
    and ev:"eventually (\<lambda>x. f(x)\<bullet>i = b) net"
  shows "l\<bullet>i = b"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. l \<bullet> i = b
[PROOF STEP]
using ev[unfolded order_eq_iff eventually_conj_iff]
[PROOF STATE]
proof (prove)
using this:
(\<forall>\<^sub>F x in net. f x \<bullet> i \<le> b) \<and> (\<forall>\<^sub>F x in net. b \<le> f x \<bullet> i)

goal (1 subgoal):
 1. l \<bullet> i = b
[PROOF STEP]
using Lim_component_ge[OF net, of b i]
[PROOF STATE]
proof (prove)
using this:
(\<forall>\<^sub>F x in net. f x \<bullet> i \<le> b) \<and> (\<forall>\<^sub>F x in net. b \<le> f x \<bullet> i)
\<forall>\<^sub>F x in net. b \<le> f x \<bullet> i \<Longrightarrow> b \<le> l \<bullet> i

goal (1 subgoal):
 1. l \<bullet> i = b
[PROOF STEP]
using Lim_component_le[OF net, of i b]
[PROOF STATE]
proof (prove)
using this:
(\<forall>\<^sub>F x in net. f x \<bullet> i \<le> b) \<and> (\<forall>\<^sub>F x in net. b \<le> f x \<bullet> i)
\<forall>\<^sub>F x in net. b \<le> f x \<bullet> i \<Longrightarrow> b \<le> l \<bullet> i
\<forall>\<^sub>F x in net. f x \<bullet> i \<le> b \<Longrightarrow> l \<bullet> i \<le> b

goal (1 subgoal):
 1. l \<bullet> i = b
[PROOF STEP]
by auto


[STATEMENT]
lemma inj_comp: assumes "inj (f :: 'a list \<Rightarrow> 'b list)" shows "(g  w = h w \<longleftrightarrow> (f \<circ> g) w = (f \<circ> h) w)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (g w = h w) = ((f \<circ> g) w = (f \<circ> h) w)
[PROOF STEP]
by (rule, simp) (use injD[OF assms] in fastforce)


[STATEMENT]
lemma mirror_num_relations_eq: "num_relations (mirror t) = num_relations t"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. num_relations (mirror t) = num_relations t
[PROOF STEP]
by(induction t) auto


[STATEMENT]
lemma unit_disc_fix_preserve_poincare_line [simp]:
  assumes "unit_disc_fix M" "u \<in> unit_disc" "v \<in> unit_disc" "u \<noteq> v"
  shows "poincare_line (moebius_pt M u) (moebius_pt M v) = moebius_circline M (poincare_line u v)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. poincare_line (moebius_pt M u) (moebius_pt M v) = moebius_circline M (poincare_line u v)
[PROOF STEP]
proof (rule unique_poincare_line[symmetric])
[PROOF STATE]
proof (state)
goal (6 subgoals):
 1. moebius_pt M u \<noteq> moebius_pt M v
 2. moebius_pt M u \<in> unit_disc
 3. moebius_pt M v \<in> unit_disc
 4. moebius_pt M u \<in> circline_set (moebius_circline M (poincare_line u v))
 5. moebius_pt M v \<in> circline_set (moebius_circline M (poincare_line u v))
 6. is_poincare_line (moebius_circline M (poincare_line u v))
[PROOF STEP]
show "moebius_pt M u \<noteq> moebius_pt M v"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. moebius_pt M u \<noteq> moebius_pt M v
[PROOF STEP]
using \<open>u \<noteq> v\<close>
[PROOF STATE]
proof (prove)
using this:
u \<noteq> v

goal (1 subgoal):
 1. moebius_pt M u \<noteq> moebius_pt M v
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
moebius_pt M u \<noteq> moebius_pt M v

goal (5 subgoals):
 1. moebius_pt M u \<in> unit_disc
 2. moebius_pt M v \<in> unit_disc
 3. moebius_pt M u \<in> circline_set (moebius_circline M (poincare_line u v))
 4. moebius_pt M v \<in> circline_set (moebius_circline M (poincare_line u v))
 5. is_poincare_line (moebius_circline M (poincare_line u v))
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (5 subgoals):
 1. moebius_pt M u \<in> unit_disc
 2. moebius_pt M v \<in> unit_disc
 3. moebius_pt M u \<in> circline_set (moebius_circline M (poincare_line u v))
 4. moebius_pt M v \<in> circline_set (moebius_circline M (poincare_line u v))
 5. is_poincare_line (moebius_circline M (poincare_line u v))
[PROOF STEP]
show "moebius_pt M u \<in> circline_set (moebius_circline M (poincare_line u v))"
       "moebius_pt M v \<in> circline_set (moebius_circline M (poincare_line u v))"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. moebius_pt M u \<in> circline_set (moebius_circline M (poincare_line u v)) &&& moebius_pt M v \<in> circline_set (moebius_circline M (poincare_line u v))
[PROOF STEP]
unfolding circline_set_def
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. moebius_pt M u \<in> Collect (on_circline (moebius_circline M (poincare_line u v))) &&& moebius_pt M v \<in> Collect (on_circline (moebius_circline M (poincare_line u v)))
[PROOF STEP]
using moebius_circline[of M "poincare_line u v"] \<open>u \<noteq> v\<close>
[PROOF STATE]
proof (prove)
using this:
{z. on_circline (moebius_circline M (poincare_line u v)) z} = moebius_pt M ` {z. on_circline (poincare_line u v) z}
u \<noteq> v

goal (1 subgoal):
 1. moebius_pt M u \<in> Collect (on_circline (moebius_circline M (poincare_line u v))) &&& moebius_pt M v \<in> Collect (on_circline (moebius_circline M (poincare_line u v)))
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
moebius_pt M u \<in> circline_set (moebius_circline M (poincare_line u v))
moebius_pt M v \<in> circline_set (moebius_circline M (poincare_line u v))

goal (3 subgoals):
 1. moebius_pt M u \<in> unit_disc
 2. moebius_pt M v \<in> unit_disc
 3. is_poincare_line (moebius_circline M (poincare_line u v))
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (3 subgoals):
 1. moebius_pt M u \<in> unit_disc
 2. moebius_pt M v \<in> unit_disc
 3. is_poincare_line (moebius_circline M (poincare_line u v))
[PROOF STEP]
from assms(1)
[PROOF STATE]
proof (chain)
picking this:
unit_disc_fix M
[PROOF STEP]
have "unit_circle_fix M"
[PROOF STATE]
proof (prove)
using this:
unit_disc_fix M

goal (1 subgoal):
 1. unit_circle_fix M
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
unit_circle_fix M

goal (3 subgoals):
 1. moebius_pt M u \<in> unit_disc
 2. moebius_pt M v \<in> unit_disc
 3. is_poincare_line (moebius_circline M (poincare_line u v))
[PROOF STEP]
thus "is_poincare_line (moebius_circline M (poincare_line u v))"
[PROOF STATE]
proof (prove)
using this:
unit_circle_fix M

goal (1 subgoal):
 1. is_poincare_line (moebius_circline M (poincare_line u v))
[PROOF STEP]
using unit_circle_fix_preserve_is_poincare_line assms
[PROOF STATE]
proof (prove)
using this:
unit_circle_fix M
\<lbrakk>unit_circle_fix ?M; is_poincare_line ?H\<rbrakk> \<Longrightarrow> is_poincare_line (moebius_circline ?M ?H)
unit_disc_fix M
u \<in> unit_disc
v \<in> unit_disc
u \<noteq> v

goal (1 subgoal):
 1. is_poincare_line (moebius_circline M (poincare_line u v))
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
is_poincare_line (moebius_circline M (poincare_line u v))

goal (2 subgoals):
 1. moebius_pt M u \<in> unit_disc
 2. moebius_pt M v \<in> unit_disc
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (2 subgoals):
 1. moebius_pt M u \<in> unit_disc
 2. moebius_pt M v \<in> unit_disc
[PROOF STEP]
show "moebius_pt M u \<in> unit_disc" "moebius_pt M v \<in> unit_disc"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. moebius_pt M u \<in> unit_disc &&& moebius_pt M v \<in> unit_disc
[PROOF STEP]
using assms(2-3) unit_disc_fix_iff[OF assms(1)]
[PROOF STATE]
proof (prove)
using this:
u \<in> unit_disc
v \<in> unit_disc
moebius_pt M ` unit_disc = unit_disc

goal (1 subgoal):
 1. moebius_pt M u \<in> unit_disc &&& moebius_pt M v \<in> unit_disc
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
moebius_pt M u \<in> unit_disc
moebius_pt M v \<in> unit_disc

goal:
No subgoals!
[PROOF STEP]
qed


[STATEMENT]
lemma downset_set_prop: "\<Down> = Union \<circ> (`) \<down>"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<Down> = \<Union> \<circ> (`) \<down>
[PROOF STEP]
unfolding downset_set_def downset_def fun_eq_iff
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<forall>x. {y. Bex x ((\<le>) y)} = (\<Union> \<circ> (`) ((\<lambda>X. {y. Bex X ((\<le>) y)}) \<circ> (\<lambda>x. {x}))) x
[PROOF STEP]
by fastforce


[STATEMENT]
lemma disjointify_semialg:
  assumes "finite As"
  assumes "As \<subseteq> semialg_sets n"
  shows "disjointify As \<subseteq> semialg_sets n"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. disjointify As \<subseteq> semialg_sets n
[PROOF STEP]
using assms
[PROOF STATE]
proof (prove)
using this:
finite As
As \<subseteq> semialg_sets n

goal (1 subgoal):
 1. disjointify As \<subseteq> semialg_sets n
[PROOF STEP]
unfolding semialg_sets_def
[PROOF STATE]
proof (prove)
using this:
finite As
As \<subseteq> gen_boolean_algebra (carrier (Q\<^sub>p\<^bsup>n\<^esup>)) (Collect (is_basic_semialg n))

goal (1 subgoal):
 1. disjointify As \<subseteq> gen_boolean_algebra (carrier (Q\<^sub>p\<^bsup>n\<^esup>)) (Collect (is_basic_semialg n))
[PROOF STEP]
by (simp add: disjointify_gen_boolean_algebra)


[STATEMENT]
lemma ideal_points_different:
  assumes "u \<in> unit_disc" "v \<in> unit_disc" "u \<noteq> v"
  assumes "ideal_points (poincare_line u v) = {i1, i2}"
  shows "i1 \<noteq> i2" "u \<noteq> i1" "u \<noteq> i2" "v \<noteq> i1" "v \<noteq> i2"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (i1 \<noteq> i2 &&& u \<noteq> i1) &&& u \<noteq> i2 &&& v \<noteq> i1 &&& v \<noteq> i2
[PROOF STEP]
proof-
[PROOF STATE]
proof (state)
goal (5 subgoals):
 1. i1 \<noteq> i2
 2. u \<noteq> i1
 3. u \<noteq> i2
 4. v \<noteq> i1
 5. v \<noteq> i2
[PROOF STEP]
have "i1 \<in> ocircline_set ounit_circle" "i2 \<in> ocircline_set ounit_circle"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. i1 \<in> ocircline_set ounit_circle &&& i2 \<in> ocircline_set ounit_circle
[PROOF STEP]
using assms(3) assms(4) ideal_points_on_unit_circle is_poincare_line_poincare_line
[PROOF STATE]
proof (prove)
using this:
u \<noteq> v
ideal_points (poincare_line u v) = {i1, i2}
\<forall>z\<in>ideal_points ?H. z \<in> circline_set unit_circle
?z \<noteq> ?w \<Longrightarrow> is_poincare_line (poincare_line ?z ?w)

goal (1 subgoal):
 1. i1 \<in> ocircline_set ounit_circle &&& i2 \<in> ocircline_set ounit_circle
[PROOF STEP]
by fastforce+
[PROOF STATE]
proof (state)
this:
i1 \<in> ocircline_set ounit_circle
i2 \<in> ocircline_set ounit_circle

goal (5 subgoals):
 1. i1 \<noteq> i2
 2. u \<noteq> i1
 3. u \<noteq> i2
 4. v \<noteq> i1
 5. v \<noteq> i2
[PROOF STEP]
thus "u \<noteq> i1" "u \<noteq> i2" "v \<noteq> i1" "v \<noteq> i2"
[PROOF STATE]
proof (prove)
using this:
i1 \<in> ocircline_set ounit_circle
i2 \<in> ocircline_set ounit_circle

goal (1 subgoal):
 1. (u \<noteq> i1 &&& u \<noteq> i2) &&& v \<noteq> i1 &&& v \<noteq> i2
[PROOF STEP]
using assms(1-2)
[PROOF STATE]
proof (prove)
using this:
i1 \<in> ocircline_set ounit_circle
i2 \<in> ocircline_set ounit_circle
u \<in> unit_disc
v \<in> unit_disc

goal (1 subgoal):
 1. (u \<noteq> i1 &&& u \<noteq> i2) &&& v \<noteq> i1 &&& v \<noteq> i2
[PROOF STEP]
using disc_inter_ocircline_set[of ounit_circle]
[PROOF STATE]
proof (prove)
using this:
i1 \<in> ocircline_set ounit_circle
i2 \<in> ocircline_set ounit_circle
u \<in> unit_disc
v \<in> unit_disc
disc ounit_circle \<inter> ocircline_set ounit_circle = {}

goal (1 subgoal):
 1. (u \<noteq> i1 &&& u \<noteq> i2) &&& v \<noteq> i1 &&& v \<noteq> i2
[PROOF STEP]
unfolding unit_disc_def
[PROOF STATE]
proof (prove)
using this:
i1 \<in> ocircline_set ounit_circle
i2 \<in> ocircline_set ounit_circle
u \<in> disc ounit_circle
v \<in> disc ounit_circle
disc ounit_circle \<inter> ocircline_set ounit_circle = {}

goal (1 subgoal):
 1. (u \<noteq> i1 &&& u \<noteq> i2) &&& v \<noteq> i1 &&& v \<noteq> i2
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
u \<noteq> i1
u \<noteq> i2
v \<noteq> i1
v \<noteq> i2

goal (1 subgoal):
 1. i1 \<noteq> i2
[PROOF STEP]
show "i1 \<noteq> i2"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. i1 \<noteq> i2
[PROOF STEP]
using assms
[PROOF STATE]
proof (prove)
using this:
u \<in> unit_disc
v \<in> unit_disc
u \<noteq> v
ideal_points (poincare_line u v) = {i1, i2}

goal (1 subgoal):
 1. i1 \<noteq> i2
[PROOF STEP]
by (metis doubleton_eq_iff is_poincare_line_poincare_line obtain_ideal_points)
[PROOF STATE]
proof (state)
this:
i1 \<noteq> i2

goal:
No subgoals!
[PROOF STEP]
qed


[STATEMENT]
lemma Zfun_norm_iff: "Zfun (\<lambda>x. norm (f x)) F = Zfun (\<lambda>x. f x) F"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. Zfun (\<lambda>x. norm (f x)) F = Zfun f F
[PROOF STEP]
unfolding Zfun_def
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (\<forall>r>0. \<forall>\<^sub>F x in F. norm (norm (f x)) < r) = (\<forall>r>0. \<forall>\<^sub>F x in F. norm (f x) < r)
[PROOF STEP]
by simp


[STATEMENT]
lemma ball_subset_imp_ball: "\<lbrakk> \<forall>x\<in>B. P x; A \<subseteq> B \<rbrakk> \<Longrightarrow> \<forall>x\<in>A. P x"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<lbrakk>\<forall>x\<in>B. P x; A \<subseteq> B\<rbrakk> \<Longrightarrow> \<forall>x\<in>A. P x
[PROOF STEP]
by blast


[STATEMENT]
lemma negated_euclidean_axiom':
  shows "\<exists> a b c.
           a \<in> unit_disc \<and> b \<in> unit_disc \<and> c \<in> unit_disc \<and> \<not>(poincare_collinear {a, b, c})  \<and>
                \<not>(\<exists> x. x \<in> unit_disc \<and>
                  poincare_distance a x = poincare_distance b x \<and>
                  poincare_distance a x = poincare_distance c x)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<exists>a b c. a \<in> unit_disc \<and> b \<in> unit_disc \<and> c \<in> unit_disc \<and> \<not> poincare_collinear {a, b, c} \<and> (\<nexists>x. x \<in> unit_disc \<and> poincare_distance a x = poincare_distance b x \<and> poincare_distance a x = poincare_distance c x)
[PROOF STEP]
proof-
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. \<exists>a b c. a \<in> unit_disc \<and> b \<in> unit_disc \<and> c \<in> unit_disc \<and> \<not> poincare_collinear {a, b, c} \<and> (\<nexists>x. x \<in> unit_disc \<and> poincare_distance a x = poincare_distance b x \<and> poincare_distance a x = poincare_distance c x)
[PROOF STEP]
let ?a = "of_complex (\<i>/2)"
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. \<exists>a b c. a \<in> unit_disc \<and> b \<in> unit_disc \<and> c \<in> unit_disc \<and> \<not> poincare_collinear {a, b, c} \<and> (\<nexists>x. x \<in> unit_disc \<and> poincare_distance a x = poincare_distance b x \<and> poincare_distance a x = poincare_distance c x)
[PROOF STEP]
let ?b = "of_complex (-\<i>/2)"
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. \<exists>a b c. a \<in> unit_disc \<and> b \<in> unit_disc \<and> c \<in> unit_disc \<and> \<not> poincare_collinear {a, b, c} \<and> (\<nexists>x. x \<in> unit_disc \<and> poincare_distance a x = poincare_distance b x \<and> poincare_distance a x = poincare_distance c x)
[PROOF STEP]
let ?c = "of_complex (1/5)"
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. \<exists>a b c. a \<in> unit_disc \<and> b \<in> unit_disc \<and> c \<in> unit_disc \<and> \<not> poincare_collinear {a, b, c} \<and> (\<nexists>x. x \<in> unit_disc \<and> poincare_distance a x = poincare_distance b x \<and> poincare_distance a x = poincare_distance c x)
[PROOF STEP]
have "(\<i>/2) \<noteq> (-\<i>/2)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<i> / 2 \<noteq> - \<i> / 2
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
\<i> / 2 \<noteq> - \<i> / 2

goal (1 subgoal):
 1. \<exists>a b c. a \<in> unit_disc \<and> b \<in> unit_disc \<and> c \<in> unit_disc \<and> \<not> poincare_collinear {a, b, c} \<and> (\<nexists>x. x \<in> unit_disc \<and> poincare_distance a x = poincare_distance b x \<and> poincare_distance a x = poincare_distance c x)
[PROOF STEP]
hence "?a \<noteq> ?b"
[PROOF STATE]
proof (prove)
using this:
\<i> / 2 \<noteq> - \<i> / 2

goal (1 subgoal):
 1. of_complex (\<i> / 2) \<noteq> of_complex (- \<i> / 2)
[PROOF STEP]
by (metis to_complex_of_complex)
[PROOF STATE]
proof (state)
this:
of_complex (\<i> / 2) \<noteq> of_complex (- \<i> / 2)

goal (1 subgoal):
 1. \<exists>a b c. a \<in> unit_disc \<and> b \<in> unit_disc \<and> c \<in> unit_disc \<and> \<not> poincare_collinear {a, b, c} \<and> (\<nexists>x. x \<in> unit_disc \<and> poincare_distance a x = poincare_distance b x \<and> poincare_distance a x = poincare_distance c x)
[PROOF STEP]
have "(\<i>/2) \<noteq> (1/5)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<i> / 2 \<noteq> 1 / 5
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
\<i> / 2 \<noteq> 1 / 5

goal (1 subgoal):
 1. \<exists>a b c. a \<in> unit_disc \<and> b \<in> unit_disc \<and> c \<in> unit_disc \<and> \<not> poincare_collinear {a, b, c} \<and> (\<nexists>x. x \<in> unit_disc \<and> poincare_distance a x = poincare_distance b x \<and> poincare_distance a x = poincare_distance c x)
[PROOF STEP]
hence "?a \<noteq> ?c"
[PROOF STATE]
proof (prove)
using this:
\<i> / 2 \<noteq> 1 / 5

goal (1 subgoal):
 1. of_complex (\<i> / 2) \<noteq> of_complex (1 / 5)
[PROOF STEP]
by (metis to_complex_of_complex)
[PROOF STATE]
proof (state)
this:
of_complex (\<i> / 2) \<noteq> of_complex (1 / 5)

goal (1 subgoal):
 1. \<exists>a b c. a \<in> unit_disc \<and> b \<in> unit_disc \<and> c \<in> unit_disc \<and> \<not> poincare_collinear {a, b, c} \<and> (\<nexists>x. x \<in> unit_disc \<and> poincare_distance a x = poincare_distance b x \<and> poincare_distance a x = poincare_distance c x)
[PROOF STEP]
have "(-\<i>/2) \<noteq> (1/5)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. - \<i> / 2 \<noteq> 1 / 5
[PROOF STEP]
by (simp add: minus_equation_iff)
[PROOF STATE]
proof (state)
this:
- \<i> / 2 \<noteq> 1 / 5

goal (1 subgoal):
 1. \<exists>a b c. a \<in> unit_disc \<and> b \<in> unit_disc \<and> c \<in> unit_disc \<and> \<not> poincare_collinear {a, b, c} \<and> (\<nexists>x. x \<in> unit_disc \<and> poincare_distance a x = poincare_distance b x \<and> poincare_distance a x = poincare_distance c x)
[PROOF STEP]
hence "?b \<noteq> ?c"
[PROOF STATE]
proof (prove)
using this:
- \<i> / 2 \<noteq> 1 / 5

goal (1 subgoal):
 1. of_complex (- \<i> / 2) \<noteq> of_complex (1 / 5)
[PROOF STEP]
by (metis to_complex_of_complex)
[PROOF STATE]
proof (state)
this:
of_complex (- \<i> / 2) \<noteq> of_complex (1 / 5)

goal (1 subgoal):
 1. \<exists>a b c. a \<in> unit_disc \<and> b \<in> unit_disc \<and> c \<in> unit_disc \<and> \<not> poincare_collinear {a, b, c} \<and> (\<nexists>x. x \<in> unit_disc \<and> poincare_distance a x = poincare_distance b x \<and> poincare_distance a x = poincare_distance c x)
[PROOF STEP]
have "?a \<in> unit_disc" "?b \<in> unit_disc" "?c \<in> unit_disc"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. of_complex (\<i> / 2) \<in> unit_disc &&& of_complex (- \<i> / 2) \<in> unit_disc &&& of_complex (1 / 5) \<in> unit_disc
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
of_complex (\<i> / 2) \<in> unit_disc
of_complex (- \<i> / 2) \<in> unit_disc
of_complex (1 / 5) \<in> unit_disc

goal (1 subgoal):
 1. \<exists>a b c. a \<in> unit_disc \<and> b \<in> unit_disc \<and> c \<in> unit_disc \<and> \<not> poincare_collinear {a, b, c} \<and> (\<nexists>x. x \<in> unit_disc \<and> poincare_distance a x = poincare_distance b x \<and> poincare_distance a x = poincare_distance c x)
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
of_complex (\<i> / 2) \<in> unit_disc
of_complex (- \<i> / 2) \<in> unit_disc
of_complex (1 / 5) \<in> unit_disc

goal (1 subgoal):
 1. \<exists>a b c. a \<in> unit_disc \<and> b \<in> unit_disc \<and> c \<in> unit_disc \<and> \<not> poincare_collinear {a, b, c} \<and> (\<nexists>x. x \<in> unit_disc \<and> poincare_distance a x = poincare_distance b x \<and> poincare_distance a x = poincare_distance c x)
[PROOF STEP]
have "\<not>(poincare_collinear {?a, ?b, ?c})"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<not> poincare_collinear {of_complex (\<i> / 2), of_complex (- \<i> / 2), of_complex (1 / 5)}
[PROOF STEP]
unfolding poincare_collinear_def
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<nexists>p. is_poincare_line p \<and> {of_complex (\<i> / 2), of_complex (- \<i> / 2), of_complex (1 / 5)} \<subseteq> circline_set p
[PROOF STEP]
proof(rule ccontr)
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. \<not> (\<nexists>p. is_poincare_line p \<and> {of_complex (\<i> / 2), of_complex (- \<i> / 2), of_complex (1 / 5)} \<subseteq> circline_set p) \<Longrightarrow> False
[PROOF STEP]
assume " \<not> (\<nexists>p. is_poincare_line p \<and> {?a, ?b, ?c} \<subseteq> circline_set p)"
[PROOF STATE]
proof (state)
this:
\<not> (\<nexists>p. is_poincare_line p \<and> {of_complex (\<i> / 2), of_complex (- \<i> / 2), of_complex (1 / 5)} \<subseteq> circline_set p)

goal (1 subgoal):
 1. \<not> (\<nexists>p. is_poincare_line p \<and> {of_complex (\<i> / 2), of_complex (- \<i> / 2), of_complex (1 / 5)} \<subseteq> circline_set p) \<Longrightarrow> False
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
\<not> (\<nexists>p. is_poincare_line p \<and> {of_complex (\<i> / 2), of_complex (- \<i> / 2), of_complex (1 / 5)} \<subseteq> circline_set p)
[PROOF STEP]
obtain p where "is_poincare_line p \<and> {?a, ?b, ?c} \<subseteq> circline_set p"
[PROOF STATE]
proof (prove)
using this:
\<not> (\<nexists>p. is_poincare_line p \<and> {of_complex (\<i> / 2), of_complex (- \<i> / 2), of_complex (1 / 5)} \<subseteq> circline_set p)

goal (1 subgoal):
 1. (\<And>p. is_poincare_line p \<and> {of_complex (\<i> / 2), of_complex (- \<i> / 2), of_complex (1 / 5)} \<subseteq> circline_set p \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
is_poincare_line p \<and> {of_complex (\<i> / 2), of_complex (- \<i> / 2), of_complex (1 / 5)} \<subseteq> circline_set p

goal (1 subgoal):
 1. \<not> (\<nexists>p. is_poincare_line p \<and> {of_complex (\<i> / 2), of_complex (- \<i> / 2), of_complex (1 / 5)} \<subseteq> circline_set p) \<Longrightarrow> False
[PROOF STEP]
let ?ab = "poincare_line ?a ?b"
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. \<not> (\<nexists>p. is_poincare_line p \<and> {of_complex (\<i> / 2), of_complex (- \<i> / 2), of_complex (1 / 5)} \<subseteq> circline_set p) \<Longrightarrow> False
[PROOF STEP]
have "p = ?ab"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. p = poincare_line (of_complex (\<i> / 2)) (of_complex (- \<i> / 2))
[PROOF STEP]
using \<open>is_poincare_line p \<and> {?a, ?b, ?c} \<subseteq> circline_set p\<close>
[PROOF STATE]
proof (prove)
using this:
is_poincare_line p \<and> {of_complex (\<i> / 2), of_complex (- \<i> / 2), of_complex (1 / 5)} \<subseteq> circline_set p

goal (1 subgoal):
 1. p = poincare_line (of_complex (\<i> / 2)) (of_complex (- \<i> / 2))
[PROOF STEP]
using unique_poincare_line[of ?a ?b] \<open>?a \<noteq> ?b\<close> \<open>?a \<in> unit_disc\<close> \<open>?b \<in> unit_disc\<close>
[PROOF STATE]
proof (prove)
using this:
is_poincare_line p \<and> {of_complex (\<i> / 2), of_complex (- \<i> / 2), of_complex (1 / 5)} \<subseteq> circline_set p
\<lbrakk>of_complex (\<i> / 2) \<noteq> of_complex (- \<i> / 2); of_complex (\<i> / 2) \<in> unit_disc; of_complex (- \<i> / 2) \<in> unit_disc; of_complex (\<i> / 2) \<in> circline_set ?l; of_complex (- \<i> / 2) \<in> circline_set ?l; is_poincare_line ?l\<rbrakk> \<Longrightarrow> ?l = poincare_line (of_complex (\<i> / 2)) (of_complex (- \<i> / 2))
of_complex (\<i> / 2) \<noteq> of_complex (- \<i> / 2)
of_complex (\<i> / 2) \<in> unit_disc
of_complex (- \<i> / 2) \<in> unit_disc

goal (1 subgoal):
 1. p = poincare_line (of_complex (\<i> / 2)) (of_complex (- \<i> / 2))
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
p = poincare_line (of_complex (\<i> / 2)) (of_complex (- \<i> / 2))

goal (1 subgoal):
 1. \<not> (\<nexists>p. is_poincare_line p \<and> {of_complex (\<i> / 2), of_complex (- \<i> / 2), of_complex (1 / 5)} \<subseteq> circline_set p) \<Longrightarrow> False
[PROOF STEP]
have "?c \<notin> circline_set ?ab"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. of_complex (1 / 5) \<notin> circline_set (poincare_line (of_complex (\<i> / 2)) (of_complex (- \<i> / 2)))
[PROOF STEP]
proof(rule ccontr)
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. \<not> of_complex (1 / 5) \<notin> circline_set (poincare_line (of_complex (\<i> / 2)) (of_complex (- \<i> / 2))) \<Longrightarrow> False
[PROOF STEP]
assume "\<not> ?c \<notin> circline_set ?ab"
[PROOF STATE]
proof (state)
this:
\<not> of_complex (1 / 5) \<notin> circline_set (poincare_line (of_complex (\<i> / 2)) (of_complex (- \<i> / 2)))

goal (1 subgoal):
 1. \<not> of_complex (1 / 5) \<notin> circline_set (poincare_line (of_complex (\<i> / 2)) (of_complex (- \<i> / 2))) \<Longrightarrow> False
[PROOF STEP]
have "poincare_between ?a 0\<^sub>h ?b"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. poincare_between (of_complex (\<i> / 2)) 0\<^sub>h (of_complex (- \<i> / 2))
[PROOF STEP]
unfolding poincare_between_def
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. of_complex (\<i> / 2) = 0\<^sub>h \<or> 0\<^sub>h = of_complex (- \<i> / 2) \<or> (let cr = cross_ratio (of_complex (\<i> / 2)) 0\<^sub>h (of_complex (- \<i> / 2)) (inversion 0\<^sub>h) in is_real (to_complex cr) \<and> Re (to_complex cr) < 0)
[PROOF STEP]
using cross_ratio_0inf
[PROOF STATE]
proof (prove)
using this:
?y \<noteq> 0 \<Longrightarrow> cross_ratio (of_complex ?x) 0\<^sub>h (of_complex ?y) \<infinity>\<^sub>h = of_complex (?x / ?y)

goal (1 subgoal):
 1. of_complex (\<i> / 2) = 0\<^sub>h \<or> 0\<^sub>h = of_complex (- \<i> / 2) \<or> (let cr = cross_ratio (of_complex (\<i> / 2)) 0\<^sub>h (of_complex (- \<i> / 2)) (inversion 0\<^sub>h) in is_real (to_complex cr) \<and> Re (to_complex cr) < 0)
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
poincare_between (of_complex (\<i> / 2)) 0\<^sub>h (of_complex (- \<i> / 2))

goal (1 subgoal):
 1. \<not> of_complex (1 / 5) \<notin> circline_set (poincare_line (of_complex (\<i> / 2)) (of_complex (- \<i> / 2))) \<Longrightarrow> False
[PROOF STEP]
hence "0\<^sub>h \<in> circline_set ?ab"
[PROOF STATE]
proof (prove)
using this:
poincare_between (of_complex (\<i> / 2)) 0\<^sub>h (of_complex (- \<i> / 2))

goal (1 subgoal):
 1. 0\<^sub>h \<in> circline_set (poincare_line (of_complex (\<i> / 2)) (of_complex (- \<i> / 2)))
[PROOF STEP]
using \<open>?a \<noteq> ?b\<close> \<open>?a \<in> unit_disc\<close> \<open>?b \<in> unit_disc\<close>
[PROOF STATE]
proof (prove)
using this:
poincare_between (of_complex (\<i> / 2)) 0\<^sub>h (of_complex (- \<i> / 2))
of_complex (\<i> / 2) \<noteq> of_complex (- \<i> / 2)
of_complex (\<i> / 2) \<in> unit_disc
of_complex (- \<i> / 2) \<in> unit_disc

goal (1 subgoal):
 1. 0\<^sub>h \<in> circline_set (poincare_line (of_complex (\<i> / 2)) (of_complex (- \<i> / 2)))
[PROOF STEP]
using poincare_between_poincare_line_uzv zero_in_unit_disc
[PROOF STATE]
proof (prove)
using this:
poincare_between (of_complex (\<i> / 2)) 0\<^sub>h (of_complex (- \<i> / 2))
of_complex (\<i> / 2) \<noteq> of_complex (- \<i> / 2)
of_complex (\<i> / 2) \<in> unit_disc
of_complex (- \<i> / 2) \<in> unit_disc
\<lbrakk>?u \<noteq> ?v; ?u \<in> unit_disc; ?v \<in> unit_disc; ?z \<in> unit_disc; poincare_between ?u ?z ?v\<rbrakk> \<Longrightarrow> ?z \<in> circline_set (poincare_line ?u ?v)
0\<^sub>h \<in> unit_disc

goal (1 subgoal):
 1. 0\<^sub>h \<in> circline_set (poincare_line (of_complex (\<i> / 2)) (of_complex (- \<i> / 2)))
[PROOF STEP]
by blast
[PROOF STATE]
proof (state)
this:
0\<^sub>h \<in> circline_set (poincare_line (of_complex (\<i> / 2)) (of_complex (- \<i> / 2)))

goal (1 subgoal):
 1. \<not> of_complex (1 / 5) \<notin> circline_set (poincare_line (of_complex (\<i> / 2)) (of_complex (- \<i> / 2))) \<Longrightarrow> False
[PROOF STEP]
hence "?ab = poincare_line 0\<^sub>h ?a"
[PROOF STATE]
proof (prove)
using this:
0\<^sub>h \<in> circline_set (poincare_line (of_complex (\<i> / 2)) (of_complex (- \<i> / 2)))

goal (1 subgoal):
 1. poincare_line (of_complex (\<i> / 2)) (of_complex (- \<i> / 2)) = poincare_line 0\<^sub>h (of_complex (\<i> / 2))
[PROOF STEP]
using unique_poincare_line[of ?a ?b] \<open>?a \<noteq> ?b\<close> \<open>?a \<in> unit_disc\<close> \<open>?b \<in> unit_disc\<close>
[PROOF STATE]
proof (prove)
using this:
0\<^sub>h \<in> circline_set (poincare_line (of_complex (\<i> / 2)) (of_complex (- \<i> / 2)))
\<lbrakk>of_complex (\<i> / 2) \<noteq> of_complex (- \<i> / 2); of_complex (\<i> / 2) \<in> unit_disc; of_complex (- \<i> / 2) \<in> unit_disc; of_complex (\<i> / 2) \<in> circline_set ?l; of_complex (- \<i> / 2) \<in> circline_set ?l; is_poincare_line ?l\<rbrakk> \<Longrightarrow> ?l = poincare_line (of_complex (\<i> / 2)) (of_complex (- \<i> / 2))
of_complex (\<i> / 2) \<noteq> of_complex (- \<i> / 2)
of_complex (\<i> / 2) \<in> unit_disc
of_complex (- \<i> / 2) \<in> unit_disc

goal (1 subgoal):
 1. poincare_line (of_complex (\<i> / 2)) (of_complex (- \<i> / 2)) = poincare_line 0\<^sub>h (of_complex (\<i> / 2))
[PROOF STEP]
using \<open>is_poincare_line p \<and> {?a, ?b, ?c} \<subseteq> circline_set p\<close>
[PROOF STATE]
proof (prove)
using this:
0\<^sub>h \<in> circline_set (poincare_line (of_complex (\<i> / 2)) (of_complex (- \<i> / 2)))
\<lbrakk>of_complex (\<i> / 2) \<noteq> of_complex (- \<i> / 2); of_complex (\<i> / 2) \<in> unit_disc; of_complex (- \<i> / 2) \<in> unit_disc; of_complex (\<i> / 2) \<in> circline_set ?l; of_complex (- \<i> / 2) \<in> circline_set ?l; is_poincare_line ?l\<rbrakk> \<Longrightarrow> ?l = poincare_line (of_complex (\<i> / 2)) (of_complex (- \<i> / 2))
of_complex (\<i> / 2) \<noteq> of_complex (- \<i> / 2)
of_complex (\<i> / 2) \<in> unit_disc
of_complex (- \<i> / 2) \<in> unit_disc
is_poincare_line p \<and> {of_complex (\<i> / 2), of_complex (- \<i> / 2), of_complex (1 / 5)} \<subseteq> circline_set p

goal (1 subgoal):
 1. poincare_line (of_complex (\<i> / 2)) (of_complex (- \<i> / 2)) = poincare_line 0\<^sub>h (of_complex (\<i> / 2))
[PROOF STEP]
using \<open>p = ?ab\<close> poincare_line_circline_set(1) unique_poincare_line
[PROOF STATE]
proof (prove)
using this:
0\<^sub>h \<in> circline_set (poincare_line (of_complex (\<i> / 2)) (of_complex (- \<i> / 2)))
\<lbrakk>of_complex (\<i> / 2) \<noteq> of_complex (- \<i> / 2); of_complex (\<i> / 2) \<in> unit_disc; of_complex (- \<i> / 2) \<in> unit_disc; of_complex (\<i> / 2) \<in> circline_set ?l; of_complex (- \<i> / 2) \<in> circline_set ?l; is_poincare_line ?l\<rbrakk> \<Longrightarrow> ?l = poincare_line (of_complex (\<i> / 2)) (of_complex (- \<i> / 2))
of_complex (\<i> / 2) \<noteq> of_complex (- \<i> / 2)
of_complex (\<i> / 2) \<in> unit_disc
of_complex (- \<i> / 2) \<in> unit_disc
is_poincare_line p \<and> {of_complex (\<i> / 2), of_complex (- \<i> / 2), of_complex (1 / 5)} \<subseteq> circline_set p
p = poincare_line (of_complex (\<i> / 2)) (of_complex (- \<i> / 2))
?z \<noteq> ?w \<Longrightarrow> ?z \<in> circline_set (poincare_line ?z ?w)
\<lbrakk>?u \<noteq> ?v; ?u \<in> unit_disc; ?v \<in> unit_disc; ?u \<in> circline_set ?l; ?v \<in> circline_set ?l; is_poincare_line ?l\<rbrakk> \<Longrightarrow> ?l = poincare_line ?u ?v

goal (1 subgoal):
 1. poincare_line (of_complex (\<i> / 2)) (of_complex (- \<i> / 2)) = poincare_line 0\<^sub>h (of_complex (\<i> / 2))
[PROOF STEP]
by (metis add.inverse_neutral divide_minus_left of_complex_zero_iff  zero_in_unit_disc)
[PROOF STATE]
proof (state)
this:
poincare_line (of_complex (\<i> / 2)) (of_complex (- \<i> / 2)) = poincare_line 0\<^sub>h (of_complex (\<i> / 2))

goal (1 subgoal):
 1. \<not> of_complex (1 / 5) \<notin> circline_set (poincare_line (of_complex (\<i> / 2)) (of_complex (- \<i> / 2))) \<Longrightarrow> False
[PROOF STEP]
hence "(\<i>/2) * cnj(1/5) = cnj(\<i>/2) * (1/5)"
[PROOF STATE]
proof (prove)
using this:
poincare_line (of_complex (\<i> / 2)) (of_complex (- \<i> / 2)) = poincare_line 0\<^sub>h (of_complex (\<i> / 2))

goal (1 subgoal):
 1. \<i> / 2 * cnj (1 / 5) = cnj (\<i> / 2) * (1 / 5)
[PROOF STEP]
using poincare_collinear_zero_iff[of "(\<i>/2)" "(1/5)"]
[PROOF STATE]
proof (prove)
using this:
poincare_line (of_complex (\<i> / 2)) (of_complex (- \<i> / 2)) = poincare_line 0\<^sub>h (of_complex (\<i> / 2))
\<lbrakk>of_complex (\<i> / 2) \<in> unit_disc; of_complex (1 / 5) \<in> unit_disc; \<i> / 2 \<noteq> 1 / 5; \<i> / 2 \<noteq> 0; 1 / 5 \<noteq> 0\<rbrakk> \<Longrightarrow> poincare_collinear {0\<^sub>h, of_complex (\<i> / 2), of_complex (1 / 5)} = (\<i> / 2 * cnj (1 / 5) = cnj (\<i> / 2) * (1 / 5))

goal (1 subgoal):
 1. \<i> / 2 * cnj (1 / 5) = cnj (\<i> / 2) * (1 / 5)
[PROOF STEP]
using \<open>?a \<noteq> ?c\<close> \<open>\<not> ?c \<notin> circline_set ?ab\<close> \<open>?a \<in> unit_disc\<close> \<open>?c \<in> unit_disc\<close> \<open>p = ?ab\<close>
[PROOF STATE]
proof (prove)
using this:
poincare_line (of_complex (\<i> / 2)) (of_complex (- \<i> / 2)) = poincare_line 0\<^sub>h (of_complex (\<i> / 2))
\<lbrakk>of_complex (\<i> / 2) \<in> unit_disc; of_complex (1 / 5) \<in> unit_disc; \<i> / 2 \<noteq> 1 / 5; \<i> / 2 \<noteq> 0; 1 / 5 \<noteq> 0\<rbrakk> \<Longrightarrow> poincare_collinear {0\<^sub>h, of_complex (\<i> / 2), of_complex (1 / 5)} = (\<i> / 2 * cnj (1 / 5) = cnj (\<i> / 2) * (1 / 5))
of_complex (\<i> / 2) \<noteq> of_complex (1 / 5)
\<not> of_complex (1 / 5) \<notin> circline_set (poincare_line (of_complex (\<i> / 2)) (of_complex (- \<i> / 2)))
of_complex (\<i> / 2) \<in> unit_disc
of_complex (1 / 5) \<in> unit_disc
p = poincare_line (of_complex (\<i> / 2)) (of_complex (- \<i> / 2))

goal (1 subgoal):
 1. \<i> / 2 * cnj (1 / 5) = cnj (\<i> / 2) * (1 / 5)
[PROOF STEP]
using \<open>0\<^sub>h \<in> circline_set ?ab\<close> \<open>is_poincare_line p \<and> {?a, ?b, ?c} \<subseteq> circline_set p\<close>
[PROOF STATE]
proof (prove)
using this:
poincare_line (of_complex (\<i> / 2)) (of_complex (- \<i> / 2)) = poincare_line 0\<^sub>h (of_complex (\<i> / 2))
\<lbrakk>of_complex (\<i> / 2) \<in> unit_disc; of_complex (1 / 5) \<in> unit_disc; \<i> / 2 \<noteq> 1 / 5; \<i> / 2 \<noteq> 0; 1 / 5 \<noteq> 0\<rbrakk> \<Longrightarrow> poincare_collinear {0\<^sub>h, of_complex (\<i> / 2), of_complex (1 / 5)} = (\<i> / 2 * cnj (1 / 5) = cnj (\<i> / 2) * (1 / 5))
of_complex (\<i> / 2) \<noteq> of_complex (1 / 5)
\<not> of_complex (1 / 5) \<notin> circline_set (poincare_line (of_complex (\<i> / 2)) (of_complex (- \<i> / 2)))
of_complex (\<i> / 2) \<in> unit_disc
of_complex (1 / 5) \<in> unit_disc
p = poincare_line (of_complex (\<i> / 2)) (of_complex (- \<i> / 2))
0\<^sub>h \<in> circline_set (poincare_line (of_complex (\<i> / 2)) (of_complex (- \<i> / 2)))
is_poincare_line p \<and> {of_complex (\<i> / 2), of_complex (- \<i> / 2), of_complex (1 / 5)} \<subseteq> circline_set p

goal (1 subgoal):
 1. \<i> / 2 * cnj (1 / 5) = cnj (\<i> / 2) * (1 / 5)
[PROOF STEP]
using poincare_collinear_def
[PROOF STATE]
proof (prove)
using this:
poincare_line (of_complex (\<i> / 2)) (of_complex (- \<i> / 2)) = poincare_line 0\<^sub>h (of_complex (\<i> / 2))
\<lbrakk>of_complex (\<i> / 2) \<in> unit_disc; of_complex (1 / 5) \<in> unit_disc; \<i> / 2 \<noteq> 1 / 5; \<i> / 2 \<noteq> 0; 1 / 5 \<noteq> 0\<rbrakk> \<Longrightarrow> poincare_collinear {0\<^sub>h, of_complex (\<i> / 2), of_complex (1 / 5)} = (\<i> / 2 * cnj (1 / 5) = cnj (\<i> / 2) * (1 / 5))
of_complex (\<i> / 2) \<noteq> of_complex (1 / 5)
\<not> of_complex (1 / 5) \<notin> circline_set (poincare_line (of_complex (\<i> / 2)) (of_complex (- \<i> / 2)))
of_complex (\<i> / 2) \<in> unit_disc
of_complex (1 / 5) \<in> unit_disc
p = poincare_line (of_complex (\<i> / 2)) (of_complex (- \<i> / 2))
0\<^sub>h \<in> circline_set (poincare_line (of_complex (\<i> / 2)) (of_complex (- \<i> / 2)))
is_poincare_line p \<and> {of_complex (\<i> / 2), of_complex (- \<i> / 2), of_complex (1 / 5)} \<subseteq> circline_set p
poincare_collinear ?S = (\<exists>p. is_poincare_line p \<and> ?S \<subseteq> circline_set p)

goal (1 subgoal):
 1. \<i> / 2 * cnj (1 / 5) = cnj (\<i> / 2) * (1 / 5)
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
\<i> / 2 * cnj (1 / 5) = cnj (\<i> / 2) * (1 / 5)

goal (1 subgoal):
 1. \<not> of_complex (1 / 5) \<notin> circline_set (poincare_line (of_complex (\<i> / 2)) (of_complex (- \<i> / 2))) \<Longrightarrow> False
[PROOF STEP]
thus False
[PROOF STATE]
proof (prove)
using this:
\<i> / 2 * cnj (1 / 5) = cnj (\<i> / 2) * (1 / 5)

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

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
of_complex (1 / 5) \<notin> circline_set (poincare_line (of_complex (\<i> / 2)) (of_complex (- \<i> / 2)))

goal (1 subgoal):
 1. \<not> (\<nexists>p. is_poincare_line p \<and> {of_complex (\<i> / 2), of_complex (- \<i> / 2), of_complex (1 / 5)} \<subseteq> circline_set p) \<Longrightarrow> False
[PROOF STEP]
thus False
[PROOF STATE]
proof (prove)
using this:
of_complex (1 / 5) \<notin> circline_set (poincare_line (of_complex (\<i> / 2)) (of_complex (- \<i> / 2)))

goal (1 subgoal):
 1. False
[PROOF STEP]
using \<open>p = ?ab\<close> \<open>is_poincare_line p \<and> {?a, ?b, ?c} \<subseteq> circline_set p\<close>
[PROOF STATE]
proof (prove)
using this:
of_complex (1 / 5) \<notin> circline_set (poincare_line (of_complex (\<i> / 2)) (of_complex (- \<i> / 2)))
p = poincare_line (of_complex (\<i> / 2)) (of_complex (- \<i> / 2))
is_poincare_line p \<and> {of_complex (\<i> / 2), of_complex (- \<i> / 2), of_complex (1 / 5)} \<subseteq> circline_set p

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

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
\<not> poincare_collinear {of_complex (\<i> / 2), of_complex (- \<i> / 2), of_complex (1 / 5)}

goal (1 subgoal):
 1. \<exists>a b c. a \<in> unit_disc \<and> b \<in> unit_disc \<and> c \<in> unit_disc \<and> \<not> poincare_collinear {a, b, c} \<and> (\<nexists>x. x \<in> unit_disc \<and> poincare_distance a x = poincare_distance b x \<and> poincare_distance a x = poincare_distance c x)
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
\<not> poincare_collinear {of_complex (\<i> / 2), of_complex (- \<i> / 2), of_complex (1 / 5)}

goal (1 subgoal):
 1. \<exists>a b c. a \<in> unit_disc \<and> b \<in> unit_disc \<and> c \<in> unit_disc \<and> \<not> poincare_collinear {a, b, c} \<and> (\<nexists>x. x \<in> unit_disc \<and> poincare_distance a x = poincare_distance b x \<and> poincare_distance a x = poincare_distance c x)
[PROOF STEP]
have "\<not>(\<exists> x. x \<in> unit_disc \<and>
                  poincare_distance ?a x = poincare_distance ?b x \<and>
                  poincare_distance ?a x = poincare_distance ?c x)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<nexists>x. x \<in> unit_disc \<and> poincare_distance (of_complex (\<i> / 2)) x = poincare_distance (of_complex (- \<i> / 2)) x \<and> poincare_distance (of_complex (\<i> / 2)) x = poincare_distance (of_complex (1 / 5)) x
[PROOF STEP]
proof(rule ccontr)
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. \<not> (\<nexists>x. x \<in> unit_disc \<and> poincare_distance (of_complex (\<i> / 2)) x = poincare_distance (of_complex (- \<i> / 2)) x \<and> poincare_distance (of_complex (\<i> / 2)) x = poincare_distance (of_complex (1 / 5)) x) \<Longrightarrow> False
[PROOF STEP]
assume "\<not> ?thesis"
[PROOF STATE]
proof (state)
this:
\<not> (\<nexists>x. x \<in> unit_disc \<and> poincare_distance (of_complex (\<i> / 2)) x = poincare_distance (of_complex (- \<i> / 2)) x \<and> poincare_distance (of_complex (\<i> / 2)) x = poincare_distance (of_complex (1 / 5)) x)

goal (1 subgoal):
 1. \<not> (\<nexists>x. x \<in> unit_disc \<and> poincare_distance (of_complex (\<i> / 2)) x = poincare_distance (of_complex (- \<i> / 2)) x \<and> poincare_distance (of_complex (\<i> / 2)) x = poincare_distance (of_complex (1 / 5)) x) \<Longrightarrow> False
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
\<not> (\<nexists>x. x \<in> unit_disc \<and> poincare_distance (of_complex (\<i> / 2)) x = poincare_distance (of_complex (- \<i> / 2)) x \<and> poincare_distance (of_complex (\<i> / 2)) x = poincare_distance (of_complex (1 / 5)) x)
[PROOF STEP]
obtain x where "x \<in> unit_disc" "poincare_distance ?a x = poincare_distance ?b x"
                        "poincare_distance ?a x = poincare_distance ?c x"
[PROOF STATE]
proof (prove)
using this:
\<not> (\<nexists>x. x \<in> unit_disc \<and> poincare_distance (of_complex (\<i> / 2)) x = poincare_distance (of_complex (- \<i> / 2)) x \<and> poincare_distance (of_complex (\<i> / 2)) x = poincare_distance (of_complex (1 / 5)) x)

goal (1 subgoal):
 1. (\<And>x. \<lbrakk>x \<in> unit_disc; poincare_distance (of_complex (\<i> / 2)) x = poincare_distance (of_complex (- \<i> / 2)) x; poincare_distance (of_complex (\<i> / 2)) x = poincare_distance (of_complex (1 / 5)) x\<rbrakk> \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by blast
[PROOF STATE]
proof (state)
this:
x \<in> unit_disc
poincare_distance (of_complex (\<i> / 2)) x = poincare_distance (of_complex (- \<i> / 2)) x
poincare_distance (of_complex (\<i> / 2)) x = poincare_distance (of_complex (1 / 5)) x

goal (1 subgoal):
 1. \<not> (\<nexists>x. x \<in> unit_disc \<and> poincare_distance (of_complex (\<i> / 2)) x = poincare_distance (of_complex (- \<i> / 2)) x \<and> poincare_distance (of_complex (\<i> / 2)) x = poincare_distance (of_complex (1 / 5)) x) \<Longrightarrow> False
[PROOF STEP]
let ?x = "to_complex x"
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. \<not> (\<nexists>x. x \<in> unit_disc \<and> poincare_distance (of_complex (\<i> / 2)) x = poincare_distance (of_complex (- \<i> / 2)) x \<and> poincare_distance (of_complex (\<i> / 2)) x = poincare_distance (of_complex (1 / 5)) x) \<Longrightarrow> False
[PROOF STEP]
have "poincare_distance_formula' (\<i>/2) ?x = poincare_distance_formula' (-\<i>/2) ?x"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. poincare_distance_formula' (\<i> / 2) (to_complex x) = poincare_distance_formula' (- \<i> / 2) (to_complex x)
[PROOF STEP]
using \<open>poincare_distance ?a x = poincare_distance ?b x\<close>
[PROOF STATE]
proof (prove)
using this:
poincare_distance (of_complex (\<i> / 2)) x = poincare_distance (of_complex (- \<i> / 2)) x

goal (1 subgoal):
 1. poincare_distance_formula' (\<i> / 2) (to_complex x) = poincare_distance_formula' (- \<i> / 2) (to_complex x)
[PROOF STEP]
using \<open>x \<in> unit_disc\<close> \<open>?a \<in> unit_disc\<close> \<open>?b \<in> unit_disc\<close>
[PROOF STATE]
proof (prove)
using this:
poincare_distance (of_complex (\<i> / 2)) x = poincare_distance (of_complex (- \<i> / 2)) x
x \<in> unit_disc
of_complex (\<i> / 2) \<in> unit_disc
of_complex (- \<i> / 2) \<in> unit_disc

goal (1 subgoal):
 1. poincare_distance_formula' (\<i> / 2) (to_complex x) = poincare_distance_formula' (- \<i> / 2) (to_complex x)
[PROOF STEP]
by (metis cosh_dist to_complex_of_complex)
[PROOF STATE]
proof (state)
this:
poincare_distance_formula' (\<i> / 2) (to_complex x) = poincare_distance_formula' (- \<i> / 2) (to_complex x)

goal (1 subgoal):
 1. \<not> (\<nexists>x. x \<in> unit_disc \<and> poincare_distance (of_complex (\<i> / 2)) x = poincare_distance (of_complex (- \<i> / 2)) x \<and> poincare_distance (of_complex (\<i> / 2)) x = poincare_distance (of_complex (1 / 5)) x) \<Longrightarrow> False
[PROOF STEP]
hence "(cmod (\<i> / 2 - ?x))\<^sup>2 = (cmod (- \<i> / 2 - ?x))\<^sup>2"
[PROOF STATE]
proof (prove)
using this:
poincare_distance_formula' (\<i> / 2) (to_complex x) = poincare_distance_formula' (- \<i> / 2) (to_complex x)

goal (1 subgoal):
 1. (cmod (\<i> / 2 - to_complex x))\<^sup>2 = (cmod (- \<i> / 2 - to_complex x))\<^sup>2
[PROOF STEP]
unfolding poincare_distance_formula'_def
[PROOF STATE]
proof (prove)
using this:
1 + 2 * ((cmod (\<i> / 2 - to_complex x))\<^sup>2 / ((1 - (cmod (\<i> / 2))\<^sup>2) * (1 - (cmod (to_complex x))\<^sup>2))) = 1 + 2 * ((cmod (- \<i> / 2 - to_complex x))\<^sup>2 / ((1 - (cmod (- \<i> / 2))\<^sup>2) * (1 - (cmod (to_complex x))\<^sup>2)))

goal (1 subgoal):
 1. (cmod (\<i> / 2 - to_complex x))\<^sup>2 = (cmod (- \<i> / 2 - to_complex x))\<^sup>2
[PROOF STEP]
apply (simp add:field_simps)
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (cmod (to_complex x))\<^sup>2 = 1 \<or> cmod (\<i> - to_complex x * 2) = cmod (- \<i> - to_complex x * 2) \<Longrightarrow> cmod (\<i> - to_complex x * 2) = cmod (- \<i> - to_complex x * 2)
[PROOF STEP]
using \<open>x \<in> unit_disc\<close> unit_disc_cmod_square_lt_1
[PROOF STATE]
proof (prove)
using this:
x \<in> unit_disc
?z \<in> unit_disc \<Longrightarrow> (cmod (to_complex ?z))\<^sup>2 < 1

goal (1 subgoal):
 1. (cmod (to_complex x))\<^sup>2 = 1 \<or> cmod (\<i> - to_complex x * 2) = cmod (- \<i> - to_complex x * 2) \<Longrightarrow> cmod (\<i> - to_complex x * 2) = cmod (- \<i> - to_complex x * 2)
[PROOF STEP]
by fastforce
[PROOF STATE]
proof (state)
this:
(cmod (\<i> / 2 - to_complex x))\<^sup>2 = (cmod (- \<i> / 2 - to_complex x))\<^sup>2

goal (1 subgoal):
 1. \<not> (\<nexists>x. x \<in> unit_disc \<and> poincare_distance (of_complex (\<i> / 2)) x = poincare_distance (of_complex (- \<i> / 2)) x \<and> poincare_distance (of_complex (\<i> / 2)) x = poincare_distance (of_complex (1 / 5)) x) \<Longrightarrow> False
[PROOF STEP]
hence "Im ?x = 0"
[PROOF STATE]
proof (prove)
using this:
(cmod (\<i> / 2 - to_complex x))\<^sup>2 = (cmod (- \<i> / 2 - to_complex x))\<^sup>2

goal (1 subgoal):
 1. is_real (to_complex x)
[PROOF STEP]
unfolding cmod_def
[PROOF STATE]
proof (prove)
using this:
(sqrt ((Re (\<i> / 2 - to_complex x))\<^sup>2 + (Im (\<i> / 2 - to_complex x))\<^sup>2))\<^sup>2 = (sqrt ((Re (- \<i> / 2 - to_complex x))\<^sup>2 + (Im (- \<i> / 2 - to_complex x))\<^sup>2))\<^sup>2

goal (1 subgoal):
 1. is_real (to_complex x)
[PROOF STEP]
by (simp add: power2_eq_iff)
[PROOF STATE]
proof (state)
this:
is_real (to_complex x)

goal (1 subgoal):
 1. \<not> (\<nexists>x. x \<in> unit_disc \<and> poincare_distance (of_complex (\<i> / 2)) x = poincare_distance (of_complex (- \<i> / 2)) x \<and> poincare_distance (of_complex (\<i> / 2)) x = poincare_distance (of_complex (1 / 5)) x) \<Longrightarrow> False
[PROOF STEP]
have "1 - (Re ?x)\<^sup>2 \<noteq> 0"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. 1 - (Re (to_complex x))\<^sup>2 \<noteq> 0
[PROOF STEP]
using \<open>x \<in> unit_disc\<close> unit_disc_cmod_square_lt_1
[PROOF STATE]
proof (prove)
using this:
x \<in> unit_disc
?z \<in> unit_disc \<Longrightarrow> (cmod (to_complex ?z))\<^sup>2 < 1

goal (1 subgoal):
 1. 1 - (Re (to_complex x))\<^sup>2 \<noteq> 0
[PROOF STEP]
using cmod_power2
[PROOF STATE]
proof (prove)
using this:
x \<in> unit_disc
?z \<in> unit_disc \<Longrightarrow> (cmod (to_complex ?z))\<^sup>2 < 1
(cmod ?z)\<^sup>2 = (Re ?z)\<^sup>2 + (Im ?z)\<^sup>2

goal (1 subgoal):
 1. 1 - (Re (to_complex x))\<^sup>2 \<noteq> 0
[PROOF STEP]
by force
[PROOF STATE]
proof (state)
this:
1 - (Re (to_complex x))\<^sup>2 \<noteq> 0

goal (1 subgoal):
 1. \<not> (\<nexists>x. x \<in> unit_disc \<and> poincare_distance (of_complex (\<i> / 2)) x = poincare_distance (of_complex (- \<i> / 2)) x \<and> poincare_distance (of_complex (\<i> / 2)) x = poincare_distance (of_complex (1 / 5)) x) \<Longrightarrow> False
[PROOF STEP]
hence "24 - 24 * (Re ?x)\<^sup>2 \<noteq> 0"
[PROOF STATE]
proof (prove)
using this:
1 - (Re (to_complex x))\<^sup>2 \<noteq> 0

goal (1 subgoal):
 1. 24 - 24 * (Re (to_complex x))\<^sup>2 \<noteq> 0
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
24 - 24 * (Re (to_complex x))\<^sup>2 \<noteq> 0

goal (1 subgoal):
 1. \<not> (\<nexists>x. x \<in> unit_disc \<and> poincare_distance (of_complex (\<i> / 2)) x = poincare_distance (of_complex (- \<i> / 2)) x \<and> poincare_distance (of_complex (\<i> / 2)) x = poincare_distance (of_complex (1 / 5)) x) \<Longrightarrow> False
[PROOF STEP]
have "poincare_distance_formula' (\<i>/2) ?x = poincare_distance_formula' (1/5) ?x"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. poincare_distance_formula' (\<i> / 2) (to_complex x) = poincare_distance_formula' (1 / 5) (to_complex x)
[PROOF STEP]
using \<open>poincare_distance ?a x = poincare_distance ?c x\<close>
[PROOF STATE]
proof (prove)
using this:
poincare_distance (of_complex (\<i> / 2)) x = poincare_distance (of_complex (1 / 5)) x

goal (1 subgoal):
 1. poincare_distance_formula' (\<i> / 2) (to_complex x) = poincare_distance_formula' (1 / 5) (to_complex x)
[PROOF STEP]
using \<open>x \<in> unit_disc\<close> \<open>?a \<in> unit_disc\<close> \<open>?c \<in> unit_disc\<close>
[PROOF STATE]
proof (prove)
using this:
poincare_distance (of_complex (\<i> / 2)) x = poincare_distance (of_complex (1 / 5)) x
x \<in> unit_disc
of_complex (\<i> / 2) \<in> unit_disc
of_complex (1 / 5) \<in> unit_disc

goal (1 subgoal):
 1. poincare_distance_formula' (\<i> / 2) (to_complex x) = poincare_distance_formula' (1 / 5) (to_complex x)
[PROOF STEP]
by (metis cosh_dist to_complex_of_complex)
[PROOF STATE]
proof (state)
this:
poincare_distance_formula' (\<i> / 2) (to_complex x) = poincare_distance_formula' (1 / 5) (to_complex x)

goal (1 subgoal):
 1. \<not> (\<nexists>x. x \<in> unit_disc \<and> poincare_distance (of_complex (\<i> / 2)) x = poincare_distance (of_complex (- \<i> / 2)) x \<and> poincare_distance (of_complex (\<i> / 2)) x = poincare_distance (of_complex (1 / 5)) x) \<Longrightarrow> False
[PROOF STEP]
hence "(2 + 8 * (Re ?x)\<^sup>2) /(3 - 3 * (Re ?x)\<^sup>2) = 2 * (1 - Re ?x * 5)\<^sup>2 / (24 - 24 * (Re ?x)\<^sup>2)" (is "?lhs = ?rhs")
[PROOF STATE]
proof (prove)
using this:
poincare_distance_formula' (\<i> / 2) (to_complex x) = poincare_distance_formula' (1 / 5) (to_complex x)

goal (1 subgoal):
 1. (2 + 8 * (Re (to_complex x))\<^sup>2) / (3 - 3 * (Re (to_complex x))\<^sup>2) = 2 * (1 - Re (to_complex x) * 5)\<^sup>2 / (24 - 24 * (Re (to_complex x))\<^sup>2)
[PROOF STEP]
unfolding poincare_distance_formula'_def
[PROOF STATE]
proof (prove)
using this:
1 + 2 * ((cmod (\<i> / 2 - to_complex x))\<^sup>2 / ((1 - (cmod (\<i> / 2))\<^sup>2) * (1 - (cmod (to_complex x))\<^sup>2))) = 1 + 2 * ((cmod (1 / 5 - to_complex x))\<^sup>2 / ((1 - (cmod (1 / 5))\<^sup>2) * (1 - (cmod (to_complex x))\<^sup>2)))

goal (1 subgoal):
 1. (2 + 8 * (Re (to_complex x))\<^sup>2) / (3 - 3 * (Re (to_complex x))\<^sup>2) = 2 * (1 - Re (to_complex x) * 5)\<^sup>2 / (24 - 24 * (Re (to_complex x))\<^sup>2)
[PROOF STEP]
apply (simp add:field_simps)
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. 2 * (cmod (\<i> - to_complex x * 2))\<^sup>2 / (3 - 3 * (cmod (to_complex x))\<^sup>2) = 2 * (cmod (1 - to_complex x * 5))\<^sup>2 / (24 - 24 * (cmod (to_complex x))\<^sup>2) \<Longrightarrow> (2 + 8 * (Re (to_complex x))\<^sup>2) / (3 - 3 * (Re (to_complex x))\<^sup>2) = 2 * (1 - Re (to_complex x) * 5)\<^sup>2 / (24 - 24 * (Re (to_complex x))\<^sup>2)
[PROOF STEP]
unfolding cmod_def
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. 2 * (sqrt ((Re (\<i> - to_complex x * 2))\<^sup>2 + (Im (\<i> - to_complex x * 2))\<^sup>2))\<^sup>2 / (3 - 3 * (sqrt ((Re (to_complex x))\<^sup>2 + (Im (to_complex x))\<^sup>2))\<^sup>2) = 2 * (sqrt ((Re (1 - to_complex x * 5))\<^sup>2 + (Im (1 - to_complex x * 5))\<^sup>2))\<^sup>2 / (24 - 24 * (sqrt ((Re (to_complex x))\<^sup>2 + (Im (to_complex x))\<^sup>2))\<^sup>2) \<Longrightarrow> (2 + 8 * (Re (to_complex x))\<^sup>2) / (3 - 3 * (Re (to_complex x))\<^sup>2) = 2 * (1 - Re (to_complex x) * 5)\<^sup>2 / (24 - 24 * (Re (to_complex x))\<^sup>2)
[PROOF STEP]
using \<open>Im ?x = 0\<close>
[PROOF STATE]
proof (prove)
using this:
is_real (to_complex x)

goal (1 subgoal):
 1. 2 * (sqrt ((Re (\<i> - to_complex x * 2))\<^sup>2 + (Im (\<i> - to_complex x * 2))\<^sup>2))\<^sup>2 / (3 - 3 * (sqrt ((Re (to_complex x))\<^sup>2 + (Im (to_complex x))\<^sup>2))\<^sup>2) = 2 * (sqrt ((Re (1 - to_complex x * 5))\<^sup>2 + (Im (1 - to_complex x * 5))\<^sup>2))\<^sup>2 / (24 - 24 * (sqrt ((Re (to_complex x))\<^sup>2 + (Im (to_complex x))\<^sup>2))\<^sup>2) \<Longrightarrow> (2 + 8 * (Re (to_complex x))\<^sup>2) / (3 - 3 * (Re (to_complex x))\<^sup>2) = 2 * (1 - Re (to_complex x) * 5)\<^sup>2 / (24 - 24 * (Re (to_complex x))\<^sup>2)
[PROOF STEP]
by (simp add:field_simps)
[PROOF STATE]
proof (state)
this:
(2 + 8 * (Re (to_complex x))\<^sup>2) / (3 - 3 * (Re (to_complex x))\<^sup>2) = 2 * (1 - Re (to_complex x) * 5)\<^sup>2 / (24 - 24 * (Re (to_complex x))\<^sup>2)

goal (1 subgoal):
 1. \<not> (\<nexists>x. x \<in> unit_disc \<and> poincare_distance (of_complex (\<i> / 2)) x = poincare_distance (of_complex (- \<i> / 2)) x \<and> poincare_distance (of_complex (\<i> / 2)) x = poincare_distance (of_complex (1 / 5)) x) \<Longrightarrow> False
[PROOF STEP]
hence *: "?lhs * (24 - 24 * (Re ?x)\<^sup>2)  = ?rhs * (24 - 24 * (Re ?x)\<^sup>2) "
[PROOF STATE]
proof (prove)
using this:
(2 + 8 * (Re (to_complex x))\<^sup>2) / (3 - 3 * (Re (to_complex x))\<^sup>2) = 2 * (1 - Re (to_complex x) * 5)\<^sup>2 / (24 - 24 * (Re (to_complex x))\<^sup>2)

goal (1 subgoal):
 1. (2 + 8 * (Re (to_complex x))\<^sup>2) / (3 - 3 * (Re (to_complex x))\<^sup>2) * (24 - 24 * (Re (to_complex x))\<^sup>2) = 2 * (1 - Re (to_complex x) * 5)\<^sup>2 / (24 - 24 * (Re (to_complex x))\<^sup>2) * (24 - 24 * (Re (to_complex x))\<^sup>2)
[PROOF STEP]
using \<open>(24 - 24 * (Re ?x)\<^sup>2) \<noteq> 0\<close>
[PROOF STATE]
proof (prove)
using this:
(2 + 8 * (Re (to_complex x))\<^sup>2) / (3 - 3 * (Re (to_complex x))\<^sup>2) = 2 * (1 - Re (to_complex x) * 5)\<^sup>2 / (24 - 24 * (Re (to_complex x))\<^sup>2)
24 - 24 * (Re (to_complex x))\<^sup>2 \<noteq> 0

goal (1 subgoal):
 1. (2 + 8 * (Re (to_complex x))\<^sup>2) / (3 - 3 * (Re (to_complex x))\<^sup>2) * (24 - 24 * (Re (to_complex x))\<^sup>2) = 2 * (1 - Re (to_complex x) * 5)\<^sup>2 / (24 - 24 * (Re (to_complex x))\<^sup>2) * (24 - 24 * (Re (to_complex x))\<^sup>2)
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
(2 + 8 * (Re (to_complex x))\<^sup>2) / (3 - 3 * (Re (to_complex x))\<^sup>2) * (24 - 24 * (Re (to_complex x))\<^sup>2) = 2 * (1 - Re (to_complex x) * 5)\<^sup>2 / (24 - 24 * (Re (to_complex x))\<^sup>2) * (24 - 24 * (Re (to_complex x))\<^sup>2)

goal (1 subgoal):
 1. \<not> (\<nexists>x. x \<in> unit_disc \<and> poincare_distance (of_complex (\<i> / 2)) x = poincare_distance (of_complex (- \<i> / 2)) x \<and> poincare_distance (of_complex (\<i> / 2)) x = poincare_distance (of_complex (1 / 5)) x) \<Longrightarrow> False
[PROOF STEP]
have "?lhs * (24 - 24 * (Re ?x)\<^sup>2) = (2 + 8 * (Re ?x)\<^sup>2) * 8"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (2 + 8 * (Re (to_complex x))\<^sup>2) / (3 - 3 * (Re (to_complex x))\<^sup>2) * (24 - 24 * (Re (to_complex x))\<^sup>2) = (2 + 8 * (Re (to_complex x))\<^sup>2) * 8
[PROOF STEP]
using \<open>(24 - 24 * (Re ?x)\<^sup>2) \<noteq> 0\<close> \<open>1 - (Re ?x)\<^sup>2 \<noteq> 0\<close>
[PROOF STATE]
proof (prove)
using this:
24 - 24 * (Re (to_complex x))\<^sup>2 \<noteq> 0
1 - (Re (to_complex x))\<^sup>2 \<noteq> 0

goal (1 subgoal):
 1. (2 + 8 * (Re (to_complex x))\<^sup>2) / (3 - 3 * (Re (to_complex x))\<^sup>2) * (24 - 24 * (Re (to_complex x))\<^sup>2) = (2 + 8 * (Re (to_complex x))\<^sup>2) * 8
[PROOF STEP]
by (simp add:field_simps)
[PROOF STATE]
proof (state)
this:
(2 + 8 * (Re (to_complex x))\<^sup>2) / (3 - 3 * (Re (to_complex x))\<^sup>2) * (24 - 24 * (Re (to_complex x))\<^sup>2) = (2 + 8 * (Re (to_complex x))\<^sup>2) * 8

goal (1 subgoal):
 1. \<not> (\<nexists>x. x \<in> unit_disc \<and> poincare_distance (of_complex (\<i> / 2)) x = poincare_distance (of_complex (- \<i> / 2)) x \<and> poincare_distance (of_complex (\<i> / 2)) x = poincare_distance (of_complex (1 / 5)) x) \<Longrightarrow> False
[PROOF STEP]
have "?rhs * (24 - 24 * (Re ?x)\<^sup>2) = 2 * (1 - Re ?x * 5)\<^sup>2"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. 2 * (1 - Re (to_complex x) * 5)\<^sup>2 / (24 - 24 * (Re (to_complex x))\<^sup>2) * (24 - 24 * (Re (to_complex x))\<^sup>2) = 2 * (1 - Re (to_complex x) * 5)\<^sup>2
[PROOF STEP]
using \<open>(24 - 24 * (Re ?x)\<^sup>2) \<noteq> 0\<close> \<open>1 - (Re ?x)\<^sup>2 \<noteq> 0\<close>
[PROOF STATE]
proof (prove)
using this:
24 - 24 * (Re (to_complex x))\<^sup>2 \<noteq> 0
1 - (Re (to_complex x))\<^sup>2 \<noteq> 0

goal (1 subgoal):
 1. 2 * (1 - Re (to_complex x) * 5)\<^sup>2 / (24 - 24 * (Re (to_complex x))\<^sup>2) * (24 - 24 * (Re (to_complex x))\<^sup>2) = 2 * (1 - Re (to_complex x) * 5)\<^sup>2
[PROOF STEP]
by (simp add:field_simps)
[PROOF STATE]
proof (state)
this:
2 * (1 - Re (to_complex x) * 5)\<^sup>2 / (24 - 24 * (Re (to_complex x))\<^sup>2) * (24 - 24 * (Re (to_complex x))\<^sup>2) = 2 * (1 - Re (to_complex x) * 5)\<^sup>2

goal (1 subgoal):
 1. \<not> (\<nexists>x. x \<in> unit_disc \<and> poincare_distance (of_complex (\<i> / 2)) x = poincare_distance (of_complex (- \<i> / 2)) x \<and> poincare_distance (of_complex (\<i> / 2)) x = poincare_distance (of_complex (1 / 5)) x) \<Longrightarrow> False
[PROOF STEP]
hence "(2 + 8 * (Re ?x)\<^sup>2) * 8 = 2 * (1 - Re ?x * 5)\<^sup>2"
[PROOF STATE]
proof (prove)
using this:
2 * (1 - Re (to_complex x) * 5)\<^sup>2 / (24 - 24 * (Re (to_complex x))\<^sup>2) * (24 - 24 * (Re (to_complex x))\<^sup>2) = 2 * (1 - Re (to_complex x) * 5)\<^sup>2

goal (1 subgoal):
 1. (2 + 8 * (Re (to_complex x))\<^sup>2) * 8 = 2 * (1 - Re (to_complex x) * 5)\<^sup>2
[PROOF STEP]
using * \<open>?lhs * (24 - 24 * (Re ?x)\<^sup>2) = (2 + 8 * (Re ?x)\<^sup>2) * 8\<close>
[PROOF STATE]
proof (prove)
using this:
2 * (1 - Re (to_complex x) * 5)\<^sup>2 / (24 - 24 * (Re (to_complex x))\<^sup>2) * (24 - 24 * (Re (to_complex x))\<^sup>2) = 2 * (1 - Re (to_complex x) * 5)\<^sup>2
(2 + 8 * (Re (to_complex x))\<^sup>2) / (3 - 3 * (Re (to_complex x))\<^sup>2) * (24 - 24 * (Re (to_complex x))\<^sup>2) = 2 * (1 - Re (to_complex x) * 5)\<^sup>2 / (24 - 24 * (Re (to_complex x))\<^sup>2) * (24 - 24 * (Re (to_complex x))\<^sup>2)
(2 + 8 * (Re (to_complex x))\<^sup>2) / (3 - 3 * (Re (to_complex x))\<^sup>2) * (24 - 24 * (Re (to_complex x))\<^sup>2) = (2 + 8 * (Re (to_complex x))\<^sup>2) * 8

goal (1 subgoal):
 1. (2 + 8 * (Re (to_complex x))\<^sup>2) * 8 = 2 * (1 - Re (to_complex x) * 5)\<^sup>2
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
(2 + 8 * (Re (to_complex x))\<^sup>2) * 8 = 2 * (1 - Re (to_complex x) * 5)\<^sup>2

goal (1 subgoal):
 1. \<not> (\<nexists>x. x \<in> unit_disc \<and> poincare_distance (of_complex (\<i> / 2)) x = poincare_distance (of_complex (- \<i> / 2)) x \<and> poincare_distance (of_complex (\<i> / 2)) x = poincare_distance (of_complex (1 / 5)) x) \<Longrightarrow> False
[PROOF STEP]
hence "7 * (Re ?x)\<^sup>2 + 10 * (Re ?x) + 7 = 0"
[PROOF STATE]
proof (prove)
using this:
(2 + 8 * (Re (to_complex x))\<^sup>2) * 8 = 2 * (1 - Re (to_complex x) * 5)\<^sup>2

goal (1 subgoal):
 1. 7 * (Re (to_complex x))\<^sup>2 + 10 * Re (to_complex x) + 7 = 0
[PROOF STEP]
by (simp add:field_simps comm_ring_1_class.power2_diff)
[PROOF STATE]
proof (state)
this:
7 * (Re (to_complex x))\<^sup>2 + 10 * Re (to_complex x) + 7 = 0

goal (1 subgoal):
 1. \<not> (\<nexists>x. x \<in> unit_disc \<and> poincare_distance (of_complex (\<i> / 2)) x = poincare_distance (of_complex (- \<i> / 2)) x \<and> poincare_distance (of_complex (\<i> / 2)) x = poincare_distance (of_complex (1 / 5)) x) \<Longrightarrow> False
[PROOF STEP]
thus False
[PROOF STATE]
proof (prove)
using this:
7 * (Re (to_complex x))\<^sup>2 + 10 * Re (to_complex x) + 7 = 0

goal (1 subgoal):
 1. False
[PROOF STEP]
using discriminant_iff[of 7 "Re (to_complex x)" 10 7] discrim_def[of 7 10 7]
[PROOF STATE]
proof (prove)
using this:
7 * (Re (to_complex x))\<^sup>2 + 10 * Re (to_complex x) + 7 = 0
7 \<noteq> 0 \<Longrightarrow> (7 * (Re (to_complex x))\<^sup>2 + 10 * Re (to_complex x) + 7 = 0) = (0 \<le> discrim 7 10 7 \<and> (Re (to_complex x) = (- 10 + sqrt (discrim 7 10 7)) / (2 * 7) \<or> Re (to_complex x) = (- 10 - sqrt (discrim 7 10 7)) / (2 * 7)))
discrim 7 10 7 \<equiv> 10\<^sup>2 - 4 * 7 * 7

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

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
\<nexists>x. x \<in> unit_disc \<and> poincare_distance (of_complex (\<i> / 2)) x = poincare_distance (of_complex (- \<i> / 2)) x \<and> poincare_distance (of_complex (\<i> / 2)) x = poincare_distance (of_complex (1 / 5)) x

goal (1 subgoal):
 1. \<exists>a b c. a \<in> unit_disc \<and> b \<in> unit_disc \<and> c \<in> unit_disc \<and> \<not> poincare_collinear {a, b, c} \<and> (\<nexists>x. x \<in> unit_disc \<and> poincare_distance a x = poincare_distance b x \<and> poincare_distance a x = poincare_distance c x)
[PROOF STEP]
ultimately
[PROOF STATE]
proof (chain)
picking this:
of_complex (\<i> / 2) \<in> unit_disc
of_complex (- \<i> / 2) \<in> unit_disc
of_complex (1 / 5) \<in> unit_disc
\<not> poincare_collinear {of_complex (\<i> / 2), of_complex (- \<i> / 2), of_complex (1 / 5)}
\<nexists>x. x \<in> unit_disc \<and> poincare_distance (of_complex (\<i> / 2)) x = poincare_distance (of_complex (- \<i> / 2)) x \<and> poincare_distance (of_complex (\<i> / 2)) x = poincare_distance (of_complex (1 / 5)) x
[PROOF STEP]
show ?thesis
[PROOF STATE]
proof (prove)
using this:
of_complex (\<i> / 2) \<in> unit_disc
of_complex (- \<i> / 2) \<in> unit_disc
of_complex (1 / 5) \<in> unit_disc
\<not> poincare_collinear {of_complex (\<i> / 2), of_complex (- \<i> / 2), of_complex (1 / 5)}
\<nexists>x. x \<in> unit_disc \<and> poincare_distance (of_complex (\<i> / 2)) x = poincare_distance (of_complex (- \<i> / 2)) x \<and> poincare_distance (of_complex (\<i> / 2)) x = poincare_distance (of_complex (1 / 5)) x

goal (1 subgoal):
 1. \<exists>a b c. a \<in> unit_disc \<and> b \<in> unit_disc \<and> c \<in> unit_disc \<and> \<not> poincare_collinear {a, b, c} \<and> (\<nexists>x. x \<in> unit_disc \<and> poincare_distance a x = poincare_distance b x \<and> poincare_distance a x = poincare_distance c x)
[PROOF STEP]
apply (rule_tac x="?a" in exI)
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<lbrakk>of_complex (\<i> / 2) \<in> unit_disc; of_complex (- \<i> / 2) \<in> unit_disc; of_complex (1 / 5) \<in> unit_disc; \<not> poincare_collinear {of_complex (\<i> / 2), of_complex (- \<i> / 2), of_complex (1 / 5)}; \<nexists>x. x \<in> unit_disc \<and> poincare_distance (of_complex (\<i> / 2)) x = poincare_distance (of_complex (- \<i> / 2)) x \<and> poincare_distance (of_complex (\<i> / 2)) x = poincare_distance (of_complex (1 / 5)) x\<rbrakk> \<Longrightarrow> \<exists>b c. of_complex (\<i> / 2) \<in> unit_disc \<and> b \<in> unit_disc \<and> c \<in> unit_disc \<and> \<not> poincare_collinear {of_complex (\<i> / 2), b, c} \<and> (\<nexists>x. x \<in> unit_disc \<and> poincare_distance (of_complex (\<i> / 2)) x = poincare_distance b x \<and> poincare_distance (of_complex (\<i> / 2)) x = poincare_distance c x)
[PROOF STEP]
apply (rule_tac x="?b" in exI)
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<lbrakk>of_complex (\<i> / 2) \<in> unit_disc; of_complex (- \<i> / 2) \<in> unit_disc; of_complex (1 / 5) \<in> unit_disc; \<not> poincare_collinear {of_complex (\<i> / 2), of_complex (- \<i> / 2), of_complex (1 / 5)}; \<nexists>x. x \<in> unit_disc \<and> poincare_distance (of_complex (\<i> / 2)) x = poincare_distance (of_complex (- \<i> / 2)) x \<and> poincare_distance (of_complex (\<i> / 2)) x = poincare_distance (of_complex (1 / 5)) x\<rbrakk> \<Longrightarrow> \<exists>c. of_complex (\<i> / 2) \<in> unit_disc \<and> of_complex (- \<i> / 2) \<in> unit_disc \<and> c \<in> unit_disc \<and> \<not> poincare_collinear {of_complex (\<i> / 2), of_complex (- \<i> / 2), c} \<and> (\<nexists>x. x \<in> unit_disc \<and> poincare_distance (of_complex (\<i> / 2)) x = poincare_distance (of_complex (- \<i> / 2)) x \<and> poincare_distance (of_complex (\<i> / 2)) x = poincare_distance c x)
[PROOF STEP]
apply (rule_tac x="?c" in exI)
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<lbrakk>of_complex (\<i> / 2) \<in> unit_disc; of_complex (- \<i> / 2) \<in> unit_disc; of_complex (1 / 5) \<in> unit_disc; \<not> poincare_collinear {of_complex (\<i> / 2), of_complex (- \<i> / 2), of_complex (1 / 5)}; \<nexists>x. x \<in> unit_disc \<and> poincare_distance (of_complex (\<i> / 2)) x = poincare_distance (of_complex (- \<i> / 2)) x \<and> poincare_distance (of_complex (\<i> / 2)) x = poincare_distance (of_complex (1 / 5)) x\<rbrakk> \<Longrightarrow> of_complex (\<i> / 2) \<in> unit_disc \<and> of_complex (- \<i> / 2) \<in> unit_disc \<and> of_complex (1 / 5) \<in> unit_disc \<and> \<not> poincare_collinear {of_complex (\<i> / 2), of_complex (- \<i> / 2), of_complex (1 / 5)} \<and> (\<nexists>x. x \<in> unit_disc \<and> poincare_distance (of_complex (\<i> / 2)) x = poincare_distance (of_complex (- \<i> / 2)) x \<and> poincare_distance (of_complex (\<i> / 2)) x = poincare_distance (of_complex (1 / 5)) x)
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
\<exists>a b c. a \<in> unit_disc \<and> b \<in> unit_disc \<and> c \<in> unit_disc \<and> \<not> poincare_collinear {a, b, c} \<and> (\<nexists>x. x \<in> unit_disc \<and> poincare_distance a x = poincare_distance b x \<and> poincare_distance a x = poincare_distance c x)

goal:
No subgoals!
[PROOF STEP]
qed


[STATEMENT]
lemma horner_sum_uint_exp_Cons_eq:
  \<open>horner_sum uint (2 ^ LENGTH('a)) (w # ws) =
    concat_bit LENGTH('a) (uint w) (horner_sum uint (2 ^ LENGTH('a)) ws)\<close>
  for ws :: \<open>'a::len word list\<close>
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. horner_sum uint (2 ^ LENGTH('a)) (w # ws) = concat_bit LENGTH('a) (uint w) (horner_sum uint (2 ^ LENGTH('a)) ws)
[PROOF STEP]
by (simp add: bintr_uint concat_bit_eq push_bit_eq_mult)


[STATEMENT]
lemma compactin_Int:
   "\<lbrakk>Hausdorff_space X; compactin X S; compactin X T\<rbrakk> \<Longrightarrow> compactin X (S \<inter> T)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<lbrakk>Hausdorff_space X; compactin X S; compactin X T\<rbrakk> \<Longrightarrow> compactin X (S \<inter> T)
[PROOF STEP]
by (simp add: closed_Int_compactin compactin_imp_closedin)