src/HOL/Homology/Brouwer_Degree.thy
author paulson <lp15@cam.ac.uk>
Tue, 17 Sep 2019 12:36:04 +0100
changeset 70721 47258727fa42
parent 70097 4005298550a6
child 72632 773ad766f1b8
permissions -rw-r--r--
A few new theorems, tidying up and deletion of obsolete material
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
70095
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
     1
section\<open>Homology, III: Brouwer Degree\<close>
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
     2
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
     3
theory Brouwer_Degree
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
     4
  imports Homology_Groups
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
     5
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
     6
begin
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
     7
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
     8
subsection\<open>Reduced Homology\<close>
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
     9
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    10
definition reduced_homology_group :: "int \<Rightarrow> 'a topology \<Rightarrow> 'a chain set monoid"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    11
  where "reduced_homology_group p X \<equiv>
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    12
           subgroup_generated (homology_group p X)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    13
             (kernel (homology_group p X) (homology_group p (discrete_topology {()}))
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    14
                     (hom_induced p X {} (discrete_topology {()}) {} (\<lambda>x. ())))"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    15
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    16
lemma one_reduced_homology_group: "\<one>\<^bsub>reduced_homology_group p X\<^esub> = \<one>\<^bsub>homology_group p X\<^esub>"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    17
    by (simp add: reduced_homology_group_def)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    18
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    19
lemma group_reduced_homology_group [simp]: "group (reduced_homology_group p X)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    20
    by (simp add: reduced_homology_group_def group.group_subgroup_generated)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    21
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    22
lemma carrier_reduced_homology_group:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    23
   "carrier (reduced_homology_group p X) =
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    24
    kernel (homology_group p X) (homology_group p (discrete_topology {()}))
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    25
           (hom_induced p X {} (discrete_topology {()}) {} (\<lambda>x. ()))"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    26
    (is "_ = kernel ?G ?H ?h")
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    27
proof -
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    28
  interpret subgroup "kernel ?G ?H ?h" ?G
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    29
  by (simp add: hom_induced_empty_hom group_hom_axioms_def group_hom_def group_hom.subgroup_kernel)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    30
  show ?thesis
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    31
    unfolding reduced_homology_group_def
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    32
    using carrier_subgroup_generated_subgroup by blast
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    33
qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    34
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    35
lemma carrier_reduced_homology_group_subset:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    36
   "carrier (reduced_homology_group p X) \<subseteq> carrier (homology_group p X)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    37
  by (simp add: group.carrier_subgroup_generated_subset reduced_homology_group_def)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    38
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    39
lemma un_reduced_homology_group:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    40
  assumes "p \<noteq> 0"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    41
  shows "reduced_homology_group p X = homology_group p X"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    42
proof -
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    43
  have "(kernel (homology_group p X) (homology_group p (discrete_topology {()}))
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    44
              (hom_induced p X {} (discrete_topology {()}) {} (\<lambda>x. ())))
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    45
      = carrier (homology_group p X)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    46
  proof (rule group_hom.kernel_to_trivial_group)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    47
    show "group_hom (homology_group p X) (homology_group p (discrete_topology {()}))
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    48
         (hom_induced p X {} (discrete_topology {()}) {} (\<lambda>x. ()))"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    49
      by (auto simp: hom_induced_empty_hom group_hom_def group_hom_axioms_def)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    50
    show "trivial_group (homology_group p (discrete_topology {()}))"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    51
      by (simp add: homology_dimension_axiom [OF _ assms])
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    52
  qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    53
  then show ?thesis
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    54
    by (simp add: reduced_homology_group_def group.subgroup_generated_group_carrier)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    55
qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    56
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    57
lemma trivial_reduced_homology_group:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    58
   "p < 0 \<Longrightarrow> trivial_group(reduced_homology_group p X)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    59
  by (simp add: trivial_homology_group un_reduced_homology_group)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    60
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    61
lemma hom_induced_reduced_hom:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    62
   "(hom_induced p X {} Y {} f) \<in> hom (reduced_homology_group p X) (reduced_homology_group p Y)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    63
proof (cases "continuous_map X Y f")
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    64
  case True
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    65
  have eq: "continuous_map X Y f
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    66
         \<Longrightarrow> hom_induced p X {} (discrete_topology {()}) {} (\<lambda>x. ())
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    67
           = (hom_induced p Y {} (discrete_topology {()}) {} (\<lambda>x. ()) \<circ> hom_induced p X {} Y {} f)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    68
    by (simp flip: hom_induced_compose_empty)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    69
  interpret subgroup "kernel (homology_group p X)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    70
                       (homology_group p (discrete_topology {()}))
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    71
                         (hom_induced p X {} (discrete_topology {()}) {} (\<lambda>x. ()))"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    72
                     "homology_group p X"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    73
    by (meson group_hom.subgroup_kernel group_hom_axioms_def group_hom_def group_relative_homology_group hom_induced)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    74
  have sb: "hom_induced p X {} Y {} f ` carrier (homology_group p X) \<subseteq> carrier (homology_group p Y)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    75
    using hom_induced_carrier by blast
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    76
    show ?thesis
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    77
    using True
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    78
    unfolding reduced_homology_group_def
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    79
    apply (simp add: hom_into_subgroup_eq group_hom.subgroup_kernel hom_induced_empty_hom group.hom_from_subgroup_generated group_hom_def group_hom_axioms_def)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    80
    unfolding kernel_def using eq sb by auto
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    81
next
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    82
  case False
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    83
  then have "hom_induced p X {} Y {} f = (\<lambda>c. one(reduced_homology_group p Y))"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    84
    by (force simp: hom_induced_default reduced_homology_group_def)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    85
  then show ?thesis
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    86
    by (simp add: trivial_hom)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    87
qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    88
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    89
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    90
lemma hom_induced_reduced:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    91
   "c \<in> carrier(reduced_homology_group p X)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    92
        \<Longrightarrow> hom_induced p X {} Y {} f c \<in> carrier(reduced_homology_group p Y)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    93
  by (meson hom_in_carrier hom_induced_reduced_hom)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    94
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    95
lemma hom_boundary_reduced_hom:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    96
   "hom_boundary p X S
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    97
  \<in> hom (relative_homology_group p X S) (reduced_homology_group (p-1) (subtopology X S))"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    98
proof -
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    99
  have *: "continuous_map X (discrete_topology {()}) (\<lambda>x. ())" "(\<lambda>x. ()) ` S \<subseteq> {()}"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   100
    by auto
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   101
  interpret group_hom "relative_homology_group p (discrete_topology {()}) {()}"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   102
                      "homology_group (p-1) (discrete_topology {()})"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   103
                      "hom_boundary p (discrete_topology {()}) {()}"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   104
    apply (clarsimp simp: group_hom_def group_hom_axioms_def)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   105
    by (metis UNIV_unit hom_boundary_hom subtopology_UNIV)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   106
  have "hom_boundary p X S `
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   107
        carrier (relative_homology_group p X S)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   108
        \<subseteq> kernel (homology_group (p - 1) (subtopology X S))
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   109
            (homology_group (p - 1) (discrete_topology {()}))
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   110
            (hom_induced (p - 1) (subtopology X S) {}
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   111
              (discrete_topology {()}) {} (\<lambda>x. ()))"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   112
  proof (clarsimp simp add: kernel_def hom_boundary_carrier)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   113
    fix c
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   114
    assume c: "c \<in> carrier (relative_homology_group p X S)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   115
    have triv: "trivial_group (relative_homology_group p (discrete_topology {()}) {()})"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   116
      by (metis topspace_discrete_topology trivial_relative_homology_group_topspace)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   117
    have "hom_boundary p (discrete_topology {()}) {()}
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   118
         (hom_induced p X S (discrete_topology {()}) {()} (\<lambda>x. ()) c)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   119
       = \<one>\<^bsub>homology_group (p - 1) (discrete_topology {()})\<^esub>"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   120
      by (metis hom_induced_carrier local.hom_one singletonD triv trivial_group_def)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   121
    then show "hom_induced (p - 1) (subtopology X S) {} (discrete_topology {()}) {} (\<lambda>x. ()) (hom_boundary p X S c) =
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   122
        \<one>\<^bsub>homology_group (p - 1) (discrete_topology {()})\<^esub>"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   123
      using naturality_hom_induced [OF *, of p, symmetric] by (simp add: o_def fun_eq_iff)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   124
  qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   125
  then show ?thesis
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   126
    by (simp add: reduced_homology_group_def hom_boundary_hom hom_into_subgroup)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   127
qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   128
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   129
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   130
lemma homotopy_equivalence_reduced_homology_group_isomorphisms:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   131
  assumes contf: "continuous_map X Y f" and contg: "continuous_map Y X g"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   132
    and gf: "homotopic_with (\<lambda>h. True) X X (g \<circ> f) id"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   133
    and fg: "homotopic_with (\<lambda>k. True) Y Y (f \<circ> g) id"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   134
  shows "group_isomorphisms (reduced_homology_group p X) (reduced_homology_group p Y)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   135
                               (hom_induced p X {} Y {} f) (hom_induced p Y {} X {} g)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   136
proof (simp add: hom_induced_reduced_hom group_isomorphisms_def, intro conjI ballI)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   137
  fix a
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   138
  assume "a \<in> carrier (reduced_homology_group p X)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   139
  then have "(hom_induced p Y {} X {} g \<circ> hom_induced p X {} Y {} f) a = a"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   140
    apply (simp add: contf contg flip: hom_induced_compose)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   141
    using carrier_reduced_homology_group_subset gf hom_induced_id homology_homotopy_empty by fastforce
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   142
  then show "hom_induced p Y {} X {} g (hom_induced p X {} Y {} f a) = a"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   143
    by simp
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   144
next
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   145
  fix b
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   146
  assume "b \<in> carrier (reduced_homology_group p Y)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   147
  then have "(hom_induced p X {} Y {} f \<circ> hom_induced p Y {} X {} g) b = b"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   148
    apply (simp add: contf contg flip: hom_induced_compose)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   149
    using carrier_reduced_homology_group_subset fg hom_induced_id homology_homotopy_empty by fastforce
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   150
  then show "hom_induced p X {} Y {} f (hom_induced p Y {} X {} g b) = b"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   151
    by (simp add: carrier_reduced_homology_group)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   152
qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   153
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   154
lemma homotopy_equivalence_reduced_homology_group_isomorphism:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   155
  assumes "continuous_map X Y f" "continuous_map Y X g"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   156
      and "homotopic_with (\<lambda>h. True) X X (g \<circ> f) id" "homotopic_with (\<lambda>k. True) Y Y (f \<circ> g) id"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   157
  shows "(hom_induced p X {} Y {} f)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   158
          \<in> iso (reduced_homology_group p X) (reduced_homology_group p Y)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   159
proof (rule group_isomorphisms_imp_iso)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   160
  show "group_isomorphisms (reduced_homology_group p X) (reduced_homology_group p Y)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   161
         (hom_induced p X {} Y {} f) (hom_induced p Y {} X {} g)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   162
    by (simp add: assms homotopy_equivalence_reduced_homology_group_isomorphisms)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   163
qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   164
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   165
lemma homotopy_equivalent_space_imp_isomorphic_reduced_homology_groups:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   166
   "X homotopy_equivalent_space Y
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   167
        \<Longrightarrow> reduced_homology_group p X \<cong> reduced_homology_group p Y"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   168
  unfolding homotopy_equivalent_space_def
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   169
  using homotopy_equivalence_reduced_homology_group_isomorphism is_isoI by blast
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   170
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   171
lemma homeomorphic_space_imp_isomorphic_reduced_homology_groups:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   172
   "X homeomorphic_space Y \<Longrightarrow> reduced_homology_group p X \<cong> reduced_homology_group p Y"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   173
  by (simp add: homeomorphic_imp_homotopy_equivalent_space homotopy_equivalent_space_imp_isomorphic_reduced_homology_groups)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   174
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   175
lemma trivial_reduced_homology_group_empty:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   176
   "topspace X = {} \<Longrightarrow> trivial_group(reduced_homology_group p X)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   177
  by (metis carrier_reduced_homology_group_subset group.trivial_group_alt group_reduced_homology_group trivial_group_def trivial_homology_group_empty)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   178
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   179
lemma homology_dimension_reduced:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   180
  assumes "topspace X = {a}"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   181
  shows "trivial_group (reduced_homology_group p X)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   182
proof -
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   183
  have iso: "(hom_induced p X {} (discrete_topology {()}) {} (\<lambda>x. ()))
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   184
           \<in> iso (homology_group p X) (homology_group p (discrete_topology {()}))"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   185
    apply (rule homeomorphic_map_homology_iso)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   186
    apply (force simp: homeomorphic_map_maps homeomorphic_maps_def assms)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   187
    done
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   188
  show ?thesis
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   189
    unfolding reduced_homology_group_def
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   190
    by (rule group.trivial_group_subgroup_generated) (use iso in \<open>auto simp: iso_kernel_image\<close>)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   191
qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   192
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   193
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   194
lemma trivial_reduced_homology_group_contractible_space:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   195
   "contractible_space X \<Longrightarrow> trivial_group (reduced_homology_group p X)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   196
  apply (simp add: contractible_eq_homotopy_equivalent_singleton_subtopology)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   197
  apply (auto simp: trivial_reduced_homology_group_empty)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   198
  using isomorphic_group_triviality
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   199
  by (metis (full_types) group_reduced_homology_group homology_dimension_reduced homotopy_equivalent_space_imp_isomorphic_reduced_homology_groups path_connectedin_def path_connectedin_singleton topspace_subtopology_subset)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   200
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   201
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   202
lemma image_reduced_homology_group:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   203
  assumes "topspace X \<inter> S \<noteq> {}"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   204
  shows "hom_induced p X {} X S id ` carrier (reduced_homology_group p X)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   205
       = hom_induced p X {} X S id ` carrier (homology_group p X)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   206
    (is "?h ` carrier ?G = ?h ` carrier ?H")
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   207
proof -
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   208
  obtain a where a: "a \<in> topspace X" and "a \<in> S"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   209
    using assms by blast
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   210
  have [simp]: "A \<inter> {x \<in> A. P x} = {x \<in> A. P x}" for A P
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   211
    by blast
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   212
  interpret comm_group "homology_group p X"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   213
    by (rule abelian_relative_homology_group)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   214
  have *: "\<exists>x'. ?h y = ?h x' \<and>
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   215
             x' \<in> carrier ?H \<and>
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   216
             hom_induced p X {} (discrete_topology {()}) {} (\<lambda>x. ()) x'
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   217
           = \<one>\<^bsub>homology_group p (discrete_topology {()})\<^esub>"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   218
    if "y \<in> carrier ?H" for y
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   219
  proof -
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   220
    let ?f = "hom_induced p (discrete_topology {()}) {} X {} (\<lambda>x. a)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   221
    let ?g = "hom_induced p X {} (discrete_topology {()}) {} (\<lambda>x. ())"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   222
    have bcarr: "?f (?g y) \<in> carrier ?H"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   223
      by (simp add: hom_induced_carrier)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   224
    interpret gh1:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   225
      group_hom "relative_homology_group p X S" "relative_homology_group p (discrete_topology {()}) {()}"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   226
                "hom_induced p X S (discrete_topology {()}) {()} (\<lambda>x. ())"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   227
      by (meson group_hom_axioms_def group_hom_def hom_induced_hom group_relative_homology_group)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   228
    interpret gh2:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   229
      group_hom "relative_homology_group p (discrete_topology {()}) {()}" "relative_homology_group p X S"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   230
                "hom_induced p (discrete_topology {()}) {()} X S (\<lambda>x. a)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   231
      by (meson group_hom_axioms_def group_hom_def hom_induced_hom group_relative_homology_group)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   232
    interpret gh3:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   233
      group_hom "homology_group p X" "relative_homology_group p X S" "?h"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   234
      by (meson group_hom_axioms_def group_hom_def hom_induced_hom group_relative_homology_group)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   235
    interpret gh4:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   236
      group_hom "homology_group p X" "homology_group p (discrete_topology {()})"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   237
                "?g"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   238
      by (meson group_hom_axioms_def group_hom_def hom_induced_hom group_relative_homology_group)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   239
    interpret gh5:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   240
      group_hom "homology_group p (discrete_topology {()})" "homology_group p X"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   241
                "?f"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   242
      by (meson group_hom_axioms_def group_hom_def hom_induced_hom group_relative_homology_group)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   243
    interpret gh6:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   244
      group_hom "homology_group p (discrete_topology {()})" "relative_homology_group p (discrete_topology {()}) {()}"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   245
                "hom_induced p (discrete_topology {()}) {} (discrete_topology {()}) {()} id"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   246
      by (meson group_hom_axioms_def group_hom_def hom_induced_hom group_relative_homology_group)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   247
    show ?thesis
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   248
    proof (intro exI conjI)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   249
      have "(?h \<circ> ?f \<circ> ?g) y
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   250
          = (hom_induced p (discrete_topology {()}) {()} X S (\<lambda>x. a) \<circ>
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   251
             hom_induced p (discrete_topology {()}) {} (discrete_topology {()}) {()} id \<circ> ?g) y"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   252
        by (simp add: a \<open>a \<in> S\<close> flip: hom_induced_compose)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   253
      also have "\<dots> = \<one>\<^bsub>relative_homology_group p X S\<^esub>"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   254
        using trivial_relative_homology_group_topspace [of p "discrete_topology {()}"]
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   255
        apply simp
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   256
        by (metis (full_types) empty_iff gh1.H.one_closed gh1.H.trivial_group gh2.hom_one hom_induced_carrier insert_iff)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   257
      finally have "?h (?f (?g y)) = \<one>\<^bsub>relative_homology_group p X S\<^esub>"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   258
        by simp
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   259
      then show "?h y = ?h (y \<otimes>\<^bsub>?H\<^esub> inv\<^bsub>?H\<^esub> ?f (?g y))"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   260
        by (simp add: that hom_induced_carrier)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   261
      show "(y \<otimes>\<^bsub>?H\<^esub> inv\<^bsub>?H\<^esub> ?f (?g y)) \<in> carrier (homology_group p X)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   262
        by (simp add: hom_induced_carrier that)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   263
      have *: "(?g \<circ> hom_induced p X {} X {} (\<lambda>x. a)) y = hom_induced p X {} (discrete_topology {()}) {} (\<lambda>a. ()) y"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   264
        by (simp add: a \<open>a \<in> S\<close> flip: hom_induced_compose)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   265
      have "?g (y \<otimes>\<^bsub>?H\<^esub> inv\<^bsub>?H\<^esub> (?f \<circ> ?g) y)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   266
          = \<one>\<^bsub>homology_group p (discrete_topology {()})\<^esub>"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   267
        by (simp add: a \<open>a \<in> S\<close> that hom_induced_carrier flip: hom_induced_compose * [unfolded o_def])
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   268
      then show "?g (y \<otimes>\<^bsub>?H\<^esub> inv\<^bsub>?H\<^esub> ?f (?g y))
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   269
          = \<one>\<^bsub>homology_group p (discrete_topology {()})\<^esub>"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   270
        by simp
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   271
    qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   272
  qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   273
  show ?thesis
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   274
    apply (auto simp: reduced_homology_group_def carrier_subgroup_generated kernel_def image_iff)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   275
     apply (metis (no_types, lifting) generate_in_carrier mem_Collect_eq subsetI)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   276
    apply (force simp: dest: * intro: generate.incl)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   277
    done
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   278
qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   279
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   280
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   281
lemma homology_exactness_reduced_1:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   282
  assumes "topspace X \<inter> S \<noteq> {}"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   283
  shows  "exact_seq([reduced_homology_group(p - 1) (subtopology X S),
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   284
                     relative_homology_group p X S,
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   285
                     reduced_homology_group p X],
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   286
                    [hom_boundary p X S, hom_induced p X {} X S id])"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   287
    (is "exact_seq ([?G1,?G2,?G3], [?h1,?h2])")
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   288
proof -
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   289
  have *: "?h2 ` carrier (homology_group p X)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   290
         = kernel ?G2 (homology_group (p - 1) (subtopology X S)) ?h1"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   291
    using homology_exactness_axiom_1 [of p X S] by simp
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   292
  have gh: "group_hom ?G3 ?G2 ?h2"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   293
    by (simp add: reduced_homology_group_def group_hom_def group_hom_axioms_def
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   294
      group.group_subgroup_generated group.hom_from_subgroup_generated hom_induced_hom)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   295
  show ?thesis
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   296
    apply (simp add: hom_boundary_reduced_hom gh * image_reduced_homology_group [OF assms])
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   297
    apply (simp add: kernel_def one_reduced_homology_group)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   298
    done
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   299
qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   300
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   301
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   302
lemma homology_exactness_reduced_2:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   303
   "exact_seq([reduced_homology_group(p - 1) X,
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   304
                 reduced_homology_group(p - 1) (subtopology X S),
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   305
                 relative_homology_group p X S],
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   306
                [hom_induced (p - 1) (subtopology X S) {} X {} id, hom_boundary p X S])"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   307
    (is "exact_seq ([?G1,?G2,?G3], [?h1,?h2])")
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   308
  using homology_exactness_axiom_2 [of p X S]
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   309
  apply (simp add: group_hom_axioms_def group_hom_def hom_boundary_reduced_hom hom_induced_reduced_hom)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   310
  apply (simp add: reduced_homology_group_def group_hom.subgroup_kernel group_hom_axioms_def group_hom_def hom_induced_hom)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   311
  using hom_boundary_reduced_hom [of p X S]
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   312
  apply (auto simp: image_def set_eq_iff)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   313
  by (metis carrier_reduced_homology_group hom_in_carrier set_eq_iff)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   314
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   315
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   316
lemma homology_exactness_reduced_3:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   317
   "exact_seq([relative_homology_group p X S,
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   318
               reduced_homology_group p X,
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   319
               reduced_homology_group p (subtopology X S)],
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   320
              [hom_induced p X {} X S id, hom_induced p (subtopology X S) {} X {} id])"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   321
    (is "exact_seq ([?G1,?G2,?G3], [?h1,?h2])")
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   322
proof -
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   323
  have "kernel ?G2 ?G1 ?h1 =
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   324
      ?h2 ` carrier ?G3"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   325
  proof -
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   326
    obtain U where U:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   327
      "(hom_induced p (subtopology X S) {} X {} id) ` carrier ?G3 \<subseteq> U"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   328
      "(hom_induced p (subtopology X S) {} X {} id) ` carrier ?G3
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   329
       \<subseteq> (hom_induced p (subtopology X S) {} X {} id) ` carrier (homology_group p (subtopology X S))"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   330
      "U \<inter> kernel (homology_group p X) ?G1 (hom_induced p X {} X S id)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   331
     = kernel ?G2 ?G1 (hom_induced p X {} X S id)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   332
      "U \<inter> (hom_induced p (subtopology X S) {} X {} id) ` carrier (homology_group p (subtopology X S))
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   333
    \<subseteq> (hom_induced p (subtopology X S) {} X {} id) ` carrier ?G3"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   334
    proof
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   335
      show "?h2 ` carrier ?G3 \<subseteq> carrier ?G2"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   336
        by (simp add: hom_induced_reduced image_subset_iff)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   337
      show "?h2 ` carrier ?G3 \<subseteq> ?h2 ` carrier (homology_group p (subtopology X S))"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   338
        by (meson carrier_reduced_homology_group_subset image_mono)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   339
      have "subgroup (kernel (homology_group p X) (homology_group p (discrete_topology {()}))
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   340
                             (hom_induced p X {} (discrete_topology {()}) {} (\<lambda>x. ())))
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   341
                     (homology_group p X)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   342
        by (simp add: group.normal_invE(1) group_hom.normal_kernel group_hom_axioms_def group_hom_def hom_induced_empty_hom)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   343
      then show "carrier ?G2 \<inter> kernel (homology_group p X) ?G1 ?h1 = kernel ?G2 ?G1 ?h1"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   344
        unfolding carrier_reduced_homology_group
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   345
        by (auto simp: reduced_homology_group_def)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   346
    show "carrier ?G2 \<inter> ?h2 ` carrier (homology_group p (subtopology X S))
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   347
       \<subseteq> ?h2 ` carrier ?G3"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   348
      by (force simp: carrier_reduced_homology_group kernel_def hom_induced_compose')
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   349
  qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   350
  with homology_exactness_axiom_3 [of p X S] show ?thesis
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   351
    by (fastforce simp add:)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   352
qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   353
  then show ?thesis
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   354
    apply (simp add: group_hom_axioms_def group_hom_def hom_boundary_reduced_hom hom_induced_reduced_hom)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   355
    apply (simp add: group.hom_from_subgroup_generated hom_induced_hom reduced_homology_group_def)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   356
    done
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   357
qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   358
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   359
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   360
subsection\<open>More homology properties of deformations, retracts, contractible spaces\<close>
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   361
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   362
lemma iso_relative_homology_of_contractible:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   363
   "\<lbrakk>contractible_space X; topspace X \<inter> S \<noteq> {}\<rbrakk>
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   364
  \<Longrightarrow> hom_boundary p X S
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   365
      \<in> iso (relative_homology_group p X S) (reduced_homology_group(p - 1) (subtopology X S))"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   366
  using very_short_exact_sequence
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   367
    [of "reduced_homology_group (p - 1) X"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   368
        "reduced_homology_group (p - 1) (subtopology X S)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   369
        "relative_homology_group p X S"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   370
        "reduced_homology_group p X"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   371
        "hom_induced (p - 1) (subtopology X S) {} X {} id"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   372
        "hom_boundary p X S"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   373
        "hom_induced p X {} X S id"]
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   374
  by (meson exact_seq_cons_iff homology_exactness_reduced_1 homology_exactness_reduced_2 trivial_reduced_homology_group_contractible_space)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   375
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   376
lemma isomorphic_group_relative_homology_of_contractible:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   377
   "\<lbrakk>contractible_space X; topspace X \<inter> S \<noteq> {}\<rbrakk>
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   378
        \<Longrightarrow> relative_homology_group p X S \<cong>
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   379
            reduced_homology_group(p - 1) (subtopology X S)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   380
  by (meson iso_relative_homology_of_contractible is_isoI)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   381
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   382
lemma isomorphic_group_reduced_homology_of_contractible:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   383
   "\<lbrakk>contractible_space X; topspace X \<inter> S \<noteq> {}\<rbrakk>
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   384
        \<Longrightarrow> reduced_homology_group p (subtopology X S) \<cong> relative_homology_group(p + 1) X S"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   385
  by (metis add.commute add_diff_cancel_left' group.iso_sym group_relative_homology_group isomorphic_group_relative_homology_of_contractible)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   386
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   387
lemma iso_reduced_homology_by_contractible:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   388
   "\<lbrakk>contractible_space(subtopology X S); topspace X \<inter> S \<noteq> {}\<rbrakk>
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   389
      \<Longrightarrow> (hom_induced p X {} X S id) \<in> iso (reduced_homology_group p X) (relative_homology_group p X S)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   390
  using very_short_exact_sequence
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   391
    [of "reduced_homology_group (p - 1) (subtopology X S)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   392
        "relative_homology_group p X S"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   393
        "reduced_homology_group p X"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   394
        "reduced_homology_group p (subtopology X S)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   395
        "hom_boundary p X S"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   396
        "hom_induced p X {} X S id"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   397
        "hom_induced p (subtopology X S) {} X {} id"]
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   398
  by (meson exact_seq_cons_iff homology_exactness_reduced_1 homology_exactness_reduced_3 trivial_reduced_homology_group_contractible_space)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   399
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   400
lemma isomorphic_reduced_homology_by_contractible:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   401
   "\<lbrakk>contractible_space(subtopology X S); topspace X \<inter> S \<noteq> {}\<rbrakk>
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   402
      \<Longrightarrow> reduced_homology_group p X \<cong> relative_homology_group p X S"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   403
  using is_isoI iso_reduced_homology_by_contractible by blast
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   404
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   405
lemma isomorphic_relative_homology_by_contractible:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   406
   "\<lbrakk>contractible_space(subtopology X S); topspace X \<inter> S \<noteq> {}\<rbrakk>
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   407
      \<Longrightarrow> relative_homology_group p X S \<cong> reduced_homology_group p X"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   408
  using group.iso_sym group_reduced_homology_group isomorphic_reduced_homology_by_contractible by blast
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   409
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   410
lemma isomorphic_reduced_homology_by_singleton:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   411
   "a \<in> topspace X \<Longrightarrow> reduced_homology_group p X \<cong> relative_homology_group p X ({a})"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   412
  by (simp add: contractible_space_subtopology_singleton isomorphic_reduced_homology_by_contractible)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   413
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   414
lemma isomorphic_relative_homology_by_singleton:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   415
   "a \<in> topspace X \<Longrightarrow> relative_homology_group p X ({a}) \<cong> reduced_homology_group p X"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   416
  by (simp add: group.iso_sym isomorphic_reduced_homology_by_singleton)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   417
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   418
lemma reduced_homology_group_pair:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   419
  assumes "t1_space X" and a: "a \<in> topspace X" and b: "b \<in> topspace X" and "a \<noteq> b"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   420
  shows "reduced_homology_group p (subtopology X {a,b}) \<cong> homology_group p (subtopology X {a})"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   421
        (is  "?lhs \<cong> ?rhs")
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   422
proof -
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   423
  have "?lhs \<cong> relative_homology_group p (subtopology X {a,b}) {b}"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   424
    by (simp add: b isomorphic_reduced_homology_by_singleton topspace_subtopology)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   425
  also have "\<dots> \<cong> ?rhs"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   426
  proof -
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   427
    have sub: "subtopology X {a, b} closure_of {b} \<subseteq> subtopology X {a, b} interior_of {b}"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   428
      by (simp add: assms t1_space_subtopology closure_of_singleton subtopology_eq_discrete_topology_finite discrete_topology_closure_of)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   429
    show ?thesis
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   430
      using homology_excision_axiom [OF sub, of "{a,b}" p]
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   431
      by (simp add: assms(4) group.iso_sym is_isoI subtopology_subtopology)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   432
  qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   433
  finally show ?thesis .
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   434
qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   435
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   436
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   437
lemma deformation_retraction_relative_homology_group_isomorphisms:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   438
   "\<lbrakk>retraction_maps X Y r s; r ` U \<subseteq> V; s ` V \<subseteq> U; homotopic_with (\<lambda>h. h ` U \<subseteq> U) X X (s \<circ> r) id\<rbrakk>
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   439
    \<Longrightarrow> group_isomorphisms (relative_homology_group p X U) (relative_homology_group p Y V)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   440
             (hom_induced p X U Y V r) (hom_induced p Y V X U s)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   441
  apply (simp add: retraction_maps_def)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   442
  apply (rule homotopy_equivalence_relative_homology_group_isomorphisms)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   443
       apply (auto simp: image_subset_iff continuous_map_compose homotopic_with_equal)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   444
  done
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   445
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   446
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   447
lemma deformation_retract_relative_homology_group_isomorphisms:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   448
   "\<lbrakk>retraction_maps X Y r id; V \<subseteq> U; r ` U \<subseteq> V; homotopic_with (\<lambda>h. h ` U \<subseteq> U) X X r id\<rbrakk>
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   449
        \<Longrightarrow> group_isomorphisms (relative_homology_group p X U) (relative_homology_group p Y V)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   450
             (hom_induced p X U Y V r) (hom_induced p Y V X U id)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   451
  by (simp add: deformation_retraction_relative_homology_group_isomorphisms)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   452
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   453
lemma deformation_retract_relative_homology_group_isomorphism:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   454
   "\<lbrakk>retraction_maps X Y r id; V \<subseteq> U; r ` U \<subseteq> V; homotopic_with (\<lambda>h. h ` U \<subseteq> U) X X r id\<rbrakk>
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   455
    \<Longrightarrow> (hom_induced p X U Y V r) \<in> iso (relative_homology_group p X U) (relative_homology_group p Y V)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   456
  by (metis deformation_retract_relative_homology_group_isomorphisms group_isomorphisms_imp_iso)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   457
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   458
lemma deformation_retract_relative_homology_group_isomorphism_id:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   459
   "\<lbrakk>retraction_maps X Y r id; V \<subseteq> U; r ` U \<subseteq> V; homotopic_with (\<lambda>h. h ` U \<subseteq> U) X X r id\<rbrakk>
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   460
    \<Longrightarrow> (hom_induced p Y V X U id) \<in> iso (relative_homology_group p Y V) (relative_homology_group p X U)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   461
  by (metis deformation_retract_relative_homology_group_isomorphisms group_isomorphisms_imp_iso group_isomorphisms_sym)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   462
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   463
lemma deformation_retraction_imp_isomorphic_relative_homology_groups:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   464
   "\<lbrakk>retraction_maps X Y r s; r ` U \<subseteq> V; s ` V \<subseteq> U; homotopic_with (\<lambda>h. h ` U \<subseteq> U) X X (s \<circ> r) id\<rbrakk>
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   465
    \<Longrightarrow> relative_homology_group p X U \<cong> relative_homology_group p Y V"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   466
  by (blast intro: is_isoI group_isomorphisms_imp_iso deformation_retraction_relative_homology_group_isomorphisms)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   467
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   468
lemma deformation_retraction_imp_isomorphic_homology_groups:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   469
   "\<lbrakk>retraction_maps X Y r s; homotopic_with (\<lambda>h. True) X X (s \<circ> r) id\<rbrakk>
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   470
        \<Longrightarrow> homology_group p X \<cong> homology_group p Y"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   471
  by (simp add: deformation_retraction_imp_homotopy_equivalent_space homotopy_equivalent_space_imp_isomorphic_homology_groups)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   472
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   473
lemma deformation_retract_imp_isomorphic_relative_homology_groups:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   474
   "\<lbrakk>retraction_maps X X' r id; V \<subseteq> U; r ` U \<subseteq> V; homotopic_with (\<lambda>h. h ` U \<subseteq> U) X X r id\<rbrakk>
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   475
        \<Longrightarrow> relative_homology_group p X U \<cong> relative_homology_group p X' V"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   476
  by (simp add: deformation_retraction_imp_isomorphic_relative_homology_groups)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   477
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   478
lemma deformation_retract_imp_isomorphic_homology_groups:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   479
   "\<lbrakk>retraction_maps X X' r id; homotopic_with (\<lambda>h. True) X X r id\<rbrakk>
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   480
        \<Longrightarrow> homology_group p X \<cong> homology_group p X'"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   481
  by (simp add: deformation_retraction_imp_isomorphic_homology_groups)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   482
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   483
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   484
lemma epi_hom_induced_inclusion:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   485
  assumes "homotopic_with (\<lambda>x. True) X X id f" and "f ` (topspace X) \<subseteq> S"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   486
  shows "(hom_induced p (subtopology X S) {} X {} id)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   487
   \<in> epi (homology_group p (subtopology X S)) (homology_group p X)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   488
