What triangulated categories cannot do
Derived categories of rings and sheaves, and the stable homotopy category of spectra, are triangulated categories (see Triangulated categories): additive categories with a shift functor and a class of distinguished triangles satisfying Verdier's axioms. They have been the language of homological algebra since the 1960s. They also have well-known defects:
- Cones are not functorial. Every morphism sits in a distinguished triangle with third term , and a commutative square between two morphisms extends to a map of triangles (axiom TR3) — but the map on cones is not unique, so is not a functor. We will see an explicit example.
- Homotopy limits and colimits are invisible. A triangulated category has no good notion of limits of diagrams beyond biproducts; the colimit of a sequence of maps can be formed (Bökstedt–Neeman's homotopy colimit) only up to non-unique isomorphism.
- Gluing and invariants. Triangulated categories do not glue along open covers, and algebraic K-theory is not an invariant of a triangulated category: Schlichting (2002) found two exact categories whose derived categories are equivalent as triangulated categories but whose K-theories differ.
All three defects have the same cause: passing to a triangulated category keeps morphisms up to homotopy but forgets the homotopies. A stable ∞-category keeps them. It is an ∞-category (see ∞-categories) with a zero object in which fibre sequences and cofibre sequences coincide; its homotopy category is automatically triangulated, and everything that was "up to non-unique isomorphism" becomes "up to a contractible space of choices".
Linear algebra up to homotopy
Think of a stable ∞-category as a homotopy-theoretic version of an abelian group, or of linear algebra. Three intuitions, each made precise below:
- Kernels are cokernels, shifted. For abelian groups, the kernel and cokernel of a map are different things. In a stable ∞-category the fibre of and the cofibre of are related by a perfect duality: is a fibre sequence exactly when it is a cofibre sequence. The derived category explains why: the cofibre of a map of modules is a complex whose is and whose is — kernels and cokernels are two homology groups of one object.
- Suspension is invertible. The suspension and the loop object are inverse equivalences. For pointed spaces they are not (, a discrete space, which is not ); "stabilising" means formally inverting , which is how spectra arise.
- Squares are symmetric. In a stable ∞-category a commutative square is a pullback if and only if it is a pushout. Since squares are where homotopies live (a square commutes via a chosen homotopy), this is a statement about homotopies, which is why it is invisible in an ordinary category.
Fibres, cofibres and stability
Throughout, is an ∞-category (a quasi-category). A commutative square in is a map : four objects, four morphisms, a diagonal, and two 2-simplices witnessing that the two composites agree. Pullbacks and pushouts are ∞-categorical limits and colimits (Lurie, Higher Topos Theory, Chapter 4).
Definition— pointed ∞-category, triangles, fibres and cofibres
is pointed if it has a zero object , both initial and terminal. A triangle in is a commutative square
with a zero object in the lower left corner. It is a fibre sequence if the square is a pullback, and then is a fibre of , written ; it is a cofibre sequence if the square is a pushout, and then is a cofibre of , written . The suspension of is and the loop object is .
Definition— stable ∞-category
A pointed ∞-category is stable if every morphism has a fibre and a cofibre, and a triangle in is a fibre sequence if and only if it is a cofibre sequence (Lurie, Higher Algebra, Definition 1.1.1.9). A functor between stable ∞-categories is exact if it preserves zero objects and fibre (equivalently, cofibre) sequences.
Equivalent characterisations (Lurie, Higher Algebra, §1.1.3 and §1.4.2): a pointed ∞-category with finite limits and colimits is stable if and only if a commutative square is a pullback exactly when it is a pushout; and a pointed ∞-category with finite colimits is stable if and only if is an equivalence. Note that stability is a property of an ∞-category, whereas a triangulation is extra structure on a category.
Definition— spectra
The ∞-category of spectra is the limit of the tower of pointed spaces under the loop functor. Concretely, a spectrum is a sequence of pointed spaces with equivalences . Its homotopy groups (for large) are defined for all . Spectra form the stabilisation of : the universal stable ∞-category with a finite-limit-preserving functor .
Examples and non-examples
Example— Spectra
is stable, and its homotopy category is the classical stable homotopy category. The sphere spectrum has , the stable homotopy groups of spheres (, , , ); an abelian group gives the Eilenberg–MacLane spectrum with and all other homotopy groups zero. Fibre sequences of spectra give long exact sequences of homotopy groups in both directions, which is the algebraic heart of stability.
Example— Derived ∞-categories
For a ring , the derived ∞-category is obtained from chain complexes of -modules by inverting quasi-isomorphisms in the ∞-categorical sense (for instance as the dg-nerve of the dg-category of K-projective complexes). It is stable; its homotopy category is the classical derived category ; the cofibre of a chain map is its mapping cone, and is the shift . The same construction works for any abelian category with enough projectives or injectives, for quasi-coherent sheaves on a scheme, and for modules over a ring spectrum.
Example— Constructions that preserve stability
If is stable and is any simplicial set, the functor ∞-category is stable (fibres and cofibres are computed pointwise). In particular , the ∞-category of morphisms of , is stable — and the cofibre is a functor on it, as we explain below.
Example— Non-examples
- Pointed spaces : pointed, with all limits and colimits, but is not an equivalence ().
- Any non-zero ordinary category, such as abelian groups or even the triangulated category regarded as an ordinary category. Theorem 1 below shows that in an ordinary category with a zero object the 1-categorical loop object is always , so if fibre sequences were cofibre sequences every object would be zero. (In the square with corners commutes, but it is not a pullback in the ordinary category ; it is one only in the ∞-category .)
Central theorems
Theorem— Theorem 1 (stability is invisible to ordinary categories)
Let be an ordinary category with a zero object. Then for every object :
- the square with corners is a pullback, so the 1-categorical loop object is ; dually the 1-categorical suspension is ;
- if that square is also a pushout, then .
Consequently, if every fibre sequence in is a cofibre sequence, then every object of is zero. Since limits and colimits in the nerve are ordinary limits and colimits, no non-zero ordinary category is a stable ∞-category.
Proof
(1) A cone over is an object with two maps . There is exactly one map , and it factors both legs, because any two maps into a zero object are equal; so with its identity legs is a limit. Dually, a cocone under is a pair of maps , and the unique map is the unique factorisation.
(2) Suppose the square , is a pushout. The maps and agree after composing with each leg , because any two maps out of a zero object are equal. By the uniqueness part of the universal property of the pushout, , so is a zero object.
For the consequence, apply the hypothesis to the triangle with replaced by , , : it is a fibre sequence by (1), hence a cofibre sequence, hence by (2).
∎
In a stable ∞-category the same square, with corners , is both a pullback and a pushout, and is usually far from : in it is . The information lives in the homotopy that makes the square commute — two null-homotopies of the zero map , which together form a "loop" — and an ordinary category has no room for it.
Theorem— Theorem 2 (the homotopy category is additive; Lurie, Higher Algebra §1.1.2)
If is stable, then is additive: each is an abelian group, composition is bilinear, and finite products and coproducts exist and agree.
Proof
We prove the key point, that is naturally an abelian group, and refer to Lurie for bilinearity and biproducts.
The functor turns colimits in into limits of spaces. Applied to the pushout it gives a pullback of spaces . Since is contractible (with image the zero map), this is the loop space . Applying this twice,
which is an abelian group by the Eckmann–Hilton argument (see Higher categories). In a stable ∞-category is an equivalence with inverse , so every is for , and is an abelian group, naturally in and .
∎
Theorem— Theorem 3 (the homotopy category is triangulated; Lurie, Higher Algebra Theorem 1.1.2.14; stated)
Let be stable. Then , with shift functor and distinguished triangles the diagrams arising from a pair of pushout squares
(the outer rectangle is a pushout, so ), is a triangulated category: it satisfies Verdier's axioms TR1–TR4, including the octahedral axiom.
The axioms are inherited from the ∞-category: TR1 because cofibres exist; rotation (TR2) by pasting pushout squares; TR3 because any square in lifts to a square in and cofibres are functorial there; the octahedral axiom (TR4) by taking cofibres of a composable pair, a diagram of shape , all at once. The long exact sequences of a triangulated category are the shadows of the long exact sequences of homotopy groups of the fibre sequences of mapping spaces .
Theorem— Theorem 4 (cofibres are functorial; stated)
In a stable ∞-category (indeed in any pointed ∞-category with cofibres) there is a functor sending a morphism to its cofibre, well defined up to a contractible space of choices.
The reason: cofibre sequences are left Kan extensions (colimits), and the ∞-category of cofibre sequences maps to by a trivial fibration (Lurie, Higher Topos Theory, §4.3.2). The crucial difference from TR3 is the source category: a morphism in from to is not just a pair with in , but a pair together with a chosen homotopy . Different homotopies induce different maps on cofibres.
Example— Cones are not functorial in a triangulated category — and how the homotopy fixes it
Let be a field and work in , with the distinguished triangles
( is a rotation of the contractible triangle ; is the cone triangle of .) Take and ; the square commutes trivially. A morphism of triangles needs with and . Here and , so both conditions say : every , , completes the square. The map on cones is not determined.
In , the square comes with a homotopy between two maps (both zero). Homotopies from the zero map to itself form the loop space , whose components are . At the level of chain complexes, is a degree-one map (from to ), the induced map on mapping cones is , and on it is multiplication by . So each choice of homotopy picks out exactly one of the many TR3 fillers — the experiment below computes this with exact arithmetic.
Theorem— Theorem 5 (enhancements; stated)
- For a ring (more generally a Grothendieck abelian category), the classical derived category is the homotopy category of the stable ∞-category (Lurie, Higher Algebra, §1.3).
- Not every triangulated category is the homotopy category of a stable ∞-category: Muro, Schwede and Strickland (2007) constructed triangulated categories with no model.
- Enhancements can be unique: Schwede's rigidity theorem (2007) shows that any stable model category whose homotopy category is equivalent to the stable homotopy category, as a triangulated category, is Quillen equivalent to spectra; Lunts and Orlov (2010) and Canonaco and Stellari (2018) proved uniqueness of dg-enhancements for many derived categories of geometric origin.
The landscape: what is known and what is open
Established. Stable ∞-categories are the standard setting for modern homological algebra and stable homotopy theory (Lurie, Higher Algebra, Chapter 1): t-structures and their abelian hearts, the derived ∞-categories of abelian categories, Brown representability, and the comparison with pretriangulated dg-categories, which over a field are equivalent, as a homotopy theory, to -linear stable ∞-categories (Cohn, 2013). Algebraic K-theory has a universal characterisation as an invariant of small stable ∞-categories (Blumberg, Gepner and Tabuada, 2013), resolving the third defect of the motivation. Spectral algebraic geometry, noncommutative motives and the study of localising invariants (K-theory, topological Hochschild and cyclic homology) are built on this foundation.
Known limits. There are triangulated categories without enhancements (Theorem 5), and triangulated categories with several inequivalent enhancements are known; when an enhancement is unique is understood in important cases but not in general.
Open problems that live here. Many central open problems of stable homotopy theory are statements about the stable ∞-category of spectra: the structure of the stable homotopy groups of spheres (computed only in a finite range), and questions in chromatic homotopy theory about localisations of . Classifying the "thick subcategories" of a stable ∞-category, as Hopkins and Smith did for finite spectra (1998), is open for most examples.
What Lean can say: the 1-categorical shadow
Mathlib has no stable ∞-categories (and no spectra as an ∞-category), but it has substantial triangulated-category theory: pretriangulated and triangulated categories with Verdier's axioms, the homotopy category of complexes and the derived category of an abelian category as triangulated categories, and t-structures. The formal side of this lesson therefore does two things: it proves Theorem 1 — why stability cannot happen in an ordinary category — and it records the triangulated shadow.
Theorem 1, from the definitions of pullbacks and pushouts in Mathlib (IsPullback, IsPushout). The proofs are those of the lesson: maps into or out of a zero object are unique (IsZero.eq_of_tgt, IsZero.eq_of_src), and the uniqueness half of the pushout property (IsPushout.hom_ext) forces 𝟙 X = 0:
/-- In an ordinary category with a zero object, the **loop object** `ΩX = 0 ×_X 0` is zero:
the square with three corners `0` and fourth corner `X` is a pullback. Proof: a cone over
`0 ⟶ X ⟵ 0` is an object `W` with two maps `W ⟶ 0`; there is exactly one map `W ⟶ 0`, and it
factors both legs because all maps into a zero object are equal. In a stable ∞-category,
by contrast, `ΩX` is the shift `X[-1]`, and the square commutes only *via a homotopy*, which
is where the information lives. -/
theorem loop_square_isPullback (X : C) :
IsPullback (0 : (0 : C) ⟶ 0) (0 : (0 : C) ⟶ 0) (0 : (0 : C) ⟶ X) (0 : (0 : C) ⟶ X) := by
refine IsPullback.of_isLimit (c := PullbackCone.mk (0 : (0 : C) ⟶ 0) (0 : (0 : C) ⟶ 0)
(by simp)) ?_
refine PullbackCone.IsLimit.mk _ (fun _ => 0) ?_ ?_ ?_
· intro s; exact (isZero_zero C).eq_of_tgt _ _
· intro s; exact (isZero_zero C).eq_of_tgt _ _
· intro s m _ _; exact (isZero_zero C).eq_of_tgt _ _/-- Dually, the **suspension** `ΣX = 0 ⊔_X 0` of an object of an ordinary category with a zero
object is zero: the square with corner `X` and three corners `0` is a pushout. (All maps out
of a zero object are equal.) In a stable ∞-category `ΣX` is the shift `X[1]`. -/
theorem suspension_square_isPushout (X : C) :
IsPushout (0 : X ⟶ (0 : C)) (0 : X ⟶ (0 : C)) (0 : (0 : C) ⟶ 0) (0 : (0 : C) ⟶ 0) := by
refine IsPushout.of_isColimit (c := PushoutCocone.mk (0 : (0 : C) ⟶ 0) (0 : (0 : C) ⟶ 0)
(by simp)) ?_
refine PushoutCocone.IsColimit.mk _ (fun _ => 0) ?_ ?_ ?_
· intro s; exact (isZero_zero C).eq_of_src _ _
· intro s; exact (isZero_zero C).eq_of_src _ _
· intro s m _ _; exact (isZero_zero C).eq_of_src _ _/-- If the loop square of `X` (three corners `0`, fourth corner `X`) were also a **pushout**,
then `X` would be zero. Proof: the maps `𝟙 X` and `0 : X ⟶ X` agree after both legs `0 ⟶ X`
(maps out of `0` are all equal), so by the uniqueness half of the pushout property they are
equal; and `𝟙 X = 0` means `X` is a zero object. -/
theorem isZero_of_loop_square_isPushout (X : C)
(h : IsPushout (0 : (0 : C) ⟶ 0) (0 : (0 : C) ⟶ 0) (0 : (0 : C) ⟶ X) (0 : (0 : C) ⟶ X)) :
IsZero X := by
rw [IsZero.iff_id_eq_zero]
exact h.hom_ext ((isZero_zero C).eq_of_src _ _) ((isZero_zero C).eq_of_src _ _)/-- **No non-trivial ordinary category is stable.** Suppose that in a category with a zero object
every *fibre sequence* is a *cofibre sequence*: every pullback square
`P ⟶ 0, P ⟶ B, 0 ⟶ Z, B ⟶ Z` is also a pushout square. Then every object is zero. Proof: apply
the hypothesis to the loop square of `X`, which is a pullback (`loop_square_isPullback`), and
conclude with `isZero_of_loop_square_isPushout`. Since limits and colimits in the nerve of an
ordinary category are its ordinary limits and colimits, this is why stable ∞-categories must be
genuinely higher-categorical. -/
theorem stable_one_category_trivial
(fib_is_cofib : ∀ {P B Z : C} (snd : P ⟶ B) (g : B ⟶ Z),
IsPullback (0 : P ⟶ 0) snd (0 : 0 ⟶ Z) g → IsPushout (0 : P ⟶ 0) snd (0 : 0 ⟶ Z) g)
(X : C) : IsZero X :=
isZero_of_loop_square_isPushout X (fib_is_cofib _ _ (loop_square_isPullback X))The triangulated shadow. Mathlib states TR3 as existence of a fill, exactly as in Verdier's axioms — there is no uniqueness to state, as the worked example shows:
/-- Verdier's axiom TR3, as stated in Mathlib's class `CategoryTheory.Pretriangulated`
(`complete_distinguished_triangle_morphism`): a commutative square between the first two
terms of two distinguished triangles extends to a morphism of triangles. The axiom says
*there exists* a third map `c`; it says nothing about uniqueness, and in general `c` is not
unique. This is the "non-functoriality of cones" that stable ∞-categories repair. -/
theorem cone_fill_exists (T₁ T₂ : Triangle C) (h₁ : T₁ ∈ distTriang C)
(h₂ : T₂ ∈ distTriang C) (a : T₁.obj₁ ⟶ T₂.obj₁) (b : T₁.obj₂ ⟶ T₂.obj₂)
(comm : T₁.mor₁ ≫ b = a ≫ T₂.mor₁) :
∃ c : T₁.obj₃ ⟶ T₂.obj₃,
T₁.mor₂ ≫ c = b ≫ T₂.mor₂ ∧ T₁.mor₃ ≫ (shiftFunctor C (1 : ℤ)).map a = c ≫ T₂.mor₃ :=
complete_distinguished_triangle_morphism T₁ T₂ h₁ h₂ a b comm/-- In a distinguished triangle `X ⟶ Y ⟶ Z ⟶ X[1]`, the composite of the first two maps is zero.
(In the stable ∞-category, the composite is not just zero but *null-homotopic via a chosen
homotopy*, which is part of the data of the fibre sequence.) This is Mathlib's
`CategoryTheory.Pretriangulated.comp_distTriang_mor_zero₁₂`. -/
theorem comp_zero_12 (T : Triangle C) (hT : T ∈ distTriang C) : T.mor₁ ≫ T.mor₂ = 0 :=
comp_distTriang_mor_zero₁₂ T hT/-- The composite of the second and third maps of a distinguished triangle is zero too. Proof by
**rotation**: the rotated triangle `Y ⟶ Z ⟶ X[1] ⟶ Y[1]` is distinguished, and its first two
maps are the second and third maps of the original one. (Mathlib also has this as
`comp_distTriang_mor_zero₂₃`.) -/
theorem comp_zero_23 (T : Triangle C) (hT : T ∈ distTriang C) : T.mor₂ ≫ T.mor₃ = 0 :=
comp_distTriang_mor_zero₁₂ T.rotate (rot_of_distTriang T hT)/-- Maps into a distinguished triangle give exact sequences: if `f : W ⟶ Y` becomes zero in
`Z`, it lifts to `X`. In a stable ∞-category this is the shadow (on `π₀` of mapping spaces) of
the long exact sequence of homotopy groups of a fibre sequence of spectra. This is Mathlib's
`CategoryTheory.Pretriangulated.Triangle.coyoneda_exact₂`. -/
theorem coyoneda_exact (T : Triangle C) (hT : T ∈ distTriang C) {W : C} (f : W ⟶ T.obj₂)
(hf : f ≫ T.mor₂ = 0) : ∃ g : W ⟶ T.obj₁, f = g ≫ T.mor₁ :=
Triangle.coyoneda_exact₂ T hT f hf/-- The derived category `D(A)` of an abelian category is triangulated (Verdier's axioms,
including the octahedral axiom). In the ∞-categorical picture, `D(A)` is the homotopy category of
the stable derived ∞-category. This is Mathlib's instance in
`Mathlib.Algebra.Homology.DerivedCategory.Basic`. -/
theorem derived_triangulated (A : Type*) [Category A] [Abelian A] [HasDerivedCategory A] :
IsTriangulated (DerivedCategory A) :=
inferInstanceWhat is not formalised. Stable ∞-categories themselves, spectra, Theorems 2–5, and the functoriality of cofibres need ∞-categorical limits and colimits, which Mathlib does not yet have for quasi-categories. The worked example of non-unique fills is checked computationally below rather than in Lean.
Mapping cones with exact arithmetic
The experiment represents chain complexes of finite-dimensional rational vector spaces by matrices of fractions. It builds mapping cones, checks , and confirms in three examples that a chain map is a quasi-isomorphism exactly when its cone is acyclic (the triangulated shadow of "a morphism is an equivalence iff its cofibre is zero"). Then it computes the worked example: for the square with it constructs, for each homotopy , the induced chain map of cones, checks that it is a chain map, and finds that it acts on as multiplication by .
"""Mapping cones of chain complexes, and why cones are not functorial.
Chain complexes of finite-dimensional rational vector spaces are a model for
the stable infinity-category D(Q): a morphism is a chain map, and a
commutative square up to homotopy is a square together with a chosen chain
homotopy. We compute exactly, with fractions:
1. the mapping cone Cone(f) of a chain map and its homology, checking that
f is a quasi-isomorphism exactly when Cone(f) is acyclic (three examples);
2. a square X -> Y, X' -> Y' with a = 0 and b = 0, together with a homotopy
h of degree +1. The induced map Cone(f) -> Cone(f') depends on h: with
X = Q[0], Y = 0, X' = 0, Y' = Q[1], every scalar h gives a chain map on cones
that acts on homology as multiplication by h. In the triangulated homotopy
category all of these squares are the same square (a = b = 0), so the map on
cones is not determined by the square: cones are not functorial. Remember
the homotopy, as a stable infinity-category does, and the map is determined.
Exact rational arithmetic on small examples; illustrative, not a proof.
"""
from fractions import Fraction
def zeros(rows, cols):
"""A rows x cols zero matrix of Fractions."""
return [[Fraction(0)] * cols for _ in range(rows)]
def matmul(a, b, inner, cols):
"""Product of an r x inner matrix and an inner x cols matrix (lists of
rows). Shapes are passed explicitly so that empty matrices work."""
return [[sum((a[i][k] * b[k][j] for k in range(inner)), Fraction(0))
for j in range(cols)] for i in range(len(a))]
def rank(m):
"""Rank of a matrix of Fractions, by Gaussian elimination."""
rows = [list(r) for r in m]
r = 0
cols = len(rows[0]) if rows else 0
for c in range(cols):
pivot = next((i for i in range(r, len(rows)) if rows[i][c] != 0), None)
if pivot is None:
continue
rows[r], rows[pivot] = rows[pivot], rows[r]
for i in range(len(rows)):
if i != r and rows[i][c] != 0:
factor = rows[i][c] / rows[r][c]
rows[i] = [x - factor * y for x, y in zip(rows[i], rows[r])]
r += 1
return r
class Complex:
"""A bounded chain complex: dims[n] = dim C_n, diff[n]: C_n -> C_(n-1)."""
def __init__(self, dims, diff=None):
self.dims = {n: d for n, d in dims.items() if d > 0}
self.diff = diff or {}
def dim(self, n):
return self.dims.get(n, 0)
def d(self, n):
"""The differential C_n -> C_(n-1) as a dim(n-1) x dim(n) matrix."""
if n in self.diff:
return self.diff[n]
return zeros(self.dim(n - 1), self.dim(n))
def degrees(self):
return range(min(self.dims, default=0) - 1, max(self.dims, default=0) + 2)
def is_complex(c):
"""Check d_(n-1) d_n = 0 in every degree."""
return all(rank(matmul(c.d(n - 1), c.d(n), c.dim(n - 1), c.dim(n))) == 0
for n in c.degrees() if c.dim(n) and c.dim(n - 2))
def betti(c):
"""Homology dimensions {n: dim H_n} (only nonzero ones)."""
out = {}
for n in c.degrees():
h = c.dim(n) - rank(c.d(n)) - rank(c.d(n + 1))
if h:
out[n] = h
return out
def block(top_left, top_right, bottom_left, bottom_right):
"""Assemble a 2 x 2 block matrix (blocks given as lists of rows)."""
top = [l + r for l, r in zip(top_left, top_right)]
bottom = [l + r for l, r in zip(bottom_left, bottom_right)]
return top + bottom
def neg(m):
return [[-x for x in row] for row in m]
def cone(f, x, y):
"""Mapping cone of f: X -> Y. Cone_n = X_(n-1) + Y_n with differential
(u, v) |-> (-d u, f u + d v). ``f[n]`` is the matrix Y_n x X_n."""
degrees = list(x.dims) + list(y.dims) + [0]
dims = {n: x.dim(n - 1) + y.dim(n)
for n in range(min(degrees), max(degrees) + 2)}
diff = {}
for n in dims:
fm = f.get(n - 1, zeros(y.dim(n - 1), x.dim(n - 1)))
diff[n] = block(neg(x.d(n - 1)), zeros(x.dim(n - 2), y.dim(n)),
fm, y.d(n))
return Complex(dims, diff)
def is_chain_map(f, x, y):
"""Check d_Y f_n = f_(n-1) d_X in every degree."""
get = lambda n: f.get(n, zeros(y.dim(n), x.dim(n)))
return all(matmul(y.d(n), get(n), y.dim(n), x.dim(n)) ==
matmul(get(n - 1), x.d(n), x.dim(n - 1), x.dim(n))
for n in x.degrees() if x.dim(n) and y.dim(n - 1))
def q(*rows):
"""A matrix of Fractions from integer rows."""
return [[Fraction(v) for v in row] for row in rows]
def mat(maps, n, rows, cols):
"""The degree-n component of a graded map, or the zero matrix."""
return maps.get(n, zeros(rows, cols))
def is_homotopy(h, a, b, f, f2, x, y, x2, y2):
"""Check b f - f' a = d h + h d, for h_n: X_n -> Y'_(n+1)."""
for n in x.degrees():
if not (x.dim(n) and y2.dim(n)):
continue
cols = x.dim(n)
bf = matmul(mat(b, n, y2.dim(n), y.dim(n)),
mat(f, n, y.dim(n), cols), y.dim(n), cols)
fa = matmul(mat(f2, n, y2.dim(n), x2.dim(n)),
mat(a, n, x2.dim(n), cols), x2.dim(n), cols)
dh = matmul(y2.d(n + 1), mat(h, n, y2.dim(n + 1), cols),
y2.dim(n + 1), cols)
hd = matmul(mat(h, n - 1, y2.dim(n), x.dim(n - 1)), x.d(n),
x.dim(n - 1), cols)
for i in range(y2.dim(n)):
for j in range(x.dim(n)):
if bf[i][j] - fa[i][j] != dh[i][j] + hd[i][j]:
return False
return True
def cone_map(a, b, h, x, y, x2, y2):
"""The chain map Cone(f) -> Cone(f') induced by a square (a, b) and a
homotopy h with b f - f' a = d h + h d: (u, v) |-> (a u, b v + h u)."""
out = {}
for n in range(min(x.degrees()[0], y.degrees()[0]),
max(x.degrees()[-1], y.degrees()[-1]) + 1):
out[n] = block(mat(a, n - 1, x2.dim(n - 1), x.dim(n - 1)),
zeros(x2.dim(n - 1), y.dim(n)),
mat(h, n - 1, y2.dim(n), x.dim(n - 1)),
mat(b, n, y2.dim(n), y.dim(n)))
return out
def square_example(h):
"""X = Q[0], Y = 0, X' = 0, Y' = Q[1], f = f' = 0, a = b = 0, and the
homotopy h: X_0 -> Y'_1 given by the scalar h. Returns (is the homotopy
valid, is the induced map a chain map of cones, its degree-1 matrix)."""
x, y, x2, y2 = Complex({0: 1}), Complex({}), Complex({}), Complex({1: 1})
f, f2, a, b = {}, {}, {}, {}
hom = {0: [[Fraction(h)]]}
phi = cone_map(a, b, hom, x, y, x2, y2)
cf, cf2 = cone(f, x, y), cone(f2, x2, y2)
return (is_homotopy(hom, a, b, f, f2, x, y, x2, y2),
is_chain_map(phi, cf, cf2), phi[1])
EXAMPLES = {
"Q[0] -> (Q =id=> Q), not a q-iso": (
Complex({0: 1}), Complex({1: 1, 0: 1}, {1: q([1])}), {0: q([1])}),
"Q[0] -> (Q -> Q^2), a q-iso": (
Complex({0: 1}), Complex({1: 1, 0: 2}, {1: q([1], [0])}),
{0: q([0], [1])}),
"(Q =2=> Q) -> 0, both acyclic": (
Complex({1: 1, 0: 1}, {1: q([2])}), Complex({}), {}),
}
def main():
print("1. Cones detect quasi-isomorphisms (homology dims as {degree: dim})")
for name, (x, y, f) in EXAMPLES.items():
c = cone(f, x, y)
print(f" {name}")
print(f" chain map: {is_chain_map(f, x, y)}, Cone d^2 = 0: "
f"{is_complex(c)}")
print(f" H(X) = {betti(x)}, H(Y) = {betti(y)}, "
f"H(Cone) = {betti(c)}")
print()
print("2. One square up to homotopy, many maps on cones")
print(" X = Q[0], Y = 0, X' = 0, Y' = Q[1], f = f' = 0, a = b = 0.")
print(" Homotopy h: X_0 -> Y'_1 (any scalar: d h + h d = 0 = b f - f' a).")
print(" Cone f = Q[1] = Cone f' (zero differentials), so H_1 = Cone_1.")
for h in [0, 1, 2, Fraction(-1, 3)]:
valid, chain, m = square_example(h)
print(f" h = {str(h):>4}: homotopy {valid}, chain map {chain}, "
f"map on H_1 = multiply by {m[0][0]}")
print(" In the homotopy category these are one square (a = b = 0), and each")
print(" map is a valid TR3 fill: the triangulated axioms cannot choose one.")
print()
print("Epistemic status: exact rational arithmetic on small, explicit")
print("complexes. It illustrates the general facts proved in the lesson")
print("(cones detect quasi-isomorphisms; maps of cones depend on homotopies)")
print("but checks only these examples.")
if __name__ == "__main__":
main()Explore: squares, triangles and fills
The loop square. In a stable ∞-category it is a pullback and a pushout with ; in an ordinary category, Theorem 1 forces the corner to be .
The worked example of non-functoriality. The top row is , the bottom row ; the dashed map can be multiplication by any scalar :
Things to check by hand: why does every square in this diagram commute, whatever is? Which of the six conditions would fail if the bottom-left object were instead of ? (Then becomes a genuine condition, and the ambiguity in is the image of , which can still be non-zero.)
Exercises
1. Stable ∞-categories
Warm-upHumanWhich of the following is the definition of a stable ∞-category?
2. Stable ∞-categories
Warm-upHumanIn , let be multiplication by , with both copies of in degree . How many elements does have?
3. Stable ∞-categories
CoreHumanPointed spaces form a pointed ∞-category with all limits and colimits. Which computation shows directly that it is not stable?
4. Stable ∞-categories
CoreHumanIn the proof that a pushout loop square forces in an ordinary category, we show . Which property of the pushout is used, and how?
5. Stable ∞-categories
CoreFormalIn stable_one_category_trivial, which hypothesis correctly formalises 'every fibre sequence is a cofibre sequence' for an ordinary category C with a zero object?
6. Stable ∞-categories
CoreHumanIn the worked example, work over the field . How many morphisms of triangles from to extend the square ?
7. Stable ∞-categories
StretchHumanWhy is an abelian group in a stable ∞-category?
8. Stable ∞-categories
StretchHumanWhich statements about enhancements of triangulated categories are true? (Choose all that apply.)
9. Stable ∞-categories
StretchComputationalA linear map is given by an matrix A (a list of n rows). Viewed as a map of complexes in degree 0, its cofibre is the complex in degrees 1 and 0. Using the provided rank, write cone_homology(A, m, n) returning (dim H_1, dim H_0) of the cofibre.
Common misconceptions
Misconception
"Stable ∞-categories are triangulated categories under a new name." A stable ∞-category carries strictly more information: functorial cones, homotopy limits and colimits, and mapping spaces rather than mapping groups. Some triangulated categories have no stable ∞-categorical enhancement at all (Muro–Schwede–Strickland), and invariants such as algebraic K-theory depend on the enhancement (Schlichting).
Misconception
"A triangulation is a property of a category, like stability." The other way round: stability is a property of an ∞-category (fibre sequences coincide with cofibre sequences), while a triangulation is structure on an additive category (a shift functor and a chosen class of triangles), and one category can carry different triangulations.
Misconception
"The cofibre of is its cokernel." In , the cofibre of a map of modules (viewed as complexes in degree 0) is the two-term complex in degrees 1 and 0, with and . It is the cokernel only when is injective, and the kernel (shifted) only when is surjective.
Misconception
"An abelian category is stable because it has kernels and cokernels." By Theorem 1, no non-zero ordinary category is stable. Abelian categories appear inside stable ∞-categories differently: as hearts of t-structures, for example as the complexes with homology only in degree .
Many ways of seeing
Topology— Spectra and generalised cohomology
Stability first appeared in topology. The Freudenthal suspension theorem (1937) says that is independent of once : in a stable range, suspension is an isomorphism. Brown's representability theorem (1962) says that every generalised cohomology theory — ordinary cohomology, K-theory, cobordism — is represented by a spectrum , with . In the stable ∞-category these become structural facts: is an equivalence, and a cohomology theory is an exact functor out of spectra. See Stable homotopy theory.
Algebra— Homological algebra without choices
For an algebraist, a stable ∞-category is the right home for derived functors. In the derived tensor product and derived Hom are functors of ∞-categories, the mapping cone is functorial (Theorem 4), and the long exact sequences of and are homotopy groups of fibre sequences of mapping spectra. Abelian categories reappear as hearts of t-structures, and . The mapping-cone computation of the worked example is exactly the chain-level construction that dg-categories (Bondal–Kapranov, Keller) keep and triangulated categories forget. See Derived categories and Homological algebra.
Geometry— Derived categories of varieties
Algebraic geometers study a variety through the stable ∞-category of (quasi-)coherent sheaves on it. Mukai (1981) showed that an abelian variety and its dual have equivalent derived categories, although they need not be isomorphic; Bondal and Orlov (2001) showed that a smooth projective variety with ample or anti-ample canonical bundle is determined by its derived category. Equivalences between derived categories of varieties are given by Fourier–Mukai kernels, and the ∞-categorical setting is what makes this precise in general: by a theorem of Ben-Zvi, Francis and Nadler (2010), for well-behaved derived stacks the colimit-preserving functors between their ∞-categories of quasi-coherent sheaves are exactly given by kernels on the product. Stable ∞-categories also glue along open covers, which triangulated categories cannot. See Algebraic geometry.
Physics— Branes and homological mirror symmetry
In topological string theory, boundary conditions ("D-branes") and the open strings between them form a category whose morphism spaces are graded and only defined up to homotopy; bound states of branes are cones. Kontsevich's homological mirror symmetry conjecture (ICM 1994) proposes that, for mirror pairs of Calabi–Yau manifolds and , the derived category of coherent sheaves on is equivalent to a derived Fukaya category of — an equivalence of triangulated categories that is naturally an equivalence of / stable ∞-categories. It has been proved in important cases (the elliptic curve by Polishchuk and Zaslow, 1998; the quartic surface by Seidel). The physical picture is heuristic; the mathematical statements are theorems or conjectures about stable ∞-categories. See Symplectic geometry.
Category theory— Stability as a universal property
Categorically, stability is a completion: every pointed ∞-category with finite limits has a stabilisation , universal among stable ∞-categories mapping to it, just as abelianisation is universal among abelian groups. Spectra are the stabilisation of spaces; Goodwillie's calculus of functors approximates a functor by a tower of "-excisive" functors whose first stage is built from stabilisation, much as a Taylor series starts with the derivative. And stable ∞-categories are to spectra what additive categories are to abelian groups: every stable ∞-category is canonically enriched, in a homotopy-coherent sense, in spectra, just as every additive category is enriched in abelian groups.
History and global context
- 1930s–1960s: stable phenomena in topology. Hans Freudenthal (Netherlands) proved the suspension theorem (1937); Dieter Puppe (Germany) introduced the cofibre sequences now named after him (1958); Edgar Brown (USA) proved representability (1962); Michael Boardman (UK) constructed the stable homotopy category (1960s), and J. F. Adams's Stable Homotopy and Generalised Homology (1974) made it standard.
- 1960s: triangulated and derived categories. Jean-Louis Verdier, a student of Grothendieck in Paris, axiomatised triangulated categories and constructed derived categories (thesis 1967, published in full only in 1996), to support Grothendieck's duality theory; Puppe independently formulated similar axioms.
- 1980s–1990s: enhancements. Alexei Bondal and Mikhail Kapranov (Russia) introduced enhanced triangulated categories via dg-categories (1990); Bernhard Keller developed the theory of dg-categories; Amnon Neeman (Australia) wrote the standard text on triangulated categories (2001); Shigeru Mukai (Japan) and Dmitri Orlov (Russia) made derived categories central to algebraic geometry; models for spectra with a good smash product were constructed by Elmendorf, Kriz, Mandell and May (1997) and by Hovey, Shipley and Smith (2000).
- 2000s: stable ∞-categories. Jacob Lurie's "Stable infinity categories" (2006) and Higher Algebra defined stable ∞-categories and proved that their homotopy categories are triangulated; Blumberg, Gepner and Tabuada characterised K-theory on them (2013).
Further reading
A suggested path: Groth's short course for the definitions; Lurie's Higher Algebra, Chapter 1, for the theory; Neeman and Krause for the triangulated side; Keller for dg-categories.
- Jacob Lurie, Higher Algebra (book-length manuscript distributed by the author), Chapter 1, "Stable ∞-categories".
- Jacob Lurie, Higher Topos Theory (2009), Chapters 1–4.
- Moritz Groth, "A short course on ∞-categories", in Handbook of Homotopy Theory (2020).
- Amnon Neeman, Triangulated Categories (2001).
- Henning Krause, Homological Theory of Representations (2021).
- Bernhard Keller, "On differential graded categories", Proceedings of the ICM 2006.
- Andrew Blumberg, David Gepner and Gonçalo Tabuada, "A universal characterization of higher algebraic K-theory", Geometry & Topology 17 (2013).
- J. F. Adams, Stable Homotopy and Generalised Homology (1974).