Cocycles, coboundaries, and Z⁰ of a dg category #
The degree-zero cocycles of a dg category form an ordinary category on the same
objects, and the coboundaries sit inside them as an additive subgroup. H⁰ is
the quotient; this file builds everything the quotient needs.
Both halves rest on the Leibniz rule, at three different pairs of degrees:
(0, 0)— composition of cocycles is a cocycle, soZ⁰is a category;(0, -1)— a cocycle composed with a coboundary is a coboundary;(-1, 0)— a coboundary composed with a cocycle is a coboundary.
The last two are what make composition descend to H⁰. They are the reason the
Leibniz rule is an axiom of DGCategory rather than a lemma about a special
case, and the Const example in DerivedAlgGeo.Algebra.Homology.DGCategory/Instances.lean — whose
differential is zero — tests none of them.
The induced functor on H⁰ also carries canonical identity and composition
comparisons. Their associativity and two unit laws are recorded here as the
ordinary pseudofunctor coherence equations. They are exposed directly because
the repository has no bundled bicategory of dg categories on which to install
Mathlib's Pseudofunctor; introducing a partial replacement would duplicate
that abstraction.
A wrinkle in the degrees #
dgComp_leibniz states the shifted degrees as p + 1, and those are dependent
arguments: simp only [zero_add] cannot normalise 0 + 1 to 1 in a goal
without breaking the motive. Hypotheses are therefore restated at the shifted
degree — they typecheck directly, the degrees being definitionally equal —
rather than rewriting the goal.
The degree-zero cocycles from X to Y.
Equations
- CategoryTheory.cocycles X Y = (AddCommGrpCat.Hom.hom ((CategoryTheory.DGCategoryStruct.dgHom X Y).d 0 1)).ker
Instances For
The degree-zero coboundaries from X to Y.
Equations
- CategoryTheory.coboundaries X Y = (AddCommGrpCat.Hom.hom ((CategoryTheory.DGCategoryStruct.dgHom X Y).d (-1) 0)).range
Instances For
Every coboundary is a cocycle: this is d ∘ d = 0.
A cocycle composed with a coboundary is a coboundary. Leibniz at (0, -1):
the δf term vanishes because f is closed, and the sign is +1.
A coboundary composed with a cocycle is a coboundary. Leibniz at (-1, 0):
the δg term vanishes because g is closed, so the sign never matters.
Objects of Z⁰. A type synonym, so the ordinary category structure does not
attach itself to C.
Equations
- CategoryTheory.Z0 C = C
Instances For
Composition of cocycles is a cocycle: Leibniz at (0, 0), with both
differential terms vanishing.
Equations
- One or more equations did not get rendered due to their size.
The two computation rules below are stated through Subtype.val on the
ascribed subgroup type: X ⟶ Y in Z0 C is cocycles _ _, but only
definitionally, so the anonymous coercion does not fire on the ⟶ form.
Composition respects cohomology classes. Writing
f₁ ∘ g₁ - f₂ ∘ g₂ = (f₁ - f₂) ∘ g₁ + f₂ ∘ (g₁ - g₂) reduces this to the two
descent lemmas, one for each summand.
Only f₂ and g₁ are required to be closed — the split above touches the other
two only through the differences, which are already assumed to be coboundaries.
The coboundaries, viewed inside the cocycles.
Equations
Instances For
Equations
- One or more equations did not get rendered due to their size.
H⁰ is preadditive: its Hom-sets are quotients of abelian groups, and
composition is biadditive because dgComp is.
Equations
- CategoryTheory.H0.preadditive = { homGroup := fun (X Y : CategoryTheory.H0 C) => id inferInstance, add_comp := ⋯, comp_add := ⋯ }
The morphism of H⁰ a cocycle represents. Every construction that
descends a dg morphism to H⁰ goes through this constructor, and the three
computation rules below are what downstream files rewrite with.
Equations
- CategoryTheory.H0.homMk f = ↑f
Instances For
Two cocycles represent the same morphism of H⁰ when they differ by a
coboundary. The quotient's own eq_iff_sub_mem says so; this restates it on the
underlying elements, which is the form every homotopy produces.
Negation of an H⁰ morphism is negation of a representative.
Composition of H⁰ morphisms is dgComp of representatives.
The identity of H⁰ is represented by the dg identity.
A dg functor sends cocycles to cocycles: it commutes with the differential,
and an additive map sends 0 to 0.
A dg functor sends coboundaries to coboundaries, for the same reason and
with no closedness hypothesis: map_d already exhibits the primitive.
The functor H⁰(F) induced by a dg functor.
Equations
- One or more equations did not get rendered due to their size.
Instances For
The functor on H⁰ induced by a dg functor is additive.
A dg functor's action on a single Hom-complex, packaged as a morphism of
cochain complexes. map_d is exactly the commutation square.
Equations
- F.mapComplex X Y = { f := fun (p : ℤ) => AddCommGrpCat.ofHom (F.map p), comm' := ⋯ }
Instances For
A quasi-equivalence of dg categories: the action on every Hom-complex is a
quasi-isomorphism, and H⁰ of it is essentially surjective.
That a quasi-equivalence induces an equivalence H⁰ C ≌ H⁰ D is
DGFunctor.isEquivalence_h0 and DGFunctor.h0Equivalence
(DGCategory/QuasiEquivalence.lean), and that this equivalence is triangulated
between pretriangulated dg categories is DGFunctor.isTriangulated_h0Equivalence
(DGCategory/Pretriangulated/H0/FunctorTransport.lean).
- quasiIso (X Y : C) : QuasiIso (F.mapComplex X Y)
Every Hom-complex map is a quasi-isomorphism.
H⁰ Fhits every object up to isomorphism.
Instances For
The quotient functor from cocycles to cohomology classes.
Equations
- CategoryTheory.Z0.toH0 C = { obj := fun (X : CategoryTheory.Z0 C) => X, map := fun {X Y : CategoryTheory.Z0 C} (f : X ⟶ Y) => ↑f, map_id := ⋯, map_comp := ⋯ }
Instances For
Every morphism in H⁰ C has a degree-zero cocycle representative.
The object part of H⁰ F. A simp lemma because otherwise the objects in
a naturality square stay in the h0.obj form and Category.comp_id — whose
statement mentions the codomain — cannot match.
How H⁰ F acts on a class: this is the computation rule simp needs
before any naturality square involving h0 will close.
H⁰ of the identity dg functor is the identity.
Equations
Instances For
The identity comparison has literal identity components in both directions.
The forward component of h0IdIso is the identity. This exposes the
computation without requiring consumers to unfold NatIso.ofComponents.
The inverse component of h0IdIso is the identity. This exposes the
computation without requiring consumers to unfold NatIso.ofComponents.
H⁰ takes composition of dg functors to composition of functors.
Equations
- F.h0CompIso G = CategoryTheory.NatIso.ofComponents (fun (x : CategoryTheory.H0 C) => CategoryTheory.Iso.refl ((F.comp G).h0.obj x)) ⋯
Instances For
The forward component of h0CompIso is the identity. This is the
component computation used when descending dg whiskering to H⁰.
The inverse component of h0CompIso is the identity. This is the
component computation used when descending dg whiskering to H⁰.
The H⁰ composition comparison satisfies the pseudofunctor
associativity law. The ordinary functor associator is retained explicitly
even though dg-functor composition is strict.
The H⁰ composition comparison is coherent with right composition by
the identity dg functor and the ordinary right unitor.
The H⁰ composition comparison is coherent with left composition by
the identity dg functor and the ordinary left unitor.