Skip to content
The Lumenary
Research pathwaysResearch (graduate background) 130 min

∞-categories

Categories in which composition is defined only up to a contractible space of choices — modelled by simplicial sets in which inner horns can be filled.

Formally verified · 10 LeanComputationally tested · 1 PythonAI-drafted · awaiting human reviewMathematically reviewed: Awaiting human review
MotivationH

Why the homotopy category is not enough

Homotopy theory studies spaces up to homotopy equivalence, chain complexes up to quasi-isomorphism, and many similar situations where "sameness" is weaker than isomorphism. The classical move is to pass to a homotopy category: keep the objects and replace morphisms by homotopy classes. This is useful, but it throws away essential information.

  • Homotopy colimits are not colimits in the homotopy category. Gluing two discs along their boundary circle gives S2S^2, the homotopy pushout of ∗←S1→∗* \leftarrow S^1 \rightarrow *. Every map S2→YS^2 \to Y restricts to null-homotopic maps on the two discs, so in the homotopy category all maps S2→YS^2 \to Y look the same on the pieces — yet for simply connected YY their homotopy classes correspond to the elements of π2(Y)\pi_2(Y). The missing information is which homotopy glues the pieces along the circle. In fact the homotopy category of spaces does not have all pushouts.
  • Constructions are not functorial. In a triangulated category the cone of a morphism is unique only up to non-unique isomorphism (see Stable ∞-categories).
  • Gluing fails. Derived categories of sheaves on the pieces of an open cover cannot, in general, be glued to the derived category of the whole space at the level of triangulated categories.

