Skip to content

Commit f9b0447

Browse files
Merge master into nightly-testing
2 parents 7f0c4c8 + afb00b0 commit f9b0447

File tree

5 files changed

+142
-131
lines changed

5 files changed

+142
-131
lines changed

Mathlib/AlgebraicTopology/DoldKan/EquivalencePseudoabelian.lean

+31-20
Original file line numberDiff line numberDiff line change
@@ -66,24 +66,33 @@ def Γ [IsIdempotentComplete C] [HasFiniteCoproducts C] : ChainComplex C ℕ ⥤
6666

6767
variable [IsIdempotentComplete C] [HasFiniteCoproducts C]
6868

69-
theorem hN₁ :
70-
(toKaroubiEquivalence (SimplicialObject C)).functor ⋙ Preadditive.DoldKan.equivalence.functor =
71-
N₁ :=
72-
Functor.congr_obj (functorExtension₁_comp_whiskeringLeft_toKaroubi _ _) N₁
73-
set_option linter.uppercaseLean3 false in
74-
#align category_theory.idempotents.dold_kan.hN₁ CategoryTheory.Idempotents.DoldKan.hN₁
75-
76-
theorem hΓ₀ :
77-
(toKaroubiEquivalence (ChainComplex C ℕ)).functor ⋙ Preadditive.DoldKan.equivalence.inverse =
69+
/-- A reformulation of the isomorphism `toKaroubi (SimplicialObject C) ⋙ N₂ ≅ N₁` -/
70+
def isoN₁ :
71+
(toKaroubiEquivalence (SimplicialObject C)).functor ⋙
72+
Preadditive.DoldKan.equivalence.functor ≅ N₁ := toKaroubiCompN₂IsoN₁
73+
74+
@[simp]
75+
lemma isoN₁_hom_app_f (X : SimplicialObject C) :
76+
(isoN₁.hom.app X).f = PInfty := rfl
77+
78+
/-- A reformulation of the canonical isomorphism
79+
`toKaroubi (ChainComplex C ℕ) ⋙ Γ₂ ≅ Γ ⋙ toKaroubi (SimplicialObject C)`. -/
80+
def isoΓ₀ :
81+
(toKaroubiEquivalence (ChainComplex C ℕ)).functor ⋙ Preadditive.DoldKan.equivalence.inverse ≅
7882
Γ ⋙ (toKaroubiEquivalence _).functor :=
79-
Functor.congr_obj (functorExtension₂_comp_whiskeringLeft_toKaroubi _ _) Γ₀
80-
#align category_theory.idempotents.dold_kan.hΓ₀ CategoryTheory.Idempotents.DoldKan.hΓ₀
83+
(functorExtension₂CompWhiskeringLeftToKaroubiIso _ _).app Γ₀
84+
85+
@[simp]
86+
lemma N₂_map_isoΓ₀_hom_app_f (X : ChainComplex C ℕ) :
87+
(N₂.map (isoΓ₀.hom.app X)).f = PInfty := by
88+
ext
89+
apply comp_id
8190

8291
/-- The Dold-Kan equivalence for pseudoabelian categories given
8392
by the functors `N` and `Γ`. It is obtained by applying the results in
8493
`Compatibility.lean` to the equivalence `Preadditive.DoldKan.Equivalence`. -/
8594
def equivalence : SimplicialObject C ≌ ChainComplex C ℕ :=
86-
Compatibility.equivalence (eqToIso hN₁) (eqToIso hΓ₀)
95+
Compatibility.equivalence isoN₁ isoΓ₀
8796
#align category_theory.idempotents.dold_kan.equivalence CategoryTheory.Idempotents.DoldKan.equivalence
8897

