[STATEMENT]
theorem Borsuk_odd_mapping_degree_step:
  assumes cmf: "continuous_map (nsphere n) (nsphere n) f"
    and f: "\<And>x. x \<in> topspace(nsphere n) \<Longrightarrow> (f \<circ> (\<lambda>x i. -x i)) x = ((\<lambda>x i. -x i) \<circ> f) x"
    and fim: "f ` (topspace(nsphere(n - Suc 0))) \<subseteq> topspace(nsphere(n - Suc 0))"
  shows "even (Brouwer_degree2 n f - Brouwer_degree2 (n - Suc 0) f)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. even (Brouwer_degree2 n f - Brouwer_degree2 (n - Suc 0) f)
[PROOF STEP]
proof (cases "n = 0")
[PROOF STATE]
proof (state)
goal (2 subgoals):
 1. n = 0 \<Longrightarrow> even (Brouwer_degree2 n f - Brouwer_degree2 (n - Suc 0) f)
 2. n \<noteq> 0 \<Longrightarrow> even (Brouwer_degree2 n f - Brouwer_degree2 (n - Suc 0) f)
[PROOF STEP]
case False
[PROOF STATE]
proof (state)
this:
n \<noteq> 0

goal (2 subgoals):
 1. n = 0 \<Longrightarrow> even (Brouwer_degree2 n f - Brouwer_degree2 (n - Suc 0) f)
 2. n \<noteq> 0 \<Longrightarrow> even (Brouwer_degree2 n f - Brouwer_degree2 (n - Suc 0) f)
[PROOF STEP]
define neg where "neg \<equiv> \<lambda>x::nat\<Rightarrow>real. \<lambda>i. -x i"
[PROOF STATE]
proof (state)
this:
neg \<equiv> \<lambda>x i. - x i

goal (2 subgoals):
 1. n = 0 \<Longrightarrow> even (Brouwer_degree2 n f - Brouwer_degree2 (n - Suc 0) f)
 2. n \<noteq> 0 \<Longrightarrow> even (Brouwer_degree2 n f - Brouwer_degree2 (n - Suc 0) f)
[PROOF STEP]
define upper where "upper \<equiv> \<lambda>n. {x::nat\<Rightarrow>real. x n \<ge> 0}"
[PROOF STATE]
proof (state)
this:
upper \<equiv> \<lambda>n. {x. 0 \<le> x n}

goal (2 subgoals):
 1. n = 0 \<Longrightarrow> even (Brouwer_degree2 n f - Brouwer_degree2 (n - Suc 0) f)
 2. n \<noteq> 0 \<Longrightarrow> even (Brouwer_degree2 n f - Brouwer_degree2 (n - Suc 0) f)
[PROOF STEP]
define lower where "lower \<equiv> \<lambda>n. {x::nat\<Rightarrow>real. x n \<le> 0}"
[PROOF STATE]
proof (state)
this:
lower \<equiv> \<lambda>n. {x. x n \<le> 0}

goal (2 subgoals):
 1. n = 0 \<Longrightarrow> even (Brouwer_degree2 n f - Brouwer_degree2 (n - Suc 0) f)
 2. n \<noteq> 0 \<Longrightarrow> even (Brouwer_degree2 n f - Brouwer_degree2 (n - Suc 0) f)
[PROOF STEP]
define equator where "equator \<equiv> \<lambda>n. {x::nat\<Rightarrow>real. x n = 0}"
[PROOF STATE]
proof (state)
this:
equator \<equiv> \<lambda>n. {x. x n = 0}

goal (2 subgoals):
 1. n = 0 \<Longrightarrow> even (Brouwer_degree2 n f - Brouwer_degree2 (n - Suc 0) f)
 2. n \<noteq> 0 \<Longrightarrow> even (Brouwer_degree2 n f - Brouwer_degree2 (n - Suc 0) f)
[PROOF STEP]
define usphere where "usphere \<equiv> \<lambda>n. subtopology (nsphere n) (upper n)"
[PROOF STATE]
proof (state)
this:
usphere \<equiv> \<lambda>n. subtopology (nsphere n) (upper n)

goal (2 subgoals):
 1. n = 0 \<Longrightarrow> even (Brouwer_degree2 n f - Brouwer_degree2 (n - Suc 0) f)
 2. n \<noteq> 0 \<Longrightarrow> even (Brouwer_degree2 n f - Brouwer_degree2 (n - Suc 0) f)
[PROOF STEP]
define lsphere where "lsphere \<equiv> \<lambda>n. subtopology (nsphere n) (lower n)"
[PROOF STATE]
proof (state)
this:
lsphere \<equiv> \<lambda>n. subtopology (nsphere n) (lower n)

goal (2 subgoals):
 1. n = 0 \<Longrightarrow> even (Brouwer_degree2 n f - Brouwer_degree2 (n - Suc 0) f)
 2. n \<noteq> 0 \<Longrightarrow> even (Brouwer_degree2 n f - Brouwer_degree2 (n - Suc 0) f)
[PROOF STEP]
have [simp]: "neg x i = -x i" for x i
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. neg x i = - x i
[PROOF STEP]
by (force simp: neg_def)
[PROOF STATE]
proof (state)
this:
neg ?x ?i = - ?x ?i

goal (2 subgoals):
 1. n = 0 \<Longrightarrow> even (Brouwer_degree2 n f - Brouwer_degree2 (n - Suc 0) f)
 2. n \<noteq> 0 \<Longrightarrow> even (Brouwer_degree2 n f - Brouwer_degree2 (n - Suc 0) f)
[PROOF STEP]
have equator_upper: "equator n \<subseteq> upper n"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. equator n \<subseteq> upper n
[PROOF STEP]
by (force simp: equator_def upper_def)
[PROOF STATE]
proof (state)
this:
equator n \<subseteq> upper n

goal (2 subgoals):
 1. n = 0 \<Longrightarrow> even (Brouwer_degree2 n f - Brouwer_degree2 (n - Suc 0) f)
 2. n \<noteq> 0 \<Longrightarrow> even (Brouwer_degree2 n f - Brouwer_degree2 (n - Suc 0) f)
[PROOF STEP]
have upper_usphere: "subtopology (nsphere n) (upper n) = usphere n"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. subtopology (nsphere n) (upper n) = usphere n
[PROOF STEP]
by (simp add: usphere_def)
[PROOF STATE]
proof (state)
this:
subtopology (nsphere n) (upper n) = usphere n

goal (2 subgoals):
 1. n = 0 \<Longrightarrow> even (Brouwer_degree2 n f - Brouwer_degree2 (n - Suc 0) f)
 2. n \<noteq> 0 \<Longrightarrow> even (Brouwer_degree2 n f - Brouwer_degree2 (n - Suc 0) f)
[PROOF STEP]
let ?rhgn = "relative_homology_group n (nsphere n)"
[PROOF STATE]
proof (state)
goal (2 subgoals):
 1. n = 0 \<Longrightarrow> even (Brouwer_degree2 n f - Brouwer_degree2 (n - Suc 0) f)
 2. n \<noteq> 0 \<Longrightarrow> even (Brouwer_degree2 n f - Brouwer_degree2 (n - Suc 0) f)
[PROOF STEP]
let ?hi_ee = "hom_induced n (nsphere n) (equator n) (nsphere n) (equator n)"
[PROOF STATE]
proof (state)
goal (2 subgoals):
 1. n = 0 \<Longrightarrow> even (Brouwer_degree2 n f - Brouwer_degree2 (n - Suc 0) f)
 2. n \<noteq> 0 \<Longrightarrow> even (Brouwer_degree2 n f - Brouwer_degree2 (n - Suc 0) f)
[PROOF STEP]
interpret GE: comm_group "?rhgn (equator n)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. comm_group (relative_homology_group (int n) (nsphere n) (equator n))
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
goal (2 subgoals):
 1. n = 0 \<Longrightarrow> even (Brouwer_degree2 n f - Brouwer_degree2 (n - Suc 0) f)
 2. n \<noteq> 0 \<Longrightarrow> even (Brouwer_degree2 n f - Brouwer_degree2 (n - Suc 0) f)
[PROOF STEP]
interpret HB: group_hom "?rhgn (equator n)"
                          "homology_group (int n - 1) (subtopology (nsphere n) (equator n))"
                          "hom_boundary n (nsphere n) (equator n)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. group_hom (relative_homology_group (int n) (nsphere n) (equator n)) (homology_group (int n - 1) (subtopology (nsphere n) (equator n))) (hom_boundary (int n) (nsphere n) (equator n))
[PROOF STEP]
by (simp add: group_hom_axioms_def group_hom_def hom_boundary_hom)
[PROOF STATE]
proof (state)
goal (2 subgoals):
 1. n = 0 \<Longrightarrow> even (Brouwer_degree2 n f - Brouwer_degree2 (n - Suc 0) f)
 2. n \<noteq> 0 \<Longrightarrow> even (Brouwer_degree2 n f - Brouwer_degree2 (n - Suc 0) f)
[PROOF STEP]
interpret HIU: group_hom "?rhgn (equator n)"
                           "?rhgn (upper n)"
                           "hom_induced n (nsphere n) (equator n) (nsphere n) (upper n) id"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. group_hom (relative_homology_group (int n) (nsphere n) (equator n)) (relative_homology_group (int n) (nsphere n) (upper n)) (hom_induced (int n) (nsphere n) (equator n) (nsphere n) (upper n) id)
[PROOF STEP]
by (simp add: group_hom_axioms_def group_hom_def hom_induced_hom)
[PROOF STATE]
proof (state)
goal (2 subgoals):
 1. n = 0 \<Longrightarrow> even (Brouwer_degree2 n f - Brouwer_degree2 (n - Suc 0) f)
 2. n \<noteq> 0 \<Longrightarrow> even (Brouwer_degree2 n f - Brouwer_degree2 (n - Suc 0) f)
[PROOF STEP]
have subt_eq: "subtopology (nsphere n) {x. x n = 0} = nsphere (n - Suc 0)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. subtopology (nsphere n) {x. x n = 0} = nsphere (n - Suc 0)
[PROOF STEP]
by (metis False Suc_pred le_zero_eq not_le subtopology_nsphere_equator)
[PROOF STATE]
proof (state)
this:
subtopology (nsphere n) {x. x n = 0} = nsphere (n - Suc 0)

goal (2 subgoals):
 1. n = 0 \<Longrightarrow> even (Brouwer_degree2 n f - Brouwer_degree2 (n - Suc 0) f)
 2. n \<noteq> 0 \<Longrightarrow> even (Brouwer_degree2 n f - Brouwer_degree2 (n - Suc 0) f)
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
subtopology (nsphere n) {x. x n = 0} = nsphere (n - Suc 0)
[PROOF STEP]
have equ: "subtopology (nsphere n) (equator n) = nsphere(n - Suc 0)"
    "subtopology (lsphere n) (equator n) = nsphere(n - Suc 0)"
    "subtopology (usphere n) (equator n) = nsphere(n - Suc 0)"
[PROOF STATE]
proof (prove)
using this:
subtopology (nsphere n) {x. x n = 0} = nsphere (n - Suc 0)

goal (1 subgoal):
 1. subtopology (nsphere n) (equator n) = nsphere (n - Suc 0) &&& subtopology (lsphere n) (equator n) = nsphere (n - Suc 0) &&& subtopology (usphere n) (equator n) = nsphere (n - Suc 0)
[PROOF STEP]
using False
[PROOF STATE]
proof (prove)
using this:
subtopology (nsphere n) {x. x n = 0} = nsphere (n - Suc 0)
n \<noteq> 0

goal (1 subgoal):
 1. subtopology (nsphere n) (equator n) = nsphere (n - Suc 0) &&& subtopology (lsphere n) (equator n) = nsphere (n - Suc 0) &&& subtopology (usphere n) (equator n) = nsphere (n - Suc 0)
[PROOF STEP]
by (auto simp: lsphere_def usphere_def equator_def lower_def upper_def subtopology_subtopology simp flip: Collect_conj_eq cong: rev_conj_cong)
[PROOF STATE]
proof (state)
this:
subtopology (nsphere n) (equator n) = nsphere (n - Suc 0)
subtopology (lsphere n) (equator n) = nsphere (n - Suc 0)
subtopology (usphere n) (equator n) = nsphere (n - Suc 0)

goal (2 subgoals):
 1. n = 0 \<Longrightarrow> even (Brouwer_degree2 n f - Brouwer_degree2 (n - Suc 0) f)
 2. n \<noteq> 0 \<Longrightarrow> even (Brouwer_degree2 n f - Brouwer_degree2 (n - Suc 0) f)
[PROOF STEP]
have cmr: "continuous_map (nsphere(n - Suc 0)) (nsphere(n - Suc 0)) f"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. continuous_map (nsphere (n - Suc 0)) (nsphere (n - Suc 0)) f
[PROOF STEP]
by (metis (no_types, lifting) IntE cmf fim continuous_map_from_subtopology continuous_map_in_subtopology equ(1) image_subset_iff topspace_subtopology)
[PROOF STATE]
proof (state)
this:
continuous_map (nsphere (n - Suc 0)) (nsphere (n - Suc 0)) f

goal (2 subgoals):
 1. n = 0 \<Longrightarrow> even (Brouwer_degree2 n f - Brouwer_degree2 (n - Suc 0) f)
 2. n \<noteq> 0 \<Longrightarrow> even (Brouwer_degree2 n f - Brouwer_degree2 (n - Suc 0) f)
[PROOF STEP]
have "f x n = 0" if "x \<in> topspace (nsphere n)" "x n = 0" for x
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. f x n = 0
[PROOF STEP]
proof -
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. f x n = 0
[PROOF STEP]
have "x \<in> topspace (nsphere (n - Suc 0))"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. x \<in> topspace (nsphere (n - Suc 0))
[PROOF STEP]
by (simp add: that topspace_nsphere_minus1)
[PROOF STATE]
proof (state)
this:
x \<in> topspace (nsphere (n - Suc 0))

goal (1 subgoal):
 1. f x n = 0
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
x \<in> topspace (nsphere (n - Suc 0))

goal (1 subgoal):
 1. f x n = 0
[PROOF STEP]
have "topspace (nsphere n) \<inter> {f. f n = 0} = topspace (nsphere (n - Suc 0))"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. topspace (nsphere n) \<inter> {f. f n = 0} = topspace (nsphere (n - Suc 0))
[PROOF STEP]
by (metis subt_eq topspace_subtopology)
[PROOF STATE]
proof (state)
this:
topspace (nsphere n) \<inter> {f. f n = 0} = topspace (nsphere (n - Suc 0))

goal (1 subgoal):
 1. f x n = 0
[PROOF STEP]
ultimately
[PROOF STATE]
proof (chain)
picking this:
x \<in> topspace (nsphere (n - Suc 0))
topspace (nsphere n) \<inter> {f. f n = 0} = topspace (nsphere (n - Suc 0))
[PROOF STEP]
show ?thesis
[PROOF STATE]
proof (prove)
using this:
x \<in> topspace (nsphere (n - Suc 0))
topspace (nsphere n) \<inter> {f. f n = 0} = topspace (nsphere (n - Suc 0))

goal (1 subgoal):
 1. f x n = 0
[PROOF STEP]
using cmr continuous_map_def
[PROOF STATE]
proof (prove)
using this:
x \<in> topspace (nsphere (n - Suc 0))
topspace (nsphere n) \<inter> {f. f n = 0} = topspace (nsphere (n - Suc 0))
continuous_map (nsphere (n - Suc 0)) (nsphere (n - Suc 0)) f
continuous_map ?X ?Y ?f \<equiv> (\<forall>x\<in>topspace ?X. ?f x \<in> topspace ?Y) \<and> (\<forall>U. openin ?Y U \<longrightarrow> openin ?X {x \<in> topspace ?X. ?f x \<in> U})

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

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
\<lbrakk>?x \<in> topspace (nsphere n); ?x n = 0\<rbrakk> \<Longrightarrow> f ?x n = 0

goal (2 subgoals):
 1. n = 0 \<Longrightarrow> even (Brouwer_degree2 n f - Brouwer_degree2 (n - Suc 0) f)
 2. n \<noteq> 0 \<Longrightarrow> even (Brouwer_degree2 n f - Brouwer_degree2 (n - Suc 0) f)
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
\<lbrakk>?x \<in> topspace (nsphere n); ?x n = 0\<rbrakk> \<Longrightarrow> f ?x n = 0
[PROOF STEP]
have fimeq: "f ` (topspace (nsphere n) \<inter> equator n) \<subseteq> topspace (nsphere n) \<inter> equator n"
[PROOF STATE]
proof (prove)
using this:
\<lbrakk>?x \<in> topspace (nsphere n); ?x n = 0\<rbrakk> \<Longrightarrow> f ?x n = 0

goal (1 subgoal):
 1. f ` (topspace (nsphere n) \<inter> equator n) \<subseteq> topspace (nsphere n) \<inter> equator n
[PROOF STEP]
using fim cmf
[PROOF STATE]
proof (prove)
using this:
\<lbrakk>?x \<in> topspace (nsphere n); ?x n = 0\<rbrakk> \<Longrightarrow> f ?x n = 0
f ` topspace (nsphere (n - Suc 0)) \<subseteq> topspace (nsphere (n - Suc 0))
continuous_map (nsphere n) (nsphere n) f

goal (1 subgoal):
 1. f ` (topspace (nsphere n) \<inter> equator n) \<subseteq> topspace (nsphere n) \<inter> equator n
[PROOF STEP]
by (auto simp: equator_def continuous_map_def image_subset_iff)
[PROOF STATE]
proof (state)
this:
f ` (topspace (nsphere n) \<inter> equator n) \<subseteq> topspace (nsphere n) \<inter> equator n

goal (2 subgoals):
 1. n = 0 \<Longrightarrow> even (Brouwer_degree2 n f - Brouwer_degree2 (n - Suc 0) f)
 2. n \<noteq> 0 \<Longrightarrow> even (Brouwer_degree2 n f - Brouwer_degree2 (n - Suc 0) f)
[PROOF STEP]
have "\<And>k. continuous_map (powertop_real UNIV) euclideanreal (\<lambda>x. - x k)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<And>k. continuous_map (powertop_real UNIV) euclideanreal (\<lambda>x. - x k)
[PROOF STEP]
by (metis UNIV_I continuous_map_product_projection continuous_map_minus)
[PROOF STATE]
proof (state)
this:
continuous_map (powertop_real UNIV) euclideanreal (\<lambda>x. - x ?k)

goal (2 subgoals):
 1. n = 0 \<Longrightarrow> even (Brouwer_degree2 n f - Brouwer_degree2 (n - Suc 0) f)
 2. n \<noteq> 0 \<Longrightarrow> even (Brouwer_degree2 n f - Brouwer_degree2 (n - Suc 0) f)
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
continuous_map (powertop_real UNIV) euclideanreal (\<lambda>x. - x ?k)
[PROOF STEP]
have cm_neg: "continuous_map (nsphere m) (nsphere m) neg" for m
[PROOF STATE]
proof (prove)
using this:
continuous_map (powertop_real UNIV) euclideanreal (\<lambda>x. - x ?k)

goal (1 subgoal):
 1. continuous_map (nsphere m) (nsphere m) neg
[PROOF STEP]
by (force simp: nsphere continuous_map_in_subtopology neg_def continuous_map_componentwise_UNIV intro: continuous_map_from_subtopology)
[PROOF STATE]
proof (state)
this:
continuous_map (nsphere ?m1) (nsphere ?m1) neg

goal (2 subgoals):
 1. n = 0 \<Longrightarrow> even (Brouwer_degree2 n f - Brouwer_degree2 (n - Suc 0) f)
 2. n \<noteq> 0 \<Longrightarrow> even (Brouwer_degree2 n f - Brouwer_degree2 (n - Suc 0) f)
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
continuous_map (nsphere ?m1) (nsphere ?m1) neg
[PROOF STEP]
have cm_neg_lu: "continuous_map (lsphere n) (usphere n) neg"
[PROOF STATE]
proof (prove)
using this:
continuous_map (nsphere ?m1) (nsphere ?m1) neg

goal (1 subgoal):
 1. continuous_map (lsphere n) (usphere n) neg
[PROOF STEP]
by (auto simp: lsphere_def usphere_def lower_def upper_def continuous_map_from_subtopology continuous_map_in_subtopology)
[PROOF STATE]
proof (state)
this:
continuous_map (lsphere n) (usphere n) neg

goal (2 subgoals):
 1. n = 0 \<Longrightarrow> even (Brouwer_degree2 n f - Brouwer_degree2 (n - Suc 0) f)
 2. n \<noteq> 0 \<Longrightarrow> even (Brouwer_degree2 n f - Brouwer_degree2 (n - Suc 0) f)
[PROOF STEP]
have neg_in_top_iff: "neg x \<in> topspace(nsphere m) \<longleftrightarrow> x \<in> topspace(nsphere m)" for m x
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (neg x \<in> topspace (nsphere m)) = (x \<in> topspace (nsphere m))
[PROOF STEP]
by (simp add: nsphere_def neg_def topspace_Euclidean_space)
[PROOF STATE]
proof (state)
this:
(neg ?x1 \<in> topspace (nsphere ?m1)) = (?x1 \<in> topspace (nsphere ?m1))

goal (2 subgoals):
 1. n = 0 \<Longrightarrow> even (Brouwer_degree2 n f - Brouwer_degree2 (n - Suc 0) f)
 2. n \<noteq> 0 \<Longrightarrow> even (Brouwer_degree2 n f - Brouwer_degree2 (n - Suc 0) f)
[PROOF STEP]
obtain z where zcarr: "z \<in> carrier (reduced_homology_group (int n - 1) (nsphere (n - Suc 0)))"
    and zeq: "subgroup_generated (reduced_homology_group (int n - 1) (nsphere (n - Suc 0))) {z}
              = reduced_homology_group (int n - 1) (nsphere (n - Suc 0))"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (\<And>z. \<lbrakk>z \<in> carrier (reduced_homology_group (int n - 1) (nsphere (n - Suc 0))); subgroup_generated (reduced_homology_group (int n - 1) (nsphere (n - Suc 0))) {z} = reduced_homology_group (int n - 1) (nsphere (n - Suc 0))\<rbrakk> \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
using cyclic_reduced_homology_group_nsphere [of "int n - 1" "n - Suc 0"]
[PROOF STATE]
proof (prove)
using this:
cyclic_group (reduced_homology_group (int n - 1) (nsphere (n - Suc 0)))

