src/HOL/Homology/Homology_Groups.thy
author paulson <lp15@cam.ac.uk>
Mon, 30 May 2022 12:46:11 +0100
changeset 75494 eded3fe9e600
parent 70095 e8f4ce87012b
child 78322 74c75da4cb01
permissions -rw-r--r--
Five slightly useful lemmas
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, II: Homology Groups\<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 Homology_Groups
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
     4
  imports Simplices "HOL-Algebra.Exact_Sequence"
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
subsection\<open>Homology Groups\<close>
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
     8
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
     9
text\<open>Now actually connect to group theory and set up homology groups. Note that we define homomogy
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    10
groups for all \emph{integers} @{term p}, since this seems to avoid some special-case reasoning,
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    11
though they are trivial for @{term"p < 0"}.\<close>
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    12
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    13
definition chain_group :: "nat \<Rightarrow> 'a topology \<Rightarrow> 'a chain monoid"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    14
  where "chain_group p X \<equiv> free_Abelian_group (singular_simplex_set p 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 carrier_chain_group [simp]: "carrier(chain_group p X) = singular_chain_set p X"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    17
  by (auto simp: chain_group_def singular_chain_def free_Abelian_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 one_chain_group [simp]: "one(chain_group p X) = 0"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    20
  by (auto simp: chain_group_def free_Abelian_group_def)
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 mult_chain_group [simp]: "monoid.mult(chain_group p X) = (+)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    23
  by (auto simp: chain_group_def free_Abelian_group_def)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    24
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    25
lemma m_inv_chain_group [simp]: "Poly_Mapping.keys a \<subseteq> singular_simplex_set p X \<Longrightarrow> inv\<^bsub>chain_group p X\<^esub> a = -a"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    26
  unfolding chain_group_def by simp
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    27
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    28
lemma group_chain_group [simp]: "Group.group (chain_group p X)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    29
  by (simp add: chain_group_def)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    30
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    31
lemma abelian_chain_group: "comm_group(chain_group p X)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    32
  by (simp add: free_Abelian_group_def group.group_comm_groupI [OF group_chain_group])
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    33
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    34
lemma subgroup_singular_relcycle:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    35
     "subgroup (singular_relcycle_set p X S) (chain_group p X)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    36
proof
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    37
  show "x \<otimes>\<^bsub>chain_group p X\<^esub> y \<in> singular_relcycle_set p X S"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    38
    if "x \<in> singular_relcycle_set p X S" and "y \<in> singular_relcycle_set p X S" for x y
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    39
    using that by (simp add: singular_relcycle_add)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    40
next
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    41
  show "inv\<^bsub>chain_group p X\<^esub> x \<in> singular_relcycle_set p X S"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    42
    if "x \<in> singular_relcycle_set p X S" for x
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    43
    using that
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    44
    by clarsimp (metis m_inv_chain_group singular_chain_def singular_relcycle singular_relcycle_minus)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    45
qed (auto simp: singular_relcycle)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    46
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    47
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    48
definition relcycle_group :: "nat \<Rightarrow> 'a topology \<Rightarrow> 'a set \<Rightarrow> ('a chain) monoid"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    49
  where "relcycle_group p X S \<equiv>
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    50
        subgroup_generated (chain_group p X) (Collect(singular_relcycle p X S))"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    51
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    52
lemma carrier_relcycle_group [simp]:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    53
  "carrier (relcycle_group p X S) = singular_relcycle_set p X S"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    54
proof -
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    55
  have "carrier (chain_group p X) \<inter> singular_relcycle_set p X S = singular_relcycle_set p X S"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    56
    using subgroup.subset subgroup_singular_relcycle by blast
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    57
  moreover have "generate (chain_group p X) (singular_relcycle_set p X S) \<subseteq> singular_relcycle_set p X S"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    58
    by (simp add: group.generate_subgroup_incl group_chain_group subgroup_singular_relcycle)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    59
  ultimately show ?thesis
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    60
    by (auto simp: relcycle_group_def subgroup_generated_def generate.incl)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    61
qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    62
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    63
lemma one_relcycle_group [simp]: "one(relcycle_group p X S) = 0"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    64
  by (simp add: relcycle_group_def)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    65
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    66
lemma mult_relcycle_group [simp]: "(\<otimes>\<^bsub>relcycle_group p X S\<^esub>) = (+)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    67
  by (simp add: relcycle_group_def)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    68
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    69
lemma abelian_relcycle_group [simp]:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    70
   "comm_group(relcycle_group p X S)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    71
  unfolding relcycle_group_def
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    72
  by (intro group.abelian_subgroup_generated group_chain_group) (auto simp: abelian_chain_group singular_relcycle)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    73
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    74
lemma group_relcycle_group [simp]: "group(relcycle_group p X S)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    75
  by (simp add: comm_group.axioms(2))
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    76
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    77
lemma relcycle_group_restrict [simp]:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    78
   "relcycle_group p X (topspace X \<inter> S) = relcycle_group p X S"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    79
  by (metis relcycle_group_def singular_relcycle_restrict)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    80
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    81
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    82
definition relative_homology_group :: "int \<Rightarrow> 'a topology \<Rightarrow> 'a set \<Rightarrow> ('a chain) set monoid"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    83
  where
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    84
    "relative_homology_group p X S \<equiv>
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    85
        if p < 0 then singleton_group undefined else
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    86
        (relcycle_group (nat p) X S) Mod (singular_relboundary_set (nat p) X S)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    87
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    88
abbreviation homology_group
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    89
  where "homology_group p X \<equiv> relative_homology_group p X {}"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    90
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    91
lemma relative_homology_group_restrict [simp]:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    92
   "relative_homology_group p X (topspace X \<inter> S) = relative_homology_group p X S"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    93
  by (simp add: relative_homology_group_def)
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 nontrivial_relative_homology_group:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    96
  fixes p::nat
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    97
  shows "relative_homology_group p X S
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    98
       = relcycle_group p X S Mod singular_relboundary_set p X S"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    99
  by (simp add: relative_homology_group_def)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   100
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   101
lemma singular_relboundary_ss:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   102
  "singular_relboundary p X S x \<Longrightarrow> Poly_Mapping.keys x \<subseteq> singular_simplex_set p X"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   103
    using singular_chain_def singular_relboundary_imp_chain by blast
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   104
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   105
lemma trivial_relative_homology_group [simp]:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   106
  "p < 0 \<Longrightarrow> trivial_group(relative_homology_group p X S)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   107
  by (simp add: relative_homology_group_def)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   108
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   109
lemma subgroup_singular_relboundary:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   110
     "subgroup (singular_relboundary_set p X S) (chain_group p X)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   111
  unfolding chain_group_def
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   112
proof unfold_locales
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   113
  show "singular_relboundary_set p X S
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   114
        \<subseteq> carrier (free_Abelian_group (singular_simplex_set p X))"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   115
    using singular_chain_def singular_relboundary_imp_chain by fastforce
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   116
next
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   117
  fix x
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   118
  assume "x \<in> singular_relboundary_set p X S"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   119
  then show "inv\<^bsub>free_Abelian_group (singular_simplex_set p X)\<^esub> x
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   120
             \<in> singular_relboundary_set p X S"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   121
    by (simp add: singular_relboundary_ss singular_relboundary_minus)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   122
qed (auto simp: free_Abelian_group_def singular_relboundary_add)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   123
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   124
lemma subgroup_singular_relboundary_relcycle:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   125
  "subgroup (singular_relboundary_set p X S) (relcycle_group p X S)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   126
  unfolding relcycle_group_def
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   127
  apply (rule group.subgroup_of_subgroup_generated)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   128
  by (auto simp: singular_relcycle subgroup_singular_relboundary intro: singular_relboundary_imp_relcycle)
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 normal_subgroup_singular_relboundary_relcycle:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   131
   "(singular_relboundary_set p X S) \<lhd> (relcycle_group p X S)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   132
  by (simp add: comm_group.normal_iff_subgroup subgroup_singular_relboundary_relcycle)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   133
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   134
lemma group_relative_homology_group [simp]:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   135
  "group (relative_homology_group p X S)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   136
  by (simp add: relative_homology_group_def normal.factorgroup_is_group
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   137
                normal_subgroup_singular_relboundary_relcycle)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   138
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   139
lemma right_coset_singular_relboundary:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   140
  "r_coset (relcycle_group p X S) (singular_relboundary_set p X S)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   141
  = (\<lambda>a. {b. homologous_rel p X S a b})"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   142
  using singular_relboundary_minus
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   143
  by (force simp: r_coset_def homologous_rel_def relcycle_group_def subgroup_generated_def)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   144
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   145
lemma carrier_relative_homology_group:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   146
   "carrier(relative_homology_group (int p) X S)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   147
 = (homologous_rel_set p X S) ` singular_relcycle_set p X S"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   148
  by (auto simp: set_eq_iff image_iff relative_homology_group_def FactGroup_def RCOSETS_def right_coset_singular_relboundary)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   149
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   150
lemma carrier_relative_homology_group_0:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   151
   "carrier(relative_homology_group 0 X S)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   152
 = (homologous_rel_set 0 X S) ` singular_relcycle_set 0 X S"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   153
  using carrier_relative_homology_group [of 0 X S] by simp
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   154
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   155
lemma one_relative_homology_group [simp]:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   156
  "one(relative_homology_group (int p) X S) = singular_relboundary_set p X S"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   157
  by (simp add: relative_homology_group_def FactGroup_def)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   158
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   159
lemma mult_relative_homology_group:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   160
  "(\<otimes>\<^bsub>relative_homology_group (int p) X S\<^esub>) = (\<lambda>R S. (\<Union>r\<in>R. \<Union>s\<in>S. {r + s}))"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   161
  unfolding relcycle_group_def subgroup_generated_def chain_group_def free_Abelian_group_def set_mult_def relative_homology_group_def FactGroup_def
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   162
  by force
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   163
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   164
lemma inv_relative_homology_group:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   165
  assumes "R \<in> carrier (relative_homology_group (int p) X S)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   166
  shows "m_inv(relative_homology_group (int p) X S) R = uminus ` R"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   167
proof (rule group.inv_equality [OF group_relative_homology_group _ assms])
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   168
  obtain c where c: "R = homologous_rel_set p X S c" "singular_relcycle p X S c"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   169
    using assms by (auto simp: carrier_relative_homology_group)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   170
  have "singular_relboundary p X S (b - a)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   171
    if "a \<in> R" and "b \<in> R" for a b
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   172
    using c that
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   173
    by clarify (metis homologous_rel_def homologous_rel_eq)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   174
  moreover
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   175
  have "x \<in> (\<Union>x\<in>R. \<Union>y\<in>R. {y - x})"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   176
    if "singular_relboundary p X S x" for x
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   177
    using c
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   178
    by simp (metis diff_eq_eq homologous_rel_def homologous_rel_refl homologous_rel_sym that)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   179
  ultimately
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   180
  have "(\<Union>x\<in>R. \<Union>xa\<in>R. {xa - x}) = singular_relboundary_set p X S"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   181
    by auto
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   182
  then show "uminus ` R \<otimes>\<^bsub>relative_homology_group (int p) X S\<^esub> R =
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   183
        \<one>\<^bsub>relative_homology_group (int p) X S\<^esub>"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   184
    by (auto simp: carrier_relative_homology_group mult_relative_homology_group)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   185
  have "singular_relcycle p X S (-c)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   186
    using c by (simp add: singular_relcycle_minus)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   187
  moreover have "homologous_rel p X S c x \<Longrightarrow> homologous_rel p X S (-c) (- x)" for x
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   188
    by (metis homologous_rel_def homologous_rel_sym minus_diff_eq minus_diff_minus)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   189
  moreover have "homologous_rel p X S (-c) x \<Longrightarrow> x \<in> uminus ` homologous_rel_set p X S c" for x
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   190
    by (clarsimp simp: image_iff) (metis add.inverse_inverse diff_0 homologous_rel_diff homologous_rel_refl)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   191
  ultimately show "uminus ` R \<in> carrier (relative_homology_group (int p) X S)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   192
    using c by (auto simp: carrier_relative_homology_group)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   193
qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   194
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   195
lemma homologous_rel_eq_relboundary:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   196
     "homologous_rel p X S c = singular_relboundary p X S
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   197
  \<longleftrightarrow> singular_relboundary p X S c" (is "?lhs = ?rhs")
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   198
proof
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   199
  assume ?lhs
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   200
  then show ?rhs
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   201
    unfolding homologous_rel_def
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   202
    by (metis diff_zero singular_relboundary_0)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   203
next
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   204
  assume R: ?rhs
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   205
  show ?lhs
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   206
    unfolding homologous_rel_def
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   207
    using singular_relboundary_diff R by fastforce
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   208
qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   209
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   210
lemma homologous_rel_set_eq_relboundary:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   211
     "homologous_rel_set p X S c = singular_relboundary_set p X S \<longleftrightarrow> singular_relboundary p X S c"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   212
  by (auto simp flip: homologous_rel_eq_relboundary)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   213
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   214
text\<open>Lift the boundary and induced maps to homology groups. We totalize both
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   215
 quite aggressively to the appropriate group identity in all "undefined"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   216
 situations, which makes several of the properties cleaner and simpler.\<close>
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   217
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   218
lemma homomorphism_chain_boundary:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   219
   "chain_boundary p \<in> hom (relcycle_group p X S) (relcycle_group(p - Suc 0) (subtopology X S) {})"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   220
    (is "?h \<in> hom ?G ?H")
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   221
proof (rule homI)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   222
  show "\<And>x. x \<in> carrier ?G \<Longrightarrow> ?h x  \<in> carrier ?H"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   223
    by (auto simp: singular_relcycle_def mod_subset_def chain_boundary_boundary)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   224
qed (simp add: relcycle_group_def subgroup_generated_def chain_boundary_add)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   225
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   226
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   227
lemma hom_boundary1:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   228
    "\<exists>d. \<forall>p X S.
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   229
          d p X S \<in> hom (relative_homology_group (int p) X S)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   230
                        (homology_group (int (p - Suc 0)) (subtopology X S))
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   231
       \<and> (\<forall>c. singular_relcycle p X S c
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   232
              \<longrightarrow> d p X S (homologous_rel_set p X S c)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   233
                = homologous_rel_set (p - Suc 0) (subtopology X S) {} (chain_boundary p c))"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   234
    (is "\<exists>d. \<forall>p X S. ?\<Phi> (d p X S) p X S")
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   235
proof ((subst choice_iff [symmetric])+, clarify)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   236
  fix p X and S :: "'a set"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   237
  define \<theta> where "\<theta> \<equiv> r_coset (relcycle_group(p - Suc 0) (subtopology X S) {})
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   238
                       (singular_relboundary_set (p - Suc 0) (subtopology X S) {}) \<circ> chain_boundary p"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   239
  define H where "H \<equiv> relative_homology_group (int (p - Suc 0)) (subtopology X S) {}"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   240
  define J where "J \<equiv> relcycle_group (p - Suc 0) (subtopology X S) {}"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   241
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   242
  have \<theta>: "\<theta> \<in> hom (relcycle_group p X S) H"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   243
    unfolding \<theta>_def
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   244
  proof (rule hom_compose)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   245
    show "chain_boundary p \<in> hom (relcycle_group p X S) J"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   246
      by (simp add: J_def homomorphism_chain_boundary)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   247
    show "(#>\<^bsub>relcycle_group (p - Suc 0) (subtopology X S) {}\<^esub>)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   248
         (singular_relboundary_set (p - Suc 0) (subtopology X S) {}) \<in> hom J H"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   249
      by (simp add: H_def J_def nontrivial_relative_homology_group
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   250
           normal.r_coset_hom_Mod normal_subgroup_singular_relboundary_relcycle)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   251
  qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   252
  have *: "singular_relboundary (p - Suc 0) (subtopology X S) {} (chain_boundary p c)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   253
    if "singular_relboundary p X S c" for c
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   254
  proof (cases "p=0")
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   255
    case True
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   256
    then show ?thesis
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   257
      by (metis chain_boundary_def singular_relboundary_0)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   258
  next
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   259
    case False
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   260
    with that have "\<exists>d. singular_chain p (subtopology X S) d \<and> chain_boundary p d = chain_boundary p c"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   261
      by (metis add.left_neutral chain_boundary_add chain_boundary_boundary_alt singular_relboundary)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   262
    with that False show ?thesis
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   263
      by (auto simp: singular_boundary)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   264
  qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   265
  have \<theta>_eq: "\<theta> x = \<theta> y"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   266
    if x: "x \<in> singular_relcycle_set p X S" and y: "y \<in> singular_relcycle_set p X S"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   267
      and eq: "singular_relboundary_set p X S #>\<^bsub>relcycle_group p X S\<^esub> x
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   268
             = singular_relboundary_set p X S #>\<^bsub>relcycle_group p X S\<^esub> y" for x y
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   269
  proof -
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   270
    have "singular_relboundary p X S (x-y)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   271
      by (metis eq homologous_rel_def homologous_rel_eq mem_Collect_eq right_coset_singular_relboundary)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   272
    with * have "(singular_relboundary (p - Suc 0) (subtopology X S) {}) (chain_boundary p (x-y))"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   273
      by blast
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   274
  then show ?thesis
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   275
    unfolding \<theta>_def comp_def
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   276
    by (metis chain_boundary_diff homologous_rel_def homologous_rel_eq right_coset_singular_relboundary)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   277
qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   278
  obtain d
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   279
    where "d \<in> hom ((relcycle_group p X S) Mod (singular_relboundary_set p X S)) H"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   280
      and d: "\<And>u. u \<in> singular_relcycle_set p X S \<Longrightarrow> d (homologous_rel_set p X S u) = \<theta> u"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   281
    by (metis FactGroup_universal [OF \<theta> normal_subgroup_singular_relboundary_relcycle \<theta>_eq] right_coset_singular_relboundary carrier_relcycle_group)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   282
  then have "d \<in> hom (relative_homology_group p X S) H"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   283
    by (simp add: nontrivial_relative_homology_group)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   284
  then show  "\<exists>d. ?\<Phi> d p X S"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   285
    by (force simp: H_def right_coset_singular_relboundary d \<theta>_def)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   286
qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   287
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   288
lemma hom_boundary2:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   289
  "\<exists>d. (\<forall>p X S.
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   290
           (d p X S) \<in> hom (relative_homology_group p X S)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   291
                           (homology_group (p - 1) (subtopology X S)))
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   292
     \<and> (\<forall>p X S c. singular_relcycle p X S c \<and> Suc 0 \<le> p
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   293
            \<longrightarrow> d p X S (homologous_rel_set p X S c)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   294
              = homologous_rel_set (p - Suc 0) (subtopology X S) {} (chain_boundary p c))"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   295
  (is "\<exists>d. ?\<Phi> d")
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   296
proof -
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   297
  have *: "\<exists>f. \<Phi>(\<lambda>p. if p \<le> 0 then \<lambda>q r t. undefined else f(nat p)) \<Longrightarrow> \<exists>f. \<Phi> f"  for \<Phi>
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   298
    by blast
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   299
  show ?thesis
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   300
    apply (rule * [OF ex_forward [OF hom_boundary1]])
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   301
    apply (simp add: not_le relative_homology_group_def nat_diff_distrib' int_eq_iff nat_diff_distrib flip: nat_1)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   302
    by (simp add: hom_def singleton_group_def)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   303
qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   304
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   305
lemma hom_boundary3:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   306
  "\<exists>d. ((\<forall>p X S c. c \<notin> carrier(relative_homology_group p X S)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   307
              \<longrightarrow> d p X S c = one(homology_group (p-1) (subtopology X S))) \<and>
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   308
       (\<forall>p X S.
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   309
          d p X S \<in> hom (relative_homology_group p X S)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   310
                        (homology_group (p-1) (subtopology X S))) \<and>
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   311
       (\<forall>p X S c.
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   312
            singular_relcycle p X S c \<and> 1 \<le> p
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   313
            \<longrightarrow> d p X S (homologous_rel_set p X S c)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   314
              = homologous_rel_set (p - Suc 0) (subtopology X S) {} (chain_boundary p c)) \<and>
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   315
       (\<forall>p X S. d p X S = d p X (topspace X \<inter> S))) \<and>
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   316
       (\<forall>p X S c. d p X S c \<in> carrier(homology_group (p-1) (subtopology X S))) \<and>
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   317
       (\<forall>p. p \<le> 0 \<longrightarrow> d p = (\<lambda>q r t. undefined))"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   318
  (is "\<exists>x. ?P x \<and> ?Q x \<and> ?R x")
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   319
proof -
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   320
  have "\<And>x. ?Q x \<Longrightarrow> ?R x"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   321
    by (erule all_forward) (force simp: relative_homology_group_def)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   322
  moreover have "\<exists>x. ?P x \<and> ?Q x"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   323
  proof -
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   324
    obtain d:: "[int, 'a topology, 'a set, ('a chain) set] \<Rightarrow> ('a chain) set"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   325
      where 1: "\<And>p X S. d p X S \<in> hom (relative_homology_group p X S)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   326
                                      (homology_group (p - 1) (subtopology X S))"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   327
        and 2: "\<And>n X S c. singular_relcycle n X S c \<and> Suc 0 \<le> n
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   328
                  \<Longrightarrow> d n X S (homologous_rel_set n X S c)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   329
                    = homologous_rel_set (n - Suc 0) (subtopology X S) {} (chain_boundary n c)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   330
      using hom_boundary2 by blast
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   331
    have 4: "c \<in> carrier (relative_homology_group p X S) \<Longrightarrow>
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   332
        d p X (topspace X \<inter> S) c \<in> carrier (relative_homology_group (p-1) (subtopology X S) {})"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   333
      for p X S c
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   334
      using hom_carrier [OF 1 [of p X "topspace X \<inter> S"]]
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   335
      by (simp add: image_subset_iff subtopology_restrict)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   336
    show ?thesis
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   337
      apply (rule_tac x="\<lambda>p X S c.
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   338
               if c \<in> carrier(relative_homology_group p X S)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   339
               then d p X (topspace X \<inter> S) c
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   340
               else one(homology_group (p - 1) (subtopology X S))" in exI)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   341
      apply (simp add: Int_left_absorb subtopology_restrict carrier_relative_homology_group
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   342
          group.is_monoid group.restrict_hom_iff 4 cong: if_cong)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   343
      apply (rule conjI)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   344
       apply (metis 1 relative_homology_group_restrict subtopology_restrict)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   345
      apply (metis 2 homologous_rel_restrict singular_relcycle_def subtopology_restrict)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   346
      done
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   347
  qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   348
  ultimately show ?thesis
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   349
    by auto
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   350
qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   351
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   352
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   353
consts hom_boundary :: "[int,'a topology,'a set,'a chain set] \<Rightarrow> 'a chain set"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   354
specification (hom_boundary)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   355
  hom_boundary:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   356
      "((\<forall>p X S c. c \<notin> carrier(relative_homology_group p X S)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   357
              \<longrightarrow> hom_boundary p X S c = one(homology_group (p-1) (subtopology X (S::'a set)))) \<and>
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   358
       (\<forall>p X S.
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   359
          hom_boundary p X S \<in> hom (relative_homology_group p X S)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   360
                        (homology_group (p-1) (subtopology X (S::'a set)))) \<and>
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   361
       (\<forall>p X S c.
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   362
            singular_relcycle p X S c \<and> 1 \<le> p
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   363
            \<longrightarrow> hom_boundary p X S (homologous_rel_set p X S c)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   364
              = homologous_rel_set (p - Suc 0) (subtopology X (S::'a set)) {} (chain_boundary p c)) \<and>
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   365
       (\<forall>p X S. hom_boundary p X S = hom_boundary p X (topspace X \<inter> (S::'a set)))) \<and>
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   366
       (\<forall>p X S c. hom_boundary p X S c \<in> carrier(homology_group (p-1) (subtopology X (S::'a set)))) \<and>
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   367
       (\<forall>p. p \<le> 0 \<longrightarrow> hom_boundary p = (\<lambda>q r. \<lambda>t::'a chain set. undefined))"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   368
  by (fact hom_boundary3)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   369
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   370
lemma hom_boundary_default:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   371
  "c \<notin> carrier(relative_homology_group p X S)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   372
      \<Longrightarrow> hom_boundary p X S c = one(homology_group (p-1) (subtopology X S))"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   373
  and hom_boundary_hom: "hom_boundary p X S \<in> hom (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
   374
  and hom_boundary_restrict [simp]: "hom_boundary p X (topspace X \<inter> S) = hom_boundary p X S"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   375
  and hom_boundary_carrier: "hom_boundary p X S c \<in> carrier(homology_group (p-1) (subtopology X S))"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   376
  and hom_boundary_trivial: "p \<le> 0 \<Longrightarrow> hom_boundary p = (\<lambda>q r t. undefined)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   377
  by (metis hom_boundary)+
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   378
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   379
lemma hom_boundary_chain_boundary:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   380
  "\<lbrakk>singular_relcycle p X S c; 1 \<le> p\<rbrakk>
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   381
    \<Longrightarrow> hom_boundary (int p) X S (homologous_rel_set p X S c) =
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   382
        homologous_rel_set (p - Suc 0) (subtopology X S) {} (chain_boundary p c)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   383
  by (metis hom_boundary)+
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   384
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   385
lemma hom_chain_map:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   386
   "\<lbrakk>continuous_map X Y f; f ` S \<subseteq> T\<rbrakk>
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   387
        \<Longrightarrow> (chain_map p f) \<in> hom (relcycle_group p X S) (relcycle_group p Y T)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   388
  by (force simp: chain_map_add singular_relcycle_chain_map hom_def)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   389
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   390
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   391
lemma hom_induced1:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   392
  "\<exists>hom_relmap.
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   393
    (\<forall>p X S Y T f.
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   394
        continuous_map X Y f \<and> f ` (topspace X \<inter> S) \<subseteq> T
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   395
        \<longrightarrow> (hom_relmap p X S Y T f) \<in> hom (relative_homology_group (int p) X S)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   396
                               (relative_homology_group (int p) Y T)) \<and>
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   397
    (\<forall>p X S Y T f c.
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   398
        continuous_map X Y f \<and> f ` (topspace X \<inter> S) \<subseteq> T \<and>
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   399
        singular_relcycle p X S c
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   400
        \<longrightarrow> hom_relmap p X S Y T f (homologous_rel_set p X S c) =
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   401
            homologous_rel_set p Y T (chain_map p f c))"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   402
proof -
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   403
  have "\<exists>y. (y \<in> hom (relative_homology_group (int p) X S) (relative_homology_group (int p) Y T)) \<and>
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   404
           (\<forall>c. singular_relcycle p X S c \<longrightarrow>
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   405
                y (homologous_rel_set p X S c) = homologous_rel_set p Y T (chain_map p f c))"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   406
    if contf: "continuous_map X Y f" and fim: "f ` (topspace X \<inter> S) \<subseteq> T"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   407
    for p X S Y T and f :: "'a \<Rightarrow> 'b"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   408
  proof -
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   409
    let ?f = "(#>\<^bsub>relcycle_group p Y T\<^esub>) (singular_relboundary_set p Y T) \<circ> chain_map p f"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   410
    let ?F = "\<lambda>x. singular_relboundary_set p X S #>\<^bsub>relcycle_group p X S\<^esub> x"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   411
    have 1: "?f \<in> hom (relcycle_group p X S) (relative_homology_group (int p) Y T)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   412
      apply (rule hom_compose [where H = "relcycle_group p Y T"])
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   413
       apply (metis contf fim hom_chain_map relcycle_group_restrict)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   414
      by (simp add: nontrivial_relative_homology_group normal.r_coset_hom_Mod normal_subgroup_singular_relboundary_relcycle)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   415
    have 2: "singular_relboundary_set p X S \<lhd> relcycle_group p X S"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   416
      using normal_subgroup_singular_relboundary_relcycle by blast
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   417
    have 3: "?f x = ?f y"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   418
      if "singular_relcycle p X S x" "singular_relcycle p X S y" "?F x = ?F y" for x y
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   419
    proof -
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   420
      have "singular_relboundary p Y T (chain_map p f (x - y))"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   421
        apply (rule singular_relboundary_chain_map [OF _ contf fim])
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   422
        by (metis homologous_rel_def homologous_rel_eq mem_Collect_eq right_coset_singular_relboundary singular_relboundary_restrict that(3))
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   423
      then have "singular_relboundary p Y T (chain_map p f x - chain_map p f y)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   424
        by (simp add: chain_map_diff)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   425
      with that
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   426
      show ?thesis
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   427
        apply (simp add: right_coset_singular_relboundary homologous_rel_set_eq)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   428
        apply (simp add: homologous_rel_def)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   429
        done
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   430
    qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   431
    obtain g where "g \<in> hom (relcycle_group p X S Mod singular_relboundary_set p X S)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   432
                            (relative_homology_group (int p) Y T)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   433
                   "\<And>x. x \<in> singular_relcycle_set p X S \<Longrightarrow> g (?F x) = ?f x"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   434
      using FactGroup_universal [OF 1 2 3, unfolded carrier_relcycle_group] by blast
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   435
    then show ?thesis
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   436
      by (force simp: right_coset_singular_relboundary nontrivial_relative_homology_group)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   437
  qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   438
  then show ?thesis
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   439
    apply (simp flip: all_conj_distrib)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   440
    apply ((subst choice_iff [symmetric])+)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   441
    apply metis
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   442
    done
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   443
qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   444
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   445
lemma hom_induced2:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   446
    "\<exists>hom_relmap.
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   447
      (\<forall>p X S Y T f.
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   448
          continuous_map X Y f \<and>
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   449
          f ` (topspace X \<inter> S) \<subseteq> T
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   450
          \<longrightarrow> (hom_relmap p X S Y T f) \<in> hom (relative_homology_group p X S)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   451
                                 (relative_homology_group p Y T)) \<and>
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   452
      (\<forall>p X S Y T f c.
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   453
          continuous_map X Y f \<and>
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   454
          f ` (topspace X \<inter> S) \<subseteq> T \<and>
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   455
          singular_relcycle p X S c
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   456
          \<longrightarrow> hom_relmap p X S Y T f (homologous_rel_set p X S c) =
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   457
              homologous_rel_set p Y T (chain_map p f c)) \<and>
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   458
      (\<forall>p. p < 0 \<longrightarrow> hom_relmap p = (\<lambda>X S Y T f c. undefined))"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   459
  (is "\<exists>d. ?\<Phi> d")
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   460
proof -
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   461
  have *: "\<exists>f. \<Phi>(\<lambda>p. if p < 0 then \<lambda>X S Y T f c. undefined else f(nat p)) \<Longrightarrow> \<exists>f. \<Phi> f"  for \<Phi>
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   462
    by blast
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   463
  show ?thesis
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   464
    apply (rule * [OF ex_forward [OF hom_induced1]])
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   465
    apply (simp add: not_le relative_homology_group_def nat_diff_distrib' int_eq_iff nat_diff_distrib flip: nat_1)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   466
    done
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   467
qed
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 hom_induced3:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   470
  "\<exists>hom_relmap.
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   471
    ((\<forall>p X S Y T f c.
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   472
        ~(continuous_map X Y f \<and> f ` (topspace X \<inter> S) \<subseteq> T \<and>
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   473
          c \<in> carrier(relative_homology_group p X S))
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   474
        \<longrightarrow> hom_relmap p X S Y T f c = one(relative_homology_group p Y T)) \<and>
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   475
    (\<forall>p X S Y T f.
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   476
        hom_relmap p X S Y T f \<in> hom (relative_homology_group p X S) (relative_homology_group p Y T)) \<and>
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   477
    (\<forall>p X S Y T f c.
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   478
        continuous_map X Y f \<and> f ` (topspace X \<inter> S) \<subseteq> T \<and> singular_relcycle p X S c
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   479
        \<longrightarrow> hom_relmap p X S Y T f (homologous_rel_set p X S c) =
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   480
            homologous_rel_set p Y T (chain_map p f c)) \<and>
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   481
    (\<forall>p X S Y T.
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   482
        hom_relmap p X S Y T =
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   483
        hom_relmap p X (topspace X \<inter> S) Y (topspace Y \<inter> T))) \<and>
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   484
    (\<forall>p X S Y f T c.
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   485
        hom_relmap p X S Y T f c \<in> carrier(relative_homology_group p Y T)) \<and>
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   486
    (\<forall>p. p < 0 \<longrightarrow> hom_relmap p = (\<lambda>X S Y T f c. undefined))"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   487
  (is "\<exists>x. ?P x \<and> ?Q x \<and> ?R x")
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   488
proof -
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   489
  have "\<And>x. ?Q x \<Longrightarrow> ?R x"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   490
    by (erule all_forward) (fastforce simp: relative_homology_group_def)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   491
  moreover have "\<exists>x. ?P x \<and> ?Q x"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   492
  proof -
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   493
    obtain hom_relmap:: "[int,'a topology,'a set,'b topology,'b set,'a \<Rightarrow> 'b,('a chain) set] \<Rightarrow> ('b chain) set"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   494
      where 1: "\<And>p X S Y T f. \<lbrakk>continuous_map X Y f; f ` (topspace X \<inter> S) \<subseteq> T\<rbrakk> \<Longrightarrow>
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   495
                   hom_relmap p X S Y T f
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   496
                   \<in> hom (relative_homology_group p X S) (relative_homology_group p Y T)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   497
        and 2: "\<And>p X S Y T f c.
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   498
                   \<lbrakk>continuous_map X Y f; f ` (topspace X \<inter> S) \<subseteq> T; singular_relcycle p X S c\<rbrakk>
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   499
                   \<Longrightarrow>
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   500
                   hom_relmap (int p) X S Y T f (homologous_rel_set p X S c) =
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   501
                   homologous_rel_set p Y T (chain_map p f c)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   502
        and 3: "(\<forall>p. p < 0 \<longrightarrow> hom_relmap p = (\<lambda>X S Y T f c. undefined))"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   503
      using hom_induced2 [where ?'a='a and ?'b='b]
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   504
      apply clarify
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   505
      apply (rule_tac hom_relmap=hom_relmap in that, auto)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   506
      done
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   507
    have 4: "\<lbrakk>continuous_map X Y f; f ` (topspace X \<inter> S) \<subseteq> T; c \<in> carrier (relative_homology_group p X S)\<rbrakk> \<Longrightarrow>
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   508
        hom_relmap p X (topspace X \<inter> S) Y (topspace Y \<inter> T) f c
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   509
           \<in> carrier (relative_homology_group p Y T)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   510
      for p X S Y f T c
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   511
      using hom_carrier [OF 1 [of X Y f "topspace X \<inter> S" "topspace Y \<inter> T" p]]
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   512
      by (simp add: image_subset_iff subtopology_restrict continuous_map_def)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   513
    have inhom: "(\<lambda>c. if continuous_map X Y f \<and> f ` (topspace X \<inter> S) \<subseteq> T \<and>
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   514
                      c \<in> carrier (relative_homology_group p X S)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   515
            then hom_relmap p X (topspace X \<inter> S) Y (topspace Y \<inter> T) f c
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   516
            else \<one>\<^bsub>relative_homology_group p Y T\<^esub>)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   517
       \<in> hom (relative_homology_group p X S) (relative_homology_group p Y T)" (is "?h \<in> hom ?GX ?GY")
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   518
      for p X S Y T f
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   519
    proof (rule homI)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   520
      show "\<And>x. x \<in> carrier ?GX \<Longrightarrow> ?h x \<in> carrier ?GY"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   521
        by (auto simp: 4 group.is_monoid)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   522
      show "?h (x \<otimes>\<^bsub>?GX\<^esub> y) = ?h x \<otimes>\<^bsub>?GY\<^esub>?h y" if "x \<in> carrier ?GX" "y \<in> carrier ?GX" for x y
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   523
      proof (cases "p < 0")
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   524
        case True
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   525
        with that show ?thesis
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   526
          by (simp add: relative_homology_group_def singleton_group_def 3)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   527
      next
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   528
        case False
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   529
        show ?thesis
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   530
        proof (cases "continuous_map X Y f")
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   531
          case True
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   532
          then have "f ` (topspace X \<inter> S) \<subseteq> topspace Y"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   533
            by (meson IntE continuous_map_def image_subsetI)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   534
          then show ?thesis
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   535
            using True False that
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   536
          using 1 [of X Y f "topspace X \<inter> S" "topspace Y \<inter> T" p]
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   537
          by (simp add: 4 continuous_map_image_subset_topspace hom_mult not_less group.is_monoid monoid.m_closed Int_left_absorb)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   538
        qed (simp add: group.is_monoid)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   539
      qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   540
    qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   541
    have hrel: "\<lbrakk>continuous_map X Y f; f ` (topspace X \<inter> S) \<subseteq> T; singular_relcycle p X S c\<rbrakk>
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   542
            \<Longrightarrow> hom_relmap (int p) X (topspace X \<inter> S) Y (topspace Y \<inter> T)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   543
              f (homologous_rel_set p X S c) = homologous_rel_set p Y T (chain_map p f c)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   544
        for p X S Y T f c
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   545
      using 2 [of X Y f "topspace X \<inter> S" "topspace Y \<inter> T" p c]
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   546
      by simp (meson IntE continuous_map_def image_subsetI)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   547
    show ?thesis
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   548
      apply (rule_tac x="\<lambda>p X S Y T f c.
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   549
               if continuous_map X Y f \<and> f ` (topspace X \<inter> S) \<subseteq> T \<and>
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   550
                  c \<in> carrier(relative_homology_group p X S)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   551
               then hom_relmap p X (topspace X \<inter> S) Y (topspace Y \<inter> T) f c
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   552
               else one(relative_homology_group p Y T)" in exI)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   553
      apply (simp add: Int_left_absorb subtopology_restrict carrier_relative_homology_group
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   554
          group.is_monoid group.restrict_hom_iff 4 inhom hrel cong: if_cong)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   555
      apply (force simp: continuous_map_def intro!: ext)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   556
      done
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   557
  qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   558
  ultimately show ?thesis
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   559
    by auto
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   560
qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   561
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   562
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   563
consts hom_induced:: "[int,'a topology,'a set,'b topology,'b set,'a \<Rightarrow> 'b,('a chain) set] \<Rightarrow> ('b chain) set"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   564
specification (hom_induced)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   565
  hom_induced:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   566
    "((\<forall>p X S Y T f c.
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   567
        ~(continuous_map X Y f \<and>
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   568
          f ` (topspace X \<inter> S) \<subseteq> T \<and>
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   569
          c \<in> carrier(relative_homology_group p X S))
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   570
        \<longrightarrow> hom_induced p X (S::'a set) Y (T::'b set) f c =
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   571
            one(relative_homology_group p Y T)) \<and>
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   572
    (\<forall>p X S Y T f.
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   573
        (hom_induced p X (S::'a set) Y (T::'b set) f) \<in> hom (relative_homology_group p X S)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   574
                           (relative_homology_group p Y T)) \<and>
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   575
    (\<forall>p X S Y T f c.
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   576
        continuous_map X Y f \<and>
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   577
        f ` (topspace X \<inter> S) \<subseteq> T \<and>
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   578
        singular_relcycle p X S c
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   579
        \<longrightarrow> hom_induced p X (S::'a set) Y (T::'b set) f (homologous_rel_set p X S c) =
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   580
            homologous_rel_set p Y T (chain_map p f c)) \<and>
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   581
    (\<forall>p X S Y T.
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   582
        hom_induced p X (S::'a set) Y (T::'b set) =
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   583
        hom_induced p X (topspace X \<inter> S) Y (topspace Y \<inter> T))) \<and>
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   584
    (\<forall>p X S Y f T c.
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   585
        hom_induced p X (S::'a set) Y (T::'b set) f c \<in>
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   586
        carrier(relative_homology_group p Y T)) \<and>
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   587
    (\<forall>p. p < 0 \<longrightarrow> hom_induced p = (\<lambda>X S Y T. \<lambda>f::'a\<Rightarrow>'b. \<lambda>c. undefined))"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   588
  by (fact hom_induced3)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   589
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   590
lemma hom_induced_default:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   591
    "~(continuous_map X Y f \<and> f ` (topspace X \<inter> S) \<subseteq> T \<and> c \<in> carrier(relative_homology_group p X S))
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   592
          \<Longrightarrow> hom_induced p X S Y T f c = one(relative_homology_group p Y T)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   593
  and hom_induced_hom:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   594
    "hom_induced p X S Y T f \<in> hom (relative_homology_group p X S) (relative_homology_group p Y T)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   595
  and hom_induced_restrict [simp]:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   596
    "hom_induced p X (topspace X \<inter> S) Y (topspace Y \<inter> T) = hom_induced p X S Y T"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   597
  and hom_induced_carrier:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   598
    "hom_induced p X S Y T f c \<in> carrier(relative_homology_group p Y T)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   599
  and hom_induced_trivial: "p < 0 \<Longrightarrow> hom_induced p = (\<lambda>X S Y T f c. undefined)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   600
  by (metis hom_induced)+
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   601
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   602
lemma hom_induced_chain_map_gen:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   603
  "\<lbrakk>continuous_map X Y f; f ` (topspace X \<inter> S) \<subseteq> T; singular_relcycle p X S c\<rbrakk>
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   604
  \<Longrightarrow> hom_induced p X S Y T f (homologous_rel_set p X S c) = homologous_rel_set p Y T (chain_map p f c)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   605
  by (metis hom_induced)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   606
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   607
lemma hom_induced_chain_map:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   608
   "\<lbrakk>continuous_map X Y f; f ` S \<subseteq> T; singular_relcycle p X S c\<rbrakk>
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   609
    \<Longrightarrow> hom_induced p X S Y T f (homologous_rel_set p X S c)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   610
      = homologous_rel_set p Y T (chain_map p f c)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   611
  by (meson Int_lower2 hom_induced image_subsetI image_subset_iff subset_iff)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   612
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   613
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   614
lemma hom_induced_eq:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   615
  assumes "\<And>x. x \<in> topspace X \<Longrightarrow> f x = g x"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   616
  shows "hom_induced p X S Y T f = hom_induced p X S Y T g"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   617
proof -
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   618
  consider "p < 0" | n where "p = int n"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   619
    by (metis int_nat_eq not_less)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   620
  then show ?thesis
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   621
  proof cases
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   622
    case 1
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   623
    then show ?thesis
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   624
      by (simp add: hom_induced_trivial)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   625
  next
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   626
    case 2
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   627
    have "hom_induced n X S Y T f C = hom_induced n X S Y T g C" for C
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   628
    proof -
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   629
      have "continuous_map X Y f \<and> f ` (topspace X \<inter> S) \<subseteq> T \<and> C \<in> carrier (relative_homology_group n X S)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   630
        \<longleftrightarrow> continuous_map X Y g \<and> g ` (topspace X \<inter> S) \<subseteq> T \<and> C \<in> carrier (relative_homology_group n X S)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   631
        (is "?P = ?Q")
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   632
        by (metis IntD1 assms continuous_map_eq image_cong)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   633
      then consider "\<not> ?P \<and> \<not> ?Q" | "?P \<and> ?Q"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   634
        by blast
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   635
      then show ?thesis
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   636
      proof cases
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   637
        case 1
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   638
        then show ?thesis
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   639
          by (simp add: hom_induced_default)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   640
      next
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   641
        case 2
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   642
        have "homologous_rel_set n Y T (chain_map n f c) = homologous_rel_set n Y T (chain_map n g c)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   643
          if "continuous_map X Y f" "f ` (topspace X \<inter> S) \<subseteq> T"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   644
             "continuous_map X Y g" "g ` (topspace X \<inter> S) \<subseteq> T"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   645
             "C = homologous_rel_set n X S c" "singular_relcycle n X S c"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   646
          for c
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   647
        proof -
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   648
          have "chain_map n f c = chain_map n g c"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   649
            using assms chain_map_eq singular_relcycle that by blast
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   650
          then show ?thesis
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   651
            by simp
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   652
        qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   653
        with 2 show ?thesis
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   654
          by (auto simp: relative_homology_group_def carrier_FactGroup
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   655
              right_coset_singular_relboundary hom_induced_chain_map_gen)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   656
      qed
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
    with 2 show ?thesis
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   659
      by auto
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   660
  qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   661
qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   662
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   663
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   664
subsection\<open>Towards the Eilenberg-Steenrod axioms\<close>
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   665
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   666
text\<open>First prove we get functors into abelian groups with the boundary map
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   667
 being a natural transformation between them, and prove Eilenberg-Steenrod
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   668
 axioms (we also prove additivity a bit later on if one counts that). \<close>
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   669
(*1. Exact sequence from the inclusions and boundary map
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   670
    H_{p+1} X --(j')\<longlongrightarrow> H_{p+1}X (A) --(d')\<longlongrightarrow> H_p A --(i')\<longlongrightarrow> H_p X
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   671
 2. Dimension axiom: H_p X is trivial for one-point X and p =/= 0
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   672
 3. Homotopy invariance of the induced map
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   673
 4. Excision: inclusion (X - U,A - U) --(i')\<longlongrightarrow> X (A) induces an isomorphism
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   674
when cl U \<subseteq> int A*)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   675
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   676
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   677
lemma abelian_relative_homology_group [simp]:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   678
   "comm_group(relative_homology_group p X S)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   679
  apply (simp add: relative_homology_group_def)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   680
  apply (metis comm_group.abelian_FactGroup abelian_relcycle_group subgroup_singular_relboundary_relcycle)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   681
  done
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   682
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   683
lemma abelian_homology_group: "comm_group(homology_group p X)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   684
  by simp
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   685
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   686
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   687
lemma hom_induced_id_gen:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   688
  assumes contf: "continuous_map X X f" and feq: "\<And>x. x \<in> topspace X \<Longrightarrow> f x = x"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   689
    and c: "c \<in> carrier (relative_homology_group p X S)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   690
  shows "hom_induced p X S X S f c = c"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   691
proof -
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   692
  consider "p < 0" | n where "p = int n"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   693
    by (metis int_nat_eq not_less)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   694
  then show ?thesis
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   695
  proof cases
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   696
    case 1
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   697
    with c show ?thesis
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   698
      by (simp add: hom_induced_trivial relative_homology_group_def)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   699
  next
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   700
    case 2
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   701
    have cm: "chain_map n f d = d" if "singular_relcycle n X S d" for d
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   702
      using that assms by (auto simp: chain_map_id_gen singular_relcycle)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   703
    have "f ` (topspace X \<inter> S) \<subseteq> S"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   704
      using feq by auto
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   705
    with 2 c show ?thesis
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   706
      by (auto simp: nontrivial_relative_homology_group carrier_FactGroup
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   707
          cm right_coset_singular_relboundary hom_induced_chain_map_gen assms)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   708
  qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   709
qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   710
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   711
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   712
lemma hom_induced_id:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   713
   "c \<in> carrier (relative_homology_group p X S) \<Longrightarrow> hom_induced p X S X S id c = c"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   714
  by (rule hom_induced_id_gen) auto
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   715
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   716
lemma hom_induced_compose:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   717
  assumes "continuous_map X Y f" "f ` S \<subseteq> T" "continuous_map Y Z g" "g ` T \<subseteq> U"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   718
  shows "hom_induced p X S Z U (g \<circ> f) = hom_induced p Y T Z U g \<circ> hom_induced p X S Y T f"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   719
proof -
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   720
  consider (neg) "p < 0" | (int) n where "p = int n"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   721
    by (metis int_nat_eq not_less)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   722
  then show ?thesis
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   723
  proof cases
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   724
    case int
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   725
    have gf: "continuous_map X Z (g \<circ> f)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   726
      using assms continuous_map_compose by fastforce
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   727
    have gfim: "(g \<circ> f) ` S \<subseteq> U"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   728
      unfolding o_def using assms by blast
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   729
    have sr: "\<And>a. singular_relcycle n X S a \<Longrightarrow> singular_relcycle n Y T (chain_map n f a)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   730
      by (simp add: assms singular_relcycle_chain_map)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   731
    show ?thesis
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   732
    proof
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   733
      fix c
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   734
      show "hom_induced p X S Z U (g \<circ> f) c = (hom_induced p Y T Z U g \<circ> hom_induced p X S Y T f) c"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   735
      proof (cases "c \<in> carrier(relative_homology_group p X S)")
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   736
        case True
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   737
        with gfim show ?thesis
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   738
          unfolding int
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   739
          by (auto simp: carrier_relative_homology_group gf gfim assms sr chain_map_compose  hom_induced_chain_map)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   740
      next
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   741
        case False
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   742
        then show ?thesis
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   743
          by (simp add: hom_induced_default hom_one [OF hom_induced_hom])
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   744
      qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   745
    qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   746
  qed (force simp: hom_induced_trivial)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   747
qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   748
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   749
lemma hom_induced_compose':
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   750
  assumes "continuous_map X Y f" "f ` S \<subseteq> T" "continuous_map Y Z g" "g ` T \<subseteq> U"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   751
  shows "hom_induced p Y T Z U g (hom_induced p X S Y T f x) = hom_induced p X S Z U (g \<circ> f) x"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   752
  using hom_induced_compose [OF assms] by simp
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   753
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   754
lemma naturality_hom_induced:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   755
  assumes "continuous_map X Y f" "f ` S \<subseteq> T"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   756
  shows "hom_boundary q Y T \<circ> hom_induced q X S Y T f
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   757
       = hom_induced (q - 1) (subtopology X S) {} (subtopology Y T) {} f \<circ> hom_boundary q X S"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   758
proof (cases "q \<le> 0")
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   759
  case False
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   760
  then obtain p where p1: "p \<ge> Suc 0" and q: "q = int p"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   761
    using zero_le_imp_eq_int by force
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   762
  show ?thesis
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   763
  proof
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   764
    fix c
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   765
    show "(hom_boundary q Y T \<circ> hom_induced q X S Y T f) c =
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   766
          (hom_induced (q - 1) (subtopology X S) {} (subtopology Y T) {} f \<circ> hom_boundary q X S) c"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   767
    proof (cases "c \<in> carrier(relative_homology_group p X S)")
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   768
      case True
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   769
      then obtain a where ceq: "c = homologous_rel_set p X S a" and a: "singular_relcycle p X S a"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   770
        by (force simp: carrier_relative_homology_group)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   771
      then have sr: "singular_relcycle p Y T (chain_map p f a)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   772
        using assms singular_relcycle_chain_map by fastforce
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   773
      then have sb: "singular_relcycle (p - Suc 0) (subtopology X S) {} (chain_boundary p a)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   774
        by (metis One_nat_def a chain_boundary_boundary singular_chain_0 singular_relcycle)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   775
      have p1_eq: "int p - 1 = int (p - Suc 0)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   776
        using p1 by auto
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   777
      have cbm: "(chain_boundary p (chain_map p f a))
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   778
               = (chain_map (p - Suc 0) f (chain_boundary p a))"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   779
        using a chain_boundary_chain_map singular_relcycle by blast
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   780
      have contf: "continuous_map (subtopology X S) (subtopology Y T) f"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   781
        using assms
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   782
        by (auto simp: continuous_map_in_subtopology topspace_subtopology
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   783
            continuous_map_from_subtopology)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   784
      show ?thesis
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   785
        unfolding q using assms p1 a
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   786
        apply (simp add: ceq assms hom_induced_chain_map hom_boundary_chain_boundary
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   787
                         hom_boundary_chain_boundary [OF sr] singular_relcycle_def mod_subset_def)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   788
        apply (simp add: p1_eq contf sb cbm hom_induced_chain_map)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   789
        done
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   790
    next
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   791
      case False
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   792
      with assms show ?thesis
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   793
        unfolding q o_def using assms
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   794
        apply (simp add: hom_induced_default hom_boundary_default)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   795
        by (metis group_relative_homology_group hom_boundary hom_induced hom_one one_relative_homology_group)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   796
    qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   797
  qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   798
qed (force simp: hom_induced_trivial hom_boundary_trivial)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   799
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   800
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   801
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   802
lemma homology_exactness_axiom_1:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   803
   "exact_seq ([homology_group (p-1) (subtopology X S), relative_homology_group p X S, homology_group p X],
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   804
              [hom_boundary p X S,hom_induced p X {} X S id])"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   805
proof -
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   806
  consider (neg) "p < 0" | (int) n where "p = int n"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   807
    by (metis int_nat_eq not_less)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   808
  then have "(hom_induced p X {} X S id) ` carrier (homology_group p X)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   809
           = kernel (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
   810
                    (hom_boundary p X S)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   811
  proof cases
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   812
    case neg
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   813
    then show ?thesis
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   814
      unfolding kernel_def singleton_group_def relative_homology_group_def
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   815
      by (auto simp: hom_induced_trivial hom_boundary_trivial)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   816
  next
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   817
    case int
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   818
    have "hom_induced (int m) X {} X S id ` carrier (relative_homology_group (int m) X {})
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   819
        = carrier (relative_homology_group (int m) X S) \<inter>
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   820
          {c. hom_boundary (int m) X S c = \<one>\<^bsub>relative_homology_group (int m - 1) (subtopology X S) {}\<^esub>}" for m
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   821
    proof (cases m)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   822
      case 0
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   823
      have "hom_induced 0 X {} X S id ` carrier (relative_homology_group 0 X {})
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   824
          = carrier (relative_homology_group 0 X S)"   (is "?lhs = ?rhs")
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   825
      proof
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   826
        show "?lhs \<subseteq> ?rhs"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   827
          using hom_induced_hom [of 0 X "{}" X S id]
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   828
          by (simp add: hom_induced_hom hom_carrier)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   829
        show "?rhs \<subseteq> ?lhs"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   830
          apply (clarsimp simp add: image_iff carrier_relative_homology_group [of 0, simplified] singular_relcycle)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   831
          apply (force simp: chain_map_id_gen chain_boundary_def singular_relcycle
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   832
              hom_induced_chain_map [of concl: 0, simplified])
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   833
          done
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   834
      qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   835
      with 0 show ?thesis
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   836
        by (simp add: hom_boundary_trivial relative_homology_group_def [of "-1"] singleton_group_def)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   837
    next
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   838
      case (Suc n)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   839
      have "(hom_induced (int (Suc n)) X {} X S id \<circ>
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   840
            homologous_rel_set (Suc n) X {}) ` singular_relcycle_set (Suc n) X {}
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   841
          = homologous_rel_set (Suc n) X S `
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   842
            (singular_relcycle_set (Suc n) X S \<inter>
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   843
             {c. hom_boundary (int (Suc n)) X S (homologous_rel_set (Suc n) X S c)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   844
               = singular_relboundary_set n (subtopology X S) {}})"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   845
        (is "?lhs = ?rhs")
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   846
      proof -
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   847
        have 1: "(\<And>x. x \<in> A \<Longrightarrow> x \<in> B \<longleftrightarrow> x \<in> C) \<Longrightarrow> f ` (A \<inter> B) = f ` (A \<inter> C)" for f A B C
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   848
          by blast
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   849
        have 2: "\<lbrakk>\<And>x. x \<in> A \<Longrightarrow> \<exists>y. y \<in> B \<and> f x = f y; \<And>x. x \<in> B \<Longrightarrow> \<exists>y. y \<in> A \<and> f x = f y\<rbrakk>
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   850
    \<Longrightarrow> f ` A = f ` B" for f A B
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   851
          by blast
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   852
        have "?lhs = homologous_rel_set (Suc n) X S ` singular_relcycle_set (Suc n) X {}"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   853
          apply (rule image_cong [OF refl])
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   854
          apply (simp add: o_def hom_induced_chain_map chain_map_ident [of _ X] singular_relcycle
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   855
                 del: of_nat_Suc)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   856
          done
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   857
        also have "\<dots> = homologous_rel_set (Suc n) X S `
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   858
                         (singular_relcycle_set (Suc n) X S \<inter>
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   859
                          {c. singular_relboundary n (subtopology X S) {} (chain_boundary (Suc n) c)})"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   860
        proof (rule 2)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   861
          fix c
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   862
          assume "c \<in> singular_relcycle_set (Suc n) X {}"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   863
          then show "\<exists>y. y \<in> singular_relcycle_set (Suc n) X S \<inter>
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   864
                 {c. singular_relboundary n (subtopology X S) {} (chain_boundary (Suc n) c)} \<and>
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   865
            homologous_rel_set (Suc n) X S c = homologous_rel_set (Suc n) X S y"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   866
            apply (rule_tac x=c in exI)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   867
            by (simp add: singular_boundary) (metis chain_boundary_0 singular_cycle singular_relcycle singular_relcycle_0)
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
          fix c
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   870
          assume c: "c \<in> singular_relcycle_set (Suc n) X S \<inter>
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   871
                      {c. singular_relboundary n (subtopology X S) {} (chain_boundary (Suc n) c)}"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   872
          then obtain d where d: "singular_chain (Suc n) (subtopology X S) d"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   873
            "chain_boundary (Suc n) d = chain_boundary (Suc n) c"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   874
            by (auto simp: singular_boundary)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   875
          with c have "c - d \<in> singular_relcycle_set (Suc n) X {}"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   876
            by (auto simp: singular_cycle chain_boundary_diff singular_chain_subtopology singular_relcycle singular_chain_diff)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   877
          moreover have "homologous_rel_set (Suc n) X S c = homologous_rel_set (Suc n) X S (c - d)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   878
          proof (simp add: homologous_rel_set_eq)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   879
            show "homologous_rel (Suc n) X S c (c - d)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   880
              using d by (simp add: homologous_rel_def singular_chain_imp_relboundary)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   881
          qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   882
          ultimately show "\<exists>y. y \<in> singular_relcycle_set (Suc n) X {} \<and>
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   883
                    homologous_rel_set (Suc n) X S c = homologous_rel_set (Suc n) X S y"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   884
            by blast
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   885
        qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   886
        also have "\<dots> = ?rhs"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   887
          by (rule 1) (simp add: hom_boundary_chain_boundary homologous_rel_set_eq_relboundary del: of_nat_Suc)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   888
        finally show "?lhs = ?rhs" .
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   889
      qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   890
      with Suc show ?thesis
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   891
        unfolding carrier_relative_homology_group image_comp id_def by auto
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   892
    qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   893
    then show ?thesis
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   894
      by (auto simp: kernel_def int)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   895
  qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   896
  then show ?thesis
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   897
    using hom_boundary_hom hom_induced_hom
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   898
    by (force simp: group_hom_def group_hom_axioms_def)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   899
qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   900
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   901
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   902
lemma homology_exactness_axiom_2:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   903
   "exact_seq ([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
   904
              [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
   905
proof -
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   906
  consider (neg) "p \<le> 0" | (int) n where "p = int (Suc n)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   907
    by (metis linear not0_implies_Suc of_nat_0 zero_le_imp_eq_int)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   908
  then have "kernel (relative_homology_group (p - 1) (subtopology X S) {})
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   909
                     (relative_homology_group (p - 1) X {})
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   910
                     (hom_induced (p - 1) (subtopology X S) {} X {} id)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   911
            = hom_boundary p X S ` carrier (relative_homology_group p X S)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   912
  proof cases
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   913
    case neg
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   914
    obtain x where "x \<in> carrier (relative_homology_group p X S)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   915
      using group_relative_homology_group group.is_monoid by blast
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   916
    with neg show ?thesis
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   917
      unfolding kernel_def singleton_group_def relative_homology_group_def
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   918
      by (force simp: hom_induced_trivial hom_boundary_trivial)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   919
  next
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   920
    case int
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   921
    have "hom_boundary (int (Suc n)) X S ` carrier (relative_homology_group (int (Suc n)) X S)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   922
        = carrier (relative_homology_group n (subtopology X S) {}) \<inter>
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   923
          {c. hom_induced n (subtopology X S) {} X {} id c =
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   924
           \<one>\<^bsub>relative_homology_group n X {}\<^esub>}"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   925
        (is "?lhs = ?rhs")
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   926
    proof -
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   927
      have 1: "(\<And>x. x \<in> A \<Longrightarrow> x \<in> B \<longleftrightarrow> x \<in> C) \<Longrightarrow> f ` (A \<inter> B) = f ` (A \<inter> C)" for f A B C
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   928
        by blast
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   929
      have 2: "(\<And>x. x \<in> A \<Longrightarrow> x \<in> B \<longleftrightarrow> x \<in> f -` C) \<Longrightarrow> f ` (A \<inter> B) = f ` A \<inter> C" for f A B C
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   930
        by blast
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   931
      have "?lhs = homologous_rel_set n (subtopology X S) {}
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   932
                   ` (chain_boundary (Suc n) ` singular_relcycle_set (Suc n) X S)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   933
        unfolding carrier_relative_homology_group image_comp
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   934
        by (rule image_cong [OF refl]) (simp add: o_def hom_boundary_chain_boundary del: of_nat_Suc)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   935
      also have "\<dots> = homologous_rel_set n (subtopology X S) {} `
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   936
                       (singular_relcycle_set n (subtopology X S) {} \<inter> singular_relboundary_set n X {})"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   937
        by (force simp: singular_relcycle singular_boundary chain_boundary_boundary_alt)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   938
      also have "\<dots> = ?rhs"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   939
        unfolding carrier_relative_homology_group vimage_def
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   940
        apply (rule 2)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   941
        apply (auto simp: hom_induced_chain_map chain_map_ident homologous_rel_set_eq_relboundary singular_relcycle)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   942
        done
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   943
      finally show ?thesis .
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   944
    qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   945
    then show ?thesis
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   946
      by (auto simp: kernel_def int)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   947
  qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   948
  then show ?thesis
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   949
    using hom_boundary_hom hom_induced_hom
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   950
    by (force simp: group_hom_def group_hom_axioms_def)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   951
qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   952
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   953
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   954
lemma homology_exactness_axiom_3:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   955
   "exact_seq ([relative_homology_group p X S, homology_group p X, homology_group p (subtopology X S)],
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   956
              [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
   957
proof (cases "p < 0")
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   958
  case True
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   959
  then show ?thesis
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   960
    apply (simp add: relative_homology_group_def hom_induced_trivial group_hom_def group_hom_axioms_def)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   961
    apply (auto simp: kernel_def singleton_group_def)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   962
    done
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   963
next
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   964
  case False
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   965
  then obtain n where peq: "p = int n"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   966
    by (metis int_ops(1) linorder_neqE_linordered_idom pos_int_cases)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   967
  have "hom_induced n (subtopology X S) {} X {} id `
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   968
        (homologous_rel_set n (subtopology X S) {} `
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   969
        singular_relcycle_set n (subtopology X S) {})
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   970
      = {c \<in> homologous_rel_set n X {} ` singular_relcycle_set n X {}.
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   971
         hom_induced n X {} X S id c = singular_relboundary_set n X S}"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   972
        (is "?lhs = ?rhs")
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   973
  proof -
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   974
    have 2: "\<lbrakk>\<And>x. x \<in> A \<Longrightarrow> \<exists>y. y \<in> B \<and> f x = f y; \<And>x. x \<in> B \<Longrightarrow> \<exists>y. y \<in> A \<and> f x = f y\<rbrakk>
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   975
    \<Longrightarrow> f ` A = f ` B" for f A B
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   976
      by blast
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   977
    have "?lhs = homologous_rel_set n X {} ` (singular_relcycle_set n (subtopology X S) {})"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   978
      unfolding image_comp o_def
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   979
      apply (rule image_cong [OF refl])
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   980
      apply (simp add: hom_induced_chain_map singular_relcycle)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   981
       apply (metis chain_map_ident)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   982
      done
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   983
    also have "\<dots> = homologous_rel_set n X {} ` (singular_relcycle_set n X {} \<inter> singular_relboundary_set n X S)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   984
    proof (rule 2)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   985
      fix c
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   986
      assume "c \<in> singular_relcycle_set n (subtopology X S) {}"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   987
      then show "\<exists>y. y \<in> singular_relcycle_set n X {} \<inter> singular_relboundary_set n X S \<and>
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   988
            homologous_rel_set n X {} c = homologous_rel_set n X {} y"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   989
        using singular_chain_imp_relboundary singular_cycle singular_relboundary_imp_chain singular_relcycle by fastforce
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   990
    next
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   991
      fix c
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   992
      assume "c \<in> singular_relcycle_set n X {} \<inter> singular_relboundary_set n X S"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   993
      then obtain d e where c: "singular_relcycle n X {} c" "singular_relboundary n X S c"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   994
        and d:  "singular_chain n (subtopology X S) d"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   995
        and e: "singular_chain (Suc n) X e" "chain_boundary (Suc n) e = c + d"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   996
        using singular_relboundary_alt by blast
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   997
      then have "chain_boundary n (c + d) = 0"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   998
        using chain_boundary_boundary_alt by fastforce
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   999
      then have "chain_boundary n c + chain_boundary n d = 0"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1000
        by (metis chain_boundary_add)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1001
      with c have "singular_relcycle n (subtopology X S) {} (- d)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1002
        by (metis (no_types) d eq_add_iff singular_cycle singular_relcycle_minus)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1003
      moreover have "homologous_rel n X {} c (- d)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1004
        using c
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1005
        by (metis diff_minus_eq_add e homologous_rel_def singular_boundary)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1006
      ultimately
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1007
      show "\<exists>y. y \<in> singular_relcycle_set n (subtopology X S) {} \<and>
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1008
            homologous_rel_set n X {} c = homologous_rel_set n X {} y"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1009
        by (force simp: homologous_rel_set_eq)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1010
    qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1011
    also have "\<dots> = homologous_rel_set n X {} `
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1012
                  (singular_relcycle_set n X {} \<inter> homologous_rel_set n X {} -` {x. hom_induced n X {} X S id x = singular_relboundary_set n X S})"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1013
      by (rule 2) (auto simp: hom_induced_chain_map homologous_rel_set_eq_relboundary chain_map_ident [of _ X] singular_cycle cong: conj_cong)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1014
    also have "\<dots> = ?rhs"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1015
      by blast
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1016
    finally show ?thesis .
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1017
  qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1018
  then have "kernel (relative_homology_group p X {}) (relative_homology_group p X S) (hom_induced p X {} X S id)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1019
      = hom_induced p (subtopology X S) {} X {} id ` carrier (relative_homology_group p (subtopology X S) {})"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1020
    by (simp add: kernel_def carrier_relative_homology_group peq)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1021
  then show ?thesis
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1022
    by (simp add: not_less group_hom_def group_hom_axioms_def hom_induced_hom)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1023
qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1024
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1025
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1026
lemma homology_dimension_axiom:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1027
  assumes X: "topspace X = {a}" and "p \<noteq> 0"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1028
  shows "trivial_group(homology_group p X)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1029
proof (cases "p < 0")
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1030
  case True
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1031
  then show ?thesis
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1032
    by simp
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1033
next
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1034
  case False
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1035
  then obtain n where peq: "p = int n" "n > 0"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1036
    by (metis assms(2) neq0_conv nonneg_int_cases not_less of_nat_0)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1037
  have "homologous_rel_set n X {} ` singular_relcycle_set n X {} = {singular_relcycle_set n X {}}"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1038
        (is "?lhs = ?rhs")
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1039
  proof
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1040
    show "?lhs \<subseteq> ?rhs"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1041
      using peq assms
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1042
      by (auto simp: image_subset_iff homologous_rel_set_eq_relboundary simp flip: singular_boundary_set_eq_cycle_singleton)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1043
    have "singular_relboundary n X {} 0"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1044
      by simp
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1045
    with peq assms
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1046
    show "?rhs \<subseteq> ?lhs"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1047
      by (auto simp: image_iff simp flip: homologous_rel_eq_relboundary singular_boundary_set_eq_cycle_singleton)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1048
  qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1049
  with peq assms show ?thesis
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1050
    unfolding trivial_group_def
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1051
    by (simp add:  carrier_relative_homology_group singular_boundary_set_eq_cycle_singleton [OF X])
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1052
qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1053
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1054
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1055
proposition homology_homotopy_axiom:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1056
  assumes "homotopic_with (\<lambda>h. h ` S \<subseteq> T) X Y f g"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1057
  shows "hom_induced p X S Y T f = hom_induced p X S Y T g"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1058
proof (cases "p < 0")
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1059
  case True
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1060
  then show ?thesis
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1061
    by (simp add: hom_induced_trivial)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1062
next
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1063
  case False
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1064
  then obtain n where peq: "p = int n"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1065
    by (metis int_nat_eq not_le)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1066
  have cont: "continuous_map X Y f" "continuous_map X Y g"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1067
    using assms homotopic_with_imp_continuous_maps by blast+
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1068
  have im: "f ` (topspace X \<inter> S) \<subseteq> T" "g ` (topspace X \<inter> S) \<subseteq> T"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1069
    using homotopic_with_imp_property assms by blast+
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1070
  show ?thesis
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1071
  proof
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1072
    fix c show "hom_induced p X S Y T f c = hom_induced p X S Y T g c"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1073
    proof (cases "c \<in> carrier(relative_homology_group p X S)")
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1074
      case True
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1075
      then obtain a where a: "c = homologous_rel_set n X S a" "singular_relcycle n X S a"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1076
        unfolding carrier_relative_homology_group peq by auto
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1077
      then show ?thesis
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1078
        apply (simp add: peq hom_induced_chain_map_gen cont im homologous_rel_set_eq)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1079
        apply (blast intro: assms homotopic_imp_homologous_rel_chain_maps)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1080
        done
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1081
    qed (simp add: hom_induced_default)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1082
  qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1083
qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1084
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1085
proposition homology_excision_axiom:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1086
  assumes "X closure_of U \<subseteq> X interior_of T" "T \<subseteq> S"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1087
  shows
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1088
   "hom_induced p (subtopology X (S - U)) (T - U) (subtopology X S) T id
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1089
    \<in> iso (relative_homology_group p (subtopology X (S - U)) (T - U))
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1090
          (relative_homology_group p (subtopology X S) T)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1091
proof (cases "p < 0")
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1092
  case True
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1093
  then show ?thesis
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1094
    unfolding iso_def bij_betw_def relative_homology_group_def by (simp add: hom_induced_trivial)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1095
next
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1096
  case False
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1097
  then obtain n where peq: "p = int n"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1098
    by (metis int_nat_eq not_le)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1099
  have cont: "continuous_map (subtopology X (S - U)) (subtopology X S) id"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1100
    by (simp add: closure_of_subtopology_mono continuous_map_eq_image_closure_subset)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1101
  have TU: "topspace X \<inter> (S - U) \<inter> (T - U) \<subseteq> T"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1102
    by auto
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1103
  show ?thesis
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1104
  proof (simp add: iso_def peq carrier_relative_homology_group bij_betw_def hom_induced_hom, intro conjI)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1105
    show "inj_on (hom_induced n (subtopology X (S - U)) (T - U) (subtopology X S) T id)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1106
         (homologous_rel_set n (subtopology X (S - U)) (T - U) `
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1107
          singular_relcycle_set n (subtopology X (S - U)) (T - U))"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1108
      unfolding inj_on_def
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1109
    proof (clarsimp simp add: homologous_rel_set_eq)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1110
      fix c d
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1111
      assume c: "singular_relcycle n (subtopology X (S - U)) (T - U) c"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1112
        and d: "singular_relcycle n (subtopology X (S - U)) (T - U) d"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1113
        and hh: "hom_induced n (subtopology X (S - U)) (T - U) (subtopology X S) T id
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1114
                   (homologous_rel_set n (subtopology X (S - U)) (T - U) c)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1115
               = hom_induced n (subtopology X (S - U)) (T - U) (subtopology X S) T id
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1116
                   (homologous_rel_set n (subtopology X (S - U)) (T - U) d)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1117
      then have scc: "singular_chain n (subtopology X (S - U)) c"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1118
           and  scd: "singular_chain n (subtopology X (S - U)) d"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1119
        using singular_relcycle by blast+
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1120
      have "singular_relboundary n (subtopology X (S - U)) (T - U) c"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1121
        if srb: "singular_relboundary n (subtopology X S) T c"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1122
          and src: "singular_relcycle n (subtopology X (S - U)) (T - U) c" for c
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1123
      proof -
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1124
        have [simp]: "(S - U) \<inter> (T - U) = T - U" "S \<inter> T = T"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1125
          using \<open>T \<subseteq> S\<close> by blast+
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1126
        have c: "singular_chain n (subtopology X (S - U)) c"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1127
             "singular_chain (n - Suc 0) (subtopology X (T - U)) (chain_boundary n c)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1128
          using that by (auto simp: singular_relcycle_def mod_subset_def subtopology_subtopology)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1129
        obtain d e where d: "singular_chain (Suc n) (subtopology X S) d"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1130
          and e: "singular_chain n (subtopology X T) e"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1131
          and dce: "chain_boundary (Suc n) d = c + e"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1132
          using srb by (auto simp: singular_relboundary_alt subtopology_subtopology)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1133
        obtain m f g where f: "singular_chain (Suc n) (subtopology X (S - U)) f"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1134
                       and g: "singular_chain (Suc n) (subtopology X T) g"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1135
                       and dfg: "(singular_subdivision (Suc n) ^^ m) d = f + g"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1136
          using excised_chain_exists [OF assms d] .
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1137
        obtain h where
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1138
            h0:  "\<And>p. h p 0 = (0 :: 'a chain)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1139
         and hdiff: "\<And>p c1 c2. h p (c1-c2) = h p c1 - h p c2"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1140
         and hSuc: "\<And>p X c. singular_chain p X c \<Longrightarrow> singular_chain (Suc p) X (h p c)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1141
         and hchain: "\<And>p X c. singular_chain p X c
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1142
                           \<Longrightarrow> chain_boundary (Suc p) (h p c) + h (p - Suc 0) (chain_boundary p c)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1143
                             = (singular_subdivision p ^^ m) c - c"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1144
          using chain_homotopic_iterated_singular_subdivision by blast
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1145
        have hadd: "\<And>p c1 c2. h p (c1 + c2) = h p c1 + h p c2"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1146
          by (metis add_diff_cancel diff_add_cancel hdiff)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1147
        define c1 where "c1 \<equiv> f - h n c"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1148
        define c2 where "c2 \<equiv> chain_boundary (Suc n) (h n e) - (chain_boundary (Suc n) g - e)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1149
        show ?thesis
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1150
          unfolding singular_relboundary_alt
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1151
        proof (intro exI conjI)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1152
          show c1: "singular_chain (Suc n) (subtopology X (S - U)) c1"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1153
            by (simp add: \<open>singular_chain n (subtopology X (S - U)) c\<close> c1_def f hSuc singular_chain_diff)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1154
          have "chain_boundary (Suc n) (chain_boundary (Suc (Suc n)) (h (Suc n) d) + h n (c+e))
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1155
            = chain_boundary (Suc n) (f + g - d)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1156
              using hchain [OF d] by (simp add: dce dfg)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1157
            then have "chain_boundary (Suc n) (h n (c + e))
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1158
                 = chain_boundary (Suc n) f + chain_boundary (Suc n) g - (c + e)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1159
              using chain_boundary_boundary_alt [of "Suc n" "subtopology X S"]
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1160
              by (simp add: chain_boundary_add chain_boundary_diff d hSuc dce)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1161
            then have "chain_boundary (Suc n) (h n c) + chain_boundary (Suc n) (h n e)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1162
                 = chain_boundary (Suc n) f + chain_boundary (Suc n) g - (c + e)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1163
              by (simp add: chain_boundary_add hadd)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1164
            then have *: "chain_boundary (Suc n) (f - h n c) = c + (chain_boundary (Suc n) (h n e) - (chain_boundary (Suc n) g - e))"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1165
              by (simp add: algebra_simps chain_boundary_diff)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1166
            then show "chain_boundary (Suc n) c1 = c + c2"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1167
            unfolding c1_def c2_def
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1168
              by (simp add: algebra_simps chain_boundary_diff)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1169
            have "singular_chain n (subtopology X (S - U)) c2" "singular_chain n (subtopology X T) c2"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1170
              using singular_chain_diff c c1 *
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1171
              unfolding c1_def c2_def
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1172
               apply (metis add_diff_cancel_left' singular_chain_boundary_alt)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1173
              by (simp add: e g hSuc singular_chain_boundary_alt singular_chain_diff)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1174
            then show "singular_chain n (subtopology (subtopology X (S - U)) (T - U)) c2"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1175
              by (fastforce simp add: singular_chain_subtopology)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1176
        qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1177
      qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1178
      then have "singular_relboundary n (subtopology X S) T (c - d) \<Longrightarrow>
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1179
                 singular_relboundary n (subtopology X (S - U)) (T - U) (c - d)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1180
        using c d singular_relcycle_diff by metis
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1181
      with hh show "homologous_rel n (subtopology X (S - U)) (T - U) c d"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1182
        apply (simp add: hom_induced_chain_map cont c d chain_map_ident [OF scc] chain_map_ident [OF scd])
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1183
        using homologous_rel_set_eq homologous_rel_def by metis
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1184
    qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1185
  next
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1186
    have h: "homologous_rel_set n (subtopology X S) T a
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1187
          \<in> (\<lambda>x. homologous_rel_set n (subtopology X S) T (chain_map n id x)) `
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1188
            singular_relcycle_set n (subtopology X (S - U)) (T - U)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1189
      if a: "singular_relcycle n (subtopology X S) T a" for a
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1190
    proof -
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1191
      obtain c' where c': "singular_relcycle n (subtopology X (S - U)) (T - U) c'"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1192
                          "homologous_rel n (subtopology X S) T a c'"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1193
        using a by (blast intro: excised_relcycle_exists [OF assms])
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1194
      then have scc': "singular_chain n (subtopology X S) c'"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1195
        using homologous_rel_singular_chain singular_relcycle that by blast
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1196
      then show ?thesis
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1197
        apply (rule_tac x="c'" in image_eqI)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1198
         apply (auto simp: scc' chain_map_ident [of _ "subtopology X S"] c' homologous_rel_set_eq)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1199
        done
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1200
    qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1201
    show "hom_induced n (subtopology X (S - U)) (T - U) (subtopology X S) T id `
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1202
          homologous_rel_set n (subtopology X (S - U)) (T - U) `
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1203
          singular_relcycle_set n (subtopology X (S - U)) (T - U)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1204
        = homologous_rel_set n (subtopology X S) T ` singular_relcycle_set n (subtopology X S) T"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1205
      apply (simp add: image_comp o_def hom_induced_chain_map_gen cont TU topspace_subtopology
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1206
                       cong: image_cong_simp)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1207
      apply (force simp: cont h singular_relcycle_chain_map)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1208
      done
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1209
  qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1210
qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1211
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1212
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1213
subsection\<open>Additivity axiom\<close>
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1214
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1215
text\<open>Not in the original Eilenberg-Steenrod list but usually included nowadays,
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1216
following Milnor's "On Axiomatic Homology Theory".\<close>
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1217
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1218
lemma iso_chain_group_sum:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1219
  assumes disj: "pairwise disjnt \<U>" and UU: "\<Union>\<U> = topspace X"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1220
    and subs: "\<And>C T. \<lbrakk>compactin X C; path_connectedin X C; T \<in> \<U>; ~ disjnt C T\<rbrakk> \<Longrightarrow> C \<subseteq> T"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1221
  shows "(\<lambda>f. sum' f \<U>) \<in> iso (sum_group \<U> (\<lambda>S. chain_group p (subtopology X S))) (chain_group p X)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1222
proof -
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1223
  have pw: "pairwise (\<lambda>i j. disjnt (singular_simplex_set p (subtopology X i))
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1224
                                   (singular_simplex_set p (subtopology X j))) \<U>"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1225
  proof
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1226
    fix S T
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1227
    assume "S \<in> \<U>" "T \<in> \<U>" "S \<noteq> T"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1228
    then show "disjnt (singular_simplex_set p (subtopology X S))
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1229
                      (singular_simplex_set p (subtopology X T))"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1230
      using nonempty_standard_simplex [of p] disj
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1231
      by (fastforce simp: pairwise_def disjnt_def singular_simplex_subtopology image_subset_iff)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1232
  qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1233
  have "\<exists>S\<in>\<U>. singular_simplex p (subtopology X S) f"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1234
    if f: "singular_simplex p X f" for f
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1235
  proof -
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1236
    obtain x where x: "x \<in> topspace X" "x \<in> f ` standard_simplex p"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1237
      using f nonempty_standard_simplex [of p] continuous_map_image_subset_topspace
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1238
      unfolding singular_simplex_def by fastforce
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1239
    then obtain S where "S \<in> \<U>" "x \<in> S"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1240
      using UU by auto
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1241
    have "f ` standard_simplex p \<subseteq> S"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1242
    proof (rule subs)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1243
      have cont: "continuous_map (subtopology (powertop_real UNIV)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1244
                                 (standard_simplex p)) X f"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1245
        using f singular_simplex_def by auto
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1246
      show "compactin X (f ` standard_simplex p)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1247
        by (simp add: compactin_subtopology compactin_standard_simplex image_compactin [OF _ cont])
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1248
      show "path_connectedin X (f ` standard_simplex p)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1249
        by (simp add: path_connectedin_subtopology path_connectedin_standard_simplex path_connectedin_continuous_map_image [OF cont])
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1250
      have "standard_simplex p \<noteq> {}"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1251
        by (simp add: nonempty_standard_simplex)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1252
      then
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1253
      show "\<not> disjnt (f ` standard_simplex p) S"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1254
        using x \<open>x \<in> S\<close> by (auto simp: disjnt_def)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1255
    qed (auto simp: \<open>S \<in> \<U>\<close>)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1256
    then show ?thesis
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1257
      by (meson \<open>S \<in> \<U>\<close> singular_simplex_subtopology that)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1258
  qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1259
  then have "(\<Union>i\<in>\<U>. singular_simplex_set p (subtopology X i)) = singular_simplex_set p X"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1260
    by (auto simp: singular_simplex_subtopology)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1261
  then show ?thesis
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1262
    using iso_free_Abelian_group_sum [OF pw] by (simp add: chain_group_def)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1263
qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1264
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1265
lemma relcycle_group_0_eq_chain_group: "relcycle_group 0 X {} = chain_group 0 X"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1266
  apply (rule monoid.equality, simp)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1267
     apply (simp_all add: relcycle_group_def chain_group_def)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1268
  by (metis chain_boundary_def singular_cycle)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1269
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1270
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1271
proposition iso_cycle_group_sum:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1272
  assumes disj: "pairwise disjnt \<U>" and UU: "\<Union>\<U> = topspace X"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1273
    and subs: "\<And>C T. \<lbrakk>compactin X C; path_connectedin X C; T \<in> \<U>; \<not> disjnt C T\<rbrakk> \<Longrightarrow> C \<subseteq> T"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1274
  shows "(\<lambda>f. sum' f \<U>) \<in> iso (sum_group \<U> (\<lambda>T. relcycle_group p (subtopology X T) {}))
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1275
                               (relcycle_group p X {})"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1276
proof (cases "p = 0")
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1277
  case True
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1278
  then show ?thesis
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1279
    by (simp add: relcycle_group_0_eq_chain_group iso_chain_group_sum [OF assms])
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1280
next
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1281
  case False
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1282
  let ?SG = "(sum_group \<U> (\<lambda>T. chain_group p (subtopology X T)))"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1283
  let ?PI = "(\<Pi>\<^sub>E T\<in>\<U>. singular_relcycle_set p (subtopology X T) {})"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1284
  have "(\<lambda>f. sum' f \<U>) \<in> Group.iso (subgroup_generated ?SG (carrier ?SG \<inter> ?PI))
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1285
                            (subgroup_generated (chain_group p X) (singular_relcycle_set p X {}))"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1286
  proof (rule group_hom.iso_between_subgroups)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1287
    have iso: "(\<lambda>f. sum' f \<U>) \<in> Group.iso ?SG (chain_group p X)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1288
      by (auto simp: assms iso_chain_group_sum)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1289
    then show "group_hom ?SG (chain_group p X) (\<lambda>f. sum' f \<U>)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1290
      by (auto simp: iso_imp_homomorphism group_hom_def group_hom_axioms_def)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1291
    have B: "sum' f \<U> \<in> singular_relcycle_set p X {} \<longleftrightarrow> f \<in> (carrier ?SG \<inter> ?PI)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1292
      if "f \<in> (carrier ?SG)" for f
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1293
    proof -
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1294
      have f: "\<And>S. S \<in> \<U> \<longrightarrow> singular_chain p (subtopology X S) (f S)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1295
              "f \<in> extensional \<U>" "finite {i \<in> \<U>. f i \<noteq> 0}"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1296
        using that by (auto simp: carrier_sum_group PiE_def Pi_def)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1297
      then have rfin: "finite {S \<in> \<U>. restrict (chain_boundary p \<circ> f) \<U> S \<noteq> 0}"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1298
        by (auto elim: rev_finite_subset)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1299
      have "chain_boundary p ((\<Sum>x | x \<in> \<U> \<and> f x \<noteq> 0. f x)) = 0
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1300
        \<longleftrightarrow> (\<forall>S \<in> \<U>. chain_boundary p (f S) = 0)" (is "?cb = 0 \<longleftrightarrow> ?rhs")
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1301
      proof
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1302
        assume "?cb = 0"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1303
        moreover have "?cb = sum' (\<lambda>S. chain_boundary p (f S)) \<U>"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1304
          unfolding sum.G_def using rfin f
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1305
          by (force simp: chain_boundary_sum intro: sum.mono_neutral_right cong: conj_cong)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1306
        ultimately have eq0: "sum' (\<lambda>S. chain_boundary p (f S)) \<U> = 0"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1307
          by simp
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1308
        have "(\<lambda>f. sum' f \<U>) \<in> hom (sum_group \<U> (\<lambda>S. chain_group (p - Suc 0) (subtopology X S)))
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1309
                                    (chain_group (p - Suc 0) X)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1310
          and inj: "inj_on (\<lambda>f. sum' f \<U>) (carrier (sum_group \<U> (\<lambda>S. chain_group (p - Suc 0) (subtopology X S))))"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1311
          using iso_chain_group_sum [OF assms, of "p-1"] by (auto simp: iso_def bij_betw_def)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1312
        then have eq: "\<lbrakk>f \<in> (\<Pi>\<^sub>E i\<in>\<U>. singular_chain_set (p - Suc 0) (subtopology X i));
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1313
                    finite {S \<in> \<U>. f S \<noteq> 0}; sum' f \<U> = 0; S \<in> \<U>\<rbrakk> \<Longrightarrow> f S = 0" for f S
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1314
          apply (simp add: group_hom_def group_hom_axioms_def group_hom.inj_on_one_iff [of _ "chain_group (p-1) X"])
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1315
          apply (auto simp: carrier_sum_group fun_eq_iff that)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1316
          done
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1317
        show ?rhs
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1318
        proof clarify
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1319
          fix S assume "S \<in> \<U>"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1320
          then show "chain_boundary p (f S) = 0"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1321
            using eq [of "restrict (chain_boundary p \<circ> f) \<U>" S] rfin f eq0
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1322
            by (simp add: singular_chain_boundary cong: conj_cong)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1323
        qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1324
      next
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1325
        assume ?rhs
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1326
        then show "?cb = 0"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1327
          by (force simp: chain_boundary_sum intro: sum.mono_neutral_right)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1328
      qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1329
      moreover
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1330
      have "(\<And>S. S \<in> \<U> \<longrightarrow> singular_chain p (subtopology X S) (f S))
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1331
            \<Longrightarrow> singular_chain p X (\<Sum>x | x \<in> \<U> \<and> f x \<noteq> 0. f x)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1332
        by (metis (no_types, lifting) mem_Collect_eq singular_chain_subtopology singular_chain_sum)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1333
      ultimately show ?thesis
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1334
        using f by (auto simp: carrier_sum_group sum.G_def singular_cycle PiE_iff)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1335
    qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1336
    have "singular_relcycle_set p X {} \<subseteq> carrier (chain_group p X)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1337
      using subgroup.subset subgroup_singular_relcycle by blast
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1338
    then show "(\<lambda>f. sum' f \<U>) ` (carrier ?SG \<inter> ?PI) = singular_relcycle_set p X {}"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1339
      using iso B
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1340
      apply (auto simp: iso_def bij_betw_def)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1341
      apply (force simp: singular_relcycle)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1342
      done
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1343
  qed (auto simp: assms iso_chain_group_sum)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1344
  then show ?thesis
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1345
    by (simp add: relcycle_group_def sum_group_subgroup_generated subgroup_singular_relcycle)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1346
qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1347
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1348
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1349
proposition homology_additivity_axiom_gen:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1350
  assumes disj: "pairwise disjnt \<U>" and UU: "\<Union>\<U> = topspace X"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1351
    and subs: "\<And>C T. \<lbrakk>compactin X C; path_connectedin X C; T \<in> \<U>; \<not> disjnt C T\<rbrakk> \<Longrightarrow> C \<subseteq> T"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1352
  shows "(\<lambda>x. gfinprod (homology_group p X)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1353
                       (\<lambda>V. hom_induced p (subtopology X V) {} X {} id (x V)) \<U>)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1354
      \<in> iso (sum_group \<U> (\<lambda>S. homology_group p (subtopology X S))) (homology_group p X)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1355
     (is  "?h \<in> iso ?SG ?HG")
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1356
proof (cases "p < 0")
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1357
  case True
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1358
  then have [simp]: "gfinprod (singleton_group undefined) (\<lambda>v. undefined) \<U> = undefined"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1359
    by (metis Pi_I carrier_singleton_group comm_group_def comm_monoid.gfinprod_closed singletonD singleton_abelian_group)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1360
  show ?thesis
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1361
    using True
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1362
    apply (simp add: iso_def relative_homology_group_def hom_induced_trivial carrier_sum_group)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1363
    apply (auto simp: singleton_group_def bij_betw_def inj_on_def fun_eq_iff)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1364
    done
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1365
next
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1366
  case False
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1367
  then obtain n where peq: "p = int n"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1368
    by (metis int_ops(1) linorder_neqE_linordered_idom pos_int_cases)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1369
  interpret comm_group "homology_group p X"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1370
    by (rule abelian_homology_group)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1371
  show ?thesis
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1372
  proof (simp add: iso_def bij_betw_def, intro conjI)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1373
    show "?h \<in> hom ?SG ?HG"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1374
      by (rule hom_group_sum) (simp_all add: hom_induced_hom)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1375
    then interpret group_hom ?SG ?HG ?h
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1376
      by (simp add: group_hom_def group_hom_axioms_def)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1377
    have carrSG: "carrier ?SG
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1378
        = (\<lambda>x. \<lambda>S\<in>\<U>. homologous_rel_set n (subtopology X S) {} (x S))
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1379
          ` (carrier (sum_group \<U> (\<lambda>S. relcycle_group n (subtopology X S) {})))" (is "?lhs = ?rhs")
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1380
    proof
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1381
      show "?lhs \<subseteq> ?rhs"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1382
      proof (clarsimp simp: carrier_sum_group carrier_relative_homology_group peq)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1383
        fix z
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1384
        assume z: "z \<in> (\<Pi>\<^sub>E S\<in>\<U>. homologous_rel_set n (subtopology X S) {} ` singular_relcycle_set n (subtopology X S) {})"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1385
        and fin: "finite {S \<in> \<U>. z S \<noteq> singular_relboundary_set n (subtopology X S) {}}"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1386
        then obtain c where c: "\<forall>S\<in>\<U>. singular_relcycle n (subtopology X S) {} (c S)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1387
                                 \<and> z S = homologous_rel_set n (subtopology X S) {} (c S)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1388
          by (simp add: PiE_def Pi_def image_def) metis
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1389
        let ?f = "\<lambda>S\<in>\<U>. if singular_relboundary n (subtopology X S) {} (c S) then 0 else c S"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1390
        have "z = (\<lambda>S\<in>\<U>. homologous_rel_set n (subtopology X S) {} (?f S))"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1391
          apply (simp_all add: c fun_eq_iff PiE_arb [OF z])
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1392
          apply (metis homologous_rel_eq_relboundary singular_boundary singular_relboundary_0)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1393
          done
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1394
        moreover have "?f \<in> (\<Pi>\<^sub>E i\<in>\<U>. singular_relcycle_set n (subtopology X i) {})"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1395
          by (simp add: c fun_eq_iff PiE_arb [OF z])
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1396
        moreover have "finite {i \<in> \<U>. ?f i \<noteq> 0}"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1397
          apply (rule finite_subset [OF _ fin])
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1398
          using z apply (clarsimp simp: PiE_def Pi_def image_def)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1399
          by (metis c homologous_rel_set_eq_relboundary singular_boundary)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1400
        ultimately
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1401
        show "z \<in> (\<lambda>x. \<lambda>S\<in>\<U>. homologous_rel_set n (subtopology X S) {} (x S)) `
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1402
             {x \<in> \<Pi>\<^sub>E i\<in>\<U>. singular_relcycle_set n (subtopology X i) {}. finite {i \<in> \<U>. x i \<noteq> 0}}"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1403
          by blast
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1404
      qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1405
      show "?rhs \<subseteq> ?lhs"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1406
        by (force simp: peq carrier_sum_group carrier_relative_homology_group homologous_rel_set_eq_relboundary
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1407
                  elim: rev_finite_subset)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1408
    qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1409
    have gf: "gfinprod (homology_group p X)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1410
                 (\<lambda>V. hom_induced n (subtopology X V) {} X {} id
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1411
                      ((\<lambda>S\<in>\<U>. homologous_rel_set n (subtopology X S) {} (z S)) V)) \<U>
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1412
            = homologous_rel_set n X {} (sum' z \<U>)"  (is "?lhs = ?rhs")
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1413
      if z: "z \<in> carrier (sum_group \<U> (\<lambda>S. relcycle_group n (subtopology X S) {}))" for z
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1414
    proof -
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1415
      have hom_pi: "(\<lambda>S. homologous_rel_set n X {} (z S)) \<in> \<U> \<rightarrow> carrier (homology_group p X)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1416
        apply (rule Pi_I)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1417
        using z
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1418
        apply (force simp: peq carrier_sum_group carrier_relative_homology_group singular_chain_subtopology singular_cycle)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1419
        done
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1420
      have fin: "finite {S \<in> \<U>. z S \<noteq> 0}"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1421
        using that by (force simp: carrier_sum_group)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1422
      have "?lhs = gfinprod (homology_group p X) (\<lambda>S. homologous_rel_set n X {} (z S)) \<U>"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1423
        apply (rule gfinprod_cong [OF refl Pi_I])
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1424
         apply (simp add: hom_induced_carrier peq)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1425
        using that
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1426
           apply (auto simp: peq simp_implies_def carrier_sum_group PiE_def Pi_def chain_map_ident singular_cycle hom_induced_chain_map)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1427
        done
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1428
      also have "\<dots> = gfinprod (homology_group p X)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1429
                                (\<lambda>S. homologous_rel_set n X {} (z S)) {S \<in> \<U>. z S \<noteq> 0}"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1430
        apply (rule gfinprod_mono_neutral_cong_right, simp_all add: hom_pi)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1431
        apply (simp add: relative_homology_group_def peq)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1432
        apply (metis homologous_rel_eq_relboundary singular_relboundary_0)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1433
        done
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1434
      also have "\<dots> = ?rhs"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1435
      proof -
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1436
        have "gfinprod (homology_group p X) (\<lambda>S. homologous_rel_set n X {} (z S)) \<F>
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1437
          = homologous_rel_set n X {} (sum z \<F>)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1438
          if "finite \<F>" "\<F> \<subseteq> {S \<in> \<U>. z S \<noteq> 0}" for \<F>
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1439
          using that
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1440
        proof (induction \<F>)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1441
          case empty
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1442
          have "\<one>\<^bsub>homology_group p X\<^esub> = homologous_rel_set n X {} 0"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1443
            apply (simp add: relative_homology_group_def peq)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1444
            by (metis diff_zero homologous_rel_def homologous_rel_sym)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1445
          then show ?case
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1446
            by simp
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1447
        next
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1448
          case (insert S \<F>)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1449
          with z have pi: "(\<lambda>S. homologous_rel_set n X {} (z S)) \<in> \<F> \<rightarrow> carrier (homology_group p X)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1450
            "homologous_rel_set n X {} (z S) \<in> carrier (homology_group p X)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1451
            by (force simp: peq carrier_sum_group carrier_relative_homology_group singular_chain_subtopology singular_cycle)+
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1452
          have hom: "homologous_rel_set n X {} (z S) \<in> carrier (homology_group p X)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1453
            using insert z
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1454
            by (force simp: peq carrier_sum_group carrier_relative_homology_group singular_chain_subtopology singular_cycle)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1455
          show ?case
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1456
            using insert z
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1457
          proof (simp add: pi)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1458
            show "homologous_rel_set n X {} (z S) \<otimes>\<^bsub>homology_group p X\<^esub> homologous_rel_set n X {} (sum z \<F>)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1459
              = homologous_rel_set n X {} (z S + sum z \<F>)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1460
              using insert z apply (auto simp: peq homologous_rel_add mult_relative_homology_group)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1461
              by (metis (no_types, lifting) diff_add_cancel diff_diff_eq2 homologous_rel_def homologous_rel_refl)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1462
          qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1463
        qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1464
        with fin show ?thesis
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1465
          by (simp add: sum.G_def)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1466
      qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1467
      finally show ?thesis .
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1468
    qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1469
    show "inj_on ?h (carrier ?SG)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1470
    proof (clarsimp simp add: inj_on_one_iff)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1471
      fix x
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1472
      assume x: "x \<in> carrier (sum_group \<U> (\<lambda>S. homology_group p (subtopology X S)))"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1473
        and 1: "gfinprod (homology_group p X) (\<lambda>V. hom_induced p (subtopology X V) {} X {} id (x V)) \<U>
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1474
              = \<one>\<^bsub>homology_group p X\<^esub>"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1475
      have feq: "(\<lambda>S\<in>\<U>. homologous_rel_set n (subtopology X S) {} (z S))
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1476
               = (\<lambda>S\<in>\<U>. \<one>\<^bsub>homology_group p (subtopology X S)\<^esub>)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1477
        if z: "z \<in> carrier (sum_group \<U> (\<lambda>S. relcycle_group n (subtopology X S) {}))"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1478
          and eq: "homologous_rel_set n X {} (sum' z \<U>) = \<one>\<^bsub>homology_group p X\<^esub>" for z
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1479
      proof -
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1480
        have "z \<in> (\<Pi>\<^sub>E S\<in>\<U>. singular_relcycle_set n (subtopology X S) {})" "finite {S \<in> \<U>. z S \<noteq> 0}"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1481
          using z by (auto simp: carrier_sum_group)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1482
        have "singular_relboundary n X {} (sum' z \<U>)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1483
          using eq singular_chain_imp_relboundary by (auto simp: relative_homology_group_def peq)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1484
        then obtain d where scd: "singular_chain (Suc n) X d" and cbd: "chain_boundary (Suc n) d = sum' z \<U>"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1485
          by (auto simp: singular_boundary)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1486
        have *: "\<exists>d. singular_chain (Suc n) (subtopology X S) d \<and> chain_boundary (Suc n) d = z S"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1487
          if "S \<in> \<U>" for S
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1488
        proof -
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1489
          have inj': "inj_on (\<lambda>f. sum' f \<U>) {x \<in> \<Pi>\<^sub>E S\<in>\<U>. singular_chain_set (Suc n) (subtopology X S). finite {S \<in> \<U>. x S \<noteq> 0}}"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1490
            using iso_chain_group_sum [OF assms, of "Suc n"]
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1491
            by (simp add: iso_iff_mon_epi mon_def carrier_sum_group)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1492
          obtain w where w: "w \<in> (\<Pi>\<^sub>E S\<in>\<U>. singular_chain_set (Suc n) (subtopology X S))"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1493
            and finw: "finite {S \<in> \<U>. w S \<noteq> 0}"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1494
            and deq: "d = sum' w \<U>"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1495
            using iso_chain_group_sum [OF assms, of "Suc n"] scd
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1496
            by (auto simp: iso_iff_mon_epi epi_def carrier_sum_group set_eq_iff)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1497
          with \<open>S \<in> \<U>\<close> have scwS: "singular_chain (Suc n) (subtopology X S) (w S)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1498
            by blast
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1499
          have "inj_on (\<lambda>f. sum' f \<U>) {x \<in> \<Pi>\<^sub>E S\<in>\<U>. singular_chain_set n (subtopology X S). finite {S \<in> \<U>. x S \<noteq> 0}}"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1500
            using iso_chain_group_sum [OF assms, of n]
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1501
            by (simp add: iso_iff_mon_epi mon_def carrier_sum_group)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1502
          then have "(\<lambda>S\<in>\<U>. chain_boundary (Suc n) (w S)) = z"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1503
          proof (rule inj_onD)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1504
            have "sum' (\<lambda>S\<in>\<U>. chain_boundary (Suc n) (w S)) \<U> = sum' (chain_boundary (Suc n) \<circ> w) {S \<in> \<U>. w S \<noteq> 0}"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1505
              by (auto simp: o_def intro: sum.mono_neutral_right')
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1506
            also have "\<dots> = chain_boundary (Suc n) d"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1507
              by (auto simp: sum.G_def deq chain_boundary_sum finw intro: finite_subset [OF _ finw] sum.mono_neutral_left)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1508
            finally show "sum' (\<lambda>S\<in>\<U>. chain_boundary (Suc n) (w S)) \<U> = sum' z \<U>"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1509
              by (simp add: cbd)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1510
            show "(\<lambda>S\<in>\<U>. chain_boundary (Suc n) (w S)) \<in> {x \<in> \<Pi>\<^sub>E S\<in>\<U>. singular_chain_set n (subtopology X S). finite {S \<in> \<U>. x S \<noteq> 0}}"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1511
              using w by (auto simp: PiE_iff singular_chain_boundary_alt cong: rev_conj_cong intro: finite_subset [OF _ finw])
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1512
            show "z \<in> {x \<in> \<Pi>\<^sub>E S\<in>\<U>. singular_chain_set n (subtopology X S). finite {S \<in> \<U>. x S \<noteq> 0}}"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1513
              using z by (simp_all add: carrier_sum_group PiE_iff singular_cycle)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1514
          qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1515
          with \<open>S \<in> \<U>\<close> scwS show ?thesis
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1516
            by force
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1517
        qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1518
        show ?thesis
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1519
          apply (rule restrict_ext)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1520
          using that *
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1521
          apply (simp add: singular_boundary relative_homology_group_def homologous_rel_set_eq_relboundary peq)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1522
          done
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1523
      qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1524
      show "x = (\<lambda>S\<in>\<U>. \<one>\<^bsub>homology_group p (subtopology X S)\<^esub>)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1525
        using x 1 carrSG gf
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1526
        by (auto simp: peq feq)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1527
    qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1528
    show "?h ` carrier ?SG = carrier ?HG"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1529
    proof safe
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1530
      fix A
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1531
      assume "A \<in> carrier (homology_group p X)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1532
      then obtain y where y: "singular_relcycle n X {} y" and xeq: "A = homologous_rel_set n X {} y"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1533
        by (auto simp: peq carrier_relative_homology_group)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1534
      then obtain x where "x \<in> carrier (sum_group \<U> (\<lambda>T. relcycle_group n (subtopology X T) {}))"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1535
                          "y = sum' x \<U>"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1536
        using iso_cycle_group_sum [OF assms, of n] that by (force simp: iso_iff_mon_epi epi_def)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1537
      then show "A \<in> (\<lambda>x. gfinprod (homology_group p X) (\<lambda>V. hom_induced p (subtopology X V) {} X {} id (x V)) \<U>) `
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1538
             carrier (sum_group \<U> (\<lambda>S. homology_group p (subtopology X S)))"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1539
        apply (simp add: carrSG image_comp o_def xeq)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1540
        apply (simp add: hom_induced_carrier peq flip: gf cong: gfinprod_cong)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1541
        done
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1542
    qed auto
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1543
  qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1544
qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1545
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1546
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1547
corollary homology_additivity_axiom:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1548
  assumes disj: "pairwise disjnt \<U>" and UU: "\<Union>\<U> = topspace X"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1549
   and ope: "\<And>v. v \<in> \<U> \<Longrightarrow> openin X v"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1550
 shows "(\<lambda>x. gfinprod (homology_group p X)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1551
                      (\<lambda>v. hom_induced p (subtopology X v) {} X {} id (x v)) \<U>)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1552
     \<in> iso (sum_group \<U> (\<lambda>S. homology_group p (subtopology X S))) (homology_group p X)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1553
proof (rule homology_additivity_axiom_gen [OF disj UU])
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1554
  fix C T
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1555
  assume
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1556
    "compactin X C" and
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1557
    "path_connectedin X C" and
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1558
    "T \<in> \<U>" and
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1559
    "\<not> disjnt C T"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1560
  then have "C \<subseteq> topspace X"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1561
    and *: "\<And>B. \<lbrakk>openin X T; T \<inter> B \<inter> C = {}; C \<subseteq> T \<union> B; openin X B\<rbrakk> \<Longrightarrow> B \<inter> C = {}"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1562
     apply (auto simp: connectedin disjnt_def dest!: path_connectedin_imp_connectedin, blast)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1563
    done
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1564
  have "C \<subseteq> Union \<U>"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1565
    using \<open>C \<subseteq> topspace X\<close> UU by blast
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1566
  moreover have "\<Union> (\<U> - {T}) \<inter> C = {}"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1567
  proof (rule *)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1568
    show "T \<inter> \<Union> (\<U> - {T}) \<inter> C = {}"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1569
      using \<open>T \<in> \<U>\<close> disj disjointD by fastforce
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1570
    show "C \<subseteq> T \<union> \<Union> (\<U> - {T})"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1571
      using \<open>C \<subseteq> \<Union> \<U>\<close> by fastforce
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1572
  qed (auto simp: \<open>T \<in> \<U>\<close> ope)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1573
  ultimately show "C \<subseteq> T"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1574
    by blast
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1575
qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1576
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1577
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1578
subsection\<open>Special properties of singular homology\<close>
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1579
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1580
text\<open>In particular: the zeroth homology group is isomorphic to the free abelian group
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1581
generated by the path components. So, the "coefficient group" is the integers.\<close>
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1582
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1583
lemma iso_integer_zeroth_homology_group_aux:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1584
  assumes X: "path_connected_space X" and f: "singular_simplex 0 X f" and f': "singular_simplex 0 X f'"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1585
  shows "homologous_rel 0 X {} (frag_of f) (frag_of f')"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1586
proof -
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1587
  let ?p = "\<lambda>j. if j = 0 then 1 else 0"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1588
  have "f ?p \<in> topspace X" "f' ?p \<in> topspace X"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1589
  using assms by (auto simp: singular_simplex_def continuous_map_def)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1590
  then obtain g where g: "pathin X g"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1591
                  and g0: "g 0 = f ?p"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1592
                  and g1: "g 1 = f' ?p"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1593
    using assms by (force simp: path_connected_space_def)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1594
  then have contg: "continuous_map (subtopology euclideanreal {0..1}) X g"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1595
    by (simp add: pathin_def)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1596
  have "singular_chain (Suc 0) X (frag_of (restrict (g \<circ> (\<lambda>x. x 0)) (standard_simplex 1)))"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1597
  proof -
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1598
    have "continuous_map (subtopology (powertop_real UNIV) (standard_simplex (Suc 0)))
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1599
                         (top_of_set {0..1}) (\<lambda>x. x 0)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1600
      apply (auto simp: continuous_map_in_subtopology g)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1601
        apply (metis (mono_tags) UNIV_I continuous_map_from_subtopology continuous_map_product_projection)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1602
       apply (simp_all add: standard_simplex_def)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1603
      done
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1604
    moreover have "continuous_map (top_of_set {0..1}) X g"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1605
      using contg by blast
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1606
    ultimately show ?thesis
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1607
      by (force simp: singular_chain_of chain_boundary_of singular_simplex_def continuous_map_compose)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1608
  qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1609
  moreover
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1610
  have "chain_boundary (Suc 0) (frag_of (restrict (g \<circ> (\<lambda>x. x 0)) (standard_simplex 1))) =
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1611
      frag_of f - frag_of f'"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1612
  proof -
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1613
    have "singular_face (Suc 0) 0 (g \<circ> (\<lambda>x. x 0)) = f"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1614
         "singular_face (Suc 0) (Suc 0) (g \<circ> (\<lambda>x. x 0)) = f'"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1615
      using assms
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1616
      by (auto simp: singular_face_def singular_simplex_def extensional_def simplical_face_def standard_simplex_0 g0 g1)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1617
    then show ?thesis
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1618
      by (simp add: singular_chain_of chain_boundary_of)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1619
  qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1620
  ultimately
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1621
  show ?thesis
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1622
    by (auto simp: homologous_rel_def singular_boundary)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1623
qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1624
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1625
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1626
proposition iso_integer_zeroth_homology_group:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1627
  assumes X: "path_connected_space X" and f: "singular_simplex 0 X f"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1628
  shows "pow (homology_group 0 X) (homologous_rel_set 0 X {} (frag_of f))
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1629
       \<in> iso integer_group (homology_group 0 X)" (is "pow ?H ?q \<in> iso _ ?H")
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1630
proof -
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1631
  have srf: "singular_relcycle 0 X {} (frag_of f)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1632
    by (simp add: chain_boundary_def f singular_chain_of singular_cycle)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1633
  then have qcarr: "?q \<in> carrier ?H"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1634
    by (simp add: carrier_relative_homology_group_0)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1635
  have 1: "homologous_rel_set 0 X {} a \<in> range (\<lambda>n. homologous_rel_set 0 X {} (frag_cmul n (frag_of f)))"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1636
    if "singular_relcycle 0 X {} a" for a
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1637
  proof -
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1638
    have "singular_chain 0 X d \<Longrightarrow>
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1639
          homologous_rel_set 0 X {} d \<in> range (\<lambda>n. homologous_rel_set 0 X {} (frag_cmul n (frag_of f)))" for d
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1640
      unfolding singular_chain_def
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1641
    proof (induction d rule: frag_induction)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1642
      case zero
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1643
      then show ?case
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1644
        by (metis frag_cmul_zero rangeI)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1645
    next
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1646
      case (one x)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1647
      then have "\<exists>i. homologous_rel_set 0 X {} (frag_cmul i (frag_of f))
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1648
                   = homologous_rel_set 0 X {} (frag_of x)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1649
        by (metis (no_types) iso_integer_zeroth_homology_group_aux [OF X] f frag_cmul_one homologous_rel_eq mem_Collect_eq)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1650
      with one show ?case
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1651
        by auto
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1652
    next
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1653
      case (diff a b)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1654
      then obtain c d where
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1655
        "homologous_rel 0 X {} (a - b) (frag_cmul c (frag_of f) - frag_cmul d (frag_of f))"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1656
        using homologous_rel_diff by (fastforce simp add: homologous_rel_set_eq)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1657
      then show ?case
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1658
        by (rule_tac x="c-d" in image_eqI) (auto simp: homologous_rel_set_eq frag_cmul_diff_distrib)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1659
    qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1660
    with that show ?thesis
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1661
      unfolding singular_relcycle_def by blast
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1662
  qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1663
  have 2: "n = 0"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1664
    if "homologous_rel_set 0 X {} (frag_cmul n (frag_of f)) = \<one>\<^bsub>relative_homology_group 0 X {}\<^esub>"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1665
    for n
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1666
  proof -
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1667
    have "singular_chain (Suc 0) X d
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1668
          \<Longrightarrow> frag_extend (\<lambda>x. frag_of f) (chain_boundary (Suc 0) d) = 0" for d
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1669
      unfolding singular_chain_def
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1670
    proof (induction d rule: frag_induction)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1671
      case (one x)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1672
      then show ?case
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1673
        by (simp add: frag_extend_diff chain_boundary_of)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1674
    next
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1675
      case (diff a b)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1676
      then show ?case
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1677
        by (simp add: chain_boundary_diff frag_extend_diff)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1678
    qed auto
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1679
    with that show ?thesis
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1680
      by (force simp: singular_boundary relative_homology_group_def homologous_rel_set_eq_relboundary frag_extend_cmul)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1681
  qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1682
  interpret GH : group_hom integer_group ?H "([^]\<^bsub>?H\<^esub>) ?q"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1683
    by (simp add: group_hom_def group_hom_axioms_def qcarr group.hom_integer_group_pow)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1684
  have eq: "pow ?H ?q = (\<lambda>n. homologous_rel_set 0 X {} (frag_cmul n (frag_of f)))"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1685
  proof
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1686
    fix n
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1687
    have "frag_of f
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1688
          \<in> carrier (subgroup_generated
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1689
                (free_Abelian_group (singular_simplex_set 0 X)) (singular_relcycle_set 0 X {}))"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1690
      by (metis carrier_relcycle_group chain_group_def mem_Collect_eq relcycle_group_def srf)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1691
    then have ff: "frag_of f [^]\<^bsub>relcycle_group 0 X {}\<^esub> n = frag_cmul n (frag_of f)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1692
      by (simp add: relcycle_group_def chain_group_def group.int_pow_subgroup_generated f)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1693
    show "pow ?H ?q n = homologous_rel_set 0 X {} (frag_cmul n (frag_of f))"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1694
      apply (rule subst [OF right_coset_singular_relboundary])
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1695
      apply (simp add: relative_homology_group_def)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1696
      apply (simp add: srf ff normal.FactGroup_int_pow normal_subgroup_singular_relboundary_relcycle)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1697
      done
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1698
  qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1699
  show ?thesis
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1700
    apply (subst GH.iso_iff)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1701
    apply (simp add: eq)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1702
    apply (auto simp: carrier_relative_homology_group_0 1 2)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1703
    done
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1704
qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1705
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1706
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1707
corollary isomorphic_integer_zeroth_homology_group:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1708
  assumes X: "path_connected_space X" "topspace X \<noteq> {}"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1709
  shows "homology_group 0 X \<cong> integer_group"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1710
proof -
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1711
  obtain a where a: "a \<in> topspace X"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1712
    using assms by auto
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1713
  have "singular_simplex 0 X (restrict (\<lambda>x. a) (standard_simplex 0))"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1714
    by (simp add: singular_simplex_def a)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1715
  then show ?thesis
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1716
    using X group.iso_sym group_integer_group is_isoI iso_integer_zeroth_homology_group by blast
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1717
qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1718
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1719
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1720
corollary homology_coefficients:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1721
   "topspace X = {a} \<Longrightarrow> homology_group 0 X \<cong> integer_group"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1722
  using isomorphic_integer_zeroth_homology_group path_connectedin_topspace by fastforce
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1723
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1724
proposition zeroth_homology_group:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1725
   "homology_group 0 X \<cong> free_Abelian_group (path_components_of X)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1726
proof -
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1727
  obtain h where h: "h \<in> iso (sum_group (path_components_of X) (\<lambda>S. homology_group 0 (subtopology X S)))
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1728
                             (homology_group 0 X)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1729
  proof (rule that [OF homology_additivity_axiom_gen])
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1730
    show "disjoint (path_components_of X)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1731
      by (simp add: pairwise_disjoint_path_components_of)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1732
    show "\<Union>(path_components_of X) = topspace X"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1733
      by (rule Union_path_components_of)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1734
  next
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1735
    fix C T
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1736
    assume "path_connectedin X C" "T \<in> path_components_of X" "\<not> disjnt C T"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1737
    then show "C \<subseteq> T"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1738
      by (metis path_components_of_maximal disjnt_sym)+
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1739
  qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1740
  have "homology_group 0 X \<cong> sum_group (path_components_of X) (\<lambda>S. homology_group 0 (subtopology X S))"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1741
    by (rule group.iso_sym) (use h is_iso_def in auto)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1742
  also have "\<dots>  \<cong> sum_group (path_components_of X) (\<lambda>i. integer_group)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1743
  proof (rule iso_sum_groupI)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1744
    show "homology_group 0 (subtopology X i) \<cong> integer_group" if "i \<in> path_components_of X" for i
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1745
      by (metis that isomorphic_integer_zeroth_homology_group nonempty_path_components_of
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1746
          path_connectedin_def path_connectedin_path_components_of topspace_subtopology_subset)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1747
  qed auto
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1748
  also have "\<dots>  \<cong> free_Abelian_group (path_components_of X)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1749
    using path_connectedin_path_components_of nonempty_path_components_of
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1750
    by (simp add: isomorphic_sum_integer_group path_connectedin_def)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1751
  finally show ?thesis .
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1752
qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1753
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1754
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1755
lemma isomorphic_homology_imp_path_components:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1756
  assumes "homology_group 0 X \<cong> homology_group 0 Y"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1757
  shows "path_components_of X \<approx> path_components_of Y"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1758
proof -
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1759
  have "free_Abelian_group (path_components_of X) \<cong> homology_group 0 X"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1760
    by (rule group.iso_sym) (auto simp: zeroth_homology_group)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1761
  also have "\<dots> \<cong> homology_group 0 Y"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1762
    by (rule assms)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1763
  also have "\<dots> \<cong> free_Abelian_group (path_components_of Y)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1764
    by (rule zeroth_homology_group)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1765
  finally have "free_Abelian_group (path_components_of X) \<cong> free_Abelian_group (path_components_of Y)" .
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1766
  then show ?thesis
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1767
    by (simp add: isomorphic_free_Abelian_groups)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1768
qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1769
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1770
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1771
lemma isomorphic_homology_imp_path_connectedness:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1772
  assumes "homology_group 0 X \<cong> homology_group 0 Y"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1773
  shows "path_connected_space X \<longleftrightarrow> path_connected_space Y"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1774
proof -
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1775
  obtain h where h: "bij_betw h (path_components_of X) (path_components_of Y)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1776
    using assms isomorphic_homology_imp_path_components eqpoll_def by blast
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1777
  have 1: "path_components_of X \<subseteq> {a} \<Longrightarrow> path_components_of Y \<subseteq> {h a}" for a
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1778
    using h unfolding bij_betw_def by blast
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1779
  have 2: "path_components_of Y \<subseteq> {a}
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1780
           \<Longrightarrow> path_components_of X \<subseteq> {inv_into (path_components_of X) h a}" for a
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1781
    using h [THEN bij_betw_inv_into] unfolding bij_betw_def by blast
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1782
  show ?thesis
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1783
    unfolding path_connected_space_iff_components_subset_singleton
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1784
    by (blast intro: dest: 1 2)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1785
qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1786
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1787
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1788
subsection\<open>More basic properties of homology groups, deduced from the E-S axioms\<close>
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1789
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1790
lemma trivial_homology_group:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1791
   "p < 0 \<Longrightarrow> trivial_group(homology_group p X)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1792
  by simp
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1793
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1794
lemma hom_induced_empty_hom:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1795
   "(hom_induced p X {} X' {} f) \<in> hom (homology_group p X) (homology_group p X')"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1796
  by (simp add: hom_induced_hom)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1797
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1798
lemma hom_induced_compose_empty:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1799
  "\<lbrakk>continuous_map X Y f; continuous_map Y Z g\<rbrakk>
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1800
   \<Longrightarrow> hom_induced p X {} Z {} (g \<circ> f) = hom_induced p Y {} Z {} g \<circ> hom_induced p X {} Y {} f"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1801
  by (simp add: hom_induced_compose)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1802
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1803
lemma homology_homotopy_empty:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1804
   "homotopic_with (\<lambda>h. True) X Y f g \<Longrightarrow> hom_induced p X {} Y {} f = hom_induced p X {} Y {} g"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1805
  by (simp add: homology_homotopy_axiom)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1806
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1807
lemma homotopy_equivalence_relative_homology_group_isomorphisms:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1808
  assumes contf: "continuous_map X Y f" and fim: "f ` S \<subseteq> T"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1809
      and contg: "continuous_map Y X g" and gim: "g ` T \<subseteq> S"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1810
      and gf: "homotopic_with (\<lambda>h. h ` S \<subseteq> S) X X (g \<circ> f) id"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1811
      and fg: "homotopic_with (\<lambda>k. k ` T \<subseteq> T) Y Y (f \<circ> g) id"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1812
    shows "group_isomorphisms (relative_homology_group p X S) (relative_homology_group p Y T)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1813
                (hom_induced p X S Y T f) (hom_induced p Y T X S g)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1814
  unfolding group_isomorphisms_def
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1815
proof (intro conjI ballI)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1816
  fix x
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1817
  assume x: "x \<in> carrier (relative_homology_group p X S)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1818
  then show "hom_induced p Y T X S g (hom_induced p X S Y T f x) = x"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1819
    using homology_homotopy_axiom [OF gf, of p]
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1820
    apply (simp add: hom_induced_compose [OF contf fim contg gim])
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1821
    apply (metis comp_apply hom_induced_id)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1822
    done
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1823
next
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1824
  fix y
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1825
  assume "y \<in> carrier (relative_homology_group p Y T)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1826
  then show "hom_induced p X S Y T f (hom_induced p Y T X S g y) = y"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1827
    using homology_homotopy_axiom [OF fg, of p]
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1828
    apply (simp add: hom_induced_compose [OF contg gim contf fim])
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1829
    apply (metis comp_apply hom_induced_id)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1830
    done
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1831
qed (auto simp: hom_induced_hom)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1832
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1833
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1834
lemma homotopy_equivalence_relative_homology_group_isomorphism:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1835
  assumes "continuous_map X Y f" and fim: "f ` S \<subseteq> T"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1836
      and "continuous_map Y X g" and gim: "g ` T \<subseteq> S"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1837
      and "homotopic_with (\<lambda>h. h ` S \<subseteq> S) X X (g \<circ> f) id"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1838
      and "homotopic_with (\<lambda>k. k ` T \<subseteq> T) Y Y (f \<circ> g) id"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1839
    shows "(hom_induced p X S Y T f) \<in> iso (relative_homology_group p X S) (relative_homology_group p Y T)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1840
  using homotopy_equivalence_relative_homology_group_isomorphisms [OF assms] group_isomorphisms_imp_iso
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1841
  by metis
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1842
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1843
lemma homotopy_equivalence_homology_group_isomorphism:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1844
  assumes "continuous_map X Y f"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1845
      and "continuous_map Y X g"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1846
      and "homotopic_with (\<lambda>h. True) X X (g \<circ> f) id"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1847
      and "homotopic_with (\<lambda>k. True) Y Y (f \<circ> g) id"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1848
    shows "(hom_induced p X {} Y {} f) \<in> iso (homology_group p X) (homology_group p Y)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1849
  apply (rule homotopy_equivalence_relative_homology_group_isomorphism)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1850
  using assms by auto
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1851
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1852
lemma homotopy_equivalent_space_imp_isomorphic_relative_homology_groups:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1853
  assumes "continuous_map X Y f" and fim: "f ` S \<subseteq> T"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1854
      and "continuous_map Y X g" and gim: "g ` T \<subseteq> S"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1855
      and "homotopic_with (\<lambda>h. h ` S \<subseteq> S) X X (g \<circ> f) id"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1856
      and "homotopic_with (\<lambda>k. k ` T \<subseteq> T) Y Y (f \<circ> g) id"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1857
    shows "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
  1858
  using homotopy_equivalence_relative_homology_group_isomorphism [OF assms]
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1859
  unfolding is_iso_def by blast
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1860
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1861
lemma homotopy_equivalent_space_imp_isomorphic_homology_groups:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1862
   "X homotopy_equivalent_space Y \<Longrightarrow> homology_group p X \<cong> homology_group p Y"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1863
  unfolding homotopy_equivalent_space_def
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1864
  by (auto intro: homotopy_equivalent_space_imp_isomorphic_relative_homology_groups)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1865
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1866
lemma homeomorphic_space_imp_isomorphic_homology_groups:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1867
   "X homeomorphic_space Y \<Longrightarrow> homology_group p X \<cong> homology_group p Y"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1868
  by (simp add: homeomorphic_imp_homotopy_equivalent_space homotopy_equivalent_space_imp_isomorphic_homology_groups)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1869
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1870
lemma trivial_relative_homology_group_gen:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1871
  assumes "continuous_map X (subtopology X S) f"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1872
    "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
  1873
    "homotopic_with (\<lambda>k. True) X X f id"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1874
  shows "trivial_group(relative_homology_group p X S)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1875
proof (rule exact_seq_imp_triviality)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1876
  show "exact_seq ([homology_group (p-1) X,
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1877
                    homology_group (p-1) (subtopology X S),
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1878
                    relative_homology_group p X S, homology_group p X, homology_group p (subtopology X S)],
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1879
                   [hom_induced (p-1) (subtopology X S) {} X {} id,
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1880
                    hom_boundary p X S,
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1881
                    hom_induced p X {} X S id,
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1882
                    hom_induced p (subtopology X S) {} X {} id])"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1883
    using homology_exactness_axiom_1 homology_exactness_axiom_2 homology_exactness_axiom_3
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1884
    by (metis exact_seq_cons_iff)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1885
next
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1886
  show "hom_induced p (subtopology X S) {} X {} id
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1887
        \<in> iso (homology_group p (subtopology X S)) (homology_group p X)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1888
       "hom_induced (p - 1) (subtopology X S) {} X {} id
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1889
        \<in> iso (homology_group (p - 1) (subtopology X S)) (homology_group (p - 1) X)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1890
    using assms
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1891
    by (auto intro: homotopy_equivalence_relative_homology_group_isomorphism)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1892
qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1893
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1894
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1895
lemma trivial_relative_homology_group_topspace:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1896
   "trivial_group(relative_homology_group p X (topspace X))"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1897
  by (rule trivial_relative_homology_group_gen [where f=id]) auto
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1898
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1899
lemma trivial_relative_homology_group_empty:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1900
   "topspace X = {} \<Longrightarrow> trivial_group(relative_homology_group p X S)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1901
  by (metis Int_absorb2 empty_subsetI relative_homology_group_restrict trivial_relative_homology_group_topspace)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1902
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1903
lemma trivial_homology_group_empty:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1904
   "topspace X = {} \<Longrightarrow> trivial_group(homology_group p X)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1905
  by (simp add: trivial_relative_homology_group_empty)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1906
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1907
lemma homeomorphic_maps_relative_homology_group_isomorphisms:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1908
  assumes "homeomorphic_maps X Y f g" and im: "f ` S \<subseteq> T" "g ` T \<subseteq> S"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1909
  shows "group_isomorphisms (relative_homology_group p X S) (relative_homology_group p Y T)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1910
                            (hom_induced p X S Y T f) (hom_induced p Y T X S g)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1911
proof -
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1912
  have fg: "continuous_map X Y f" "continuous_map Y X g"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1913
       "(\<forall>x\<in>topspace X. g (f x) = x)" "(\<forall>y\<in>topspace Y. f (g y) = y)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1914
  using assms by (simp_all add: homeomorphic_maps_def)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1915
  have "group_isomorphisms
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1916
         (relative_homology_group p X (topspace X \<inter> S))
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1917
         (relative_homology_group p Y (topspace Y \<inter> T))
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1918
         (hom_induced p X (topspace X \<inter> S) Y (topspace Y \<inter> T) f)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1919
         (hom_induced p Y (topspace Y \<inter> T) X (topspace X \<inter> S) g)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1920
  proof (rule homotopy_equivalence_relative_homology_group_isomorphisms)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1921
    show "homotopic_with (\<lambda>h. h ` (topspace X \<inter> S) \<subseteq> topspace X \<inter> S) X X (g \<circ> f) id"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1922
      using fg im by (auto intro: homotopic_with_equal continuous_map_compose)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1923
  next
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1924
    show "homotopic_with (\<lambda>k. k ` (topspace Y \<inter> T) \<subseteq> topspace Y \<inter> T) Y Y (f \<circ> g) id"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1925
      using fg im by (auto intro: homotopic_with_equal continuous_map_compose)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1926
  qed (use im fg in \<open>auto simp: continuous_map_def\<close>)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1927
  then show ?thesis
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1928
    by simp
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1929
qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1930
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1931
lemma homeomorphic_map_relative_homology_iso:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1932
  assumes f: "homeomorphic_map X Y f" and S: "S \<subseteq> topspace X" "f ` S = T"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1933
  shows "(hom_induced p X S Y T f) \<in> iso (relative_homology_group p X S) (relative_homology_group p Y T)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1934
proof -
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1935
  obtain g where g: "homeomorphic_maps X Y f g"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1936
    using homeomorphic_map_maps f by metis
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1937
  then have "group_isomorphisms (relative_homology_group p X S) (relative_homology_group p Y T)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1938
                                (hom_induced p X S Y T f) (hom_induced p Y T X S g)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1939
    using S g by (auto simp: homeomorphic_maps_def intro!: homeomorphic_maps_relative_homology_group_isomorphisms)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1940
  then show ?thesis
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1941
    by (rule group_isomorphisms_imp_iso)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1942
qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1943
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1944
lemma inj_on_hom_induced_section_map:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1945
  assumes "section_map X Y f"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1946
  shows "inj_on (hom_induced p X {} Y {} f) (carrier (homology_group p X))"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1947
proof -
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1948
  obtain g where cont: "continuous_map X Y f" "continuous_map Y X g"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1949
           and gf: "\<And>x. x \<in> topspace X \<Longrightarrow> g (f x) = x"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1950
    using assms by (auto simp: section_map_def retraction_maps_def)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1951
  show ?thesis
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1952
  proof (rule inj_on_inverseI)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1953
    fix x
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1954
    assume x: "x \<in> carrier (homology_group p X)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1955
    have "continuous_map X X (\<lambda>x. g (f x))"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1956
      by (metis (no_types, lifting) continuous_map_eq continuous_map_id gf id_apply)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1957
    with x show "hom_induced p Y {} X {} g (hom_induced p X {} Y {} f x) = x"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1958
      using hom_induced_compose_empty [OF cont, symmetric]
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1959
      apply (simp add: o_def fun_eq_iff)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1960
      apply (rule hom_induced_id_gen)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1961
      apply (auto simp: gf)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1962
      done
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1963
  qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1964
qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1965
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1966
corollary mon_hom_induced_section_map:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1967
  assumes "section_map X Y f"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1968
  shows "(hom_induced p X {} Y {} f) \<in> mon (homology_group p X) (homology_group p Y)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1969
  by (simp add: hom_induced_empty_hom inj_on_hom_induced_section_map [OF assms] mon_def)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1970
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1971
lemma surj_hom_induced_retraction_map:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1972
  assumes "retraction_map X Y f"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1973
  shows "carrier (homology_group p Y) = (hom_induced p X {} Y {} f) ` carrier (homology_group p X)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1974
         (is "?lhs = ?rhs")
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1975
proof -
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1976
  obtain g where cont: "continuous_map Y X g"  "continuous_map X Y f"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1977
    and fg: "\<And>x. x \<in> topspace Y \<Longrightarrow> f (g x) = x"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1978
    using assms by (auto simp: retraction_map_def retraction_maps_def)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1979
  have "x = hom_induced p X {} Y {} f (hom_induced p Y {} X {} g x)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1980
    if x: "x \<in> carrier (homology_group p Y)" for x
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1981
  proof -
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1982
    have "continuous_map Y Y (\<lambda>x. f (g x))"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1983
      by (metis (no_types, lifting) continuous_map_eq continuous_map_id fg id_apply)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1984
    with x show ?thesis
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1985
      using hom_induced_compose_empty [OF cont, symmetric]
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1986
      apply (simp add: o_def fun_eq_iff)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1987
      apply (rule hom_induced_id_gen [symmetric])
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1988
        apply (auto simp: fg)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1989
      done
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1990
  qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1991
  moreover
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1992
  have "(hom_induced p Y {} X {} g x) \<in> carrier (homology_group p X)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1993
    if "x \<in> carrier (homology_group p Y)" for x
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1994
    by (metis hom_induced)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1995
  ultimately have "?lhs \<subseteq> ?rhs"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1996
    by auto
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1997
  moreover have "?rhs \<subseteq> ?lhs"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1998
    using hom_induced_hom [of p X "{}" Y "{}" f]
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  1999
    by (simp add: hom_def flip: image_subset_iff_funcset)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2000
  ultimately show ?thesis
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2001
    by auto
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2002
qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2003
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2004
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2005
corollary epi_hom_induced_retraction_map:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2006
  assumes "retraction_map X Y f"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2007
  shows "(hom_induced p X {} Y {} f) \<in> epi (homology_group p X) (homology_group p Y)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2008
  using assms epi_iff_subset hom_induced_empty_hom surj_hom_induced_retraction_map by fastforce
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2009
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2010
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2011
lemma homeomorphic_map_homology_iso:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2012
  assumes "homeomorphic_map X Y f"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2013
  shows "(hom_induced p X {} Y {} f) \<in> iso (homology_group p X) (homology_group p Y)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2014
  using assms
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2015
  apply (simp add: iso_def bij_betw_def flip: section_and_retraction_eq_homeomorphic_map)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2016
  by (metis inj_on_hom_induced_section_map surj_hom_induced_retraction_map hom_induced_hom)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2017
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2018
(*See also hom_hom_induced_inclusion*)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2019
lemma inj_on_hom_induced_inclusion:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2020
  assumes "S = {} \<or> S retract_of_space X"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2021
  shows "inj_on (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
  2022
  using assms
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2023
proof
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2024
  assume "S = {}"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2025
  then have "trivial_group(homology_group p (subtopology X S))"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2026
    by (auto simp: topspace_subtopology intro: trivial_homology_group_empty)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2027
  then show ?thesis
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2028
    by (auto simp: inj_on_def trivial_group_def)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2029
next
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2030
  assume "S retract_of_space X"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2031
  then show ?thesis
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2032
    by (simp add: retract_of_space_section_map inj_on_hom_induced_section_map)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2033
qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2034
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2035
lemma trivial_homomorphism_hom_boundary_inclusion:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2036
  assumes "S = {} \<or> S retract_of_space X"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2037
  shows "trivial_homomorphism
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2038
             (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
  2039
             (hom_boundary p X S)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2040
  apply (rule iffD1 [OF exact_seq_mon_eq_triviality inj_on_hom_induced_inclusion [OF assms]])
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2041
  apply (rule exact_seq.intros)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2042
     apply (rule homology_exactness_axiom_1 [of p])
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2043
  using homology_exactness_axiom_2 [of p]
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2044
  by auto
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2045
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2046
lemma epi_hom_induced_relativization:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2047
  assumes "S = {} \<or> S retract_of_space X"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2048
  shows "(hom_induced p X {} X S id) ` carrier (homology_group p X) = carrier (relative_homology_group p X S)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2049
  apply (rule iffD2 [OF exact_seq_epi_eq_triviality trivial_homomorphism_hom_boundary_inclusion])
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2050
   apply (rule exact_seq.intros)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2051
      apply (rule homology_exactness_axiom_1 [of p])
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2052
  using homology_exactness_axiom_2 [of p] apply (auto simp: assms)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2053
  done
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2054
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2055
(*different in HOL Light because we don't need short_exact_sequence*)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2056
lemmas short_exact_sequence_hom_induced_inclusion = homology_exactness_axiom_3
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2057
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2058
lemma group_isomorphisms_homology_group_prod_retract:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2059
  assumes "S = {} \<or> S retract_of_space X"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2060
  obtains \<H> \<K> where
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2061
    "subgroup \<H> (homology_group p X)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2062
    "subgroup \<K> (homology_group p X)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2063
    "(\<lambda>(x, y). x \<otimes>\<^bsub>homology_group p X\<^esub> y)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2064
    \<in> iso (DirProd (subgroup_generated (homology_group p X) \<H>) (subgroup_generated (homology_group p X) \<K>))
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2065
          (homology_group p X)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2066
    "(hom_induced p (subtopology X S) {} X {} id)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2067
    \<in> iso (homology_group p (subtopology X S)) (subgroup_generated (homology_group p X) \<H>)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2068
    "(hom_induced p X {} X S id)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2069
    \<in> iso (subgroup_generated (homology_group p X) \<K>) (relative_homology_group p X S)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2070
  using assms
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2071
proof
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2072
  assume "S = {}"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2073
  show thesis
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2074
  proof (rule splitting_lemma_left [OF homology_exactness_axiom_3 [of p]])
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2075
    let ?f = "\<lambda>x. one(homology_group p (subtopology X {}))"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2076
    show "?f \<in> hom (homology_group p X) (homology_group p (subtopology X {}))"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2077
      by (simp add: trivial_hom)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2078
    have tg: "trivial_group (homology_group p (subtopology X {}))"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2079
      by (auto simp: topspace_subtopology trivial_homology_group_empty)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2080
    then have [simp]: "carrier (homology_group p (subtopology X {})) = {one (homology_group p (subtopology X {}))}"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2081
      by (auto simp: trivial_group_def)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2082
    then show "?f (hom_induced p (subtopology X {}) {} X {} id x) = x"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2083
      if "x \<in> carrier (homology_group p (subtopology X {}))" for x
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2084
      using that by auto
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2085
    show "inj_on (hom_induced p (subtopology X {}) {} X {} id)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2086
               (carrier (homology_group p (subtopology X {})))"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2087
      by auto
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2088
    show "hom_induced p X {} X {} id ` carrier (homology_group p X) = carrier (homology_group p X)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2089
      by (metis epi_hom_induced_relativization)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2090
  next
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2091
    fix \<H> \<K>
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2092
    assume *: "\<H> \<lhd> homology_group p X" "\<K> \<lhd> homology_group p X"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2093
      "\<H> \<inter> \<K> \<subseteq> {\<one>\<^bsub>homology_group p X\<^esub>}"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2094
      "hom_induced p (subtopology X {}) {} X {} id
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2095
     \<in> Group.iso (homology_group p (subtopology X {})) (subgroup_generated (homology_group p X) \<H>)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2096
      "hom_induced p X {} X {} id
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2097
     \<in> Group.iso (subgroup_generated (homology_group p X) \<K>) (relative_homology_group p X {})"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2098
      "\<H> <#>\<^bsub>homology_group p X\<^esub> \<K> = carrier (homology_group p X)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2099
    show thesis
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2100
    proof (rule that)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2101
      show "(\<lambda>(x, y). x \<otimes>\<^bsub>homology_group p X\<^esub> y)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2102
        \<in> iso (subgroup_generated (homology_group p X) \<H> \<times>\<times> subgroup_generated (homology_group p X) \<K>)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2103
            (homology_group p X)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2104
        using * by (simp add: group_disjoint_sum.iso_group_mul normal_def group_disjoint_sum_def)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2105
    qed (use \<open>S = {}\<close> * in \<open>auto simp: normal_def\<close>)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2106
  qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2107
next
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2108
  assume "S retract_of_space X"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2109
  then obtain r where "S \<subseteq> topspace X" and r: "continuous_map X (subtopology X S) r"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2110
                   and req: "\<forall>x \<in> S. r x = x"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2111
    by (auto simp: retract_of_space_def)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2112
  show thesis
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2113
  proof (rule splitting_lemma_left [OF homology_exactness_axiom_3 [of p]])
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2114
    let ?f = "hom_induced p X {} (subtopology X S) {} r"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2115
    show "?f \<in> hom (homology_group p X) (homology_group p (subtopology X S))"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2116
      by (simp add: hom_induced_empty_hom)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2117
    show eqx: "?f (hom_induced p (subtopology X S) {} X {} id x) = x"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2118
      if "x \<in> carrier (homology_group p (subtopology X S))" for x
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2119
    proof -
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2120
      have "hom_induced p (subtopology X S) {} (subtopology X S) {} r x = x"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2121
        by (metis \<open>S \<subseteq> topspace X\<close> continuous_map_from_subtopology hom_induced_id_gen inf.absorb_iff2 r req that topspace_subtopology)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2122
      then show ?thesis
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2123
        by (simp add: r hom_induced_compose [unfolded o_def fun_eq_iff, rule_format, symmetric])
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2124
    qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2125
    then show "inj_on (hom_induced p (subtopology X S) {} X {} id)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2126
               (carrier (homology_group p (subtopology X S)))"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2127
      unfolding inj_on_def by metis
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2128
    show "hom_induced p X {} X S id ` carrier (homology_group p X) = carrier (relative_homology_group p X S)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2129
      by (simp add: \<open>S retract_of_space X\<close> epi_hom_induced_relativization)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2130
  next
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2131
    fix \<H> \<K>
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2132
    assume *: "\<H> \<lhd> homology_group p X" "\<K> \<lhd> homology_group p X"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2133
      "\<H> \<inter> \<K> \<subseteq> {\<one>\<^bsub>homology_group p X\<^esub>}"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2134
      "\<H> <#>\<^bsub>homology_group p X\<^esub> \<K> = carrier (homology_group p X)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2135
      "hom_induced p (subtopology X S) {} X {} id
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2136
     \<in> Group.iso (homology_group p (subtopology X S)) (subgroup_generated (homology_group p X) \<H>)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2137
      "hom_induced p X {} X S id
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2138
     \<in> Group.iso (subgroup_generated (homology_group p X) \<K>) (relative_homology_group p X S)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2139
    show "thesis"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2140
    proof (rule that)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2141
      show "(\<lambda>(x, y). x \<otimes>\<^bsub>homology_group p X\<^esub> y)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2142
          \<in> iso (subgroup_generated (homology_group p X) \<H> \<times>\<times> subgroup_generated (homology_group p X) \<K>)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2143
                (homology_group p X)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2144
        using *
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2145
        by (simp add: group_disjoint_sum.iso_group_mul normal_def group_disjoint_sum_def)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2146
    qed (use * in \<open>auto simp: normal_def\<close>)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2147
  qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2148
qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2149
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2150
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2151
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2152
lemma isomorphic_group_homology_group_prod_retract:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2153
  assumes "S = {} \<or> S retract_of_space X"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2154
  shows "homology_group p X \<cong> homology_group p (subtopology X S) \<times>\<times> relative_homology_group p X S"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2155
        (is "?lhs \<cong> ?rhs")
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2156
proof -
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2157
  obtain \<H> \<K> where
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2158
    "subgroup \<H> (homology_group p X)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2159
    "subgroup \<K> (homology_group p X)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2160
   and 1: "(\<lambda>(x, y). x \<otimes>\<^bsub>homology_group p X\<^esub> y)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2161
    \<in> iso (DirProd (subgroup_generated (homology_group p X) \<H>) (subgroup_generated (homology_group p X) \<K>))
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2162
          (homology_group p X)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2163
    "(hom_induced p (subtopology X S) {} X {} id)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2164
    \<in> iso (homology_group p (subtopology X S)) (subgroup_generated (homology_group p X) \<H>)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2165
    "(hom_induced p X {} X S id)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2166
    \<in> iso (subgroup_generated (homology_group p X) \<K>) (relative_homology_group p X S)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2167
    using group_isomorphisms_homology_group_prod_retract [OF assms] by blast
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2168
  have "?lhs \<cong> subgroup_generated (homology_group p X) \<H> \<times>\<times> subgroup_generated (homology_group p X) \<K>"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2169
    by (meson DirProd_group 1 abelian_homology_group comm_group_def group.abelian_subgroup_generated group.iso_sym is_isoI)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2170
  also have "\<dots> \<cong> ?rhs"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2171
    by (meson "1"(2) "1"(3) abelian_homology_group comm_group_def group.DirProd_iso_trans group.abelian_subgroup_generated group.iso_sym is_isoI)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2172
  finally show ?thesis .
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2173
qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2174
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2175
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2176
lemma homology_additivity_explicit:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2177
  assumes "openin X S" "openin X T" "disjnt S T" and SUT: "S \<union> T = topspace X"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2178
  shows "(\<lambda>(a,b).(hom_induced p (subtopology X S) {} X {} id a)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2179
                  \<otimes>\<^bsub>homology_group p X\<^esub>
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2180
                 (hom_induced p (subtopology X T) {} X {} id b))
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2181
       \<in> iso (DirProd (homology_group p (subtopology X S)) (homology_group p (subtopology X T)))
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2182
             (homology_group p X)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2183
proof -
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2184
  have "closedin X S" "closedin X T"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2185
    using assms Un_commute disjnt_sym
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2186
    by (metis Diff_cancel Diff_triv Un_Diff disjnt_def openin_closedin_eq sup_bot.right_neutral)+
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2187
  with \<open>openin X S\<close> \<open>openin X T\<close> have SS: "X closure_of S \<subseteq> X interior_of S" and TT: "X closure_of T \<subseteq> X interior_of T"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2188
    by (simp_all add: closure_of_closedin interior_of_openin)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2189
  have [simp]: "S \<union> T - T = S" "S \<union> T - S = T"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2190
    using \<open>disjnt S T\<close>
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2191
    by (auto simp: Diff_triv Un_Diff disjnt_def)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2192
  let ?f = "hom_induced p X {} X T id"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2193
  let ?g = "hom_induced p X {} X S id"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2194
  let ?h = "hom_induced p (subtopology X S) {} X T id"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2195
  let ?i = "hom_induced p (subtopology X S) {} X {} id"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2196
  let ?j = "hom_induced p (subtopology X T) {} X {} id"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2197
  let ?k = "hom_induced p (subtopology X T) {} X S id"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2198
  let ?A = "homology_group p (subtopology X S)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2199
  let ?B = "homology_group p (subtopology X T)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2200
  let ?C = "relative_homology_group p X T"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2201
  let ?D = "relative_homology_group p X S"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2202
  let ?G = "homology_group p X"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2203
  have h: "?h \<in> iso ?A ?C" and k: "?k \<in> iso ?B ?D"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2204
    using homology_excision_axiom [OF TT, of "S \<union> T" p]
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2205
    using homology_excision_axiom [OF SS, of "S \<union> T" p]
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2206
    by auto (simp_all add: SUT)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2207
  have 1: "\<And>x. (hom_induced p X {} X T id \<circ> hom_induced p (subtopology X S) {} X {} id) x
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2208
             = hom_induced p (subtopology X S) {} X T id x"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2209
    by (simp flip: hom_induced_compose)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2210
  have 2: "\<And>x. (hom_induced p X {} X S id \<circ> hom_induced p (subtopology X T) {} X {} id) x
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2211
              = hom_induced p (subtopology X T) {} X S id x"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2212
    by (simp flip: hom_induced_compose)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2213
  show ?thesis
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2214
    using exact_sequence_sum_lemma
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2215
          [OF abelian_homology_group h k homology_exactness_axiom_3 homology_exactness_axiom_3] 1 2
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2216
    by auto
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2217
qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2218
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2219
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2220
subsection\<open>Generalize exact homology sequence to triples\<close>
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2221
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2222
definition hom_relboundary  :: "[int,'a topology,'a set,'a set,'a chain set] \<Rightarrow> 'a chain set"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2223
  where
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2224
  "hom_relboundary p X S T =
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2225
    hom_induced (p - 1) (subtopology X S) {} (subtopology X S) T id \<circ>
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2226
    hom_boundary p X S"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2227
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2228
lemma group_homomorphism_hom_relboundary:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2229
   "hom_relboundary p X S T
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2230
  \<in> hom (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
  2231
  unfolding hom_relboundary_def
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2232
  proof (rule hom_compose)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2233
    show "hom_boundary p X S \<in> hom (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
  2234
      by (simp add: hom_boundary_hom)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2235
  show "hom_induced (p - 1) (subtopology X S) {} (subtopology X S) T id
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2236
      \<in> hom (homology_group(p - 1) (subtopology X S)) (relative_homology_group (p - 1) (subtopology X S) T)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2237
    by (simp add: hom_induced_hom)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2238
qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2239
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2240
lemma hom_relboundary:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2241
   "hom_relboundary p X S T c \<in> carrier (relative_homology_group (p - 1) (subtopology X S) T)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2242
  by (simp add: hom_relboundary_def hom_induced_carrier)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2243
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2244
lemma hom_relboundary_empty: "hom_relboundary p X S {} = hom_boundary p X S"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2245
  apply (simp add: hom_relboundary_def o_def)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2246
  apply (subst hom_induced_id)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2247
  apply (metis hom_boundary_carrier, auto)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2248
  done
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2249
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2250
lemma naturality_hom_induced_relboundary:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2251
  assumes "continuous_map X Y f" "f ` S \<subseteq> U" "f ` T \<subseteq> V"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2252
  shows "hom_relboundary p Y U V \<circ>
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2253
         hom_induced p X S Y (U) f =
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2254
         hom_induced (p - 1) (subtopology X S) T (subtopology Y U) V f \<circ>
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2255
         hom_relboundary p X S T"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2256
proof -
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2257
  have [simp]: "continuous_map (subtopology X S) (subtopology Y U) f"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2258
    using assms continuous_map_from_subtopology continuous_map_in_subtopology topspace_subtopology by fastforce
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2259
  have "hom_induced (p - 1) (subtopology Y U) {} (subtopology Y U) V id \<circ>
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2260
        hom_induced (p - 1) (subtopology X S) {} (subtopology Y U) {} f
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2261
      = hom_induced (p - 1) (subtopology X S) T (subtopology Y U) V f \<circ>
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2262
        hom_induced (p - 1) (subtopology X S) {} (subtopology X S) T id"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2263
    using assms by (simp flip: hom_induced_compose)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2264
  then show ?thesis
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2265
    apply (simp add: hom_relboundary_def comp_assoc naturality_hom_induced assms)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2266
    apply (simp flip: comp_assoc)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2267
    done
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2268
qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2269
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2270
proposition homology_exactness_triple_1:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2271
  assumes "T \<subseteq> S"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2272
  shows "exact_seq ([relative_homology_group(p - 1) (subtopology X S) T,
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2273
                     relative_homology_group p X S,
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2274
                     relative_homology_group p X T],
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2275
                    [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
  2276
    (is "exact_seq ([?G1,?G2,?G3], [?h1,?h2])")
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2277
proof -
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2278
  have iTS: "id ` T \<subseteq> S" and [simp]: "S \<inter> T = T"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2279
    using assms by auto
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2280
  have "?h2 B \<in> kernel ?G2 ?G1 ?h1" for B
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2281
  proof -
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2282
    have "hom_boundary p X T B \<in> carrier (relative_homology_group (p - 1) (subtopology X T) {})"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2283
      by (metis (no_types) hom_boundary)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2284
    then have *: "hom_induced (p - 1) (subtopology X S) {} (subtopology X S) T id
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2285
         (hom_induced (p - 1) (subtopology X T) {} (subtopology X S) {} id
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2286
         (hom_boundary p X T B))
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2287
       = \<one>\<^bsub>?G1\<^esub>"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2288
      using homology_exactness_axiom_3 [of "p-1" "subtopology X S" T]
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2289
      by (auto simp: subtopology_subtopology kernel_def)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2290
    show ?thesis
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2291
      apply (simp add: kernel_def hom_induced_carrier hom_relboundary_def flip: *)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2292
      by (metis comp_def naturality_hom_induced [OF continuous_map_id iTS])
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2293
  qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2294
  moreover have "B \<in> ?h2 ` carrier ?G3" if "B \<in> kernel ?G2 ?G1 ?h1" for B
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2295
  proof -
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2296
    have Bcarr: "B \<in> carrier ?G2"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2297
      and Beq: "?h1 B = \<one>\<^bsub>?G1\<^esub>"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2298
      using that by (auto simp: kernel_def)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2299
    have "\<exists>A' \<in> carrier (homology_group (p - 1) (subtopology X T)). hom_induced (p - 1) (subtopology X T) {} (subtopology X S) {} id A' = A"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2300
      if "A \<in> carrier (homology_group (p - 1) (subtopology X S))"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2301
        "hom_induced (p - 1) (subtopology X S) {} (subtopology X S) T id A =
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2302
      \<one>\<^bsub>?G1\<^esub>" for A
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2303
      using homology_exactness_axiom_3 [of "p-1" "subtopology X S" T] that
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2304
      by (simp add: kernel_def subtopology_subtopology image_iff set_eq_iff) meson
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2305
    then obtain C where Ccarr: "C \<in> carrier (homology_group (p - 1) (subtopology X T))"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2306
      and Ceq: "hom_induced (p - 1) (subtopology X T) {} (subtopology X S) {} id C = hom_boundary p X S B"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2307
      using Beq by (simp add: hom_relboundary_def) (metis hom_boundary_carrier)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2308
    let ?hi_XT = "hom_induced (p - 1) (subtopology X T) {} X {} id"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2309
    have "?hi_XT
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2310
        = hom_induced (p - 1) (subtopology X S) {} X {} id
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2311
            \<circ> (hom_induced (p - 1) (subtopology X T) {} (subtopology X S) {} id)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2312
      by (metis assms comp_id continuous_map_id_subt hom_induced_compose_empty inf.absorb_iff2 subtopology_subtopology)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2313
    then have "?hi_XT C
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2314
        = hom_induced (p - 1) (subtopology X S) {} X {} id (hom_boundary p X S B)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2315
      by (simp add: Ceq)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2316
    also have eq: "\<dots> = \<one>\<^bsub>homology_group (p - 1) X\<^esub>"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2317
      using homology_exactness_axiom_2 [of p X S] Bcarr by (auto simp: kernel_def)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2318
    finally have "?hi_XT C = \<one>\<^bsub>homology_group (p - 1) X\<^esub>" .
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2319
    then obtain D where Dcarr: "D \<in> carrier ?G3" and Deq: "hom_boundary p X T D = C"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2320
      using homology_exactness_axiom_2 [of p X T] Ccarr
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2321
      by (auto simp: kernel_def image_iff set_eq_iff) meson
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2322
    interpret hb: group_hom "?G2" "homology_group (p-1) (subtopology X S)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2323
                           "hom_boundary p X S"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2324
      using hom_boundary_hom group_hom_axioms_def group_hom_def by fastforce
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2325
    let ?A = "B \<otimes>\<^bsub>?G2\<^esub> inv\<^bsub>?G2\<^esub> ?h2 D"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2326
    have "\<exists>A' \<in> carrier (homology_group p X). hom_induced p X {} X S id A' = A"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2327
      if "A \<in> carrier ?G2"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2328
         "hom_boundary p X S A = one (homology_group (p - 1) (subtopology X S))" for A
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2329
      using that homology_exactness_axiom_1 [of p X S]
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2330
      by (simp add: kernel_def subtopology_subtopology image_iff set_eq_iff) meson
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2331
    moreover
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2332
    have "?A \<in> carrier ?G2"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2333
      by (simp add: Bcarr abelian_relative_homology_group comm_groupE(1) hom_induced_carrier)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2334
    moreover have "hom_boundary p X S (?h2 D) = hom_boundary p X S B"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2335
      by (metis (mono_tags, lifting) Ceq Deq comp_eq_dest continuous_map_id iTS naturality_hom_induced)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2336
    then have "hom_boundary p X S ?A = one (homology_group (p - 1) (subtopology X S))"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2337
      by (simp add: hom_induced_carrier Bcarr)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2338
    ultimately obtain W where Wcarr: "W \<in> carrier (homology_group p X)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2339
      and Weq: "hom_induced p X {} X S id W = ?A"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2340
      by blast
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2341
    let ?W = "D \<otimes>\<^bsub>?G3\<^esub> hom_induced p X {} X T id W"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2342
    show ?thesis
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2343
    proof
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2344
      interpret comm_group "?G2"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2345
        by (rule abelian_relative_homology_group)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2346
      have "B = (?h2 \<circ> hom_induced p X {} X T id) W \<otimes>\<^bsub>?G2\<^esub> ?h2 D"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2347
        apply (simp add: hom_induced_compose [symmetric] assms)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2348
        by (metis Bcarr Weq hb.G.inv_solve_right hom_induced_carrier)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2349
      then have "B \<otimes>\<^bsub>?G2\<^esub> inv\<^bsub>?G2\<^esub> ?h2 D
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2350
          = ?h2 (hom_induced p X {} X T id W)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2351
        by (simp add: hb.G.m_assoc hom_induced_carrier)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2352
      then show "B = ?h2 ?W"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2353
        apply (simp add: Dcarr hom_induced_carrier hom_mult [OF hom_induced_hom])
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2354
        by (metis Bcarr hb.G.inv_solve_right hom_induced_carrier m_comm)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2355
      show "?W \<in> carrier ?G3"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2356
        by (simp add: Dcarr abelian_relative_homology_group comm_groupE(1) hom_induced_carrier)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2357
    qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2358
  qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2359
  ultimately show ?thesis
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2360
    by (auto simp: group_hom_def group_hom_axioms_def hom_induced_hom group_homomorphism_hom_relboundary)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2361
qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2362
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2363
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2364
proposition homology_exactness_triple_2:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2365
  assumes "T \<subseteq> S"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2366
  shows "exact_seq ([relative_homology_group(p - 1) X T,
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2367
                     relative_homology_group(p - 1) (subtopology X S) T,
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2368
                     relative_homology_group p X S],
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2369
                    [hom_induced (p - 1) (subtopology X S) T X T id, hom_relboundary p X S T])"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2370
    (is "exact_seq ([?G1,?G2,?G3], [?h1,?h2])")
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2371
proof -
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2372
  let ?H2 = "homology_group (p - 1) (subtopology X S)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2373
  have iTS: "id ` T \<subseteq> S" and [simp]: "S \<inter> T = T"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2374
    using assms by auto
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2375
  have "?h2 C \<in> kernel ?G2 ?G1 ?h1" for C
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2376
  proof -
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2377
    have "?h1 (?h2 C)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2378
       = (hom_induced (p - 1) X {} X T id \<circ> hom_induced (p - 1) (subtopology X S) {} X {} id \<circ> hom_boundary p X S) C"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2379
      unfolding hom_relboundary_def
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2380
      by (metis (no_types, lifting) comp_apply continuous_map_id continuous_map_id_subt empty_subsetI hom_induced_compose id_apply image_empty image_id order_refl)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2381
    also have "\<dots> = \<one>\<^bsub>?G1\<^esub>"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2382
    proof -
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2383
      have *: "hom_boundary p X S C \<in> carrier ?H2"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2384
        by (simp add: hom_boundary_carrier)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2385
      moreover have "hom_boundary p X S C \<in> hom_boundary p X S ` carrier ?G3"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2386
        using homology_exactness_axiom_2 [of p X S] *
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2387
        apply (simp add: kernel_def set_eq_iff)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2388
        by (metis group_relative_homology_group hom_boundary_default hom_one image_eqI)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2389
      ultimately
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2390
      have 1: "hom_induced (p - 1) (subtopology X S) {} X {} id (hom_boundary p X S C)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2391
             = \<one>\<^bsub>homology_group (p - 1) X\<^esub>"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2392
        using homology_exactness_axiom_2 [of p X S] by (simp add: kernel_def) blast
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2393
      show ?thesis
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2394
        by (simp add: 1 hom_one [OF hom_induced_hom])
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2395
    qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2396
    finally have "?h1 (?h2 C) = \<one>\<^bsub>?G1\<^esub>" .
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2397
    then show ?thesis
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2398
      by (simp add: kernel_def hom_relboundary_def hom_induced_carrier)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2399
  qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2400
  moreover have "x \<in> ?h2 ` carrier ?G3" if "x \<in> kernel ?G2 ?G1 ?h1" for x
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2401
  proof -
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2402
    let ?homX = "hom_induced (p - 1) (subtopology X S) {} X {} id"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2403
    let ?homXS = "hom_induced (p - 1) (subtopology X S) {} (subtopology X S) T id"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2404
    have "x \<in> carrier (relative_homology_group (p - 1) (subtopology X S) T)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2405
      using that by (simp add: kernel_def)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2406
    moreover
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2407
    have "hom_boundary (p-1) X T \<circ> hom_induced (p-1) (subtopology X S) T X T id = hom_boundary (p-1) (subtopology X S) T"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2408
      by (metis Int_lower2 \<open>S \<inter> T = T\<close> continuous_map_id_subt hom_relboundary_def hom_relboundary_empty id_apply image_id naturality_hom_induced subtopology_subtopology)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2409
    then have "hom_boundary (p - 1) (subtopology X S) T x = \<one>\<^bsub>homology_group (p - 2) (subtopology (subtopology X S) T)\<^esub>"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2410
      using naturality_hom_induced [of "subtopology X S" X id T T "p-1"] that
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2411
        hom_one [OF hom_boundary_hom group_relative_homology_group group_relative_homology_group, of "p-1" X T]
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2412
      apply (simp add: kernel_def subtopology_subtopology)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2413
      by (metis comp_apply)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2414
    ultimately
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2415
    obtain y where ycarr: "y \<in> carrier ?H2"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2416
               and yeq: "?homXS y = x"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2417
      using homology_exactness_axiom_1 [of "p-1" "subtopology X S" T]
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2418
      by (simp add: kernel_def image_def set_eq_iff) meson
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2419
    have "?homX y \<in> carrier (homology_group (p - 1) X)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2420
      by (simp add: hom_induced_carrier)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2421
    moreover
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2422
    have "(hom_induced (p - 1) X {} X T id \<circ> ?homX) y = \<one>\<^bsub>relative_homology_group (p - 1) X T\<^esub>"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2423
      apply (simp flip: hom_induced_compose)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2424
      using hom_induced_compose [of "subtopology X S" "subtopology X S" id "{}" T X id T "p-1"]
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2425
      apply simp
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2426
      by (metis (mono_tags, lifting) kernel_def mem_Collect_eq that yeq)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2427
    then have "hom_induced (p - 1) X {} X T id (?homX y) = \<one>\<^bsub>relative_homology_group (p - 1) X T\<^esub>"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2428
      by simp
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2429
    ultimately obtain z where zcarr: "z \<in> carrier (homology_group (p - 1) (subtopology X T))"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2430
               and zeq: "hom_induced (p - 1) (subtopology X T) {} X {} id z = ?homX y"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2431
      using homology_exactness_axiom_3 [of "p-1" X T]
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2432
      by (auto simp: kernel_def dest!: equalityD1 [of "Collect _"])
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2433
    have *: "\<And>t. \<lbrakk>t \<in> carrier ?H2;
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2434
                  hom_induced (p - 1) (subtopology X S) {} X {} id t = \<one>\<^bsub>homology_group (p - 1) X\<^esub>\<rbrakk>
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2435
                  \<Longrightarrow> t \<in> hom_boundary p X S ` carrier ?G3"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2436
      using homology_exactness_axiom_2 [of p X S]
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2437
      by (auto simp: kernel_def dest!: equalityD1 [of "Collect _"])
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2438
    interpret comm_group "?H2"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2439
      by (rule abelian_relative_homology_group)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2440
    interpret gh: group_hom ?H2 "homology_group (p - 1) X" "hom_induced (p-1) (subtopology X S) {} X {} id"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2441
      by (meson 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
  2442
    let ?yz = "y \<otimes>\<^bsub>?H2\<^esub> inv\<^bsub>?H2\<^esub> hom_induced (p - 1) (subtopology X T) {} (subtopology X S) {} id z"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2443
    have yzcarr: "?yz \<in> carrier ?H2"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2444
      by (simp add: hom_induced_carrier ycarr)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2445
    have yzeq: "hom_induced (p - 1) (subtopology X S) {} X {} id ?yz = \<one>\<^bsub>homology_group (p - 1) X\<^esub>"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2446
      apply (simp add: hom_induced_carrier ycarr gh.inv_solve_right')
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2447
      by (metis assms continuous_map_id_subt hom_induced_compose_empty inf.absorb_iff2 o_apply o_id subtopology_subtopology zeq)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2448
    obtain w where wcarr: "w \<in> carrier ?G3" and weq: "hom_boundary p X S w = ?yz"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2449
      using * [OF yzcarr yzeq] by blast
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2450
    interpret gh2: group_hom ?H2 ?G2 ?homXS
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2451
      by (simp add: group_hom_axioms_def group_hom_def hom_induced_hom)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2452
    have "?homXS (hom_induced (p - 1) (subtopology X T) {} (subtopology X S) {} id z)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2453
        = \<one>\<^bsub>relative_homology_group (p - 1) (subtopology X S) T\<^esub>"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2454
      using homology_exactness_axiom_3 [of "p-1" "subtopology X S" T] zcarr
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2455
      by (auto simp: kernel_def subtopology_subtopology)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2456
    then show ?thesis
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2457
      apply (rule_tac x=w in image_eqI)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2458
       apply (simp_all add: hom_relboundary_def weq wcarr)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2459
      by (metis gh2.hom_inv gh2.hom_mult gh2.inv_one gh2.r_one group.inv_closed group_l_invI hom_induced_carrier l_inv_ex ycarr yeq)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2460
  qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2461
  ultimately show ?thesis
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2462
    by (auto simp: group_hom_axioms_def group_hom_def group_homomorphism_hom_relboundary hom_induced_hom)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2463
qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2464
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2465
proposition homology_exactness_triple_3:
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2466
  assumes "T \<subseteq> S"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2467
  shows "exact_seq ([relative_homology_group p X S,
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2468
                     relative_homology_group p X T,
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2469
                     relative_homology_group p (subtopology X S) T],
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2470
                    [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
  2471
    (is "exact_seq ([?G1,?G2,?G3], [?h1,?h2])")
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2472
proof -
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2473
  have iTS: "id ` T \<subseteq> S" and [simp]: "S \<inter> T = T"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2474
    using assms by auto
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2475
  have 1: "?h2 x \<in> kernel ?G2 ?G1 ?h1" for x
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2476
  proof -
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2477
    have "?h1 (?h2 x)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2478
        = (hom_induced p (subtopology X S) S X S id \<circ>
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2479
           hom_induced p (subtopology X S) T (subtopology X S) S id) x"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2480
      by (metis comp_eq_dest_lhs continuous_map_id continuous_map_id_subt hom_induced_compose iTS id_apply image_subsetI)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2481
    also have "\<dots> = \<one>\<^bsub>relative_homology_group p X S\<^esub>"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2482
    proof -
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2483
      have "trivial_group (relative_homology_group p (subtopology X S) S)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2484
        using trivial_relative_homology_group_topspace [of p "subtopology X S"]
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2485
        by (metis inf_right_idem relative_homology_group_restrict topspace_subtopology)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2486
      then have 1: "hom_induced p (subtopology X S) T (subtopology X S) S id x
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2487
         = \<one>\<^bsub>relative_homology_group p (subtopology X S) S\<^esub>"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2488
        using hom_induced_carrier by (fastforce simp add: trivial_group_def)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2489
      show ?thesis
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2490
        by (simp add: 1 hom_one [OF hom_induced_hom])
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2491
    qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2492
    finally have "?h1 (?h2 x) = \<one>\<^bsub>relative_homology_group p X S\<^esub>" .
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2493
    then show ?thesis
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2494
      by (simp add: hom_induced_carrier kernel_def)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2495
  qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2496
  moreover have "x \<in> ?h2 ` carrier ?G3" if x: "x \<in> kernel ?G2 ?G1 ?h1" for x
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2497
  proof -
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2498
    have xcarr: "x \<in> carrier ?G2"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2499
      using that by (auto simp: kernel_def)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2500
    interpret G2: comm_group "?G2"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2501
      by (rule abelian_relative_homology_group)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2502
    let ?b = "hom_boundary p X T x"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2503
    have bcarr: "?b \<in> carrier(homology_group(p - 1) (subtopology X T))"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2504
      by (simp add: hom_boundary_carrier)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2505
    have "hom_boundary p X S (hom_induced p X T X S id x)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2506
        = hom_induced (p - 1) (subtopology X T) {} (subtopology X S) {} id
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2507
            (hom_boundary p X T x)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2508
      using naturality_hom_induced [of X X id T S p]  by (simp add: assms o_def) meson
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2509
    with bcarr have "hom_boundary p X T x \<in> hom_boundary p (subtopology X S) T ` carrier ?G3"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2510
      using homology_exactness_axiom_2 [of p "subtopology X S" T] x
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2511
      apply (simp add: kernel_def set_eq_iff subtopology_subtopology)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2512
      by (metis group_relative_homology_group hom_boundary_hom hom_one set_eq_iff)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2513
    then obtain u where ucarr: "u \<in> carrier ?G3"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2514
            and ueq: "hom_boundary p X T x = hom_boundary p (subtopology X S) T u"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2515
      by (auto simp: kernel_def set_eq_iff subtopology_subtopology hom_boundary_carrier)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2516
    define y where "y = x \<otimes>\<^bsub>?G2\<^esub> inv\<^bsub>?G2\<^esub> ?h2 u"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2517
    have ycarr: "y \<in> carrier ?G2"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2518
      using x by (simp add: y_def kernel_def hom_induced_carrier)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2519
    interpret hb: group_hom ?G2 "homology_group (p-1) (subtopology X T)" "hom_boundary p X T"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2520
      by (simp add: group_hom_axioms_def group_hom_def hom_boundary_hom)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2521
    have yyy: "hom_boundary p X T y = \<one>\<^bsub>homology_group (p - 1) (subtopology X T)\<^esub>"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2522
      apply (simp add: y_def bcarr xcarr hom_induced_carrier hom_boundary_carrier hb.inv_solve_right')
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2523
      using naturality_hom_induced [of concl: p X T "subtopology X S" T id]
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2524
      apply (simp add: o_def fun_eq_iff subtopology_subtopology)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2525
      by (metis hom_boundary_carrier hom_induced_id ueq)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2526
    then have "y \<in> hom_induced p X {} X T id ` carrier (homology_group p X)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2527
      using homology_exactness_axiom_1 [of p X T] x ycarr by (auto simp: kernel_def)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2528
    then obtain z where zcarr: "z \<in> carrier (homology_group p X)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2529
                    and zeq: "hom_induced p X {} X T id z = y"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2530
      by auto
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2531
    interpret gh1: group_hom ?G2 ?G1 ?h1
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2532
      by (meson 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
  2533
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2534
    have "hom_induced p X {} X S id z = (hom_induced p X T X S id \<circ> hom_induced p X {} X T id) z"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2535
      by (simp add: assms flip: hom_induced_compose)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2536
    also have "\<dots> = \<one>\<^bsub>relative_homology_group p X S\<^esub>"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2537
      using x 1 by (simp add: kernel_def zeq y_def)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2538
    finally have "hom_induced p X {} X S id z = \<one>\<^bsub>relative_homology_group p X S\<^esub>" .
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2539
    then have "z \<in> hom_induced p (subtopology X S) {} X {} id `
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2540
                   carrier (homology_group p (subtopology X S))"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2541
      using homology_exactness_axiom_3 [of p X S] zcarr by (auto simp: kernel_def)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2542
    then obtain w where wcarr: "w \<in> carrier (homology_group p (subtopology X S))"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2543
                and weq: "hom_induced p (subtopology X S) {} X {} id w = z"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2544
      by blast
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2545
    let ?u = "hom_induced p (subtopology X S) {} (subtopology X S) T id w \<otimes>\<^bsub>?G3\<^esub> u"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2546
    show ?thesis
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2547
    proof
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2548
      have *: "x = z \<otimes>\<^bsub>?G2\<^esub> u"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2549
          if "z = x \<otimes>\<^bsub>?G2\<^esub> inv\<^bsub>?G2\<^esub> u" "z \<in> carrier ?G2" "u \<in> carrier ?G2" for z u
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2550
        using that by (simp add: group.inv_solve_right xcarr)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2551
      have eq: "?h2 \<circ> hom_induced p (subtopology X S) {} (subtopology X S) T id
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2552
            = hom_induced p X {} X T id \<circ> hom_induced p (subtopology X S) {} X {} id"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2553
        by (simp flip: hom_induced_compose)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2554
      show "x = hom_induced p (subtopology X S) T X T id ?u"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2555
        apply (simp add: hom_mult [OF hom_induced_hom] hom_induced_carrier ucarr)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2556
        apply (rule *)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2557
        using eq apply (simp_all add: fun_eq_iff hom_induced_carrier flip: y_def zeq weq)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2558
        done
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2559
      show "?u \<in> carrier (relative_homology_group p (subtopology X S) T)"
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2560
        by (simp add: abelian_relative_homology_group comm_groupE(1) hom_induced_carrier ucarr)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2561
    qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2562
  qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2563
  ultimately show ?thesis
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2564
    by (auto simp: group_hom_axioms_def group_hom_def hom_induced_hom)
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2565
qed
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2566
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2567
end
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2568
e8f4ce87012b More homology material
paulson <lp15@cam.ac.uk>
parents:
diff changeset
  2569