8998
theorem equivalence_functor : (equivalence : SimplicialObject C ≌ _).functor = N :=
@@ -98,12 +107,11 @@ theorem equivalence_inverse : (equivalence : SimplicialObject C ≌ _).inverse =
98107
for the construction of our counit isomorphism `η` -/
99108
theorem :
100109
Compatibility.τ₀ =
101-
Compatibility.τ₁ (eqToIso hN₁) (eqToIso hΓ₀)
110+
Compatibility.τ₁ isoN₁ isoΓ₀
102111
(N₁Γ₀ : Γ ⋙ N₁ ≅ (toKaroubiEquivalence (ChainComplex C ℕ)).functor) := by
103112
ext K : 3
104-
simp only [Compatibility.τ₀_hom_app, Compatibility.τ₁_hom_app, eqToIso.hom]
105-
refine' (N₂Γ₂_compatible_with_N₁Γ₀ K).trans _
106-
simp only [N₂Γ₂ToKaroubiIso_hom, eqToHom_map, eqToHom_app, eqToHom_trans_assoc]
113+
simp only [Compatibility.τ₀_hom_app, Compatibility.τ₁_hom_app]
114+
refine' (N₂Γ₂_compatible_with_N₁Γ₀ K).trans (by simp )
107115
#align category_theory.idempotents.dold_kan.hη CategoryTheory.Idempotents.DoldKan.hη
108116

109117
/-- The counit isomorphism induced by `N₁Γ₀` -/
@@ -119,23 +127,26 @@ theorem equivalence_counitIso :
119127
#align category_theory.idempotents.dold_kan.equivalence_counit_iso CategoryTheory.Idempotents.DoldKan.equivalence_counitIso
120128

121129
theorem :
122-
Compatibility.υ (eqToIso hN₁) =
130+
Compatibility.υ (isoN₁) =
123131
(Γ₂N₁ : (toKaroubiEquivalence _).functor ≅
124132
(N₁ : SimplicialObject C ⥤ _) ⋙ Preadditive.DoldKan.equivalence.inverse) := by
133+
dsimp only [isoN₁]
125134
ext1
126135
rw [← cancel_epi Γ₂N₁.inv, Iso.inv_hom_id]
127136
ext X : 2
128137
rw [NatTrans.comp_app]
129138
erw [compatibility_Γ₂N₁_Γ₂N₂_natTrans X]
130139
rw [Compatibility.υ_hom_app, Preadditive.DoldKan.equivalence_unitIso, Iso.app_inv, assoc]
131140
erw [← NatTrans.comp_app_assoc, IsIso.hom_inv_id]
132-
rw [NatTrans.id_app, id_comp, NatTrans.id_app, eqToIso.hom, eqToHom_app, eqToHom_map]
133-
rw [compatibility_Γ₂N₁_Γ₂N₂_inv_app, eqToHom_trans, eqToHom_refl]
141+
rw [NatTrans.id_app, id_comp, NatTrans.id_app, Γ₂N₂ToKaroubiIso_inv_app]
142+
dsimp only [Preadditive.DoldKan.equivalence_inverse, Preadditive.DoldKan.Γ]
143+
rw [← Γ₂.map_comp, Iso.inv_hom_id_app, Γ₂.map_id]
144+
rfl
134145
#align category_theory.idempotents.dold_kan.hε CategoryTheory.Idempotents.DoldKan.hε
135146

136147
/-- The unit isomorphism induced by `Γ₂N₁`. -/
137148
def ε : 𝟭 (SimplicialObject C) ≅ N ⋙ Γ :=
138-
Compatibility.equivalenceUnitIso (eqToIso hΓ₀) Γ₂N₁
149+
Compatibility.equivalenceUnitIso isoΓ₀ Γ₂N₁
139150
#align category_theory.idempotents.dold_kan.ε CategoryTheory.Idempotents.DoldKan.ε
140151

141152
theorem equivalence_unitIso :

Mathlib/AlgebraicTopology/DoldKan/FunctorN.lean

+11-3
Original file line numberDiff line numberDiff line change
@@ -63,9 +63,17 @@ def N₂ : Karoubi (SimplicialObject C) ⥤ Karoubi (ChainComplex C ℕ) :=
6363
set_option linter.uppercaseLean3 false in
6464
#align algebraic_topology.dold_kan.N₂ AlgebraicTopology.DoldKan.N₂
6565

