Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
100 commits
Select commit Hold shift + click to select a range
0bd1581
feat(CategoryTheory): orthogonal of a property of objects
joelriou Nov 20, 2025
1807e21
chore(CategoryTheory): rename LeftBousfield.W as ObjectProperty.isLocal
joelriou Nov 20, 2025
a827619
Merge remote-tracking branch 'origin/triangulated-orthogonal' into tr…
joelriou Nov 20, 2025
fb7ad36
feat(CategoryTheory/Triangulated): right orthogonal and localization
joelriou Nov 20, 2025
d5627e7
Merge remote-tracking branch 'origin/master' into rename-bousfield-w
joelriou Nov 21, 2025
e8c89be
added docstring
joelriou Nov 21, 2025
6f361c9
add reference to Bousfield localization for `ObjectProperty.isLocal`
joelriou Nov 21, 2025
86fb3b0
feat(Algebra/Homology): K-injective cochain complexes
joelriou Nov 21, 2025
777ad27
added TODO
joelriou Nov 21, 2025
c4849dd
fix
joelriou Nov 21, 2025
207532e
better syntax
joelriou Nov 21, 2025
2b63d6c
better docstring
joelriou Nov 21, 2025
d9b561f
fix
joelriou Nov 21, 2025
8162f99
Merge remote-tracking branch 'origin/master' into k-injective-1
joelriou Nov 21, 2025
e8c86e3
fix
joelriou Nov 21, 2025
382e0f7
Apply suggestion from @joelriou
joelriou Nov 21, 2025
cc440ea
Merge remote-tracking branch 'origin/triangulated-orthogonal-2' into …
joelriou Nov 22, 2025
b59c9df
morphisms to a K-injective complex in the derived category
joelriou Nov 22, 2025
c7de9e2
Merge commit '382e0f7ebbae17ff85202d42b4ab954bd7f8d066' into k-inject…
joelriou Nov 22, 2025
37cf315
fix
joelriou Nov 22, 2025
912d7fa
Merge remote-tracking branch 'origin/master' into k-injective-1
joelriou Nov 23, 2025
5065e6b
the cochain complex indexed by integers associated to an injective re…
joelriou Nov 23, 2025
79a9e12
typo
joelriou Nov 23, 2025
9cda67d
Merge remote-tracking branch 'origin/rename-bousfield-w' into triangu…
joelriou Nov 24, 2025
3d9e4f5
Merge remote-tracking branch 'origin/master' into triangulated-orthog…
joelriou Nov 24, 2025
3ba61e4
Merge remote-tracking branch 'origin/master' into triangulated-orthog…
joelriou Nov 24, 2025
015b0dc
Merge remote-tracking branch 'origin/master' into triangulated-orthog…
joelriou Nov 24, 2025
f6e74f2
Merge remote-tracking branch 'origin/triangulated-orthogonal-2' into …
joelriou Nov 24, 2025
2455b11
feat(Algebra/Homology): cohomology of HomComplex
joelriou Nov 25, 2025
fb9a892
typo
joelriou Nov 25, 2025
ecd0ef4
morphisms in the homotopy category
joelriou Nov 25, 2025
84cdbb1
wip
joelriou Nov 25, 2025
f4bb279
Merge remote-tracking branch 'origin/k-injective-0' into homcomplex-s…
joelriou Nov 25, 2025
0c72eac
feat(Algebra/Homology): cochains and cocycles from/to single complexes
joelriou Nov 25, 2025
2d0ebcc
Merge remote-tracking branch 'origin/master' into k-injective-1
joelriou Nov 25, 2025
24009f2
Merge remote-tracking branch 'origin/homcomplex-single' into injectiv…
joelriou Nov 25, 2025
8b817b6
Merge remote-tracking branch 'origin/homcomplex-cohomology-class-hom'…
joelriou Nov 25, 2025
082dd63
Merge remote-tracking branch 'origin/injective-resolution-extend' int…
joelriou Nov 25, 2025
ecae259
feat(CategoryTheory): constructor for Ext-groups using an injective r…
joelriou Nov 25, 2025
106d01e
wip
joelriou Nov 25, 2025
6ab1c63
fix
joelriou Nov 25, 2025
47c840d
better syntax
joelriou Nov 25, 2025
add9a2d
Merge remote-tracking branch 'origin/master' into injective-resolutio…
joelriou Nov 25, 2025
d1bd720
wip
joelriou Nov 25, 2025
1d605c4
wip
joelriou Nov 26, 2025
a95d22d
Merge remote-tracking branch 'origin/master' into homcomplex-cohomolo…
joelriou Nov 26, 2025
0c47772
rephrasing
joelriou Nov 27, 2025
07f0be5
Merge remote-tracking branch 'origin/homcomplex-cohomology-class' int…
joelriou Nov 27, 2025
fca9438
Merge remote-tracking branch 'origin/master' into homcomplex-cohomolo…
joelriou Nov 27, 2025
6da92ab
Apply suggestion from @joelriou
joelriou Nov 27, 2025
b18076f
Merge remote-tracking branch 'origin/master' into homcomplex-cohomolo…
joelriou Nov 29, 2025
491c379
equivHomShift'
joelriou Nov 29, 2025
9fb098b
Merge remote-tracking branch 'origin/master' into homcomplex-cohomolo…
joelriou Dec 4, 2025
6361fdc
Merge remote-tracking branch 'origin/homcomplex-cohomology-class-hom'…
joelriou Dec 4, 2025
ebf0ec9
Merge remote-tracking branch 'origin/master' into injective-resolutio…
joelriou Dec 4, 2025
269e1ec
fix
joelriou Dec 4, 2025
72943d4
fix
joelriou Dec 4, 2025
03dcbd8
wip
joelriou Dec 4, 2025
dc97b3b
wip
joelriou Dec 4, 2025
c30dd40
fix
joelriou Dec 4, 2025
06212aa
wip
joelriou Dec 4, 2025
ff8530a
added TODO
joelriou Dec 4, 2025
af0c548
typo
joelriou Dec 4, 2025
bd58ec5
typo
joelriou Dec 4, 2025
c9b75c9
typo
joelriou Dec 4, 2025
fa09c23
Merge remote-tracking branch 'origin/master' into injective-resolutio…
joelriou Dec 11, 2025
40ae59a
Merge remote-tracking branch 'origin/master' into injective-resolutio…
joelriou Dec 12, 2025
2eebe2a
whitespace
joelriou Dec 12, 2025
2185be8
s/cutsat/lia/g
joelriou Dec 12, 2025
070a4ab
feat(Algebra/Homology): equivOfIsKInjective
joelriou Dec 12, 2025
47b374b
dual instance
joelriou Dec 12, 2025
f65be34
feat(CategoryTheory): computing Ext-groups using a projective resolution
joelriou Dec 12, 2025
33b4728
Merge remote-tracking branch 'origin/master' into injective-resolutio…
joelriou Dec 19, 2025
cc78cc6
Merge remote-tracking branch 'origin/injective-resolution-ext' into p…
joelriou Dec 19, 2025
330876f
Merge remote-tracking branch 'origin/master' into projective-resoluti…
joelriou Dec 21, 2025
eafd64a
Update Mathlib/CategoryTheory/Abelian/Injective/Ext.lean
joelriou Dec 23, 2025
3582224
Update Mathlib/CategoryTheory/Abelian/Injective/Ext.lean
joelriou Dec 23, 2025
297c30b
Merge remote-tracking branch 'origin/master' into injective-resolutio…
joelriou Dec 23, 2025
b385574
used erw
joelriou Dec 23, 2025
108dde0
used change instead
joelriou Dec 23, 2025
d2f5015
better syntax
joelriou Dec 23, 2025
89da8cb
Merge remote-tracking branch 'origin/master' into injective-resolutio…
joelriou Dec 26, 2025
00c86c8
added simps attribute
joelriou Dec 27, 2025
f76e9de
Merge remote-tracking branch 'origin/master' into injective-resolutio…
joelriou Dec 27, 2025
5d0ba4a
Merge remote-tracking branch 'origin/injective-resolution-ext' into p…
joelriou Dec 28, 2025
19f66fb
fix
joelriou Dec 28, 2025
8fcc7cd
better equational lemma
joelriou Dec 28, 2025
bd68ef3
Merge remote-tracking branch 'origin/injective-resolution-ext' into p…
joelriou Dec 28, 2025
1c8eb67
better lemma
joelriou Dec 28, 2025
27aece1
typo
joelriou Dec 28, 2025
4510249
Merge remote-tracking branch 'origin/injective-resolution-ext' into p…
joelriou Dec 28, 2025
851cf76
better proof
joelriou Dec 28, 2025
3549a58
functoriality
joelriou Dec 28, 2025
2ef8943
Merge remote-tracking branch 'origin/projective-resolution-ext' into …
joelriou Dec 28, 2025
211678c
dual statement
joelriou Dec 28, 2025
0540607
Merge remote-tracking branch 'origin/master' into projective-resoluti…
joelriou Dec 28, 2025
34b3ce3
Merge remote-tracking branch 'origin/projective-resolution-ext' into …
joelriou Dec 28, 2025
62cc180
Merge remote-tracking branch 'origin/master' into injective-resolutio…
joelriou Jan 2, 2026
26665a9
Merge remote-tracking branch 'origin/master' into injective-resolutio…
joelriou Jan 3, 2026
72ae66c
suggestion by robin-carlier
joelriou Jan 3, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions Mathlib/Algebra/Homology/HomotopyCategory/HomComplex.lean
Original file line number Diff line number Diff line change
Expand Up @@ -759,6 +759,16 @@ lemma δ_ofHom_comp {n : ℤ} (f : F ⟶ G) (z : Cochain G K n) (m : ℤ) :
(Cochain.ofHom f).comp (δ n m z) (zero_add m) := by
rw [← Cocycle.ofHom_coe, δ_zero_cocycle_comp]

