src/HOL/Homology/Brouwer_Degree.thy
author nipkow
Thu, 17 Jul 2025 21:06:22 +0100
changeset 82885 5d2a599f88af
parent 82323 b022c013b04b
permissions -rw-r--r--
moved lemma
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
72632
773ad766f1b8 Multiplicative_Group now required due to Algebra restructuring
paulson <lp15@cam.ac.uk>
parents: 70097
diff changeset
     4
  imports Homology_Groups "HOL-Algebra.Multiplicative_Group"
70095
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 -
82323
b022c013b04b Function space instead of image closure
paulson <lp15@cam.ac.uk>
parents: 79712
diff changeset
    99
  have *: "continuous_map X (discrete_topology {()}) (\<lambda>x. ())" "(\<lambda>x. ()) \<in> S \<rightarrow> {()}"
70095
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:
82323
b022c013b04b Function space instead of image closure
paulson <lp15@cam.ac.uk>
parents: 79712
diff changeset
   438
   "\<lbrakk>retraction_maps X Y r s; r \<in> U \<rightarrow> V; s \<in> V \<rightarrow> U; homotopic_with (\<lambda>h. h ` U \<subseteq> U) X X (s \<circ> r) id\<rbrakk>
70095
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)
82323
b022c013b04b Function space instead of image closure
paulson <lp15@cam.ac.uk>
parents: 79712
diff changeset
   443
       apply (auto simp: image_subset_iff_funcset Pi_iff continuous_map_compose homotopic_with_equal)
70095
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:
82323
b022c013b04b Function space instead of image closure
paulson <lp15@cam.ac.uk>
parents: 79712
diff changeset
   448
   "\<lbrakk>retraction_maps X Y r id; V \<subseteq> U; r \<in> U \<rightarrow> V; homotopic_with (\<lambda>h. h ` U \<subseteq> U) X X r id\<rbrakk>
70095
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)"
82323
b022c013b04b Function space instead of image closure
paulson <lp15@cam.ac.uk>
parents: 79712
diff changeset
   451
  by (simp add: deformation_retraction_relative_homology_group_isomorphisms
b022c013b04b Function space instead of image closure
paulson <lp15@cam.ac.uk>
parents: 79712
diff changeset
   452
      in_mono)
70095
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   453
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   454
lemma deformation_retract_relative_homology_group_isomorphism:
82323
b022c013b04b Function space instead of image closure
paulson <lp15@cam.ac.uk>
parents: 79712
diff changeset
   455
   "\<lbrakk>retraction_maps X Y r id; V \<subseteq> U; r \<in> U \<rightarrow> V; homotopic_with (\<lambda>h. h ` U \<subseteq> U) X X r id\<rbrakk>
70095
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   456
    \<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
   457
  by (metis deformation_retract_relative_homology_group_isomorphisms group_isomorphisms_imp_iso)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   458
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   459
lemma deformation_retract_relative_homology_group_isomorphism_id:
82323
b022c013b04b Function space instead of image closure
paulson <lp15@cam.ac.uk>
parents: 79712
diff changeset
   460
   "\<lbrakk>retraction_maps X Y r id; V \<subseteq> U; r \<in> U \<rightarrow> V; homotopic_with (\<lambda>h. h ` U \<subseteq> U) X X r id\<rbrakk>
70095
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   461
    \<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
   462
  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
   463
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   464
lemma deformation_retraction_imp_isomorphic_relative_homology_groups:
82323
b022c013b04b Function space instead of image closure
paulson <lp15@cam.ac.uk>
parents: 79712
diff changeset
   465
   "\<lbrakk>retraction_maps X Y r s; r \<in> U \<rightarrow> V; s ` V \<subseteq> U; homotopic_with (\<lambda>h. h ` U \<subseteq> U) X X (s \<circ> r) id\<rbrakk>
70095
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   466
    \<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
   467
  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
   468
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   469
lemma deformation_retraction_imp_isomorphic_homology_groups:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   470
   "\<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
   471
        \<Longrightarrow> homology_group p X \<cong> homology_group p Y"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   472
  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
   473
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   474
lemma deformation_retract_imp_isomorphic_relative_homology_groups:
82323
b022c013b04b Function space instead of image closure
paulson <lp15@cam.ac.uk>
parents: 79712
diff changeset
   475
   "\<lbrakk>retraction_maps X X' r id; V \<subseteq> U; r \<in> U \<rightarrow> V; homotopic_with (\<lambda>h. h ` U \<subseteq> U) X X r id\<rbrakk>
70095
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   476
        \<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
   477
  by (simp add: deformation_retraction_imp_isomorphic_relative_homology_groups)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   478
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   479
lemma deformation_retract_imp_isomorphic_homology_groups:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   480
   "\<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
   481
        \<Longrightarrow> homology_group p X \<cong> homology_group p X'"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   482
  by (simp add: deformation_retraction_imp_isomorphic_homology_groups)
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
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   485
lemma epi_hom_induced_inclusion:
82323
b022c013b04b Function space instead of image closure
paulson <lp15@cam.ac.uk>
parents: 79712
diff changeset
   486
  assumes "homotopic_with (\<lambda>x. True) X X id f" and "f \<in> topspace X \<rightarrow> S"
70095
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   487
  shows "(hom_induced p (subtopology X S) {} X {} id)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   488
   \<in> epi (homology_group p (subtopology X S)) (homology_group p X)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   489
proof (rule epi_right_invertible)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   490
  show "hom_induced p (subtopology X S) {} X {} id
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   491
        \<in> hom (homology_group p (subtopology X S)) (homology_group p X)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   492
    by (simp add: hom_induced_empty_hom)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   493
  show "hom_induced p X {} (subtopology X S) {} f
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   494
      \<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
   495
    by (simp add: hom_induced_carrier)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   496
  fix x
82323
b022c013b04b Function space instead of image closure
paulson <lp15@cam.ac.uk>
parents: 79712
diff changeset
   497
  assume x: "x \<in> carrier (homology_group p X)"
b022c013b04b Function space instead of image closure
paulson <lp15@cam.ac.uk>
parents: 79712
diff changeset
   498
  show "hom_induced p (subtopology X S) {} X {} id (hom_induced p X {} (subtopology X S) {} f x) = x"