66-
-- porting note: added to ease the port of `AlgebraicTopology.DoldKan.NCompGamma`
67-
lemma compatibility_N₁_N₂ : toKaroubi (SimplicialObject C) ⋙ N₂ = N₁ :=
68-
Functor.congr_obj (functorExtension₁_comp_whiskeringLeft_toKaroubi _ _) N₁
66+
/-- The canonical isomorphism `toKaroubi (SimplicialObject C) ⋙ N₂ ≅ N₁`. -/
67+
def toKaroubiCompN₂IsoN₁ : toKaroubi (SimplicialObject C) ⋙ N₂ ≅ N₁ :=
68+
(functorExtension₁CompWhiskeringLeftToKaroubiIso _ _).app N₁
69+
70+
@[simp]
71+
lemma toKaroubiCompN₂IsoN₁_hom_app (X : SimplicialObject C) :
72+
(toKaroubiCompN₂IsoN₁.hom.app X).f = PInfty := rfl
73+
74+
@[simp]
75+
lemma toKaroubiCompN₂IsoN₁_inv_app (X : SimplicialObject C) :
76+
(toKaroubiCompN₂IsoN₁.inv.app X).f = PInfty := rfl
6977

7078
end DoldKan
7179

Mathlib/AlgebraicTopology/DoldKan/GammaCompN.lean

+43-22
Original file line numberDiff line numberDiff line change
@@ -119,24 +119,46 @@ set_option linter.uppercaseLean3 false in
119119
-- Porting note: added to speed up elaboration
120120
attribute [irreducible] N₁Γ₀
121121