/-- The precomposition of a cocycle with a morphism of cochain complexes. -/
@[simps!]
def Cocycle.precomp {n : ℤ} (z : Cocycle G K n) (f : F ⟶ G) : Cocycle F K n :=
Cocycle.mk ((Cochain.ofHom f).comp z (zero_add n)) _ rfl (by simp)

/-- The postcomposition of a cocycle with a morphism of cochain complexes. -/
@[simps!]
def Cocycle.postcomp {n : ℤ} (z : Cocycle F G n) (f : G ⟶ K) : Cocycle F K n :=
Cocycle.mk (z.1.comp (Cochain.ofHom f) (add_zero n)) _ rfl (by simp)

namespace Cochain

/-- Given two morphisms of complexes `φ₁ φ₂ : F ⟶ G`, the datum of a homotopy between `φ₁` and
Expand Down
21 changes: 21 additions & 0 deletions Mathlib/Algebra/Homology/HomotopyCategory/HomComplexShift.lean
Original file line number Diff line number Diff line change
Expand Up @@ -555,6 +555,27 @@ def equivHomShift :
(K ⟶ L⟦n⟧) ≃+ Cocycle K L n :=
(equivHom _ _).trans (rightShiftAddEquiv _ _ _ (zero_add n)).symm

lemma equivHomShift_comp {K' : CochainComplex C ℤ}
(g : K' ⟶ K) (f : K ⟶ L⟦n⟧) :
equivHomShift (g ≫ f) = Cocycle.precomp (equivHomShift f) g := by
ext p q hpq
simp [equivHomShift_apply, Cochain.rightUnshift_v _ _ _ _ _ _ _ (add_zero p)]

lemma equivHomShift_symm_precomp
(z : Cocycle K L n) {K' : CochainComplex C ℤ} (g : K' ⟶ K) :
equivHomShift.symm (z.precomp g) = g ≫ equivHomShift.symm z :=
equivHomShift.injective (by simp [equivHomShift_comp])

lemma equivHomShift_comp_shift (f : K ⟶ L⟦n⟧) {L' : CochainComplex C ℤ} (g : L ⟶ L') :
equivHomShift (f ≫ g⟦n⟧') = Cocycle.postcomp (equivHomShift f) g := by
ext p q rfl
simp [equivHomShift_apply, Cochain.rightUnshift_v _ _ _ _ _ _ _ (add_zero p)]

lemma equivHomShift_symm_postcomp
(z : Cocycle K L n) {L' : CochainComplex C ℤ} (g : L ⟶ L') :
equivHomShift.symm (z.postcomp g) = equivHomShift.symm z ≫ g⟦n⟧' :=
equivHomShift.injective (by simp [equivHomShift_comp_shift])

/-- The additive equivalence `Cocycle K L n ≃+ Cocycle K⟦a⟧ L n'` when `n + a = n'`. -/
@[simps]
def leftShiftAddEquiv (n a n' : ℤ) (hn' : n + a = n') :
Expand Down
38 changes: 38 additions & 0 deletions Mathlib/Algebra/Homology/HomotopyCategory/HomComplexSingle.lean
Original file line number Diff line number Diff line change
Expand Up @@ -82,6 +82,11 @@ noncomputable def fromSingleEquiv {p q n : ℤ} (h : p + n = q) :
right_inv f := by simp
map_add' := by simp

@[simp]
lemma fromSingleEquiv_fromSingleMk {p q : ℤ} (f : X ⟶ K.X q) {n : ℤ} (h : p + n = q) :
fromSingleEquiv h (fromSingleMk f h) = f := by
simp [fromSingleEquiv]

@[simp]
lemma fromSingleMk_add {p q : ℤ} (f g : X ⟶ K.X q) {n : ℤ} (h : p + n = q) :
fromSingleMk (f + g) h = fromSingleMk f h + fromSingleMk g h :=
Expand All @@ -102,6 +107,13 @@ lemma fromSingleMk_surjective {p n : ℤ} (α : Cochain ((singleFunctor C p).obj
∃ (f : X ⟶ K.X q), fromSingleMk f h = α :=
(fromSingleEquiv h).symm.surjective α

lemma fromSingleMk_precomp
{X' : C} (g : X' ⟶ X) {p q : ℤ} (f : X ⟶ K.X q) {n : ℤ} (h : p + n = q) :
fromSingleMk (g ≫ f) h =
(Cochain.ofHom ((singleFunctor C p).map g)).comp (fromSingleMk f h) (zero_add n) := by
apply (fromSingleEquiv h).injective
simp [fromSingleEquiv, singleFunctor, singleFunctors, HomologicalComplex.single_map_f_self]

/-- Constructor for cochains to a single complex. -/
@[nolint unusedArguments]
noncomputable def toSingleMk {p q : ℤ} (f : K.X p ⟶ X) {n : ℤ} (_ : p + n = q) :
Expand Down Expand Up @@ -148,6 +160,11 @@ noncomputable def toSingleEquiv {p q n : ℤ} (h : p + n = q) :
right_inv f := by simp
map_add' := by simp

@[simp]
lemma toSingleEquiv_toSingleMk {p q : ℤ} (f : K.X p ⟶ X) {n : ℤ} (h : p + n = q) :
toSingleEquiv h (toSingleMk f h) = f := by
simp [toSingleEquiv]

@[simp]
lemma toSingleMk_add {p q : ℤ} (f g : K.X p ⟶ X) {n : ℤ} (h : p + n = q) :
toSingleMk (f + g) h = toSingleMk f h + toSingleMk g h :=
Expand All @@ -168,6 +185,13 @@ lemma toSingleMk_surjective {q n : ℤ} (α : Cochain K ((singleFunctor C q).obj
∃ (f : K.X p ⟶ X), toSingleMk f h = α :=
(toSingleEquiv h).symm.surjective α

lemma toSingleMk_postcomp
{p q : ℤ} (f : K.X p ⟶ X) {n : ℤ} (h : p + n = q) {X' : C} (g : X ⟶ X') :
toSingleMk (f ≫ g) h =
(toSingleMk f h).comp (.ofHom ((singleFunctor C q).map g)) (add_zero n) := by
apply (toSingleEquiv h).injective
simp [toSingleEquiv, singleFunctor, singleFunctors, HomologicalComplex.single_map_f_self]

end Cochain

namespace Cocycle
Expand All @@ -181,6 +205,13 @@ noncomputable def fromSingleMk {p q : ℤ} (f : X ⟶ K.X q) {n : ℤ} (h : p +
rw [Cochain.δ_fromSingleMk _ _ _ q' (by lia), hf]
simp)

lemma fromSingleMk_precomp {X' : C} (g : X' ⟶ X) {p q : ℤ} (f : X ⟶ K.X q) {n : ℤ} (h : p + n = q)
(q' : ℤ) (hq' : q + 1 = q') (hf : f ≫ K.d q q' = 0) :
fromSingleMk (g ≫ f) h q' hq' (by simp [hf]) =
(fromSingleMk f h q' hq' hf).precomp ((singleFunctor C p).map g) := by
ext : 1
exact (Cochain.fromSingleEquiv h).injective (by simp [Cochain.fromSingleMk_precomp])

lemma fromSingleMk_surjective {p n : ℤ} (α : Cocycle ((singleFunctor C p).obj X) K n)
(q : ℤ) (h : p + n = q) (q' : ℤ) (hq' : q + 1 = q') :
∃ (f : X ⟶ K.X q) (hf : f ≫ K.d q q' = 0), fromSingleMk f h q' hq' hf = α := by
Expand Down Expand Up @@ -238,6 +269,13 @@ noncomputable def toSingleMk {p q : ℤ} (f : K.X p ⟶ X) {n : ℤ} (h : p + n
rw [Cochain.δ_toSingleMk _ _ _ p' (by lia), hf]
simp)

lemma toSingleMk_postcomp {p q : ℤ} (f : K.X p ⟶ X) {n : ℤ} (h : p + n = q)
(p' : ℤ) (hp' : p' + 1 = p) (hf : K.d p' p ≫ f = 0) {X' : C} (g : X ⟶ X') :
toSingleMk (f ≫ g) h p' hp' (by simp [reassoc_of% hf]) =
(toSingleMk f h p' hp' hf).postcomp ((singleFunctor C q).map g) := by
ext : 1
exact (Cochain.toSingleEquiv h).injective (by simp [Cochain.toSingleMk_postcomp])

lemma toSingleMk_surjective {q n : ℤ} (α : Cocycle K ((singleFunctor C q).obj X) n)
(p : ℤ) (h : p + n = q) (p' : ℤ) (hp' : p' + 1 = p) :
∃ (f : K.X p ⟶ X) (hf : K.d p' p ≫ f = 0), toSingleMk f h p' hp' hf = α := by
Expand Down
30 changes: 26 additions & 4 deletions Mathlib/CategoryTheory/Abelian/Injective/Ext.lean
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@ we provide an API in order to construct elements in `Ext X Y n` in terms
of the complex `R.cocomplex` and to make computations in the `Ext`-group.

## TODO
* Functoriality in `X` for a given injective resolution `R`
* Functoriality in `Y`: this would involve a morphism `Y ⟶ Y'`, injective
resolutions `R` and `R'` of `Y` and `Y'`, a lift of `Y ⟶ Y'` as a morphism
of cochain complexes `R.cocomplex ⟶ R'.cocomplex`; in this context,
Expand Down Expand Up @@ -54,10 +53,17 @@ noncomputable def extEquivCohomologyClass :
lemma extEquivCohomologyClass_symm_mk_hom [HasDerivedCategory C]
(x : Cocycle ((singleFunctor C 0).obj X) R.cochainComplex n) :
(R.extEquivCohomologyClass.symm (.mk x)).hom =
(ShiftedHom.map (Cocycle.equivHomShift.symm x) DerivedCategory.Q).comp
(.mk₀ _ rfl (inv (DerivedCategory.Q.map R.ι'))) (zero_add _) := by
(ShiftedHom.mk₀ _ rfl ((DerivedCategory.singleFunctorIsoCompQ C 0).hom.app X)).comp
((ShiftedHom.map (Cocycle.equivHomShift.symm x) DerivedCategory.Q).comp
(.mk₀ _ rfl (inv (DerivedCategory.Q.map R.ι') ≫
(DerivedCategory.singleFunctorIsoCompQ C 0).inv.app Y)) (zero_add _)) (add_zero _) := by
change SmallShiftedHom.equiv _ _ ((CohomologyClass.mk x).toSmallShiftedHom.comp _ _) = _
simp [SmallShiftedHom.equiv_comp, isoOfHom]
simp only [SmallShiftedHom.equiv_comp, CohomologyClass.equiv_toSmallShiftedHom_mk,
SmallShiftedHom.equiv_mk₀Inv, isoOfHom, asIso_inv, Functor.comp_obj,
DerivedCategory.singleFunctorIsoCompQ, Iso.refl_hom, NatTrans.id_app, Iso.refl_inv,
ShiftedHom.mk₀_id_comp]
congr
cat_disch

@[simp]
lemma extEquivCohomologyClass_symm_add
Expand Down Expand Up @@ -200,4 +206,20 @@ lemma extMk_surjective (α : Ext X Y n) (m : ℕ) (hm : n + 1 = m) :
by simpa [R.cochainComplex_d _ _ _ _ rfl rfl,
← cancel_mono (R.cochainComplexXIso m m rfl).inv] using hf, by simp [extMk]⟩

lemma mk₀_comp_extMk {n : ℕ} (f : X ⟶ R.cocomplex.X n) (m : ℕ) (hm : n + 1 = m)
(hf : f ≫ R.cocomplex.d n m = 0) {X' : C} (g : X' ⟶ X) :
(Ext.mk₀ g).comp (R.extMk f m hm hf) (zero_add _) =
R.extMk (g ≫ f) m hm (by simp [hf]) := by
have := HasDerivedCategory.standard C
ext
simp only [extMk, Ext.comp_hom, Int.cast_ofNat_Int, Ext.mk₀_hom,
extEquivCohomologyClass_symm_mk_hom, Category.assoc]
rw [Cocycle.fromSingleMk_precomp g _ (zero_add _) _ (by lia) (by
simp [cochainComplex_d _ _ _ n m rfl rfl, reassoc_of% hf]),
Cocycle.equivHomShift_symm_precomp, ← ShiftedHom.mk₀_comp 0 rfl,
ShiftedHom.map_comp,
ShiftedHom.comp_assoc _ _ _ (add_zero _) (zero_add _) (by simp),
← ShiftedHom.comp_assoc _ _ _ (add_zero _) (add_zero (n : ℤ)) (by simp)]
simp

end CategoryTheory.InjectiveResolution
35 changes: 31 additions & 4 deletions Mathlib/CategoryTheory/Abelian/Projective/Ext.lean
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@ we provide an API in order to construct elements in `Ext X Y n` in terms
of the complex `R.complex` and to make computations in the `Ext`-group.

## TODO
* Functoriality in `Y` for a given projective resolution `R`
* Functoriality in `X`: this would involve a morphism `X ⟶ X'`, projective
resolutions `R` and `R'` of `X` and `X'`, a lift of `X ⟶ X'` as a morphism
of cochain complexes `R.complex ⟶ R'.complex`; in this context,
Expand Down Expand Up @@ -54,10 +53,18 @@ noncomputable def extEquivCohomologyClass :
lemma extEquivCohomologyClass_symm_mk_hom [HasDerivedCategory C]
(x : Cocycle R.cochainComplex ((singleFunctor C 0).obj Y) n) :
(R.extEquivCohomologyClass.symm (.mk x)).hom =
(ShiftedHom.mk₀ _ rfl (inv (DerivedCategory.Q.map R.π'))).comp
(ShiftedHom.map (Cocycle.equivHomShift.symm x) DerivedCategory.Q) (add_zero _) := by
(ShiftedHom.mk₀ _ rfl ((DerivedCategory.singleFunctorIsoCompQ C 0).hom.app X ≫
inv (DerivedCategory.Q.map R.π'))).comp
((ShiftedHom.map (Cocycle.equivHomShift.symm x) DerivedCategory.Q).comp
(.mk₀ _ rfl ((DerivedCategory.singleFunctorIsoCompQ C 0).inv.app Y))
(zero_add _)) (add_zero _) := by
change SmallShiftedHom.equiv _ _ (.comp _ (CohomologyClass.mk x).toSmallShiftedHom _) = _
simp [SmallShiftedHom.equiv_comp, isoOfHom]
simp only [SmallShiftedHom.equiv_comp, SmallShiftedHom.equiv_mk₀Inv, isoOfHom, asIso_inv,
CohomologyClass.equiv_toSmallShiftedHom_mk, Functor.comp_obj,
DerivedCategory.singleFunctorIsoCompQ, Iso.refl_hom, NatTrans.id_app, Category.id_comp,
Iso.refl_inv]
congr
exact (ShiftedHom.comp_mk₀_id ..).symm

@[simp]
lemma extEquivCohomologyClass_symm_add
Expand Down Expand Up @@ -200,4 +207,24 @@ lemma extMk_surjective (α : Ext X Y n) (m : ℕ) (hm : n + 1 = m) :
rw [← cancel_epi (R.cochainComplexXIso (-m) m rfl).hom]
simpa [R.cochainComplex_d _ _ _ _ rfl rfl] using hf

lemma extMk_comp_mk₀ {n : ℕ} (f : R.complex.X n ⟶ Y) (m : ℕ) (hm : n + 1 = m)
(hf : R.complex.d m n ≫ f = 0) {Y' : C} (g : Y ⟶ Y') :
(R.extMk f m hm hf).comp (Ext.mk₀ g) (add_zero _) =
R.extMk (f ≫ g) m hm (by simp [reassoc_of% hf]) := by
have := HasDerivedCategory.standard C
ext
simp only [extMk, Ext.comp_hom, Int.cast_ofNat_Int, Ext.mk₀_hom,
extEquivCohomologyClass_symm_mk_hom]
simp only [← Category.assoc]
rw [Cocycle.toSingleMk_postcomp _ _ _ _
(by simpa [cochainComplex_d _ _ _ m n rfl rfl]) g,
Cocycle.equivHomShift_symm_postcomp,
← ShiftedHom.comp_mk₀ _ 0 rfl,
ShiftedHom.map_comp, ShiftedHom.map_mk₀,
ShiftedHom.comp_assoc _ _ _ (add_zero _) (zero_add _) (by simp),
ShiftedHom.comp_assoc _ _ _ (zero_add _) (zero_add _) (by simp),
ShiftedHom.comp_assoc _ _ _ (zero_add _) (zero_add _) (by simp),
ShiftedHom.mk₀_comp_mk₀, ShiftedHom.mk₀_comp_mk₀, ← NatTrans.naturality]
dsimp

end CategoryTheory.ProjectiveResolution