@@ -5,17 +5,17 @@ Authors: Joël Riou
55-/
66module
77
8- public import Mathlib.Algebra.Homology.Bifunctor
8+ public import Mathlib.Algebra.Homology.BifunctorFlip
99public import Mathlib.Algebra.Homology.Homotopy
1010
1111/-!
1212# The action of a bifunctor on homological complexes factors through homotopies
1313
1414Given a `TotalComplexShape c₁ c₂ c`, a functor `F : C₁ ⥤ C₂ ⥤ D`,
15- we shall show in this file that up to homotopy the morphism
15+ we show in this file that up to homotopy the morphism
1616`mapBifunctorMap f₁ f₂ F c` only depends on the homotopy classes of
1717the morphism `f₁` in `HomologicalComplex C c₁` and of
18- the morphism `f₂` in `HomologicalComplex C c₂` (TODO) .
18+ the morphism `f₂` in `HomologicalComplex C c₂`.
1919
2020-/
2121
@@ -32,11 +32,10 @@ variable {C₁ C₂ D I₁ I₂ J : Type*} [Category C₁] [Category C₂] [Cate
3232namespace HomologicalComplex
3333
3434variable {K₁ L₁ : HomologicalComplex C₁ c₁} {f₁ f₁' : K₁ ⟶ L₁} (h₁ : Homotopy f₁ f₁')
35- {K₂ L₂ : HomologicalComplex C₂ c₂} (f₂ : K₂ ⟶ L₂)
35+ {K₂ L₂ : HomologicalComplex C₂ c₂} (f₂ f₂' : K₂ ⟶ L₂) (h₂ : Homotopy f₂ f₂' )
3636 (F : C₁ ⥤ C₂ ⥤ D) [F.Additive] [∀ X₁, (F.obj X₁).Additive]
3737 (c : ComplexShape J) [DecidableEq J] [TotalComplexShape c₁ c₂ c]
38- [HasMapBifunctor K₁ K₂ F c]
39- [HasMapBifunctor L₁ L₂ F c]
38+ [HasMapBifunctor K₁ K₂ F c] [HasMapBifunctor L₁ L₂ F c]
4039
4140namespace mapBifunctorMapHomotopy
4241
@@ -57,6 +56,27 @@ lemma ιMapBifunctor_hom₁ (i₁ i₁' : I₁) (i₂ : I₂) (j j' : J)
5756 subst h'
5857 simp [hom₁]
5958
59+ variable (f₁) {f₂ f₂'} in
60+ /-- Auxiliary definition for `mapBifunctorMapHomotopy₂`. -/
61+ noncomputable def hom₂ (j j' : J) :
62+ (mapBifunctor K₁ K₂ F c).X j ⟶ (mapBifunctor L₁ L₂ F c).X j' :=
63+ HomologicalComplex₂.totalDesc _
64+ (fun i₁ i₂ _ ↦ ComplexShape.ε₂ c₁ c₂ c (i₁, c₂.prev i₂) •
65+ (F.map (f₁.f i₁)).app (K₂.X i₂) ≫
66+ (F.obj (L₁.X i₁)).map (h₂.hom i₂ (c₂.prev i₂)) ≫
67+ ιMapBifunctorOrZero L₁ L₂ F c _ _ j')
68+
69+ variable (f₁) {f₂ f₂'} in
70+ @[reassoc]
71+ lemma ιMapBifunctor_hom₂ (i₁ : I₁) (i₂ i₂' : I₂) (j j' : J)
72+ (h : ComplexShape.π c₁ c₂ c (i₁, i₂') = j) (h' : c₂.prev i₂' = i₂) :
73+ ιMapBifunctor K₁ K₂ F c i₁ i₂' j h ≫ hom₂ f₁ h₂ F c j j' =
74+ ComplexShape.ε₂ c₁ c₂ c (i₁, i₂) •
75+ (F.map (f₁.f i₁)).app (K₂.X i₂') ≫
76+ (F.obj (L₁.X i₁)).map (h₂.hom i₂' i₂) ≫ ιMapBifunctorOrZero L₁ L₂ F c i₁ i₂ j' := by
77+ subst h'
78+ simp [hom₂]
79+
6080lemma zero₁ (j j' : J) (h : ¬ c.Rel j' j) :
6181 hom₁ h₁ f₂ F c j j' = 0 := by
6282 ext i₁ i₂ h'
@@ -158,4 +178,47 @@ noncomputable def mapBifunctorMapHomotopy₁ :
158178 zero := zero₁ h₁ f₂ F c
159179 comm := comm₁ h₁ f₂ F c
160180
181+ variable (f₁) {f₂ f₂'} in
182+ open mapBifunctorMapHomotopy in
183+ /-- The homotopy between `mapBifunctorMap f₁ f₂ F c` and `mapBifunctorMap f₁ f₂' F c` that
184+ is induced by a homotopy between `f₂` and `f₂'`. -/
185+ noncomputable def mapBifunctorMapHomotopy₂ :
186+ Homotopy (mapBifunctorMap f₁ f₂ F c) (mapBifunctorMap f₁ f₂' F c) :=
187+ letI : TotalComplexShape c₂ c₁ c := TotalComplexShape.symm c₁ c₂ c
188+ letI : TotalComplexShapeSymmetry c₁ c₂ c := TotalComplexShape.symmSymmetry c₁ c₂ c
189+ haveI : F.flip.Additive := { }
190+ haveI (X₁ : C₂) : (F.flip.obj X₁).Additive := { }
191+ letI H : Homotopy (mapBifunctorMap f₁ f₂ F c) (mapBifunctorMap f₁ f₂' F c) :=
192+ (Homotopy.ofEq (by simp)).trans
193+ ((((mapBifunctorMapHomotopy₁ h₂ f₁ F.flip c).compRight
194+ (mapBifunctorFlipIso L₁ L₂ F c).hom).compLeft
195+ ((mapBifunctorFlipIso K₁ K₂ F c).inv)).trans (Homotopy.ofEq (by simp)))
196+ haveI hom₂_eq : hom₂ f₁ h₂ F c = H.hom := by
197+ ext j j' i₁ i₂ hj
198+ dsimp [H, mapBifunctorMapHomotopy₁]
199+ rw [add_zero, zero_add, ι_mapBifunctorFlipIso_inv_assoc, Linear.units_smul_comp,
200+ ιMapBifunctor_hom₁_assoc h₂ f₁ F.flip c _ i₂ i₁ j j'
201+ (by rw [ComplexShape.π_symm c₁ c₂ c i₁ i₂, hj]) rfl,
202+ ιMapBifunctor_hom₂ f₁ h₂ F c i₁ _ i₂ j j' hj rfl]
203+ dsimp
204+ simp only [NatTrans.naturality_assoc, Linear.units_smul_comp, assoc]
205+ by_cases hj' : c₁.π c₂ c (i₁, c₂.prev i₂) = j'
206+ · rw [ιMapBifunctorOrZero_eq _ _ _ _ _ _ _ hj',
207+ ιMapBifunctorOrZero_eq _ _ _ _ _ _ _ (by rwa [ComplexShape.π_symm c₁ c₂ c]),
208+ ι_mapBifunctorFlipIso_hom, Linear.comp_units_smul, Linear.comp_units_smul,
209+ smul_smul, smul_smul]
210+ by_cases hi₂ : c₂.Rel (c₂.prev i₂) i₂
211+ · congr 1
212+ nth_rw 2 [mul_comm]
213+ rw [← ComplexShape.σ_ε₂ c₁ c i₁ hi₂, mul_comm, ← mul_assoc,
214+ Int.units_mul_self, one_mul]
215+ · rw [h₂.zero _ _ hi₂, Functor.map_zero, zero_comp, comp_zero, smul_zero, smul_zero]
216+ · rw [ιMapBifunctorOrZero_eq_zero _ _ _ _ _ _ _ hj',
217+ ιMapBifunctorOrZero_eq_zero _ _ _ _ _ _ _ (by rwa [ComplexShape.π_symm c₁ c₂ c]),
218+ comp_zero, comp_zero, smul_zero, zero_comp, comp_zero,
219+ comp_zero, smul_zero, smul_zero]
220+ { hom := hom₂ f₁ h₂ F c
221+ zero j j' h := by simpa only [hom₂_eq] using H.zero j j' h
222+ comm j := by simpa only [hom₂_eq] using H.comm j }
223+
161224end HomologicalComplex
0 commit comments