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