|
| 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