b022c013b04b Function space instead of image closure
paulson <lp15@cam.ac.uk>
parents: 79712
diff changeset
   499
  proof (subst hom_induced_compose')
b022c013b04b Function space instead of image closure
paulson <lp15@cam.ac.uk>
parents: 79712
diff changeset
   500
    show "continuous_map X (subtopology X S) f"
b022c013b04b Function space instead of image closure
paulson <lp15@cam.ac.uk>
parents: 79712
diff changeset
   501
      by (meson assms continuous_map_into_subtopology
b022c013b04b Function space instead of image closure
paulson <lp15@cam.ac.uk>
parents: 79712
diff changeset
   502
          homotopic_with_imp_continuous_maps)
b022c013b04b Function space instead of image closure
paulson <lp15@cam.ac.uk>
parents: 79712
diff changeset
   503
    show "hom_induced p X {} X {} (id \<circ> f) x = x"
b022c013b04b Function space instead of image closure
paulson <lp15@cam.ac.uk>
parents: 79712
diff changeset
   504
      by (metis assms(1) hom_induced_id homology_homotopy_empty id_comp x)
b022c013b04b Function space instead of image closure
paulson <lp15@cam.ac.uk>
parents: 79712
diff changeset
   505
  qed (use assms in auto)
70095
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   506
qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   507
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   508
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   509
lemma trivial_homomorphism_hom_induced_relativization:
82323
b022c013b04b Function space instead of image closure
paulson <lp15@cam.ac.uk>
parents: 79712
diff changeset
   510
  assumes "homotopic_with (\<lambda>x. True) X X id f" and "f \<in> topspace X \<rightarrow> S"
70095
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   511
  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
   512
              (hom_induced p X {} X S id)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   513
proof -
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   514
  have "(hom_induced p (subtopology X S) {} X {} id)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   515
      \<in> epi (homology_group p (subtopology X S)) (homology_group p X)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   516
    by (metis assms epi_hom_induced_inclusion)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   517
  then show ?thesis
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   518
    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
   519
    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
   520
qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   521
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   522
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   523
lemma mon_hom_boundary_inclusion:
82323
b022c013b04b Function space instead of image closure
paulson <lp15@cam.ac.uk>
parents: 79712
diff changeset
   524
  assumes "homotopic_with (\<lambda>x. True) X X id f" and "f \<in> topspace X \<rightarrow> S"
70095
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   525
  shows "(hom_boundary p X S) \<in> mon
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   526
             (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
   527
proof -
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   528
  have "(hom_induced p (subtopology X S) {} X {} id)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   529
      \<in> epi (homology_group p (subtopology X S)) (homology_group p X)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   530
    by (metis assms epi_hom_induced_inclusion)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   531
  then show ?thesis
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   532
    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
   533
    apply (simp add: mon_def epi_def hom_boundary_hom)
73932
fd21b4a93043 added opaque_combs and renamed hide_lams to opaque_lifting
desharna
parents: 72632
diff changeset
   534
    by (metis (no_types, opaque_lifting) 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)
70095
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   535
qed
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
lemma short_exact_sequence_hom_induced_relativization:
82323
b022c013b04b Function space instead of image closure
paulson <lp15@cam.ac.uk>
parents: 79712
diff changeset
   538
  assumes "homotopic_with (\<lambda>x. True) X X id f" and "f \<in> topspace X \<rightarrow> S"
70095
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   539
  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
   540
                   (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
   541
  unfolding short_exact_sequence_iff
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   542
  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
   543
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   544
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   545
lemma group_isomorphisms_homology_group_prod_deformation:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   546
  fixes p::int
82323
b022c013b04b Function space instead of image closure
paulson <lp15@cam.ac.uk>
parents: 79712
diff changeset
   547
  assumes "homotopic_with (\<lambda>x. True) X X id f" and "f \<in> topspace X \<rightarrow> S"
70095
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   548
  obtains H K where
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   549
    "subgroup H (homology_group p (subtopology X S))"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   550
    "subgroup K (homology_group p (subtopology X S))"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   551
    "(\<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
   552
             \<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
   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 (subtopology X S))"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   555
    "hom_boundary (p + 1) X S
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   556
     \<in> Group.iso (relative_homology_group (p + 1) X S)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   557
         (subgroup_generated (homology_group p (subtopology X S)) H)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   558
    "hom_induced p (subtopology X S) {} X {} id
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   559
     \<in> Group.iso
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   560
         (subgroup_generated (homology_group p (subtopology X S)) K)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   561
         (homology_group p X)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   562
proof -
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   563
  let ?rhs = "relative_homology_group (p + 1) X S"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   564
  let ?pXS = "homology_group p (subtopology X S)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   565
  let ?pX = "homology_group p X"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   566
  let ?hb = "hom_boundary (p + 1) X S"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   567
  let ?hi = "hom_induced p (subtopology X S) {} X {} id"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   568
  have x: "short_exact_sequence (?pX) ?pXS ?rhs ?hi ?hb"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   569
    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
   570
  have contf: "continuous_map X (subtopology X S) f"
82323
b022c013b04b Function space instead of image closure
paulson <lp15@cam.ac.uk>
parents: 79712
diff changeset
   571
    by (metis assms continuous_map_into_subtopology homotopic_with_imp_continuous_maps)
70095
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   572
  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
   573
    and iso: "?hb \<in> iso ?rhs (subgroup_generated ?pXS H)" "?hi \<in> iso (subgroup_generated ?pXS K) ?pX"
82323
b022c013b04b Function space instead of image closure
paulson <lp15@cam.ac.uk>
parents: 79712
diff changeset
   574
  proof (rule splitting_lemma_right [OF x, where g' = "hom_induced p X {} (subtopology X S) {} f"])
b022c013b04b Function space instead of image closure
paulson <lp15@cam.ac.uk>
parents: 79712
diff changeset
   575
    show "hom_induced p X {} (subtopology X S) {} f \<in> hom (homology_group p X) (homology_group p (subtopology X S))"
b022c013b04b Function space instead of image closure
paulson <lp15@cam.ac.uk>
parents: 79712
diff changeset
   576
      using hom_induced_empty_hom by blast
b022c013b04b Function space instead of image closure
paulson <lp15@cam.ac.uk>
parents: 79712
diff changeset
   577
  next
b022c013b04b Function space instead of image closure
paulson <lp15@cam.ac.uk>
parents: 79712
diff changeset
   578
    fix z 
b022c013b04b Function space instead of image closure
paulson <lp15@cam.ac.uk>
parents: 79712
diff changeset
   579
    assume "z \<in> carrier (homology_group p X)"
b022c013b04b Function space instead of image closure
paulson <lp15@cam.ac.uk>
parents: 79712
diff changeset
   580
    then show "hom_induced p (subtopology X S) {} X {} id (hom_induced p X {} (subtopology X S) {} f z) = z"
b022c013b04b Function space instead of image closure
paulson <lp15@cam.ac.uk>
parents: 79712
diff changeset
   581
      using assms(1) contf hom_induced_id homology_homotopy_empty
b022c013b04b Function space instead of image closure
paulson <lp15@cam.ac.uk>
parents: 79712
diff changeset
   582
      by (fastforce simp add: hom_induced_compose')
b022c013b04b Function space instead of image closure
paulson <lp15@cam.ac.uk>
parents: 79712
diff changeset
   583
  qed blast
70095
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   584
  show ?thesis
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   585
  proof
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   586
    show "subgroup H ?pXS"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   587
      using HK(1) normal_imp_subgroup by blast
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   588
    then show "(\<lambda>(x, y). x \<otimes>\<^bsub>?pXS\<^esub> y)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   589
        \<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
   590
      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
   591
    show "subgroup K ?pXS"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   592
      by (rule HK)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   593
    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
   594
      using iso int_ops(4) by presburger
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   595
    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
   596
      by (simp add: iso(2))
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   597
  qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   598
qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   599
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   600
lemma iso_homology_group_prod_deformation:
82323
b022c013b04b Function space instead of image closure
paulson <lp15@cam.ac.uk>
parents: 79712
diff changeset
   601
  assumes "homotopic_with (\<lambda>x. True) X X id f" and "f \<in> topspace X \<rightarrow> S"
70095
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   602
  shows "homology_group p (subtopology X S)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   603
      \<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
   604
    (is "?G \<cong> DirProd ?H ?R")
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   605
proof -
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   606
  obtain H K where HK:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   607
    "(\<lambda>(x, y). x \<otimes>\<^bsub>?G\<^esub> y)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   608
     \<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
   609
    "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
   610
    "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
   611
    by (blast intro: group_isomorphisms_homology_group_prod_deformation [OF assms])
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   612
  have "?G \<cong> DirProd (subgroup_generated (?G) H) (subgroup_generated (?G) K)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   613
    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
   614
  also have "\<dots> \<cong> DirProd ?R ?H"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   615
    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
   616
  also have "\<dots>  \<cong> DirProd ?H ?R"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   617
    by (simp add: DirProd_commute_iso)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   618
  finally show ?thesis .
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   619
qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   620
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   621
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   622
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   623
lemma iso_homology_contractible_space_subtopology1:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   624
  assumes "contractible_space X" "S \<subseteq> topspace X" "S \<noteq> {}"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   625
  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
   626
proof -
82323
b022c013b04b Function space instead of image closure
paulson <lp15@cam.ac.uk>
parents: 79712
diff changeset
   627
  obtain f where  "homotopic_with (\<lambda>x. True) X X id f" and "f \<in> topspace X \<rightarrow> S"
70095
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   628
    using assms contractible_space_alt by fastforce
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   629
  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
   630
    using iso_homology_group_prod_deformation [of X _ S 0] by auto
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   631
  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
   632
    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
   633
  finally show ?thesis .
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   634
qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   635
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   636
lemma iso_homology_contractible_space_subtopology2:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   637
  "\<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
   638
    \<Longrightarrow> homology_group p (subtopology X S) \<cong> relative_homology_group (p + 1) X S"
73932
fd21b4a93043 added opaque_combs and renamed hide_lams to opaque_lifting
desharna
parents: 72632
diff changeset
   639
  by (metis (no_types, opaque_lifting) add.commute isomorphic_group_reduced_homology_of_contractible topspace_subtopology topspace_subtopology_subset un_reduced_homology_group)
70095
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   640
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   641
lemma trivial_relative_homology_group_contractible_spaces:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   642
   "\<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
   643
        \<Longrightarrow> trivial_group(relative_homology_group p X S)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   644
  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
   645
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   646
lemma trivial_relative_homology_group_alt:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   647
  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
   648
  shows "trivial_group (relative_homology_group p X S)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   649
proof (rule trivial_relative_homology_group_gen [OF contf])
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   650
  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
   651
    using hom unfolding homotopic_with_def
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   652
    apply (rule ex_forward)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   653
    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
   654
    done
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   655
  show "homotopic_with (\<lambda>k. True) X X f id"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   656
    using assms by (force simp: homotopic_with_def)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   657
qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   658
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   659
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   660
lemma iso_hom_induced_relativization_contractible:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   661
  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
   662
  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
   663
proof (rule very_short_exact_sequence)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   664
  show "exact_seq
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   665
         ([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
   666
          [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
   667
    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
   668
    by fastforce
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   669
  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
   670
    using assms
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   671
    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
   672
qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   673
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   674
corollary isomorphic_relative_homology_groups_relativization_contractible:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   675
  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
   676
  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
   677
  by (rule is_isoI) (rule iso_hom_induced_relativization_contractible [OF assms])
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   678
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   679
lemma iso_hom_induced_inclusion_contractible:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   680
  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
   681
  shows "(hom_induced p (subtopology X S) T X T id)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   682
         \<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
   683
proof (rule very_short_exact_sequence)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   684
  show "exact_seq
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   685
         ([relative_homology_group p X S, relative_homology_group p X T,
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   686
           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
   687
          [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
   688
    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
   689
    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
   690
  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
   691
    using assms
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   692
    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
   693
qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   694
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   695
corollary isomorphic_relative_homology_groups_inclusion_contractible:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   696
  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
   697
  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
   698
  by (rule is_isoI) (rule iso_hom_induced_inclusion_contractible [OF assms])
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   699
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   700
lemma iso_hom_relboundary_contractible:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   701
  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
   702
  shows "hom_relboundary p X S T
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   703
         \<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
   704
proof (rule very_short_exact_sequence)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   705
  show "exact_seq
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   706
         ([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
   707
          [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
   708
    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
   709
  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
   710
    using assms
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   711
    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
   712
qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   713
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   714
corollary isomorphic_relative_homology_groups_relboundary_contractible:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   715
  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
   716
  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
   717
  by (rule is_isoI) (rule iso_hom_relboundary_contractible [OF assms])
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   718
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   719
lemma isomorphic_relative_contractible_space_imp_homology_groups:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   720
  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
   721
     and ST: "S = {} \<longleftrightarrow> T = {}"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   722
     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
   723
  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
   724
proof (cases "T = {}")
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   725
  case True
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   726
  have "homology_group p (subtopology X {}) \<cong> homology_group p (subtopology Y {})"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   727
    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
   728
  then show ?thesis
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   729
    using ST True by blast
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   730
next
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   731
  case False
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   732
  show ?thesis
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   733
  proof (cases "p = 0")
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   734
    case True
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   735
    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
   736
      using assms True \<open>T \<noteq> {}\<close>
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   737
      by (simp add: iso_homology_contractible_space_subtopology1)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   738
    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
   739
      by (simp add: assms group.DirProd_iso_trans iso_refl)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   740
    also have "\<dots> \<cong> homology_group p (subtopology Y T)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   741
      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
   742
    finally show ?thesis .
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   743
  next
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   744
    case False
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   745
    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
   746
      using assms False \<open>T \<noteq> {}\<close>
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   747
      by (simp add: iso_homology_contractible_space_subtopology2)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   748
    also have "\<dots>  \<cong> relative_homology_group (p+1) Y T"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   749
      by (simp add: assms)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   750
    also have "\<dots> \<cong> homology_group p (subtopology Y T)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   751
      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
   752
    finally show ?thesis .
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   753
  qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   754
qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   755
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   756
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   757
subsection\<open>Homology groups of spheres\<close>
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   758
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   759
lemma iso_reduced_homology_group_lower_hemisphere:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   760
  assumes "k \<le> n"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   761
  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
   762
      \<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
   763
proof (rule iso_reduced_homology_by_contractible)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   764
  show "contractible_space (subtopology (nsphere n) {x. x k \<le> 0})"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   765
    by (simp add: assms contractible_space_lower_hemisphere)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   766
  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
   767
    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
   768
  then show "topspace (nsphere n) \<inter> {x. x k \<le> 0} \<noteq> {}"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   769
    by blast
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   770
qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   771
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   772
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   773
lemma topspace_nsphere_1:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   774
  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
   775
proof (cases "k \<le> n")
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   776
  case True
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   777
  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
   778
    using \<open>k \<le> n\<close> by (simp add: sum_diff)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   779
  then show ?thesis
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   780
    using assms
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   781
    apply (simp add: nsphere)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   782
    by (metis diff_ge_0_iff_ge sum_nonneg zero_le_power2)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   783
next
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   784
  case False
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   785
  then show ?thesis
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   786
    using assms by (simp add: nsphere)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   787
qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   788
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   789
lemma topspace_nsphere_1_eq_0:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   790
  fixes x :: "nat \<Rightarrow> real"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   791
  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
   792
  shows "x i = 0"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   793
proof (cases "i \<le> n")
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   794
  case True
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   795
  have "k \<le> n"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   796
    using x
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   797
    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
   798
  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
   799
    using \<open>k \<le> n\<close> by (simp add: sum_diff)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   800
  also have "\<dots> = 0"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   801
    using assms by (simp add: nsphere)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   802
  finally have "\<forall>i\<in>{..n} - {k}. (x i)\<^sup>2 = 0"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   803
    by (simp add: sum_nonneg_eq_0_iff)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   804
  then show ?thesis
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   805
    using True \<open>i \<noteq> k\<close> by auto
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   806
next
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   807
  case False
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   808
  with x show ?thesis
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   809
    by (simp add: nsphere)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   810
qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   811
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   812
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   813
proposition iso_relative_homology_group_upper_hemisphere:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   814
   "(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
   815
  \<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
   816
        (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
   817
proof -
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   818
  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
   819
    by force
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   820
  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
   821
    apply (rule closedin_continuous_map_preimage [OF continuous_map_nsphere_projection])
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   822
    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
   823
    done
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   824
  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
   825
    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
   826
  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
   827
    by force
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   828
  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
   829
  proof (rule interior_of_maximal)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   830
    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
   831
      by force
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   832
    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
   833
      apply (rule openin_continuous_map_preimage [OF continuous_map_nsphere_projection])
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   834
      using open_Collect_less [of id "\<lambda>x::real. 0"] apply simp
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   835
      done
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   836
  qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   837
  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
   838
  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
   839
               "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
   840
    by auto
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   841
  let ?T01 = "top_of_set {0..1::real}"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   842
  let ?X12 = "subtopology (nsphere n) {x. -1/2 \<le> x k}"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   843
  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
   844
         \<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
   845
               ?H"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   846
    using homology_excision_axiom [OF nn subset_UNIV, of p] by simp
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   847
  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
   848
                               (\<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
   849
  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
   850
    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
   851
  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
   852
  proof -
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   853
    show ?thesis
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   854
    proof (rule continuous_map_eq)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   855
      show "continuous_map (prod_topology ?T01 ?X12)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   856
         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
   857
        unfolding case_prod_unfold
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   858
      proof (rule continuous_map_cases_le)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   859
        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
   860
          apply (subst continuous_map_of_snd [unfolded o_def])
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   861
          by (simp add: continuous_map_from_subtopology continuous_map_nsphere_projection)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   862
      next
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   863
        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
   864
         euclideanreal (\<lambda>x. snd x i)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   865
          apply (rule continuous_map_from_subtopology)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   866
          apply (subst continuous_map_of_snd [unfolded o_def])
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   867
          by (simp add: continuous_map_from_subtopology continuous_map_nsphere_projection)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   868
      next
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   869
        note fst = continuous_map_into_fulltopology [OF continuous_map_subtopology_fst]
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   870
        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
   871
          apply (simp add: nsphere)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   872
          apply (rule continuous_map_from_subtopology)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   873
          apply (subst continuous_map_of_snd [unfolded o_def])
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   874
          using continuous_map_from_subtopology continuous_map_nsphere_projection nsphere by fastforce
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   875
        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
   876
         euclideanreal (\<lambda>x. h (fst x, snd x) i)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   877
          apply (simp add: h_def case_prod_unfold Let_def)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   878
          apply (intro conjI impI fst snd continuous_intros)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   879
          apply (auto simp: nsphere power2_eq_1_iff)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   880
          done
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   881
      qed (auto simp: nsphere h)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   882
    qed (auto simp: nsphere h)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   883
  qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   884
  moreover
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   885
  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
   886
     \<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
   887
  proof -
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   888
    have "(\<Sum>i\<le>n. (h (T,x) i)\<^sup>2) = 1"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   889
      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
   890
    proof (cases "-T \<le> x k ")
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   891
      case True
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   892
      then show ?thesis
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   893
        using that by (auto simp: nsphere h)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   894
    next
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   895
      case False
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   896
      with x \<open>0 \<le> T\<close> have "k \<le> n"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   897
        apply (simp add: nsphere)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   898
        by (metis neg_le_0_iff_le not_le)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   899
      have "1 - (x k)\<^sup>2 \<ge> 0"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   900
        using topspace_nsphere_1 x by auto
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   901
      with False T \<open>k \<le> n\<close>
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   902
      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
   903
        unfolding h_def Let_def max_def
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   904
        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
   905
              sum.delta_remove sum_distrib_left)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   906
      also have "\<dots> = 1"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   907
        using x False xk \<open>0 \<le> T\<close>
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   908
        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
   909
      finally show ?thesis .
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   910
    qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   911
    moreover
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   912
    have "h (T,x) i = 0"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   913
      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
   914
      for T x i
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   915
    proof (cases "-T \<le> x k ")
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   916
      case False
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   917
      then show ?thesis
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   918
        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
   919
    qed (use that in \<open>auto simp: nsphere h\<close>)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   920
    ultimately show ?thesis
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   921
      by auto
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   922
  qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   923
  ultimately
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   924
  have cmh: "continuous_map (prod_topology ?T01 ?X12) (nsphere n) h"
82323
b022c013b04b Function space instead of image closure
paulson <lp15@cam.ac.uk>
parents: 79712
diff changeset
   925
  proof (subst (2) nsphere) 
b022c013b04b Function space instead of image closure
paulson <lp15@cam.ac.uk>
parents: 79712
diff changeset
   926
  qed (fastforce simp add: continuous_map_in_subtopology continuous_map_componentwise_UNIV)
70095
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   927
  have "hom_induced p (subtopology (nsphere n) {x. 0 \<le> x k})
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   928
             (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
   929
             (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
   930
            \<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
   931
                       (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
   932
                (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
   933
  proof (rule deformation_retract_relative_homology_group_isomorphism_id)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   934
    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
   935
      unfolding retraction_maps_def
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   936
    proof (intro conjI ballI)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   937
      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
   938
        apply (simp add: continuous_map_in_subtopology)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   939
        apply (intro conjI continuous_map_compose [OF _ cmh] continuous_intros)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   940
          apply (auto simp: h_def Let_def)
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
      show "continuous_map (subtopology (nsphere n) {x. 0 \<le> x k}) ?X12 id"
82323
b022c013b04b Function space instead of image closure
paulson <lp15@cam.ac.uk>
parents: 79712
diff changeset
   943
        by (simp add: continuous_map_in_subtopology)
70095
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   944
    qed (simp add: nsphere h)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   945
  next
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   946
    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
   947
      by (simp add: h_def Let_def)
82323
b022c013b04b Function space instead of image closure
paulson <lp15@cam.ac.uk>
parents: 79712
diff changeset
   948
    show "(h \<circ> (\<lambda>x. (0,x))) \<in> (topspace ?X12 \<inter> {x. - 1 / 2 \<le> x k \<and> x k \<le> 0})
b022c013b04b Function space instead of image closure
paulson <lp15@cam.ac.uk>
parents: 79712
diff changeset
   949
        \<rightarrow> topspace (subtopology (nsphere n) {x. 0 \<le> x k}) \<inter> {x. x k = 0}"
70095
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   950
      apply (auto simp: h0)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   951
      apply (rule subsetD [OF continuous_map_image_subset_topspace [OF cmh]])
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   952
      apply (force simp: nsphere)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   953
      done
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   954
    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
   955
      apply (rule subsetD [OF continuous_map_image_subset_topspace [OF cmh]])
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   956
      apply (force simp: nsphere)
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
    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
   959
      by (simp add: h nsphere)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   960
    have "continuous_map (prod_topology ?T01 ?X12) (nsphere n) h"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   961
      using cmh by force
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   962
    then show "homotopic_with
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   963
                 (\<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
   964
                 ?X12 ?X12 (h \<circ> (\<lambda>x. (0,x))) id"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   965
      apply (subst homotopic_with, force)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   966
      apply (rule_tac x=h in exI)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   967
      apply (auto simp: hin h1 continuous_map_in_subtopology)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   968
         apply (auto simp: h_def Let_def max_def)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   969
      done
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   970
  qed auto
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   971
  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
   972
             ?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
   973
            \<in> Group.iso
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   974
                (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
   975
                (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
   976
    by (metis hom_induced_restrict relative_homology_group_restrict topspace_subtopology)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   977
  show ?thesis
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   978
    using iso_set_trans [OF 2 1]
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   979
    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
   980
qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   981
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   982
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   983
corollary iso_upper_hemisphere_reduced_homology_group:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   984
   "(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
   985
  \<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
   986
        (reduced_homology_group p (nsphere n))"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   987
proof -
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   988
  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
   989
    by auto
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   990
  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
   991
    by (simp add: subtopology_nsphere_equator subtopology_subtopology)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   992
  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
   993
    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
   994
  show ?thesis
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   995
    unfolding n
82323
b022c013b04b Function space instead of image closure
paulson <lp15@cam.ac.uk>
parents: 79712
diff changeset
   996
    using iso_relative_homology_of_contractible [where p = "1 + p", simplified]
b022c013b04b Function space instead of image closure
paulson <lp15@cam.ac.uk>
parents: 79712
diff changeset
   997
    by (metis contractible_space_upper_hemisphere dual_order.refl empty_iff ne)
70095
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
corollary iso_reduced_homology_group_upper_hemisphere:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1001
  assumes "k \<le> n"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1002
  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
  1003
      \<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
  1004
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
  1005
  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
  1006
    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
  1007
  then show "topspace (nsphere n) \<inter> {x. 0 \<le> x k} \<noteq> {}"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1008
    by blast
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1009
qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1010
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1011
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1012
lemma iso_relative_homology_group_lower_hemisphere:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1013
  "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
  1014
  \<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
  1015
        (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
  1016
proof -
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1017
  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
  1018
  then have [simp]: "r \<circ> r = id"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1019
    by force
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1020
  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
  1021
    using continuous_map_nsphere_reflection [of n k]
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1022
    by (simp add: continuous_map_from_subtopology r_def)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1023
  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
  1024
                          (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
  1025
  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
  1026
  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
  1027
  obtain f h where
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1028
        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
  1029
    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
  1030
    and eq: "h \<circ> ?g \<circ> f = ?k"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1031
  proof
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1032
    have hmr: "homeomorphic_map (nsphere n) (nsphere n) r"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1033
      unfolding homeomorphic_map_maps
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1034
      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
  1035
    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
  1036
      by (simp add: homeomorphic_map_subtopologies_alt r_def)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1037
    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
  1038
               = 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
  1039
      using continuous_map_eq_topcontinuous_at continuous_map_nsphere_reflection topcontinuous_at_atin
78322
74c75da4cb01 Some fixes, and SOME TIME LIMITS
paulson <lp15@cam.ac.uk>
parents: 73932
diff changeset
  1040
      by (fastforce simp: r_def Pi_iff)
70095
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1041
    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
  1042
      using homeomorphic_map_relative_homology_iso [OF hmrs Int_lower1 rimeq]
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1043
      by (metis hom_induced_restrict relative_homology_group_restrict)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1044
    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
  1045
      by (metis hmrs homeomorphic_imp_surjective_map topspace_subtopology)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1046
    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
  1047
      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
  1048
    have [simp]: "\<And>x. x k = 0 \<Longrightarrow> r x k = 0"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1049
      by (auto simp: r_def)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1050
    have "?h \<circ> ?g \<circ> ?f
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1051
        = 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
  1052
          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
  1053
      apply (subst hom_induced_compose [symmetric])
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1054
      using continuous_map_nsphere_reflection apply (force simp: r_def)+
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1055
      done
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1056
    also have "\<dots> = ?k"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1057
      apply (subst hom_induced_compose [symmetric])
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1058
          apply (simp_all add: image_subset_iff cmr)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1059
      using hmrs homeomorphic_imp_continuous_map apply blast
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1060
      done
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1061
    finally show "?h \<circ> ?g \<circ> ?f = ?k" .
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1062
  qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1063
  with iso_relative_homology_group_upper_hemisphere [of p n k]
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1064
  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
  1065
  \<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
  1066
    using f h iso_set_trans by blast
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1067
  then show ?thesis
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1068
    by (simp add: eq)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1069
qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1070
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1071
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1072
lemma iso_lower_hemisphere_reduced_homology_group:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1073
   "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
  1074
  \<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
  1075
                        {x. x(Suc n) = 0})
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1076
        (reduced_homology_group p (nsphere n))"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1077
proof -
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1078
  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
  1079
       ({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
  1080
        {x. x (Suc n) = (0::real)})"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1081
    by (force simp: dest: Suc_lessI)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1082
  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
  1083
    by (simp add: nsphere subtopology_subtopology)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1084
  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
  1085
    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
  1086
  show ?thesis
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1087
    unfolding n
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1088
    apply (rule iso_relative_homology_of_contractible [where p = "1 + p", simplified])
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1089
    using contractible_space_lower_hemisphere ne apply blast+
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1090
    done
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1091
qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1092
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1093
lemma isomorphism_sym:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1094
  "\<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
  1095
     \<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
  1096
      \<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
  1097
  apply (clarsimp simp add: group.iso_iff_group_isomorphisms Bex_def)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1098
  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
  1099
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1100
lemma isomorphism_trans:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1101
  "\<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
  1102
   \<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
  1103
  apply clarify
82323
b022c013b04b Function space instead of image closure
paulson <lp15@cam.ac.uk>
parents: 79712
diff changeset
  1104
  by (smt (verit, ccfv_threshold) Group.iso_iff hom_in_carrier iso_set_trans
b022c013b04b Function space instead of image closure
paulson <lp15@cam.ac.uk>
parents: 79712
diff changeset
  1105
      o_apply)
70095
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1106
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1107
lemma reduced_homology_group_nsphere_step:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1108
   "\<exists>f \<in> iso(reduced_homology_group p (nsphere n))
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1109
            (reduced_homology_group (1 + p) (nsphere (Suc n))).
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1110
        \<forall>c \<in> carrier(reduced_homology_group p (nsphere n)).
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1111
             hom_induced (1 + p) (nsphere(Suc n)) {} (nsphere(Suc n)) {}
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1112
                         (\<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
  1113
           = 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
  1114
proof -
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1115
  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
  1116
  have cmr: "continuous_map (nsphere n) (nsphere n) r" for n
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1117
    unfolding r_def by (rule continuous_map_nsphere_reflection)
82323
b022c013b04b Function space instead of image closure
paulson <lp15@cam.ac.uk>
parents: 79712
diff changeset
  1118
  have rsub: "r \<in> {x. 0 \<le> x (Suc n)} \<rightarrow> {x. 0 \<le> x (Suc n)}" 
b022c013b04b Function space instead of image closure
paulson <lp15@cam.ac.uk>
parents: 79712
diff changeset
  1119
             "r \<in> {x. x (Suc n) \<le> 0} \<rightarrow> {x. x (Suc n) \<le> 0}" 
b022c013b04b Function space instead of image closure
paulson <lp15@cam.ac.uk>
parents: 79712
diff changeset
  1120
             "r \<in> {x. x (Suc n) = 0} \<rightarrow> {x. x (Suc n) = 0}"
70095
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1121
    by (force simp: r_def)+
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1122
  let ?sub = "subtopology (nsphere (Suc n)) {x. x (Suc n) \<ge> 0}"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1123
  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
  1124
  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
  1125
  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
  1126
  show ?thesis
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1127
    unfolding r_def [symmetric]
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1128
  proof (rule isomorphism_trans)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1129
    let ?f = "hom_boundary (1 + p) ?sub {x. x (Suc n) = 0}"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1130
    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
  1131
           \<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
  1132
    proof (rule isomorphism_sym)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1133
      show "?f \<in> Group.iso ?G2 (reduced_homology_group p (nsphere n))"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1134
        using iso_upper_hemisphere_reduced_homology_group
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1135
        by (metis add.commute)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1136
    next
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1137
      fix c
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1138
      assume "c \<in> carrier ?G2"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1139
      have cmrs: "continuous_map ?sub ?sub r"
82323
b022c013b04b Function space instead of image closure
paulson <lp15@cam.ac.uk>
parents: 79712
diff changeset
  1140
        by (metis (no_types, lifting) IntE Pi_iff cmr continuous_map_from_subtopology
b022c013b04b Function space instead of image closure
paulson <lp15@cam.ac.uk>
parents: 79712
diff changeset
  1141
            continuous_map_into_subtopology rsub(1) topspace_subtopology)
70095
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1142
      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
  1143
          = hom_boundary (1 + p) ?sub {x. x (Suc n) = 0} \<circ>
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1144
            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
  1145
        using naturality_hom_induced [OF cmrs rsub(3), symmetric, of "1+p", simplified]
82323
b022c013b04b Function space instead of image closure
paulson <lp15@cam.ac.uk>
parents: 79712
diff changeset
  1146
        by (simp add: Pi_iff subtopology_subtopology subtopology_nsphere_equator flip: Collect_conj_eq cong: rev_conj_cong)
70095
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1147
      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
  1148
        by (metis comp_def)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1149
    next
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1150
      fix c
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1151
      assume "c \<in> carrier ?G2"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1152
      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
  1153
        using hom_induced_carrier by blast
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1154
    qed auto
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1155
  next
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1156
    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
  1157
    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
  1158
    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
  1159
            = f (?r2 c)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1160
    proof (rule isomorphism_trans)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1161
      show "\<exists>f\<in>Group.iso ?G2 ?H2.
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1162
                 \<forall>c\<in>carrier ?G2.
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1163
                    ?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
  1164
      proof (intro ballI bexI)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1165
        fix c
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1166
        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
  1167
        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
  1168
            = 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
  1169
          apply (simp add: rsub hom_induced_compose' Collect_mono_iff cmr)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1170
          apply (subst hom_induced_compose')
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1171
              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
  1172
           apply (auto simp: r_def)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1173
          done
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1174
      qed (simp add: iso_relative_homology_group_upper_hemisphere)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1175
    next
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1176
      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
  1177
      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
  1178
               \<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
  1179
      proof (rule isomorphism_sym)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1180
        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
  1181
               (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
  1182
          using iso_reduced_homology_group_lower_hemisphere by blast
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1183
      next
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1184
        fix c
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1185
        assume "c \<in> carrier (reduced_homology_group (1 + p) (nsphere (Suc n)))"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1186
        show "?s2 (?h c) = ?h (?j (1 + p) (Suc n)  c)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1187
          by (simp add: hom_induced_compose' cmr rsub)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1188
      next
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1189
        fix c
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1190
        assume "c \<in> carrier (reduced_homology_group (1 + p) (nsphere (Suc n)))"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1191
        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
  1192
        \<in> carrier (reduced_homology_group (1 + p) (nsphere (Suc n)))"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1193
          by (simp add: hom_induced_reduced)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1194
      qed auto
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1195
    qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1196
  qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1197
qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1198
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1199
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1200
lemma reduced_homology_group_nsphere_aux:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1201
  "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
  1202
                     else trivial_group(reduced_homology_group p (nsphere n))"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1203
proof (induction n arbitrary: p)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1204
  case 0
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1205
  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
  1206
  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
  1207
  have st: "subtopology (powertop_real UNIV) {?a, ?b} = nsphere 0"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1208
  proof -
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1209
    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
  1210
      using power2_eq_iff by fastforce
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1211
    then show ?thesis
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1212
      by (simp add: nsphere)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1213
  qed
82323
b022c013b04b Function space instead of image closure
paulson <lp15@cam.ac.uk>
parents: 79712
diff changeset
  1214
  have "t1_space (powertop_real UNIV)"
b022c013b04b Function space instead of image closure
paulson <lp15@cam.ac.uk>
parents: 79712
diff changeset
  1215
    using t1_space_euclidean t1_space_product_topology by blast
b022c013b04b Function space instead of image closure
paulson <lp15@cam.ac.uk>
parents: 79712
diff changeset
  1216
  then have *: "reduced_homology_group p (subtopology (powertop_real UNIV) {?a, ?b}) \<cong>
70095
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1217
        homology_group p (subtopology (powertop_real UNIV) {?a})"
82323
b022c013b04b Function space instead of image closure
paulson <lp15@cam.ac.uk>
parents: 79712
diff changeset
  1218
    by (intro reduced_homology_group_pair) (auto simp: fun_eq_iff)
70095
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1219
  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
  1220
  proof -
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1221
    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
  1222
      by (metis * euclidean_product_topology st that)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1223
    also have "\<dots> \<cong> integer_group"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1224
      by (simp add: homology_coefficients)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1225
    finally show ?thesis
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1226
      using that by blast
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1227
  qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1228
  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
  1229
    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
  1230
    using isomorphic_group_triviality st by force
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1231
  ultimately show ?case
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1232
    by auto
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1233
next
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1234
  case (Suc n)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1235
  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
  1236
    by (simp add: Suc.IH)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1237
  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
  1238
    by (simp add: Suc.IH that)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1239
  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
  1240
    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
  1241
    by fastforce
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1242
  then show ?case
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1243
    using eq iso_trans iso isomorphic_group_triviality neq
73932
fd21b4a93043 added opaque_combs and renamed hide_lams to opaque_lifting
desharna
parents: 72632
diff changeset
  1244
    by (metis (no_types, opaque_lifting) add.commute add_left_cancel diff_add_cancel group_reduced_homology_group of_nat_Suc)
70095
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1245
qed
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
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1248
lemma reduced_homology_group_nsphere:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1249
  "reduced_homology_group n (nsphere n) \<cong> integer_group"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1250
  "p \<noteq> n \<Longrightarrow> trivial_group(reduced_homology_group p (nsphere n))"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1251
  using reduced_homology_group_nsphere_aux by auto
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1252
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1253
lemma cyclic_reduced_homology_group_nsphere:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1254
   "cyclic_group(reduced_homology_group p (nsphere n))"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1255
  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
  1256
      group_integer_group group_reduced_homology_group isomorphic_group_cyclicity)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1257
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1258
lemma trivial_reduced_homology_group_nsphere:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1259
   "trivial_group(reduced_homology_group p (nsphere n)) \<longleftrightarrow> (p \<noteq> n)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1260
  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
  1261
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1262
lemma non_contractible_space_nsphere: "\<not> (contractible_space(nsphere n))"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1263
  proof (clarsimp simp add: contractible_eq_homotopy_equivalent_singleton_subtopology)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1264
  fix a :: "nat \<Rightarrow> real"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1265
  assume a: "a \<in> topspace (nsphere n)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1266
    and he: "nsphere n homotopy_equivalent_space subtopology (nsphere n) {a}"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1267
  have "trivial_group (reduced_homology_group (int n) (subtopology (nsphere n) {a}))"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1268
    by (simp add: a homology_dimension_reduced [where a=a])
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1269
  then show "False"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1270
    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
  1271
    by (simp add: trivial_reduced_homology_group_nsphere)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1272
qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1273
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1274
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1275
subsection\<open>Brouwer degree of a Map\<close>
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1276
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1277
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
  1278
  where
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1279
 "Brouwer_degree2 p f \<equiv>
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1280
    @d::int. \<forall>x \<in> carrier(reduced_homology_group p (nsphere p)).
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1281
                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
  1282
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1283
lemma Brouwer_degree2_eq:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1284
   "(\<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
  1285
  unfolding Brouwer_degree2_def Ball_def
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1286
  apply (intro Eps_cong all_cong)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1287
  by (metis (mono_tags, lifting) hom_induced_eq)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1288
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1289
lemma Brouwer_degree2:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1290
  assumes "x \<in> carrier(reduced_homology_group p (nsphere p))"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1291
  shows "hom_induced p (nsphere p) {} (nsphere p) {} f x
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1292
       = pow (reduced_homology_group p (nsphere p)) x (Brouwer_degree2 p f)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1293
       (is "?h x = pow ?G x _")
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1294
proof (cases "continuous_map(nsphere p) (nsphere p) f")
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1295
  case True
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1296
  interpret group ?G
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1297
    by simp
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1298
  interpret group_hom ?G ?G ?h
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1299
    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
  1300
  obtain a where a: "a \<in> carrier ?G"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1301
    and aeq: "subgroup_generated ?G {a} = ?G"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1302
    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
  1303
  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
  1304
    using carrier_subgroup_generated_by_singleton by blast
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1305
  moreover have "?h a \<in> carrier (subgroup_generated ?G {a})"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1306
    by (simp add: a aeq hom_induced_reduced)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1307
  ultimately obtain d::int where d: "?h a = pow ?G a d"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1308
    by auto
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1309
  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
  1310
    if x: "x \<in> carrier ?G" for x
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1311
  proof -
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1312
    obtain n::int where xeq: "x = pow ?G a n"
79712
658f17274845 new less ad hoc implementation of the 'moura' tactic for skolemization
blanchet
parents: 78322
diff changeset
  1313
      using carra x aeq by auto
70095
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1314
    show ?thesis
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1315
      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
  1316
  qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1317
  show ?thesis
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1318
    unfolding Brouwer_degree2_def
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1319
    apply (rule someI2 [where a=d])
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1320
    using assms * apply blast+
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1321
    done
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1322
next
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1323
  case False
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1324
  show ?thesis
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1325
    unfolding Brouwer_degree2_def
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1326
    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
  1327
qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1328
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1329
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1330
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1331
lemma Brouwer_degree2_iff:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1332
  assumes f: "continuous_map (nsphere p) (nsphere p) f"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1333
    and x: "x \<in> carrier(reduced_homology_group p (nsphere p))"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1334
  shows "(hom_induced (int p) (nsphere p) {} (nsphere p) {} f x =
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1335
         x [^]\<^bsub>reduced_homology_group (int p) (nsphere p)\<^esub> d)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1336
    \<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
  1337
    (is  "(?h x = x [^]\<^bsub>?G\<^esub> d) \<longleftrightarrow> _")
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1338
proof -
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1339
  interpret group "?G"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1340
    by simp
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1341
  obtain a where a: "a \<in> carrier ?G"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1342
    and aeq: "subgroup_generated ?G {a} = ?G"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1343
    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
  1344
  then obtain i::int where i: "x = (a [^]\<^bsub>?G\<^esub> i)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1345
    using carrier_subgroup_generated_by_singleton x by fastforce
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1346
  then have "a [^]\<^bsub>?G\<^esub> i \<in> carrier ?G"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1347
    using x by blast
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1348
  have [simp]: "ord a = 0"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1349
    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
  1350
  show ?thesis
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1351
    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
  1352
qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1353
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1354
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1355
lemma Brouwer_degree2_unique:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1356
  assumes f: "continuous_map (nsphere p) (nsphere p) f"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1357
    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
  1358
               \<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
  1359
          (is "\<And>x. x \<in> carrier ?G \<Longrightarrow> ?h x = _")
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1360
  shows "Brouwer_degree2 p f = d"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1361
proof -
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1362
  obtain a where a: "a \<in> carrier ?G"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1363
    and aeq: "subgroup_generated ?G {a} = ?G"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1364
    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
  1365
  show ?thesis
82323
b022c013b04b Function space instead of image closure
paulson <lp15@cam.ac.uk>
parents: 79712
diff changeset
  1366
    using hi [OF a] unfolding Brouwer_degree2 a
b022c013b04b Function space instead of image closure
paulson <lp15@cam.ac.uk>
parents: 79712
diff changeset
  1367
    by (metis Brouwer_degree2_iff a aeq f group.trivial_group_subgroup_generated
b022c013b04b Function space instead of image closure
paulson <lp15@cam.ac.uk>
parents: 79712
diff changeset
  1368
        group_reduced_homology_group subsetI trivial_reduced_homology_group_nsphere)
70095
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1369
qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1370
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1371
lemma Brouwer_degree2_unique_generator:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1372
  assumes f: "continuous_map (nsphere p) (nsphere p) f"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1373
    and eq: "subgroup_generated (reduced_homology_group p (nsphere p)) {a}
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1374
           = reduced_homology_group p (nsphere p)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1375
    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
  1376
          (is "?h a = pow ?G a _")
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1377
  shows "Brouwer_degree2 p f = d"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1378
proof (cases "a \<in> carrier ?G")
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1379
  case True
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1380
  then show ?thesis
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1381
    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
  1382
              subset_singleton_iff trivial_reduced_homology_group_nsphere)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1383
next
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1384
  case False
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1385
  then show ?thesis
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1386
    using trivial_reduced_homology_group_nsphere [of p p]
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1387
    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
  1388
qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1389
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1390
lemma Brouwer_degree2_homotopic:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1391
  assumes "homotopic_with (\<lambda>x. True) (nsphere p) (nsphere p) f g"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1392
  shows "Brouwer_degree2 p f = Brouwer_degree2 p g"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1393
proof -
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1394
  have "continuous_map (nsphere p) (nsphere p) f"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1395
    using homotopic_with_imp_continuous_maps [OF assms] by auto
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1396
  show ?thesis
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1397
    using Brouwer_degree2_def assms homology_homotopy_empty by fastforce
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1398
qed
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_id [simp]: "Brouwer_degree2 p id = 1"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1401
proof (rule Brouwer_degree2_unique)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1402
  fix x
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1403
  assume x: "x \<in> carrier (reduced_homology_group (int p) (nsphere p))"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1404
  then have "x \<in> carrier (homology_group (int p) (nsphere p))"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1405
    using carrier_reduced_homology_group_subset by blast
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1406
  then show "hom_induced (int p) (nsphere p) {} (nsphere p) {} id x =
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1407
        x [^]\<^bsub>reduced_homology_group (int p) (nsphere p)\<^esub> (1::int)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1408
    by (simp add: hom_induced_id group.int_pow_1 x)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1409
qed auto
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1410
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1411
lemma Brouwer_degree2_compose:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1412
  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
  1413
  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
  1414
proof (rule Brouwer_degree2_unique)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1415
  show "continuous_map (nsphere p) (nsphere p) (g \<circ> f)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1416
    by (meson continuous_map_compose f g)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1417
next
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1418
  fix x
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1419
  assume x: "x \<in> carrier (reduced_homology_group (int p) (nsphere p))"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1420
  have "hom_induced (int p) (nsphere p) {} (nsphere p) {} (g \<circ> f) =
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1421
             hom_induced (int p) (nsphere p) {} (nsphere p) {} g \<circ>
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1422
             hom_induced (int p) (nsphere p) {} (nsphere p) {} f"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1423
    by (blast intro: hom_induced_compose [OF f _ g])
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1424
  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
  1425
        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
  1426
    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
  1427
qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1428
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1429
lemma Brouwer_degree2_homotopy_equivalence:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1430
  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
  1431
    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
  1432
  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
  1433
  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
  1434
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1435
lemma Brouwer_degree2_homeomorphic_maps:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1436
  assumes "homeomorphic_maps (nsphere p) (nsphere p) f g"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1437
  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
  1438
  using assms
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1439
  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
  1440
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1441
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1442
lemma Brouwer_degree2_retraction_map:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1443
  assumes "retraction_map (nsphere p) (nsphere p) f"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1444
  shows "\<bar>Brouwer_degree2 p f\<bar> = 1"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1445
proof -
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1446
  obtain g where g: "retraction_maps (nsphere p) (nsphere p) f g"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1447
    using assms by (auto simp: retraction_map_def)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1448
  show ?thesis
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1449
  proof (rule Brouwer_degree2_homotopy_equivalence)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1450
    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
  1451
      using g apply (auto simp: retraction_maps_def)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1452
      by (simp add: homotopic_with_equal continuous_map_compose)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1453
    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
  1454
      using g retraction_maps_def by blast+
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1455
  qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1456
qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1457
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1458
lemma Brouwer_degree2_section_map:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1459
  assumes "section_map (nsphere p) (nsphere p) f"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1460
  shows "\<bar>Brouwer_degree2 p f\<bar> = 1"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1461
proof -
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1462
  obtain g where g: "retraction_maps (nsphere p) (nsphere p) g f"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1463
    using assms by (auto simp: section_map_def)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1464
  show ?thesis
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1465
  proof (rule Brouwer_degree2_homotopy_equivalence)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1466
    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
  1467
      using g apply (auto simp: retraction_maps_def)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1468
      by (simp add: homotopic_with_equal continuous_map_compose)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1469
    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
  1470
      using g retraction_maps_def by blast+
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1471
  qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1472
qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1473
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1474
lemma Brouwer_degree2_homeomorphic_map:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1475
   "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
  1476
  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
  1477
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1478
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1479
lemma Brouwer_degree2_nullhomotopic:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1480
  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
  1481
  shows "Brouwer_degree2 p f = 0"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1482
proof -
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1483
  have contf: "continuous_map (nsphere p) (nsphere p) f"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1484
   and contc: "continuous_map (nsphere p) (nsphere p) (\<lambda>x. a)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1485
    using homotopic_with_imp_continuous_maps [OF assms] by metis+
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1486
  have "Brouwer_degree2 p f = Brouwer_degree2 p (\<lambda>x. a)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1487
    using Brouwer_degree2_homotopic [OF assms] .
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1488
  moreover
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1489
  let ?G = "reduced_homology_group (int p) (nsphere p)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1490
  interpret group ?G
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1491
    by simp
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1492
  have "Brouwer_degree2 p (\<lambda>x. a) = 0"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1493
  proof (rule Brouwer_degree2_unique [OF contc])
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1494
    fix c
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1495
    assume c: "c \<in> carrier ?G"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1496
    have "continuous_map (nsphere p) (subtopology (nsphere p) {a}) (\<lambda>f. a)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1497
      using contc continuous_map_in_subtopology by blast
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1498
    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
  1499
                 = hom_induced p (subtopology (nsphere p) {a}) {} (nsphere p) {} id \<circ>
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1500
                   hom_induced p (nsphere p) {} (subtopology (nsphere p) {a}) {} (\<lambda>x. a)"
82323
b022c013b04b Function space instead of image closure
paulson <lp15@cam.ac.uk>
parents: 79712
diff changeset
  1501
      by (metis continuous_map_id_subt fun.map_id hom_induced_compose_empty)
70095
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1502
    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
  1503
             \<one>\<^bsub>reduced_homology_group (int p) (subtopology (nsphere p) {a})\<^esub>"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1504
      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
  1505
      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
  1506
    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
  1507
        c [^]\<^bsub>?G\<^esub> (0::int)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1508
      apply (simp add: he 1)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1509
      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
  1510
  qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1511
  ultimately show ?thesis
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1512
    by metis
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1513
qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1514
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1515
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1516
lemma Brouwer_degree2_const: "Brouwer_degree2 p (\<lambda>x. a) = 0"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1517
proof (cases "continuous_map(nsphere p) (nsphere p) (\<lambda>x. a)")
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1518
  case True
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1519
  then show ?thesis
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1520
    by (auto intro: Brouwer_degree2_nullhomotopic [where a=a])
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1521
next
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1522
  case False
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1523
  let ?G = "reduced_homology_group (int p) (nsphere p)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1524
  let ?H = "homology_group (int p) (nsphere p)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1525
  interpret group ?G
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1526
    by simp
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1527
  have eq1: "\<one>\<^bsub>?H\<^esub> = \<one>\<^bsub>?G\<^esub>"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1528
    by (simp add: one_reduced_homology_group)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1529
  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
  1530
    by (metis False hom_induced_default one_relative_homology_group)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1531
  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
  1532
    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
  1533
  have [simp]: "ord c = 0"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1534
    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
  1535
  show ?thesis
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1536
    unfolding Brouwer_degree2_def
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1537
  proof (rule some_equality)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1538
    fix d :: "int"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1539
    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
  1540
    then have "c [^]\<^bsub>?G\<^esub> d = \<one>\<^bsub>?H\<^esub>"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1541
      using "*" c by blast
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1542
    then have "int (ord c) dvd d"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1543
      using c eq1 int_pow_eq_id by auto
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1544
    then show "d = 0"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1545
      by (simp add: * del: one_relative_homology_group)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1546
  qed (use "*" eq1 in force)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1547
qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1548
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1549
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1550
corollary Brouwer_degree2_nonsurjective:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1551
   "\<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
  1552
    \<Longrightarrow> Brouwer_degree2 p f = 0"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1553
  by (meson Brouwer_degree2_nullhomotopic nullhomotopic_nonsurjective_sphere_map)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1554
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1555
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1556
proposition Brouwer_degree2_reflection:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1557
  "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
  1558
proof (induction p)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1559
  case 0
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1560
  let ?G = "homology_group 0 (nsphere 0)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1561
  let ?D = "homology_group 0 (discrete_topology {()})"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1562
  interpret group ?G
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1563
    by simp
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1564
  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
  1565
  then have [simp]: "r \<circ> r = id"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1566
    by force
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1567
  have cmr: "continuous_map (nsphere 0) (nsphere 0) r"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1568
    by (simp add: r_def continuous_map_nsphere_reflection)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1569
  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
  1570
    if "c \<in> carrier(reduced_homology_group 0 (nsphere 0))" for c
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1571
  proof -
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1572
    have c: "c \<in> carrier ?G"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1573
      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
  1574
      using that by (auto simp: carrier_reduced_homology_group kernel_def)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1575
    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
  1576
    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
  1577
    have topn0: "topspace(nsphere 0) = {pp,nn}"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1578
      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
  1579
    have "t1_space (nsphere 0)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1580
      unfolding nsphere
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1581
      apply (rule t1_space_subtopology)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1582
      by (metis (full_types) open_fun_def t1_space t1_space_def)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1583
    then have dtn0: "discrete_topology {pp,nn} = nsphere 0"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1584
      using finite_t1_space_imp_discrete_topology [OF topn0] by auto
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1585
    have "pp \<noteq> nn"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1586
      by (auto simp: pp_def nn_def fun_eq_iff)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1587
    have [simp]: "r pp = nn" "r nn = pp"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1588
      by (auto simp: r_def pp_def nn_def fun_eq_iff)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1589
    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
  1590
                  \<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
  1591
            \<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
  1592
                  ?G" (is "?f \<in> iso (?P \<times>\<times> ?N) ?G")
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1593
      apply (rule homology_additivity_explicit)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1594
      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
  1595
    then have fim: "?f ` carrier(?P \<times>\<times> ?N) = carrier ?G"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1596
      by (simp add: iso_def bij_betw_def)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1597
    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
  1598
      using c by (force simp flip: fim)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1599
    let ?h = "\<lambda>xx. hom_induced 0 (subtopology (nsphere 0) {xx}) {} (discrete_topology {()}) {} (\<lambda>x. ())"
82323
b022c013b04b Function space instead of image closure
paulson <lp15@cam.ac.uk>
parents: 79712
diff changeset
  1600
    have "continuous_map (subtopology (nsphere 0) {nn}) (nsphere 0) r"
b022c013b04b Function space instead of image closure
paulson <lp15@cam.ac.uk>
parents: 79712
diff changeset
  1601
      using cmr continuous_map_from_subtopology by blast
b022c013b04b Function space instead of image closure
paulson <lp15@cam.ac.uk>
parents: 79712
diff changeset
  1602
    then have "retraction_map (subtopology (nsphere 0) {pp}) (subtopology (nsphere 0) {nn}) r"
b022c013b04b Function space instead of image closure
paulson <lp15@cam.ac.uk>
parents: 79712
diff changeset
  1603
      apply (simp add: retraction_map_def retraction_maps_def continuous_map_in_subtopology)
b022c013b04b Function space instead of image closure
paulson <lp15@cam.ac.uk>
parents: 79712
diff changeset
  1604
      using \<open>r nn = pp\<close> \<open>r pp = nn\<close> cmr continuous_map_from_subtopology
b022c013b04b Function space instead of image closure
paulson <lp15@cam.ac.uk>
parents: 79712
diff changeset
  1605
      by blast
70095
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1606
    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
  1607
      by (rule surj_hom_induced_retraction_map)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1608
    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
  1609
      using d' by auto
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1610
    have "section_map (subtopology (nsphere 0) {pp}) (discrete_topology {()}) (\<lambda>x. ())"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1611
      by (force simp: section_map_def retraction_maps_def topn0)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1612
    then have "?h pp \<in> mon ?P ?D"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1613
      by (rule mon_hom_induced_section_map)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1614
    then have one: "x = one ?P"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1615
      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
  1616
      using that by (simp add: mon_iff_hom_one)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1617
    interpret hpd: group_hom ?P ?D "?h pp"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1618
      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
  1619
    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
  1620
      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
  1621
    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
  1622
      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
  1623
    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
  1624
      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
  1625
    have "?h pp d =
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1626
          (hom_induced 0 (nsphere 0) {} (discrete_topology {()}) {} (\<lambda>x. ())
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1627
           \<circ> hom_induced 0 (subtopology (nsphere 0) {pp}) {} (nsphere 0) {} id) d"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1628
      by (simp flip: hom_induced_compose_empty)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1629
    moreover
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1630
    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
  1631
      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
  1632
    then have "?h pp e =
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1633
               (hom_induced 0 (nsphere 0) {} (discrete_topology {()}) {} (\<lambda>x. ())
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1634
                \<circ> hom_induced 0 (subtopology (nsphere 0) {nn}) {} (nsphere 0) {} id) d'"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1635
      by (simp flip: hom_induced_compose_empty eqd')
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1636
    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
  1637
      by (simp add: d e hom_induced_carrier)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1638
    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
  1639
      using ceq eqc by simp
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1640
    then have inv_p: "inv\<^bsub>?P\<^esub> d = e"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1641
      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
  1642
    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
  1643
      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
  1644
    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
  1645
               hom_induced 0 (subtopology (nsphere 0) {nn}) {} (nsphere 0) {} id \<circ>
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1646
               hom_induced 0 (subtopology (nsphere 0) {pp}) {} (subtopology (nsphere 0) {nn}) {} r"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1647
      using hom_induced_compose_empty continuous_map_id_subt by blast
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1648
    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
  1649
                  hom_induced 0 (subtopology (nsphere 0) {nn}) {} (nsphere 0) {} id d'"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1650
      apply (simp add: flip: inv_p eqd')
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1651
      using d hpg.hom_inv by auto
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1652
    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
  1653
                       \<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
  1654
      by (simp flip: eqc)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1655
    have "hom_induced 0 (nsphere 0) {} (nsphere 0) {} r \<circ>
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1656
          hom_induced 0 (subtopology (nsphere 0) {pp}) {} (nsphere 0) {} id =
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1657
          hom_induced 0 (subtopology (nsphere 0) {pp}) {} (nsphere 0) {} r"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1658
      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
  1659
    moreover
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1660
    have "hom_induced 0 (nsphere 0) {} (nsphere 0) {} r \<circ>
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1661
          hom_induced 0 (subtopology (nsphere 0) {pp}) {} (nsphere 0) {} r =
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1662
          hom_induced 0 (subtopology (nsphere 0) {pp}) {} (nsphere 0) {} id"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1663
      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
  1664
    ultimately show ?thesis
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1665
      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
  1666
  qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1667
  show ?case
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1668
    unfolding r_def [symmetric]
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1669
    using Brouwer_degree2_unique [OF cmr]
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1670
    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
  1671
next
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1672
  case (Suc p)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1673
  let ?G = "reduced_homology_group (int p) (nsphere p)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1674
  let ?G1 = "reduced_homology_group (1 + int p) (nsphere (Suc p))"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1675
  obtain f g where fg: "group_isomorphisms ?G ?G1 f g"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1676
    and *: "\<forall>c\<in>carrier ?G.
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1677
           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
  1678
           f (hom_induced p (nsphere p) {} (nsphere p) {} ?r c)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1679
    using reduced_homology_group_nsphere_step
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1680
    by (meson group.iso_iff_group_isomorphisms group_reduced_homology_group)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1681
  then have eq: "carrier ?G1 = f ` carrier ?G"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1682
    by (fastforce simp add: iso_iff dest: group_isomorphisms_imp_iso)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1683
  interpret group_hom ?G ?G1 f
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1684
    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
  1685
  have homf: "f \<in> hom ?G ?G1"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1686
    using fg group_isomorphisms_def by blast
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1687
  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
  1688
    if "y \<in> carrier ?G" for y
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1689
    by (simp add: that * Brouwer_degree2 Suc hom_int_pow)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1690
  then show ?case
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1691
    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
  1692
qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1693
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1694
end