Projective resolutions #
THIS FILE IS SYNCHRONIZED WITH MATHLIB4. Any changes to this file require a corresponding PR to mathlib4.
A projective resolution P : ProjectiveResolution Z
of an object Z : C
consists of
a ℕ
-indexed chain complex P.complex
of projective objects,
along with a chain map P.π
from C
to the chain complex consisting just of Z
in degree zero,
so that the augmented chain complex is exact.
When C
is abelian, this exactness condition is equivalent to π
being a quasi-isomorphism.
It turns out that this formulation allows us to set up the basic theory of derived functors
without even assuming C
is abelian.
(Typically, however, to show has_projective_resolutions C
one will assume enough_projectives C
and abelian C
.
This construction appears in category_theory.abelian.projectives
.)
We show that given P : ProjectiveResolution X
and Q : ProjectiveResolution Y
,
any morphism X ⟶ Y
admits a lift to a chain map P.complex ⟶ Q.complex
.
(It is a lift in the sense that
the projection maps P.π
and Q.π
intertwine the lift and the original morphism.)
Moreover, we show that any two such lifts are homotopic.
As a consequence, if every object admits a projective resolution,
we can construct a functor projective_resolutions C : C ⥤ homotopy_category C
.
- complex : chain_complex C ℕ
- π : homological_complex.hom self.complex ((chain_complex.single₀ C).obj Z)
- projective : (∀ (n : ℕ), category_theory.projective (self.complex.X n)) . "apply_instance"
- exact₀ : category_theory.exact (self.complex.d 1 0) (self.π.f 0)
- exact : ∀ (n : ℕ), category_theory.exact (self.complex.d (n + 2) (n + 1)) (self.complex.d (n + 1) n)
- epi : category_theory.epi (self.π.f 0) . "apply_instance"
A ProjectiveResolution Z
consists of a bundled ℕ
-indexed chain complex of projective objects,
along with a quasi-isomorphism to the complex consisting of just Z
supported in degree 0
.
(We don't actually ask here that the chain map is a quasi-iso, just exactness everywhere:
that π
is a quasi-iso is a lemma when the category is abelian.
Should we just ask for it here?)
Except in situations where you want to provide a particular projective resolution (for example to compute a derived functor), you will not typically need to use this bundled object, and will instead use
projective_resolution Z
: theℕ
-indexed chain complex (equipped withprojective
andexact
instances)projective_resolution.π Z
: the chain map fromprojective_resolution Z
to(single C _ 0).obj Z
(all the components are equipped withepi
instances, and when the category isabelian
we will showπ
is a quasi-iso).
Instances for category_theory.ProjectiveResolution
- category_theory.ProjectiveResolution.has_sizeof_inst
- out : nonempty (category_theory.ProjectiveResolution Z)
An object admits a projective resolution.
- out : ∀ (Z : C), category_theory.has_projective_resolution Z
You will rarely use this typeclass directly: it is implied by the combination
[enough_projectives C]
and [abelian C]
.
By itself it's enough to set up the basic theory of derived functors.
Instances of this typeclass
A projective object admits a trivial projective resolution: itself in degree 0.
Equations
- category_theory.ProjectiveResolution.self Z = {complex := (chain_complex.single₀ C).obj Z, π := 𝟙 ((chain_complex.single₀ C).obj Z), projective := _, exact₀ := _, exact := _, epi := _}
Auxiliary construction for lift
.
Equations
- category_theory.ProjectiveResolution.lift_f_zero f P Q = category_theory.projective.factor_thru (P.π.f 0 ≫ f) (Q.π.f 0)
Auxiliary construction for lift
.
Equations
- category_theory.ProjectiveResolution.lift_f_one f P Q = category_theory.exact.lift (P.complex.d 1 0 ≫ category_theory.ProjectiveResolution.lift_f_zero f P Q) (Q.complex.d 1 0) (Q.π.f 0) _ _
Auxiliary lemma for lift
.
Auxiliary construction for lift
.
A morphism in C
lifts to a chain map between projective resolutions.
Equations
- category_theory.ProjectiveResolution.lift f P Q = P.complex.mk_hom Q.complex (category_theory.ProjectiveResolution.lift_f_zero f P Q) (category_theory.ProjectiveResolution.lift_f_one f P Q) _ (λ (n : ℕ) (_x : Σ' (f : P.complex.X n ⟶ Q.complex.X n) (f' : P.complex.X (n + 1) ⟶ Q.complex.X (n + 1)), f' ≫ Q.complex.d (n + 1) n = P.complex.d (n + 1) n ≫ f), category_theory.ProjectiveResolution.lift._match_1 P Q n _x)
- category_theory.ProjectiveResolution.lift._match_1 P Q n ⟨g, ⟨g', w⟩⟩ = P.lift_f_succ Q n g g' w
The resolution maps intertwine the lift of a morphism and that morphism.
An auxiliary definition for lift_homotopy_zero
.
Equations
- category_theory.ProjectiveResolution.lift_homotopy_zero_zero f comm = category_theory.exact.lift (f.f 0) (Q.complex.d 1 0) (Q.π.f 0) category_theory.ProjectiveResolution.lift_homotopy_zero_zero._proof_2 _
An auxiliary definition for lift_homotopy_zero
.
Equations
- category_theory.ProjectiveResolution.lift_homotopy_zero_one f comm = category_theory.exact.lift (f.f 1 - P.complex.d 1 0 ≫ category_theory.ProjectiveResolution.lift_homotopy_zero_zero f comm) (Q.complex.d 2 1) (Q.complex.d 1 0) category_theory.ProjectiveResolution.lift_homotopy_zero_one._proof_2 _
An auxiliary definition for lift_homotopy_zero
.
Any lift of the zero morphism is homotopic to zero.
Equations
- category_theory.ProjectiveResolution.lift_homotopy_zero f comm = homotopy.mk_inductive f (category_theory.ProjectiveResolution.lift_homotopy_zero_zero f comm) _ (category_theory.ProjectiveResolution.lift_homotopy_zero_one f comm) _ (λ (n : ℕ) (_x : Σ' (f_1 : P.complex.X n ⟶ Q.complex.X (n + 1)) (f' : P.complex.X (n + 1) ⟶ Q.complex.X (n + 2)), f.f (n + 1) = P.complex.d (n + 1) n ≫ f_1 + f' ≫ Q.complex.d (n + 2) (n + 1)), category_theory.ProjectiveResolution.lift_homotopy_zero._match_1 f n _x)
- category_theory.ProjectiveResolution.lift_homotopy_zero._match_1 f n ⟨g, ⟨g', w⟩⟩ = ⟨category_theory.ProjectiveResolution.lift_homotopy_zero_succ f n g g' w, _⟩
Two lifts of the same morphism are homotopic.
Equations
- category_theory.ProjectiveResolution.lift_homotopy f g h g_comm h_comm = homotopy.equiv_sub_zero.inv_fun (category_theory.ProjectiveResolution.lift_homotopy_zero (g - h) _)
The lift of the identity morphism is homotopic to the identity chain map.
Equations
The lift of a composition is homotopic to the composition of the lifts.
Equations
Any two projective resolutions are homotopy equivalent.
Equations
- P.homotopy_equiv Q = {hom := category_theory.ProjectiveResolution.lift (𝟙 X) P Q, inv := category_theory.ProjectiveResolution.lift (𝟙 X) Q P, homotopy_hom_inv_id := (category_theory.ProjectiveResolution.lift_comp_homotopy (𝟙 X) (𝟙 X) P Q P).symm.trans (_.mpr (category_theory.ProjectiveResolution.lift_id_homotopy X P)), homotopy_inv_hom_id := (category_theory.ProjectiveResolution.lift_comp_homotopy (𝟙 X) (𝟙 X) Q P Q).symm.trans (_.mpr (category_theory.ProjectiveResolution.lift_id_homotopy X Q))}
An arbitrarily chosen projective resolution of an object.
The chain map from the arbitrarily chosen projective resolution projective_resolution Z
back to the chain complex consisting of Z
supported in degree 0
.
The lift of a morphism to a chain map between the arbitrarily chosen projective resolutions.
Taking projective resolutions is functorial,
if considered with target the homotopy category
(ℕ
-indexed chain complexes and chain maps up to homotopy).
Equations
- category_theory.projective_resolutions C = {obj := λ (X : C), (homotopy_category.quotient C (complex_shape.down ℕ)).obj (category_theory.projective_resolution X), map := λ (X Y : C) (f : X ⟶ Y), (homotopy_category.quotient C (complex_shape.down ℕ)).map (category_theory.projective_resolution.lift f), map_id' := _, map_comp' := _}