Skip to content

Commit f339c7d

Browse files
committed
feat: port AlgebraicTopology.DoldKan.HomotopyEquivalence (#3594)
1 parent 941d30b commit f339c7d

File tree

2 files changed

+101
-0
lines changed

2 files changed

+101
-0
lines changed

Mathlib.lean

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -308,6 +308,7 @@ import Mathlib.AlgebraicTopology.DoldKan.FunctorGamma
308308
import Mathlib.AlgebraicTopology.DoldKan.FunctorN
309309
import Mathlib.AlgebraicTopology.DoldKan.GammaCompN
310310
import Mathlib.AlgebraicTopology.DoldKan.Homotopies
311+
import Mathlib.AlgebraicTopology.DoldKan.HomotopyEquivalence
311312
import Mathlib.AlgebraicTopology.DoldKan.NCompGamma
312313
import Mathlib.AlgebraicTopology.DoldKan.NReflectsIso
313314
import Mathlib.AlgebraicTopology.DoldKan.Normalized
Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
1+
/-
2+
Copyright (c) 2022 Joël Riou. All rights reserved.
3+
Released under Apache 2.0 license as described in the file LICENSE.
4+
Authors: Joël Riou
5+
6+
! This file was ported from Lean 3 source module algebraic_topology.dold_kan.homotopy_equivalence
7+
! leanprover-community/mathlib commit f951e201d416fb50cc7826171d80aa510ec20747
8+
! Please do not edit these lines, except to modify the commit id
9+
! if you have ported upstream changes.
10+
-/
11+
import Mathlib.AlgebraicTopology.DoldKan.Normalized
12+
13+
/-!
14+
15+
# The normalized Moore complex and the alternating face map complex are homotopy equivalent
16+
17+
In this file, when the category `A` is abelian, we obtain the homotopy equivalence
18+
`homotopyEquivNormalizedMooreComplexAlternatingFaceMapComplex` between the
19+
normalized Moore complex and the alternating face map complex of a simplicial object in `A`.
20+
21+
-/
22+
23+
24+
open CategoryTheory CategoryTheory.Category CategoryTheory.Limits
25+
CategoryTheory.Preadditive Simplicial DoldKan
26+
27+
noncomputable section
28+
29+
namespace AlgebraicTopology
30+
31+
namespace DoldKan
32+
33+
variable {C : Type _} [Category C] [Preadditive C] (X : SimplicialObject C)
34+
35+
/-- Inductive construction of homotopies from `P q` to `𝟙 _` -/
36+
noncomputable def homotopyPToId : ∀ q : ℕ, Homotopy (P q : K[X] ⟶ _) (𝟙 _)
37+
| 0 => Homotopy.refl _
38+
| q + 1 => by
39+
refine'
40+
Homotopy.trans (Homotopy.ofEq _)
41+
(Homotopy.trans
42+
(Homotopy.add (homotopyPToId q) (Homotopy.compLeft (homotopyHσToZero q) (P q)))
43+
(Homotopy.ofEq _))
44+
· simp only [P_succ, comp_add, comp_id]
45+
· simp only [add_zero, comp_zero]
46+
set_option linter.uppercaseLean3 false in
47+
#align algebraic_topology.dold_kan.homotopy_P_to_id AlgebraicTopology.DoldKan.homotopyPToId
48+
49+
/-- The complement projection `Q q` to `P q` is homotopic to zero. -/
50+
def homotopyQToZero (q : ℕ) : Homotopy (Q q : K[X] ⟶ _) 0 :=
51+
Homotopy.equivSubZero.toFun (homotopyPToId X q).symm
52+
set_option linter.uppercaseLean3 false in
53+
#align algebraic_topology.dold_kan.homotopy_Q_to_zero AlgebraicTopology.DoldKan.homotopyQToZero
54+
55+
theorem homotopyPToId_eventually_constant {q n : ℕ} (hqn : n < q) :
56+
((homotopyPToId X (q + 1)).hom n (n + 1) : X _[n] ⟶ X _[n + 1]) =
57+
(homotopyPToId X q).hom n (n + 1) := by
58+
simp only [homotopyHσToZero, AlternatingFaceMapComplex.obj_X, Nat.add_eq, Homotopy.trans_hom,
59+
Homotopy.ofEq_hom, Pi.zero_apply, Homotopy.add_hom, Homotopy.compLeft_hom, add_zero,
60+
Homotopy.nullHomotopy'_hom, ComplexShape.down_Rel, hσ'_eq_zero hqn (c_mk (n + 1) n rfl),
61+
dite_eq_ite, ite_self, comp_zero, zero_add, homotopyPToId]
62+
rfl
63+
set_option linter.uppercaseLean3 false in
64+
#align algebraic_topology.dold_kan.homotopy_P_to_id_eventually_constant AlgebraicTopology.DoldKan.homotopyPToId_eventually_constant
65+
66+
/-- Construction of the homotopy from `PInfty` to the identity using eventually
67+
(termwise) constant homotopies from `P q` to the identity for all `q` -/
68+
@[simps]
69+
def homotopyPInftyToId : Homotopy (PInfty : K[X] ⟶ _) (𝟙 _) where
70+
hom i j := (homotopyPToId X (j + 1)).hom i j
71+
zero i j hij := Homotopy.zero _ i j hij
72+
comm n := by
73+
rcases n with _|n
74+
. simpa only [Homotopy.dNext_zero_chainComplex, Homotopy.prevD_chainComplex,
75+
PInfty_f, Nat.zero_eq, P_f_0_eq, zero_add] using (homotopyPToId X 2).comm 0
76+
· simpa only [Homotopy.dNext_succ_chainComplex, Homotopy.prevD_chainComplex,
77+
HomologicalComplex.id_f, PInfty_f, ← P_is_eventually_constant (rfl.le : n + 1 ≤ n + 1),
78+
homotopyPToId_eventually_constant X (lt_add_one (n + 1))] using
79+
(homotopyPToId X (n + 2)).comm (n + 1)
80+
set_option linter.uppercaseLean3 false in
81+
#align algebraic_topology.dold_kan.homotopy_P_infty_to_id AlgebraicTopology.DoldKan.homotopyPInftyToId
82+
83+
/-- The inclusion of the Moore complex in the alternating face map complex
84+
is an homotopy equivalence -/
85+
@[simps]
86+
def homotopyEquivNormalizedMooreComplexAlternatingFaceMapComplex {A : Type _} [Category A]
87+
[Abelian A] {Y : SimplicialObject A} :
88+
HomotopyEquiv ((normalizedMooreComplex A).obj Y) ((alternatingFaceMapComplex A).obj Y) where
89+
hom := inclusionOfMooreComplexMap Y
90+
inv := PInftyToNormalizedMooreComplex Y
91+
homotopyHomInvId := Homotopy.ofEq (splitMonoInclusionOfMooreComplexMap Y).id
92+
homotopyInvHomId := Homotopy.trans
93+
(Homotopy.ofEq (PInftyToNormalizedMooreComplex_comp_inclusionOfMooreComplexMap Y))
94+
(homotopyPInftyToId Y)
95+
set_option linter.uppercaseLean3 false in
96+
#align algebraic_topology.dold_kan.homotopy_equiv_normalized_Moore_complex_alternating_face_map_complex AlgebraicTopology.DoldKan.homotopyEquivNormalizedMooreComplexAlternatingFaceMapComplex
97+
98+
end DoldKan
99+
100+
end AlgebraicTopology

0 commit comments

Comments
 (0)