goal (1 subgoal):
 1. (\<And>z. \<lbrakk>z \<in> carrier (reduced_homology_group (int n - 1) (nsphere (n - Suc 0))); subgroup_generated (reduced_homology_group (int n - 1) (nsphere (n - Suc 0))) {z} = reduced_homology_group (int n - 1) (nsphere (n - Suc 0))\<rbrakk> \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by (auto simp: cyclic_group_def)
[PROOF STATE]
proof (state)
this:
z \<in> carrier (reduced_homology_group (int n - 1) (nsphere (n - Suc 0)))
subgroup_generated (reduced_homology_group (int n - 1) (nsphere (n - Suc 0))) {z} = reduced_homology_group (int n - 1) (nsphere (n - Suc 0))

goal (2 subgoals):
 1. n = 0 \<Longrightarrow> even (Brouwer_degree2 n f - Brouwer_degree2 (n - Suc 0) f)
 2. n \<noteq> 0 \<Longrightarrow> even (Brouwer_degree2 n f - Brouwer_degree2 (n - Suc 0) f)
[PROOF STEP]
have "hom_boundary n (subtopology (nsphere n) {x. x n \<le> 0}) {x. x n = 0}
      \<in> Group.iso (relative_homology_group n
                     (subtopology (nsphere n) {x. x n \<le> 0}) {x. x n = 0})
                  (reduced_homology_group (int n - 1) (nsphere (n - Suc 0)))"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. hom_boundary (int n) (subtopology (nsphere n) {x. x n \<le> 0}) {x. x n = 0} \<in> Group.iso (relative_homology_group (int n) (subtopology (nsphere n) {x. x n \<le> 0}) {x. x n = 0}) (reduced_homology_group (int n - 1) (nsphere (n - Suc 0)))
[PROOF STEP]
using iso_lower_hemisphere_reduced_homology_group [of "int n - 1" "n - Suc 0"] False
[PROOF STATE]
proof (prove)
using this:
hom_boundary (1 + (int n - 1)) (subtopology (nsphere (Suc (n - Suc 0))) {x. x (Suc (n - Suc 0)) \<le> 0}) {x. x (Suc (n - Suc 0)) = 0} \<in> Group.iso (relative_homology_group (1 + (int n - 1)) (subtopology (nsphere (Suc (n - Suc 0))) {x. x (Suc (n - Suc 0)) \<le> 0}) {x. x (Suc (n - Suc 0)) = 0}) (reduced_homology_group (int n - 1) (nsphere (n - Suc 0)))
n \<noteq> 0

goal (1 subgoal):
 1. hom_boundary (int n) (subtopology (nsphere n) {x. x n \<le> 0}) {x. x n = 0} \<in> Group.iso (relative_homology_group (int n) (subtopology (nsphere n) {x. x n \<le> 0}) {x. x n = 0}) (reduced_homology_group (int n - 1) (nsphere (n - Suc 0)))
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
hom_boundary (int n) (subtopology (nsphere n) {x. x n \<le> 0}) {x. x n = 0} \<in> Group.iso (relative_homology_group (int n) (subtopology (nsphere n) {x. x n \<le> 0}) {x. x n = 0}) (reduced_homology_group (int n - 1) (nsphere (n - Suc 0)))

goal (2 subgoals):
 1. n = 0 \<Longrightarrow> even (Brouwer_degree2 n f - Brouwer_degree2 (n - Suc 0) f)
 2. n \<noteq> 0 \<Longrightarrow> even (Brouwer_degree2 n f - Brouwer_degree2 (n - Suc 0) f)
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
hom_boundary (int n) (subtopology (nsphere n) {x. x n \<le> 0}) {x. x n = 0} \<in> Group.iso (relative_homology_group (int n) (subtopology (nsphere n) {x. x n \<le> 0}) {x. x n = 0}) (reduced_homology_group (int n - 1) (nsphere (n - Suc 0)))
[PROOF STEP]
obtain gp where g: "group_isomorphisms
                          (relative_homology_group n (subtopology (nsphere n) {x. x n \<le> 0}) {x. x n = 0})
                          (reduced_homology_group (int n - 1) (nsphere (n - Suc 0)))
                          (hom_boundary n (subtopology (nsphere n) {x. x n \<le> 0}) {x. x n = 0})
                          gp"
[PROOF STATE]
proof (prove)
using this:
hom_boundary (int n) (subtopology (nsphere n) {x. x n \<le> 0}) {x. x n = 0} \<in> Group.iso (relative_homology_group (int n) (subtopology (nsphere n) {x. x n \<le> 0}) {x. x n = 0}) (reduced_homology_group (int n - 1) (nsphere (n - Suc 0)))

goal (1 subgoal):
 1. (\<And>gp. group_isomorphisms (relative_homology_group (int n) (subtopology (nsphere n) {x. x n \<le> 0}) {x. x n = 0}) (reduced_homology_group (int n - 1) (nsphere (n - Suc 0))) (hom_boundary (int n) (subtopology (nsphere n) {x. x n \<le> 0}) {x. x n = 0}) gp \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by (auto simp: group.iso_iff_group_isomorphisms)
[PROOF STATE]
proof (state)
this:
group_isomorphisms (relative_homology_group (int n) (subtopology (nsphere n) {x. x n \<le> 0}) {x. x n = 0}) (reduced_homology_group (int n - 1) (nsphere (n - Suc 0))) (hom_boundary (int n) (subtopology (nsphere n) {x. x n \<le> 0}) {x. x n = 0}) gp

goal (2 subgoals):
 1. n = 0 \<Longrightarrow> even (Brouwer_degree2 n f - Brouwer_degree2 (n - Suc 0) f)
 2. n \<noteq> 0 \<Longrightarrow> even (Brouwer_degree2 n f - Brouwer_degree2 (n - Suc 0) f)
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
group_isomorphisms (relative_homology_group (int n) (subtopology (nsphere n) {x. x n \<le> 0}) {x. x n = 0}) (reduced_homology_group (int n - 1) (nsphere (n - Suc 0))) (hom_boundary (int n) (subtopology (nsphere n) {x. x n \<le> 0}) {x. x n = 0}) gp
[PROOF STEP]
interpret gp: group_hom "reduced_homology_group (int n - 1) (nsphere (n - Suc 0))"
    "relative_homology_group n (subtopology (nsphere n) {x. x n \<le> 0}) {x. x n = 0}" gp
[PROOF STATE]
proof (prove)
using this:
group_isomorphisms (relative_homology_group (int n) (subtopology (nsphere n) {x. x n \<le> 0}) {x. x n = 0}) (reduced_homology_group (int n - 1) (nsphere (n - Suc 0))) (hom_boundary (int n) (subtopology (nsphere n) {x. x n \<le> 0}) {x. x n = 0}) gp

goal (1 subgoal):
 1. group_hom (reduced_homology_group (int n - 1) (nsphere (n - Suc 0))) (relative_homology_group (int n) (subtopology (nsphere n) {x. x n \<le> 0}) {x. x n = 0}) gp
[PROOF STEP]
by (simp add: group_hom_axioms_def group_hom_def group_isomorphisms_def)
[PROOF STATE]
proof (state)
goal (2 subgoals):
 1. n = 0 \<Longrightarrow> even (Brouwer_degree2 n f - Brouwer_degree2 (n - Suc 0) f)
 2. n \<noteq> 0 \<Longrightarrow> even (Brouwer_degree2 n f - Brouwer_degree2 (n - Suc 0) f)
[PROOF STEP]
obtain zp where zpcarr: "zp \<in> carrier(relative_homology_group n (lsphere n) (equator n))"
    and zp_z: "hom_boundary n (lsphere n) (equator n) zp = z"
    and zp_sg: "subgroup_generated (relative_homology_group n (lsphere n) (equator n)) {zp}
                = relative_homology_group n (lsphere n) (equator n)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (\<And>zp. \<lbrakk>zp \<in> carrier (relative_homology_group (int n) (lsphere n) (equator n)); hom_boundary (int n) (lsphere n) (equator n) zp = z; subgroup_generated (relative_homology_group (int n) (lsphere n) (equator n)) {zp} = relative_homology_group (int n) (lsphere n) (equator n)\<rbrakk> \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
proof
[PROOF STATE]
proof (state)
goal (3 subgoals):
 1. (\<And>zp. \<lbrakk>zp \<in> carrier (relative_homology_group (int n) (lsphere n) (equator n)); hom_boundary (int n) (lsphere n) (equator n) zp = z; subgroup_generated (relative_homology_group (int n) (lsphere n) (equator n)) {zp} = relative_homology_group (int n) (lsphere n) (equator n)\<rbrakk> \<Longrightarrow> thesis) \<Longrightarrow> ?zp4 \<in> carrier (relative_homology_group (int n) (lsphere n) (equator n))
 2. (\<And>zp. \<lbrakk>zp \<in> carrier (relative_homology_group (int n) (lsphere n) (equator n)); hom_boundary (int n) (lsphere n) (equator n) zp = z; subgroup_generated (relative_homology_group (int n) (lsphere n) (equator n)) {zp} = relative_homology_group (int n) (lsphere n) (equator n)\<rbrakk> \<Longrightarrow> thesis) \<Longrightarrow> hom_boundary (int n) (lsphere n) (equator n) ?zp4 = z
 3. (\<And>zp. \<lbrakk>zp \<in> carrier (relative_homology_group (int n) (lsphere n) (equator n)); hom_boundary (int n) (lsphere n) (equator n) zp = z; subgroup_generated (relative_homology_group (int n) (lsphere n) (equator n)) {zp} = relative_homology_group (int n) (lsphere n) (equator n)\<rbrakk> \<Longrightarrow> thesis) \<Longrightarrow> subgroup_generated (relative_homology_group (int n) (lsphere n) (equator n)) {?zp4} = relative_homology_group (int n) (lsphere n) (equator n)
[PROOF STEP]
show "gp z \<in> carrier (relative_homology_group n (lsphere n) (equator n))"
      "hom_boundary n (lsphere n) (equator n) (gp z) = z"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. gp z \<in> carrier (relative_homology_group (int n) (lsphere n) (equator n)) &&& hom_boundary (int n) (lsphere n) (equator n) (gp z) = z
[PROOF STEP]
using g zcarr
[PROOF STATE]
proof (prove)
using this:
group_isomorphisms (relative_homology_group (int n) (subtopology (nsphere n) {x. x n \<le> 0}) {x. x n = 0}) (reduced_homology_group (int n - 1) (nsphere (n - Suc 0))) (hom_boundary (int n) (subtopology (nsphere n) {x. x n \<le> 0}) {x. x n = 0}) gp
z \<in> carrier (reduced_homology_group (int n - 1) (nsphere (n - Suc 0)))

goal (1 subgoal):
 1. gp z \<in> carrier (relative_homology_group (int n) (lsphere n) (equator n)) &&& hom_boundary (int n) (lsphere n) (equator n) (gp z) = z
[PROOF STEP]
by (auto simp: lsphere_def equator_def lower_def group_isomorphisms_def)
[PROOF STATE]
proof (state)
this:
gp z \<in> carrier (relative_homology_group (int n) (lsphere n) (equator n))
hom_boundary (int n) (lsphere n) (equator n) (gp z) = z

goal (1 subgoal):
 1. (\<And>zp. \<lbrakk>zp \<in> carrier (relative_homology_group (int n) (lsphere n) (equator n)); hom_boundary (int n) (lsphere n) (equator n) zp = z; subgroup_generated (relative_homology_group (int n) (lsphere n) (equator n)) {zp} = relative_homology_group (int n) (lsphere n) (equator n)\<rbrakk> \<Longrightarrow> thesis) \<Longrightarrow> subgroup_generated (relative_homology_group (int n) (lsphere n) (equator n)) {gp z} = relative_homology_group (int n) (lsphere n) (equator n)
[PROOF STEP]
have giso: "gp \<in> Group.iso (reduced_homology_group (int n - 1) (nsphere (n - Suc 0)))
                     (relative_homology_group n (subtopology (nsphere n) {x. x n \<le> 0}) {x. x n = 0})"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. gp \<in> Group.iso (reduced_homology_group (int n - 1) (nsphere (n - Suc 0))) (relative_homology_group (int n) (subtopology (nsphere n) {x. x n \<le> 0}) {x. x n = 0})
[PROOF STEP]
by (metis (mono_tags, lifting) g group_isomorphisms_imp_iso group_isomorphisms_sym)
[PROOF STATE]
proof (state)
this:
gp \<in> Group.iso (reduced_homology_group (int n - 1) (nsphere (n - Suc 0))) (relative_homology_group (int n) (subtopology (nsphere n) {x. x n \<le> 0}) {x. x n = 0})

goal (1 subgoal):
 1. (\<And>zp. \<lbrakk>zp \<in> carrier (relative_homology_group (int n) (lsphere n) (equator n)); hom_boundary (int n) (lsphere n) (equator n) zp = z; subgroup_generated (relative_homology_group (int n) (lsphere n) (equator n)) {zp} = relative_homology_group (int n) (lsphere n) (equator n)\<rbrakk> \<Longrightarrow> thesis) \<Longrightarrow> subgroup_generated (relative_homology_group (int n) (lsphere n) (equator n)) {gp z} = relative_homology_group (int n) (lsphere n) (equator n)
[PROOF STEP]
show "subgroup_generated (relative_homology_group n (lsphere n) (equator n)) {gp z} =
        relative_homology_group n (lsphere n) (equator n)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. subgroup_generated (relative_homology_group (int n) (lsphere n) (equator n)) {gp z} = relative_homology_group (int n) (lsphere n) (equator n)
[PROOF STEP]
apply (rule monoid.equality)
[PROOF STATE]
proof (prove)
goal (4 subgoals):
 1. carrier (subgroup_generated (relative_homology_group (int n) (lsphere n) (equator n)) {gp z}) = carrier (relative_homology_group (int n) (lsphere n) (equator n))
 2. (\<otimes>\<^bsub>subgroup_generated (relative_homology_group (int n) (lsphere n) (equator n)) {gp z}\<^esub>) = (\<otimes>\<^bsub>relative_homology_group (int n) (lsphere n) (equator n)\<^esub>)
 3. \<one>\<^bsub>subgroup_generated (relative_homology_group (int n) (lsphere n) (equator n)) {gp z}\<^esub> = \<one>\<^bsub>relative_homology_group (int n) (lsphere n) (equator n)\<^esub>
 4. monoid.more (subgroup_generated (relative_homology_group (int n) (lsphere n) (equator n)) {gp z}) = monoid.more (relative_homology_group (int n) (lsphere n) (equator n))
[PROOF STEP]
using giso gp.subgroup_generated_by_image [of "{z}"] zcarr
[PROOF STATE]
proof (prove)
using this:
gp \<in> Group.iso (reduced_homology_group (int n - 1) (nsphere (n - Suc 0))) (relative_homology_group (int n) (subtopology (nsphere n) {x. x n \<le> 0}) {x. x n = 0})
{z} \<subseteq> carrier (reduced_homology_group (int n - 1) (nsphere (n - Suc 0))) \<Longrightarrow> carrier (subgroup_generated (relative_homology_group (int n) (subtopology (nsphere n) {x. x n \<le> 0}) {x. x n = 0}) (gp ` {z})) = gp ` carrier (subgroup_generated (reduced_homology_group (int n - 1) (nsphere (n - Suc 0))) {z})
z \<in> carrier (reduced_homology_group (int n - 1) (nsphere (n - Suc 0)))

goal (4 subgoals):
 1. carrier (subgroup_generated (relative_homology_group (int n) (lsphere n) (equator n)) {gp z}) = carrier (relative_homology_group (int n) (lsphere n) (equator n))
 2. (\<otimes>\<^bsub>subgroup_generated (relative_homology_group (int n) (lsphere n) (equator n)) {gp z}\<^esub>) = (\<otimes>\<^bsub>relative_homology_group (int n) (lsphere n) (equator n)\<^esub>)
 3. \<one>\<^bsub>subgroup_generated (relative_homology_group (int n) (lsphere n) (equator n)) {gp z}\<^esub> = \<one>\<^bsub>relative_homology_group (int n) (lsphere n) (equator n)\<^esub>
 4. monoid.more (subgroup_generated (relative_homology_group (int n) (lsphere n) (equator n)) {gp z}) = monoid.more (relative_homology_group (int n) (lsphere n) (equator n))
[PROOF STEP]
by (auto simp: lsphere_def equator_def lower_def zeq gp.iso_iff)
[PROOF STATE]
proof (state)
this:
subgroup_generated (relative_homology_group (int n) (lsphere n) (equator n)) {gp z} = relative_homology_group (int n) (lsphere n) (equator n)

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
zp \<in> carrier (relative_homology_group (int n) (lsphere n) (equator n))
hom_boundary (int n) (lsphere n) (equator n) zp = z
subgroup_generated (relative_homology_group (int n) (lsphere n) (equator n)) {zp} = relative_homology_group (int n) (lsphere n) (equator n)

goal (2 subgoals):
 1. n = 0 \<Longrightarrow> even (Brouwer_degree2 n f - Brouwer_degree2 (n - Suc 0) f)
 2. n \<noteq> 0 \<Longrightarrow> even (Brouwer_degree2 n f - Brouwer_degree2 (n - Suc 0) f)
[PROOF STEP]
have hb_iso: "hom_boundary n (subtopology (nsphere n) {x. x n \<ge> 0}) {x. x n = 0}
            \<in> iso (relative_homology_group n (subtopology (nsphere n) {x. x n \<ge> 0}) {x. x n = 0})
                  (reduced_homology_group (int n - 1) (nsphere (n - Suc 0)))"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. hom_boundary (int n) (subtopology (nsphere n) {x. 0 \<le> x n}) {x. x n = 0} \<in> Group.iso (relative_homology_group (int n) (subtopology (nsphere n) {x. 0 \<le> x n}) {x. x n = 0}) (reduced_homology_group (int n - 1) (nsphere (n - Suc 0)))
[PROOF STEP]
using iso_upper_hemisphere_reduced_homology_group [of "int n - 1" "n - Suc 0"] False
[PROOF STATE]
proof (prove)
using this:
hom_boundary (1 + (int n - 1)) (subtopology (nsphere (Suc (n - Suc 0))) {x. 0 \<le> x (Suc (n - Suc 0))}) {x. x (Suc (n - Suc 0)) = 0} \<in> Group.iso (relative_homology_group (1 + (int n - 1)) (subtopology (nsphere (Suc (n - Suc 0))) {x. 0 \<le> x (Suc (n - Suc 0))}) {x. x (Suc (n - Suc 0)) = 0}) (reduced_homology_group (int n - 1) (nsphere (n - Suc 0)))
n \<noteq> 0

goal (1 subgoal):
 1. hom_boundary (int n) (subtopology (nsphere n) {x. 0 \<le> x n}) {x. x n = 0} \<in> Group.iso (relative_homology_group (int n) (subtopology (nsphere n) {x. 0 \<le> x n}) {x. x n = 0}) (reduced_homology_group (int n - 1) (nsphere (n - Suc 0)))
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
hom_boundary (int n) (subtopology (nsphere n) {x. 0 \<le> x n}) {x. x n = 0} \<in> Group.iso (relative_homology_group (int n) (subtopology (nsphere n) {x. 0 \<le> x n}) {x. x n = 0}) (reduced_homology_group (int n - 1) (nsphere (n - Suc 0)))

goal (2 subgoals):
 1. n = 0 \<Longrightarrow> even (Brouwer_degree2 n f - Brouwer_degree2 (n - Suc 0) f)
 2. n \<noteq> 0 \<Longrightarrow> even (Brouwer_degree2 n f - Brouwer_degree2 (n - Suc 0) f)
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
hom_boundary (int n) (subtopology (nsphere n) {x. 0 \<le> x n}) {x. x n = 0} \<in> Group.iso (relative_homology_group (int n) (subtopology (nsphere n) {x. 0 \<le> x n}) {x. x n = 0}) (reduced_homology_group (int n - 1) (nsphere (n - Suc 0)))
[PROOF STEP]
obtain gn where g: "group_isomorphisms
                          (relative_homology_group n (subtopology (nsphere n) {x. x n \<ge> 0}) {x. x n = 0})
                          (reduced_homology_group (int n - 1) (nsphere (n - Suc 0)))
                          (hom_boundary n (subtopology (nsphere n) {x. x n \<ge> 0}) {x. x n = 0})
                          gn"
[PROOF STATE]
proof (prove)
using this:
hom_boundary (int n) (subtopology (nsphere n) {x. 0 \<le> x n}) {x. x n = 0} \<in> Group.iso (relative_homology_group (int n) (subtopology (nsphere n) {x. 0 \<le> x n}) {x. x n = 0}) (reduced_homology_group (int n - 1) (nsphere (n - Suc 0)))

goal (1 subgoal):
 1. (\<And>gn. group_isomorphisms (relative_homology_group (int n) (subtopology (nsphere n) {x. 0 \<le> x n}) {x. x n = 0}) (reduced_homology_group (int n - 1) (nsphere (n - Suc 0))) (hom_boundary (int n) (subtopology (nsphere n) {x. 0 \<le> x n}) {x. x n = 0}) gn \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by (auto simp: group.iso_iff_group_isomorphisms)
[PROOF STATE]
proof (state)
this:
group_isomorphisms (relative_homology_group (int n) (subtopology (nsphere n) {x. 0 \<le> x n}) {x. x n = 0}) (reduced_homology_group (int n - 1) (nsphere (n - Suc 0))) (hom_boundary (int n) (subtopology (nsphere n) {x. 0 \<le> x n}) {x. x n = 0}) gn

goal (2 subgoals):
 1. n = 0 \<Longrightarrow> even (Brouwer_degree2 n f - Brouwer_degree2 (n - Suc 0) f)
 2. n \<noteq> 0 \<Longrightarrow> even (Brouwer_degree2 n f - Brouwer_degree2 (n - Suc 0) f)
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
group_isomorphisms (relative_homology_group (int n) (subtopology (nsphere n) {x. 0 \<le> x n}) {x. x n = 0}) (reduced_homology_group (int n - 1) (nsphere (n - Suc 0))) (hom_boundary (int n) (subtopology (nsphere n) {x. 0 \<le> x n}) {x. x n = 0}) gn
[PROOF STEP]
interpret gn: group_hom "reduced_homology_group (int n - 1) (nsphere (n - Suc 0))"
    "relative_homology_group n (subtopology (nsphere n) {x. x n \<ge> 0}) {x. x n = 0}" gn
[PROOF STATE]
proof (prove)
using this:
group_isomorphisms (relative_homology_group (int n) (subtopology (nsphere n) {x. 0 \<le> x n}) {x. x n = 0}) (reduced_homology_group (int n - 1) (nsphere (n - Suc 0))) (hom_boundary (int n) (subtopology (nsphere n) {x. 0 \<le> x n}) {x. x n = 0}) gn

goal (1 subgoal):
 1. group_hom (reduced_homology_group (int n - 1) (nsphere (n - Suc 0))) (relative_homology_group (int n) (subtopology (nsphere n) {x. 0 \<le> x n}) {x. x n = 0}) gn
[PROOF STEP]
by (simp add: group_hom_axioms_def group_hom_def group_isomorphisms_def)
[PROOF STATE]
proof (state)
goal (2 subgoals):
 1. n = 0 \<Longrightarrow> even (Brouwer_degree2 n f - Brouwer_degree2 (n - Suc 0) f)
 2. n \<noteq> 0 \<Longrightarrow> even (Brouwer_degree2 n f - Brouwer_degree2 (n - Suc 0) f)
[PROOF STEP]
obtain zn where zncarr: "zn \<in> carrier(relative_homology_group n (usphere n) (equator n))"
    and zn_z: "hom_boundary n (usphere n) (equator n) zn = z"
    and zn_sg: "subgroup_generated (relative_homology_group n (usphere n) (equator n)) {zn}
                 = relative_homology_group n (usphere n) (equator n)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (\<And>zn. \<lbrakk>zn \<in> carrier (relative_homology_group (int n) (usphere n) (equator n)); hom_boundary (int n) (usphere n) (equator n) zn = z; subgroup_generated (relative_homology_group (int n) (usphere n) (equator n)) {zn} = relative_homology_group (int n) (usphere n) (equator n)\<rbrakk> \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
proof
[PROOF STATE]
proof (state)
goal (3 subgoals):
 1. (\<And>zn. \<lbrakk>zn \<in> carrier (relative_homology_group (int n) (usphere n) (equator n)); hom_boundary (int n) (usphere n) (equator n) zn = z; subgroup_generated (relative_homology_group (int n) (usphere n) (equator n)) {zn} = relative_homology_group (int n) (usphere n) (equator n)\<rbrakk> \<Longrightarrow> thesis) \<Longrightarrow> ?zn4 \<in> carrier (relative_homology_group (int n) (usphere n) (equator n))
 2. (\<And>zn. \<lbrakk>zn \<in> carrier (relative_homology_group (int n) (usphere n) (equator n)); hom_boundary (int n) (usphere n) (equator n) zn = z; subgroup_generated (relative_homology_group (int n) (usphere n) (equator n)) {zn} = relative_homology_group (int n) (usphere n) (equator n)\<rbrakk> \<Longrightarrow> thesis) \<Longrightarrow> hom_boundary (int n) (usphere n) (equator n) ?zn4 = z
 3. (\<And>zn. \<lbrakk>zn \<in> carrier (relative_homology_group (int n) (usphere n) (equator n)); hom_boundary (int n) (usphere n) (equator n) zn = z; subgroup_generated (relative_homology_group (int n) (usphere n) (equator n)) {zn} = relative_homology_group (int n) (usphere n) (equator n)\<rbrakk> \<Longrightarrow> thesis) \<Longrightarrow> subgroup_generated (relative_homology_group (int n) (usphere n) (equator n)) {?zn4} = relative_homology_group (int n) (usphere n) (equator n)
[PROOF STEP]
show "gn z \<in> carrier (relative_homology_group n (usphere n) (equator n))"
      "hom_boundary n (usphere n) (equator n) (gn z) = z"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. gn z \<in> carrier (relative_homology_group (int n) (usphere n) (equator n)) &&& hom_boundary (int n) (usphere n) (equator n) (gn z) = z
[PROOF STEP]
using g zcarr
[PROOF STATE]
proof (prove)
using this:
group_isomorphisms (relative_homology_group (int n) (subtopology (nsphere n) {x. 0 \<le> x n}) {x. x n = 0}) (reduced_homology_group (int n - 1) (nsphere (n - Suc 0))) (hom_boundary (int n) (subtopology (nsphere n) {x. 0 \<le> x n}) {x. x n = 0}) gn
z \<in> carrier (reduced_homology_group (int n - 1) (nsphere (n - Suc 0)))

goal (1 subgoal):
 1. gn z \<in> carrier (relative_homology_group (int n) (usphere n) (equator n)) &&& hom_boundary (int n) (usphere n) (equator n) (gn z) = z
[PROOF STEP]
by (auto simp: usphere_def equator_def upper_def group_isomorphisms_def)
[PROOF STATE]
proof (state)
this:
gn z \<in> carrier (relative_homology_group (int n) (usphere n) (equator n))
hom_boundary (int n) (usphere n) (equator n) (gn z) = z

goal (1 subgoal):
 1. (\<And>zn. \<lbrakk>zn \<in> carrier (relative_homology_group (int n) (usphere n) (equator n)); hom_boundary (int n) (usphere n) (equator n) zn = z; subgroup_generated (relative_homology_group (int n) (usphere n) (equator n)) {zn} = relative_homology_group (int n) (usphere n) (equator n)\<rbrakk> \<Longrightarrow> thesis) \<Longrightarrow> subgroup_generated (relative_homology_group (int n) (usphere n) (equator n)) {gn z} = relative_homology_group (int n) (usphere n) (equator n)
[PROOF STEP]
have giso: "gn \<in> Group.iso (reduced_homology_group (int n - 1) (nsphere (n - Suc 0)))
                     (relative_homology_group n (subtopology (nsphere n) {x. x n \<ge> 0}) {x. x n = 0})"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. gn \<in> Group.iso (reduced_homology_group (int n - 1) (nsphere (n - Suc 0))) (relative_homology_group (int n) (subtopology (nsphere n) {x. 0 \<le> x n}) {x. x n = 0})
[PROOF STEP]
by (metis (mono_tags, lifting) g group_isomorphisms_imp_iso group_isomorphisms_sym)
[PROOF STATE]
proof (state)
this:
gn \<in> Group.iso (reduced_homology_group (int n - 1) (nsphere (n - Suc 0))) (relative_homology_group (int n) (subtopology (nsphere n) {x. 0 \<le> x n}) {x. x n = 0})

goal (1 subgoal):
 1. (\<And>zn. \<lbrakk>zn \<in> carrier (relative_homology_group (int n) (usphere n) (equator n)); hom_boundary (int n) (usphere n) (equator n) zn = z; subgroup_generated (relative_homology_group (int n) (usphere n) (equator n)) {zn} = relative_homology_group (int n) (usphere n) (equator n)\<rbrakk> \<Longrightarrow> thesis) \<Longrightarrow> subgroup_generated (relative_homology_group (int n) (usphere n) (equator n)) {gn z} = relative_homology_group (int n) (usphere n) (equator n)
[PROOF STEP]
show "subgroup_generated (relative_homology_group n (usphere n) (equator n)) {gn z} =
        relative_homology_group n (usphere n) (equator n)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. subgroup_generated (relative_homology_group (int n) (usphere n) (equator n)) {gn z} = relative_homology_group (int n) (usphere n) (equator n)
[PROOF STEP]
apply (rule monoid.equality)
[PROOF STATE]
proof (prove)
goal (4 subgoals):
 1. carrier (subgroup_generated (relative_homology_group (int n) (usphere n) (equator n)) {gn z}) = carrier (relative_homology_group (int n) (usphere n) (equator n))
 2. (\<otimes>\<^bsub>subgroup_generated (relative_homology_group (int n) (usphere n) (equator n)) {gn z}\<^esub>) = (\<otimes>\<^bsub>relative_homology_group (int n) (usphere n) (equator n)\<^esub>)
 3. \<one>\<^bsub>subgroup_generated (relative_homology_group (int n) (usphere n) (equator n)) {gn z}\<^esub> = \<one>\<^bsub>relative_homology_group (int n) (usphere n) (equator n)\<^esub>
 4. monoid.more (subgroup_generated (relative_homology_group (int n) (usphere n) (equator n)) {gn z}) = monoid.more (relative_homology_group (int n) (usphere n) (equator n))
[PROOF STEP]
using giso gn.subgroup_generated_by_image [of "{z}"] zcarr
[PROOF STATE]
proof (prove)
using this:
gn \<in> Group.iso (reduced_homology_group (int n - 1) (nsphere (n - Suc 0))) (relative_homology_group (int n) (subtopology (nsphere n) {x. 0 \<le> x n}) {x. x n = 0})
{z} \<subseteq> carrier (reduced_homology_group (int n - 1) (nsphere (n - Suc 0))) \<Longrightarrow> carrier (subgroup_generated (relative_homology_group (int n) (subtopology (nsphere n) {x. 0 \<le> x n}) {x. x n = 0}) (gn ` {z})) = gn ` carrier (subgroup_generated (reduced_homology_group (int n - 1) (nsphere (n - Suc 0))) {z})
z \<in> carrier (reduced_homology_group (int n - 1) (nsphere (n - Suc 0)))

goal (4 subgoals):
 1. carrier (subgroup_generated (relative_homology_group (int n) (usphere n) (equator n)) {gn z}) = carrier (relative_homology_group (int n) (usphere n) (equator n))
 2. (\<otimes>\<^bsub>subgroup_generated (relative_homology_group (int n) (usphere n) (equator n)) {gn z}\<^esub>) = (\<otimes>\<^bsub>relative_homology_group (int n) (usphere n) (equator n)\<^esub>)
 3. \<one>\<^bsub>subgroup_generated (relative_homology_group (int n) (usphere n) (equator n)) {gn z}\<^esub> = \<one>\<^bsub>relative_homology_group (int n) (usphere n) (equator n)\<^esub>
 4. monoid.more (subgroup_generated (relative_homology_group (int n) (usphere n) (equator n)) {gn z}) = monoid.more (relative_homology_group (int n) (usphere n) (equator n))
[PROOF STEP]
by (auto simp: usphere_def equator_def upper_def zeq gn.iso_iff)
[PROOF STATE]
proof (state)
this:
subgroup_generated (relative_homology_group (int n) (usphere n) (equator n)) {gn z} = relative_homology_group (int n) (usphere n) (equator n)

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
zn \<in> carrier (relative_homology_group (int n) (usphere n) (equator n))
hom_boundary (int n) (usphere n) (equator n) zn = z
subgroup_generated (relative_homology_group (int n) (usphere n) (equator n)) {zn} = relative_homology_group (int n) (usphere n) (equator n)

goal (2 subgoals):
 1. n = 0 \<Longrightarrow> even (Brouwer_degree2 n f - Brouwer_degree2 (n - Suc 0) f)
 2. n \<noteq> 0 \<Longrightarrow> even (Brouwer_degree2 n f - Brouwer_degree2 (n - Suc 0) f)
[PROOF STEP]
let ?hi_lu = "hom_induced n (lsphere n) (equator n) (nsphere n) (upper n) id"
[PROOF STATE]
proof (state)
goal (2 subgoals):
 1. n = 0 \<Longrightarrow> even (Brouwer_degree2 n f - Brouwer_degree2 (n - Suc 0) f)
 2. n \<noteq> 0 \<Longrightarrow> even (Brouwer_degree2 n f - Brouwer_degree2 (n - Suc 0) f)
[PROOF STEP]
interpret gh_lu: group_hom "relative_homology_group n (lsphere n) (equator n)" "?rhgn (upper n)" ?hi_lu
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. group_hom (relative_homology_group (int n) (lsphere n) (equator n)) (relative_homology_group (int n) (nsphere n) (upper n)) (hom_induced (int n) (lsphere n) (equator n) (nsphere n) (upper n) id)
[PROOF STEP]
by (simp add: group_hom_axioms_def group_hom_def hom_induced_hom)
[PROOF STATE]
proof (state)
goal (2 subgoals):
 1. n = 0 \<Longrightarrow> even (Brouwer_degree2 n f - Brouwer_degree2 (n - Suc 0) f)
 2. n \<noteq> 0 \<Longrightarrow> even (Brouwer_degree2 n f - Brouwer_degree2 (n - Suc 0) f)
[PROOF STEP]
interpret gh_eef: group_hom "?rhgn (equator n)" "?rhgn (equator n)" "?hi_ee f"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. group_hom (relative_homology_group (int n) (nsphere n) (equator n)) (relative_homology_group (int n) (nsphere n) (equator n)) (hom_induced (int n) (nsphere n) (equator n) (nsphere n) (equator n) f)
[PROOF STEP]
by (simp add: group_hom_axioms_def group_hom_def hom_induced_hom)
[PROOF STATE]
proof (state)
goal (2 subgoals):
 1. n = 0 \<Longrightarrow> even (Brouwer_degree2 n f - Brouwer_degree2 (n - Suc 0) f)
 2. n \<noteq> 0 \<Longrightarrow> even (Brouwer_degree2 n f - Brouwer_degree2 (n - Suc 0) f)
[PROOF STEP]
define wp where "wp \<equiv> ?hi_lu zp"
[PROOF STATE]
proof (state)
this:
wp \<equiv> hom_induced (int n) (lsphere n) (equator n) (nsphere n) (upper n) id zp

goal (2 subgoals):
 1. n = 0 \<Longrightarrow> even (Brouwer_degree2 n f - Brouwer_degree2 (n - Suc 0) f)
 2. n \<noteq> 0 \<Longrightarrow> even (Brouwer_degree2 n f - Brouwer_degree2 (n - Suc 0) f)
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
wp \<equiv> hom_induced (int n) (lsphere n) (equator n) (nsphere n) (upper n) id zp
[PROOF STEP]
have wpcarr: "wp \<in> carrier(?rhgn (upper n))"
[PROOF STATE]
proof (prove)
using this:
wp \<equiv> hom_induced (int n) (lsphere n) (equator n) (nsphere n) (upper n) id zp

goal (1 subgoal):
 1. wp \<in> carrier (relative_homology_group (int n) (nsphere n) (upper n))
[PROOF STEP]
by (simp add: hom_induced_carrier)
[PROOF STATE]
proof (state)
this:
wp \<in> carrier (relative_homology_group (int n) (nsphere n) (upper n))

goal (2 subgoals):
 1. n = 0 \<Longrightarrow> even (Brouwer_degree2 n f - Brouwer_degree2 (n - Suc 0) f)
 2. n \<noteq> 0 \<Longrightarrow> even (Brouwer_degree2 n f - Brouwer_degree2 (n - Suc 0) f)
[PROOF STEP]
have "hom_induced n (nsphere n) {} (nsphere n) {x. x n \<ge> 0} id
      \<in> iso (reduced_homology_group n (nsphere n))
            (?rhgn {x. x n \<ge> 0})"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. hom_induced (int n) (nsphere n) {} (nsphere n) {x. 0 \<le> x n} id \<in> Group.iso (reduced_homology_group (int n) (nsphere n)) (relative_homology_group (int n) (nsphere n) {x. 0 \<le> x n})
[PROOF STEP]
using iso_reduced_homology_group_upper_hemisphere [of n n n]
[PROOF STATE]
proof (prove)
using this:
n \<le> n \<Longrightarrow> hom_induced (int n) (nsphere n) {} (nsphere n) {x. 0 \<le> x n} id \<in> Group.iso (reduced_homology_group (int n) (nsphere n)) (relative_homology_group (int n) (nsphere n) {x. 0 \<le> x n})

goal (1 subgoal):
 1. hom_induced (int n) (nsphere n) {} (nsphere n) {x. 0 \<le> x n} id \<in> Group.iso (reduced_homology_group (int n) (nsphere n)) (relative_homology_group (int n) (nsphere n) {x. 0 \<le> x n})
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
hom_induced (int n) (nsphere n) {} (nsphere n) {x. 0 \<le> x n} id \<in> Group.iso (reduced_homology_group (int n) (nsphere n)) (relative_homology_group (int n) (nsphere n) {x. 0 \<le> x n})

goal (2 subgoals):
 1. n = 0 \<Longrightarrow> even (Brouwer_degree2 n f - Brouwer_degree2 (n - Suc 0) f)
 2. n \<noteq> 0 \<Longrightarrow> even (Brouwer_degree2 n f - Brouwer_degree2 (n - Suc 0) f)
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
hom_induced (int n) (nsphere n) {} (nsphere n) {x. 0 \<le> x n} id \<in> Group.iso (reduced_homology_group (int n) (nsphere n)) (relative_homology_group (int n) (nsphere n) {x. 0 \<le> x n})
[PROOF STEP]
have "carrier(?rhgn {x. x n \<ge> 0})
          \<subseteq> (hom_induced n (nsphere n) {} (nsphere n) {x. x n \<ge> 0} id)
                         ` carrier(reduced_homology_group n (nsphere n))"
[PROOF STATE]
proof (prove)
using this:
hom_induced (int n) (nsphere n) {} (nsphere n) {x. 0 \<le> x n} id \<in> Group.iso (reduced_homology_group (int n) (nsphere n)) (relative_homology_group (int n) (nsphere n) {x. 0 \<le> x n})

goal (1 subgoal):
 1. carrier (relative_homology_group (int n) (nsphere n) {x. 0 \<le> x n}) \<subseteq> hom_induced (int n) (nsphere n) {} (nsphere n) {x. 0 \<le> x n} id ` carrier (reduced_homology_group (int n) (nsphere n))
[PROOF STEP]
by (simp add: iso_iff)
[PROOF STATE]
proof (state)
this:
carrier (relative_homology_group (int n) (nsphere n) {x. 0 \<le> x n}) \<subseteq> hom_induced (int n) (nsphere n) {} (nsphere n) {x. 0 \<le> x n} id ` carrier (reduced_homology_group (int n) (nsphere n))

goal (2 subgoals):
 1. n = 0 \<Longrightarrow> even (Brouwer_degree2 n f - Brouwer_degree2 (n - Suc 0) f)
 2. n \<noteq> 0 \<Longrightarrow> even (Brouwer_degree2 n f - Brouwer_degree2 (n - Suc 0) f)
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
carrier (relative_homology_group (int n) (nsphere n) {x. 0 \<le> x n}) \<subseteq> hom_induced (int n) (nsphere n) {} (nsphere n) {x. 0 \<le> x n} id ` carrier (reduced_homology_group (int n) (nsphere n))
[PROOF STEP]
obtain vp where vpcarr: "vp \<in> carrier(reduced_homology_group n (nsphere n))"
    and eqwp: "hom_induced n (nsphere n) {} (nsphere n) (upper n) id vp = wp"
[PROOF STATE]
proof (prove)
using this:
carrier (relative_homology_group (int n) (nsphere n) {x. 0 \<le> x n}) \<subseteq> hom_induced (int n) (nsphere n) {} (nsphere n) {x. 0 \<le> x n} id ` carrier (reduced_homology_group (int n) (nsphere n))

goal (1 subgoal):
 1. (\<And>vp. \<lbrakk>vp \<in> carrier (reduced_homology_group (int n) (nsphere n)); hom_induced (int n) (nsphere n) {} (nsphere n) (upper n) id vp = wp\<rbrakk> \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
using wpcarr
[PROOF STATE]
proof (prove)
using this:
carrier (relative_homology_group (int n) (nsphere n) {x. 0 \<le> x n}) \<subseteq> hom_induced (int n) (nsphere n) {} (nsphere n) {x. 0 \<le> x n} id ` carrier (reduced_homology_group (int n) (nsphere n))
wp \<in> carrier (relative_homology_group (int n) (nsphere n) (upper n))

goal (1 subgoal):
 1. (\<And>vp. \<lbrakk>vp \<in> carrier (reduced_homology_group (int n) (nsphere n)); hom_induced (int n) (nsphere n) {} (nsphere n) (upper n) id vp = wp\<rbrakk> \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by (auto simp: upper_def)
[PROOF STATE]
proof (state)
this:
vp \<in> carrier (reduced_homology_group (int n) (nsphere n))
hom_induced (int n) (nsphere n) {} (nsphere n) (upper n) id vp = wp

goal (2 subgoals):
 1. n = 0 \<Longrightarrow> even (Brouwer_degree2 n f - Brouwer_degree2 (n - Suc 0) f)
 2. n \<noteq> 0 \<Longrightarrow> even (Brouwer_degree2 n f - Brouwer_degree2 (n - Suc 0) f)
[PROOF STEP]
define wn where "wn \<equiv> hom_induced n (usphere n) (equator n) (nsphere n) (lower n) id zn"
[PROOF STATE]
proof (state)
this:
wn \<equiv> hom_induced (int n) (usphere n) (equator n) (nsphere n) (lower n) id zn

goal (2 subgoals):
 1. n = 0 \<Longrightarrow> even (Brouwer_degree2 n f - Brouwer_degree2 (n - Suc 0) f)
 2. n \<noteq> 0 \<Longrightarrow> even (Brouwer_degree2 n f - Brouwer_degree2 (n - Suc 0) f)
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
wn \<equiv> hom_induced (int n) (usphere n) (equator n) (nsphere n) (lower n) id zn
[PROOF STEP]
have wncarr: "wn \<in> carrier(?rhgn (lower n))"
[PROOF STATE]
proof (prove)
using this:
wn \<equiv> hom_induced (int n) (usphere n) (equator n) (nsphere n) (lower n) id zn

goal (1 subgoal):
 1. wn \<in> carrier (relative_homology_group (int n) (nsphere n) (lower n))
[PROOF STEP]
by (simp add: hom_induced_carrier)
[PROOF STATE]
proof (state)
this:
wn \<in> carrier (relative_homology_group (int n) (nsphere n) (lower n))

goal (2 subgoals):
 1. n = 0 \<Longrightarrow> even (Brouwer_degree2 n f - Brouwer_degree2 (n - Suc 0) f)
 2. n \<noteq> 0 \<Longrightarrow> even (Brouwer_degree2 n f - Brouwer_degree2 (n - Suc 0) f)
[PROOF STEP]
have "hom_induced n (nsphere n) {} (nsphere n) {x. x n \<le> 0} id
      \<in> iso (reduced_homology_group n (nsphere n))
            (?rhgn {x. x n \<le> 0})"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. hom_induced (int n) (nsphere n) {} (nsphere n) {x. x n \<le> 0} id \<in> Group.iso (reduced_homology_group (int n) (nsphere n)) (relative_homology_group (int n) (nsphere n) {x. x n \<le> 0})
[PROOF STEP]
using iso_reduced_homology_group_lower_hemisphere [of n n n]
[PROOF STATE]
proof (prove)
using this:
n \<le> n \<Longrightarrow> hom_induced (int n) (nsphere n) {} (nsphere n) {x. x n \<le> 0} id \<in> Group.iso (reduced_homology_group (int n) (nsphere n)) (relative_homology_group (int n) (nsphere n) {x. x n \<le> 0})

goal (1 subgoal):
 1. hom_induced (int n) (nsphere n) {} (nsphere n) {x. x n \<le> 0} id \<in> Group.iso (reduced_homology_group (int n) (nsphere n)) (relative_homology_group (int n) (nsphere n) {x. x n \<le> 0})
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
hom_induced (int n) (nsphere n) {} (nsphere n) {x. x n \<le> 0} id \<in> Group.iso (reduced_homology_group (int n) (nsphere n)) (relative_homology_group (int n) (nsphere n) {x. x n \<le> 0})

goal (2 subgoals):
 1. n = 0 \<Longrightarrow> even (Brouwer_degree2 n f - Brouwer_degree2 (n - Suc 0) f)
 2. n \<noteq> 0 \<Longrightarrow> even (Brouwer_degree2 n f - Brouwer_degree2 (n - Suc 0) f)
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
hom_induced (int n) (nsphere n) {} (nsphere n) {x. x n \<le> 0} id \<in> Group.iso (reduced_homology_group (int n) (nsphere n)) (relative_homology_group (int n) (nsphere n) {x. x n \<le> 0})
[PROOF STEP]
have "carrier(?rhgn {x. x n \<le> 0})
          \<subseteq> (hom_induced n (nsphere n) {} (nsphere n) {x. x n \<le> 0} id)
                         ` carrier(reduced_homology_group n (nsphere n))"
[PROOF STATE]
proof (prove)
using this:
hom_induced (int n) (nsphere n) {} (nsphere n) {x. x n \<le> 0} id \<in> Group.iso (reduced_homology_group (int n) (nsphere n)) (relative_homology_group (int n) (nsphere n) {x. x n \<le> 0})

goal (1 subgoal):
 1. carrier (relative_homology_group (int n) (nsphere n) {x. x n \<le> 0}) \<subseteq> hom_induced (int n) (nsphere n) {} (nsphere n) {x. x n \<le> 0} id ` carrier (reduced_homology_group (int n) (nsphere n))
[PROOF STEP]
by (simp add: iso_iff)
[PROOF STATE]
proof (state)
this:
carrier (relative_homology_group (int n) (nsphere n) {x. x n \<le> 0}) \<subseteq> hom_induced (int n) (nsphere n) {} (nsphere n) {x. x n \<le> 0} id ` carrier (reduced_homology_group (int n) (nsphere n))

goal (2 subgoals):
 1. n = 0 \<Longrightarrow> even (Brouwer_degree2 n f - Brouwer_degree2 (n - Suc 0) f)
 2. n \<noteq> 0 \<Longrightarrow> even (Brouwer_degree2 n f - Brouwer_degree2 (n - Suc 0) f)
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
carrier (relative_homology_group (int n) (nsphere n) {x. x n \<le> 0}) \<subseteq> hom_induced (int n) (nsphere n) {} (nsphere n) {x. x n \<le> 0} id ` carrier (reduced_homology_group (int n) (nsphere n))
[PROOF STEP]
obtain vn where vpcarr: "vn \<in> carrier(reduced_homology_group n (nsphere n))"
    and eqwp: "hom_induced n (nsphere n) {} (nsphere n) (lower n) id vn = wn"
[PROOF STATE]
proof (prove)
using this:
carrier (relative_homology_group (int n) (nsphere n) {x. x n \<le> 0}) \<subseteq> hom_induced (int n) (nsphere n) {} (nsphere n) {x. x n \<le> 0} id ` carrier (reduced_homology_group (int n) (nsphere n))

goal (1 subgoal):
 1. (\<And>vn. \<lbrakk>vn \<in> carrier (reduced_homology_group (int n) (nsphere n)); hom_induced (int n) (nsphere n) {} (nsphere n) (lower n) id vn = wn\<rbrakk> \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
using wncarr
[PROOF STATE]
proof (prove)
using this:
carrier (relative_homology_group (int n) (nsphere n) {x. x n \<le> 0}) \<subseteq> hom_induced (int n) (nsphere n) {} (nsphere n) {x. x n \<le> 0} id ` carrier (reduced_homology_group (int n) (nsphere n))
wn \<in> carrier (relative_homology_group (int n) (nsphere n) (lower n))

goal (1 subgoal):
 1. (\<And>vn. \<lbrakk>vn \<in> carrier (reduced_homology_group (int n) (nsphere n)); hom_induced (int n) (nsphere n) {} (nsphere n) (lower n) id vn = wn\<rbrakk> \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by (auto simp: lower_def)
[PROOF STATE]
proof (state)
this:
vn \<in> carrier (reduced_homology_group (int n) (nsphere n))
hom_induced (int n) (nsphere n) {} (nsphere n) (lower n) id vn = wn

goal (2 subgoals):
 1. n = 0 \<Longrightarrow> even (Brouwer_degree2 n f - Brouwer_degree2 (n - Suc 0) f)
 2. n \<noteq> 0 \<Longrightarrow> even (Brouwer_degree2 n f - Brouwer_degree2 (n - Suc 0) f)
[PROOF STEP]
define up where "up \<equiv> hom_induced n (lsphere n) (equator n) (nsphere n) (equator n) id zp"
[PROOF STATE]
proof (state)
this:
up \<equiv> hom_induced (int n) (lsphere n) (equator n) (nsphere n) (equator n) id zp

goal (2 subgoals):
 1. n = 0 \<Longrightarrow> even (Brouwer_degree2 n f - Brouwer_degree2 (n - Suc 0) f)
 2. n \<noteq> 0 \<Longrightarrow> even (Brouwer_degree2 n f - Brouwer_degree2 (n - Suc 0) f)
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
up \<equiv> hom_induced (int n) (lsphere n) (equator n) (nsphere n) (equator n) id zp
[PROOF STEP]
have upcarr: "up \<in> carrier(?rhgn (equator n))"
[PROOF STATE]
proof (prove)
using this:
up \<equiv> hom_induced (int n) (lsphere n) (equator n) (nsphere n) (equator n) id zp

goal (1 subgoal):
 1. up \<in> carrier (relative_homology_group (int n) (nsphere n) (equator n))
[PROOF STEP]
by (simp add: hom_induced_carrier)
[PROOF STATE]
proof (state)
this:
up \<in> carrier (relative_homology_group (int n) (nsphere n) (equator n))

goal (2 subgoals):
 1. n = 0 \<Longrightarrow> even (Brouwer_degree2 n f - Brouwer_degree2 (n - Suc 0) f)
 2. n \<noteq> 0 \<Longrightarrow> even (Brouwer_degree2 n f - Brouwer_degree2 (n - Suc 0) f)
[PROOF STEP]
define un where "un \<equiv> hom_induced n (usphere n) (equator n) (nsphere n) (equator n) id zn"
[PROOF STATE]
proof (state)
this:
un \<equiv> hom_induced (int n) (usphere n) (equator n) (nsphere n) (equator n) id zn

goal (2 subgoals):
 1. n = 0 \<Longrightarrow> even (Brouwer_degree2 n f - Brouwer_degree2 (n - Suc 0) f)
 2. n \<noteq> 0 \<Longrightarrow> even (Brouwer_degree2 n f - Brouwer_degree2 (n - Suc 0) f)
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
un \<equiv> hom_induced (int n) (usphere n) (equator n) (nsphere n) (equator n) id zn
[PROOF STEP]
have uncarr: "un \<in> carrier(?rhgn (equator n))"
[PROOF STATE]
proof (prove)
using this:
un \<equiv> hom_induced (int n) (usphere n) (equator n) (nsphere n) (equator n) id zn

goal (1 subgoal):
 1. un \<in> carrier (relative_homology_group (int n) (nsphere n) (equator n))
[PROOF STEP]
by (simp add: hom_induced_carrier)
[PROOF STATE]
proof (state)
this:
un \<in> carrier (relative_homology_group (int n) (nsphere n) (equator n))

goal (2 subgoals):
 1. n = 0 \<Longrightarrow> even (Brouwer_degree2 n f - Brouwer_degree2 (n - Suc 0) f)
 2. n \<noteq> 0 \<Longrightarrow> even (Brouwer_degree2 n f - Brouwer_degree2 (n - Suc 0) f)
[PROOF STEP]
have *: "(\<lambda>(x, y).
            hom_induced n (lsphere n) (equator n) (nsphere n) (equator n) id x
          \<otimes>\<^bsub>?rhgn (equator n)\<^esub>
            hom_induced n (usphere n) (equator n) (nsphere n) (equator n) id y)
        \<in> Group.iso
            (relative_homology_group n (lsphere n) (equator n) \<times>\<times>
             relative_homology_group n (usphere n) (equator n))
            (?rhgn (equator n))"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (\<lambda>(x, y). hom_induced (int n) (lsphere n) (equator n) (nsphere n) (equator n) id x \<otimes>\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> hom_induced (int n) (usphere n) (equator n) (nsphere n) (equator n) id y) \<in> Group.iso (relative_homology_group (int n) (lsphere n) (equator n) \<times>\<times> relative_homology_group (int n) (usphere n) (equator n)) (relative_homology_group (int n) (nsphere n) (equator n))
[PROOF STEP]
proof (rule conjunct1 [OF exact_sequence_sum_lemma [OF abelian_relative_homology_group]])
[PROOF STATE]
proof (state)
goal (6 subgoals):
 1. ?h1 \<in> Group.iso (relative_homology_group (int n) (lsphere n) (equator n)) ?C1
 2. ?k1 \<in> Group.iso (relative_homology_group (int n) (usphere n) (equator n)) ?D1
 3. exact_seq ([?D1, relative_homology_group (int n) (nsphere n) (equator n), relative_homology_group (int n) (lsphere n) (equator n)], [?g1, hom_induced (int n) (lsphere n) (equator n) (nsphere n) (equator n) id])
 4. exact_seq ([?C1, relative_homology_group (int n) (nsphere n) (equator n), relative_homology_group (int n) (usphere n) (equator n)], [?f1, hom_induced (int n) (usphere n) (equator n) (nsphere n) (equator n) id])
 5. \<And>x. x \<in> carrier (relative_homology_group (int n) (lsphere n) (equator n)) \<Longrightarrow> ?f1 (hom_induced (int n) (lsphere n) (equator n) (nsphere n) (equator n) id x) = ?h1 x
 6. \<And>x. x \<in> carrier (relative_homology_group (int n) (usphere n) (equator n)) \<Longrightarrow> ?g1 (hom_induced (int n) (usphere n) (equator n) (nsphere n) (equator n) id x) = ?k1 x
[PROOF STEP]
show "hom_induced n (lsphere n) (equator n) (nsphere n) (upper n) id
        \<in> Group.iso (relative_homology_group n (lsphere n) (equator n))
            (?rhgn (upper n))"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. hom_induced (int n) (lsphere n) (equator n) (nsphere n) (upper n) id \<in> Group.iso (relative_homology_group (int n) (lsphere n) (equator n)) (relative_homology_group (int n) (nsphere n) (upper n))
[PROOF STEP]
apply (simp add: lsphere_def usphere_def equator_def lower_def upper_def)
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. hom_induced (int n) (subtopology (nsphere n) {x. x n \<le> 0}) {x. x n = 0} (nsphere n) {x. 0 \<le> x n} id \<in> Group.iso (relative_homology_group (int n) (subtopology (nsphere n) {x. x n \<le> 0}) {x. x n = 0}) (relative_homology_group (int n) (nsphere n) {x. 0 \<le> x n})
[PROOF STEP]
using iso_relative_homology_group_lower_hemisphere
[PROOF STATE]
proof (prove)
using this:
hom_induced ?p (subtopology (nsphere ?n) {x. x ?k \<le> 0}) {x. x ?k = 0} (nsphere ?n) {x. 0 \<le> x ?k} id \<in> Group.iso (relative_homology_group ?p (subtopology (nsphere ?n) {x. x ?k \<le> 0}) {x. x ?k = 0}) (relative_homology_group ?p (nsphere ?n) {x. 0 \<le> x ?k})

goal (1 subgoal):
 1. hom_induced (int n) (subtopology (nsphere n) {x. x n \<le> 0}) {x. x n = 0} (nsphere n) {x. 0 \<le> x n} id \<in> Group.iso (relative_homology_group (int n) (subtopology (nsphere n) {x. x n \<le> 0}) {x. x n = 0}) (relative_homology_group (int n) (nsphere n) {x. 0 \<le> x n})
[PROOF STEP]
by blast
[PROOF STATE]
proof (state)
this:
hom_induced (int n) (lsphere n) (equator n) (nsphere n) (upper n) id \<in> Group.iso (relative_homology_group (int n) (lsphere n) (equator n)) (relative_homology_group (int n) (nsphere n) (upper n))

goal (5 subgoals):
 1. ?k1 \<in> Group.iso (relative_homology_group (int n) (usphere n) (equator n)) ?D1
 2. exact_seq ([?D1, relative_homology_group (int n) (nsphere n) (equator n), relative_homology_group (int n) (lsphere n) (equator n)], [?g1, hom_induced (int n) (lsphere n) (equator n) (nsphere n) (equator n) id])
 3. exact_seq ([relative_homology_group (int n) (nsphere n) (upper n), relative_homology_group (int n) (nsphere n) (equator n), relative_homology_group (int n) (usphere n) (equator n)], [?f1, hom_induced (int n) (usphere n) (equator n) (nsphere n) (equator n) id])
 4. \<And>x. x \<in> carrier (relative_homology_group (int n) (lsphere n) (equator n)) \<Longrightarrow> ?f1 (hom_induced (int n) (lsphere n) (equator n) (nsphere n) (equator n) id x) = hom_induced (int n) (lsphere n) (equator n) (nsphere n) (upper n) id x
 5. \<And>x. x \<in> carrier (relative_homology_group (int n) (usphere n) (equator n)) \<Longrightarrow> ?g1 (hom_induced (int n) (usphere n) (equator n) (nsphere n) (equator n) id x) = ?k1 x
[PROOF STEP]
show "hom_induced n (usphere n) (equator n) (nsphere n) (lower n) id
        \<in> Group.iso (relative_homology_group n (usphere n) (equator n))
            (?rhgn (lower n))"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. hom_induced (int n) (usphere n) (equator n) (nsphere n) (lower n) id \<in> Group.iso (relative_homology_group (int n) (usphere n) (equator n)) (relative_homology_group (int n) (nsphere n) (lower n))
[PROOF STEP]
apply (simp_all add: lsphere_def usphere_def equator_def lower_def upper_def)
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. hom_induced (int n) (subtopology (nsphere n) {x. 0 \<le> x n}) {x. x n = 0} (nsphere n) {x. x n \<le> 0} id \<in> Group.iso (relative_homology_group (int n) (subtopology (nsphere n) {x. 0 \<le> x n}) {x. x n = 0}) (relative_homology_group (int n) (nsphere n) {x. x n \<le> 0})
[PROOF STEP]
using iso_relative_homology_group_upper_hemisphere
[PROOF STATE]
proof (prove)
using this:
hom_induced ?p (subtopology (nsphere ?n) {x. 0 \<le> x ?k}) {x. x ?k = 0} (nsphere ?n) {x. x ?k \<le> 0} id \<in> Group.iso (relative_homology_group ?p (subtopology (nsphere ?n) {x. 0 \<le> x ?k}) {x. x ?k = 0}) (relative_homology_group ?p (nsphere ?n) {x. x ?k \<le> 0})

goal (1 subgoal):
 1. hom_induced (int n) (subtopology (nsphere n) {x. 0 \<le> x n}) {x. x n = 0} (nsphere n) {x. x n \<le> 0} id \<in> Group.iso (relative_homology_group (int n) (subtopology (nsphere n) {x. 0 \<le> x n}) {x. x n = 0}) (relative_homology_group (int n) (nsphere n) {x. x n \<le> 0})
[PROOF STEP]
by blast+
[PROOF STATE]
proof (state)
this:
hom_induced (int n) (usphere n) (equator n) (nsphere n) (lower n) id \<in> Group.iso (relative_homology_group (int n) (usphere n) (equator n)) (relative_homology_group (int n) (nsphere n) (lower n))

goal (4 subgoals):
 1. exact_seq ([relative_homology_group (int n) (nsphere n) (lower n), relative_homology_group (int n) (nsphere n) (equator n), relative_homology_group (int n) (lsphere n) (equator n)], [?g1, hom_induced (int n) (lsphere n) (equator n) (nsphere n) (equator n) id])
 2. exact_seq ([relative_homology_group (int n) (nsphere n) (upper n), relative_homology_group (int n) (nsphere n) (equator n), relative_homology_group (int n) (usphere n) (equator n)], [?f1, hom_induced (int n) (usphere n) (equator n) (nsphere n) (equator n) id])
 3. \<And>x. x \<in> carrier (relative_homology_group (int n) (lsphere n) (equator n)) \<Longrightarrow> ?f1 (hom_induced (int n) (lsphere n) (equator n) (nsphere n) (equator n) id x) = hom_induced (int n) (lsphere n) (equator n) (nsphere n) (upper n) id x
 4. \<And>x. x \<in> carrier (relative_homology_group (int n) (usphere n) (equator n)) \<Longrightarrow> ?g1 (hom_induced (int n) (usphere n) (equator n) (nsphere n) (equator n) id x) = hom_induced (int n) (usphere n) (equator n) (nsphere n) (lower n) id x
[PROOF STEP]
show "exact_seq
         ([?rhgn (lower n),
           ?rhgn (equator n),
           relative_homology_group n (lsphere n) (equator n)],
          [hom_induced n (nsphere n) (equator n) (nsphere n) (lower n) id,
           hom_induced n (lsphere n) (equator n) (nsphere n) (equator n) id])"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. exact_seq ([relative_homology_group (int n) (nsphere n) (lower n), relative_homology_group (int n) (nsphere n) (equator n), relative_homology_group (int n) (lsphere n) (equator n)], [hom_induced (int n) (nsphere n) (equator n) (nsphere n) (lower n) id, hom_induced (int n) (lsphere n) (equator n) (nsphere n) (equator n) id])
[PROOF STEP]
unfolding lsphere_def usphere_def equator_def lower_def upper_def
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. exact_seq ([relative_homology_group (int n) (nsphere n) {x. x n \<le> 0}, relative_homology_group (int n) (nsphere n) {x. x n = 0}, relative_homology_group (int n) (subtopology (nsphere n) {x. x n \<le> 0}) {x. x n = 0}], [hom_induced (int n) (nsphere n) {x. x n = 0} (nsphere n) {x. x n \<le> 0} id, hom_induced (int n) (subtopology (nsphere n) {x. x n \<le> 0}) {x. x n = 0} (nsphere n) {x. x n = 0} id])
[PROOF STEP]
by (rule homology_exactness_triple_3) force
[PROOF STATE]
proof (state)
this:
exact_seq ([relative_homology_group (int n) (nsphere n) (lower n), relative_homology_group (int n) (nsphere n) (equator n), relative_homology_group (int n) (lsphere n) (equator n)], [hom_induced (int n) (nsphere n) (equator n) (nsphere n) (lower n) id, hom_induced (int n) (lsphere n) (equator n) (nsphere n) (equator n) id])

goal (3 subgoals):
 1. exact_seq ([relative_homology_group (int n) (nsphere n) (upper n), relative_homology_group (int n) (nsphere n) (equator n), relative_homology_group (int n) (usphere n) (equator n)], [?f1, hom_induced (int n) (usphere n) (equator n) (nsphere n) (equator n) id])
 2. \<And>x. x \<in> carrier (relative_homology_group (int n) (lsphere n) (equator n)) \<Longrightarrow> ?f1 (hom_induced (int n) (lsphere n) (equator n) (nsphere n) (equator n) id x) = hom_induced (int n) (lsphere n) (equator n) (nsphere n) (upper n) id x
 3. \<And>x. x \<in> carrier (relative_homology_group (int n) (usphere n) (equator n)) \<Longrightarrow> hom_induced (int n) (nsphere n) (equator n) (nsphere n) (lower n) id (hom_induced (int n) (usphere n) (equator n) (nsphere n) (equator n) id x) = hom_induced (int n) (usphere n) (equator n) (nsphere n) (lower n) id x
[PROOF STEP]
show "exact_seq
         ([?rhgn (upper n),
           ?rhgn (equator n),
           relative_homology_group n (usphere n) (equator n)],
          [hom_induced n (nsphere n) (equator n) (nsphere n) (upper n) id,
           hom_induced n (usphere n) (equator n) (nsphere n) (equator n) id])"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. exact_seq ([relative_homology_group (int n) (nsphere n) (upper n), relative_homology_group (int n) (nsphere n) (equator n), relative_homology_group (int n) (usphere n) (equator n)], [hom_induced (int n) (nsphere n) (equator n) (nsphere n) (upper n) id, hom_induced (int n) (usphere n) (equator n) (nsphere n) (equator n) id])
[PROOF STEP]
unfolding lsphere_def usphere_def equator_def lower_def upper_def
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. exact_seq ([relative_homology_group (int n) (nsphere n) {x. 0 \<le> x n}, relative_homology_group (int n) (nsphere n) {x. x n = 0}, relative_homology_group (int n) (subtopology (nsphere n) {x. 0 \<le> x n}) {x. x n = 0}], [hom_induced (int n) (nsphere n) {x. x n = 0} (nsphere n) {x. 0 \<le> x n} id, hom_induced (int n) (subtopology (nsphere n) {x. 0 \<le> x n}) {x. x n = 0} (nsphere n) {x. x n = 0} id])
[PROOF STEP]
by (rule homology_exactness_triple_3) force
[PROOF STATE]
proof (state)
this:
exact_seq ([relative_homology_group (int n) (nsphere n) (upper n), relative_homology_group (int n) (nsphere n) (equator n), relative_homology_group (int n) (usphere n) (equator n)], [hom_induced (int n) (nsphere n) (equator n) (nsphere n) (upper n) id, hom_induced (int n) (usphere n) (equator n) (nsphere n) (equator n) id])

goal (2 subgoals):
 1. \<And>x. x \<in> carrier (relative_homology_group (int n) (lsphere n) (equator n)) \<Longrightarrow> hom_induced (int n) (nsphere n) (equator n) (nsphere n) (upper n) id (hom_induced (int n) (lsphere n) (equator n) (nsphere n) (equator n) id x) = hom_induced (int n) (lsphere n) (equator n) (nsphere n) (upper n) id x
 2. \<And>x. x \<in> carrier (relative_homology_group (int n) (usphere n) (equator n)) \<Longrightarrow> hom_induced (int n) (nsphere n) (equator n) (nsphere n) (lower n) id (hom_induced (int n) (usphere n) (equator n) (nsphere n) (equator n) id x) = hom_induced (int n) (usphere n) (equator n) (nsphere n) (lower n) id x
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (2 subgoals):
 1. \<And>x. x \<in> carrier (relative_homology_group (int n) (lsphere n) (equator n)) \<Longrightarrow> hom_induced (int n) (nsphere n) (equator n) (nsphere n) (upper n) id (hom_induced (int n) (lsphere n) (equator n) (nsphere n) (equator n) id x) = hom_induced (int n) (lsphere n) (equator n) (nsphere n) (upper n) id x
 2. \<And>x. x \<in> carrier (relative_homology_group (int n) (usphere n) (equator n)) \<Longrightarrow> hom_induced (int n) (nsphere n) (equator n) (nsphere n) (lower n) id (hom_induced (int n) (usphere n) (equator n) (nsphere n) (equator n) id x) = hom_induced (int n) (usphere n) (equator n) (nsphere n) (lower n) id x
[PROOF STEP]
fix x
[PROOF STATE]
proof (state)
goal (2 subgoals):
 1. \<And>x. x \<in> carrier (relative_homology_group (int n) (lsphere n) (equator n)) \<Longrightarrow> hom_induced (int n) (nsphere n) (equator n) (nsphere n) (upper n) id (hom_induced (int n) (lsphere n) (equator n) (nsphere n) (equator n) id x) = hom_induced (int n) (lsphere n) (equator n) (nsphere n) (upper n) id x
 2. \<And>x. x \<in> carrier (relative_homology_group (int n) (usphere n) (equator n)) \<Longrightarrow> hom_induced (int n) (nsphere n) (equator n) (nsphere n) (lower n) id (hom_induced (int n) (usphere n) (equator n) (nsphere n) (equator n) id x) = hom_induced (int n) (usphere n) (equator n) (nsphere n) (lower n) id x
[PROOF STEP]
assume "x \<in> carrier (relative_homology_group n (lsphere n) (equator n))"
[PROOF STATE]
proof (state)
this:
x \<in> carrier (relative_homology_group (int n) (lsphere n) (equator n))

goal (2 subgoals):
 1. \<And>x. x \<in> carrier (relative_homology_group (int n) (lsphere n) (equator n)) \<Longrightarrow> hom_induced (int n) (nsphere n) (equator n) (nsphere n) (upper n) id (hom_induced (int n) (lsphere n) (equator n) (nsphere n) (equator n) id x) = hom_induced (int n) (lsphere n) (equator n) (nsphere n) (upper n) id x
 2. \<And>x. x \<in> carrier (relative_homology_group (int n) (usphere n) (equator n)) \<Longrightarrow> hom_induced (int n) (nsphere n) (equator n) (nsphere n) (lower n) id (hom_induced (int n) (usphere n) (equator n) (nsphere n) (equator n) id x) = hom_induced (int n) (usphere n) (equator n) (nsphere n) (lower n) id x
[PROOF STEP]
show "hom_induced n (nsphere n) (equator n) (nsphere n) (upper n) id
         (hom_induced n (lsphere n) (equator n) (nsphere n) (equator n) id x) =
        hom_induced n (lsphere n) (equator n) (nsphere n) (upper n) id x"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. hom_induced (int n) (nsphere n) (equator n) (nsphere n) (upper n) id (hom_induced (int n) (lsphere n) (equator n) (nsphere n) (equator n) id x) = hom_induced (int n) (lsphere n) (equator n) (nsphere n) (upper n) id x
[PROOF STEP]
by (simp add: hom_induced_compose' subset_iff lsphere_def usphere_def equator_def lower_def upper_def)
[PROOF STATE]
proof (state)
this:
hom_induced (int n) (nsphere n) (equator n) (nsphere n) (upper n) id (hom_induced (int n) (lsphere n) (equator n) (nsphere n) (equator n) id x) = hom_induced (int n) (lsphere n) (equator n) (nsphere n) (upper n) id x

goal (1 subgoal):
 1. \<And>x. x \<in> carrier (relative_homology_group (int n) (usphere n) (equator n)) \<Longrightarrow> hom_induced (int n) (nsphere n) (equator n) (nsphere n) (lower n) id (hom_induced (int n) (usphere n) (equator n) (nsphere n) (equator n) id x) = hom_induced (int n) (usphere n) (equator n) (nsphere n) (lower n) id x
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. \<And>x. x \<in> carrier (relative_homology_group (int n) (usphere n) (equator n)) \<Longrightarrow> hom_induced (int n) (nsphere n) (equator n) (nsphere n) (lower n) id (hom_induced (int n) (usphere n) (equator n) (nsphere n) (equator n) id x) = hom_induced (int n) (usphere n) (equator n) (nsphere n) (lower n) id x
[PROOF STEP]
fix x
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. \<And>x. x \<in> carrier (relative_homology_group (int n) (usphere n) (equator n)) \<Longrightarrow> hom_induced (int n) (nsphere n) (equator n) (nsphere n) (lower n) id (hom_induced (int n) (usphere n) (equator n) (nsphere n) (equator n) id x) = hom_induced (int n) (usphere n) (equator n) (nsphere n) (lower n) id x
[PROOF STEP]
assume "x \<in> carrier (relative_homology_group n (usphere n) (equator n))"
[PROOF STATE]
proof (state)
this:
x \<in> carrier (relative_homology_group (int n) (usphere n) (equator n))

goal (1 subgoal):
 1. \<And>x. x \<in> carrier (relative_homology_group (int n) (usphere n) (equator n)) \<Longrightarrow> hom_induced (int n) (nsphere n) (equator n) (nsphere n) (lower n) id (hom_induced (int n) (usphere n) (equator n) (nsphere n) (equator n) id x) = hom_induced (int n) (usphere n) (equator n) (nsphere n) (lower n) id x
[PROOF STEP]
show "hom_induced n (nsphere n) (equator n) (nsphere n) (lower n) id
         (hom_induced n (usphere n) (equator n) (nsphere n) (equator n) id x) =
        hom_induced n (usphere n) (equator n) (nsphere n) (lower n) id x"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. hom_induced (int n) (nsphere n) (equator n) (nsphere n) (lower n) id (hom_induced (int n) (usphere n) (equator n) (nsphere n) (equator n) id x) = hom_induced (int n) (usphere n) (equator n) (nsphere n) (lower n) id x
[PROOF STEP]
by (simp add: hom_induced_compose' subset_iff lsphere_def usphere_def equator_def lower_def upper_def)
[PROOF STATE]
proof (state)
this:
hom_induced (int n) (nsphere n) (equator n) (nsphere n) (lower n) id (hom_induced (int n) (usphere n) (equator n) (nsphere n) (equator n) id x) = hom_induced (int n) (usphere n) (equator n) (nsphere n) (lower n) id x

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
(\<lambda>(x, y). hom_induced (int n) (lsphere n) (equator n) (nsphere n) (equator n) id x \<otimes>\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> hom_induced (int n) (usphere n) (equator n) (nsphere n) (equator n) id y) \<in> Group.iso (relative_homology_group (int n) (lsphere n) (equator n) \<times>\<times> relative_homology_group (int n) (usphere n) (equator n)) (relative_homology_group (int n) (nsphere n) (equator n))

goal (2 subgoals):
 1. n = 0 \<Longrightarrow> even (Brouwer_degree2 n f - Brouwer_degree2 (n - Suc 0) f)
 2. n \<noteq> 0 \<Longrightarrow> even (Brouwer_degree2 n f - Brouwer_degree2 (n - Suc 0) f)
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
(\<lambda>(x, y). hom_induced (int n) (lsphere n) (equator n) (nsphere n) (equator n) id x \<otimes>\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> hom_induced (int n) (usphere n) (equator n) (nsphere n) (equator n) id y) \<in> Group.iso (relative_homology_group (int n) (lsphere n) (equator n) \<times>\<times> relative_homology_group (int n) (usphere n) (equator n)) (relative_homology_group (int n) (nsphere n) (equator n))
[PROOF STEP]
have sb: "carrier (?rhgn (equator n))
             \<subseteq> (\<lambda>(x, y).
            hom_induced n (lsphere n) (equator n) (nsphere n) (equator n) id x
          \<otimes>\<^bsub>?rhgn (equator n)\<^esub>
            hom_induced n (usphere n) (equator n) (nsphere n) (equator n) id y)
               ` carrier (relative_homology_group n (lsphere n) (equator n) \<times>\<times>
             relative_homology_group n (usphere n) (equator n))"
[PROOF STATE]
proof (prove)
using this:
(\<lambda>(x, y). hom_induced (int n) (lsphere n) (equator n) (nsphere n) (equator n) id x \<otimes>\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> hom_induced (int n) (usphere n) (equator n) (nsphere n) (equator n) id y) \<in> Group.iso (relative_homology_group (int n) (lsphere n) (equator n) \<times>\<times> relative_homology_group (int n) (usphere n) (equator n)) (relative_homology_group (int n) (nsphere n) (equator n))

goal (1 subgoal):
 1. carrier (relative_homology_group (int n) (nsphere n) (equator n)) \<subseteq> (\<lambda>(x, y). hom_induced (int n) (lsphere n) (equator n) (nsphere n) (equator n) id x \<otimes>\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> hom_induced (int n) (usphere n) (equator n) (nsphere n) (equator n) id y) ` carrier (relative_homology_group (int n) (lsphere n) (equator n) \<times>\<times> relative_homology_group (int n) (usphere n) (equator n))
[PROOF STEP]
by (simp add: iso_iff)
[PROOF STATE]
proof (state)
this:
carrier (relative_homology_group (int n) (nsphere n) (equator n)) \<subseteq> (\<lambda>(x, y). hom_induced (int n) (lsphere n) (equator n) (nsphere n) (equator n) id x \<otimes>\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> hom_induced (int n) (usphere n) (equator n) (nsphere n) (equator n) id y) ` carrier (relative_homology_group (int n) (lsphere n) (equator n) \<times>\<times> relative_homology_group (int n) (usphere n) (equator n))

goal (2 subgoals):
 1. n = 0 \<Longrightarrow> even (Brouwer_degree2 n f - Brouwer_degree2 (n - Suc 0) f)
 2. n \<noteq> 0 \<Longrightarrow> even (Brouwer_degree2 n f - Brouwer_degree2 (n - Suc 0) f)
[PROOF STEP]
obtain a b::int
    where up_ab: "?hi_ee f up
             = up [^]\<^bsub>?rhgn (equator n)\<^esub> a\<otimes>\<^bsub>?rhgn (equator n)\<^esub> un [^]\<^bsub>?rhgn (equator n)\<^esub> b"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (\<And>a b. hom_induced (int n) (nsphere n) (equator n) (nsphere n) (equator n) f up = up [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> a \<otimes>\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> un [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> b \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
proof -
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. (\<And>a b. hom_induced (int n) (nsphere n) (equator n) (nsphere n) (equator n) f up = up [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> a \<otimes>\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> un [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> b \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
have hiupcarr: "?hi_ee f up \<in> carrier(?rhgn (equator n))"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. hom_induced (int n) (nsphere n) (equator n) (nsphere n) (equator n) f up \<in> carrier (relative_homology_group (int n) (nsphere n) (equator n))
[PROOF STEP]
by (simp add: hom_induced_carrier)
[PROOF STATE]
proof (state)
this:
hom_induced (int n) (nsphere n) (equator n) (nsphere n) (equator n) f up \<in> carrier (relative_homology_group (int n) (nsphere n) (equator n))

goal (1 subgoal):
 1. (\<And>a b. hom_induced (int n) (nsphere n) (equator n) (nsphere n) (equator n) f up = up [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> a \<otimes>\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> un [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> b \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
obtain u v where u: "u \<in> carrier (relative_homology_group n (lsphere n) (equator n))"
      and v: "v \<in> carrier (relative_homology_group n (usphere n) (equator n))"
      and eq: "?hi_ee f up =
                hom_induced n (lsphere n) (equator n) (nsphere n) (equator n) id u
                \<otimes>\<^bsub>?rhgn (equator n)\<^esub>
                hom_induced n (usphere n) (equator n) (nsphere n) (equator n) id v"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (\<And>u v. \<lbrakk>u \<in> carrier (relative_homology_group (int n) (lsphere n) (equator n)); v \<in> carrier (relative_homology_group (int n) (usphere n) (equator n)); hom_induced (int n) (nsphere n) (equator n) (nsphere n) (equator n) f up = hom_induced (int n) (lsphere n) (equator n) (nsphere n) (equator n) id u \<otimes>\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> hom_induced (int n) (usphere n) (equator n) (nsphere n) (equator n) id v\<rbrakk> \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
using subsetD [OF sb hiupcarr]
[PROOF STATE]
proof (prove)
using this:
hom_induced (int n) (nsphere n) (equator n) (nsphere n) (equator n) f up \<in> (\<lambda>(x, y). hom_induced (int n) (lsphere n) (equator n) (nsphere n) (equator n) id x \<otimes>\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> hom_induced (int n) (usphere n) (equator n) (nsphere n) (equator n) id y) ` carrier (relative_homology_group (int n) (lsphere n) (equator n) \<times>\<times> relative_homology_group (int n) (usphere n) (equator n))

goal (1 subgoal):
 1. (\<And>u v. \<lbrakk>u \<in> carrier (relative_homology_group (int n) (lsphere n) (equator n)); v \<in> carrier (relative_homology_group (int n) (usphere n) (equator n)); hom_induced (int n) (nsphere n) (equator n) (nsphere n) (equator n) f up = hom_induced (int n) (lsphere n) (equator n) (nsphere n) (equator n) id u \<otimes>\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> hom_induced (int n) (usphere n) (equator n) (nsphere n) (equator n) id v\<rbrakk> \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
u \<in> carrier (relative_homology_group (int n) (lsphere n) (equator n))
v \<in> carrier (relative_homology_group (int n) (usphere n) (equator n))
hom_induced (int n) (nsphere n) (equator n) (nsphere n) (equator n) f up = hom_induced (int n) (lsphere n) (equator n) (nsphere n) (equator n) id u \<otimes>\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> hom_induced (int n) (usphere n) (equator n) (nsphere n) (equator n) id v

goal (1 subgoal):
 1. (\<And>a b. hom_induced (int n) (nsphere n) (equator n) (nsphere n) (equator n) f up = up [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> a \<otimes>\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> un [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> b \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
have "u \<in> carrier (subgroup_generated (relative_homology_group n (lsphere n) (equator n)) {zp})"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. u \<in> carrier (subgroup_generated (relative_homology_group (int n) (lsphere n) (equator n)) {zp})
[PROOF STEP]
by (simp_all add: u zp_sg)
[PROOF STATE]
proof (state)
this:
u \<in> carrier (subgroup_generated (relative_homology_group (int n) (lsphere n) (equator n)) {zp})

goal (1 subgoal):
 1. (\<And>a b. hom_induced (int n) (nsphere n) (equator n) (nsphere n) (equator n) f up = up [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> a \<otimes>\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> un [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> b \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
u \<in> carrier (subgroup_generated (relative_homology_group (int n) (lsphere n) (equator n)) {zp})
[PROOF STEP]
obtain a::int where a: "u = zp [^]\<^bsub>relative_homology_group n (lsphere n) (equator n)\<^esub> a"
[PROOF STATE]
proof (prove)
using this:
u \<in> carrier (subgroup_generated (relative_homology_group (int n) (lsphere n) (equator n)) {zp})

goal (1 subgoal):
 1. (\<And>a. u = zp [^]\<^bsub>relative_homology_group (int n) (lsphere n) (equator n)\<^esub> a \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by (metis group.carrier_subgroup_generated_by_singleton group_relative_homology_group rangeE zpcarr)
[PROOF STATE]
proof (state)
this:
u = zp [^]\<^bsub>relative_homology_group (int n) (lsphere n) (equator n)\<^esub> a

goal (1 subgoal):
 1. (\<And>a b. hom_induced (int n) (nsphere n) (equator n) (nsphere n) (equator n) f up = up [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> a \<otimes>\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> un [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> b \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
have ae: "hom_induced n (lsphere n) (equator n) (nsphere n) (equator n) id
            (pow (relative_homology_group n (lsphere n) (equator n)) zp a)
          = pow (?rhgn (equator n)) (hom_induced n (lsphere n) (equator n) (nsphere n) (equator n) id zp) a"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. hom_induced (int n) (lsphere n) (equator n) (nsphere n) (equator n) id (zp [^]\<^bsub>relative_homology_group (int n) (lsphere n) (equator n)\<^esub> a) = hom_induced (int n) (lsphere n) (equator n) (nsphere n) (equator n) id zp [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> a
[PROOF STEP]
by (meson group_hom.hom_int_pow group_hom_axioms_def group_hom_def group_relative_homology_group hom_induced zpcarr)
[PROOF STATE]
proof (state)
this:
hom_induced (int n) (lsphere n) (equator n) (nsphere n) (equator n) id (zp [^]\<^bsub>relative_homology_group (int n) (lsphere n) (equator n)\<^esub> a) = hom_induced (int n) (lsphere n) (equator n) (nsphere n) (equator n) id zp [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> a

goal (1 subgoal):
 1. (\<And>a b. hom_induced (int n) (nsphere n) (equator n) (nsphere n) (equator n) f up = up [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> a \<otimes>\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> un [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> b \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
have "v \<in> carrier (subgroup_generated (relative_homology_group n (usphere n) (equator n)) {zn})"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. v \<in> carrier (subgroup_generated (relative_homology_group (int n) (usphere n) (equator n)) {zn})
[PROOF STEP]
by (simp_all add: v zn_sg)
[PROOF STATE]
proof (state)
this:
v \<in> carrier (subgroup_generated (relative_homology_group (int n) (usphere n) (equator n)) {zn})

goal (1 subgoal):
 1. (\<And>a b. hom_induced (int n) (nsphere n) (equator n) (nsphere n) (equator n) f up = up [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> a \<otimes>\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> un [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> b \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
v \<in> carrier (subgroup_generated (relative_homology_group (int n) (usphere n) (equator n)) {zn})
[PROOF STEP]
obtain b::int where b: "v = zn [^]\<^bsub>relative_homology_group n (usphere n) (equator n)\<^esub> b"
[PROOF STATE]
proof (prove)
using this:
v \<in> carrier (subgroup_generated (relative_homology_group (int n) (usphere n) (equator n)) {zn})

goal (1 subgoal):
 1. (\<And>b. v = zn [^]\<^bsub>relative_homology_group (int n) (usphere n) (equator n)\<^esub> b \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by (metis group.carrier_subgroup_generated_by_singleton group_relative_homology_group rangeE zncarr)
[PROOF STATE]
proof (state)
this:
v = zn [^]\<^bsub>relative_homology_group (int n) (usphere n) (equator n)\<^esub> b

goal (1 subgoal):
 1. (\<And>a b. hom_induced (int n) (nsphere n) (equator n) (nsphere n) (equator n) f up = up [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> a \<otimes>\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> un [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> b \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
have be: "hom_induced n (usphere n) (equator n) (nsphere n) (equator n) id
           (zn [^]\<^bsub>relative_homology_group n (usphere n) (equator n)\<^esub> b)
        = hom_induced n (usphere n) (equator n) (nsphere n) (equator n) id
           zn [^]\<^bsub>relative_homology_group n (nsphere n) (equator n)\<^esub> b"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. hom_induced (int n) (usphere n) (equator n) (nsphere n) (equator n) id (zn [^]\<^bsub>relative_homology_group (int n) (usphere n) (equator n)\<^esub> b) = hom_induced (int n) (usphere n) (equator n) (nsphere n) (equator n) id zn [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> b
[PROOF STEP]
by (meson group_hom.hom_int_pow group_hom_axioms_def group_hom_def group_relative_homology_group hom_induced zncarr)
[PROOF STATE]
proof (state)
this:
hom_induced (int n) (usphere n) (equator n) (nsphere n) (equator n) id (zn [^]\<^bsub>relative_homology_group (int n) (usphere n) (equator n)\<^esub> b) = hom_induced (int n) (usphere n) (equator n) (nsphere n) (equator n) id zn [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> b

goal (1 subgoal):
 1. (\<And>a b. hom_induced (int n) (nsphere n) (equator n) (nsphere n) (equator n) f up = up [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> a \<otimes>\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> un [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> b \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
show thesis
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. thesis
[PROOF STEP]
proof
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. hom_induced (int n) (nsphere n) (equator n) (nsphere n) (equator n) f up = up [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> ?a1 \<otimes>\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> un [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> ?b1
[PROOF STEP]
show "?hi_ee f up
         = up [^]\<^bsub>?rhgn (equator n)\<^esub> a \<otimes>\<^bsub>?rhgn (equator n)\<^esub> un [^]\<^bsub>?rhgn (equator n)\<^esub> b"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. hom_induced (int n) (nsphere n) (equator n) (nsphere n) (equator n) f up = up [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> a \<otimes>\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> un [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> b
[PROOF STEP]
using a ae b be eq local.up_def un_def
[PROOF STATE]
proof (prove)
using this:
u = zp [^]\<^bsub>relative_homology_group (int n) (lsphere n) (equator n)\<^esub> a
hom_induced (int n) (lsphere n) (equator n) (nsphere n) (equator n) id (zp [^]\<^bsub>relative_homology_group (int n) (lsphere n) (equator n)\<^esub> a) = hom_induced (int n) (lsphere n) (equator n) (nsphere n) (equator n) id zp [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> a
v = zn [^]\<^bsub>relative_homology_group (int n) (usphere n) (equator n)\<^esub> b
hom_induced (int n) (usphere n) (equator n) (nsphere n) (equator n) id (zn [^]\<^bsub>relative_homology_group (int n) (usphere n) (equator n)\<^esub> b) = hom_induced (int n) (usphere n) (equator n) (nsphere n) (equator n) id zn [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> b
hom_induced (int n) (nsphere n) (equator n) (nsphere n) (equator n) f up = hom_induced (int n) (lsphere n) (equator n) (nsphere n) (equator n) id u \<otimes>\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> hom_induced (int n) (usphere n) (equator n) (nsphere n) (equator n) id v
up \<equiv> hom_induced (int n) (lsphere n) (equator n) (nsphere n) (equator n) id zp
un \<equiv> hom_induced (int n) (usphere n) (equator n) (nsphere n) (equator n) id zn

goal (1 subgoal):
 1. hom_induced (int n) (nsphere n) (equator n) (nsphere n) (equator n) f up = up [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> a \<otimes>\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> un [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> b
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
hom_induced (int n) (nsphere n) (equator n) (nsphere n) (equator n) f up = up [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> a \<otimes>\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> un [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> b

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
thesis

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
hom_induced (int n) (nsphere n) (equator n) (nsphere n) (equator n) f up = up [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> a \<otimes>\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> un [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> b

goal (2 subgoals):
 1. n = 0 \<Longrightarrow> even (Brouwer_degree2 n f - Brouwer_degree2 (n - Suc 0) f)
 2. n \<noteq> 0 \<Longrightarrow> even (Brouwer_degree2 n f - Brouwer_degree2 (n - Suc 0) f)
[PROOF STEP]
have "(hom_boundary n (nsphere n) (equator n)
       \<circ> hom_induced n (lsphere n) (equator n) (nsphere n) (equator n) id) zp = z"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (hom_boundary (int n) (nsphere n) (equator n) \<circ> hom_induced (int n) (lsphere n) (equator n) (nsphere n) (equator n) id) zp = z
[PROOF STEP]
using zp_z equ
[PROOF STATE]
proof (prove)
using this:
hom_boundary (int n) (lsphere n) (equator n) zp = z
subtopology (nsphere n) (equator n) = nsphere (n - Suc 0)
subtopology (lsphere n) (equator n) = nsphere (n - Suc 0)
subtopology (usphere n) (equator n) = nsphere (n - Suc 0)

goal (1 subgoal):
 1. (hom_boundary (int n) (nsphere n) (equator n) \<circ> hom_induced (int n) (lsphere n) (equator n) (nsphere n) (equator n) id) zp = z
[PROOF STEP]
apply (simp add: lsphere_def naturality_hom_induced)
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<lbrakk>hom_boundary (int n) (subtopology (nsphere n) (lower n)) (equator n) zp = z; subtopology (nsphere n) (equator n) = nsphere (n - Suc 0); subtopology (subtopology (nsphere n) (lower n)) (equator n) = nsphere (n - Suc 0); subtopology (usphere n) (equator n) = nsphere (n - Suc 0)\<rbrakk> \<Longrightarrow> hom_induced (int n - 1) (nsphere (n - Suc 0)) {} (nsphere (n - Suc 0)) {} id z = z
[PROOF STEP]
by (metis hom_boundary_carrier hom_induced_id)
[PROOF STATE]
proof (state)
this:
(hom_boundary (int n) (nsphere n) (equator n) \<circ> hom_induced (int n) (lsphere n) (equator n) (nsphere n) (equator n) id) zp = z

goal (2 subgoals):
 1. n = 0 \<Longrightarrow> even (Brouwer_degree2 n f - Brouwer_degree2 (n - Suc 0) f)
 2. n \<noteq> 0 \<Longrightarrow> even (Brouwer_degree2 n f - Brouwer_degree2 (n - Suc 0) f)
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
(hom_boundary (int n) (nsphere n) (equator n) \<circ> hom_induced (int n) (lsphere n) (equator n) (nsphere n) (equator n) id) zp = z
[PROOF STEP]
have up_z: "hom_boundary n (nsphere n) (equator n) up = z"
[PROOF STATE]
proof (prove)
using this:
(hom_boundary (int n) (nsphere n) (equator n) \<circ> hom_induced (int n) (lsphere n) (equator n) (nsphere n) (equator n) id) zp = z

goal (1 subgoal):
 1. hom_boundary (int n) (nsphere n) (equator n) up = z
[PROOF STEP]
by (simp add: up_def)
[PROOF STATE]
proof (state)
this:
hom_boundary (int n) (nsphere n) (equator n) up = z

goal (2 subgoals):
 1. n = 0 \<Longrightarrow> even (Brouwer_degree2 n f - Brouwer_degree2 (n - Suc 0) f)
 2. n \<noteq> 0 \<Longrightarrow> even (Brouwer_degree2 n f - Brouwer_degree2 (n - Suc 0) f)
[PROOF STEP]
have "(hom_boundary n (nsphere n) (equator n)
       \<circ> hom_induced n (usphere n) (equator n) (nsphere n) (equator n) id) zn = z"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (hom_boundary (int n) (nsphere n) (equator n) \<circ> hom_induced (int n) (usphere n) (equator n) (nsphere n) (equator n) id) zn = z
[PROOF STEP]
using zn_z equ
[PROOF STATE]
proof (prove)
using this:
hom_boundary (int n) (usphere n) (equator n) zn = z
subtopology (nsphere n) (equator n) = nsphere (n - Suc 0)
subtopology (lsphere n) (equator n) = nsphere (n - Suc 0)
subtopology (usphere n) (equator n) = nsphere (n - Suc 0)

goal (1 subgoal):
 1. (hom_boundary (int n) (nsphere n) (equator n) \<circ> hom_induced (int n) (usphere n) (equator n) (nsphere n) (equator n) id) zn = z
[PROOF STEP]
apply (simp add: usphere_def naturality_hom_induced)
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<lbrakk>hom_boundary (int n) (subtopology (nsphere n) (upper n)) (equator n) zn = z; subtopology (nsphere n) (equator n) = nsphere (n - Suc 0); subtopology (lsphere n) (equator n) = nsphere (n - Suc 0); subtopology (subtopology (nsphere n) (upper n)) (equator n) = nsphere (n - Suc 0)\<rbrakk> \<Longrightarrow> hom_induced (int n - 1) (nsphere (n - Suc 0)) {} (nsphere (n - Suc 0)) {} id z = z
[PROOF STEP]
by (metis hom_boundary_carrier hom_induced_id)
[PROOF STATE]
proof (state)
this:
(hom_boundary (int n) (nsphere n) (equator n) \<circ> hom_induced (int n) (usphere n) (equator n) (nsphere n) (equator n) id) zn = z

goal (2 subgoals):
 1. n = 0 \<Longrightarrow> even (Brouwer_degree2 n f - Brouwer_degree2 (n - Suc 0) f)
 2. n \<noteq> 0 \<Longrightarrow> even (Brouwer_degree2 n f - Brouwer_degree2 (n - Suc 0) f)
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
(hom_boundary (int n) (nsphere n) (equator n) \<circ> hom_induced (int n) (usphere n) (equator n) (nsphere n) (equator n) id) zn = z
[PROOF STEP]
have un_z: "hom_boundary n (nsphere n) (equator n) un = z"
[PROOF STATE]
proof (prove)
using this:
(hom_boundary (int n) (nsphere n) (equator n) \<circ> hom_induced (int n) (usphere n) (equator n) (nsphere n) (equator n) id) zn = z

goal (1 subgoal):
 1. hom_boundary (int n) (nsphere n) (equator n) un = z
[PROOF STEP]
by (simp add: un_def)
[PROOF STATE]
proof (state)
this:
hom_boundary (int n) (nsphere n) (equator n) un = z

goal (2 subgoals):
 1. n = 0 \<Longrightarrow> even (Brouwer_degree2 n f - Brouwer_degree2 (n - Suc 0) f)
 2. n \<noteq> 0 \<Longrightarrow> even (Brouwer_degree2 n f - Brouwer_degree2 (n - Suc 0) f)
[PROOF STEP]
have Bd_ab: "Brouwer_degree2 (n - Suc 0) f = a + b"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. Brouwer_degree2 (n - Suc 0) f = a + b
[PROOF STEP]
proof (rule Brouwer_degree2_unique_generator; use False int_ops in simp_all)
[PROOF STATE]
proof (state)
goal (3 subgoals):
 1. \<lbrakk>0 < n; \<And>a b. int (a - b) = (if a < b then 0 else int a - int b); \<And>a b. int (a div b) = int a div int b; \<And>a b. int (a mod b) = int a mod int b\<rbrakk> \<Longrightarrow> continuous_map (nsphere (n - Suc 0)) (nsphere (n - Suc 0)) f
 2. \<lbrakk>0 < n; \<And>a b. int (a - b) = (if a < b then 0 else int a - int b); \<And>a b. int (a div b) = int a div int b; \<And>a b. int (a mod b) = int a mod int b\<rbrakk> \<Longrightarrow> subgroup_generated (reduced_homology_group (int n - 1) (nsphere (n - Suc 0))) {?a1} = reduced_homology_group (int n - 1) (nsphere (n - Suc 0))
 3. \<lbrakk>0 < n; \<And>a b. int (a - b) = (if a < b then 0 else int a - int b); \<And>a b. int (a div b) = int a div int b; \<And>a b. int (a mod b) = int a mod int b\<rbrakk> \<Longrightarrow> hom_induced (int n - 1) (nsphere (n - Suc 0)) {} (nsphere (n - Suc 0)) {} f ?a1 = ?a1 [^]\<^bsub>reduced_homology_group (int n - 1) (nsphere (n - Suc 0))\<^esub> (a + b)
[PROOF STEP]
show "continuous_map (nsphere (n - Suc 0)) (nsphere (n - Suc 0)) f"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. continuous_map (nsphere (n - Suc 0)) (nsphere (n - Suc 0)) f
[PROOF STEP]
using cmr
[PROOF STATE]
proof (prove)
using this:
continuous_map (nsphere (n - Suc 0)) (nsphere (n - Suc 0)) f

goal (1 subgoal):
 1. continuous_map (nsphere (n - Suc 0)) (nsphere (n - Suc 0)) f
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
continuous_map (nsphere (n - Suc 0)) (nsphere (n - Suc 0)) f

goal (2 subgoals):
 1. \<lbrakk>0 < n; \<And>a b. int (a - b) = (if a < b then 0 else int a - int b); \<And>a b. int (a div b) = int a div int b; \<And>a b. int (a mod b) = int a mod int b\<rbrakk> \<Longrightarrow> subgroup_generated (reduced_homology_group (int n - 1) (nsphere (n - Suc 0))) {?a1} = reduced_homology_group (int n - 1) (nsphere (n - Suc 0))
 2. \<lbrakk>0 < n; \<And>a b. int (a - b) = (if a < b then 0 else int a - int b); \<And>a b. int (a div b) = int a div int b; \<And>a b. int (a mod b) = int a mod int b\<rbrakk> \<Longrightarrow> hom_induced (int n - 1) (nsphere (n - Suc 0)) {} (nsphere (n - Suc 0)) {} f ?a1 = ?a1 [^]\<^bsub>reduced_homology_group (int n - 1) (nsphere (n - Suc 0))\<^esub> (a + b)
[PROOF STEP]
show "subgroup_generated (reduced_homology_group (int n - 1) (nsphere (n - Suc 0))) {z} =
        reduced_homology_group (int n - 1) (nsphere (n - Suc 0))"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. subgroup_generated (reduced_homology_group (int n - 1) (nsphere (n - Suc 0))) {z} = reduced_homology_group (int n - 1) (nsphere (n - Suc 0))
[PROOF STEP]
using zeq
[PROOF STATE]
proof (prove)
using this:
subgroup_generated (reduced_homology_group (int n - 1) (nsphere (n - Suc 0))) {z} = reduced_homology_group (int n - 1) (nsphere (n - Suc 0))

goal (1 subgoal):
 1. subgroup_generated (reduced_homology_group (int n - 1) (nsphere (n - Suc 0))) {z} = reduced_homology_group (int n - 1) (nsphere (n - Suc 0))
[PROOF STEP]
by blast
[PROOF STATE]
proof (state)
this:
subgroup_generated (reduced_homology_group (int n - 1) (nsphere (n - Suc 0))) {z} = reduced_homology_group (int n - 1) (nsphere (n - Suc 0))

goal (1 subgoal):
 1. \<lbrakk>0 < n; \<And>a b. int (a - b) = (if a < b then 0 else int a - int b); \<And>a b. int (a div b) = int a div int b; \<And>a b. int (a mod b) = int a mod int b\<rbrakk> \<Longrightarrow> hom_induced (int n - 1) (nsphere (n - Suc 0)) {} (nsphere (n - Suc 0)) {} f z = z [^]\<^bsub>reduced_homology_group (int n - 1) (nsphere (n - Suc 0))\<^esub> (a + b)
[PROOF STEP]
have "(hom_induced (int n - 1) (nsphere (n - Suc 0)) {} (nsphere (n - Suc 0)) {} f
           \<circ> hom_boundary n (nsphere n) (equator n)) up
        = (hom_boundary n (nsphere n) (equator n) \<circ>
           ?hi_ee f) up"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (hom_induced (int n - 1) (nsphere (n - Suc 0)) {} (nsphere (n - Suc 0)) {} f \<circ> hom_boundary (int n) (nsphere n) (equator n)) up = (hom_boundary (int n) (nsphere n) (equator n) \<circ> hom_induced (int n) (nsphere n) (equator n) (nsphere n) (equator n) f) up
[PROOF STEP]
using naturality_hom_induced [OF cmf fimeq, of n, symmetric]
[PROOF STATE]
proof (prove)
using this:
hom_induced (int n - 1) (subtopology (nsphere n) (topspace (nsphere n) \<inter> equator n)) {} (subtopology (nsphere n) (topspace (nsphere n) \<inter> equator n)) {} f \<circ> hom_boundary (int n) (nsphere n) (topspace (nsphere n) \<inter> equator n) = hom_boundary (int n) (nsphere n) (topspace (nsphere n) \<inter> equator n) \<circ> hom_induced (int n) (nsphere n) (topspace (nsphere n) \<inter> equator n) (nsphere n) (topspace (nsphere n) \<inter> equator n) f

goal (1 subgoal):
 1. (hom_induced (int n - 1) (nsphere (n - Suc 0)) {} (nsphere (n - Suc 0)) {} f \<circ> hom_boundary (int n) (nsphere n) (equator n)) up = (hom_boundary (int n) (nsphere n) (equator n) \<circ> hom_induced (int n) (nsphere n) (equator n) (nsphere n) (equator n) f) up
[PROOF STEP]
by (simp add: subtopology_restrict equ fun_eq_iff)
[PROOF STATE]
proof (state)
this:
(hom_induced (int n - 1) (nsphere (n - Suc 0)) {} (nsphere (n - Suc 0)) {} f \<circ> hom_boundary (int n) (nsphere n) (equator n)) up = (hom_boundary (int n) (nsphere n) (equator n) \<circ> hom_induced (int n) (nsphere n) (equator n) (nsphere n) (equator n) f) up

goal (1 subgoal):
 1. \<lbrakk>0 < n; \<And>a b. int (a - b) = (if a < b then 0 else int a - int b); \<And>a b. int (a div b) = int a div int b; \<And>a b. int (a mod b) = int a mod int b\<rbrakk> \<Longrightarrow> hom_induced (int n - 1) (nsphere (n - Suc 0)) {} (nsphere (n - Suc 0)) {} f z = z [^]\<^bsub>reduced_homology_group (int n - 1) (nsphere (n - Suc 0))\<^esub> (a + b)
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
(hom_induced (int n - 1) (nsphere (n - Suc 0)) {} (nsphere (n - Suc 0)) {} f \<circ> hom_boundary (int n) (nsphere n) (equator n)) up = (hom_boundary (int n) (nsphere n) (equator n) \<circ> hom_induced (int n) (nsphere n) (equator n) (nsphere n) (equator n) f) up

goal (1 subgoal):
 1. \<lbrakk>0 < n; \<And>a b. int (a - b) = (if a < b then 0 else int a - int b); \<And>a b. int (a div b) = int a div int b; \<And>a b. int (a mod b) = int a mod int b\<rbrakk> \<Longrightarrow> hom_induced (int n - 1) (nsphere (n - Suc 0)) {} (nsphere (n - Suc 0)) {} f z = z [^]\<^bsub>reduced_homology_group (int n - 1) (nsphere (n - Suc 0))\<^esub> (a + b)
[PROOF STEP]
have "\<dots> = hom_boundary n (nsphere n) (equator n)
                       (up [^]\<^bsub>relative_homology_group n (nsphere n) (equator n)\<^esub>
                        a \<otimes>\<^bsub>relative_homology_group n (nsphere n) (equator n)\<^esub>
                        un [^]\<^bsub>relative_homology_group n (nsphere n) (equator n)\<^esub> b)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (hom_boundary (int n) (nsphere n) (equator n) \<circ> hom_induced (int n) (nsphere n) (equator n) (nsphere n) (equator n) f) up = hom_boundary (int n) (nsphere n) (equator n) (up [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> a \<otimes>\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> un [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> b)
[PROOF STEP]
by (simp add: o_def up_ab)
[PROOF STATE]
proof (state)
this:
(hom_boundary (int n) (nsphere n) (equator n) \<circ> hom_induced (int n) (nsphere n) (equator n) (nsphere n) (equator n) f) up = hom_boundary (int n) (nsphere n) (equator n) (up [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> a \<otimes>\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> un [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> b)

goal (1 subgoal):
 1. \<lbrakk>0 < n; \<And>a b. int (a - b) = (if a < b then 0 else int a - int b); \<And>a b. int (a div b) = int a div int b; \<And>a b. int (a mod b) = int a mod int b\<rbrakk> \<Longrightarrow> hom_induced (int n - 1) (nsphere (n - Suc 0)) {} (nsphere (n - Suc 0)) {} f z = z [^]\<^bsub>reduced_homology_group (int n - 1) (nsphere (n - Suc 0))\<^esub> (a + b)
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
(hom_boundary (int n) (nsphere n) (equator n) \<circ> hom_induced (int n) (nsphere n) (equator n) (nsphere n) (equator n) f) up = hom_boundary (int n) (nsphere n) (equator n) (up [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> a \<otimes>\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> un [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> b)

goal (1 subgoal):
 1. \<lbrakk>0 < n; \<And>a b. int (a - b) = (if a < b then 0 else int a - int b); \<And>a b. int (a div b) = int a div int b; \<And>a b. int (a mod b) = int a mod int b\<rbrakk> \<Longrightarrow> hom_induced (int n - 1) (nsphere (n - Suc 0)) {} (nsphere (n - Suc 0)) {} f z = z [^]\<^bsub>reduced_homology_group (int n - 1) (nsphere (n - Suc 0))\<^esub> (a + b)
[PROOF STEP]
have "\<dots> = z [^]\<^bsub>reduced_homology_group (int n - 1) (nsphere (n - Suc 0))\<^esub> (a + b)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. hom_boundary (int n) (nsphere n) (equator n) (up [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> a \<otimes>\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> un [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> b) = z [^]\<^bsub>reduced_homology_group (int n - 1) (nsphere (n - Suc 0))\<^esub> (a + b)
[PROOF STEP]
using zcarr
[PROOF STATE]
proof (prove)
using this:
z \<in> carrier (reduced_homology_group (int n - 1) (nsphere (n - Suc 0)))

goal (1 subgoal):
 1. hom_boundary (int n) (nsphere n) (equator n) (up [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> a \<otimes>\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> un [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> b) = z [^]\<^bsub>reduced_homology_group (int n - 1) (nsphere (n - Suc 0))\<^esub> (a + b)
[PROOF STEP]
apply (simp add: HB.hom_int_pow reduced_homology_group_def group.int_pow_subgroup_generated upcarr uncarr)
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. z \<in> carrier (subgroup_generated (homology_group (int n - 1) (nsphere (n - Suc 0))) (kernel (homology_group (int n - 1) (nsphere (n - Suc 0))) (homology_group (int n - 1) (discrete_topology {()})) (hom_induced (int n - 1) (nsphere (n - Suc 0)) {} (discrete_topology {()}) {} (\<lambda>x. ())))) \<Longrightarrow> hom_boundary (int n) (nsphere n) (equator n) up [^]\<^bsub>homology_group (int n - 1) (subtopology (nsphere n) (equator n))\<^esub> a \<otimes>\<^bsub>homology_group (int n - 1) (subtopology (nsphere n) (equator n))\<^esub> hom_boundary (int n) (nsphere n) (equator n) un [^]\<^bsub>homology_group (int n - 1) (subtopology (nsphere n) (equator n))\<^esub> b = z [^]\<^bsub>homology_group (int n - 1) (nsphere (n - Suc 0))\<^esub> (a + b)
[PROOF STEP]
by (metis equ(1) group.int_pow_mult group_relative_homology_group hom_boundary_carrier un_z up_z)
[PROOF STATE]
proof (state)
this:
hom_boundary (int n) (nsphere n) (equator n) (up [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> a \<otimes>\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> un [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> b) = z [^]\<^bsub>reduced_homology_group (int n - 1) (nsphere (n - Suc 0))\<^esub> (a + b)

goal (1 subgoal):
 1. \<lbrakk>0 < n; \<And>a b. int (a - b) = (if a < b then 0 else int a - int b); \<And>a b. int (a div b) = int a div int b; \<And>a b. int (a mod b) = int a mod int b\<rbrakk> \<Longrightarrow> hom_induced (int n - 1) (nsphere (n - Suc 0)) {} (nsphere (n - Suc 0)) {} f z = z [^]\<^bsub>reduced_homology_group (int n - 1) (nsphere (n - Suc 0))\<^esub> (a + b)
[PROOF STEP]
finally
[PROOF STATE]
proof (chain)
picking this:
(hom_induced (int n - 1) (nsphere (n - Suc 0)) {} (nsphere (n - Suc 0)) {} f \<circ> hom_boundary (int n) (nsphere n) (equator n)) up = z [^]\<^bsub>reduced_homology_group (int n - 1) (nsphere (n - Suc 0))\<^esub> (a + b)
[PROOF STEP]
show "hom_induced (int n - 1) (nsphere (n - Suc 0)) {} (nsphere (n - Suc 0)) {} f z =
        z [^]\<^bsub>reduced_homology_group (int n - 1) (nsphere (n - Suc 0))\<^esub> (a + b)"
[PROOF STATE]
proof (prove)
using this:
(hom_induced (int n - 1) (nsphere (n - Suc 0)) {} (nsphere (n - Suc 0)) {} f \<circ> hom_boundary (int n) (nsphere n) (equator n)) up = z [^]\<^bsub>reduced_homology_group (int n - 1) (nsphere (n - Suc 0))\<^esub> (a + b)

goal (1 subgoal):
 1. hom_induced (int n - 1) (nsphere (n - Suc 0)) {} (nsphere (n - Suc 0)) {} f z = z [^]\<^bsub>reduced_homology_group (int n - 1) (nsphere (n - Suc 0))\<^esub> (a + b)
[PROOF STEP]
by (simp add: up_z)
[PROOF STATE]
proof (state)
this:
hom_induced (int n - 1) (nsphere (n - Suc 0)) {} (nsphere (n - Suc 0)) {} f z = z [^]\<^bsub>reduced_homology_group (int n - 1) (nsphere (n - Suc 0))\<^esub> (a + b)

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
Brouwer_degree2 (n - Suc 0) f = a + b

goal (2 subgoals):
 1. n = 0 \<Longrightarrow> even (Brouwer_degree2 n f - Brouwer_degree2 (n - Suc 0) f)
 2. n \<noteq> 0 \<Longrightarrow> even (Brouwer_degree2 n f - Brouwer_degree2 (n - Suc 0) f)
[PROOF STEP]
define u where "u \<equiv> up \<otimes>\<^bsub>?rhgn (equator n)\<^esub> inv\<^bsub>?rhgn (equator n)\<^esub> un"
[PROOF STATE]
proof (state)
this:
u \<equiv> up \<otimes>\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> inv\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> un

goal (2 subgoals):
 1. n = 0 \<Longrightarrow> even (Brouwer_degree2 n f - Brouwer_degree2 (n - Suc 0) f)
 2. n \<noteq> 0 \<Longrightarrow> even (Brouwer_degree2 n f - Brouwer_degree2 (n - Suc 0) f)
[PROOF STEP]
have ucarr: "u \<in> carrier (?rhgn (equator n))"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. u \<in> carrier (relative_homology_group (int n) (nsphere n) (equator n))
[PROOF STEP]
by (simp add: u_def uncarr upcarr)
[PROOF STATE]
proof (state)
this:
u \<in> carrier (relative_homology_group (int n) (nsphere n) (equator n))

goal (2 subgoals):
 1. n = 0 \<Longrightarrow> even (Brouwer_degree2 n f - Brouwer_degree2 (n - Suc 0) f)
 2. n \<noteq> 0 \<Longrightarrow> even (Brouwer_degree2 n f - Brouwer_degree2 (n - Suc 0) f)
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
u \<in> carrier (relative_homology_group (int n) (nsphere n) (equator n))
[PROOF STEP]
have "u [^]\<^bsub>?rhgn (equator n)\<^esub> Brouwer_degree2 n f = u [^]\<^bsub>?rhgn (equator n)\<^esub> (a - b)
             \<longleftrightarrow> (GE.ord u) dvd a - b - Brouwer_degree2 n f"
[PROOF STATE]
proof (prove)
using this:
u \<in> carrier (relative_homology_group (int n) (nsphere n) (equator n))

goal (1 subgoal):
 1. (u [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> Brouwer_degree2 n f = u [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> (a - b)) = (int (GE.ord u) dvd a - b - Brouwer_degree2 n f)
[PROOF STEP]
by (simp add: GE.int_pow_eq)
[PROOF STATE]
proof (state)
this:
(u [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> Brouwer_degree2 n f = u [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> (a - b)) = (int (GE.ord u) dvd a - b - Brouwer_degree2 n f)

goal (2 subgoals):
 1. n = 0 \<Longrightarrow> even (Brouwer_degree2 n f - Brouwer_degree2 (n - Suc 0) f)
 2. n \<noteq> 0 \<Longrightarrow> even (Brouwer_degree2 n f - Brouwer_degree2 (n - Suc 0) f)
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
(u [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> Brouwer_degree2 n f = u [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> (a - b)) = (int (GE.ord u) dvd a - b - Brouwer_degree2 n f)

goal (2 subgoals):
 1. n = 0 \<Longrightarrow> even (Brouwer_degree2 n f - Brouwer_degree2 (n - Suc 0) f)
 2. n \<noteq> 0 \<Longrightarrow> even (Brouwer_degree2 n f - Brouwer_degree2 (n - Suc 0) f)
[PROOF STEP]
have "GE.ord u = 0"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. GE.ord u = 0
[PROOF STEP]
proof (clarsimp simp add: GE.ord_eq_0 ucarr)
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. \<And>na. \<lbrakk>0 < na; u [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> na = singular_relboundary_set n (nsphere n) (equator n)\<rbrakk> \<Longrightarrow> False
[PROOF STEP]
fix d :: nat
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. \<And>na. \<lbrakk>0 < na; u [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> na = singular_relboundary_set n (nsphere n) (equator n)\<rbrakk> \<Longrightarrow> False
[PROOF STEP]
assume "0 < d"
      and "u [^]\<^bsub>?rhgn (equator n)\<^esub> d = singular_relboundary_set n (nsphere n) (equator n)"
[PROOF STATE]
proof (state)
this:
0 < d
u [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> d = singular_relboundary_set n (nsphere n) (equator n)

goal (1 subgoal):
 1. \<And>na. \<lbrakk>0 < na; u [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> na = singular_relboundary_set n (nsphere n) (equator n)\<rbrakk> \<Longrightarrow> False
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
0 < d
u [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> d = singular_relboundary_set n (nsphere n) (equator n)
[PROOF STEP]
have "hom_induced n (nsphere n) (equator n) (nsphere n) (upper n) id u [^]\<^bsub>?rhgn (upper n)\<^esub> d
               = \<one>\<^bsub>?rhgn (upper n)\<^esub>"
[PROOF STATE]
proof (prove)
using this:
0 < d
u [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> d = singular_relboundary_set n (nsphere n) (equator n)

goal (1 subgoal):
 1. hom_induced (int n) (nsphere n) (equator n) (nsphere n) (upper n) id u [^]\<^bsub>relative_homology_group (int n) (nsphere n) (upper n)\<^esub> d = \<one>\<^bsub>relative_homology_group (int n) (nsphere n) (upper n)\<^esub>
[PROOF STEP]
by (metis HIU.hom_one HIU.hom_nat_pow one_relative_homology_group ucarr)
[PROOF STATE]
proof (state)
this:
hom_induced (int n) (nsphere n) (equator n) (nsphere n) (upper n) id u [^]\<^bsub>relative_homology_group (int n) (nsphere n) (upper n)\<^esub> d = \<one>\<^bsub>relative_homology_group (int n) (nsphere n) (upper n)\<^esub>

goal (1 subgoal):
 1. \<And>na. \<lbrakk>0 < na; u [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> na = singular_relboundary_set n (nsphere n) (equator n)\<rbrakk> \<Longrightarrow> False
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
hom_induced (int n) (nsphere n) (equator n) (nsphere n) (upper n) id u [^]\<^bsub>relative_homology_group (int n) (nsphere n) (upper n)\<^esub> d = \<one>\<^bsub>relative_homology_group (int n) (nsphere n) (upper n)\<^esub>

goal (1 subgoal):
 1. \<And>na. \<lbrakk>0 < na; u [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> na = singular_relboundary_set n (nsphere n) (equator n)\<rbrakk> \<Longrightarrow> False
[PROOF STEP]
have "?hi_lu
        = hom_induced n (nsphere n) (equator n) (nsphere n) (upper n) id \<circ>
          hom_induced n (lsphere n) (equator n) (nsphere n) (equator n) id"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. hom_induced (int n) (lsphere n) (equator n) (nsphere n) (upper n) id = hom_induced (int n) (nsphere n) (equator n) (nsphere n) (upper n) id \<circ> hom_induced (int n) (lsphere n) (equator n) (nsphere n) (equator n) id
[PROOF STEP]
by (simp add: lsphere_def image_subset_iff equator_upper flip: hom_induced_compose)
[PROOF STATE]
proof (state)
this:
hom_induced (int n) (lsphere n) (equator n) (nsphere n) (upper n) id = hom_induced (int n) (nsphere n) (equator n) (nsphere n) (upper n) id \<circ> hom_induced (int n) (lsphere n) (equator n) (nsphere n) (equator n) id

goal (1 subgoal):
 1. \<And>na. \<lbrakk>0 < na; u [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> na = singular_relboundary_set n (nsphere n) (equator n)\<rbrakk> \<Longrightarrow> False
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
hom_induced (int n) (lsphere n) (equator n) (nsphere n) (upper n) id = hom_induced (int n) (nsphere n) (equator n) (nsphere n) (upper n) id \<circ> hom_induced (int n) (lsphere n) (equator n) (nsphere n) (equator n) id
[PROOF STEP]
have p: "wp = hom_induced n (nsphere n) (equator n) (nsphere n) (upper n) id up"
[PROOF STATE]
proof (prove)
using this:
hom_induced (int n) (lsphere n) (equator n) (nsphere n) (upper n) id = hom_induced (int n) (nsphere n) (equator n) (nsphere n) (upper n) id \<circ> hom_induced (int n) (lsphere n) (equator n) (nsphere n) (equator n) id

goal (1 subgoal):
 1. wp = hom_induced (int n) (nsphere n) (equator n) (nsphere n) (upper n) id up
[PROOF STEP]
by (simp add: local.up_def wp_def)
[PROOF STATE]
proof (state)
this:
wp = hom_induced (int n) (nsphere n) (equator n) (nsphere n) (upper n) id up

goal (1 subgoal):
 1. \<And>na. \<lbrakk>0 < na; u [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> na = singular_relboundary_set n (nsphere n) (equator n)\<rbrakk> \<Longrightarrow> False
[PROOF STEP]
have n: "hom_induced n (nsphere n) (equator n) (nsphere n) (upper n) id un = \<one>\<^bsub>?rhgn (upper n)\<^esub>"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. hom_induced (int n) (nsphere n) (equator n) (nsphere n) (upper n) id un = \<one>\<^bsub>relative_homology_group (int n) (nsphere n) (upper n)\<^esub>
[PROOF STEP]
using homology_exactness_triple_3 [OF equator_upper, of n "nsphere n"]
[PROOF STATE]
proof (prove)
using this:
exact_seq ([relative_homology_group (int n) (nsphere n) (upper n), relative_homology_group (int n) (nsphere n) (equator n), relative_homology_group (int n) (subtopology (nsphere n) (upper n)) (equator n)], [hom_induced (int n) (nsphere n) (equator n) (nsphere n) (upper n) id, hom_induced (int n) (subtopology (nsphere n) (upper n)) (equator n) (nsphere n) (equator n) id])

goal (1 subgoal):
 1. hom_induced (int n) (nsphere n) (equator n) (nsphere n) (upper n) id un = \<one>\<^bsub>relative_homology_group (int n) (nsphere n) (upper n)\<^esub>
[PROOF STEP]
using un_def zncarr
[PROOF STATE]
proof (prove)
using this:
exact_seq ([relative_homology_group (int n) (nsphere n) (upper n), relative_homology_group (int n) (nsphere n) (equator n), relative_homology_group (int n) (subtopology (nsphere n) (upper n)) (equator n)], [hom_induced (int n) (nsphere n) (equator n) (nsphere n) (upper n) id, hom_induced (int n) (subtopology (nsphere n) (upper n)) (equator n) (nsphere n) (equator n) id])
un \<equiv> hom_induced (int n) (usphere n) (equator n) (nsphere n) (equator n) id zn
zn \<in> carrier (relative_homology_group (int n) (usphere n) (equator n))

goal (1 subgoal):
 1. hom_induced (int n) (nsphere n) (equator n) (nsphere n) (upper n) id un = \<one>\<^bsub>relative_homology_group (int n) (nsphere n) (upper n)\<^esub>
[PROOF STEP]
by (auto simp: upper_usphere kernel_def)
[PROOF STATE]
proof (state)
this:
hom_induced (int n) (nsphere n) (equator n) (nsphere n) (upper n) id un = \<one>\<^bsub>relative_homology_group (int n) (nsphere n) (upper n)\<^esub>

goal (1 subgoal):
 1. \<And>na. \<lbrakk>0 < na; u [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> na = singular_relboundary_set n (nsphere n) (equator n)\<rbrakk> \<Longrightarrow> False
[PROOF STEP]
have "hom_induced n (nsphere n) (equator n) (nsphere n) (upper n) id u = wp"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. hom_induced (int n) (nsphere n) (equator n) (nsphere n) (upper n) id u = wp
[PROOF STEP]
unfolding u_def
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. hom_induced (int n) (nsphere n) (equator n) (nsphere n) (upper n) id (up \<otimes>\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> inv\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> un) = wp
[PROOF STEP]
using p n HIU.inv_one HIU.r_one uncarr upcarr
[PROOF STATE]
proof (prove)
using this:
wp = hom_induced (int n) (nsphere n) (equator n) (nsphere n) (upper n) id up
hom_induced (int n) (nsphere n) (equator n) (nsphere n) (upper n) id un = \<one>\<^bsub>relative_homology_group (int n) (nsphere n) (upper n)\<^esub>
inv\<^bsub>relative_homology_group (int n) (nsphere n) (upper n)\<^esub> \<one>\<^bsub>relative_homology_group (int n) (nsphere n) (upper n)\<^esub> = \<one>\<^bsub>relative_homology_group (int n) (nsphere n) (upper n)\<^esub>
?x \<in> carrier (relative_homology_group (int n) (nsphere n) (upper n)) \<Longrightarrow> ?x \<otimes>\<^bsub>relative_homology_group (int n) (nsphere n) (upper n)\<^esub> \<one>\<^bsub>relative_homology_group (int n) (nsphere n) (upper n)\<^esub> = ?x
un \<in> carrier (relative_homology_group (int n) (nsphere n) (equator n))
up \<in> carrier (relative_homology_group (int n) (nsphere n) (equator n))

goal (1 subgoal):
 1. hom_induced (int n) (nsphere n) (equator n) (nsphere n) (upper n) id (up \<otimes>\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> inv\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> un) = wp
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
hom_induced (int n) (nsphere n) (equator n) (nsphere n) (upper n) id u = wp

goal (1 subgoal):
 1. \<And>na. \<lbrakk>0 < na; u [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> na = singular_relboundary_set n (nsphere n) (equator n)\<rbrakk> \<Longrightarrow> False
[PROOF STEP]
ultimately
[PROOF STATE]
proof (chain)
picking this:
hom_induced (int n) (nsphere n) (equator n) (nsphere n) (upper n) id u [^]\<^bsub>relative_homology_group (int n) (nsphere n) (upper n)\<^esub> d = \<one>\<^bsub>relative_homology_group (int n) (nsphere n) (upper n)\<^esub>
hom_induced (int n) (nsphere n) (equator n) (nsphere n) (upper n) id u = wp
[PROOF STEP]
have "(wp [^]\<^bsub>?rhgn (upper n)\<^esub> d) = \<one>\<^bsub>?rhgn (upper n)\<^esub>"
[PROOF STATE]
proof (prove)
using this:
hom_induced (int n) (nsphere n) (equator n) (nsphere n) (upper n) id u [^]\<^bsub>relative_homology_group (int n) (nsphere n) (upper n)\<^esub> d = \<one>\<^bsub>relative_homology_group (int n) (nsphere n) (upper n)\<^esub>
hom_induced (int n) (nsphere n) (equator n) (nsphere n) (upper n) id u = wp

goal (1 subgoal):
 1. wp [^]\<^bsub>relative_homology_group (int n) (nsphere n) (upper n)\<^esub> d = \<one>\<^bsub>relative_homology_group (int n) (nsphere n) (upper n)\<^esub>
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
wp [^]\<^bsub>relative_homology_group (int n) (nsphere n) (upper n)\<^esub> d = \<one>\<^bsub>relative_homology_group (int n) (nsphere n) (upper n)\<^esub>

goal (1 subgoal):
 1. \<And>na. \<lbrakk>0 < na; u [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> na = singular_relboundary_set n (nsphere n) (equator n)\<rbrakk> \<Longrightarrow> False
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
wp [^]\<^bsub>relative_homology_group (int n) (nsphere n) (upper n)\<^esub> d = \<one>\<^bsub>relative_homology_group (int n) (nsphere n) (upper n)\<^esub>

goal (1 subgoal):
 1. \<And>na. \<lbrakk>0 < na; u [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> na = singular_relboundary_set n (nsphere n) (equator n)\<rbrakk> \<Longrightarrow> False
[PROOF STEP]
have "infinite (carrier (subgroup_generated (?rhgn (upper n)) {wp}))"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. infinite (carrier (subgroup_generated (relative_homology_group (int n) (nsphere n) (upper n)) {wp}))
[PROOF STEP]
proof -
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. infinite (carrier (subgroup_generated (relative_homology_group (int n) (nsphere n) (upper n)) {wp}))
[PROOF STEP]
have "?rhgn (upper n) \<cong> reduced_homology_group n (nsphere n)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. relative_homology_group (int n) (nsphere n) (upper n) \<cong> reduced_homology_group (int n) (nsphere n)
[PROOF STEP]
unfolding upper_def
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. relative_homology_group (int n) (nsphere n) {x. 0 \<le> x n} \<cong> reduced_homology_group (int n) (nsphere n)
[PROOF STEP]
using iso_reduced_homology_group_upper_hemisphere [of n n n]
[PROOF STATE]
proof (prove)
using this:
n \<le> n \<Longrightarrow> hom_induced (int n) (nsphere n) {} (nsphere n) {x. 0 \<le> x n} id \<in> Group.iso (reduced_homology_group (int n) (nsphere n)) (relative_homology_group (int n) (nsphere n) {x. 0 \<le> x n})

goal (1 subgoal):
 1. relative_homology_group (int n) (nsphere n) {x. 0 \<le> x n} \<cong> reduced_homology_group (int n) (nsphere n)
[PROOF STEP]
by (blast intro: group.iso_sym group_reduced_homology_group is_isoI)
[PROOF STATE]
proof (state)
this:
relative_homology_group (int n) (nsphere n) (upper n) \<cong> reduced_homology_group (int n) (nsphere n)

goal (1 subgoal):
 1. infinite (carrier (subgroup_generated (relative_homology_group (int n) (nsphere n) (upper n)) {wp}))
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
relative_homology_group (int n) (nsphere n) (upper n) \<cong> reduced_homology_group (int n) (nsphere n)

goal (1 subgoal):
 1. infinite (carrier (subgroup_generated (relative_homology_group (int n) (nsphere n) (upper n)) {wp}))
[PROOF STEP]
have "\<dots> \<cong> integer_group"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. reduced_homology_group (int n) (nsphere n) \<cong> integer_group
[PROOF STEP]
by (simp add: reduced_homology_group_nsphere)
[PROOF STATE]
proof (state)
this:
reduced_homology_group (int n) (nsphere n) \<cong> integer_group

goal (1 subgoal):
 1. infinite (carrier (subgroup_generated (relative_homology_group (int n) (nsphere n) (upper n)) {wp}))
[PROOF STEP]
finally
[PROOF STATE]
proof (chain)
picking this:
relative_homology_group (int n) (nsphere n) (upper n) \<cong> integer_group
[PROOF STEP]
have iso: "?rhgn (upper n) \<cong> integer_group"
[PROOF STATE]
proof (prove)
using this:
relative_homology_group (int n) (nsphere n) (upper n) \<cong> integer_group

goal (1 subgoal):
 1. relative_homology_group (int n) (nsphere n) (upper n) \<cong> integer_group
[PROOF STEP]
.
[PROOF STATE]
proof (state)
this:
relative_homology_group (int n) (nsphere n) (upper n) \<cong> integer_group

goal (1 subgoal):
 1. infinite (carrier (subgroup_generated (relative_homology_group (int n) (nsphere n) (upper n)) {wp}))
[PROOF STEP]
have "carrier (subgroup_generated (?rhgn (upper n)) {wp}) = carrier (?rhgn (upper n))"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. carrier (subgroup_generated (relative_homology_group (int n) (nsphere n) (upper n)) {wp}) = carrier (relative_homology_group (int n) (nsphere n) (upper n))
[PROOF STEP]
using gh_lu.subgroup_generated_by_image [of "{zp}"] zpcarr HIU.carrier_subgroup_generated_subset
          gh_lu.iso_iff iso_relative_homology_group_lower_hemisphere zp_sg
[PROOF STATE]
proof (prove)
using this:
{zp} \<subseteq> carrier (relative_homology_group (int n) (lsphere n) (equator n)) \<Longrightarrow> carrier (subgroup_generated (relative_homology_group (int n) (nsphere n) (upper n)) (hom_induced (int n) (lsphere n) (equator n) (nsphere n) (upper n) id ` {zp})) = hom_induced (int n) (lsphere n) (equator n) (nsphere n) (upper n) id ` carrier (subgroup_generated (relative_homology_group (int n) (lsphere n) (equator n)) {zp})
zp \<in> carrier (relative_homology_group (int n) (lsphere n) (equator n))
carrier (subgroup_generated (relative_homology_group (int n) (nsphere n) (upper n)) ?A) \<subseteq> carrier (relative_homology_group (int n) (nsphere n) (upper n))
(hom_induced (int n) (lsphere n) (equator n) (nsphere n) (upper n) id \<in> Group.iso (relative_homology_group (int n) (lsphere n) (equator n)) (relative_homology_group (int n) (nsphere n) (upper n))) = (carrier (relative_homology_group (int n) (nsphere n) (upper n)) \<subseteq> hom_induced (int n) (lsphere n) (equator n) (nsphere n) (upper n) id ` carrier (relative_homology_group (int n) (lsphere n) (equator n)) \<and> (\<forall>x\<in>carrier (relative_homology_group (int n) (lsphere n) (equator n)). hom_induced (int n) (lsphere n) (equator n) (nsphere n) (upper n) id x = \<one>\<^bsub>relative_homology_group (int n) (nsphere n) (upper n)\<^esub> \<longrightarrow> x = \<one>\<^bsub>relative_homology_group (int n) (lsphere n) (equator n)\<^esub>))
hom_induced ?p (subtopology (nsphere ?n) {x. x ?k \<le> 0}) {x. x ?k = 0} (nsphere ?n) {x. 0 \<le> x ?k} id \<in> Group.iso (relative_homology_group ?p (subtopology (nsphere ?n) {x. x ?k \<le> 0}) {x. x ?k = 0}) (relative_homology_group ?p (nsphere ?n) {x. 0 \<le> x ?k})
subgroup_generated (relative_homology_group (int n) (lsphere n) (equator n)) {zp} = relative_homology_group (int n) (lsphere n) (equator n)

goal (1 subgoal):
 1. carrier (subgroup_generated (relative_homology_group (int n) (nsphere n) (upper n)) {wp}) = carrier (relative_homology_group (int n) (nsphere n) (upper n))
[PROOF STEP]
by (auto simp: lower_def lsphere_def upper_def equator_def wp_def)
[PROOF STATE]
proof (state)
this:
carrier (subgroup_generated (relative_homology_group (int n) (nsphere n) (upper n)) {wp}) = carrier (relative_homology_group (int n) (nsphere n) (upper n))

goal (1 subgoal):
 1. infinite (carrier (subgroup_generated (relative_homology_group (int n) (nsphere n) (upper n)) {wp}))
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
carrier (subgroup_generated (relative_homology_group (int n) (nsphere n) (upper n)) {wp}) = carrier (relative_homology_group (int n) (nsphere n) (upper n))
[PROOF STEP]
show ?thesis
[PROOF STATE]
proof (prove)
using this:
carrier (subgroup_generated (relative_homology_group (int n) (nsphere n) (upper n)) {wp}) = carrier (relative_homology_group (int n) (nsphere n) (upper n))

goal (1 subgoal):
 1. infinite (carrier (subgroup_generated (relative_homology_group (int n) (nsphere n) (upper n)) {wp}))
[PROOF STEP]
using infinite_UNIV_int iso_finite [OF iso]
[PROOF STATE]
proof (prove)
using this:
carrier (subgroup_generated (relative_homology_group (int n) (nsphere n) (upper n)) {wp}) = carrier (relative_homology_group (int n) (nsphere n) (upper n))
infinite UNIV
finite (carrier (relative_homology_group (int n) (nsphere n) (upper n))) = finite (carrier integer_group)

goal (1 subgoal):
 1. infinite (carrier (subgroup_generated (relative_homology_group (int n) (nsphere n) (upper n)) {wp}))
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
infinite (carrier (subgroup_generated (relative_homology_group (int n) (nsphere n) (upper n)) {wp}))

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
infinite (carrier (subgroup_generated (relative_homology_group (int n) (nsphere n) (upper n)) {wp}))

goal (1 subgoal):
 1. \<And>na. \<lbrakk>0 < na; u [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> na = singular_relboundary_set n (nsphere n) (equator n)\<rbrakk> \<Longrightarrow> False
[PROOF STEP]
ultimately
[PROOF STATE]
proof (chain)
picking this:
wp [^]\<^bsub>relative_homology_group (int n) (nsphere n) (upper n)\<^esub> d = \<one>\<^bsub>relative_homology_group (int n) (nsphere n) (upper n)\<^esub>
infinite (carrier (subgroup_generated (relative_homology_group (int n) (nsphere n) (upper n)) {wp}))
[PROOF STEP]
show False
[PROOF STATE]
proof (prove)
using this:
wp [^]\<^bsub>relative_homology_group (int n) (nsphere n) (upper n)\<^esub> d = \<one>\<^bsub>relative_homology_group (int n) (nsphere n) (upper n)\<^esub>
infinite (carrier (subgroup_generated (relative_homology_group (int n) (nsphere n) (upper n)) {wp}))

goal (1 subgoal):
 1. False
[PROOF STEP]
using HIU.finite_cyclic_subgroup \<open>0 < d\<close> wpcarr
[PROOF STATE]
proof (prove)
using this:
wp [^]\<^bsub>relative_homology_group (int n) (nsphere n) (upper n)\<^esub> d = \<one>\<^bsub>relative_homology_group (int n) (nsphere n) (upper n)\<^esub>
infinite (carrier (subgroup_generated (relative_homology_group (int n) (nsphere n) (upper n)) {wp}))
?x \<in> carrier (relative_homology_group (int n) (nsphere n) (upper n)) \<Longrightarrow> finite (carrier (subgroup_generated (relative_homology_group (int n) (nsphere n) (upper n)) {?x})) = (\<exists>na. na \<noteq> 0 \<and> ?x [^]\<^bsub>relative_homology_group (int n) (nsphere n) (upper n)\<^esub> na = \<one>\<^bsub>relative_homology_group (int n) (nsphere n) (upper n)\<^esub>)
0 < d
wp \<in> carrier (relative_homology_group (int n) (nsphere n) (upper n))

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

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
GE.ord u = 0

goal (2 subgoals):
 1. n = 0 \<Longrightarrow> even (Brouwer_degree2 n f - Brouwer_degree2 (n - Suc 0) f)
 2. n \<noteq> 0 \<Longrightarrow> even (Brouwer_degree2 n f - Brouwer_degree2 (n - Suc 0) f)
[PROOF STEP]
ultimately
[PROOF STATE]
proof (chain)
picking this:
(u [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> Brouwer_degree2 n f = u [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> (a - b)) = (int (GE.ord u) dvd a - b - Brouwer_degree2 n f)
GE.ord u = 0
[PROOF STEP]
have iff: "u [^]\<^bsub>?rhgn (equator n)\<^esub> Brouwer_degree2 n f = u [^]\<^bsub>?rhgn (equator n)\<^esub> (a - b)
                   \<longleftrightarrow> Brouwer_degree2 n f = a - b"
[PROOF STATE]
proof (prove)
using this:
(u [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> Brouwer_degree2 n f = u [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> (a - b)) = (int (GE.ord u) dvd a - b - Brouwer_degree2 n f)
GE.ord u = 0

goal (1 subgoal):
 1. (u [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> Brouwer_degree2 n f = u [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> (a - b)) = (Brouwer_degree2 n f = a - b)
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
(u [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> Brouwer_degree2 n f = u [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> (a - b)) = (Brouwer_degree2 n f = a - b)

goal (2 subgoals):
 1. n = 0 \<Longrightarrow> even (Brouwer_degree2 n f - Brouwer_degree2 (n - Suc 0) f)
 2. n \<noteq> 0 \<Longrightarrow> even (Brouwer_degree2 n f - Brouwer_degree2 (n - Suc 0) f)
[PROOF STEP]
have "u [^]\<^bsub>?rhgn (equator n)\<^esub> Brouwer_degree2 n f = ?hi_ee f u"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. u [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> Brouwer_degree2 n f = hom_induced (int n) (nsphere n) (equator n) (nsphere n) (equator n) f u
[PROOF STEP]
proof -
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. u [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> Brouwer_degree2 n f = hom_induced (int n) (nsphere n) (equator n) (nsphere n) (equator n) f u
[PROOF STEP]
have ne: "topspace (nsphere n) \<inter> equator n \<noteq> {}"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. topspace (nsphere n) \<inter> equator n \<noteq> {}
[PROOF STEP]
by (metis equ(1) nonempty_nsphere topspace_subtopology)
[PROOF STATE]
proof (state)
this:
topspace (nsphere n) \<inter> equator n \<noteq> {}

goal (1 subgoal):
 1. u [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> Brouwer_degree2 n f = hom_induced (int n) (nsphere n) (equator n) (nsphere n) (equator n) f u
[PROOF STEP]
have eq1: "hom_boundary n (nsphere n) (equator n) u
               = \<one>\<^bsub>reduced_homology_group (int n - 1) (subtopology (nsphere n) (equator n))\<^esub>"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. hom_boundary (int n) (nsphere n) (equator n) u = \<one>\<^bsub>reduced_homology_group (int n - 1) (subtopology (nsphere n) (equator n))\<^esub>
[PROOF STEP]
using one_reduced_homology_group u_def un_z uncarr up_z upcarr
[PROOF STATE]
proof (prove)
using this:
\<one>\<^bsub>reduced_homology_group ?p ?X\<^esub> = \<one>\<^bsub>homology_group ?p ?X\<^esub>
u \<equiv> up \<otimes>\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> inv\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> un
hom_boundary (int n) (nsphere n) (equator n) un = z
un \<in> carrier (relative_homology_group (int n) (nsphere n) (equator n))
hom_boundary (int n) (nsphere n) (equator n) up = z
up \<in> carrier (relative_homology_group (int n) (nsphere n) (equator n))

goal (1 subgoal):
 1. hom_boundary (int n) (nsphere n) (equator n) u = \<one>\<^bsub>reduced_homology_group (int n - 1) (subtopology (nsphere n) (equator n))\<^esub>
[PROOF STEP]
by force
[PROOF STATE]
proof (state)
this:
hom_boundary (int n) (nsphere n) (equator n) u = \<one>\<^bsub>reduced_homology_group (int n - 1) (subtopology (nsphere n) (equator n))\<^esub>

goal (1 subgoal):
 1. u [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> Brouwer_degree2 n f = hom_induced (int n) (nsphere n) (equator n) (nsphere n) (equator n) f u
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
hom_boundary (int n) (nsphere n) (equator n) u = \<one>\<^bsub>reduced_homology_group (int n - 1) (subtopology (nsphere n) (equator n))\<^esub>
[PROOF STEP]
have uhom: "u \<in> hom_induced n (nsphere n) {} (nsphere n) (equator n) id `
                         carrier (reduced_homology_group (int n) (nsphere n))"
[PROOF STATE]
proof (prove)
using this:
hom_boundary (int n) (nsphere n) (equator n) u = \<one>\<^bsub>reduced_homology_group (int n - 1) (subtopology (nsphere n) (equator n))\<^esub>

goal (1 subgoal):
 1. u \<in> hom_induced (int n) (nsphere n) {} (nsphere n) (equator n) id ` carrier (reduced_homology_group (int n) (nsphere n))
[PROOF STEP]
using homology_exactness_reduced_1 [OF ne, of n] eq1 ucarr
[PROOF STATE]
proof (prove)
using this:
hom_boundary (int n) (nsphere n) (equator n) u = \<one>\<^bsub>reduced_homology_group (int n - 1) (subtopology (nsphere n) (equator n))\<^esub>
exact_seq ([reduced_homology_group (int n - 1) (subtopology (nsphere n) (equator n)), relative_homology_group (int n) (nsphere n) (equator n), reduced_homology_group (int n) (nsphere n)], [hom_boundary (int n) (nsphere n) (equator n), hom_induced (int n) (nsphere n) {} (nsphere n) (equator n) id])
hom_boundary (int n) (nsphere n) (equator n) u = \<one>\<^bsub>reduced_homology_group (int n - 1) (subtopology (nsphere n) (equator n))\<^esub>
u \<in> carrier (relative_homology_group (int n) (nsphere n) (equator n))

goal (1 subgoal):
 1. u \<in> hom_induced (int n) (nsphere n) {} (nsphere n) (equator n) id ` carrier (reduced_homology_group (int n) (nsphere n))
[PROOF STEP]
by (auto simp: kernel_def)
[PROOF STATE]
proof (state)
this:
u \<in> hom_induced (int n) (nsphere n) {} (nsphere n) (equator n) id ` carrier (reduced_homology_group (int n) (nsphere n))

goal (1 subgoal):
 1. u [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> Brouwer_degree2 n f = hom_induced (int n) (nsphere n) (equator n) (nsphere n) (equator n) f u
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
u \<in> hom_induced (int n) (nsphere n) {} (nsphere n) (equator n) id ` carrier (reduced_homology_group (int n) (nsphere n))
[PROOF STEP]
obtain v where vcarr: "v \<in> carrier (reduced_homology_group (int n) (nsphere n))"
                  and ueq: "u = hom_induced n (nsphere n) {} (nsphere n) (equator n) id v"
[PROOF STATE]
proof (prove)
using this:
u \<in> hom_induced (int n) (nsphere n) {} (nsphere n) (equator n) id ` carrier (reduced_homology_group (int n) (nsphere n))

goal (1 subgoal):
 1. (\<And>v. \<lbrakk>v \<in> carrier (reduced_homology_group (int n) (nsphere n)); u = hom_induced (int n) (nsphere n) {} (nsphere n) (equator n) id v\<rbrakk> \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by blast
[PROOF STATE]
proof (state)
this:
v \<in> carrier (reduced_homology_group (int n) (nsphere n))
u = hom_induced (int n) (nsphere n) {} (nsphere n) (equator n) id v

goal (1 subgoal):
 1. u [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> Brouwer_degree2 n f = hom_induced (int n) (nsphere n) (equator n) (nsphere n) (equator n) f u
[PROOF STEP]
interpret GH_hi: group_hom "homology_group n (nsphere n)"
                        "?rhgn (equator n)"
                        "hom_induced n (nsphere n) {} (nsphere n) (equator n) id"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. group_hom (homology_group (int n) (nsphere n)) (relative_homology_group (int n) (nsphere n) (equator n)) (hom_induced (int n) (nsphere n) {} (nsphere n) (equator n) id)
[PROOF STEP]
by (simp add: group_hom_axioms_def group_hom_def hom_induced_hom)
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. u [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> Brouwer_degree2 n f = hom_induced (int n) (nsphere n) (equator n) (nsphere n) (equator n) f u
[PROOF STEP]
have poweq: "pow (homology_group n (nsphere n)) x i = pow (reduced_homology_group n (nsphere n)) x i"
      for x and i::int
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. x [^]\<^bsub>homology_group (int n) (nsphere n)\<^esub> i = x [^]\<^bsub>reduced_homology_group (int n) (nsphere n)\<^esub> i
[PROOF STEP]
by (simp add: False un_reduced_homology_group)
[PROOF STATE]
proof (state)
this:
?x1 [^]\<^bsub>homology_group (int n) (nsphere n)\<^esub> ?i1 = ?x1 [^]\<^bsub>reduced_homology_group (int n) (nsphere n)\<^esub> ?i1

goal (1 subgoal):
 1. u [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> Brouwer_degree2 n f = hom_induced (int n) (nsphere n) (equator n) (nsphere n) (equator n) f u
[PROOF STEP]
have vcarr': "v \<in> carrier (homology_group n (nsphere n))"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. v \<in> carrier (homology_group (int n) (nsphere n))
[PROOF STEP]
using carrier_reduced_homology_group_subset vcarr
[PROOF STATE]
proof (prove)
using this:
carrier (reduced_homology_group ?p ?X) \<subseteq> carrier (homology_group ?p ?X)
v \<in> carrier (reduced_homology_group (int n) (nsphere n))

goal (1 subgoal):
 1. v \<in> carrier (homology_group (int n) (nsphere n))
[PROOF STEP]
by blast
[PROOF STATE]
proof (state)
this:
v \<in> carrier (homology_group (int n) (nsphere n))

goal (1 subgoal):
 1. u [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> Brouwer_degree2 n f = hom_induced (int n) (nsphere n) (equator n) (nsphere n) (equator n) f u
[PROOF STEP]
have "u [^]\<^bsub>?rhgn (equator n)\<^esub> Brouwer_degree2 n f
          = hom_induced n (nsphere n) {} (nsphere n) (equator n) f v"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. u [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> Brouwer_degree2 n f = hom_induced (int n) (nsphere n) {} (nsphere n) (equator n) f v
[PROOF STEP]
using vcarr vcarr'
[PROOF STATE]
proof (prove)
using this:
v \<in> carrier (reduced_homology_group (int n) (nsphere n))
v \<in> carrier (homology_group (int n) (nsphere n))

goal (1 subgoal):
 1. u [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> Brouwer_degree2 n f = hom_induced (int n) (nsphere n) {} (nsphere n) (equator n) f v
[PROOF STEP]
by (simp add: ueq poweq hom_induced_compose' cmf flip: GH_hi.hom_int_pow Brouwer_degree2)
[PROOF STATE]
proof (state)
this:
u [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> Brouwer_degree2 n f = hom_induced (int n) (nsphere n) {} (nsphere n) (equator n) f v

goal (1 subgoal):
 1. u [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> Brouwer_degree2 n f = hom_induced (int n) (nsphere n) (equator n) (nsphere n) (equator n) f u
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
u [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> Brouwer_degree2 n f = hom_induced (int n) (nsphere n) {} (nsphere n) (equator n) f v

goal (1 subgoal):
 1. u [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> Brouwer_degree2 n f = hom_induced (int n) (nsphere n) (equator n) (nsphere n) (equator n) f u
[PROOF STEP]
have "\<dots> = hom_induced n (nsphere n) (topspace(nsphere n) \<inter> equator n) (nsphere n) (equator n) f
                     (hom_induced n (nsphere n) {} (nsphere n) (topspace(nsphere n) \<inter> equator n) id v)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. hom_induced (int n) (nsphere n) {} (nsphere n) (equator n) f v = hom_induced (int n) (nsphere n) (topspace (nsphere n) \<inter> equator n) (nsphere n) (equator n) f (hom_induced (int n) (nsphere n) {} (nsphere n) (topspace (nsphere n) \<inter> equator n) id v)
[PROOF STEP]
using fimeq
[PROOF STATE]
proof (prove)
using this:
f ` (topspace (nsphere n) \<inter> equator n) \<subseteq> topspace (nsphere n) \<inter> equator n

goal (1 subgoal):
 1. hom_induced (int n) (nsphere n) {} (nsphere n) (equator n) f v = hom_induced (int n) (nsphere n) (topspace (nsphere n) \<inter> equator n) (nsphere n) (equator n) f (hom_induced (int n) (nsphere n) {} (nsphere n) (topspace (nsphere n) \<inter> equator n) id v)
[PROOF STEP]
by (simp add: hom_induced_compose' cmf)
[PROOF STATE]
proof (state)
this:
hom_induced (int n) (nsphere n) {} (nsphere n) (equator n) f v = hom_induced (int n) (nsphere n) (topspace (nsphere n) \<inter> equator n) (nsphere n) (equator n) f (hom_induced (int n) (nsphere n) {} (nsphere n) (topspace (nsphere n) \<inter> equator n) id v)

goal (1 subgoal):
 1. u [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> Brouwer_degree2 n f = hom_induced (int n) (nsphere n) (equator n) (nsphere n) (equator n) f u
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
hom_induced (int n) (nsphere n) {} (nsphere n) (equator n) f v = hom_induced (int n) (nsphere n) (topspace (nsphere n) \<inter> equator n) (nsphere n) (equator n) f (hom_induced (int n) (nsphere n) {} (nsphere n) (topspace (nsphere n) \<inter> equator n) id v)

goal (1 subgoal):
 1. u [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> Brouwer_degree2 n f = hom_induced (int n) (nsphere n) (equator n) (nsphere n) (equator n) f u
[PROOF STEP]
have "\<dots> = ?hi_ee f u"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. hom_induced (int n) (nsphere n) (topspace (nsphere n) \<inter> equator n) (nsphere n) (equator n) f (hom_induced (int n) (nsphere n) {} (nsphere n) (topspace (nsphere n) \<inter> equator n) id v) = hom_induced (int n) (nsphere n) (equator n) (nsphere n) (equator n) f u
[PROOF STEP]
by (metis hom_induced inf.left_idem ueq)
[PROOF STATE]
proof (state)
this:
hom_induced (int n) (nsphere n) (topspace (nsphere n) \<inter> equator n) (nsphere n) (equator n) f (hom_induced (int n) (nsphere n) {} (nsphere n) (topspace (nsphere n) \<inter> equator n) id v) = hom_induced (int n) (nsphere n) (equator n) (nsphere n) (equator n) f u

goal (1 subgoal):
 1. u [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> Brouwer_degree2 n f = hom_induced (int n) (nsphere n) (equator n) (nsphere n) (equator n) f u
[PROOF STEP]
finally
[PROOF STATE]
proof (chain)
picking this:
u [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> Brouwer_degree2 n f = hom_induced (int n) (nsphere n) (equator n) (nsphere n) (equator n) f u
[PROOF STEP]
show ?thesis
[PROOF STATE]
proof (prove)
using this:
u [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> Brouwer_degree2 n f = hom_induced (int n) (nsphere n) (equator n) (nsphere n) (equator n) f u

goal (1 subgoal):
 1. u [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> Brouwer_degree2 n f = hom_induced (int n) (nsphere n) (equator n) (nsphere n) (equator n) f u
[PROOF STEP]
.
[PROOF STATE]
proof (state)
this:
u [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> Brouwer_degree2 n f = hom_induced (int n) (nsphere n) (equator n) (nsphere n) (equator n) f u

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
u [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> Brouwer_degree2 n f = hom_induced (int n) (nsphere n) (equator n) (nsphere n) (equator n) f u

goal (2 subgoals):
 1. n = 0 \<Longrightarrow> even (Brouwer_degree2 n f - Brouwer_degree2 (n - Suc 0) f)
 2. n \<noteq> 0 \<Longrightarrow> even (Brouwer_degree2 n f - Brouwer_degree2 (n - Suc 0) f)
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
u [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> Brouwer_degree2 n f = hom_induced (int n) (nsphere n) (equator n) (nsphere n) (equator n) f u

goal (2 subgoals):
 1. n = 0 \<Longrightarrow> even (Brouwer_degree2 n f - Brouwer_degree2 (n - Suc 0) f)
 2. n \<noteq> 0 \<Longrightarrow> even (Brouwer_degree2 n f - Brouwer_degree2 (n - Suc 0) f)
[PROOF STEP]
interpret gh_een: group_hom "?rhgn (equator n)" "?rhgn (equator n)" "?hi_ee neg"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. group_hom (relative_homology_group (int n) (nsphere n) (equator n)) (relative_homology_group (int n) (nsphere n) (equator n)) (hom_induced (int n) (nsphere n) (equator n) (nsphere n) (equator n) neg)
[PROOF STEP]
by (simp add: group_hom_axioms_def group_hom_def hom_induced_hom)
[PROOF STATE]
proof (state)
goal (2 subgoals):
 1. n = 0 \<Longrightarrow> even (Brouwer_degree2 n f - Brouwer_degree2 (n - Suc 0) f)
 2. n \<noteq> 0 \<Longrightarrow> even (Brouwer_degree2 n f - Brouwer_degree2 (n - Suc 0) f)
[PROOF STEP]
have hi_up_eq_un: "?hi_ee neg up = un [^]\<^bsub>?rhgn (equator n)\<^esub> Brouwer_degree2 (n - Suc 0) neg"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. hom_induced (int n) (nsphere n) (equator n) (nsphere n) (equator n) neg up = un [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> Brouwer_degree2 (n - Suc 0) neg
[PROOF STEP]
proof -
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. hom_induced (int n) (nsphere n) (equator n) (nsphere n) (equator n) neg up = un [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> Brouwer_degree2 (n - Suc 0) neg
[PROOF STEP]
have "?hi_ee neg (hom_induced n (lsphere n) (equator n) (nsphere n) (equator n) id zp)
         = hom_induced n (lsphere n) (equator n) (nsphere n) (equator n) (neg \<circ> id) zp"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. hom_induced (int n) (nsphere n) (equator n) (nsphere n) (equator n) neg (hom_induced (int n) (lsphere n) (equator n) (nsphere n) (equator n) id zp) = hom_induced (int n) (lsphere n) (equator n) (nsphere n) (equator n) (neg \<circ> id) zp
[PROOF STEP]
by (intro hom_induced_compose') (auto simp: lsphere_def equator_def cm_neg)
[PROOF STATE]
proof (state)
this:
hom_induced (int n) (nsphere n) (equator n) (nsphere n) (equator n) neg (hom_induced (int n) (lsphere n) (equator n) (nsphere n) (equator n) id zp) = hom_induced (int n) (lsphere n) (equator n) (nsphere n) (equator n) (neg \<circ> id) zp

goal (1 subgoal):
 1. hom_induced (int n) (nsphere n) (equator n) (nsphere n) (equator n) neg up = un [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> Brouwer_degree2 (n - Suc 0) neg
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
hom_induced (int n) (nsphere n) (equator n) (nsphere n) (equator n) neg (hom_induced (int n) (lsphere n) (equator n) (nsphere n) (equator n) id zp) = hom_induced (int n) (lsphere n) (equator n) (nsphere n) (equator n) (neg \<circ> id) zp

goal (1 subgoal):
 1. hom_induced (int n) (nsphere n) (equator n) (nsphere n) (equator n) neg up = un [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> Brouwer_degree2 (n - Suc 0) neg
[PROOF STEP]
have "\<dots> = hom_induced n (usphere n) (equator n) (nsphere n) (equator n) id
            (hom_induced n (lsphere n) (equator n) (usphere n) (equator n) neg zp)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. hom_induced (int n) (lsphere n) (equator n) (nsphere n) (equator n) (neg \<circ> id) zp = hom_induced (int n) (usphere n) (equator n) (nsphere n) (equator n) id (hom_induced (int n) (lsphere n) (equator n) (usphere n) (equator n) neg zp)
[PROOF STEP]
by (subst hom_induced_compose' [OF cm_neg_lu]) (auto simp: usphere_def equator_def)
[PROOF STATE]
proof (state)
this:
hom_induced (int n) (lsphere n) (equator n) (nsphere n) (equator n) (neg \<circ> id) zp = hom_induced (int n) (usphere n) (equator n) (nsphere n) (equator n) id (hom_induced (int n) (lsphere n) (equator n) (usphere n) (equator n) neg zp)

goal (1 subgoal):
 1. hom_induced (int n) (nsphere n) (equator n) (nsphere n) (equator n) neg up = un [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> Brouwer_degree2 (n - Suc 0) neg
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
hom_induced (int n) (lsphere n) (equator n) (nsphere n) (equator n) (neg \<circ> id) zp = hom_induced (int n) (usphere n) (equator n) (nsphere n) (equator n) id (hom_induced (int n) (lsphere n) (equator n) (usphere n) (equator n) neg zp)

goal (1 subgoal):
 1. hom_induced (int n) (nsphere n) (equator n) (nsphere n) (equator n) neg up = un [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> Brouwer_degree2 (n - Suc 0) neg
[PROOF STEP]
have "hom_induced n (lsphere n) (equator n) (usphere n) (equator n) neg zp
             = zn [^]\<^bsub>relative_homology_group n (usphere n) (equator n)\<^esub> Brouwer_degree2 (n - Suc 0) neg"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. hom_induced (int n) (lsphere n) (equator n) (usphere n) (equator n) neg zp = zn [^]\<^bsub>relative_homology_group (int n) (usphere n) (equator n)\<^esub> Brouwer_degree2 (n - Suc 0) neg
[PROOF STEP]
proof -
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. hom_induced (int n) (lsphere n) (equator n) (usphere n) (equator n) neg zp = zn [^]\<^bsub>relative_homology_group (int n) (usphere n) (equator n)\<^esub> Brouwer_degree2 (n - Suc 0) neg
[PROOF STEP]
let ?hb = "hom_boundary n (usphere n) (equator n)"
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. hom_induced (int n) (lsphere n) (equator n) (usphere n) (equator n) neg zp = zn [^]\<^bsub>relative_homology_group (int n) (usphere n) (equator n)\<^esub> Brouwer_degree2 (n - Suc 0) neg
[PROOF STEP]
have eq: "subtopology (nsphere n) {x. x n \<ge> 0} = usphere n \<and> {x. x n = 0} = equator n"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. subtopology (nsphere n) {x. 0 \<le> x n} = usphere n \<and> {x. x n = 0} = equator n
[PROOF STEP]
by (auto simp: usphere_def upper_def equator_def)
[PROOF STATE]
proof (state)
this:
subtopology (nsphere n) {x. 0 \<le> x n} = usphere n \<and> {x. x n = 0} = equator n

goal (1 subgoal):
 1. hom_induced (int n) (lsphere n) (equator n) (usphere n) (equator n) neg zp = zn [^]\<^bsub>relative_homology_group (int n) (usphere n) (equator n)\<^esub> Brouwer_degree2 (n - Suc 0) neg
[PROOF STEP]
with hb_iso
[PROOF STATE]
proof (chain)
picking this:
hom_boundary (int n) (subtopology (nsphere n) {x. 0 \<le> x n}) {x. x n = 0} \<in> Group.iso (relative_homology_group (int n) (subtopology (nsphere n) {x. 0 \<le> x n}) {x. x n = 0}) (reduced_homology_group (int n - 1) (nsphere (n - Suc 0)))
subtopology (nsphere n) {x. 0 \<le> x n} = usphere n \<and> {x. x n = 0} = equator n
[PROOF STEP]
have inj: "inj_on (?hb) (carrier (relative_homology_group n (usphere n) (equator n)))"
[PROOF STATE]
proof (prove)
using this:
hom_boundary (int n) (subtopology (nsphere n) {x. 0 \<le> x n}) {x. x n = 0} \<in> Group.iso (relative_homology_group (int n) (subtopology (nsphere n) {x. 0 \<le> x n}) {x. x n = 0}) (reduced_homology_group (int n - 1) (nsphere (n - Suc 0)))
subtopology (nsphere n) {x. 0 \<le> x n} = usphere n \<and> {x. x n = 0} = equator n

goal (1 subgoal):
 1. inj_on (hom_boundary (int n) (usphere n) (equator n)) (carrier (relative_homology_group (int n) (usphere n) (equator n)))
[PROOF STEP]
by (simp add: iso_iff)
[PROOF STATE]
proof (state)
this:
inj_on (hom_boundary (int n) (usphere n) (equator n)) (carrier (relative_homology_group (int n) (usphere n) (equator n)))

goal (1 subgoal):
 1. hom_induced (int n) (lsphere n) (equator n) (usphere n) (equator n) neg zp = zn [^]\<^bsub>relative_homology_group (int n) (usphere n) (equator n)\<^esub> Brouwer_degree2 (n - Suc 0) neg
[PROOF STEP]
interpret hb_hom: group_hom "relative_homology_group n (usphere n) (equator n)"
                                  "reduced_homology_group (int n - 1) (nsphere (n - Suc 0))"
                                  "?hb"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. group_hom (relative_homology_group (int n) (usphere n) (equator n)) (reduced_homology_group (int n - 1) (nsphere (n - Suc 0))) (hom_boundary (int n) (usphere n) (equator n))
[PROOF STEP]
using hb_iso iso_iff eq group_hom_axioms_def group_hom_def
[PROOF STATE]
proof (prove)
using this:
hom_boundary (int n) (subtopology (nsphere n) {x. 0 \<le> x n}) {x. x n = 0} \<in> Group.iso (relative_homology_group (int n) (subtopology (nsphere n) {x. 0 \<le> x n}) {x. x n = 0}) (reduced_homology_group (int n - 1) (nsphere (n - Suc 0)))
(?h \<in> Group.iso ?G ?H) = (?h \<in> hom ?G ?H \<and> ?h ` carrier ?G = carrier ?H \<and> inj_on ?h (carrier ?G))
subtopology (nsphere n) {x. 0 \<le> x n} = usphere n \<and> {x. x n = 0} = equator n
group_hom_axioms ?G ?H ?h \<equiv> ?h \<in> hom ?G ?H
group_hom ?G ?H ?h \<equiv> Group.group ?G \<and> Group.group ?H \<and> group_hom_axioms ?G ?H ?h

goal (1 subgoal):
 1. group_hom (relative_homology_group (int n) (usphere n) (equator n)) (reduced_homology_group (int n - 1) (nsphere (n - Suc 0))) (hom_boundary (int n) (usphere n) (equator n))
[PROOF STEP]
by fastforce
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. hom_induced (int n) (lsphere n) (equator n) (usphere n) (equator n) neg zp = zn [^]\<^bsub>relative_homology_group (int n) (usphere n) (equator n)\<^esub> Brouwer_degree2 (n - Suc 0) neg
[PROOF STEP]
show ?thesis
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. hom_induced (int n) (lsphere n) (equator n) (usphere n) (equator n) neg zp = zn [^]\<^bsub>relative_homology_group (int n) (usphere n) (equator n)\<^esub> Brouwer_degree2 (n - Suc 0) neg
[PROOF STEP]
proof (rule inj_onD [OF inj])
[PROOF STATE]
proof (state)
goal (3 subgoals):
 1. hom_boundary (int n) (usphere n) (equator n) (hom_induced (int n) (lsphere n) (equator n) (usphere n) (equator n) neg zp) = hom_boundary (int n) (usphere n) (equator n) (zn [^]\<^bsub>relative_homology_group (int n) (usphere n) (equator n)\<^esub> Brouwer_degree2 (n - Suc 0) neg)
 2. hom_induced (int n) (lsphere n) (equator n) (usphere n) (equator n) neg zp \<in> carrier (relative_homology_group (int n) (usphere n) (equator n))
 3. zn [^]\<^bsub>relative_homology_group (int n) (usphere n) (equator n)\<^esub> Brouwer_degree2 (n - Suc 0) neg \<in> carrier (relative_homology_group (int n) (usphere n) (equator n))
[PROOF STEP]
have *: "hom_induced (int n - 1) (nsphere (n - Suc 0)) {} (nsphere (n - Suc 0)) {} neg z
                 = z [^]\<^bsub>homology_group (int n - 1) (nsphere (n - Suc 0))\<^esub> Brouwer_degree2 (n - Suc 0) neg"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. hom_induced (int n - 1) (nsphere (n - Suc 0)) {} (nsphere (n - Suc 0)) {} neg z = z [^]\<^bsub>homology_group (int n - 1) (nsphere (n - Suc 0))\<^esub> Brouwer_degree2 (n - Suc 0) neg
[PROOF STEP]
using Brouwer_degree2 [of z "n - Suc 0" neg] False zcarr
[PROOF STATE]
proof (prove)
using this:
z \<in> carrier (reduced_homology_group (int (n - Suc 0)) (nsphere (n - Suc 0))) \<Longrightarrow> hom_induced (int (n - Suc 0)) (nsphere (n - Suc 0)) {} (nsphere (n - Suc 0)) {} neg z = z [^]\<^bsub>reduced_homology_group (int (n - Suc 0)) (nsphere (n - Suc 0))\<^esub> Brouwer_degree2 (n - Suc 0) neg
n \<noteq> 0
z \<in> carrier (reduced_homology_group (int n - 1) (nsphere (n - Suc 0)))

goal (1 subgoal):
 1. hom_induced (int n - 1) (nsphere (n - Suc 0)) {} (nsphere (n - Suc 0)) {} neg z = z [^]\<^bsub>homology_group (int n - 1) (nsphere (n - Suc 0))\<^esub> Brouwer_degree2 (n - Suc 0) neg
[PROOF STEP]
by (simp add: int_ops group.int_pow_subgroup_generated reduced_homology_group_def)
[PROOF STATE]
proof (state)
this:
hom_induced (int n - 1) (nsphere (n - Suc 0)) {} (nsphere (n - Suc 0)) {} neg z = z [^]\<^bsub>homology_group (int n - 1) (nsphere (n - Suc 0))\<^esub> Brouwer_degree2 (n - Suc 0) neg

goal (3 subgoals):
 1. hom_boundary (int n) (usphere n) (equator n) (hom_induced (int n) (lsphere n) (equator n) (usphere n) (equator n) neg zp) = hom_boundary (int n) (usphere n) (equator n) (zn [^]\<^bsub>relative_homology_group (int n) (usphere n) (equator n)\<^esub> Brouwer_degree2 (n - Suc 0) neg)
 2. hom_induced (int n) (lsphere n) (equator n) (usphere n) (equator n) neg zp \<in> carrier (relative_homology_group (int n) (usphere n) (equator n))
 3. zn [^]\<^bsub>relative_homology_group (int n) (usphere n) (equator n)\<^esub> Brouwer_degree2 (n - Suc 0) neg \<in> carrier (relative_homology_group (int n) (usphere n) (equator n))
[PROOF STEP]
have "?hb \<circ>
              hom_induced n (lsphere n) (equator n) (usphere n) (equator n) neg
            = hom_induced (int n - 1) (nsphere (n - Suc 0)) {} (nsphere (n - Suc 0)) {} neg \<circ>
              hom_boundary n (lsphere n) (equator n)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. hom_boundary (int n) (usphere n) (equator n) \<circ> hom_induced (int n) (lsphere n) (equator n) (usphere n) (equator n) neg = hom_induced (int n - 1) (nsphere (n - Suc 0)) {} (nsphere (n - Suc 0)) {} neg \<circ> hom_boundary (int n) (lsphere n) (equator n)
[PROOF STEP]
apply (subst naturality_hom_induced [OF cm_neg_lu])
[PROOF STATE]
proof (prove)
goal (2 subgoals):
 1. neg ` equator n \<subseteq> equator n
 2. hom_induced (int n - 1) (subtopology (lsphere n) (equator n)) {} (subtopology (usphere n) (equator n)) {} neg \<circ> hom_boundary (int n) (lsphere n) (equator n) = hom_induced (int n - 1) (nsphere (n - Suc 0)) {} (nsphere (n - Suc 0)) {} neg \<circ> hom_boundary (int n) (lsphere n) (equator n)
[PROOF STEP]
apply (force simp: equator_def neg_def)
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. hom_induced (int n - 1) (subtopology (lsphere n) (equator n)) {} (subtopology (usphere n) (equator n)) {} neg \<circ> hom_boundary (int n) (lsphere n) (equator n) = hom_induced (int n - 1) (nsphere (n - Suc 0)) {} (nsphere (n - Suc 0)) {} neg \<circ> hom_boundary (int n) (lsphere n) (equator n)
[PROOF STEP]
by (simp add: equ)
[PROOF STATE]
proof (state)
this:
hom_boundary (int n) (usphere n) (equator n) \<circ> hom_induced (int n) (lsphere n) (equator n) (usphere n) (equator n) neg = hom_induced (int n - 1) (nsphere (n - Suc 0)) {} (nsphere (n - Suc 0)) {} neg \<circ> hom_boundary (int n) (lsphere n) (equator n)

goal (3 subgoals):
 1. hom_boundary (int n) (usphere n) (equator n) (hom_induced (int n) (lsphere n) (equator n) (usphere n) (equator n) neg zp) = hom_boundary (int n) (usphere n) (equator n) (zn [^]\<^bsub>relative_homology_group (int n) (usphere n) (equator n)\<^esub> Brouwer_degree2 (n - Suc 0) neg)
 2. hom_induced (int n) (lsphere n) (equator n) (usphere n) (equator n) neg zp \<in> carrier (relative_homology_group (int n) (usphere n) (equator n))
 3. zn [^]\<^bsub>relative_homology_group (int n) (usphere n) (equator n)\<^esub> Brouwer_degree2 (n - Suc 0) neg \<in> carrier (relative_homology_group (int n) (usphere n) (equator n))
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
hom_boundary (int n) (usphere n) (equator n) \<circ> hom_induced (int n) (lsphere n) (equator n) (usphere n) (equator n) neg = hom_induced (int n - 1) (nsphere (n - Suc 0)) {} (nsphere (n - Suc 0)) {} neg \<circ> hom_boundary (int n) (lsphere n) (equator n)
[PROOF STEP]
have "?hb
                    (hom_induced n (lsphere n) (equator n) (usphere n) (equator n) neg zp)
            = (z [^]\<^bsub>homology_group (int n - 1) (nsphere (n - Suc 0))\<^esub> Brouwer_degree2 (n - Suc 0) neg)"
[PROOF STATE]
proof (prove)
using this:
hom_boundary (int n) (usphere n) (equator n) \<circ> hom_induced (int n) (lsphere n) (equator n) (usphere n) (equator n) neg = hom_induced (int n - 1) (nsphere (n - Suc 0)) {} (nsphere (n - Suc 0)) {} neg \<circ> hom_boundary (int n) (lsphere n) (equator n)

goal (1 subgoal):
 1. hom_boundary (int n) (usphere n) (equator n) (hom_induced (int n) (lsphere n) (equator n) (usphere n) (equator n) neg zp) = z [^]\<^bsub>homology_group (int n - 1) (nsphere (n - Suc 0))\<^esub> Brouwer_degree2 (n - Suc 0) neg
[PROOF STEP]
by (metis "*" comp_apply zp_z)
[PROOF STATE]
proof (state)
this:
hom_boundary (int n) (usphere n) (equator n) (hom_induced (int n) (lsphere n) (equator n) (usphere n) (equator n) neg zp) = z [^]\<^bsub>homology_group (int n - 1) (nsphere (n - Suc 0))\<^esub> Brouwer_degree2 (n - Suc 0) neg

goal (3 subgoals):
 1. hom_boundary (int n) (usphere n) (equator n) (hom_induced (int n) (lsphere n) (equator n) (usphere n) (equator n) neg zp) = hom_boundary (int n) (usphere n) (equator n) (zn [^]\<^bsub>relative_homology_group (int n) (usphere n) (equator n)\<^esub> Brouwer_degree2 (n - Suc 0) neg)
 2. hom_induced (int n) (lsphere n) (equator n) (usphere n) (equator n) neg zp \<in> carrier (relative_homology_group (int n) (usphere n) (equator n))
 3. zn [^]\<^bsub>relative_homology_group (int n) (usphere n) (equator n)\<^esub> Brouwer_degree2 (n - Suc 0) neg \<in> carrier (relative_homology_group (int n) (usphere n) (equator n))
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
hom_boundary (int n) (usphere n) (equator n) (hom_induced (int n) (lsphere n) (equator n) (usphere n) (equator n) neg zp) = z [^]\<^bsub>homology_group (int n - 1) (nsphere (n - Suc 0))\<^esub> Brouwer_degree2 (n - Suc 0) neg

goal (3 subgoals):
 1. hom_boundary (int n) (usphere n) (equator n) (hom_induced (int n) (lsphere n) (equator n) (usphere n) (equator n) neg zp) = hom_boundary (int n) (usphere n) (equator n) (zn [^]\<^bsub>relative_homology_group (int n) (usphere n) (equator n)\<^esub> Brouwer_degree2 (n - Suc 0) neg)
 2. hom_induced (int n) (lsphere n) (equator n) (usphere n) (equator n) neg zp \<in> carrier (relative_homology_group (int n) (usphere n) (equator n))
 3. zn [^]\<^bsub>relative_homology_group (int n) (usphere n) (equator n)\<^esub> Brouwer_degree2 (n - Suc 0) neg \<in> carrier (relative_homology_group (int n) (usphere n) (equator n))
[PROOF STEP]
have "\<dots> = ?hb (zn [^]\<^bsub>relative_homology_group n (usphere n) (equator n)\<^esub>
          Brouwer_degree2 (n - Suc 0) neg)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. z [^]\<^bsub>homology_group (int n - 1) (nsphere (n - Suc 0))\<^esub> Brouwer_degree2 (n - Suc 0) neg = hom_boundary (int n) (usphere n) (equator n) (zn [^]\<^bsub>relative_homology_group (int n) (usphere n) (equator n)\<^esub> Brouwer_degree2 (n - Suc 0) neg)
[PROOF STEP]
by (metis group.int_pow_subgroup_generated group_relative_homology_group hb_hom.hom_int_pow reduced_homology_group_def zcarr zn_z zncarr)
[PROOF STATE]
proof (state)
this:
z [^]\<^bsub>homology_group (int n - 1) (nsphere (n - Suc 0))\<^esub> Brouwer_degree2 (n - Suc 0) neg = hom_boundary (int n) (usphere n) (equator n) (zn [^]\<^bsub>relative_homology_group (int n) (usphere n) (equator n)\<^esub> Brouwer_degree2 (n - Suc 0) neg)

goal (3 subgoals):
 1. hom_boundary (int n) (usphere n) (equator n) (hom_induced (int n) (lsphere n) (equator n) (usphere n) (equator n) neg zp) = hom_boundary (int n) (usphere n) (equator n) (zn [^]\<^bsub>relative_homology_group (int n) (usphere n) (equator n)\<^esub> Brouwer_degree2 (n - Suc 0) neg)
 2. hom_induced (int n) (lsphere n) (equator n) (usphere n) (equator n) neg zp \<in> carrier (relative_homology_group (int n) (usphere n) (equator n))
 3. zn [^]\<^bsub>relative_homology_group (int n) (usphere n) (equator n)\<^esub> Brouwer_degree2 (n - Suc 0) neg \<in> carrier (relative_homology_group (int n) (usphere n) (equator n))
[PROOF STEP]
finally
[PROOF STATE]
proof (chain)
picking this:
hom_boundary (int n) (usphere n) (equator n) (hom_induced (int n) (lsphere n) (equator n) (usphere n) (equator n) neg zp) = hom_boundary (int n) (usphere n) (equator n) (zn [^]\<^bsub>relative_homology_group (int n) (usphere n) (equator n)\<^esub> Brouwer_degree2 (n - Suc 0) neg)
[PROOF STEP]
show "?hb (hom_induced n (lsphere n) (equator n) (usphere n) (equator n) neg zp) =
        ?hb (zn [^]\<^bsub>relative_homology_group n (usphere n) (equator n)\<^esub>
          Brouwer_degree2 (n - Suc 0) neg)"
[PROOF STATE]
proof (prove)
using this:
hom_boundary (int n) (usphere n) (equator n) (hom_induced (int n) (lsphere n) (equator n) (usphere n) (equator n) neg zp) = hom_boundary (int n) (usphere n) (equator n) (zn [^]\<^bsub>relative_homology_group (int n) (usphere n) (equator n)\<^esub> Brouwer_degree2 (n - Suc 0) neg)

goal (1 subgoal):
 1. hom_boundary (int n) (usphere n) (equator n) (hom_induced (int n) (lsphere n) (equator n) (usphere n) (equator n) neg zp) = hom_boundary (int n) (usphere n) (equator n) (zn [^]\<^bsub>relative_homology_group (int n) (usphere n) (equator n)\<^esub> Brouwer_degree2 (n - Suc 0) neg)
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
hom_boundary (int n) (usphere n) (equator n) (hom_induced (int n) (lsphere n) (equator n) (usphere n) (equator n) neg zp) = hom_boundary (int n) (usphere n) (equator n) (zn [^]\<^bsub>relative_homology_group (int n) (usphere n) (equator n)\<^esub> Brouwer_degree2 (n - Suc 0) neg)

goal (2 subgoals):
 1. hom_induced (int n) (lsphere n) (equator n) (usphere n) (equator n) neg zp \<in> carrier (relative_homology_group (int n) (usphere n) (equator n))
 2. zn [^]\<^bsub>relative_homology_group (int n) (usphere n) (equator n)\<^esub> Brouwer_degree2 (n - Suc 0) neg \<in> carrier (relative_homology_group (int n) (usphere n) (equator n))
[PROOF STEP]
qed (auto simp: hom_induced_carrier group.int_pow_closed zncarr)
[PROOF STATE]
proof (state)
this:
hom_induced (int n) (lsphere n) (equator n) (usphere n) (equator n) neg zp = zn [^]\<^bsub>relative_homology_group (int n) (usphere n) (equator n)\<^esub> Brouwer_degree2 (n - Suc 0) neg

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
hom_induced (int n) (lsphere n) (equator n) (usphere n) (equator n) neg zp = zn [^]\<^bsub>relative_homology_group (int n) (usphere n) (equator n)\<^esub> Brouwer_degree2 (n - Suc 0) neg

goal (1 subgoal):
 1. hom_induced (int n) (nsphere n) (equator n) (nsphere n) (equator n) neg up = un [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> Brouwer_degree2 (n - Suc 0) neg
[PROOF STEP]
finally
[PROOF STATE]
proof (chain)
picking this:
hom_induced (int n) (nsphere n) (equator n) (nsphere n) (equator n) neg (hom_induced (int n) (lsphere n) (equator n) (nsphere n) (equator n) id zp) = hom_induced (int n) (usphere n) (equator n) (nsphere n) (equator n) id (zn [^]\<^bsub>relative_homology_group (int n) (usphere n) (equator n)\<^esub> Brouwer_degree2 (n - Suc 0) neg)
[PROOF STEP]
show ?thesis
[PROOF STATE]
proof (prove)
using this:
hom_induced (int n) (nsphere n) (equator n) (nsphere n) (equator n) neg (hom_induced (int n) (lsphere n) (equator n) (nsphere n) (equator n) id zp) = hom_induced (int n) (usphere n) (equator n) (nsphere n) (equator n) id (zn [^]\<^bsub>relative_homology_group (int n) (usphere n) (equator n)\<^esub> Brouwer_degree2 (n - Suc 0) neg)

goal (1 subgoal):
 1. hom_induced (int n) (nsphere n) (equator n) (nsphere n) (equator n) neg up = un [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> Brouwer_degree2 (n - Suc 0) neg
[PROOF STEP]
by (metis (no_types, lifting) group_hom.hom_int_pow group_hom_axioms_def group_hom_def group_relative_homology_group hom_induced local.up_def un_def zncarr)
[PROOF STATE]
proof (state)
this:
hom_induced (int n) (nsphere n) (equator n) (nsphere n) (equator n) neg up = un [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> Brouwer_degree2 (n - Suc 0) neg

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
hom_induced (int n) (nsphere n) (equator n) (nsphere n) (equator n) neg up = un [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> Brouwer_degree2 (n - Suc 0) neg

goal (2 subgoals):
 1. n = 0 \<Longrightarrow> even (Brouwer_degree2 n f - Brouwer_degree2 (n - Suc 0) f)
 2. n \<noteq> 0 \<Longrightarrow> even (Brouwer_degree2 n f - Brouwer_degree2 (n - Suc 0) f)
[PROOF STEP]
have "continuous_map (nsphere (n - Suc 0)) (nsphere (n - Suc 0)) neg"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. continuous_map (nsphere (n - Suc 0)) (nsphere (n - Suc 0)) neg
[PROOF STEP]
using cm_neg
[PROOF STATE]
proof (prove)
using this:
continuous_map (nsphere ?m1) (nsphere ?m1) neg

goal (1 subgoal):
 1. continuous_map (nsphere (n - Suc 0)) (nsphere (n - Suc 0)) neg
[PROOF STEP]
by blast
[PROOF STATE]
proof (state)
this:
continuous_map (nsphere (n - Suc 0)) (nsphere (n - Suc 0)) neg

goal (2 subgoals):
 1. n = 0 \<Longrightarrow> even (Brouwer_degree2 n f - Brouwer_degree2 (n - Suc 0) f)
 2. n \<noteq> 0 \<Longrightarrow> even (Brouwer_degree2 n f - Brouwer_degree2 (n - Suc 0) f)
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
continuous_map (nsphere (n - Suc 0)) (nsphere (n - Suc 0)) neg
[PROOF STEP]
have "homeomorphic_map (nsphere (n - Suc 0)) (nsphere (n - Suc 0)) neg"
[PROOF STATE]
proof (prove)
using this:
continuous_map (nsphere (n - Suc 0)) (nsphere (n - Suc 0)) neg

goal (1 subgoal):
 1. homeomorphic_map (nsphere (n - Suc 0)) (nsphere (n - Suc 0)) neg
[PROOF STEP]
apply (auto simp: homeomorphic_map_maps homeomorphic_maps_def)
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. continuous_map (nsphere (n - Suc 0)) (nsphere (n - Suc 0)) neg \<Longrightarrow> \<exists>g. continuous_map (nsphere (n - Suc 0)) (nsphere (n - Suc 0)) g \<and> (\<forall>x\<in>topspace (nsphere (n - Suc 0)). g (neg x) = x) \<and> (\<forall>y\<in>topspace (nsphere (n - Suc 0)). neg (g y) = y)
[PROOF STEP]
apply (rule_tac x=neg in exI, auto)
[PROOF STATE]
proof (prove)
goal:
No subgoals!
[PROOF STEP]
done
[PROOF STATE]
proof (state)
this:
homeomorphic_map (nsphere (n - Suc 0)) (nsphere (n - Suc 0)) neg

goal (2 subgoals):
 1. n = 0 \<Longrightarrow> even (Brouwer_degree2 n f - Brouwer_degree2 (n - Suc 0) f)
 2. n \<noteq> 0 \<Longrightarrow> even (Brouwer_degree2 n f - Brouwer_degree2 (n - Suc 0) f)
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
homeomorphic_map (nsphere (n - Suc 0)) (nsphere (n - Suc 0)) neg
[PROOF STEP]
have Brouwer_degree2_21: "Brouwer_degree2 (n - Suc 0) neg ^ 2 = 1"
[PROOF STATE]
proof (prove)
using this:
homeomorphic_map (nsphere (n - Suc 0)) (nsphere (n - Suc 0)) neg

goal (1 subgoal):
 1. (Brouwer_degree2 (n - Suc 0) neg)\<^sup>2 = 1
[PROOF STEP]
using Brouwer_degree2_homeomorphic_map power2_eq_1_iff
[PROOF STATE]
proof (prove)
using this:
homeomorphic_map (nsphere (n - Suc 0)) (nsphere (n - Suc 0)) neg
homeomorphic_map (nsphere ?p) (nsphere ?p) ?f \<Longrightarrow> \<bar>Brouwer_degree2 ?p ?f\<bar> = 1
(?a\<^sup>2 = (1::?'a)) = (?a = (1::?'a) \<or> ?a = - (1::?'a))

goal (1 subgoal):
 1. (Brouwer_degree2 (n - Suc 0) neg)\<^sup>2 = 1
[PROOF STEP]
by force
[PROOF STATE]
proof (state)
this:
(Brouwer_degree2 (n - Suc 0) neg)\<^sup>2 = 1

goal (2 subgoals):
 1. n = 0 \<Longrightarrow> even (Brouwer_degree2 n f - Brouwer_degree2 (n - Suc 0) f)
 2. n \<noteq> 0 \<Longrightarrow> even (Brouwer_degree2 n f - Brouwer_degree2 (n - Suc 0) f)
[PROOF STEP]
have hi_un_eq_up: "?hi_ee neg un = up [^]\<^bsub>?rhgn (equator n)\<^esub> Brouwer_degree2 (n - Suc 0) neg" (is "?f un = ?y")
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. hom_induced (int n) (nsphere n) (equator n) (nsphere n) (equator n) neg un = up [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> Brouwer_degree2 (n - Suc 0) neg
[PROOF STEP]
proof -
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. hom_induced (int n) (nsphere n) (equator n) (nsphere n) (equator n) neg un = up [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> Brouwer_degree2 (n - Suc 0) neg
[PROOF STEP]
have [simp]: "neg \<circ> neg = id"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. neg \<circ> neg = id
[PROOF STEP]
by force
[PROOF STATE]
proof (state)
this:
neg \<circ> neg = id

goal (1 subgoal):
 1. hom_induced (int n) (nsphere n) (equator n) (nsphere n) (equator n) neg un = up [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> Brouwer_degree2 (n - Suc 0) neg
[PROOF STEP]
have "?f (?f ?y) = ?y"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. hom_induced (int n) (nsphere n) (equator n) (nsphere n) (equator n) neg (hom_induced (int n) (nsphere n) (equator n) (nsphere n) (equator n) neg (up [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> Brouwer_degree2 (n - Suc 0) neg)) = up [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> Brouwer_degree2 (n - Suc 0) neg
[PROOF STEP]
apply (subst hom_induced_compose' [OF cm_neg _ cm_neg])
[PROOF STATE]
proof (prove)
goal (2 subgoals):
 1. neg ` equator n \<subseteq> equator n
 2. hom_induced (int n) (nsphere n) (equator n) (nsphere n) (equator n) (neg \<circ> neg) (up [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> Brouwer_degree2 (n - Suc 0) neg) = up [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> Brouwer_degree2 (n - Suc 0) neg
[PROOF STEP]
apply(force simp: equator_def)
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. hom_induced (int n) (nsphere n) (equator n) (nsphere n) (equator n) (neg \<circ> neg) (up [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> Brouwer_degree2 (n - Suc 0) neg) = up [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> Brouwer_degree2 (n - Suc 0) neg
[PROOF STEP]
apply (simp add: upcarr hom_induced_id_gen)
[PROOF STATE]
proof (prove)
goal:
No subgoals!
[PROOF STEP]
done
[PROOF STATE]
proof (state)
this:
hom_induced (int n) (nsphere n) (equator n) (nsphere n) (equator n) neg (hom_induced (int n) (nsphere n) (equator n) (nsphere n) (equator n) neg (up [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> Brouwer_degree2 (n - Suc 0) neg)) = up [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> Brouwer_degree2 (n - Suc 0) neg

goal (1 subgoal):
 1. hom_induced (int n) (nsphere n) (equator n) (nsphere n) (equator n) neg un = up [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> Brouwer_degree2 (n - Suc 0) neg
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
hom_induced (int n) (nsphere n) (equator n) (nsphere n) (equator n) neg (hom_induced (int n) (nsphere n) (equator n) (nsphere n) (equator n) neg (up [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> Brouwer_degree2 (n - Suc 0) neg)) = up [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> Brouwer_degree2 (n - Suc 0) neg

goal (1 subgoal):
 1. hom_induced (int n) (nsphere n) (equator n) (nsphere n) (equator n) neg un = up [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> Brouwer_degree2 (n - Suc 0) neg
[PROOF STEP]
have "?f ?y = un"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. hom_induced (int n) (nsphere n) (equator n) (nsphere n) (equator n) neg (up [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> Brouwer_degree2 (n - Suc 0) neg) = un
[PROOF STEP]
using upcarr
[PROOF STATE]
proof (prove)
using this:
up \<in> carrier (relative_homology_group (int n) (nsphere n) (equator n))

goal (1 subgoal):
 1. hom_induced (int n) (nsphere n) (equator n) (nsphere n) (equator n) neg (up [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> Brouwer_degree2 (n - Suc 0) neg) = un
[PROOF STEP]
apply (simp only: gh_een.hom_int_pow hi_up_eq_un)
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. up \<in> carrier (relative_homology_group (int n) (nsphere n) (equator n)) \<Longrightarrow> (un [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> Brouwer_degree2 (n - Suc 0) neg) [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> Brouwer_degree2 (n - Suc 0) neg = un
[PROOF STEP]
by (metis (no_types, lifting) Brouwer_degree2_21 GE.group_l_invI GE.l_inv_ex group.int_pow_1 group.int_pow_pow power2_eq_1_iff uncarr zmult_eq_1_iff)
[PROOF STATE]
proof (state)
this:
hom_induced (int n) (nsphere n) (equator n) (nsphere n) (equator n) neg (up [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> Brouwer_degree2 (n - Suc 0) neg) = un

goal (1 subgoal):
 1. hom_induced (int n) (nsphere n) (equator n) (nsphere n) (equator n) neg un = up [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> Brouwer_degree2 (n - Suc 0) neg
[PROOF STEP]
ultimately
[PROOF STATE]
proof (chain)
picking this:
hom_induced (int n) (nsphere n) (equator n) (nsphere n) (equator n) neg (hom_induced (int n) (nsphere n) (equator n) (nsphere n) (equator n) neg (up [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> Brouwer_degree2 (n - Suc 0) neg)) = up [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> Brouwer_degree2 (n - Suc 0) neg
hom_induced (int n) (nsphere n) (equator n) (nsphere n) (equator n) neg (up [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> Brouwer_degree2 (n - Suc 0) neg) = un
[PROOF STEP]
show "?f un = ?y"
[PROOF STATE]
proof (prove)
using this:
hom_induced (int n) (nsphere n) (equator n) (nsphere n) (equator n) neg (hom_induced (int n) (nsphere n) (equator n) (nsphere n) (equator n) neg (up [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> Brouwer_degree2 (n - Suc 0) neg)) = up [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> Brouwer_degree2 (n - Suc 0) neg
hom_induced (int n) (nsphere n) (equator n) (nsphere n) (equator n) neg (up [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> Brouwer_degree2 (n - Suc 0) neg) = un

goal (1 subgoal):
 1. hom_induced (int n) (nsphere n) (equator n) (nsphere n) (equator n) neg un = up [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> Brouwer_degree2 (n - Suc 0) neg
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
hom_induced (int n) (nsphere n) (equator n) (nsphere n) (equator n) neg un = up [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> Brouwer_degree2 (n - Suc 0) neg

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
hom_induced (int n) (nsphere n) (equator n) (nsphere n) (equator n) neg un = up [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> Brouwer_degree2 (n - Suc 0) neg

goal (2 subgoals):
 1. n = 0 \<Longrightarrow> even (Brouwer_degree2 n f - Brouwer_degree2 (n - Suc 0) f)
 2. n \<noteq> 0 \<Longrightarrow> even (Brouwer_degree2 n f - Brouwer_degree2 (n - Suc 0) f)
[PROOF STEP]
have "?hi_ee f un = un [^]\<^bsub>?rhgn (equator n)\<^esub> a \<otimes>\<^bsub>?rhgn (equator n)\<^esub> up [^]\<^bsub>?rhgn (equator n)\<^esub> b"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. hom_induced (int n) (nsphere n) (equator n) (nsphere n) (equator n) f un = un [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> a \<otimes>\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> up [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> b
[PROOF STEP]
proof -
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. hom_induced (int n) (nsphere n) (equator n) (nsphere n) (equator n) f un = un [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> a \<otimes>\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> up [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> b
[PROOF STEP]
let ?TE = "topspace (nsphere n) \<inter> equator n"
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. hom_induced (int n) (nsphere n) (equator n) (nsphere n) (equator n) f un = un [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> a \<otimes>\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> up [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> b
[PROOF STEP]
have fneg: "(f \<circ> neg) x = (neg \<circ> f) x" if "x \<in> topspace (nsphere n)" for x
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (f \<circ> neg) x = (neg \<circ> f) x
[PROOF STEP]
using f [OF that]
[PROOF STATE]
proof (prove)
using this:
(f \<circ> (\<lambda>x i. - x i)) x = ((\<lambda>x i. - x i) \<circ> f) x

goal (1 subgoal):
 1. (f \<circ> neg) x = (neg \<circ> f) x
[PROOF STEP]
by (force simp: neg_def)
[PROOF STATE]
proof (state)
this:
?x1 \<in> topspace (nsphere n) \<Longrightarrow> (f \<circ> neg) ?x1 = (neg \<circ> f) ?x1

goal (1 subgoal):
 1. hom_induced (int n) (nsphere n) (equator n) (nsphere n) (equator n) f un = un [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> a \<otimes>\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> up [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> b
[PROOF STEP]
have neg_im: "neg ` (topspace (nsphere n) \<inter> equator n) \<subseteq> topspace (nsphere n) \<inter> equator n"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. neg ` (topspace (nsphere n) \<inter> equator n) \<subseteq> topspace (nsphere n) \<inter> equator n
[PROOF STEP]
by (metis cm_neg continuous_map_image_subset_topspace equ(1) topspace_subtopology)
[PROOF STATE]
proof (state)
this:
neg ` (topspace (nsphere n) \<inter> equator n) \<subseteq> topspace (nsphere n) \<inter> equator n

goal (1 subgoal):
 1. hom_induced (int n) (nsphere n) (equator n) (nsphere n) (equator n) f un = un [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> a \<otimes>\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> up [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> b
[PROOF STEP]
have 1: "hom_induced n (nsphere n) ?TE (nsphere n) ?TE f \<circ> hom_induced n (nsphere n) ?TE (nsphere n) ?TE neg
           = hom_induced n (nsphere n) ?TE (nsphere n) ?TE neg \<circ> hom_induced n (nsphere n) ?TE (nsphere n) ?TE f"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. hom_induced (int n) (nsphere n) (topspace (nsphere n) \<inter> equator n) (nsphere n) (topspace (nsphere n) \<inter> equator n) f \<circ> hom_induced (int n) (nsphere n) (topspace (nsphere n) \<inter> equator n) (nsphere n) (topspace (nsphere n) \<inter> equator n) neg = hom_induced (int n) (nsphere n) (topspace (nsphere n) \<inter> equator n) (nsphere n) (topspace (nsphere n) \<inter> equator n) neg \<circ> hom_induced (int n) (nsphere n) (topspace (nsphere n) \<inter> equator n) (nsphere n) (topspace (nsphere n) \<inter> equator n) f
[PROOF STEP]
using neg_im fimeq cm_neg cmf
[PROOF STATE]
proof (prove)
using this:
neg ` (topspace (nsphere n) \<inter> equator n) \<subseteq> topspace (nsphere n) \<inter> equator n
f ` (topspace (nsphere n) \<inter> equator n) \<subseteq> topspace (nsphere n) \<inter> equator n
continuous_map (nsphere ?m1) (nsphere ?m1) neg
continuous_map (nsphere n) (nsphere n) f

goal (1 subgoal):
 1. hom_induced (int n) (nsphere n) (topspace (nsphere n) \<inter> equator n) (nsphere n) (topspace (nsphere n) \<inter> equator n) f \<circ> hom_induced (int n) (nsphere n) (topspace (nsphere n) \<inter> equator n) (nsphere n) (topspace (nsphere n) \<inter> equator n) neg = hom_induced (int n) (nsphere n) (topspace (nsphere n) \<inter> equator n) (nsphere n) (topspace (nsphere n) \<inter> equator n) neg \<circ> hom_induced (int n) (nsphere n) (topspace (nsphere n) \<inter> equator n) (nsphere n) (topspace (nsphere n) \<inter> equator n) f
[PROOF STEP]
apply (simp add: flip: hom_induced_compose del: hom_induced_restrict)
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<lbrakk>neg ` (topspace (nsphere n) \<inter> equator n) \<subseteq> topspace (nsphere n) \<and> neg ` (topspace (nsphere n) \<inter> equator n) \<subseteq> equator n; f ` (topspace (nsphere n) \<inter> equator n) \<subseteq> topspace (nsphere n) \<and> f ` (topspace (nsphere n) \<inter> equator n) \<subseteq> equator n; \<And>m. continuous_map (nsphere m) (nsphere m) neg; continuous_map (nsphere n) (nsphere n) f\<rbrakk> \<Longrightarrow> hom_induced (int n) (nsphere n) (topspace (nsphere n) \<inter> equator n) (nsphere n) (topspace (nsphere n) \<inter> equator n) (f \<circ> neg) = hom_induced (int n) (nsphere n) (topspace (nsphere n) \<inter> equator n) (nsphere n) (topspace (nsphere n) \<inter> equator n) (neg \<circ> f)
[PROOF STEP]
using fneg
[PROOF STATE]
proof (prove)
using this:
?x1 \<in> topspace (nsphere n) \<Longrightarrow> (f \<circ> neg) ?x1 = (neg \<circ> f) ?x1

goal (1 subgoal):
 1. \<lbrakk>neg ` (topspace (nsphere n) \<inter> equator n) \<subseteq> topspace (nsphere n) \<and> neg ` (topspace (nsphere n) \<inter> equator n) \<subseteq> equator n; f ` (topspace (nsphere n) \<inter> equator n) \<subseteq> topspace (nsphere n) \<and> f ` (topspace (nsphere n) \<inter> equator n) \<subseteq> equator n; \<And>m. continuous_map (nsphere m) (nsphere m) neg; continuous_map (nsphere n) (nsphere n) f\<rbrakk> \<Longrightarrow> hom_induced (int n) (nsphere n) (topspace (nsphere n) \<inter> equator n) (nsphere n) (topspace (nsphere n) \<inter> equator n) (f \<circ> neg) = hom_induced (int n) (nsphere n) (topspace (nsphere n) \<inter> equator n) (nsphere n) (topspace (nsphere n) \<inter> equator n) (neg \<circ> f)
[PROOF STEP]
by (auto intro: hom_induced_eq)
[PROOF STATE]
proof (state)
this:
hom_induced (int n) (nsphere n) (topspace (nsphere n) \<inter> equator n) (nsphere n) (topspace (nsphere n) \<inter> equator n) f \<circ> hom_induced (int n) (nsphere n) (topspace (nsphere n) \<inter> equator n) (nsphere n) (topspace (nsphere n) \<inter> equator n) neg = hom_induced (int n) (nsphere n) (topspace (nsphere n) \<inter> equator n) (nsphere n) (topspace (nsphere n) \<inter> equator n) neg \<circ> hom_induced (int n) (nsphere n) (topspace (nsphere n) \<inter> equator n) (nsphere n) (topspace (nsphere n) \<inter> equator n) f

goal (1 subgoal):
 1. hom_induced (int n) (nsphere n) (equator n) (nsphere n) (equator n) f un = un [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> a \<otimes>\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> up [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> b
[PROOF STEP]
have "(un [^]\<^bsub>?rhgn (equator n)\<^esub> a) \<otimes>\<^bsub>?rhgn (equator n)\<^esub> (up [^]\<^bsub>?rhgn (equator n)\<^esub> b)
        = un [^]\<^bsub>?rhgn (equator n)\<^esub> (Brouwer_degree2 (n - 1) neg * a * Brouwer_degree2 (n - 1) neg)
          \<otimes>\<^bsub>?rhgn (equator n)\<^esub>
          up [^]\<^bsub>?rhgn (equator n)\<^esub> (Brouwer_degree2 (n - 1) neg * b * Brouwer_degree2 (n - 1) neg)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. un [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> a \<otimes>\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> up [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> b = un [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> (Brouwer_degree2 (n - 1) neg * a * Brouwer_degree2 (n - 1) neg) \<otimes>\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> up [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> (Brouwer_degree2 (n - 1) neg * b * Brouwer_degree2 (n - 1) neg)
[PROOF STEP]
proof -
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. un [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> a \<otimes>\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> up [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> b = un [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> (Brouwer_degree2 (n - 1) neg * a * Brouwer_degree2 (n - 1) neg) \<otimes>\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> up [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> (Brouwer_degree2 (n - 1) neg * b * Brouwer_degree2 (n - 1) neg)
[PROOF STEP]
have "Brouwer_degree2 (n - Suc 0) neg = 1 \<or> Brouwer_degree2 (n - Suc 0) neg = - 1"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. Brouwer_degree2 (n - Suc 0) neg = 1 \<or> Brouwer_degree2 (n - Suc 0) neg = - 1
[PROOF STEP]
using Brouwer_degree2_21 power2_eq_1_iff
[PROOF STATE]
proof (prove)
using this:
(Brouwer_degree2 (n - Suc 0) neg)\<^sup>2 = 1
(?a\<^sup>2 = (1::?'a)) = (?a = (1::?'a) \<or> ?a = - (1::?'a))

goal (1 subgoal):
 1. Brouwer_degree2 (n - Suc 0) neg = 1 \<or> Brouwer_degree2 (n - Suc 0) neg = - 1
[PROOF STEP]
by blast
[PROOF STATE]
proof (state)
this:
Brouwer_degree2 (n - Suc 0) neg = 1 \<or> Brouwer_degree2 (n - Suc 0) neg = - 1

goal (1 subgoal):
 1. un [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> a \<otimes>\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> up [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> b = un [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> (Brouwer_degree2 (n - 1) neg * a * Brouwer_degree2 (n - 1) neg) \<otimes>\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> up [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> (Brouwer_degree2 (n - 1) neg * b * Brouwer_degree2 (n - 1) neg)
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
Brouwer_degree2 (n - Suc 0) neg = 1 \<or> Brouwer_degree2 (n - Suc 0) neg = - 1
[PROOF STEP]
show ?thesis
[PROOF STATE]
proof (prove)
using this:
Brouwer_degree2 (n - Suc 0) neg = 1 \<or> Brouwer_degree2 (n - Suc 0) neg = - 1

goal (1 subgoal):
 1. un [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> a \<otimes>\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> up [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> b = un [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> (Brouwer_degree2 (n - 1) neg * a * Brouwer_degree2 (n - 1) neg) \<otimes>\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> up [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> (Brouwer_degree2 (n - 1) neg * b * Brouwer_degree2 (n - 1) neg)
[PROOF STEP]
by fastforce
[PROOF STATE]
proof (state)
this:
un [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> a \<otimes>\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> up [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> b = un [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> (Brouwer_degree2 (n - 1) neg * a * Brouwer_degree2 (n - 1) neg) \<otimes>\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> up [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> (Brouwer_degree2 (n - 1) neg * b * Brouwer_degree2 (n - 1) neg)

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
un [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> a \<otimes>\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> up [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> b = un [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> (Brouwer_degree2 (n - 1) neg * a * Brouwer_degree2 (n - 1) neg) \<otimes>\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> up [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> (Brouwer_degree2 (n - 1) neg * b * Brouwer_degree2 (n - 1) neg)

goal (1 subgoal):
 1. hom_induced (int n) (nsphere n) (equator n) (nsphere n) (equator n) f un = un [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> a \<otimes>\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> up [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> b
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
un [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> a \<otimes>\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> up [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> b = un [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> (Brouwer_degree2 (n - 1) neg * a * Brouwer_degree2 (n - 1) neg) \<otimes>\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> up [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> (Brouwer_degree2 (n - 1) neg * b * Brouwer_degree2 (n - 1) neg)

goal (1 subgoal):
 1. hom_induced (int n) (nsphere n) (equator n) (nsphere n) (equator n) f un = un [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> a \<otimes>\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> up [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> b
[PROOF STEP]
have "\<dots> = ((un [^]\<^bsub>?rhgn (equator n)\<^esub> Brouwer_degree2 (n - 1) neg) [^]\<^bsub>?rhgn (equator n)\<^esub> a \<otimes>\<^bsub>?rhgn (equator n)\<^esub>
           (up [^]\<^bsub>?rhgn (equator n)\<^esub> Brouwer_degree2 (n - 1) neg) [^]\<^bsub>?rhgn (equator n)\<^esub> b) [^]\<^bsub>?rhgn (equator n)\<^esub>
          Brouwer_degree2 (n - 1) neg"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. un [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> (Brouwer_degree2 (n - 1) neg * a * Brouwer_degree2 (n - 1) neg) \<otimes>\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> up [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> (Brouwer_degree2 (n - 1) neg * b * Brouwer_degree2 (n - 1) neg) = ((un [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> Brouwer_degree2 (n - 1) neg) [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> a \<otimes>\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> (up [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> Brouwer_degree2 (n - 1) neg) [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> b) [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> Brouwer_degree2 (n - 1) neg
[PROOF STEP]
by (simp add: GE.int_pow_distrib GE.int_pow_pow uncarr upcarr)
[PROOF STATE]
proof (state)
this:
un [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> (Brouwer_degree2 (n - 1) neg * a * Brouwer_degree2 (n - 1) neg) \<otimes>\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> up [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> (Brouwer_degree2 (n - 1) neg * b * Brouwer_degree2 (n - 1) neg) = ((un [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> Brouwer_degree2 (n - 1) neg) [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> a \<otimes>\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> (up [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> Brouwer_degree2 (n - 1) neg) [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> b) [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> Brouwer_degree2 (n - 1) neg

goal (1 subgoal):
 1. hom_induced (int n) (nsphere n) (equator n) (nsphere n) (equator n) f un = un [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> a \<otimes>\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> up [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> b
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
un [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> (Brouwer_degree2 (n - 1) neg * a * Brouwer_degree2 (n - 1) neg) \<otimes>\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> up [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> (Brouwer_degree2 (n - 1) neg * b * Brouwer_degree2 (n - 1) neg) = ((un [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> Brouwer_degree2 (n - 1) neg) [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> a \<otimes>\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> (up [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> Brouwer_degree2 (n - 1) neg) [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> b) [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> Brouwer_degree2 (n - 1) neg

goal (1 subgoal):
 1. hom_induced (int n) (nsphere n) (equator n) (nsphere n) (equator n) f un = un [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> a \<otimes>\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> up [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> b
[PROOF STEP]
have "\<dots> = ?hi_ee neg (?hi_ee f up) [^]\<^bsub>?rhgn (equator n)\<^esub> Brouwer_degree2 (n - Suc 0) neg"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. ((un [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> Brouwer_degree2 (n - 1) neg) [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> a \<otimes>\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> (up [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> Brouwer_degree2 (n - 1) neg) [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> b) [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> Brouwer_degree2 (n - 1) neg = hom_induced (int n) (nsphere n) (equator n) (nsphere n) (equator n) neg (hom_induced (int n) (nsphere n) (equator n) (nsphere n) (equator n) f up) [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> Brouwer_degree2 (n - Suc 0) neg
[PROOF STEP]
by (simp add: gh_een.hom_int_pow hi_un_eq_up hi_up_eq_un uncarr up_ab upcarr)
[PROOF STATE]
proof (state)
this:
((un [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> Brouwer_degree2 (n - 1) neg) [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> a \<otimes>\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> (up [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> Brouwer_degree2 (n - 1) neg) [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> b) [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> Brouwer_degree2 (n - 1) neg = hom_induced (int n) (nsphere n) (equator n) (nsphere n) (equator n) neg (hom_induced (int n) (nsphere n) (equator n) (nsphere n) (equator n) f up) [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> Brouwer_degree2 (n - Suc 0) neg

goal (1 subgoal):
 1. hom_induced (int n) (nsphere n) (equator n) (nsphere n) (equator n) f un = un [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> a \<otimes>\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> up [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> b
[PROOF STEP]
finally
[PROOF STATE]
proof (chain)
picking this:
un [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> a \<otimes>\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> up [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> b = hom_induced (int n) (nsphere n) (equator n) (nsphere n) (equator n) neg (hom_induced (int n) (nsphere n) (equator n) (nsphere n) (equator n) f up) [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> Brouwer_degree2 (n - Suc 0) neg
[PROOF STEP]
have 2: "(un [^]\<^bsub>?rhgn (equator n)\<^esub> a) \<otimes>\<^bsub>?rhgn (equator n)\<^esub> (up [^]\<^bsub>?rhgn (equator n)\<^esub> b)
             = ?hi_ee neg (?hi_ee f up) [^]\<^bsub>?rhgn (equator n)\<^esub> Brouwer_degree2 (n - Suc 0) neg"
[PROOF STATE]
proof (prove)
using this:
un [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> a \<otimes>\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> up [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> b = hom_induced (int n) (nsphere n) (equator n) (nsphere n) (equator n) neg (hom_induced (int n) (nsphere n) (equator n) (nsphere n) (equator n) f up) [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> Brouwer_degree2 (n - Suc 0) neg

goal (1 subgoal):
 1. un [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> a \<otimes>\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> up [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> b = hom_induced (int n) (nsphere n) (equator n) (nsphere n) (equator n) neg (hom_induced (int n) (nsphere n) (equator n) (nsphere n) (equator n) f up) [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> Brouwer_degree2 (n - Suc 0) neg
[PROOF STEP]
.
[PROOF STATE]
proof (state)
this:
un [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> a \<otimes>\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> up [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> b = hom_induced (int n) (nsphere n) (equator n) (nsphere n) (equator n) neg (hom_induced (int n) (nsphere n) (equator n) (nsphere n) (equator n) f up) [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> Brouwer_degree2 (n - Suc 0) neg

goal (1 subgoal):
 1. hom_induced (int n) (nsphere n) (equator n) (nsphere n) (equator n) f un = un [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> a \<otimes>\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> up [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> b
[PROOF STEP]
have "un = ?hi_ee neg up [^]\<^bsub>?rhgn (equator n)\<^esub> Brouwer_degree2 (n - Suc 0) neg"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. un = hom_induced (int n) (nsphere n) (equator n) (nsphere n) (equator n) neg up [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> Brouwer_degree2 (n - Suc 0) neg
[PROOF STEP]
by (metis (no_types, opaque_lifting) Brouwer_degree2_21 GE.int_pow_1 GE.int_pow_pow hi_up_eq_un power2_eq_1_iff uncarr zmult_eq_1_iff)
[PROOF STATE]
proof (state)
this:
un = hom_induced (int n) (nsphere n) (equator n) (nsphere n) (equator n) neg up [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> Brouwer_degree2 (n - Suc 0) neg

goal (1 subgoal):
 1. hom_induced (int n) (nsphere n) (equator n) (nsphere n) (equator n) f un = un [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> a \<otimes>\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> up [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> b
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
un = hom_induced (int n) (nsphere n) (equator n) (nsphere n) (equator n) neg up [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> Brouwer_degree2 (n - Suc 0) neg

goal (1 subgoal):
 1. hom_induced (int n) (nsphere n) (equator n) (nsphere n) (equator n) f un = un [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> a \<otimes>\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> up [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> b
[PROOF STEP]
have "?hi_ee f ((?hi_ee neg up) [^]\<^bsub>?rhgn (equator n)\<^esub> (Brouwer_degree2 (n - Suc 0) neg))
                 = un [^]\<^bsub>?rhgn (equator n)\<^esub> a \<otimes>\<^bsub>?rhgn (equator n)\<^esub> up [^]\<^bsub>?rhgn (equator n)\<^esub> b"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. hom_induced (int n) (nsphere n) (equator n) (nsphere n) (equator n) f (hom_induced (int n) (nsphere n) (equator n) (nsphere n) (equator n) neg up [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> Brouwer_degree2 (n - Suc 0) neg) = un [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> a \<otimes>\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> up [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> b
[PROOF STEP]
using 1 2
[PROOF STATE]
proof (prove)
using this:
hom_induced (int n) (nsphere n) (topspace (nsphere n) \<inter> equator n) (nsphere n) (topspace (nsphere n) \<inter> equator n) f \<circ> hom_induced (int n) (nsphere n) (topspace (nsphere n) \<inter> equator n) (nsphere n) (topspace (nsphere n) \<inter> equator n) neg = hom_induced (int n) (nsphere n) (topspace (nsphere n) \<inter> equator n) (nsphere n) (topspace (nsphere n) \<inter> equator n) neg \<circ> hom_induced (int n) (nsphere n) (topspace (nsphere n) \<inter> equator n) (nsphere n) (topspace (nsphere n) \<inter> equator n) f
un [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> a \<otimes>\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> up [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> b = hom_induced (int n) (nsphere n) (equator n) (nsphere n) (equator n) neg (hom_induced (int n) (nsphere n) (equator n) (nsphere n) (equator n) f up) [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> Brouwer_degree2 (n - Suc 0) neg

goal (1 subgoal):
 1. hom_induced (int n) (nsphere n) (equator n) (nsphere n) (equator n) f (hom_induced (int n) (nsphere n) (equator n) (nsphere n) (equator n) neg up [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> Brouwer_degree2 (n - Suc 0) neg) = un [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> a \<otimes>\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> up [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> b
[PROOF STEP]
by (simp add: hom_induced_carrier gh_eef.hom_int_pow fun_eq_iff)
[PROOF STATE]
proof (state)
this:
hom_induced (int n) (nsphere n) (equator n) (nsphere n) (equator n) f (hom_induced (int n) (nsphere n) (equator n) (nsphere n) (equator n) neg up [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> Brouwer_degree2 (n - Suc 0) neg) = un [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> a \<otimes>\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> up [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> b

goal (1 subgoal):
 1. hom_induced (int n) (nsphere n) (equator n) (nsphere n) (equator n) f un = un [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> a \<otimes>\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> up [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> b
[PROOF STEP]
ultimately
[PROOF STATE]
proof (chain)
picking this:
un = hom_induced (int n) (nsphere n) (equator n) (nsphere n) (equator n) neg up [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> Brouwer_degree2 (n - Suc 0) neg
hom_induced (int n) (nsphere n) (equator n) (nsphere n) (equator n) f (hom_induced (int n) (nsphere n) (equator n) (nsphere n) (equator n) neg up [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> Brouwer_degree2 (n - Suc 0) neg) = un [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> a \<otimes>\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> up [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> b
[PROOF STEP]
show ?thesis
[PROOF STATE]
proof (prove)
using this:
un = hom_induced (int n) (nsphere n) (equator n) (nsphere n) (equator n) neg up [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> Brouwer_degree2 (n - Suc 0) neg
hom_induced (int n) (nsphere n) (equator n) (nsphere n) (equator n) f (hom_induced (int n) (nsphere n) (equator n) (nsphere n) (equator n) neg up [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> Brouwer_degree2 (n - Suc 0) neg) = un [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> a \<otimes>\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> up [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> b

goal (1 subgoal):
 1. hom_induced (int n) (nsphere n) (equator n) (nsphere n) (equator n) f un = un [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> a \<otimes>\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> up [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> b
[PROOF STEP]
by blast
[PROOF STATE]
proof (state)
this:
hom_induced (int n) (nsphere n) (equator n) (nsphere n) (equator n) f un = un [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> a \<otimes>\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> up [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> b

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
hom_induced (int n) (nsphere n) (equator n) (nsphere n) (equator n) f un = un [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> a \<otimes>\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> up [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> b

goal (2 subgoals):
 1. n = 0 \<Longrightarrow> even (Brouwer_degree2 n f - Brouwer_degree2 (n - Suc 0) f)
 2. n \<noteq> 0 \<Longrightarrow> even (Brouwer_degree2 n f - Brouwer_degree2 (n - Suc 0) f)
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
hom_induced (int n) (nsphere n) (equator n) (nsphere n) (equator n) f un = un [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> a \<otimes>\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> up [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> b
[PROOF STEP]
have "?hi_ee f u = u [^]\<^bsub>?rhgn (equator n)\<^esub> (a - b)"
[PROOF STATE]
proof (prove)
using this:
hom_induced (int n) (nsphere n) (equator n) (nsphere n) (equator n) f un = un [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> a \<otimes>\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> up [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> b

goal (1 subgoal):
 1. hom_induced (int n) (nsphere n) (equator n) (nsphere n) (equator n) f u = u [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> (a - b)
[PROOF STEP]
by (simp add: u_def upcarr uncarr up_ab GE.int_pow_diff GE.m_ac GE.int_pow_distrib GE.int_pow_inv GE.inv_mult_group)
[PROOF STATE]
proof (state)
this:
hom_induced (int n) (nsphere n) (equator n) (nsphere n) (equator n) f u = u [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> (a - b)

goal (2 subgoals):
 1. n = 0 \<Longrightarrow> even (Brouwer_degree2 n f - Brouwer_degree2 (n - Suc 0) f)
 2. n \<noteq> 0 \<Longrightarrow> even (Brouwer_degree2 n f - Brouwer_degree2 (n - Suc 0) f)
[PROOF STEP]
ultimately
[PROOF STATE]
proof (chain)
picking this:
u [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> Brouwer_degree2 n f = hom_induced (int n) (nsphere n) (equator n) (nsphere n) (equator n) f u
hom_induced (int n) (nsphere n) (equator n) (nsphere n) (equator n) f u = u [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> (a - b)
[PROOF STEP]
have "Brouwer_degree2 n f = a - b"
[PROOF STATE]
proof (prove)
using this:
u [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> Brouwer_degree2 n f = hom_induced (int n) (nsphere n) (equator n) (nsphere n) (equator n) f u
hom_induced (int n) (nsphere n) (equator n) (nsphere n) (equator n) f u = u [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> (a - b)

goal (1 subgoal):
 1. Brouwer_degree2 n f = a - b
[PROOF STEP]
using iff
[PROOF STATE]
proof (prove)
using this:
u [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> Brouwer_degree2 n f = hom_induced (int n) (nsphere n) (equator n) (nsphere n) (equator n) f u
hom_induced (int n) (nsphere n) (equator n) (nsphere n) (equator n) f u = u [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> (a - b)
(u [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> Brouwer_degree2 n f = u [^]\<^bsub>relative_homology_group (int n) (nsphere n) (equator n)\<^esub> (a - b)) = (Brouwer_degree2 n f = a - b)

goal (1 subgoal):
 1. Brouwer_degree2 n f = a - b
[PROOF STEP]
by blast
[PROOF STATE]
proof (state)
this:
Brouwer_degree2 n f = a - b

goal (2 subgoals):
 1. n = 0 \<Longrightarrow> even (Brouwer_degree2 n f - Brouwer_degree2 (n - Suc 0) f)
 2. n \<noteq> 0 \<Longrightarrow> even (Brouwer_degree2 n f - Brouwer_degree2 (n - Suc 0) f)
[PROOF STEP]
with Bd_ab
[PROOF STATE]
proof (chain)
picking this:
Brouwer_degree2 (n - Suc 0) f = a + b
Brouwer_degree2 n f = a - b
[PROOF STEP]
show ?thesis
[PROOF STATE]
proof (prove)
using this:
Brouwer_degree2 (n - Suc 0) f = a + b
Brouwer_degree2 n f = a - b

goal (1 subgoal):
 1. even (Brouwer_degree2 n f - Brouwer_degree2 (n - Suc 0) f)
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
even (Brouwer_degree2 n f - Brouwer_degree2 (n - Suc 0) f)

goal (1 subgoal):
 1. n = 0 \<Longrightarrow> even (Brouwer_degree2 n f - Brouwer_degree2 (n - Suc 0) f)
[PROOF STEP]
qed simp