C^dg A is pretriangulated #
The witness for dg-enhancements-e5. Nothing here is a new construction: the
shift is CochainComplex.shiftFunctor, the cone is
CochainComplex.mappingCone, and every clause is discharged by the Mathlib
lemma written for it.
| clause | supplied by |
|---|---|
IsShiftBy.hom | Cocycle.rightShift of Cocycle.ofHom (𝟙 K) |
IsShiftBy.hom_closed | Cocycle.δ_eq_zero |
IsShiftBy.bijective | Cochain.rightUnshift_comp |
IsConeOf.inl, .inr | mappingCone.inl, mappingCone.inr |
IsConeOf.δ_inl | mappingCone.δ_inl |
IsConeOf.bijective | mappingCone.id and inl_fst/inl_snd/inr_fst/inr_snd |
The shift bijection is not proved by exhibiting an inverse #
Cochain.rightUnshift_comp says that unshifting a composite with the canonical
cochain returns the cochain you started with. So right composition is a
section of Cochain.rightUnshift, and rightUnshift is itself injective by
Cochain.rightShift_rightUnshift. A section of an injection is a bijection, so
both round trips reduce to those two Mathlib lemmas and no sign bookkeeping.
Why the type ascriptions are written out #
Cdg A is a type synonym for CochainComplex A ℤ and Cdg.of is the
identity, so dgHom K L and HomComplex (of A K) (of A L) are the same term
definitionally — but only after unfolding the synonym and the instance
projection. Elaboration does not unfold either while it is choosing an
instance, so (of A K)⟦n⟧ written at the ascribed type Cdg A looks for
HasShift (Cdg A) ℤ and fails. Every shift is therefore ascribed at
CochainComplex A ℤ and converted afterwards.
The shift of an object of C^dg A, as an object of C^dg A.
Equations
- K.shiftObj n = (CategoryTheory.shiftFunctor (CochainComplex A ℤ) n).obj (CategoryTheory.Cdg.of A K)
Instances For
The identity of K, right-shifted: the canonical closed cochain of degree
-n from K to K⟦n⟧. Degree -n rather than n because
Homᵈ(K, L) = ∏ₚ Hom(Kᵖ, L^{p+d}) and (K⟦n⟧)^q = K^{q+n}.
Equations
Instances For
Unshifting the canonical cochain returns the identity.
K⟦n⟧ is a shift of K by n in C^dg A.
Equations
- K.isShiftBy n = { hom := ↑(K.shiftCocycle n), hom_closed := ⋯, bijective := ⋯ }
Instances For
A closed degree-zero cochain of C^dg A, as one of Mathlib's cocycles.
cocycles K L and HomComplex.cocycle (of A K) (of A L) 0 are the same
subgroup of the same group, but of two different subgroup terms, so the
crossing is written by hand exactly as in Model/Seam.lean.
Equations
- CategoryTheory.Cdg.coneCocycle f hf = ⟨f, hf⟩
Instances For
The morphism of complexes a closed degree-zero cochain presents.
Equations
Instances For
The mapping cone of a closed degree-zero cochain, as an object of C^dg A.
Equations
Instances For
Recovering the first component of a split map into the cone: compose with
fst. The inr term dies by inr_fst.
And the second component: compose with snd, where the inl term dies by
inl_snd.
Mathlib's mapping cone is a cone in the dg sense. Every field is one of its
lemmas: the splitting is mappingCone.id read forwards and
inl_fst/inl_snd/inr_fst/inr_snd read backwards.
Equations
- One or more equations did not get rendered due to their size.
Instances For
C^dg A is pretriangulated whenever A has a zero object and binary
biproducts: the shift is isShiftBy, the cone is isConeOf, and the zero
object is A's.