The cure is to remember the homotopies, the homotopies between homotopies, and so on: an (∞,1)(\infty, 1)-category has objects, morphisms, 2-morphisms between morphisms, 3-morphisms, …, with all kk-morphisms for k≥2k \ge 2 invertible. Concretely, between any two objects there is a space of morphisms, and composition is defined up to a contractible space of choices. This lesson builds the most widely used model, quasi-categories (Boardman and Vogt's weak Kan complexes, developed by Joyal and Lurie), which are special simplicial sets. It assumes Higher categories and Algebraic topology.

IntuitionH

Triangles that witness composition

In a category, h=g∘fh = g \circ f is a property of three morphisms. In an ∞-category it is data: a 2-dimensional cell σ\sigma with boundary ff, gg, hh, a "witness" (or homotopy) that hh is a composite of ff and gg. Witnesses for associativity are 3-dimensional cells, and so on. Simplices are the natural shapes for this bookkeeping: a 2-simplex is a triangle with edges f:x0→x1f : x_0 \to x_1, g:x1→x2g : x_1 \to x_2, h:x0→x2h : x_0 \to x_2.

012fghσ012f?h
Left: an inner horn Λ²₁ — two composable edges f and g. Filling it means choosing a composite h together with a triangle σ witnessing it. Right: an outer horn Λ²₀ — edges f and h out of the same vertex. Filling it means finding g with g∘f = h, i.e. dividing by f, which is possible for all f only when f can be inverted.

This picture explains the whole definition. A Kan complex is a simplicial set in which every horn can be filled: a model for spaces, or ∞-groupoids, where every morphism is invertible up to homotopy. A quasi-category asks only for inner horns to be filled: composites always exist, but morphisms need not be invertible. Fillers are not required to be unique — only, as we shall see, unique up to a contractible space of choices.

DefinitionsH

Simplicial sets, horns and quasi-categories

Definition— simplex category and simplicial set

The simplex category Δ\Delta has objects the finite ordinals [n]={0<1<⋯<n}[n] = \{0 < 1 < \dots < n\} for n≥0n \ge 0 and morphisms the order-preserving maps. A simplicial set is a functor X:Δop→SetX : \Delta^{\mathrm{op}} \to \mathbf{Set}. We write Xn=X([n])X_n = X([n]) for the set of nn-simplices, di:Xn→Xn−1d_i : X_n \to X_{n-1} for the face maps (induced by the injection [n−1]→[n][n-1] \to [n] that skips ii) and si:Xn→Xn+1s_i : X_n \to X_{n+1} for the degeneracy maps (induced by the surjection [n+1]→[n][n+1] \to [n] that repeats ii). A simplex is degenerate if it is in the image of some sis_i.

Definition— standard simplex, boundary and horn

The standard nn-simplex is the representable simplicial set Δ[n]=HomΔ(−,[n])\Delta[n] = \mathrm{Hom}_\Delta(-, [n]). By the Yoneda lemma, maps Δ[n]→X\Delta[n] \to X correspond to nn-simplices of XX. The boundary ∂Δ[n]⊂Δ[n]\partial\Delta[n] \subset \Delta[n] is the union of the faces diΔ[n]d_i\Delta[n], and for 0≤k≤n0 \le k \le n the horn Λkn⊂Δ[n]\Lambda^n_k \subset \Delta[n] is the union of all faces except the kk-th. A horn is inner if 0<k<n0 < k < n and outer if k=0k = 0 or k=nk = n. A map Λkn→X\Lambda^n_k \to X is a family of (n−1)(n-1)-simplices (xi)i≠k(x_i)_{i \ne k} with dixj=dj−1xid_i x_j = d_{j-1} x_i for all i<ji < j with i,j≠ki, j \ne k. A filler is an nn-simplex xx with dix=xid_i x = x_i for i≠ki \ne k.

Definition— Kan complex and quasi-category

A simplicial set XX is a Kan complex if every horn Λkn→X\Lambda^n_k \to X (n≥1n \ge 1, 0≤k≤n0 \le k \le n) has a filler, and a quasi-category (or ∞-category, in Joyal and Lurie's terminology) if every inner horn Λkn→X\Lambda^n_k \to X (0<k<n0 < k < n) has a filler.

Definition— nerve and singular complex

The nerve N(C)N(\mathcal{C}) of a category has N(C)n=N(\mathcal{C})_n = the set of functors [n]→C[n] \to \mathcal{C}, that is, strings c0→c1→⋯→cnc_0 \to c_1 \to \dots \to c_n of nn composable morphisms; did_i composes at cic_i (or drops c0c_0 or cnc_n), and sis_i inserts an identity. The singular complex Sing(T)\mathrm{Sing}(T) of a topological space has Sing(T)n=\mathrm{Sing}(T)_n = the set of continuous maps ∣Δn∣→T|\Delta^n| \to T from the topological nn-simplex.

Definition— objects, morphisms and homotopy in a quasi-category

Let XX be a quasi-category. Its objects are its vertices; a morphism f:x→yf : x \to y is an edge with d1f=xd_1 f = x and d0f=yd_0 f = y; the identity of xx is s0xs_0 x. Two morphisms f,f′:x→yf, f' : x \to y are homotopic, f≃f′f \simeq f', if there is a 2-simplex σ\sigma with d2σ=fd_2 \sigma = f, d1σ=f′d_1 \sigma = f' and d0σ=idyd_0 \sigma = \mathrm{id}_y. Given f:x→yf : x \to y and g:y→zg : y \to z, a composite of gg and ff is any edge h=d1σh = d_1\sigma where σ\sigma fills the inner horn (d0,d2)=(g,f)(d_0, d_2) = (g, f).

Definition— homotopy category

The homotopy category hXhX of a quasi-category XX has the vertices of XX as objects and homotopy classes of morphisms as morphisms, with [g]∘[f]=[h][g] \circ [f] = [h] for any composite hh of gg and ff. A morphism of XX is an equivalence if its class is an isomorphism in hXhX.

Worked examplesH

Examples and non-examples

Example— Nerves: quasi-categories with unique fillers

In N(C)N(\mathcal{C}) a horn Λ12\Lambda^2_1 is a composable pair (f,g)(f, g), and its only filler is the string (f,g)(f, g) itself, whose long edge is g∘fg \circ f. Theorem 1 below shows that every inner horn in a nerve has exactly one filler. Outer horns are another matter: a horn Λ02\Lambda^2_0 given by f:x0→x1f : x_0 \to x_1 and h:x0→x2h : x_0 \to x_2 fills exactly when there is gg with g∘f=hg \circ f = h. In a groupoid take g=h∘f−1g = h \circ f^{-1}; in the poset [1]={0<1}[1] = \{0 < 1\} the horn with f:0→1f : 0 \to 1 and h=id0h = \mathrm{id}_0 has no filler, since there is no morphism 1→01 \to 0.

Example— Singular complexes: Kan complexes

For any space TT, Sing(T)\mathrm{Sing}(T) is a Kan complex: a horn is a continuous map from a union of faces of ∣Δn∣|\Delta^n|, and there is a retraction ∣Δn∣→∣Λkn∣|\Delta^n| \to |\Lambda^n_k| along which it extends. Its homotopy category is the fundamental groupoid Π1(T)\Pi_1(T): objects are points, and morphisms are homotopy classes of paths relative to their endpoints. Sing(T)\mathrm{Sing}(T) is not a nerve once TT has a non-constant path: "concatenate at the midpoint" and "concatenate at time one third" give different edges, and both are long edges of fillers of the same inner horn.

Example— Simplicial groups

Every simplicial group (a functor Δop→Grp\Delta^{\mathrm{op}} \to \mathbf{Grp}) is a Kan complex (Moore). Through the Dold–Kan correspondence, simplicial abelian groups are equivalent to chain complexes concentrated in non-negative degrees, so chain complexes give a large supply of Kan complexes whose homotopy groups are homology groups.

Example— Non-examples

  • The horn Λ12\Lambda^2_1 itself, viewed as a simplicial set, is not a quasi-category: the identity map Λ12→Λ12\Lambda^2_1 \to \Lambda^2_1 is an inner horn with no filler (there is no non-degenerate 2-simplex, and the long edge is missing).
  • The boundary ∂Δ[2]\partial \Delta[2] is not a quasi-category: the inner horn Λ12↪∂Δ[2]\Lambda^2_1 \hookrightarrow \partial\Delta[2] would need a 2-simplex of ∂Δ[2]\partial\Delta[2] with three distinct vertices, and every 2-simplex of ∂Δ[2]\partial\Delta[2] is degenerate. (The long edge exists but nothing witnesses that it is a composite.)
  • N([1])N([1]) is a quasi-category (a nerve) but not a Kan complex (an outer horn fails, as above). This is proved in Lean below.
ProofH

Central theorems

Theorem— Theorem 1 (nerves and unique fillers)

A simplicial set is isomorphic to the nerve of a category if and only if every inner horn Λkn→X\Lambda^n_k \to X (0<k<n0 < k < n) has a unique filler. In particular, nerves are quasi-categories.

Proof

We prove that nerves have unique inner fillers, and sketch the converse.

Spines. An nn-simplex of N(C)N(\mathcal{C}) is a functor [n]→C[n] \to \mathcal{C}, which is determined by its spine: the objects c0,…,cnc_0, \dots, c_n and the nn arrows ci−1→cic_{i-1} \to c_i (all other arrows ci→cjc_i \to c_j are composites). So two simplices of the nerve with the same spine are equal.

Uniqueness. Let 0<k<n0 < k < n and let h:Λkn→N(C)h : \Lambda^n_k \to N(\mathcal{C}) be a horn. Each spine edge {i−1,i}\{i-1, i\} of Δ[n]\Delta[n] lies in a face djΔ[n]d_j\Delta[n] with j∉{i−1,i}j \notin \{i-1, i\} and j≠kj \ne k: for n=2n = 2, k=1k = 1 the edges {0,1}\{0,1\} and {1,2}\{1,2\} lie in d2d_2 and d0d_0; for n≥3n \ge 3 there are at least two vertices outside {i−1,i}\{i-1, i\}, and one of them differs from kk. So hh determines the whole spine, and any two fillers have the same spine; hence there is at most one filler.

Existence. Let xx be the nn-simplex whose spine is the one determined by hh. We must show djx=hjd_j x = h_j for every j≠kj \ne k; since both are simplices of the nerve, it suffices to compare spines. If j=0j = 0 or j=nj = n, the spine of djxd_j x consists of spine edges of xx, which agree with hh. If 0<j<n0 < j < n, the spine of djxd_j x also contains the edge {j−1,j+1}\{j-1, j+1\}, which in xx is the composite of the edges {j−1,j}\{j-1, j\} and {j,j+1}\{j, j+1\}. In hh this edge is also that composite, because the triangle {j−1,j,j+1}\{j-1, j, j+1\} lies in the horn: it is contained in a face dmΔ[n]d_m\Delta[n] with m∉{j−1,j,j+1}m \notin \{j-1, j, j+1\} and m≠km \ne k (for n≥4n \ge 4 there are at least two choices of mm; for n=3n = 3 the only choice is m∈{0,3}m \in \{0, 3\}, which is not kk because kk is inner; for n=2n = 2 the case 0<j<n0 < j < n, j≠kj \neq k does not occur), and hh restricted to it is a 2-simplex of the nerve, that is, a commuting triangle. So djxd_j x and hjh_j have the same spine, and are equal.

Converse (sketch). If every inner horn of XX has a unique filler, define a category with objects X0X_0, morphisms X1X_1, identities s0xs_0 x, and g∘f:=g \circ f := the long edge of the unique filler of the horn (f,g)(f, g). The unit laws come from degenerate 2-simplices, and associativity from unique fillers of Λ13\Lambda^3_1 (or Λ23\Lambda^3_2): the four faces of the filling 3-simplex show that the two bracketings agree. Unique filling in higher dimensions then shows by induction that every simplex of XX is determined by its spine, which identifies XX with the nerve. (Details: Lurie, Higher Topos Theory, §1.1.2, or Joyal's notes.)

∎

Theorem— Theorem 2 (composites are unique up to homotopy)

Let XX be a quasi-category, f:x→yf : x \to y and g:y→zg : y \to z. If hh and h′h' are both composites of gg and ff, then h≃h′h \simeq h'.

Proof

Let σ\sigma and σ′\sigma' be 2-simplices with (d2,d0,d1)(d_2, d_0, d_1) equal to (f,g,h)(f, g, h) and (f,g,h′)(f, g, h'). Build a horn Λ13→X\Lambda^3_1 \to X on vertices x,y,z,zx, y, z, z by prescribing three faces:

  • d3=σd_3 = \sigma on vertices {0,1,2}\{0, 1, 2\}, with edges ff, gg, hh;
  • d2=σ′d_2 = \sigma' on vertices {0,1,3}\{0, 1, 3\}, with edges ff, gg, h′h';
  • d0=s1gd_0 = s_1 g on vertices {1,2,3}\{1, 2, 3\}, the degenerate 2-simplex with edges gg, idz\mathrm{id}_z, gg (by the simplicial identities d2s1g=d1s1g=gd_2 s_1 g = d_1 s_1 g = g and d0s1g=s0d0g=idzd_0 s_1 g = s_0 d_0 g = \mathrm{id}_z).

They agree on shared edges: {0,1}\{0, 1\} is ff in σ\sigma and σ′\sigma'; {1,2}\{1, 2\} is gg in σ\sigma and s1gs_1 g; {1,3}\{1, 3\} is gg in σ′\sigma' and s1gs_1 g. The horn Λ13\Lambda^3_1 is inner, so it has a filler τ\tau. Its missing face d1τd_1 \tau, on vertices {0,2,3}\{0, 2, 3\}, has edges d2=hd_2 = h (edge {0,2}\{0,2\}), d0=idzd_0 = \mathrm{id}_z (edge {2,3}\{2, 3\}) and d1=h′d_1 = h' (edge {0,3}\{0, 3\}): by definition it is a homotopy h≃h′h \simeq h'.

∎

Arguments of the same kind, with other horns Λ13\Lambda^3_1 and Λ23\Lambda^3_2, show that ≃\simeq is an equivalence relation and that composition of homotopy classes is well defined, associative and unital (Boardman and Vogt, 1973; Joyal). So hXhX is a category. For a nerve, hN(C)≅Ch N(\mathcal{C}) \cong \mathcal{C}; for Sing(T)\mathrm{Sing}(T), h Sing(T)≅Π1(T)h\,\mathrm{Sing}(T) \cong \Pi_1(T). The functor X↦hXX \mapsto hX is left adjoint to the nerve.

Theorem— Theorem 3 (Joyal; stated)

A simplicial set XX is a quasi-category if and only if the restriction map Fun(Δ[2],X)→Fun(Λ12,X)\mathrm{Fun}(\Delta[2], X) \to \mathrm{Fun}(\Lambda^2_1, X) is a trivial Kan fibration.

Here Fun(A,X)\mathrm{Fun}(A, X) is the simplicial set of maps A×Δ[n]→XA \times \Delta[n] \to X. The fibre over a composable pair (f,g)(f, g) is the space of all pairs (composite, witnessing 2-simplex), and the theorem says it is contractible (non-empty, connected, with trivial higher homotopy). This is the precise meaning of "composition is defined up to a contractible space of choices". See Lurie, Higher Topos Theory, §2.3, where it is attributed to Joyal.

Theorem— Theorem 4 (Joyal, 2002; stated)

A quasi-category XX is a Kan complex if and only if its homotopy category hXhX is a groupoid.

So Kan complexes are exactly the ∞-categories in which every morphism is an equivalence: ∞-groupoids. One direction is easy to believe from the picture of outer horns: filling Λ02\Lambda^2_0 produces left inverses up to homotopy. The converse — that homotopy invertibility of edges forces all outer horns in all dimensions to fill — is Joyal's theorem ("Quasi-categories and Kan complexes", J. Pure Appl. Algebra 175, 2002).

Theorem— Theorem 5 (the homotopy hypothesis for Kan complexes; stated)

Geometric realisation and the singular complex form a Quillen equivalence between simplicial sets with the Kan–Quillen model structure (fibrant objects: Kan complexes) and topological spaces (Quillen, 1967). Consequently the homotopy theory of Kan complexes is equivalent to the homotopy theory of CW complexes.

This is the established, precise form of Grothendieck's homotopy hypothesis, "∞-groupoids are spaces", for one particular definition of ∞-groupoid. For other definitions (algebraic weak ∞-groupoids in the style of Batanin or Grothendieck) the corresponding statement is a guiding principle, proved in some cases and open in others.

Theorem— Theorem 6 (models of (∞,1)-categories; stated)

The following model categories are connected by chains of Quillen equivalences: quasi-categories (Joyal's model structure on simplicial sets), complete Segal spaces (Rezk, 2001), Segal categories, and simplicial categories (Bergner's model structure). The comparisons are due to Joyal and Tierney (2007), Bergner (2007) and Lurie (Higher Topos Theory, 2009), the last via the homotopy coherent nerve of Cordier.

Toën (2005) characterised the homotopy theory of (∞,1)(\infty, 1)-categories axiomatically, so that any model satisfying his axioms is equivalent to these. This is why results proved in one model can be used in another, and why Riehl and Verity can develop ∞-category theory "model-independently" in an ∞-cosmos.

ExplanationH

The landscape: what is known and what is open

Established. Inside quasi-categories, Joyal and Lurie developed the main tools of category theory: joins and slices, limits and colimits, adjunctions, Kan extensions, the Yoneda lemma, presentable ∞-categories and ∞-topoi, and the straightening–unstraightening equivalence (an ∞-categorical Grothendieck construction) (Lurie, Higher Topos Theory, 2009; Cisinski, 2019; Riehl–Verity, 2022; Lurie's online Kerodon). This machinery underlies Lurie's Higher Algebra (stable ∞-categories, EnE_n-algebras), derived and spectral algebraic geometry (Toën–Vezzosi; Lurie), modern algebraic K-theory, factorization homology and much of contemporary homotopy theory.

Established but subtle. The ∞-categorical Yoneda lemma and the existence of (co)limits are theorems, but their proofs in quasi-categories are long; the same statements are short in an ∞-cosmos (Riehl–Verity), at the price of building the framework first.

Open or in progress.

  • (∞,n)(\infty, n)-categories. There are many models (Rezk's Θn\Theta_n-spaces, nn-fold complete Segal spaces, complicial sets, …), and Barwick and Schommer-Pries (2021) gave axioms that characterise the homotopy theory of (∞,n)(\infty, n)-categories up to equivalence; comparison of all proposed models is ongoing.
  • Synthetic and formal foundations. Riehl and Shulman (2017) proposed a simplicial homotopy type theory in which ∞-categories are types with a "Segal" property; developing it fully, and formalising ∞-category theory in proof assistants (Mathlib has quasi-categories, nerves and the homotopy category; a community project is formalising Riehl–Verity's ∞-cosmoi in Lean), are active, open-ended projects.
  • Weak ∞-groupoids and the homotopy hypothesis for algebraic definitions of ∞-groupoid (Theorem 5 and the remark after it).
Formal mathematicsF

Quasi-categories in Lean and Mathlib

Mathlib defines simplicial sets (SSet), standard simplices Δ[n], horns Λ[n, i], Kan complexes (as fibrant objects of the Kan–Quillen model structure) and quasi-categories (SSet.Quasicategory, inner horn filling). It proves that Kan complexes are quasi-categories and that nerves are quasi-categories (via the strict Segal condition: simplices are determined by spines, as in Theorem 1), and it constructs the homotopy category functor, left adjoint to the nerve. In Mathlib the nerve composes diagrammatically: the 2-simplex with edges f:x0→x1f : x_0 \to x_1, g:x1→x2g : x_1 \to x_2, h:x0→x2h : x_0 \to x_2 (an Edge.CompStruct) witnesses f ≫ g = h, which is g∘f=hg \circ f = h.

The definition, unfolded, and the two basic library facts:

quasicategory_iffLean 4Proved here from basic factsFormally verified
/-- **What a quasi-category is.** A simplicial set `S` is a quasi-category exactly when every
*inner* horn `Λ[n, i] ⟶ S` (with `0 < i < n`) extends along the inclusion `Λ[n, i] ⟶ Δ[n]`.
Mathlib's class `SSet.Quasicategory` states this for `n + 2` (inner horns only exist from
dimension 2); here it is unfolded into the form used in the lesson. -/
theorem quasicategory_iff (S : SSet) :
    S.Quasicategory ↔
      ∀ (n : ℕ) (i : Fin (n + 1)) (σ₀ : (Λ[n, i] : SSet) ⟶ S),
        0 < i → i < Fin.last n → ∃ σ : Δ[n] ⟶ S, σ₀ = Λ[n, i].ι ≫ σ := by
  constructor
  · intro hS n i σ₀ h0 hn
    exact Quasicategory.hornFilling h0 hn σ₀
  · intro h
    exact ⟨fun n i σ₀ h0 hn => h (n + 2) i σ₀ h0 hn⟩
Axioms used: propext, Classical.choice, Quot.soundformal/Lumenary/InfinityCategories.leanTry it in the Lean web editor
kan_is_quasicategoryLean 4Applies a library theoremFormally verified
/-- Every Kan complex (all horns fill, inner and outer) is a quasi-category: ∞-groupoids are
special ∞-categories. This is Mathlib's instance in `Mathlib.AlgebraicTopology.Quasicategory.Basic`. -/
theorem kan_is_quasicategory (S : SSet) [KanComplex S] : S.Quasicategory :=
  inferInstance
Axioms used: propext, Classical.choice, Quot.soundformal/Lumenary/InfinityCategories.leanTry it in the Lean web editor
nerve_is_quasicategoryLean 4Applies a library theoremFormally verified
/-- **The nerve of a category is a quasi-category.** Mathlib proves this
(`CategoryTheory.Nerve.quasicategory`) by showing that nerves satisfy the strict Segal
condition: every simplex is determined by its spine of composable arrows. -/
theorem nerve_is_quasicategory (C : Type) [Category C] : (nerve C).Quasicategory :=
  inferInstance
Axioms used: propext, Classical.choice, Quot.soundformal/Lumenary/InfinityCategories.leanTry it in the Lean web editor

Horn filling in dimension 2, for nerves: a triangle witnesses a composite; inner horns fill uniquely; outer horns fill (uniquely) in groupoids.

nerve_triangle_iffLean 4Applies a library theoremFormally verified
/-- In the nerve of a category, a 2-simplex with edges `f : x₀ ⟶ x₁`, `g : x₁ ⟶ x₂` and
`h : x₀ ⟶ x₂` (Mathlib's `Edge.CompStruct`) exists exactly when `f ≫ g = h`: a triangle
*witnesses* a composite. This is Mathlib's `CategoryTheory.nerve.nonempty_compStruct_iff`. -/
theorem nerve_triangle_iff {C : Type} [Category C] {x₀ x₁ x₂ : C}
    (f : x₀ ⟶ x₁) (g : x₁ ⟶ x₂) (h : x₀ ⟶ x₂) :
    Nonempty (Edge.CompStruct (nerve.edgeMk f) (nerve.edgeMk g) (nerve.edgeMk h)) ↔
      f ≫ g = h :=
  nerve.nonempty_compStruct_iff f g h
Axioms used: propext, Classical.choice, Quot.soundformal/Lumenary/InfinityCategories.leanTry it in the Lean web editor
nerve_composite_uniqueLean 4Proved here from basic factsFormally verified
/-- **Inner horns in a nerve fill uniquely.** Given composable edges `f` and `g` (a horn
`Λ[2, 1]`), there is exactly one edge `h` that can be the third side of a 2-simplex, namely
`f ≫ g`. In a general quasi-category a filler exists but is unique only up to homotopy; nerves
are exactly the simplicial sets whose inner horns fill uniquely. -/
theorem nerve_composite_unique {C : Type} [Category C] {x₀ x₁ x₂ : C}
    (f : x₀ ⟶ x₁) (g : x₁ ⟶ x₂) :
    ∃! h : x₀ ⟶ x₂,
      Nonempty (Edge.CompStruct (nerve.edgeMk f) (nerve.edgeMk g) (nerve.edgeMk h)) := by
  refine ⟨f ≫ g, (nerve_triangle_iff f g (f ≫ g)).2 rfl, fun h hh => ?_⟩
  exact ((nerve_triangle_iff f g h).1 hh).symm
Axioms used: propext, Classical.choice, Quot.soundformal/Lumenary/InfinityCategories.leanTry it in the Lean web editor
groupoid_outer_hornLean 4Proved here from basic factsFormally verified
/-- **Outer horns in the nerve of a groupoid fill.** Given `f : x₀ ⟶ x₁` and `h : x₀ ⟶ x₂` (a
horn `Λ[2, 0]`), there is exactly one `g : x₁ ⟶ x₂` making a 2-simplex, namely `f⁻¹ ≫ h`. This
is the dimension-2 shadow of the fact that nerves of groupoids are Kan complexes: filling outer
horns is *inverting* arrows. -/
theorem groupoid_outer_horn {G : Type} [Groupoid G] {x₀ x₁ x₂ : G}
    (f : x₀ ⟶ x₁) (h : x₀ ⟶ x₂) :
    ∃! g : x₁ ⟶ x₂,
      Nonempty (Edge.CompStruct (nerve.edgeMk f) (nerve.edgeMk g) (nerve.edgeMk h)) := by
  refine ⟨Groupoid.inv f ≫ h, (nerve_triangle_iff _ _ _).2 (by simp), fun g hg => ?_⟩
  have hfg : f ≫ g = h := (nerve_triangle_iff f g h).1 hg
  rw [← hfg]
  simp
Axioms used: propext, Classical.choice, Quot.soundformal/Lumenary/InfinityCategories.leanTry it in the Lean web editor
groupoid_outer_horn_rightLean 4Proved here from basic factsFormally verified
/-- The other outer horn, `Λ[2, 2]`: in the nerve of a groupoid, given `g : x₁ ⟶ x₂` and
`h : x₀ ⟶ x₂` there is exactly one `f : x₀ ⟶ x₁` making a 2-simplex, namely `h ≫ g⁻¹`. -/
theorem groupoid_outer_horn_right {G : Type} [Groupoid G] {x₀ x₁ x₂ : G}
    (g : x₁ ⟶ x₂) (h : x₀ ⟶ x₂) :
    ∃! f : x₀ ⟶ x₁,
      Nonempty (Edge.CompStruct (nerve.edgeMk f) (nerve.edgeMk g) (nerve.edgeMk h)) := by
  refine ⟨h ≫ Groupoid.inv g, (nerve_triangle_iff _ _ _).2 (by simp), fun f hf => ?_⟩
  have hfg : f ≫ g = h := (nerve_triangle_iff f g h).1 hf
  rw [← hfg]
  simp
Axioms used: propext, Classical.choice, Quot.soundformal/Lumenary/InfinityCategories.leanTry it in the Lean web editor

The non-example from the examples section, proved from the definitions: the two edges of an outer horn are glued into a map Λ[2, 0] ⟶ nerve (Fin 2) (using Mathlib's description of Λ[2, 0] as a pushout of two copies of Δ[1]), the Kan property fills it, and the vertices of the filling 2-simplex force an arrow 1→01 \to 0 in the poset {0<1}\{0 < 1\}, that is, 1≤01 \le 0:

nerve_fin_two_not_kanLean 4Proved here from basic factsFormally verified
/-- **A quasi-category that is not a Kan complex**: the nerve of the poset `0 < 1` (the
"walking arrow" `Fin 2`). The horn `Λ[2, 0]` with edges `0 ⟶ 1` (from vertex 0 to vertex 1) and
`𝟙 0` (from vertex 0 to vertex 2) has no filler: the missing edge would be an arrow `1 ⟶ 0`, i.e.
a proof of `1 ≤ 0`. Proof: glue the two edges into a horn (`horn₂₀.isPushout`), fill it using
the Kan property, read off the vertices of the filling 2-simplex from its faces, and apply its
middle-to-last arrow. -/
theorem nerve_fin_two_not_kan : ¬ KanComplex (nerve (Fin 2)) := by
  intro hK
  -- The two edges of the horn: `0 ⟶ 1` and the identity of `0`.
  let e₀₁ : (nerve (Fin 2)) _⦋1⦌ :=
    ComposableArrows.mk₁ (homOfLE (show (0 : Fin 2) ≤ 1 by decide))
  let e₀₂ : (nerve (Fin 2)) _⦋1⦌ := ComposableArrows.mk₁ (𝟙 (0 : Fin 2))
  -- They share their source vertex 0, so they glue to a map `Λ[2, 0] ⟶ nerve (Fin 2)`.
  have hsrc : (nerve (Fin 2)).δ 1 e₀₁ = (nerve (Fin 2)).δ 1 e₀₂ :=
    ComposableArrows.ext₀ rfl
  obtain ⟨σ, hσ₁, hσ₂⟩ := horn₂₀.isPushout.exists_desc (SSet.yonedaEquiv.symm e₀₁)
    (SSet.yonedaEquiv.symm e₀₂)
    (by rw [stdSimplex.δ_comp_yonedaEquiv_symm, stdSimplex.δ_comp_yonedaEquiv_symm, hsrc])
  -- The Kan property fills the horn with a 2-simplex `s`.
  obtain ⟨s, hs⟩ := KanComplex.hornFilling σ
  have hs₂ : stdSimplex.δ 2 ≫ s = SSet.yonedaEquiv.symm e₀₁ := by simp [← hσ₁, hs]
  have hs₁ : stdSimplex.δ 1 ≫ s = SSet.yonedaEquiv.symm e₀₂ := by simp [← hσ₂, hs]
  obtain ⟨t, rfl⟩ := SSet.yonedaEquiv.symm.surjective s
  rw [stdSimplex.δ_comp_yonedaEquiv_symm] at hs₂ hs₁
  have ht₂ : (nerve (Fin 2)).δ 2 t = e₀₁ := SSet.yonedaEquiv.symm.injective hs₂
  have ht₁ : (nerve (Fin 2)).δ 1 t = e₀₂ := SSet.yonedaEquiv.symm.injective hs₁
  -- Vertex 1 of `t` is `1` (read off face 2) and vertex 2 of `t` is `0` (read off face 1).
  have v₁ : t.obj 1 = 1 := congrArg (fun x : ComposableArrows (Fin 2) 1 => x.obj 1) ht₂
  have v₂ : t.obj 2 = 0 := congrArg (fun x : ComposableArrows (Fin 2) 1 => x.obj 1) ht₁
  -- The arrow of `t` from vertex 1 to vertex 2 would prove `1 ≤ 0`.
  have hle : t.obj 1 ≤ t.obj 2 := leOfHom (t.map' 1 2)
  rw [v₁, v₂] at hle
  exact absurd hle (by decide)
Axioms used: propext, Classical.choice, Quot.soundformal/Lumenary/InfinityCategories.leanTry it in the Lean web editor

Finally, the homotopy category and the fact that the nerve loses nothing:

nerveAdjunctionLean 4Formally verified
/-- The **homotopy category** functor `hoFunctor : SSet ⥤ Cat` is left adjoint to the nerve.
For a quasi-category `S`, `hoFunctor S` has the vertices as objects and homotopy classes of
edges as morphisms; composition is defined by filling inner 2-horns. This is Mathlib's
`CategoryTheory.nerveAdjunction`. -/
noncomputable def nerveAdjunction : hoFunctor ⊣ nerveFunctor :=
  CategoryTheory.nerveAdjunction
Axioms used: propext, Classical.choice, Quot.soundformal/Lumenary/InfinityCategories.leanTry it in the Lean web editor
hoNerveIsoLean 4Formally verified
/-- The homotopy category of the nerve of a category is that category again (naturally): the
nerve loses no information, and categories sit inside ∞-categories as a full subcategory. This
is Mathlib's `CategoryTheory.nerveFunctorCompHoFunctorIso`. -/
noncomputable def hoNerveIso : nerveFunctor.{0, 0} ⋙ hoFunctor ≅ 𝟭 Cat :=
  CategoryTheory.nerveFunctorCompHoFunctorIso
Axioms used: propext, Classical.choice, Quot.soundformal/Lumenary/InfinityCategories.leanTry it in the Lean web editor

What is not formalised. Theorem 2 in a general quasi-category, Theorems 3–6, limits and colimits in quasi-categories and the ∞-categorical Yoneda lemma are not formalised here; as far as we know, Joyal's theorem (Theorem 4) and the Joyal model structure are not yet in Mathlib.

ComputationC

Counting horns and fillers

The experiment enumerates every horn Λk2\Lambda^2_k and Λk3\Lambda^3_k in the nerves of four small categories — the poset 0<1<20 < 1 < 2, the monoid {1,e}\{1, e\} with e2=ee^2 = e, the group Z/3\Z/3, and the walking isomorphism — and counts fillers. Look for three patterns: inner horns always have exactly one filler (Theorem 1); outer horns fill in the two groupoids (their nerves are Kan complexes); and in the idempotent monoid an outer horn may have no filler or two fillers. Note also that outer 3-horns always fill in the poset: a poset is thin, so every triangle commutes.

Horn filling in nerves of small categoriesPythonExact computationExhaustive finite checkComputationally tested
"""Horn filling in nerves of small categories, by exhaustive search.

The nerve of a category C has as n-simplices the strings of n composable
arrows. A horn Lambda^n_k is a simplex with its k-th face (and interior)
missing; it is inner if 0 < k < n. We enumerate every horn of dimension 2 and
3 in the nerves of four small categories and count how many can be filled and
in how many ways:

* the poset 0 < 1 < 2,
* the "walking idempotent": one object, arrows 1 and e with e e = e,
* the group Z/3 as a one-object groupoid,
* the "walking isomorphism": objects 0, 1 and inverse arrows u, v.

The search confirms, in these cases, that inner horns in a nerve always have
exactly one filler (nerves are quasi-categories with unique inner fillers),
that outer horns fill in the two groupoids (their nerves are Kan complexes),
and that outer horns can fail to fill, or fill in several ways, otherwise.
Exact, exhaustive evidence for these finite categories and dimensions only.
"""

from itertools import product

class SmallCategory:
    """A finite category: objects, arrows with source and target, composition.

    ``compose(f, g)`` is "f then g" (diagrammatic order), defined when the
    target of f is the source of g.
    """

    def __init__(self, name, arrows, compose):
        self.name = name
        self.arrows = arrows          # dict: arrow -> (source, target)
        self.compose = compose
        self.objects = sorted({s for s, _ in arrows.values()}
                              | {t for _, t in arrows.values()})

    def hom(self, x, y):
        """All arrows from x to y."""
        return [a for a, st in self.arrows.items() if st == (x, y)]

def poset_category(n):
    """The poset 0 < 1 < ... < n-1 as a category: one arrow i -> j iff i <= j."""
    arrows = {(i, j): (i, j) for i in range(n) for j in range(i, n)}
    return SmallCategory(f"poset [{n - 1}]", arrows,
                         lambda f, g: (f[0], g[1]))

def monoid_category(name, table):
    """A one-object category from a monoid's multiplication table."""
    arrows = {m: (0, 0) for m in table}
    return SmallCategory(name, arrows, lambda f, g: table[f][g])

def walking_isomorphism():
    """Objects 0 and 1, arrows u: 0 -> 1 and v: 1 -> 0 inverse to each other."""
    arrows = {"1_0": (0, 0), "1_1": (1, 1), "u": (0, 1), "v": (1, 0)}

    def compose(f, g):
        table = {("u", "v"): "1_0", ("v", "u"): "1_1"}
        if f.startswith("1_"):
            return g
        if g.startswith("1_"):
            return f
        return table[(f, g)]

    return SmallCategory("walking iso", arrows, compose)

def edge_assignments(cat, vertices_count, edges):
    """All ways to choose objects for the vertices and arrows for ``edges``."""
    for objs in product(cat.objects, repeat=vertices_count):
        homs = [cat.hom(objs[a], objs[b]) for a, b in edges]
        for choice in product(*homs):
            yield dict(zip(edges, choice))

def triangle_commutes(cat, f, a, b, c):
    """Does the triangle on vertices a < b < c commute: f_ab ; f_bc = f_ac?"""
    return cat.compose(f[(a, b)], f[(b, c)]) == f[(a, c)]

def horn_census(cat, n, k):
    """Count horns Lambda^n_k -> N(cat), fillable horns, and the largest
    number of fillers of a single horn (n = 2 or 3)."""
    all_edges = [(a, b) for a in range(n + 1) for b in range(a + 1, n + 1)]
    if n == 2:
        # The horn has the two edges through vertex k; the filler adds the third.
        horn_edges = [e for e in all_edges if k in e]
        horns = fillable = most = 0
        for f in edge_assignments(cat, 3, horn_edges):
            horns += 1
            (missing,) = [e for e in all_edges if k not in e]
            fillers = [x for x in cat.hom(*objects_of(cat, f, missing))
                       if triangle_commutes(cat, {**f, missing: x}, 0, 1, 2)]
            fillable += bool(fillers)
            most = max(most, len(fillers))
        return horns, fillable, most
    # n == 3: the horn contains all six edges and the faces other than d_k.
    faces = [tuple(v for v in range(4) if v != i) for i in range(4)]
    horns = fillable = 0
    for f in edge_assignments(cat, 4, all_edges):
        if all(triangle_commutes(cat, f, *faces[i]) for i in range(4) if i != k):
            horns += 1
            fillable += triangle_commutes(cat, f, *faces[k])
    return horns, fillable, 1 if fillable else 0

def objects_of(cat, f, edge):
    """Source and target objects of a missing edge, read off the horn."""
    a, b = edge
    obj = {}
    for (x, y), arrow in f.items():
        obj[x], obj[y] = cat.arrows[arrow]
    return obj[a], obj[b]

CATEGORIES = [
    poset_category(3),
    monoid_category("idempotent", {"1": {"1": "1", "e": "e"},
                                         "e": {"1": "e", "e": "e"}}),
    monoid_category("group Z/3", {i: {j: (i + j) % 3 for j in range(3)}
                                  for i in range(3)}),
    walking_isomorphism(),
]

def main():
    print("Horn L(n,k): fillable horns/all horns (most fillers of one horn)")
    print(f"{'category':<12}" + "".join(f"{f'L({n},{k})':>9}"
                                       for n, k in HORNS))
    for cat in CATEGORIES:
        cells = []
        for n, k in HORNS:
            horns, ok, most = horn_census(cat, n, k)
            cells.append(f"{f'{ok}/{horns}({most})':>9}")
        print(f"{cat.name:<12}" + "".join(cells))
    print("Inner: L(2,1), L(3,1), L(3,2). Outer: L(2,0), L(2,2), L(3,0), L(3,3).")
    print()
    idem = CATEGORIES[1]
    for f01, f02 in [("e", "1"), ("e", "e")]:
        fillers = [g for g in idem.arrows if idem.compose(f01, g) == f02]
        print(f"Idempotent, outer horn L(2,0) with f01 = {f01}, f02 = {f02}: "
              f"fillers {fillers}")
    print()
    print("Epistemic status: exact, exhaustive enumeration of all 2- and")
    print("3-dimensional horns in four small categories. It illustrates, but")
    print("does not prove, that nerves have unique inner fillers in every")
    print("dimension and that nerves of groupoids are Kan complexes.")

HORNS = [(2, 1), (2, 0), (2, 2), (3, 1), (3, 2), (3, 0), (3, 3)]

if __name__ == "__main__":
    main()
Runs entirely in your browser, in an isolated worker. Nothing is sent to a server.
Explore

Explore: witnesses and homotopies

A composite in a quasi-category is not an arrow but a triangle. Here is the 2-simplex σ\sigma witnessing hh as a composite of ff and gg, next to the 2-simplex that defines a homotopy h≃h′h \simeq h' (its third edge is an identity):

xx
yy
zz
σ\sigma
xx
zz
zz
τ\tau
ff
gg
hh
hh
idz\mathrm{id}_z
h′h'
Left: a 2-simplex σ\sigma with d2σ=fd_2\sigma = f, d0σ=gd_0\sigma = g, d1σ=hd_1\sigma = h. Right: a 2-simplex τ\tau with d0τ=idzd_0\tau = \mathrm{id}_z is a homotopy h≃h′h \simeq h'.

To see Theorem 2 in action, imagine the tetrahedron with vertices x,y,z,zx, y, z, z: its faces are σ\sigma, σ′\sigma', the degenerate triangle (g,idz,g)(g, \mathrm{id}_z, g), and the missing face — a τ\tau as on the right. Filling the inner horn produces the missing face, and so the homotopy.

Try it on the experiment's output: in the idempotent monoid {1,e}\{1, e\}, the outer horn with f=ef = e, h=eh = e has two fillers g=1g = 1 and g=eg = e. Why does no such ambiguity ever arise for inner horns in a nerve? (Answer: the filler of an inner horn is determined by the spine, which the horn contains.)

Exercises

Exercises

1. ∞-categories

Warm-upHuman

Which of these horns are inner? (Choose all that apply.)

Choose all that apply

2. ∞-categories

Warm-upHuman

How many non-degenerate simplices, of all dimensions, does the horn Λ13⊂Δ[3]\Lambda^3_1 \subset \Delta[3] contain?

3. ∞-categories

CoreHuman

In the nerve N(C)N(\mathcal{C}), a horn Λ02\Lambda^2_0 consists of f:x0→x1f : x_0 \to x_1 and h:x0→x2h : x_0 \to x_2. When does it have a filler?

Choose one

4. ∞-categories

CoreHuman

The proof that any two composites h,h′h, h' of gg and ff are homotopic fills a 3-dimensional horn whose faces are σ\sigma (edges f,g,hf, g, h), σ′\sigma' (edges f,g,h′f, g, h') and the degenerate triangle s1gs_1 g. Which horn is it, and why does the argument work in every quasi-category?

Choose one

5. ∞-categories

CoreFormal

Which Lean statement says that the nerve of the poset {0<1}\{0 < 1\} is not an ∞-groupoid, although it is an ∞-category?

Choose one

6. ∞-categories

CoreHuman

Which of the following simplicial sets are quasi-categories? (Choose all that apply.)

Choose all that apply

7. ∞-categories

CoreHuman

What is the homotopy category h Sing(T)h\,\mathrm{Sing}(T) of the singular complex of a space TT?

Choose one

8. ∞-categories

StretchHuman

Let XX be a quasi-category in which every edge f:x→yf : x \to y has a homotopy inverse (some g:y→xg : y \to x with [g][f]=[idx][g][f] = [\mathrm{id}_x] and [f][g]=[idy][f][g] = [\mathrm{id}_y] in hXhX). What can you conclude?

Choose one

9. ∞-categories

StretchComputational

A one-object category (a monoid) is given by a list of elements and a function then(f, g) meaning 'first ff, then gg'. Write outer_fillers(elements, then, f, h) returning the list of all gg (in the order of elements) that fill the outer horn Λ02\Lambda^2_0 with edges ff (from vertex 0 to 1) and hh (from vertex 0 to 2), i.e. with then(f, g) == h.

Runs entirely in your browser, in an isolated worker. Nothing is sent to a server.
Common misconceptionsH

Common misconceptions

Misconception

"An ∞-category is a category with more arrows." Its composition and coherence are homotopical: composites are not unique, only unique up to a contractible space of choices, and associativity holds up to specified higher simplices. The extra information lives in the higher simplices, not in additional 1-morphisms.

Misconception

"The homotopy hypothesis is a single theorem." It is a guiding principle ("∞-groupoids are spaces") whose precise form depends on the definition of ∞-groupoid. For Kan complexes it is Quillen's theorem (Theorem 5); for various algebraic definitions it is proved in some cases and open in others.

Misconception

"Composition in a quasi-category is a function X1×X0X1→X1X_1 \times_{X_0} X_1 \to X_1." There is no preferred composite: a composable pair may have many fillers, with different long edges. What is canonical is the space of fillers, which is contractible (Theorem 3), and the composite in the homotopy category hXhX.

Misconception

"Quasi-categories and Kan complexes are the same." Every Kan complex is a quasi-category, but not conversely: N([1])N([1]) is a quasi-category in which the outer horn with edges 0→10 \to 1 and id0\mathrm{id}_0 cannot be filled. By Joyal's theorem, a quasi-category is Kan exactly when all its morphisms are invertible up to homotopy.

Misconception

"An ∞-category is determined by its homotopy category." Very different ∞-categories can have equivalent homotopy categories, and homotopy limits and colimits cannot in general be computed in the homotopy category. That is the whole reason for the theory.

ViewpointsH

Many ways of seeing

Topology— Spaces are ∞-groupoids

From the topologist's side, an ∞-groupoid is a space: points are objects, paths are morphisms, homotopies are 2-morphisms, and Kan complexes are the combinatorial model (Theorem 5). The homotopy groups of a Kan complex XX at a vertex xx can be defined combinatorially, and hX=Π1(X)hX = \Pi_1(X). An ∞-category is then a "directed space": the quasi-category condition allows paths that cannot be reversed. Mapping spaces MapX(x,y)\mathrm{Map}_X(x, y) in a quasi-category are Kan complexes, so an ∞-category is a category "enriched in spaces" up to homotopy — and the simplicial-category model (Theorem 6) makes this literal. See Homotopy theory.

Algebra— Higher algebra and the Dold–Kan correspondence

The Dold–Kan correspondence (Dold, Kan, 1958) is an equivalence between simplicial abelian groups and chain complexes in non-negative degrees, under which homotopy groups become homology groups. It is the bridge by which homological algebra becomes a special case of ∞-category theory: the derived ∞-category of a ring is built from chain complexes, and its homotopy category is the classical derived category (see Derived categories). Algebraic structures that are associative or commutative only up to coherent homotopy — A∞A_\infty- and E∞E_\infty-algebras, going back to Stasheff and to Boardman–Vogt — are the algebra of ∞-categories, developed systematically in Lurie's Higher Algebra.

Geometry— Derived intersections and higher stacks

Algebraic geometers meet ∞-groupoids when moduli problems have automorphisms (stacks take values in groupoids) and when intersections are not transversal. Serre's intersection formula (1965) computes the intersection multiplicity of subvarieties V,WV, W at a point as ∑i(−1)ilength⁡ToriO(OV,OW)\sum_i (-1)^i \operatorname{length} \mathrm{Tor}_i^{\mathcal{O}}(\mathcal{O}_V, \mathcal{O}_W); the higher Tor terms are invisible in the ordinary scheme-theoretic intersection. In derived algebraic geometry (Toën–Vezzosi; Lurie) the intersection is a homotopy pullback in an ∞-category of derived schemes, whose structure sheaf remembers all the Tori\mathrm{Tor}_i — Serre's formula becomes the Euler characteristic of a derived object. See Algebraic geometry.

Logic— Homotopy type theory as an internal language

In homotopy type theory, types behave like ∞-groupoids: iterated identity types form a weak ∞-groupoid (Lumsdaine; van den Berg and Garner). Shulman (2019) proved that every Grothendieck (∞,1)(\infty, 1)-topos — a well-behaved ∞-category of "sheaves of spaces" — models homotopy type theory with univalent universes, so type-theoretic proofs yield theorems in every ∞-topos. This is the logician's view of an ∞-topos: a universe of sets in which equality is a space of paths. See Homotopy type theory.

Category theory— One theory, many models

From the categorical point of view, quasi-categories, complete Segal spaces and simplicial categories are different presentations of one homotopy theory (Theorem 6), as different coordinate systems present one manifold. The relationship between a category and an ∞-category is like that between a set and a space: the nerve embeds categories fully faithfully into ∞-categories, with left adjoint the homotopy category, exactly as sets embed into spaces as the discrete ones with left adjoint π0\pi_0.

Wonder Trails

Wonder Trails

History & global context

History and global context

  • 1950s: combinatorial homotopy theory. Daniel Kan (born in the Netherlands, working in the United States) introduced the extension condition now called the Kan condition (1957) and, in the same period, adjoint functors (1958). Albrecht Dold and Kan found the Dold–Kan correspondence (1958), and John Moore showed simplicial groups are Kan complexes.
  • 1967: model categories. Daniel Quillen's Homotopical Algebra axiomatised homotopy theory and proved that simplicial sets and spaces have equivalent homotopy theories.
  • 1973: weak Kan complexes. Michael Boardman and Rainer Vogt (UK and Germany) introduced simplicial sets with inner horn fillers in their study of homotopy-invariant algebraic structures.
  • 1980s. William Dwyer and Daniel Kan developed simplicial localisation; Jean-Marc Cordier (France) introduced the homotopy coherent nerve (1982); Grothendieck's Pursuing Stacks (1983) set out the homotopy hypothesis.
  • 2000s: the theory takes shape. André Joyal (Québec) showed that quasi-categories support a full category theory and built the Joyal model structure; Charles Rezk introduced complete Segal spaces (2001); Julia Bergner (2007) and Joyal–Tierney (2007) compared models; Bertrand Toën (2005) gave axioms; Toën and Gabriele Vezzosi (France and Italy) built homotopical algebraic geometry; Jacob Lurie's Higher Topos Theory (2009) and Higher Algebra made the theory a working tool.
  • 2010s–today. Textbooks and model-independent approaches by Denis-Charles Cisinski (2019) and Emily Riehl and Dominic Verity (2022), Lurie's Kerodon, and the first formalisations in proof assistants.
Further reading

Further reading

A suggested path: Groth's short course or Riehl's notes for orientation; Cisinski or Riehl–Verity for a textbook; Higher Topos Theory and Kerodon as references.

  • Moritz Groth, "A short course on ∞-categories", in Handbook of Homotopy Theory (2020).
  • Denis-Charles Cisinski, Higher Categories and Homotopical Algebra (2019).
  • Emily Riehl and Dominic Verity, Elements of ∞-Category Theory (2022).
  • Jacob Lurie, Higher Topos Theory (2009), Chapters 1–2; and Kerodon, an online textbook.
  • André Joyal, "Quasi-categories and Kan complexes", J. Pure Appl. Algebra 175 (2002).
  • Julia Bergner, The Homotopy Theory of (∞,1)-Categories (2018).
  • J. M. Boardman and R. M. Vogt, Homotopy Invariant Algebraic Structures on Topological Spaces (Lecture Notes in Mathematics 347, 1973).
  • Paul Goerss and John F. Jardine, Simplicial Homotopy Theory (1999) — for Kan complexes and the Kan–Quillen model structure.