122-
theorem N₂Γ₂_toKaroubi : toKaroubi (ChainComplex C ℕ) ⋙ Γ₂ ⋙ N₂ = Γ₀ ⋙ N₁ := by
123-
have h := Functor.congr_obj (functorExtension₂_comp_whiskeringLeft_toKaroubi
124-
(ChainComplex C ℕ) (SimplicialObject C)) Γ₀
125-
have h' := Functor.congr_obj (functorExtension₁_comp_whiskeringLeft_toKaroubi
126-
(SimplicialObject C) (ChainComplex C ℕ)) N₁
127-
dsimp [N₂, Γ₂, functorExtension₁] at h h' ⊢
128-
rw [← Functor.assoc, h, Functor.assoc, h']
129-
set_option linter.uppercaseLean3 false in
130-
#align algebraic_topology.dold_kan.N₂Γ₂_to_karoubi AlgebraicTopology.DoldKan.N₂Γ₂_toKaroubi
131-
132122
/-- Compatibility isomorphism between `toKaroubi _ ⋙ Γ₂ ⋙ N₂` and `Γ₀ ⋙ N₁` which
133123
are functors `ChainComplex C ℕ ⥤ Karoubi (ChainComplex C ℕ)`. -/
134-
@[simps!]
135124
def N₂Γ₂ToKaroubiIso : toKaroubi (ChainComplex C ℕ) ⋙ Γ₂ ⋙ N₂ ≅ Γ₀ ⋙ N₁ :=
136-
eqToIso N₂Γ₂_toKaroubi
125+
calc
126+
toKaroubi (ChainComplex C ℕ) ⋙ Γ₂ ⋙ N₂ ≅
127+
toKaroubi (ChainComplex C ℕ) ⋙ (Γ₂ ⋙ N₂) := (Functor.associator _ _ _).symm
128+
_ ≅ (Γ₀ ⋙ toKaroubi (SimplicialObject C)) ⋙ N₂ :=
129+
isoWhiskerRight ((functorExtension₂CompWhiskeringLeftToKaroubiIso _ _).app Γ₀) N₂
130+
_ ≅ Γ₀ ⋙ toKaroubi (SimplicialObject C) ⋙ N₂ := Functor.associator _ _ _
131+
_ ≅ Γ₀ ⋙ N₁ :=
132+
isoWhiskerLeft Γ₀ ((functorExtension₁CompWhiskeringLeftToKaroubiIso _ _).app N₁)
137133
set_option linter.uppercaseLean3 false in
138134
#align algebraic_topology.dold_kan.N₂Γ₂_to_karoubi_iso AlgebraicTopology.DoldKan.N₂Γ₂ToKaroubiIso
139135

136+
@[simp]
137+
lemma N₂Γ₂ToKaroubiIso_hom_app (X : ChainComplex C ℕ) :
138+
(N₂Γ₂ToKaroubiIso.hom.app X).f = PInfty := by
139+
ext n
140+
dsimp [N₂Γ₂ToKaroubiIso]
141+
simp only [comp_id, assoc, PInfty_f_idem]
142+
conv_rhs =>
143+
rw [← PInfty_f_idem]
144+
congr 1
145+
apply (Γ₀.splitting X).hom_ext'
146+
intro A
147+
rw [Splitting.ι_desc_assoc, assoc]
148+
apply id_comp
149+
150+
@[simp]
151+
lemma N₂Γ₂ToKaroubiIso_inv_app (X : ChainComplex C ℕ) :
152+
(N₂Γ₂ToKaroubiIso.inv.app X).f = PInfty := by
153+
ext n
154+
dsimp [N₂Γ₂ToKaroubiIso]
155+
simp only [comp_id, PInfty_f_idem_assoc, AlternatingFaceMapComplex.obj_X, Γ₀_obj_obj]
156+
convert comp_id _
157+
apply (Γ₀.splitting X).hom_ext'
158+
intro A
159+
rw [Splitting.ι_desc]
160+
erw [comp_id, id_comp]
161+
140162
-- Porting note: added to speed up elaboration
141163
attribute [irreducible] N₂Γ₂ToKaroubiIso
142164

@@ -151,16 +173,15 @@ set_option linter.uppercaseLean3 false in
151173
theorem N₂Γ₂_inv_app_f_f (X : Karoubi (ChainComplex C ℕ)) (n : ℕ) :
152174
(N₂Γ₂.inv.app X).f.f n =
153175
X.p.f n ≫ (Γ₀.splitting X.X).ιSummand (Splitting.IndexSet.id (op [n])) := by
154-
simp only [N₂Γ₂, Functor.preimageIso, Iso.trans,
155-
whiskeringLeft_obj_preimage_app, N₂Γ₂ToKaroubiIso_inv, assoc,
156-
Functor.id_map, NatTrans.comp_app, eqToHom_app, Karoubi.comp_f,
157-
Karoubi.eqToHom_f, Karoubi.decompId_p_f, HomologicalComplex.comp_f,
158-
N₁Γ₀_inv_app_f_f, Splitting.toKaroubiNondegComplexIsoN₁_hom_f_f,
159-
Functor.comp_map, Functor.comp_obj, Karoubi.decompId_i_f,
160-
eqToHom_refl, comp_id, N₂_map_f_f, Γ₂_map_f_app, N₁_obj_p,
161-
PInfty_on_Γ₀_splitting_summand_eq_self_assoc, toKaroubi_obj_X,
162-
Splitting.ι_desc, Splitting.IndexSet.id_fst, SimplexCategory.len_mk, unop_op,
163-
Karoubi.HomologicalComplex.p_idem_assoc]
176+
dsimp [N₂Γ₂]
177+
simp only [whiskeringLeft_obj_preimage_app, NatTrans.comp_app, Functor.comp_map,
178+
Karoubi.comp_f, N₂Γ₂ToKaroubiIso_inv_app, HomologicalComplex.comp_f,
179+
N₁Γ₀_inv_app_f_f, toKaroubi_obj_X, Splitting.toKaroubiNondegComplexIsoN₁_hom_f_f,
180+
Γ₀.obj_obj, PInfty_on_Γ₀_splitting_summand_eq_self, N₂_map_f_f,
181+
Γ₂_map_f_app, unop_op, Karoubi.decompId_p_f, PInfty_f_idem_assoc,
182+
PInfty_on_Γ₀_splitting_summand_eq_self_assoc, Splitting.IndexSet.id_fst, SimplexCategory.len_mk,
183+
Splitting.ι_desc]
184+
apply Karoubi.HomologicalComplex.p_idem_assoc
164185
set_option linter.uppercaseLean3 false in
165186
#align algebraic_topology.dold_kan.N₂Γ₂_inv_app_f_f AlgebraicTopology.DoldKan.N₂Γ₂_inv_app_f_f
166187

Mathlib/AlgebraicTopology/DoldKan/NCompGamma.lean

+29-31
Original file line numberDiff line numberDiff line change
@@ -172,43 +172,39 @@ end Γ₂N₁
172172

173173
-- porting note: removed @[simps] attribute because it was creating timeouts
174174
/-- The compatibility isomorphism relating `N₂ ⋙ Γ₂` and `N₁ ⋙ Γ₂`. -/
175-
def compatibility_Γ₂N₁_Γ₂N₂ : toKaroubi (SimplicialObject C) ⋙ N₂ ⋙ Γ₂ ≅ N₁ ⋙ Γ₂ :=
176-
eqToIso (by rw [← Functor.assoc, compatibility_N₁_N₂])
175+
def Γ₂N₂ToKaroubiIso : toKaroubi (SimplicialObject C) ⋙ N₂ ⋙ Γ₂ ≅ N₁ ⋙ Γ₂ :=
176+
(Functor.associator _ _ _).symm ≪≫ isoWhiskerRight toKaroubiCompN₂IsoN₁ Γ₂
177177
set_option linter.uppercaseLean3 false in
178-
#align algebraic_topology.dold_kan.compatibility_Γ₂N₁_Γ₂N₂ AlgebraicTopology.DoldKan.compatibility_Γ₂N₁_Γ₂N₂
178+
#align algebraic_topology.dold_kan.compatibility_Γ₂N₁_Γ₂N₂ AlgebraicTopology.DoldKan.Γ₂N₂ToKaroubiIso
179179

180-
-- porting note: no @[simp] attribute because this would trigger a timeout
181-
lemma compatibility_Γ₂N₁_Γ₂N₂_hom_app (X : SimplicialObject C) :
182-
compatibility_Γ₂N₁_Γ₂N₂.hom.app X =
183-
eqToHom (by rw [← Functor.assoc, compatibility_N₁_N₂]) := by
184-
dsimp only [compatibility_Γ₂N₁_Γ₂N₂, CategoryTheory.eqToIso]
185-
apply eqToHom_app
180+
@[simp]
181+
lemma Γ₂N₂ToKaroubiIso_hom_app (X : SimplicialObject C) :
182+
Γ₂N₂ToKaroubiIso.hom.app X = Γ₂.map (toKaroubiCompN₂IsoN₁.hom.app X) := by
183+
simp [Γ₂N₂ToKaroubiIso]
186184

187-
-- Porting note: added to speed up elaboration
188-
attribute [irreducible] compatibility_Γ₂N₁_Γ₂N₂
185+
@[simp]
186+
lemma Γ₂N₂ToKaroubiIso_inv_app (X : SimplicialObject C) :
187+
Γ₂N₂ToKaroubiIso.inv.app X = Γ₂.map (toKaroubiCompN₂IsoN₁.inv.app X) := by
188+
simp [Γ₂N₂ToKaroubiIso]
189189

190-
lemma compatibility_Γ₂N₁_Γ₂N₂_inv_app (X : SimplicialObject C) :
191-
compatibility_Γ₂N₁_Γ₂N₂.inv.app X =
192-
eqToHom (by rw [← Functor.assoc, compatibility_N₁_N₂]) := by
193-
rw [← cancel_mono (compatibility_Γ₂N₁_Γ₂N₂.hom.app X), Iso.inv_hom_id_app,
194-
compatibility_Γ₂N₁_Γ₂N₂_hom_app, eqToHom_trans, eqToHom_refl]
190+
-- Porting note: added to speed up elaboration
191+
attribute [irreducible] Γ₂N₂ToKaroubiIso
195192

196193
namespace Γ₂N₂
197194

198195
/-- The natural transformation `N₂ ⋙ Γ₂ ⟶ 𝟭 (SimplicialObject C)`. -/
199196
def natTrans : (N₂ : Karoubi (SimplicialObject C) ⥤ _) ⋙ Γ₂ ⟶ 𝟭 _ :=
200197
((whiskeringLeft _ _ _).obj (toKaroubi (SimplicialObject C))).preimage
201-
(by exact compatibility_Γ₂N₁_Γ₂N₂.hom ≫ Γ₂N₁.natTrans)
198+
(Γ₂N₂ToKaroubiIso.hom ≫ Γ₂N₁.natTrans)
202199
set_option linter.uppercaseLean3 false in
203200
#align algebraic_topology.dold_kan.Γ₂N₂.nat_trans AlgebraicTopology.DoldKan.Γ₂N₂.natTrans
204201

205202
theorem natTrans_app_f_app (P : Karoubi (SimplicialObject C)) :
206-
Γ₂N₂.natTrans.app P = by
207-
exact (N₂ ⋙ Γ₂).map P.decompId_i ≫
208-
(compatibility_Γ₂N₁_Γ₂N₂.hom ≫ Γ₂N₁.natTrans).app P.X ≫ P.decompId_p := by
203+
Γ₂N₂.natTrans.app P =
204+
(N₂ ⋙ Γ₂).map P.decompId_i ≫
205+
(Γ₂N₂ToKaroubiIso.hom ≫ Γ₂N₁.natTrans).app P.X ≫ P.decompId_p := by
209206
dsimp only [natTrans]
210-
rw [whiskeringLeft_obj_preimage_app
211-
(compatibility_Γ₂N₁_Γ₂N₂.hom ≫ Γ₂N₁.natTrans : _ ⟶ toKaroubi _ ⋙ 𝟭 _) P, Functor.id_map]
207+
simp only [whiskeringLeft_obj_preimage_app, Functor.id_map, assoc]
212208
set_option linter.uppercaseLean3 false in
213209
#align algebraic_topology.dold_kan.Γ₂N₂.nat_trans_app_f_app AlgebraicTopology.DoldKan.Γ₂N₂.natTrans_app_f_app
214210

@@ -219,7 +215,7 @@ end Γ₂N₂
219215

220216
theorem compatibility_Γ₂N₁_Γ₂N₂_natTrans (X : SimplicialObject C) :
221217
Γ₂N₁.natTrans.app X =
222-
(compatibility_Γ₂N₁_Γ₂N₂.app X).inv ≫
218+
(Γ₂N₂ToKaroubiIso.app X).inv ≫
223219
Γ₂N₂.natTrans.app ((toKaroubi (SimplicialObject C)).obj X) := by
224220
rw [Γ₂N₂.natTrans_app_f_app]
225221
dsimp only [Karoubi.decompId_i_toKaroubi, Karoubi.decompId_p_toKaroubi, Functor.comp_map,
@@ -239,14 +235,16 @@ theorem identity_N₂_objectwise (P : Karoubi (SimplicialObject C)) :
239235
have eq₂ : (Γ₀.splitting (N₂.obj P).X).ιSummand (Splitting.IndexSet.id (op [n])) ≫
240236
(N₂.map (Γ₂N₂.natTrans.app P)).f.f n = PInfty.f n ≫ P.p.app (op [n]) := by
241237
dsimp
242-
simp only [assoc, Γ₂N₂.natTrans_app_f_app, Functor.comp_map, NatTrans.comp_app,
243-
Karoubi.comp_f, compatibility_Γ₂N₁_Γ₂N₂_hom_app, eqToHom_refl, Karoubi.eqToHom_f,
244-
PInfty_on_Γ₀_splitting_summand_eq_self_assoc, Functor.comp_obj]
245-
dsimp [N₂]
246-
simp only [Splitting.ι_desc_assoc, assoc, id_comp, unop_op,
247-
Splitting.IndexSet.id_fst, len_mk, Splitting.IndexSet.e,
248-
Splitting.IndexSet.id_snd_coe, op_id, P.X.map_id, id_comp,
249-
PInfty_f_naturality_assoc, PInfty_f_idem_assoc, app_idem]
238+
rw [PInfty_on_Γ₀_splitting_summand_eq_self_assoc, Γ₂N₂.natTrans_app_f_app]
239+
dsimp
240+
rw [Γ₂N₂ToKaroubiIso_hom_app, assoc, Splitting.ι_desc_assoc, assoc, assoc]
241+
dsimp [toKaroubi]
242+
rw [Splitting.ι_desc_assoc]
243+
dsimp
244+
simp only [assoc, Splitting.ι_desc_assoc, unop_op, Splitting.IndexSet.id_fst,
245+
len_mk, NatTrans.naturality, PInfty_f_idem_assoc,
246+
PInfty_f_naturality_assoc, app_idem_assoc]
247+
erw [P.X.map_id, comp_id]
250248
simp only [Karoubi.comp_f, HomologicalComplex.comp_f, Karoubi.id_eq, N₂_obj_p_f, assoc,
251249
eq₁, eq₂, PInfty_f_naturality_assoc, app_idem, PInfty_f_idem_assoc]
252250
set_option linter.uppercaseLean3 false in

0 commit comments

Comments
 (0)