proof (rule epi_right_invertible)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   489
  show "hom_induced p (subtopology X S) {} X {} id
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   490
        \<in> hom (homology_group p (subtopology X S)) (homology_group p X)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   491
    by (simp add: hom_induced_empty_hom)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   492
  show "hom_induced p X {} (subtopology X S) {} f
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   493
      \<in> carrier (homology_group p X) \<rightarrow> carrier (homology_group p (subtopology X S))"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   494
    by (simp add: hom_induced_carrier)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   495
  fix x
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   496
  assume "x \<in> carrier (homology_group p X)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   497
  then show "hom_induced p (subtopology X S) {} X {} id (hom_induced p X {} (subtopology X S) {} f x) = x"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   498
    by (metis  assms continuous_map_id_subt continuous_map_in_subtopology hom_induced_compose' hom_induced_id homology_homotopy_empty homotopic_with_imp_continuous_maps image_empty order_refl)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   499
qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   500
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   501
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   502
lemma trivial_homomorphism_hom_induced_relativization:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   503
  assumes "homotopic_with (\<lambda>x. True) X X id f" and "f ` (topspace X) \<subseteq> S"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   504
  shows "trivial_homomorphism (homology_group p X) (relative_homology_group p X S)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   505
              (hom_induced p X {} X S id)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   506
proof -
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   507
  have "(hom_induced p (subtopology X S) {} X {} id)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   508
      \<in> epi (homology_group p (subtopology X S)) (homology_group p X)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   509
    by (metis assms epi_hom_induced_inclusion)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   510
  then show ?thesis
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   511
    using homology_exactness_axiom_3 [of p X S] homology_exactness_axiom_1 [of p X S]
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   512
    by (simp add: epi_def group.trivial_homomorphism_image group_hom.trivial_hom_iff)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   513
qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   514
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   515
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   516
lemma mon_hom_boundary_inclusion:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   517
  assumes "homotopic_with (\<lambda>x. True) X X id f" and "f ` (topspace X) \<subseteq> S"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   518
  shows "(hom_boundary p X S) \<in> mon
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   519
             (relative_homology_group p X S) (homology_group (p - 1) (subtopology X S))"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   520
proof -
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   521
  have "(hom_induced p (subtopology X S) {} X {} id)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   522
      \<in> epi (homology_group p (subtopology X S)) (homology_group p X)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   523
    by (metis assms epi_hom_induced_inclusion)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   524
  then show ?thesis
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   525
    using homology_exactness_axiom_3 [of p X S] homology_exactness_axiom_1 [of p X S]
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   526
    apply (simp add: mon_def epi_def hom_boundary_hom)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   527
    by (metis (no_types, hide_lams) group_hom.trivial_hom_iff group_hom.trivial_ker_imp_inj group_hom_axioms_def group_hom_def group_relative_homology_group hom_boundary_hom)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   528
qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   529
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   530
lemma short_exact_sequence_hom_induced_relativization:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   531
  assumes "homotopic_with (\<lambda>x. True) X X id f" and "f ` (topspace X) \<subseteq> S"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   532
  shows "short_exact_sequence (homology_group (p-1) X) (homology_group (p-1) (subtopology X S)) (relative_homology_group p X S)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   533
                   (hom_induced (p-1) (subtopology X S) {} X {} id) (hom_boundary p X S)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   534
  unfolding short_exact_sequence_iff
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   535
  by (intro conjI homology_exactness_axiom_2 epi_hom_induced_inclusion [OF assms] mon_hom_boundary_inclusion [OF assms])
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   536
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   537
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   538
lemma group_isomorphisms_homology_group_prod_deformation:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   539
  fixes p::int
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   540
  assumes "homotopic_with (\<lambda>x. True) X X id f" and "f ` (topspace X) \<subseteq> S"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   541
  obtains H K where
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   542
    "subgroup H (homology_group p (subtopology X S))"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   543
    "subgroup K (homology_group p (subtopology X S))"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   544
    "(\<lambda>(x, y). x \<otimes>\<^bsub>homology_group p (subtopology X S)\<^esub> y)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   545
             \<in> Group.iso (subgroup_generated (homology_group p (subtopology X S)) H \<times>\<times>
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   546
                          subgroup_generated (homology_group p (subtopology X S)) K)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   547
                         (homology_group p (subtopology X S))"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   548
    "hom_boundary (p + 1) X S
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   549
     \<in> Group.iso (relative_homology_group (p + 1) X S)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   550
         (subgroup_generated (homology_group p (subtopology X S)) H)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   551
    "hom_induced p (subtopology X S) {} X {} id
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   552
     \<in> Group.iso
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   553
         (subgroup_generated (homology_group p (subtopology X S)) K)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   554
         (homology_group p X)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   555
proof -
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   556
  let ?rhs = "relative_homology_group (p + 1) X S"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   557
  let ?pXS = "homology_group p (subtopology X S)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   558
  let ?pX = "homology_group p X"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   559
  let ?hb = "hom_boundary (p + 1) X S"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   560
  let ?hi = "hom_induced p (subtopology X S) {} X {} id"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   561
  have x: "short_exact_sequence (?pX) ?pXS ?rhs ?hi ?hb"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   562
    using short_exact_sequence_hom_induced_relativization [OF assms, of "p + 1"] by simp
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   563
  have contf: "continuous_map X (subtopology X S) f"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   564
    by (meson assms continuous_map_in_subtopology homotopic_with_imp_continuous_maps)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   565
  obtain H K where HK: "H \<lhd> ?pXS" "subgroup K ?pXS" "H \<inter> K \<subseteq> {one ?pXS}" "set_mult ?pXS H K = carrier ?pXS"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   566
    and iso: "?hb \<in> iso ?rhs (subgroup_generated ?pXS H)" "?hi \<in> iso (subgroup_generated ?pXS K) ?pX"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   567
    apply (rule splitting_lemma_right [OF x, where g' = "hom_induced p X {} (subtopology X S) {} f"])
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   568
      apply (simp add: hom_induced_empty_hom)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   569
     apply (simp add: contf hom_induced_compose')
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   570
     apply (metis (full_types) assms(1) hom_induced_id homology_homotopy_empty)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   571
    apply blast
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   572
    done
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   573
  show ?thesis
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   574
  proof
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   575
    show "subgroup H ?pXS"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   576
      using HK(1) normal_imp_subgroup by blast
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   577
    then show "(\<lambda>(x, y). x \<otimes>\<^bsub>?pXS\<^esub> y)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   578
        \<in> Group.iso (subgroup_generated (?pXS) H \<times>\<times> subgroup_generated (?pXS) K) (?pXS)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   579
      by (meson HK abelian_relative_homology_group group_disjoint_sum.iso_group_mul group_disjoint_sum_def group_relative_homology_group)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   580
    show "subgroup K ?pXS"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   581
      by (rule HK)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   582
    show "hom_boundary (p + 1) X S \<in> Group.iso ?rhs (subgroup_generated (?pXS) H)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   583
      using iso int_ops(4) by presburger
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   584
    show "hom_induced p (subtopology X S) {} X {} id \<in> Group.iso (subgroup_generated (?pXS) K) (?pX)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   585
      by (simp add: iso(2))
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   586
  qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   587
qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   588
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   589
lemma iso_homology_group_prod_deformation:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   590
  assumes "homotopic_with (\<lambda>x. True) X X id f" and "f ` (topspace X) \<subseteq> S"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   591
  shows "homology_group p (subtopology X S)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   592
      \<cong> DirProd (homology_group p X) (relative_homology_group(p + 1) X S)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   593
    (is "?G \<cong> DirProd ?H ?R")
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   594
proof -
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   595
  obtain H K where HK:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   596
    "(\<lambda>(x, y). x \<otimes>\<^bsub>?G\<^esub> y)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   597
     \<in> Group.iso (subgroup_generated (?G) H \<times>\<times> subgroup_generated (?G) K) (?G)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   598
    "hom_boundary (p + 1) X S \<in> Group.iso (?R) (subgroup_generated (?G) H)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   599
    "hom_induced p (subtopology X S) {} X {} id \<in> Group.iso (subgroup_generated (?G) K) (?H)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   600
    by (blast intro: group_isomorphisms_homology_group_prod_deformation [OF assms])
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   601
  have "?G \<cong> DirProd (subgroup_generated (?G) H) (subgroup_generated (?G) K)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   602
    by (meson DirProd_group HK(1) group.group_subgroup_generated group.iso_sym group_relative_homology_group is_isoI)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   603
  also have "\<dots> \<cong> DirProd ?R ?H"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   604
    by (meson HK group.DirProd_iso_trans group.group_subgroup_generated group.iso_sym group_relative_homology_group is_isoI)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   605
  also have "\<dots>  \<cong> DirProd ?H ?R"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   606
    by (simp add: DirProd_commute_iso)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   607
  finally show ?thesis .
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   608
qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   609
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   610
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   611
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   612
lemma iso_homology_contractible_space_subtopology1:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   613
  assumes "contractible_space X" "S \<subseteq> topspace X" "S \<noteq> {}"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   614
  shows  "homology_group  0 (subtopology X S) \<cong> DirProd integer_group (relative_homology_group(1) X S)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   615
proof -
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   616
  obtain f where  "homotopic_with (\<lambda>x. True) X X id f" and "f ` (topspace X) \<subseteq> S"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   617
    using assms contractible_space_alt by fastforce
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   618
  then have "homology_group 0 (subtopology X S) \<cong> homology_group 0 X \<times>\<times> relative_homology_group 1 X S"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   619
    using iso_homology_group_prod_deformation [of X _ S 0] by auto
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   620
  also have "\<dots> \<cong> integer_group \<times>\<times> relative_homology_group 1 X S"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   621
    using assms contractible_imp_path_connected_space group.DirProd_iso_trans group_relative_homology_group iso_refl isomorphic_integer_zeroth_homology_group by blast
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   622
  finally show ?thesis .
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   623
qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   624
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   625
lemma iso_homology_contractible_space_subtopology2:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   626
  "\<lbrakk>contractible_space X; S \<subseteq> topspace X; p \<noteq> 0; S \<noteq> {}\<rbrakk>
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   627
    \<Longrightarrow> homology_group p (subtopology X S) \<cong> relative_homology_group (p + 1) X S"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   628
  by (metis (no_types, hide_lams) add.commute isomorphic_group_reduced_homology_of_contractible topspace_subtopology topspace_subtopology_subset un_reduced_homology_group)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   629
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   630
lemma trivial_relative_homology_group_contractible_spaces:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   631
   "\<lbrakk>contractible_space X; contractible_space(subtopology X S); topspace X \<inter> S \<noteq> {}\<rbrakk>
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   632
        \<Longrightarrow> trivial_group(relative_homology_group p X S)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   633
  using group_reduced_homology_group group_relative_homology_group isomorphic_group_triviality isomorphic_relative_homology_by_contractible trivial_reduced_homology_group_contractible_space by blast
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   634
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   635
lemma trivial_relative_homology_group_alt:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   636
  assumes contf: "continuous_map X (subtopology X S) f" and hom: "homotopic_with (\<lambda>k. k ` S \<subseteq> S) X X f id"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   637
  shows "trivial_group (relative_homology_group p X S)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   638
proof (rule trivial_relative_homology_group_gen [OF contf])
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   639
  show "homotopic_with (\<lambda>h. True) (subtopology X S) (subtopology X S) f id"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   640
    using hom unfolding homotopic_with_def
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   641
    apply (rule ex_forward)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   642
    apply (auto simp: prod_topology_subtopology continuous_map_in_subtopology continuous_map_from_subtopology image_subset_iff topspace_subtopology)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   643
    done
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   644
  show "homotopic_with (\<lambda>k. True) X X f id"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   645
    using assms by (force simp: homotopic_with_def)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   646
qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   647
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   648
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   649
lemma iso_hom_induced_relativization_contractible:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   650
  assumes "contractible_space(subtopology X S)" "contractible_space(subtopology X T)" "T \<subseteq> S" "topspace X \<inter> T \<noteq> {}"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   651
  shows "(hom_induced p X T X S id) \<in> iso (relative_homology_group p X T) (relative_homology_group p X S)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   652
proof (rule very_short_exact_sequence)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   653
  show "exact_seq
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   654
         ([relative_homology_group(p - 1) (subtopology X S) T, relative_homology_group p X S, relative_homology_group p X T, relative_homology_group p (subtopology X S) T],
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   655
          [hom_relboundary p X S T, hom_induced p X T X S id, hom_induced p (subtopology X S) T X T id])"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   656
    using homology_exactness_triple_1 [OF \<open>T \<subseteq> S\<close>] homology_exactness_triple_3 [OF \<open>T \<subseteq> S\<close>]
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   657
    by fastforce
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   658
  show "trivial_group (relative_homology_group p (subtopology X S) T)" "trivial_group (relative_homology_group(p - 1) (subtopology X S) T)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   659
    using assms
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   660
    by (force simp: inf.absorb_iff2 subtopology_subtopology topspace_subtopology intro!: trivial_relative_homology_group_contractible_spaces)+
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   661
qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   662
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   663
corollary isomorphic_relative_homology_groups_relativization_contractible:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   664
  assumes "contractible_space(subtopology X S)" "contractible_space(subtopology X T)" "T \<subseteq> S" "topspace X \<inter> T \<noteq> {}"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   665
  shows "relative_homology_group p X T \<cong> relative_homology_group p X S"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   666
  by (rule is_isoI) (rule iso_hom_induced_relativization_contractible [OF assms])
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   667
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   668
lemma iso_hom_induced_inclusion_contractible:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   669
  assumes "contractible_space X" "contractible_space(subtopology X S)" "T \<subseteq> S" "topspace X \<inter> S \<noteq> {}"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   670
  shows "(hom_induced p (subtopology X S) T X T id)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   671
         \<in> iso (relative_homology_group p (subtopology X S) T) (relative_homology_group p X T)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   672
proof (rule very_short_exact_sequence)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   673
  show "exact_seq
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   674
         ([relative_homology_group p X S, relative_homology_group p X T,
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   675
           relative_homology_group p (subtopology X S) T, relative_homology_group (p+1) X S],
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   676
          [hom_induced p X T X S id, hom_induced p (subtopology X S) T X T id, hom_relboundary (p+1) X S T])"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   677
    using homology_exactness_triple_2 [OF \<open>T \<subseteq> S\<close>] homology_exactness_triple_3 [OF \<open>T \<subseteq> S\<close>]
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   678
    by (metis add_diff_cancel_left' diff_add_cancel exact_seq_cons_iff)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   679
  show "trivial_group (relative_homology_group (p+1) X S)" "trivial_group (relative_homology_group p X S)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   680
    using assms
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   681
    by (auto simp: subtopology_subtopology topspace_subtopology intro!: trivial_relative_homology_group_contractible_spaces)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   682
qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   683
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   684
corollary isomorphic_relative_homology_groups_inclusion_contractible:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   685
  assumes "contractible_space X" "contractible_space(subtopology X S)" "T \<subseteq> S" "topspace X \<inter> S \<noteq> {}"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   686
  shows "relative_homology_group p (subtopology X S) T \<cong> relative_homology_group p X T"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   687
  by (rule is_isoI) (rule iso_hom_induced_inclusion_contractible [OF assms])
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   688
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   689
lemma iso_hom_relboundary_contractible:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   690
  assumes "contractible_space X" "contractible_space(subtopology X T)" "T \<subseteq> S" "topspace X \<inter> T \<noteq> {}"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   691
  shows "hom_relboundary p X S T
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   692
         \<in> iso (relative_homology_group p X S) (relative_homology_group (p - 1) (subtopology X S) T)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   693
proof (rule very_short_exact_sequence)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   694
  show "exact_seq
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   695
         ([relative_homology_group (p - 1) X T, relative_homology_group (p - 1) (subtopology X S) T, relative_homology_group p X S, relative_homology_group p X T],
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   696
          [hom_induced (p - 1) (subtopology X S) T X T id, hom_relboundary p X S T, hom_induced p X T X S id])"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   697
    using homology_exactness_triple_1 [OF \<open>T \<subseteq> S\<close>] homology_exactness_triple_2 [OF \<open>T \<subseteq> S\<close>] by simp
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   698
  show "trivial_group (relative_homology_group p X T)" "trivial_group (relative_homology_group (p - 1) X T)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   699
    using assms
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   700
    by (auto simp: subtopology_subtopology topspace_subtopology intro!: trivial_relative_homology_group_contractible_spaces)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   701
qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   702
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   703
corollary isomorphic_relative_homology_groups_relboundary_contractible:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   704
  assumes "contractible_space X" "contractible_space(subtopology X T)" "T \<subseteq> S" "topspace X \<inter> T \<noteq> {}"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   705
  shows "relative_homology_group p X S \<cong> relative_homology_group (p - 1) (subtopology X S) T"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   706
  by (rule is_isoI) (rule iso_hom_relboundary_contractible [OF assms])
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   707
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   708
lemma isomorphic_relative_contractible_space_imp_homology_groups:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   709
  assumes "contractible_space X" "contractible_space Y" "S \<subseteq> topspace X" "T \<subseteq> topspace Y"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   710
     and ST: "S = {} \<longleftrightarrow> T = {}"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   711
     and iso: "\<And>p. relative_homology_group p X S \<cong> relative_homology_group p Y T"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   712
  shows "homology_group p (subtopology X S) \<cong> homology_group p (subtopology Y T)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   713
proof (cases "T = {}")
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   714
  case True
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   715
  have "homology_group p (subtopology X {}) \<cong> homology_group p (subtopology Y {})"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   716
    by (simp add: homeomorphic_empty_space_eq homeomorphic_space_imp_isomorphic_homology_groups)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   717
  then show ?thesis
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   718
    using ST True by blast
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   719
next
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   720
  case False
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   721
  show ?thesis
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   722
  proof (cases "p = 0")
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   723
    case True
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   724
    have "homology_group p (subtopology X S) \<cong> integer_group \<times>\<times> relative_homology_group 1 X S"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   725
      using assms True \<open>T \<noteq> {}\<close>
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   726
      by (simp add: iso_homology_contractible_space_subtopology1)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   727
    also have "\<dots>  \<cong> integer_group \<times>\<times> relative_homology_group 1 Y T"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   728
      by (simp add: assms group.DirProd_iso_trans iso_refl)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   729
    also have "\<dots> \<cong> homology_group p (subtopology Y T)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   730
      by (simp add: True \<open>T \<noteq> {}\<close> assms group.iso_sym iso_homology_contractible_space_subtopology1)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   731
    finally show ?thesis .
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   732
  next
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   733
    case False
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   734
    have "homology_group p (subtopology X S) \<cong> relative_homology_group (p+1) X S"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   735
      using assms False \<open>T \<noteq> {}\<close>
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   736
      by (simp add: iso_homology_contractible_space_subtopology2)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   737
    also have "\<dots>  \<cong> relative_homology_group (p+1) Y T"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   738
      by (simp add: assms)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   739
    also have "\<dots> \<cong> homology_group p (subtopology Y T)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   740
      by (simp add: False \<open>T \<noteq> {}\<close> assms group.iso_sym iso_homology_contractible_space_subtopology2)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   741
    finally show ?thesis .
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   742
  qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   743
qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   744
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   745
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   746
subsection\<open>Homology groups of spheres\<close>
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   747
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   748
lemma iso_reduced_homology_group_lower_hemisphere:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   749
  assumes "k \<le> n"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   750
  shows "hom_induced p (nsphere n) {} (nsphere n) {x. x k \<le> 0} id
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   751
      \<in> iso (reduced_homology_group p (nsphere n)) (relative_homology_group p (nsphere n) {x. x k \<le> 0})"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   752
proof (rule iso_reduced_homology_by_contractible)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   753
  show "contractible_space (subtopology (nsphere n) {x. x k \<le> 0})"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   754
    by (simp add: assms contractible_space_lower_hemisphere)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   755
  have "(\<lambda>i. if i = k then -1 else 0) \<in> topspace (nsphere n) \<inter> {x. x k \<le> 0}"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   756
    using assms by (simp add: nsphere if_distrib [of "\<lambda>x. x ^ 2"] cong: if_cong)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   757
  then show "topspace (nsphere n) \<inter> {x. x k \<le> 0} \<noteq> {}"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   758
    by blast
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   759
qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   760
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   761
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   762
lemma topspace_nsphere_1:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   763
  assumes "x \<in> topspace (nsphere n)" shows "(x k)\<^sup>2 \<le> 1"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   764
proof (cases "k \<le> n")
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   765
  case True
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   766
  have "(\<Sum>i \<in> {..n} - {k}. (x i)\<^sup>2) = (\<Sum>i\<le>n. (x i)\<^sup>2) - (x k)\<^sup>2"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   767
    using \<open>k \<le> n\<close> by (simp add: sum_diff)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   768
  then show ?thesis
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   769
    using assms
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   770
    apply (simp add: nsphere)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   771
    by (metis diff_ge_0_iff_ge sum_nonneg zero_le_power2)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   772
next
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   773
  case False
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   774
  then show ?thesis
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   775
    using assms by (simp add: nsphere)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   776
qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   777
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   778
lemma topspace_nsphere_1_eq_0:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   779
  fixes x :: "nat \<Rightarrow> real"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   780
  assumes x: "x \<in> topspace (nsphere n)" and xk: "(x k)\<^sup>2 = 1" and "i \<noteq> k"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   781
  shows "x i = 0"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   782
proof (cases "i \<le> n")
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   783
  case True
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   784
  have "k \<le> n"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   785
    using x
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   786
    by (simp add: nsphere) (metis not_less xk zero_neq_one zero_power2)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   787
  have "(\<Sum>i \<in> {..n} - {k}. (x i)\<^sup>2) = (\<Sum>i\<le>n. (x i)\<^sup>2) - (x k)\<^sup>2"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   788
    using \<open>k \<le> n\<close> by (simp add: sum_diff)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   789
  also have "\<dots> = 0"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   790
    using assms by (simp add: nsphere)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   791
  finally have "\<forall>i\<in>{..n} - {k}. (x i)\<^sup>2 = 0"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   792
    by (simp add: sum_nonneg_eq_0_iff)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   793
  then show ?thesis
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   794
    using True \<open>i \<noteq> k\<close> by auto
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   795
next
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   796
  case False
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   797
  with x show ?thesis
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   798
    by (simp add: nsphere)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   799
qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   800
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   801
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   802
proposition iso_relative_homology_group_upper_hemisphere:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   803
   "(hom_induced p (subtopology (nsphere n) {x. x k \<ge> 0}) {x. x k = 0} (nsphere n) {x. x k \<le> 0} id)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   804
  \<in> iso (relative_homology_group p (subtopology (nsphere n) {x. x k \<ge> 0}) {x. x k = 0})
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   805
        (relative_homology_group p (nsphere n) {x. x k \<le> 0})" (is "?h \<in> iso ?G ?H")
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   806
proof -
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   807
  have "topspace (nsphere n) \<inter> {x. x k < - 1 / 2} \<subseteq> {x \<in> topspace (nsphere n). x k \<in> {y. y \<le> - 1 / 2}}"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   808
    by force
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   809
  moreover have "closedin (nsphere n) {x \<in> topspace (nsphere n). x k \<in> {y. y \<le> - 1 / 2}}"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   810
    apply (rule closedin_continuous_map_preimage [OF continuous_map_nsphere_projection])
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   811
    using closed_Collect_le [of id "\<lambda>x::real. -1/2"] apply simp
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   812
    done
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   813
  ultimately have "nsphere n closure_of {x. x k < -1/2} \<subseteq> {x \<in> topspace (nsphere n). x k \<in> {y. y \<le> -1/2}}"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   814
    by (metis (no_types, lifting) closure_of_eq closure_of_mono closure_of_restrict)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   815
  also have "\<dots> \<subseteq> {x \<in> topspace (nsphere n). x k \<in> {y. y < 0}}"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   816
    by force
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   817
  also have "\<dots> \<subseteq> nsphere n interior_of {x. x k \<le> 0}"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   818
  proof (rule interior_of_maximal)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   819
    show "{x \<in> topspace (nsphere n). x k \<in> {y. y < 0}} \<subseteq> {x. x k \<le> 0}"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   820
      by force
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   821
    show "openin (nsphere n) {x \<in> topspace (nsphere n). x k \<in> {y. y < 0}}"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   822
      apply (rule openin_continuous_map_preimage [OF continuous_map_nsphere_projection])
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   823
      using open_Collect_less [of id "\<lambda>x::real. 0"] apply simp
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   824
      done
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   825
  qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   826
  finally have nn: "nsphere n closure_of {x. x k < -1/2} \<subseteq> nsphere n interior_of {x. x k \<le> 0}" .
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   827
  have [simp]: "{x::nat\<Rightarrow>real. x k \<le> 0} - {x. x k < - (1/2)} = {x. -1/2 \<le> x k \<and> x k \<le> 0}"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   828
               "UNIV - {x::nat\<Rightarrow>real. x k < a} = {x. a \<le> x k}" for a
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   829
    by auto
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   830
  let ?T01 = "top_of_set {0..1::real}"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   831
  let ?X12 = "subtopology (nsphere n) {x. -1/2 \<le> x k}"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   832
  have 1: "hom_induced p ?X12 {x. -1/2 \<le> x k \<and> x k \<le> 0} (nsphere n) {x. x k \<le> 0} id
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   833
         \<in> iso (relative_homology_group p ?X12 {x. -1/2 \<le> x k \<and> x k \<le> 0})
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   834
               ?H"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   835
    using homology_excision_axiom [OF nn subset_UNIV, of p] by simp
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   836
  define h where "h \<equiv> \<lambda>(T,x). let y = max (x k) (-T) in
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   837
                               (\<lambda>i. if i = k then y else sqrt(1 - y ^ 2) / sqrt(1 - x k ^ 2) * x i)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   838
  have h: "h(T,x) = x" if "0 \<le> T" "T \<le> 1" "(\<Sum>i\<le>n. (x i)\<^sup>2) = 1" and 0: "\<forall>i>n. x i = 0" "-T \<le> x k" for T x
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   839
    using that by (force simp: nsphere h_def Let_def max_def intro!: topspace_nsphere_1_eq_0)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   840
  have "continuous_map (prod_topology ?T01 ?X12) euclideanreal (\<lambda>x. h x i)" for i
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   841
  proof -
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   842
    show ?thesis
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   843
    proof (rule continuous_map_eq)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   844
      show "continuous_map (prod_topology ?T01 ?X12)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   845
         euclideanreal (\<lambda>(T, x). if 0 \<le> x k then x i else h (T, x) i)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   846
        unfolding case_prod_unfold
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   847
      proof (rule continuous_map_cases_le)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   848
        show "continuous_map (prod_topology ?T01 ?X12) euclideanreal (\<lambda>x. snd x k)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   849
          apply (subst continuous_map_of_snd [unfolded o_def])
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   850
          by (simp add: continuous_map_from_subtopology continuous_map_nsphere_projection)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   851
      next
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   852
        show "continuous_map (subtopology (prod_topology ?T01 ?X12) {p \<in> topspace (prod_topology ?T01 ?X12). 0 \<le> snd p k})
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   853
         euclideanreal (\<lambda>x. snd x i)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   854
          apply (rule continuous_map_from_subtopology)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   855
          apply (subst continuous_map_of_snd [unfolded o_def])
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   856
          by (simp add: continuous_map_from_subtopology continuous_map_nsphere_projection)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   857
      next
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   858
        note fst = continuous_map_into_fulltopology [OF continuous_map_subtopology_fst]
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   859
        have snd: "continuous_map (subtopology (prod_topology ?T01 (subtopology (nsphere n) T)) S) euclideanreal (\<lambda>x. snd x k)" for k S T
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   860
          apply (simp add: nsphere)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   861
          apply (rule continuous_map_from_subtopology)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   862
          apply (subst continuous_map_of_snd [unfolded o_def])
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   863
          using continuous_map_from_subtopology continuous_map_nsphere_projection nsphere by fastforce
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   864
        show "continuous_map (subtopology (prod_topology ?T01 ?X12) {p \<in> topspace (prod_topology ?T01 ?X12). snd p k \<le> 0})
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   865
         euclideanreal (\<lambda>x. h (fst x, snd x) i)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   866
          apply (simp add: h_def case_prod_unfold Let_def)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   867
          apply (intro conjI impI fst snd continuous_intros)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   868
          apply (auto simp: nsphere power2_eq_1_iff)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   869
          done
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   870
      qed (auto simp: nsphere h)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   871
    qed (auto simp: nsphere h)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   872
  qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   873
  moreover
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   874
  have "h ` ({0..1} \<times> (topspace (nsphere n) \<inter> {x. - (1/2) \<le> x k}))
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   875
     \<subseteq> {x. (\<Sum>i\<le>n. (x i)\<^sup>2) = 1 \<and> (\<forall>i>n. x i = 0)}"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   876
  proof -
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   877
    have "(\<Sum>i\<le>n. (h (T,x) i)\<^sup>2) = 1"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   878
      if x: "x \<in> topspace (nsphere n)" and xk: "- (1/2) \<le> x k" and T: "0 \<le> T" "T \<le> 1" for T x
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   879
    proof (cases "-T \<le> x k ")
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   880
      case True
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   881
      then show ?thesis
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   882
        using that by (auto simp: nsphere h)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   883
    next
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   884
      case False
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   885
      with x \<open>0 \<le> T\<close> have "k \<le> n"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   886
        apply (simp add: nsphere)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   887
        by (metis neg_le_0_iff_le not_le)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   888
      have "1 - (x k)\<^sup>2 \<ge> 0"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   889
        using topspace_nsphere_1 x by auto
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   890
      with False T \<open>k \<le> n\<close>
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   891
      have "(\<Sum>i\<le>n. (h (T,x) i)\<^sup>2) = T\<^sup>2 + (1 - T\<^sup>2) * (\<Sum>i\<in>{..n} - {k}. (x i)\<^sup>2 / (1 - (x k)\<^sup>2))"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   892
        unfolding h_def Let_def max_def
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   893
        by (simp add: not_le square_le_1 power_mult_distrib power_divide if_distrib [of "\<lambda>x. x ^ 2"]
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   894
              sum.delta_remove sum_distrib_left)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   895
      also have "\<dots> = 1"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   896
        using x False xk \<open>0 \<le> T\<close>
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   897
        by (simp add: nsphere sum_diff not_le \<open>k \<le> n\<close> power2_eq_1_iff flip: sum_divide_distrib)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   898
      finally show ?thesis .
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   899
    qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   900
    moreover
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   901
    have "h (T,x) i = 0"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   902
      if "x \<in> topspace (nsphere n)" "- (1/2) \<le> x k" and "n < i" "0 \<le> T" "T \<le> 1"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   903
      for T x i
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   904
    proof (cases "-T \<le> x k ")
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   905
      case False
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   906
      then show ?thesis
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   907
        using that by (auto simp: nsphere h_def Let_def not_le max_def)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   908
    qed (use that in \<open>auto simp: nsphere h\<close>)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   909
    ultimately show ?thesis
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   910
      by auto
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   911
  qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   912
  ultimately
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   913
  have cmh: "continuous_map (prod_topology ?T01 ?X12) (nsphere n) h"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   914
    by (subst (2) nsphere) (simp add: continuous_map_in_subtopology continuous_map_componentwise_UNIV)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   915
  have "hom_induced p (subtopology (nsphere n) {x. 0 \<le> x k})
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   916
             (topspace (subtopology (nsphere n) {x. 0 \<le> x k}) \<inter> {x. x k = 0}) ?X12
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   917
             (topspace ?X12 \<inter> {x. - 1/2 \<le> x k \<and> x k \<le> 0}) id
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   918
            \<in> iso (relative_homology_group p (subtopology (nsphere n) {x. 0 \<le> x k})
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   919
                       (topspace (subtopology (nsphere n) {x. 0 \<le> x k}) \<inter> {x. x k = 0}))
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   920
                (relative_homology_group p ?X12 (topspace ?X12 \<inter> {x. - 1/2 \<le> x k \<and> x k \<le> 0}))"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   921
  proof (rule deformation_retract_relative_homology_group_isomorphism_id)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   922
    show "retraction_maps ?X12 (subtopology (nsphere n) {x. 0 \<le> x k}) (h \<circ> (\<lambda>x. (0,x))) id"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   923
      unfolding retraction_maps_def
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   924
    proof (intro conjI ballI)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   925
      show "continuous_map ?X12 (subtopology (nsphere n) {x. 0 \<le> x k}) (h \<circ> Pair 0)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   926
        apply (simp add: continuous_map_in_subtopology)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   927
        apply (intro conjI continuous_map_compose [OF _ cmh] continuous_intros)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   928
          apply (auto simp: h_def Let_def)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   929
        done
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   930
      show "continuous_map (subtopology (nsphere n) {x. 0 \<le> x k}) ?X12 id"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   931
        by (simp add: continuous_map_in_subtopology) (auto simp: nsphere)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   932
    qed (simp add: nsphere h)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   933
  next
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   934
    have h0: "\<And>xa. \<lbrakk>xa \<in> topspace (nsphere n); - (1/2) \<le> xa k; xa k \<le> 0\<rbrakk> \<Longrightarrow> h (0, xa) k = 0"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   935
      by (simp add: h_def Let_def)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   936
    show "(h \<circ> (\<lambda>x. (0,x))) ` (topspace ?X12 \<inter> {x. - 1 / 2 \<le> x k \<and> x k \<le> 0})
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   937
        \<subseteq> topspace (subtopology (nsphere n) {x. 0 \<le> x k}) \<inter> {x. x k = 0}"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   938
      apply (auto simp: h0)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   939
      apply (rule subsetD [OF continuous_map_image_subset_topspace [OF cmh]])
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   940
      apply (force simp: nsphere)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   941
      done
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   942
    have hin: "\<And>t x. \<lbrakk>x \<in> topspace (nsphere n); - (1/2) \<le> x k; 0 \<le> t; t \<le> 1\<rbrakk> \<Longrightarrow> h (t,x) \<in> topspace (nsphere n)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   943
      apply (rule subsetD [OF continuous_map_image_subset_topspace [OF cmh]])
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   944
      apply (force simp: nsphere)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   945
      done
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   946
    have h1: "\<And>x. \<lbrakk>x \<in> topspace (nsphere n); - (1/2) \<le> x k\<rbrakk> \<Longrightarrow> h (1, x) = x"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   947
      by (simp add: h nsphere)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   948
    have "continuous_map (prod_topology ?T01 ?X12) (nsphere n) h"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   949
      using cmh by force
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   950
    then show "homotopic_with
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   951
                 (\<lambda>h. h ` (topspace ?X12 \<inter> {x. - 1 / 2 \<le> x k \<and> x k \<le> 0}) \<subseteq> topspace ?X12 \<inter> {x. - 1 / 2 \<le> x k \<and> x k \<le> 0})
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   952
                 ?X12 ?X12 (h \<circ> (\<lambda>x. (0,x))) id"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   953
      apply (subst homotopic_with, force)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   954
      apply (rule_tac x=h in exI)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   955
      apply (auto simp: hin h1 continuous_map_in_subtopology)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   956
         apply (auto simp: h_def Let_def max_def)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   957
      done
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   958
  qed auto
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   959
  then have 2: "hom_induced p (subtopology (nsphere n) {x. 0 \<le> x k}) {x. x k = 0}
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   960
             ?X12 {x. - 1/2 \<le> x k \<and> x k \<le> 0} id
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   961
            \<in> Group.iso
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   962
                (relative_homology_group p (subtopology (nsphere n) {x. 0 \<le> x k}) {x. x k = 0})
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   963
                (relative_homology_group p ?X12 {x. - 1/2 \<le> x k \<and> x k \<le> 0})"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   964
    by (metis hom_induced_restrict relative_homology_group_restrict topspace_subtopology)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   965
  show ?thesis
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   966
    using iso_set_trans [OF 2 1]
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   967
    by (simp add: subset_iff continuous_map_in_subtopology flip: hom_induced_compose)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   968
qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   969
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   970
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   971
corollary iso_upper_hemisphere_reduced_homology_group:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   972
   "(hom_boundary (1 + p) (subtopology (nsphere (Suc n)) {x. x(Suc n) \<ge> 0}) {x. x(Suc n) = 0})
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   973
  \<in> iso (relative_homology_group (1 + p) (subtopology (nsphere (Suc n)) {x. x(Suc n) \<ge> 0}) {x. x(Suc n) = 0})
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   974
        (reduced_homology_group p (nsphere n))"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   975
proof -
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   976
  have "{x. 0 \<le> x (Suc n)} \<inter> {x. x (Suc n) = 0} = {x. x (Suc n) = (0::real)}"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   977
    by auto
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   978
  then have n: "nsphere n = subtopology (subtopology (nsphere (Suc n)) {x. x(Suc n) \<ge> 0}) {x. x(Suc n) = 0}"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   979
    by (simp add: subtopology_nsphere_equator subtopology_subtopology)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   980
  have ne: "(\<lambda>i. if i = n then 1 else 0) \<in> topspace (subtopology (nsphere (Suc n)) {x. 0 \<le> x (Suc n)}) \<inter> {x. x (Suc n) = 0}"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   981
    by (simp add: nsphere if_distrib [of "\<lambda>x. x ^ 2"] cong: if_cong)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   982
  show ?thesis
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   983
    unfolding n
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   984
    apply (rule iso_relative_homology_of_contractible [where p = "1 + p", simplified])
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   985
    using contractible_space_upper_hemisphere ne apply blast+
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   986
    done
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   987
qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   988
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   989
corollary iso_reduced_homology_group_upper_hemisphere:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   990
  assumes "k \<le> n"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   991
  shows "hom_induced p (nsphere n) {} (nsphere n) {x. x k \<ge> 0} id
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   992
      \<in> iso (reduced_homology_group p (nsphere n)) (relative_homology_group p (nsphere n) {x. x k \<ge> 0})"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   993
proof (rule iso_reduced_homology_by_contractible [OF contractible_space_upper_hemisphere [OF assms]])
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   994
  have "(\<lambda>i. if i = k then 1 else 0) \<in> topspace (nsphere n) \<inter> {x. 0 \<le> x k}"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   995
    using assms by (simp add: nsphere if_distrib [of "\<lambda>x. x ^ 2"] cong: if_cong)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   996
  then show "topspace (nsphere n) \<inter> {x. 0 \<le> x k} \<noteq> {}"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   997
    by blast
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   998
qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   999
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1000
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1001
lemma iso_relative_homology_group_lower_hemisphere:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1002
  "hom_induced p (subtopology (nsphere n) {x. x k \<le> 0}) {x. x k = 0} (nsphere n) {x. x k \<ge> 0} id
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1003
  \<in> iso (relative_homology_group p (subtopology (nsphere n) {x. x k \<le> 0}) {x. x k = 0})
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1004
        (relative_homology_group p (nsphere n) {x. x k \<ge> 0})" (is "?k \<in> iso ?G ?H")
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1005
proof -
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1006
  define r where "r \<equiv> \<lambda>x i. if i = k then -x i else (x i::real)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1007
  then have [simp]: "r \<circ> r = id"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1008
    by force
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1009
  have cmr: "continuous_map (subtopology (nsphere n) S) (nsphere n) r" for S
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1010
    using continuous_map_nsphere_reflection [of n k]
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1011
    by (simp add: continuous_map_from_subtopology r_def)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1012
  let ?f = "hom_induced p (subtopology (nsphere n) {x. x k \<le> 0}) {x. x k = 0}
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1013
                          (subtopology (nsphere n) {x. x k \<ge> 0}) {x. x k = 0} r"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1014
  let ?g = "hom_induced p (subtopology (nsphere n) {x. x k \<ge> 0}) {x. x k = 0} (nsphere n) {x. x k \<le> 0} id"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1015
  let ?h = "hom_induced p (nsphere n) {x. x k \<le> 0} (nsphere n) {x. x k \<ge> 0} r"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1016
  obtain f h where
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1017
        f: "f \<in> iso ?G (relative_homology_group p (subtopology (nsphere n) {x. x k \<ge> 0}) {x. x k = 0})"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1018
    and h: "h \<in> iso (relative_homology_group p (nsphere n) {x. x k \<le> 0}) ?H"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1019
    and eq: "h \<circ> ?g \<circ> f = ?k"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1020
  proof
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1021
    have hmr: "homeomorphic_map (nsphere n) (nsphere n) r"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1022
      unfolding homeomorphic_map_maps
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1023
      by (metis \<open>r \<circ> r = id\<close> cmr homeomorphic_maps_involution pointfree_idE subtopology_topspace)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1024
    then have hmrs: "homeomorphic_map (subtopology (nsphere n) {x. x k \<le> 0}) (subtopology (nsphere n) {x. x k \<ge> 0}) r"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1025
      by (simp add: homeomorphic_map_subtopologies_alt r_def)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1026
    have rimeq: "r ` (topspace (subtopology (nsphere n) {x. x k \<le> 0}) \<inter> {x. x k = 0})
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1027
               = topspace (subtopology (nsphere n) {x. 0 \<le> x k}) \<inter> {x. x k = 0}"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1028
      using continuous_map_eq_topcontinuous_at continuous_map_nsphere_reflection topcontinuous_at_atin
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1029
      by (fastforce simp: r_def)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1030
    show "?f \<in> iso ?G (relative_homology_group p (subtopology (nsphere n) {x. x k \<ge> 0}) {x. x k = 0})"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1031
      using homeomorphic_map_relative_homology_iso [OF hmrs Int_lower1 rimeq]
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1032
      by (metis hom_induced_restrict relative_homology_group_restrict)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1033
    have rimeq: "r ` (topspace (nsphere n) \<inter> {x. x k \<le> 0}) = topspace (nsphere n) \<inter> {x. 0 \<le> x k}"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1034
      by (metis hmrs homeomorphic_imp_surjective_map topspace_subtopology)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1035
    show "?h \<in> Group.iso (relative_homology_group p (nsphere n) {x. x k \<le> 0}) ?H"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1036
      using homeomorphic_map_relative_homology_iso [OF hmr Int_lower1 rimeq] by simp
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1037
    have [simp]: "\<And>x. x k = 0 \<Longrightarrow> r x k = 0"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1038
      by (auto simp: r_def)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1039
    have "?h \<circ> ?g \<circ> ?f
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1040
        = hom_induced p (subtopology (nsphere n) {x. 0 \<le> x k}) {x. x k = 0} (nsphere n) {x. 0 \<le> x k} r \<circ>
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1041
          hom_induced p (subtopology (nsphere n) {x. x k \<le> 0}) {x. x k = 0} (subtopology (nsphere n) {x. 0 \<le> x k}) {x. x k = 0} r"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1042
      apply (subst hom_induced_compose [symmetric])
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1043
      using continuous_map_nsphere_reflection apply (force simp: r_def)+
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1044
      done
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1045
    also have "\<dots> = ?k"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1046
      apply (subst hom_induced_compose [symmetric])
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1047
          apply (simp_all add: image_subset_iff cmr)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1048
      using hmrs homeomorphic_imp_continuous_map apply blast
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1049
      done
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1050
    finally show "?h \<circ> ?g \<circ> ?f = ?k" .
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1051
  qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1052
  with iso_relative_homology_group_upper_hemisphere [of p n k]
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1053
  have "h \<circ> hom_induced p (subtopology (nsphere n) {f. 0 \<le> f k}) {f. f k = 0} (nsphere n) {f. f k \<le> 0} id \<circ> f
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1054
  \<in> Group.iso ?G (relative_homology_group p (nsphere n) {f. 0 \<le> f k})"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1055
    using f h iso_set_trans by blast
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1056
  then show ?thesis
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1057
    by (simp add: eq)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1058
qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1059
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1060
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1061
lemma iso_lower_hemisphere_reduced_homology_group:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1062
   "hom_boundary (1 + p) (subtopology (nsphere (Suc n)) {x. x(Suc n) \<le> 0}) {x. x(Suc n) = 0}
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1063
  \<in> iso (relative_homology_group (1 + p) (subtopology (nsphere (Suc n)) {x. x(Suc n) \<le> 0})
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1064
                        {x. x(Suc n) = 0})
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1065
        (reduced_homology_group p (nsphere n))"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1066
proof -
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1067
  have "{x. (\<Sum>i\<le>n. (x i)\<^sup>2) = 1 \<and> (\<forall>i>n. x i = 0)} =
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1068
       ({x. (\<Sum>i\<le>n. (x i)\<^sup>2) + (x (Suc n))\<^sup>2 = 1 \<and> (\<forall>i>Suc n. x i = 0)} \<inter> {x. x (Suc n) \<le> 0} \<inter>
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1069
        {x. x (Suc n) = (0::real)})"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1070
    by (force simp: dest: Suc_lessI)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1071
  then have n: "nsphere n = subtopology (subtopology (nsphere (Suc n)) {x. x(Suc n) \<le> 0}) {x. x(Suc n) = 0}"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1072
    by (simp add: nsphere subtopology_subtopology)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1073
  have ne: "(\<lambda>i. if i = n then 1 else 0) \<in> topspace (subtopology (nsphere (Suc n)) {x. x (Suc n) \<le> 0}) \<inter> {x. x (Suc n) = 0}"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1074
    by (simp add: nsphere if_distrib [of "\<lambda>x. x ^ 2"] cong: if_cong)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1075
  show ?thesis
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1076
    unfolding n
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1077
    apply (rule iso_relative_homology_of_contractible [where p = "1 + p", simplified])
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1078
    using contractible_space_lower_hemisphere ne apply blast+
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1079
    done
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1080
qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1081
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1082
lemma isomorphism_sym:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1083
  "\<lbrakk>f \<in> iso G1 G2; \<And>x. x \<in> carrier G1 \<Longrightarrow> r'(f x) = f(r x);
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1084
     \<And>x. x \<in> carrier G1 \<Longrightarrow> r x \<in> carrier G1; group G1; group G2\<rbrakk>
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1085
      \<Longrightarrow> \<exists>f \<in> iso G2 G1. \<forall>x \<in> carrier G2. r(f x) = f(r' x)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1086
  apply (clarsimp simp add: group.iso_iff_group_isomorphisms Bex_def)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1087
  by (metis (full_types) group_isomorphisms_def group_isomorphisms_sym hom_in_carrier)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1088
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1089
lemma isomorphism_trans:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1090
  "\<lbrakk>\<exists>f \<in> iso G1 G2. \<forall>x \<in> carrier G1. r2(f x) = f(r1 x); \<exists>f \<in> iso G2 G3. \<forall>x \<in> carrier G2. r3(f x) = f(r2 x)\<rbrakk>
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1091
   \<Longrightarrow> \<exists>f \<in> iso G1 G3. \<forall>x \<in> carrier G1. r3(f x) = f(r1 x)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1092
  apply clarify
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1093
  apply (rename_tac g f)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1094
  apply (rule_tac x="f \<circ> g" in bexI)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1095
  apply (metis iso_iff comp_apply hom_in_carrier)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1096
  using iso_set_trans by blast
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1097
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1098
lemma reduced_homology_group_nsphere_step:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1099
   "\<exists>f \<in> iso(reduced_homology_group p (nsphere n))
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1100
            (reduced_homology_group (1 + p) (nsphere (Suc n))).
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1101
        \<forall>c \<in> carrier(reduced_homology_group p (nsphere n)).
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1102
             hom_induced (1 + p) (nsphere(Suc n)) {} (nsphere(Suc n)) {}
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1103
                         (\<lambda>x i. if i = 0 then -x i else x i) (f c)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1104
           = f (hom_induced p (nsphere n) {} (nsphere n) {} (\<lambda>x i. if i = 0 then -x i else x i) c)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1105
proof -
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1106
  define r where "r \<equiv> \<lambda>x::nat\<Rightarrow>real. \<lambda>i. if i = 0 then -x i else x i"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1107
  have cmr: "continuous_map (nsphere n) (nsphere n) r" for n
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1108
    unfolding r_def by (rule continuous_map_nsphere_reflection)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1109
  have rsub: "r ` {x. 0 \<le> x (Suc n)} \<subseteq> {x. 0 \<le> x (Suc n)}" "r ` {x. x (Suc n) \<le> 0} \<subseteq> {x. x (Suc n) \<le> 0}" "r ` {x. x (Suc n) = 0} \<subseteq> {x. x (Suc n) = 0}"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1110
    by (force simp: r_def)+
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1111
  let ?sub = "subtopology (nsphere (Suc n)) {x. x (Suc n) \<ge> 0}"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1112
  let ?G2 = "relative_homology_group (1 + p) ?sub {x. x (Suc n) = 0}"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1113
  let ?r2 = "hom_induced (1 + p) ?sub {x. x (Suc n) = 0} ?sub {x. x (Suc n) = 0} r"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1114
  let ?j = "\<lambda>p n. hom_induced p (nsphere n) {} (nsphere n) {} r"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1115
  show ?thesis
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1116
    unfolding r_def [symmetric]
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1117
  proof (rule isomorphism_trans)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1118
    let ?f = "hom_boundary (1 + p) ?sub {x. x (Suc n) = 0}"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1119
    show "\<exists>f\<in>Group.iso (reduced_homology_group p (nsphere n)) ?G2.
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1120
           \<forall>c\<in>carrier (reduced_homology_group p (nsphere n)). ?r2 (f c) = f (?j p n c)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1121
    proof (rule isomorphism_sym)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1122
      show "?f \<in> Group.iso ?G2 (reduced_homology_group p (nsphere n))"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1123
        using iso_upper_hemisphere_reduced_homology_group
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1124
        by (metis add.commute)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1125
    next
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1126
      fix c
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1127
      assume "c \<in> carrier ?G2"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1128
      have cmrs: "continuous_map ?sub ?sub r"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1129
        by (metis (mono_tags, lifting) IntE cmr continuous_map_from_subtopology continuous_map_in_subtopology image_subset_iff rsub(1) topspace_subtopology)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1130
      have "hom_induced p (nsphere n) {} (nsphere n) {} r \<circ> hom_boundary (1 + p) ?sub {x. x (Suc n) = 0}
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1131
          = hom_boundary (1 + p) ?sub {x. x (Suc n) = 0} \<circ>
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1132
            hom_induced (1 + p) ?sub {x. x (Suc n) = 0} ?sub {x. x (Suc n) = 0} r"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1133
        using naturality_hom_induced [OF cmrs rsub(3), symmetric, of "1+p", simplified]
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1134
        by (simp add: subtopology_subtopology subtopology_nsphere_equator flip: Collect_conj_eq cong: rev_conj_cong)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1135
      then show "?j p n (?f c) = ?f (hom_induced (1 + p) ?sub {x. x (Suc n) = 0} ?sub {x. x (Suc n) = 0} r c)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1136
        by (metis comp_def)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1137
    next
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1138
      fix c
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1139
      assume "c \<in> carrier ?G2"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1140
      show "hom_induced (1 + p) ?sub {x. x (Suc n) = 0} ?sub {x. x (Suc n) = 0} r c \<in> carrier ?G2"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1141
        using hom_induced_carrier by blast
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1142
    qed auto
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1143
  next
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1144
    let ?H2 = "relative_homology_group (1 + p) (nsphere (Suc n)) {x. x (Suc n) \<le> 0}"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1145
    let ?s2 = "hom_induced (1 + p) (nsphere (Suc n)) {x. x (Suc n) \<le> 0} (nsphere (Suc n)) {x. x (Suc n) \<le> 0} r"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1146
    show "\<exists>f\<in>Group.iso ?G2 (reduced_homology_group (1 + p) (nsphere (Suc n))). \<forall>c\<in>carrier ?G2. ?j (1 + p) (Suc n) (f c)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1147
            = f (?r2 c)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1148
    proof (rule isomorphism_trans)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1149
      show "\<exists>f\<in>Group.iso ?G2 ?H2.
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1150
                 \<forall>c\<in>carrier ?G2.
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1151
                    ?s2 (f c) = f (hom_induced (1 + p) ?sub {x. x (Suc n) = 0} ?sub {x. x (Suc n) = 0} r c)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1152
      proof (intro ballI bexI)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1153
        fix c
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1154
        assume "c \<in> carrier (relative_homology_group (1 + p) ?sub {x. x (Suc n) = 0})"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1155
        show "?s2 (hom_induced (1 + p) ?sub {x. x (Suc n) = 0} (nsphere (Suc n)) {x. x (Suc n) \<le> 0} id c)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1156
            = hom_induced (1 + p) ?sub {x. x (Suc n) = 0} (nsphere (Suc n)) {x. x (Suc n) \<le> 0} id (?r2 c)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1157
          apply (simp add: rsub hom_induced_compose' Collect_mono_iff cmr)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1158
          apply (subst hom_induced_compose')
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1159
              apply (simp_all add: continuous_map_in_subtopology continuous_map_from_subtopology [OF cmr] rsub)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1160
           apply (auto simp: r_def)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1161
          done
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1162
      qed (simp add: iso_relative_homology_group_upper_hemisphere)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1163
    next
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1164
      let ?h = "hom_induced (1 + p) (nsphere(Suc n)) {} (nsphere (Suc n)) {x. x(Suc n) \<le> 0} id"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1165
      show "\<exists>f\<in>Group.iso ?H2 (reduced_homology_group (1 + p) (nsphere (Suc n))).
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1166
               \<forall>c\<in>carrier ?H2. ?j (1 + p) (Suc n) (f c) = f (?s2 c)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1167
      proof (rule isomorphism_sym)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1168
        show "?h \<in> Group.iso (reduced_homology_group (1 + p) (nsphere (Suc n)))
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1169
               (relative_homology_group (1 + p) (nsphere (Suc n)) {x. x (Suc n) \<le> 0})"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1170
          using iso_reduced_homology_group_lower_hemisphere by blast
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1171
      next
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1172
        fix c
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1173
        assume "c \<in> carrier (reduced_homology_group (1 + p) (nsphere (Suc n)))"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1174
        show "?s2 (?h c) = ?h (?j (1 + p) (Suc n)  c)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1175
          by (simp add: hom_induced_compose' cmr rsub)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1176
      next
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1177
        fix c
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1178
        assume "c \<in> carrier (reduced_homology_group (1 + p) (nsphere (Suc n)))"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1179
        then show "hom_induced (1 + p) (nsphere (Suc n)) {} (nsphere (Suc n)) {} r c
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1180
        \<in> carrier (reduced_homology_group (1 + p) (nsphere (Suc n)))"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1181
          by (simp add: hom_induced_reduced)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1182
      qed auto
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1183
    qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1184
  qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1185
qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1186
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1187
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1188
lemma reduced_homology_group_nsphere_aux:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1189
  "if p = int n then reduced_homology_group n (nsphere n) \<cong> integer_group
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1190
                     else trivial_group(reduced_homology_group p (nsphere n))"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1191
proof (induction n arbitrary: p)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1192
  case 0
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1193
  let ?a = "\<lambda>i::nat. if i = 0 then 1 else (0::real)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1194
  let ?b = "\<lambda>i::nat. if i = 0 then -1 else (0::real)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1195
  have st: "subtopology (powertop_real UNIV) {?a, ?b} = nsphere 0"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1196
  proof -
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1197
    have "{?a, ?b} = {x. (x 0)\<^sup>2 = 1 \<and> (\<forall>i>0. x i = 0)}"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1198
      using power2_eq_iff by fastforce
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1199
    then show ?thesis
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1200
      by (simp add: nsphere)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1201
  qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1202
  have *: "reduced_homology_group p (subtopology (powertop_real UNIV) {?a, ?b}) \<cong>
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1203
        homology_group p (subtopology (powertop_real UNIV) {?a})"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1204
    apply (rule reduced_homology_group_pair)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1205
      apply (simp_all add: fun_eq_iff)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1206
    apply (simp add: open_fun_def separation_t1 t1_space_def)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1207
    done
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1208
  have "reduced_homology_group 0 (nsphere 0) \<cong> integer_group" if "p=0"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1209
  proof -
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1210
    have "reduced_homology_group 0 (nsphere 0) \<cong> homology_group 0 (top_of_set {?a})" if "p=0"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1211
      by (metis * euclidean_product_topology st that)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1212
    also have "\<dots> \<cong> integer_group"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1213
      by (simp add: homology_coefficients)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1214
    finally show ?thesis
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1215
      using that by blast
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1216
  qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1217
  moreover have "trivial_group (reduced_homology_group p (nsphere 0))" if "p\<noteq>0"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1218
    using * that homology_dimension_axiom [of "subtopology (powertop_real UNIV) {?a}" ?a p]
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1219
    using isomorphic_group_triviality st by force
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1220
  ultimately show ?case
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1221
    by auto
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1222
next
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1223
  case (Suc n)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1224
  have eq: "reduced_homology_group (int n) (nsphere n) \<cong> integer_group" if "p-1 = n"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1225
    by (simp add: Suc.IH)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1226
  have neq: "trivial_group (reduced_homology_group (p-1) (nsphere n))" if "p-1 \<noteq> n"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1227
    by (simp add: Suc.IH that)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1228
  have iso: "reduced_homology_group p (nsphere (Suc n)) \<cong> reduced_homology_group (p-1) (nsphere n)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1229
    using reduced_homology_group_nsphere_step [of "p-1" n]  group.iso_sym [OF _ is_isoI] group_reduced_homology_group
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1230
    by fastforce
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1231
  then show ?case
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1232
    using eq iso_trans iso isomorphic_group_triviality neq
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1233
    by (metis (no_types, hide_lams) add.commute add_left_cancel diff_add_cancel group_reduced_homology_group of_nat_Suc)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1234
qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1235
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1236
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1237
lemma reduced_homology_group_nsphere:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1238
  "reduced_homology_group n (nsphere n) \<cong> integer_group"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1239
  "p \<noteq> n \<Longrightarrow> trivial_group(reduced_homology_group p (nsphere n))"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1240
  using reduced_homology_group_nsphere_aux by auto
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1241
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1242
lemma cyclic_reduced_homology_group_nsphere:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1243
   "cyclic_group(reduced_homology_group p (nsphere n))"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1244
  by (metis reduced_homology_group_nsphere trivial_imp_cyclic_group cyclic_integer_group
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1245
      group_integer_group group_reduced_homology_group isomorphic_group_cyclicity)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1246
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1247
lemma trivial_reduced_homology_group_nsphere:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1248
   "trivial_group(reduced_homology_group p (nsphere n)) \<longleftrightarrow> (p \<noteq> n)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1249
  using group_integer_group isomorphic_group_triviality nontrivial_integer_group reduced_homology_group_nsphere(1) reduced_homology_group_nsphere(2) trivial_group_def by blast
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1250
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1251
lemma non_contractible_space_nsphere: "\<not> (contractible_space(nsphere n))"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1252
  proof (clarsimp simp add: contractible_eq_homotopy_equivalent_singleton_subtopology)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1253
  fix a :: "nat \<Rightarrow> real"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1254
  assume a: "a \<in> topspace (nsphere n)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1255
    and he: "nsphere n homotopy_equivalent_space subtopology (nsphere n) {a}"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1256
  have "trivial_group (reduced_homology_group (int n) (subtopology (nsphere n) {a}))"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1257
    by (simp add: a homology_dimension_reduced [where a=a])
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1258
  then show "False"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1259
    using isomorphic_group_triviality [OF homotopy_equivalent_space_imp_isomorphic_reduced_homology_groups [OF he, of n]]
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1260
    by (simp add: trivial_reduced_homology_group_nsphere)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1261
qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1262
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1263
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1264
subsection\<open>Brouwer degree of a Map\<close>
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1265
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1266
definition Brouwer_degree2 :: "nat \<Rightarrow> ((nat \<Rightarrow> real) \<Rightarrow> nat \<Rightarrow> real) \<Rightarrow> int"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1267
  where
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1268
 "Brouwer_degree2 p f \<equiv>
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1269
    @d::int. \<forall>x \<in> carrier(reduced_homology_group p (nsphere p)).
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1270
                hom_induced p (nsphere p) {} (nsphere p) {} f x = pow (reduced_homology_group p (nsphere p)) x d"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1271
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1272
lemma Brouwer_degree2_eq:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1273
   "(\<And>x. x \<in> topspace(nsphere p) \<Longrightarrow> f x = g x) \<Longrightarrow> Brouwer_degree2 p f = Brouwer_degree2 p g"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1274
  unfolding Brouwer_degree2_def Ball_def
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1275
  apply (intro Eps_cong all_cong)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1276
  by (metis (mono_tags, lifting) hom_induced_eq)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1277
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1278
lemma Brouwer_degree2:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1279
  assumes "x \<in> carrier(reduced_homology_group p (nsphere p))"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1280
  shows "hom_induced p (nsphere p) {} (nsphere p) {} f x
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1281
       = pow (reduced_homology_group p (nsphere p)) x (Brouwer_degree2 p f)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1282
       (is "?h x = pow ?G x _")
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1283
proof (cases "continuous_map(nsphere p) (nsphere p) f")
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1284
  case True
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1285
  interpret group ?G
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1286
    by simp
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1287
  interpret group_hom ?G ?G ?h
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1288
    using hom_induced_reduced_hom group_hom_axioms_def group_hom_def is_group by blast
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1289
  obtain a where a: "a \<in> carrier ?G"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1290
    and aeq: "subgroup_generated ?G {a} = ?G"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1291
    using cyclic_reduced_homology_group_nsphere [of p p] by (auto simp: cyclic_group_def)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1292
  then have carra: "carrier (subgroup_generated ?G {a}) = range (\<lambda>n::int. pow ?G a n)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1293
    using carrier_subgroup_generated_by_singleton by blast
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1294
  moreover have "?h a \<in> carrier (subgroup_generated ?G {a})"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1295
    by (simp add: a aeq hom_induced_reduced)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1296
  ultimately obtain d::int where d: "?h a = pow ?G a d"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1297
    by auto
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1298
  have *: "hom_induced (int p) (nsphere p) {} (nsphere p) {} f x = x [^]\<^bsub>?G\<^esub> d"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1299
    if x: "x \<in> carrier ?G" for x
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1300
  proof -
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1301
    obtain n::int where xeq: "x = pow ?G a n"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1302
      using carra x aeq by moura
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1303
    show ?thesis
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1304
      by (simp add: xeq a d hom_int_pow int_pow_pow mult.commute)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1305
  qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1306
  show ?thesis
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1307
    unfolding Brouwer_degree2_def
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1308
    apply (rule someI2 [where a=d])
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1309
    using assms * apply blast+
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1310
    done
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1311
next
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1312
  case False
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1313
  show ?thesis
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1314
    unfolding Brouwer_degree2_def
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1315
    by (rule someI2 [where a=0]) (simp_all add: hom_induced_default False one_reduced_homology_group assms)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1316
qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1317
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1318
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1319
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1320
lemma Brouwer_degree2_iff:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1321
  assumes f: "continuous_map (nsphere p) (nsphere p) f"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1322
    and x: "x \<in> carrier(reduced_homology_group p (nsphere p))"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1323
  shows "(hom_induced (int p) (nsphere p) {} (nsphere p) {} f x =
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1324
         x [^]\<^bsub>reduced_homology_group (int p) (nsphere p)\<^esub> d)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1325
    \<longleftrightarrow> (x = \<one>\<^bsub>reduced_homology_group (int p) (nsphere p)\<^esub> \<or> Brouwer_degree2 p f = d)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1326
    (is  "(?h x = x [^]\<^bsub>?G\<^esub> d) \<longleftrightarrow> _")
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1327
proof -
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1328
  interpret group "?G"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1329
    by simp
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1330
  obtain a where a: "a \<in> carrier ?G"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1331
    and aeq: "subgroup_generated ?G {a} = ?G"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1332
    using cyclic_reduced_homology_group_nsphere [of p p] by (auto simp: cyclic_group_def)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1333
  then obtain i::int where i: "x = (a [^]\<^bsub>?G\<^esub> i)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1334
    using carrier_subgroup_generated_by_singleton x by fastforce
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1335
  then have "a [^]\<^bsub>?G\<^esub> i \<in> carrier ?G"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1336
    using x by blast
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1337
  have [simp]: "ord a = 0"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1338
    by (simp add: a aeq iso_finite [OF reduced_homology_group_nsphere(1)] flip: infinite_cyclic_subgroup_order)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1339
  show ?thesis
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1340
    by (auto simp: Brouwer_degree2 int_pow_eq_id x i a int_pow_pow int_pow_eq)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1341
qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1342
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1343
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1344
lemma Brouwer_degree2_unique:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1345
  assumes f: "continuous_map (nsphere p) (nsphere p) f"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1346
    and hi: "\<And>x. x \<in> carrier(reduced_homology_group p (nsphere p))
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1347
               \<Longrightarrow> hom_induced p (nsphere p) {} (nsphere p) {} f x = pow (reduced_homology_group p (nsphere p)) x d"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1348
          (is "\<And>x. x \<in> carrier ?G \<Longrightarrow> ?h x = _")
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1349
  shows "Brouwer_degree2 p f = d"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1350
proof -
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1351
  obtain a where a: "a \<in> carrier ?G"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1352
    and aeq: "subgroup_generated ?G {a} = ?G"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1353
    using cyclic_reduced_homology_group_nsphere [of p p] by (auto simp: cyclic_group_def)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1354
  show ?thesis
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1355
    using hi [OF a]
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1356
    apply (simp add: Brouwer_degree2 a)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1357
    by (metis Brouwer_degree2_iff a aeq f group.trivial_group_subgroup_generated group_reduced_homology_group subsetI trivial_reduced_homology_group_nsphere)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1358
qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1359
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1360
lemma Brouwer_degree2_unique_generator:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1361
  assumes f: "continuous_map (nsphere p) (nsphere p) f"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1362
    and eq: "subgroup_generated (reduced_homology_group p (nsphere p)) {a}
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1363
           = reduced_homology_group p (nsphere p)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1364
    and hi: "hom_induced p (nsphere p) {} (nsphere p) {} f a = pow (reduced_homology_group p (nsphere p)) a d"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1365
          (is "?h a = pow ?G a _")
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1366
  shows "Brouwer_degree2 p f = d"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1367
proof (cases "a \<in> carrier ?G")
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1368
  case True
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1369
  then show ?thesis
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1370
    by (metis Brouwer_degree2_iff hi eq f group.trivial_group_subgroup_generated group_reduced_homology_group
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1371
              subset_singleton_iff trivial_reduced_homology_group_nsphere)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1372
next
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1373
  case False
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1374
  then show ?thesis
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1375
    using trivial_reduced_homology_group_nsphere [of p p]
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1376
    by (metis group.trivial_group_subgroup_generated_eq disjoint_insert(1) eq group_reduced_homology_group inf_bot_right subset_singleton_iff)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1377
qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1378
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1379
lemma Brouwer_degree2_homotopic:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1380
  assumes "homotopic_with (\<lambda>x. True) (nsphere p) (nsphere p) f g"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1381
  shows "Brouwer_degree2 p f = Brouwer_degree2 p g"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1382
proof -
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1383
  have "continuous_map (nsphere p) (nsphere p) f"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1384
    using homotopic_with_imp_continuous_maps [OF assms] by auto
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1385
  show ?thesis
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1386
    using Brouwer_degree2_def assms homology_homotopy_empty by fastforce
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1387
qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1388
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1389
lemma Brouwer_degree2_id [simp]: "Brouwer_degree2 p id = 1"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1390
proof (rule Brouwer_degree2_unique)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1391
  fix x
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1392
  assume x: "x \<in> carrier (reduced_homology_group (int p) (nsphere p))"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1393
  then have "x \<in> carrier (homology_group (int p) (nsphere p))"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1394
    using carrier_reduced_homology_group_subset by blast
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1395
  then show "hom_induced (int p) (nsphere p) {} (nsphere p) {} id x =
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1396
        x [^]\<^bsub>reduced_homology_group (int p) (nsphere p)\<^esub> (1::int)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1397
    by (simp add: hom_induced_id group.int_pow_1 x)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1398
qed auto
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1399
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1400
lemma Brouwer_degree2_compose:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1401
  assumes f: "continuous_map (nsphere p) (nsphere p) f" and g: "continuous_map (nsphere p) (nsphere p) g"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1402
  shows "Brouwer_degree2 p (g \<circ> f) = Brouwer_degree2 p g * Brouwer_degree2 p f"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1403
proof (rule Brouwer_degree2_unique)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1404
  show "continuous_map (nsphere p) (nsphere p) (g \<circ> f)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1405
    by (meson continuous_map_compose f g)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1406
next
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1407
  fix x
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1408
  assume x: "x \<in> carrier (reduced_homology_group (int p) (nsphere p))"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1409
  have "hom_induced (int p) (nsphere p) {} (nsphere p) {} (g \<circ> f) =
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1410
             hom_induced (int p) (nsphere p) {} (nsphere p) {} g \<circ>
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1411
             hom_induced (int p) (nsphere p) {} (nsphere p) {} f"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1412
    by (blast intro: hom_induced_compose [OF f _ g])
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1413
  with x show "hom_induced (int p) (nsphere p) {} (nsphere p) {} (g \<circ> f) x =
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1414
        x [^]\<^bsub>reduced_homology_group (int p) (nsphere p)\<^esub> (Brouwer_degree2 p g * Brouwer_degree2 p f)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1415
    by (simp add: mult.commute hom_induced_reduced flip: Brouwer_degree2 group.int_pow_pow)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1416
qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1417
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1418
lemma Brouwer_degree2_homotopy_equivalence:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1419
  assumes f: "continuous_map (nsphere p) (nsphere p) f" and g: "continuous_map (nsphere p) (nsphere p) g"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1420
    and hom: "homotopic_with (\<lambda>x. True) (nsphere p) (nsphere p) (f \<circ> g) id"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1421
  obtains "\<bar>Brouwer_degree2 p f\<bar> = 1" "\<bar>Brouwer_degree2 p g\<bar> = 1" "Brouwer_degree2 p g = Brouwer_degree2 p f"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1422
  using Brouwer_degree2_homotopic [OF hom] Brouwer_degree2_compose f g zmult_eq_1_iff by auto
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1423
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1424
lemma Brouwer_degree2_homeomorphic_maps:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1425
  assumes "homeomorphic_maps (nsphere p) (nsphere p) f g"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1426
  obtains "\<bar>Brouwer_degree2 p f\<bar> = 1" "\<bar>Brouwer_degree2 p g\<bar> = 1" "Brouwer_degree2 p g = Brouwer_degree2 p f"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1427
  using assms
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1428
  by (auto simp: homeomorphic_maps_def homotopic_with_equal continuous_map_compose intro: Brouwer_degree2_homotopy_equivalence)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1429
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1430
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1431
lemma Brouwer_degree2_retraction_map:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1432
  assumes "retraction_map (nsphere p) (nsphere p) f"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1433
  shows "\<bar>Brouwer_degree2 p f\<bar> = 1"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1434
proof -
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1435
  obtain g where g: "retraction_maps (nsphere p) (nsphere p) f g"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1436
    using assms by (auto simp: retraction_map_def)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1437
  show ?thesis
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1438
  proof (rule Brouwer_degree2_homotopy_equivalence)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1439
    show "homotopic_with (\<lambda>x. True) (nsphere p) (nsphere p) (f \<circ> g) id"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1440
      using g apply (auto simp: retraction_maps_def)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1441
      by (simp add: homotopic_with_equal continuous_map_compose)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1442
    show "continuous_map (nsphere p) (nsphere p) f" "continuous_map (nsphere p) (nsphere p) g"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1443
      using g retraction_maps_def by blast+
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1444
  qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1445
qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1446
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1447
lemma Brouwer_degree2_section_map:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1448
  assumes "section_map (nsphere p) (nsphere p) f"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1449
  shows "\<bar>Brouwer_degree2 p f\<bar> = 1"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1450
proof -
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1451
  obtain g where g: "retraction_maps (nsphere p) (nsphere p) g f"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1452
    using assms by (auto simp: section_map_def)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1453
  show ?thesis
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1454
  proof (rule Brouwer_degree2_homotopy_equivalence)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1455
    show "homotopic_with (\<lambda>x. True) (nsphere p) (nsphere p) (g \<circ> f) id"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1456
      using g apply (auto simp: retraction_maps_def)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1457
      by (simp add: homotopic_with_equal continuous_map_compose)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1458
    show "continuous_map (nsphere p) (nsphere p) g" "continuous_map (nsphere p) (nsphere p) f"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1459
      using g retraction_maps_def by blast+
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1460
  qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1461
qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1462
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1463
lemma Brouwer_degree2_homeomorphic_map:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1464
   "homeomorphic_map (nsphere p) (nsphere p) f \<Longrightarrow> \<bar>Brouwer_degree2 p f\<bar> = 1"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1465
  using Brouwer_degree2_retraction_map section_and_retraction_eq_homeomorphic_map by blast
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1466
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1467
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1468
lemma Brouwer_degree2_nullhomotopic:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1469
  assumes "homotopic_with (\<lambda>x. True) (nsphere p) (nsphere p) f (\<lambda>x. a)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1470
  shows "Brouwer_degree2 p f = 0"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1471
proof -
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1472
  have contf: "continuous_map (nsphere p) (nsphere p) f"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1473
   and contc: "continuous_map (nsphere p) (nsphere p) (\<lambda>x. a)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1474
    using homotopic_with_imp_continuous_maps [OF assms] by metis+
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1475
  have "Brouwer_degree2 p f = Brouwer_degree2 p (\<lambda>x. a)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1476
    using Brouwer_degree2_homotopic [OF assms] .
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1477
  moreover
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1478
  let ?G = "reduced_homology_group (int p) (nsphere p)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1479
  interpret group ?G
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1480
    by simp
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1481
  have "Brouwer_degree2 p (\<lambda>x. a) = 0"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1482
  proof (rule Brouwer_degree2_unique [OF contc])
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1483
    fix c
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1484
    assume c: "c \<in> carrier ?G"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1485
    have "continuous_map (nsphere p) (subtopology (nsphere p) {a}) (\<lambda>f. a)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1486
      using contc continuous_map_in_subtopology by blast
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1487
    then have he: "hom_induced p (nsphere p) {} (nsphere p) {} (\<lambda>x. a)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1488
                 = hom_induced p (subtopology (nsphere p) {a}) {} (nsphere p) {} id \<circ>
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1489
                   hom_induced p (nsphere p) {} (subtopology (nsphere p) {a}) {} (\<lambda>x. a)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1490
      by (metis continuous_map_id_subt hom_induced_compose id_comp image_empty order_refl)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1491
    have 1: "hom_induced p (nsphere p) {} (subtopology (nsphere p) {a}) {} (\<lambda>x. a) c =
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1492
             \<one>\<^bsub>reduced_homology_group (int p) (subtopology (nsphere p) {a})\<^esub>"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1493
      using c trivial_reduced_homology_group_contractible_space [of "subtopology (nsphere p) {a}" p]
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1494
      by (simp add: hom_induced_reduced contractible_space_subtopology_singleton trivial_group_subset group.trivial_group_subset subset_iff)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1495
    show "hom_induced (int p) (nsphere p) {} (nsphere p) {} (\<lambda>x. a) c =
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1496
        c [^]\<^bsub>?G\<^esub> (0::int)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1497
      apply (simp add: he 1)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1498
      using hom_induced_reduced_hom group_hom.hom_one group_hom_axioms_def group_hom_def group_reduced_homology_group by blast
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1499
  qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1500
  ultimately show ?thesis
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1501
    by metis
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1502
qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1503
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1504
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1505
lemma Brouwer_degree2_const: "Brouwer_degree2 p (\<lambda>x. a) = 0"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1506
proof (cases "continuous_map(nsphere p) (nsphere p) (\<lambda>x. a)")
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1507
  case True
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1508
  then show ?thesis
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1509
    by (auto intro: Brouwer_degree2_nullhomotopic [where a=a])
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1510
next
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1511
  case False
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1512
  let ?G = "reduced_homology_group (int p) (nsphere p)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1513
  let ?H = "homology_group (int p) (nsphere p)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1514
  interpret group ?G
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1515
    by simp
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1516
  have eq1: "\<one>\<^bsub>?H\<^esub> = \<one>\<^bsub>?G\<^esub>"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1517
    by (simp add: one_reduced_homology_group)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1518
  have *: "\<forall>x\<in>carrier ?G. hom_induced (int p) (nsphere p) {} (nsphere p) {} (\<lambda>x. a) x = \<one>\<^bsub>?H\<^esub>"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1519
    by (metis False hom_induced_default one_relative_homology_group)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1520
  obtain c where c: "c \<in> carrier ?G" and ceq: "subgroup_generated ?G {c} = ?G"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1521
    using cyclic_reduced_homology_group_nsphere [of p p] by (force simp: cyclic_group_def)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1522
  have [simp]: "ord c = 0"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1523
    by (simp add: c ceq iso_finite [OF reduced_homology_group_nsphere(1)] flip: infinite_cyclic_subgroup_order)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1524
  show ?thesis
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1525
    unfolding Brouwer_degree2_def
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1526
  proof (rule some_equality)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1527
    fix d :: "int"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1528
    assume "\<forall>x\<in>carrier ?G. hom_induced (int p) (nsphere p) {} (nsphere p) {} (\<lambda>x. a) x = x [^]\<^bsub>?G\<^esub> d"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1529
    then have "c [^]\<^bsub>?G\<^esub> d = \<one>\<^bsub>?H\<^esub>"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1530
      using "*" c by blast
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1531
    then have "int (ord c) dvd d"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1532
      using c eq1 int_pow_eq_id by auto
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1533
    then show "d = 0"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1534
      by (simp add: * del: one_relative_homology_group)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1535
  qed (use "*" eq1 in force)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1536
qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1537
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1538
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1539
corollary Brouwer_degree2_nonsurjective:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1540
   "\<lbrakk>continuous_map(nsphere p) (nsphere p) f; f ` topspace (nsphere p) \<noteq> topspace (nsphere p)\<rbrakk>
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1541
    \<Longrightarrow> Brouwer_degree2 p f = 0"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1542
  by (meson Brouwer_degree2_nullhomotopic nullhomotopic_nonsurjective_sphere_map)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1543
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1544
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1545
proposition Brouwer_degree2_reflection:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1546
  "Brouwer_degree2 p (\<lambda>x i. if i = 0 then -x i else x i) = -1" (is "Brouwer_degree2 _ ?r = -1")
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1547
proof (induction p)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1548
  case 0
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1549
  let ?G = "homology_group 0 (nsphere 0)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1550
  let ?D = "homology_group 0 (discrete_topology {()})"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1551
  interpret group ?G
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1552
    by simp
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1553
  define r where "r \<equiv> \<lambda>x::nat\<Rightarrow>real. \<lambda>i. if i = 0 then -x i else x i"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1554
  then have [simp]: "r \<circ> r = id"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1555
    by force
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1556
  have cmr: "continuous_map (nsphere 0) (nsphere 0) r"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1557
    by (simp add: r_def continuous_map_nsphere_reflection)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1558
  have *: "hom_induced 0 (nsphere 0) {} (nsphere 0) {} r c = inv\<^bsub>?G\<^esub> c"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1559
    if "c \<in> carrier(reduced_homology_group 0 (nsphere 0))" for c
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1560
  proof -
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1561
    have c: "c \<in> carrier ?G"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1562
      and ceq: "hom_induced 0 (nsphere 0) {} (discrete_topology {()}) {} (\<lambda>x. ()) c = \<one>\<^bsub>?D\<^esub>"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1563
      using that by (auto simp: carrier_reduced_homology_group kernel_def)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1564
    define pp::"nat\<Rightarrow>real" where "pp \<equiv> \<lambda>i. if i = 0 then 1 else 0"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1565
    define nn::"nat\<Rightarrow>real" where "nn \<equiv> \<lambda>i. if i = 0 then -1 else 0"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1566
    have topn0: "topspace(nsphere 0) = {pp,nn}"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1567
      by (auto simp: nsphere pp_def nn_def fun_eq_iff power2_eq_1_iff split: if_split_asm)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1568
    have "t1_space (nsphere 0)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1569
      unfolding nsphere
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1570
      apply (rule t1_space_subtopology)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1571
      by (metis (full_types) open_fun_def t1_space t1_space_def)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1572
    then have dtn0: "discrete_topology {pp,nn} = nsphere 0"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1573
      using finite_t1_space_imp_discrete_topology [OF topn0] by auto
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1574
    have "pp \<noteq> nn"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1575
      by (auto simp: pp_def nn_def fun_eq_iff)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1576
    have [simp]: "r pp = nn" "r nn = pp"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1577
      by (auto simp: r_def pp_def nn_def fun_eq_iff)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1578
    have iso: "(\<lambda>(a,b). hom_induced 0 (subtopology (nsphere 0) {pp}) {} (nsphere 0) {} id a
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1579
                  \<otimes>\<^bsub>?G\<^esub> hom_induced 0 (subtopology (nsphere 0) {nn}) {} (nsphere 0) {} id b)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1580
            \<in> iso (homology_group 0 (subtopology (nsphere 0) {pp}) \<times>\<times> homology_group 0 (subtopology (nsphere 0) {nn}))
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1581
                  ?G" (is "?f \<in> iso (?P \<times>\<times> ?N) ?G")
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1582
      apply (rule homology_additivity_explicit)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1583
      using dtn0 \<open>pp \<noteq> nn\<close> by (auto simp: discrete_topology_unique)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1584
    then have fim: "?f ` carrier(?P \<times>\<times> ?N) = carrier ?G"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1585
      by (simp add: iso_def bij_betw_def)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1586
    obtain d d' where d: "d \<in> carrier ?P" and d': "d' \<in> carrier ?N" and eqc: "?f(d,d') = c"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1587
      using c by (force simp flip: fim)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1588
    let ?h = "\<lambda>xx. hom_induced 0 (subtopology (nsphere 0) {xx}) {} (discrete_topology {()}) {} (\<lambda>x. ())"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1589
    have "retraction_map (subtopology (nsphere 0) {pp}) (subtopology (nsphere 0) {nn}) r"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1590
      apply (simp add: retraction_map_def retraction_maps_def continuous_map_in_subtopology continuous_map_from_subtopology cmr image_subset_iff)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1591
      apply (rule_tac x=r in exI)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1592
      apply (force simp: retraction_map_def retraction_maps_def continuous_map_in_subtopology continuous_map_from_subtopology cmr)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1593
      done
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1594
    then have "carrier ?N = (hom_induced 0 (subtopology (nsphere 0) {pp}) {} (subtopology (nsphere 0) {nn}) {} r) ` carrier ?P"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1595
      by (rule surj_hom_induced_retraction_map)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1596
    then obtain e where e: "e \<in> carrier ?P" and eqd': "hom_induced 0 (subtopology (nsphere 0) {pp}) {} (subtopology (nsphere 0) {nn}) {} r e = d'"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1597
      using d' by auto
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1598
    have "section_map (subtopology (nsphere 0) {pp}) (discrete_topology {()}) (\<lambda>x. ())"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1599
      by (force simp: section_map_def retraction_maps_def topn0)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1600
    then have "?h pp \<in> mon ?P ?D"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1601
      by (rule mon_hom_induced_section_map)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1602
    then have one: "x = one ?P"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1603
      if "?h pp x = \<one>\<^bsub>?D\<^esub>" "x \<in> carrier ?P" for x
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1604
      using that by (simp add: mon_iff_hom_one)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1605
    interpret hpd: group_hom ?P ?D "?h pp"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1606
      using hom_induced_empty_hom by (simp add: hom_induced_empty_hom group_hom_axioms_def group_hom_def)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1607
    interpret hgd: group_hom ?G ?D "hom_induced 0 (nsphere 0) {} (discrete_topology {()}) {} (\<lambda>x. ())"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1608
      using hom_induced_empty_hom by (simp add: hom_induced_empty_hom group_hom_axioms_def group_hom_def)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1609
    interpret hpg: group_hom ?P ?G "hom_induced 0 (subtopology (nsphere 0) {pp}) {} (nsphere 0) {} r"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1610
      using hom_induced_empty_hom by (simp add: hom_induced_empty_hom group_hom_axioms_def group_hom_def)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1611
    interpret hgg: group_hom ?G ?G "hom_induced 0 (nsphere 0) {} (nsphere 0) {} r"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1612
      using hom_induced_empty_hom by (simp add: hom_induced_empty_hom group_hom_axioms_def group_hom_def)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1613
    have "?h pp d =
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1614
          (hom_induced 0 (nsphere 0) {} (discrete_topology {()}) {} (\<lambda>x. ())
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1615
           \<circ> hom_induced 0 (subtopology (nsphere 0) {pp}) {} (nsphere 0) {} id) d"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1616
      by (simp flip: hom_induced_compose_empty)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1617
    moreover
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1618
    have "?h pp = ?h nn \<circ> hom_induced 0 (subtopology (nsphere 0) {pp}) {} (subtopology (nsphere 0) {nn}) {} r"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1619
      by (simp add: cmr continuous_map_from_subtopology continuous_map_in_subtopology image_subset_iff flip: hom_induced_compose_empty)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1620
    then have "?h pp e =
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1621
               (hom_induced 0 (nsphere 0) {} (discrete_topology {()}) {} (\<lambda>x. ())
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1622
                \<circ> hom_induced 0 (subtopology (nsphere 0) {nn}) {} (nsphere 0) {} id) d'"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1623
      by (simp flip: hom_induced_compose_empty eqd')
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1624
    ultimately have "?h pp (d \<otimes>\<^bsub>?P\<^esub> e) = hom_induced 0 (nsphere 0) {} (discrete_topology {()}) {} (\<lambda>x. ()) (?f(d,d'))"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1625
      by (simp add: d e hom_induced_carrier)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1626
    then have "?h pp (d \<otimes>\<^bsub>?P\<^esub> e) = \<one>\<^bsub>?D\<^esub>"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1627
      using ceq eqc by simp
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1628
    then have inv_p: "inv\<^bsub>?P\<^esub> d = e"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1629
      by (metis (no_types, lifting) Group.group_def d e group.inv_equality group.r_inv group_relative_homology_group one monoid.m_closed)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1630
    have cmr_pn: "continuous_map (subtopology (nsphere 0) {pp}) (subtopology (nsphere 0) {nn}) r"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1631
      by (simp add: cmr continuous_map_from_subtopology continuous_map_in_subtopology image_subset_iff)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1632
    then have "hom_induced 0 (subtopology (nsphere 0) {pp}) {} (nsphere 0) {} (id \<circ> r) =
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1633
               hom_induced 0 (subtopology (nsphere 0) {nn}) {} (nsphere 0) {} id \<circ>
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1634
               hom_induced 0 (subtopology (nsphere 0) {pp}) {} (subtopology (nsphere 0) {nn}) {} r"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1635
      using hom_induced_compose_empty continuous_map_id_subt by blast
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1636
    then have "inv\<^bsub>?G\<^esub> hom_induced 0 (subtopology (nsphere 0) {pp}) {} (nsphere 0) {} r d =
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1637
                  hom_induced 0 (subtopology (nsphere 0) {nn}) {} (nsphere 0) {} id d'"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1638
      apply (simp add: flip: inv_p eqd')
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1639
      using d hpg.hom_inv by auto
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1640
    then have c: "c = (hom_induced 0 (subtopology (nsphere 0) {pp}) {} (nsphere 0) {} id d)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1641
                       \<otimes>\<^bsub>?G\<^esub> inv\<^bsub>?G\<^esub> (hom_induced 0 (subtopology (nsphere 0) {pp}) {} (nsphere 0) {} r d)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1642
      by (simp flip: eqc)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1643
    have "hom_induced 0 (nsphere 0) {} (nsphere 0) {} r \<circ>
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1644
          hom_induced 0 (subtopology (nsphere 0) {pp}) {} (nsphere 0) {} id =
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1645
          hom_induced 0 (subtopology (nsphere 0) {pp}) {} (nsphere 0) {} r"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1646
      by (metis cmr comp_id continuous_map_id_subt hom_induced_compose_empty)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1647
    moreover
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1648
    have "hom_induced 0 (nsphere 0) {} (nsphere 0) {} r \<circ>
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1649
          hom_induced 0 (subtopology (nsphere 0) {pp}) {} (nsphere 0) {} r =
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1650
          hom_induced 0 (subtopology (nsphere 0) {pp}) {} (nsphere 0) {} id"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1651
      by (metis \<open>r \<circ> r = id\<close> cmr continuous_map_from_subtopology hom_induced_compose_empty)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1652
    ultimately show ?thesis
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1653
      by (metis inv_p c comp_def d e hgg.hom_inv hgg.hom_mult hom_induced_carrier hpd.G.inv_inv hpg.hom_inv inv_mult_group)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1654
  qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1655
  show ?case
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1656
    unfolding r_def [symmetric]
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1657
    using Brouwer_degree2_unique [OF cmr]
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1658
    by (auto simp: * group.int_pow_neg group.int_pow_1 reduced_homology_group_def intro!: Brouwer_degree2_unique [OF cmr])
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1659
next
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1660
  case (Suc p)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1661
  let ?G = "reduced_homology_group (int p) (nsphere p)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1662
  let ?G1 = "reduced_homology_group (1 + int p) (nsphere (Suc p))"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1663
  obtain f g where fg: "group_isomorphisms ?G ?G1 f g"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1664
    and *: "\<forall>c\<in>carrier ?G.
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1665
           hom_induced (1 + int p) (nsphere (Suc p)) {} (nsphere (Suc p)) {} ?r (f c) =
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1666
           f (hom_induced p (nsphere p) {} (nsphere p) {} ?r c)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1667
    using reduced_homology_group_nsphere_step
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1668
    by (meson group.iso_iff_group_isomorphisms group_reduced_homology_group)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1669
  then have eq: "carrier ?G1 = f ` carrier ?G"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1670
    by (fastforce simp add: iso_iff dest: group_isomorphisms_imp_iso)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1671
  interpret group_hom ?G ?G1 f
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1672
    by (meson fg group_hom_axioms_def group_hom_def group_isomorphisms_def group_reduced_homology_group)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1673
  have homf: "f \<in> hom ?G ?G1"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1674
    using fg group_isomorphisms_def by blast
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1675
  have "hom_induced (1 + int p) (nsphere (Suc p)) {} (nsphere (Suc p)) {} ?r (f y) = f y [^]\<^bsub>?G1\<^esub> (-1::int)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1676
    if "y \<in> carrier ?G" for y
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1677
    by (simp add: that * Brouwer_degree2 Suc hom_int_pow)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1678
  then show ?case
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1679
    by (fastforce simp: eq intro: Brouwer_degree2_unique [OF continuous_map_nsphere_reflection])
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1680
qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1681
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1682
end