Why replace numbers by objects?
Four stories, from four corners of mathematics, share one move.
- Combinatorics. To prove you can compute, or you can exhibit a bijection between -subsets and their complements. The bijection says more: it is a reason, and it can be compatible with symmetries that the numbers do not see.
- Topology. Betti numbers count holes. Around 1925, Emmy Noether, with Heinz Hopf and Leopold Vietoris, emphasised that they are the ranks of homology groups — and groups, unlike numbers, have maps between them, so a continuous map induces a homomorphism. The Euler characteristic became the shadow of a richer object.
- Representation theory. The Kazhdan–Lusztig polynomials (1979) were conjectured to have non-negative coefficients. Elias and Williamson (2014) proved it for every Coxeter group by showing that the coefficients are dimensions of spaces of maps between Soergel bimodules — and dimensions cannot be negative.
- Knot theory. The Jones polynomial (1984) is a powerful knot invariant, but whether it detects the unknot is still unknown. Khovanov (1999–2000) found bigraded homology groups whose graded Euler characteristic is the Jones polynomial; Kronheimer and Mrowka (2011) proved that Khovanov homology does detect the unknot.
In each story a number (or polynomial) is recognised as the shadow — the decategorification — of an object (a set, a group, a vector space, a complex), and an equation between numbers as the shadow of an isomorphism. Going back up is categorification. Categorical representation theory applies this to representation theory itself: instead of a group or algebra acting on a vector space, it studies actions on categories, and representation-theoretic structures on categories such as tensor and fusion categories.
A ladder, and its shadow map
Picture a ladder:
Going down a rung forgets: a finite set to its cardinality, a vector space to its dimension, a category to its Grothendieck group , the group of isomorphism classes with sums. Going up is not a functor or an algorithm; it is a search, and a structure may have many categorifications or none known.
A representation of a group on a vector space is a homomorphism . One rung up, a categorical action of on a category is a family of autoequivalences with coherent isomorphisms ; passing to gives an ordinary representation. Likewise the representation ring of is the shadow of the representation category , with as the categorified multiplication.
Analogy, not a formal construction
Decategorification is like reading a musical score by counting how many notes are written on each page. The counts are honest information — they add up correctly when pages are combined — but two very different pieces can have the same counts, and you cannot hear the music from them. The analogy is informal: the precise statements are about Grothendieck groups below.
Definitions
Throughout, is a field, algebraically closed of characteristic when we speak of fusion categories.
Definition— Grothendieck group
The Grothendieck group of an essentially small abelian category is the abelian group generated by symbols , one for each isomorphism class of objects, with a relation for every short exact sequence . For an additive category one uses only split sequences (); for a triangulated category, one relation per distinguished triangle. If has a biexact tensor product, makes a ring.
Definition— tensor category
A tensor category over (in the sense of Etingof–Gelaki–Nikshych–Ostrik) is a locally finite -linear abelian category with a bilinear monoidal structure (see monoidal categories), such that every object has left and right duals (it is rigid) and .
Definition— fusion category and Frobenius–Perron dimension
A fusion category is a semisimple tensor category with finitely many isomorphism classes of simple objects . Its Grothendieck ring is a fusion ring: a ring free on the with , . The Frobenius–Perron dimension is the largest real eigenvalue of the non-negative matrix of multiplication by ; is the unique ring homomorphism that is positive on every , and .
Definition— module category
A (left) module category over a monoidal category is a category with an action bifunctor and natural isomorphisms and satisfying the pentagon and triangle axioms. It is the categorified notion of a module over a ring: is a module over .
Definition— sl₂-categorification (Chuang–Rouquier)
An -categorification on a -linear abelian category (with suitable finiteness) consists of exact functors that are left and right adjoint to each other, such that and make a locally finite representation of in which the classes of simple objects are weight vectors, together with natural transformations and satisfying the relations of the degenerate affine Hecke algebra.
The extra natural transformations and are the essential, genuinely categorical part: an action of on alone would not suffice for the theorems below.
Examples
Example— Finite sets categorify the natural numbers
The category has and ; taking cardinalities gives with and . Commutativity, associativity and distributivity of arithmetic are shadows of specified bijections such as , and these bijections satisfy coherence conditions of their own (they form a symmetric bimonoidal category). The numbers forget which bijection; the category remembers. For vector spaces, identifies with .
Example— Rep(S₃)
Over , has three irreducible representations: trivial , sign , and the -dimensional reflection representation . The fusion rules are
as the characters , , on the classes of , transpositions and -cycles confirm: . Frobenius–Perron dimensions are ordinary dimensions, and .
Example— One fusion ring, several fusion categories
- Pointed categories. For a finite group and a -cocycle , the category of -graded vector spaces with associativity twisted by has Grothendieck ring for every ; and only if is cohomologous to the pull-back of by an automorphism of . For , gives two inequivalent fusion categories with the same fusion ring.
- and . The dihedral group of order and the quaternion group have the same character table, hence isomorphic fusion rings; Tambara and Yamagami (1998) showed that and are nevertheless inequivalent tensor categories.
Example— Fibonacci and Ising
The Fibonacci fusion ring has basis with ; it is the Grothendieck ring of fusion categories built from quantum groups at roots of unity (for instance the even part of at level ). The matrix of multiplication by is , so , the golden ratio. The Ising ring has , , , and .
Example— Module categories over Vec_G
For a subgroup , the category of vector spaces graded by the cosets is a module category over (with acting by left translation of the grading), and twisting by a -cocycle gives more. Ostrik (2003) proved that every indecomposable semisimple module category over is of this form , with determined up to conjugation and coboundaries — the categorified version of "a transitive -set is ".
Example— Categorifying a Hecke-type relation with symmetric groups
Let , with and , which are biadjoint. Mackey's formula gives an isomorphism of functors on each . On , which is identified with the ring of symmetric functions, this is the Heisenberg-type relation — a categorified commutation relation (Khovanov, 2014, studied the full Heisenberg categorification). In characteristic , splitting and according to eigenvalues of the Jucys–Murphy elements gives -restriction and -induction functors and a categorical action of whose is the basic representation. For the Hecke algebras over at a primitive -th root of unity the same construction gives an action of , and Ariki's theorem (1996, the Lascoux–Leclerc–Thibon conjecture) identifies their decomposition numbers with coefficients of Lusztig's canonical basis of the Fock space.
Example— The Khovanov cube of the Hopf link
Each crossing of a link diagram can be smoothed in two ways, and . Khovanov assigns to a smoothing with circles the graded vector space , with , and to each edge of the cube of smoothings the multiplication (two circles merge) or the comultiplication (a circle splits). For the Hopf link the smoothings have circles:
The graded Euler characteristic of this complex, with the standard normalisation shifts, is the unnormalised Jones polynomial; its homology is the Khovanov homology. The computation section does this for the trefoil and the figure-eight knot.
Central results
Theorem— Proposition 1 — dimension decategorifies vect
If is a short exact sequence of finite-dimensional vector spaces, then . Hence is a well-defined isomorphism .
Proof
Rank–nullity for gives . Exactness says and ( injective). So respects the defining relations and induces a homomorphism . It is surjective () and injective, since gives .
∎
Theorem— Proposition 2 — homology categorifies the Euler characteristic
For a bounded complex of finite-dimensional vector spaces, .
Proof
Write and . Rank–nullity gives , and . Hence , and the boundary terms cancel in pairs. In the language of Grothendieck groups: in , which is the statement that of the derived category is again .
∎
Theorem— Proposition 3 — the Grothendieck ring of Rep(G)
Let be a finite group and . Then is the free abelian group on the classes of the irreducible representations; with it is the representation ring , and the character map is an injective ring homomorphism into class functions. Moreover is a fusion category with and .
Proof
By Maschke's theorem every short exact sequence splits and every representation is a direct sum of irreducibles , uniquely up to multiplicities, so . The character is additive on direct sums, multiplicative on tensor products (), constant on isomorphism classes, and sends to the constant function : a ring homomorphism. It is injective because the irreducible characters are orthonormal for , hence linearly independent (see representation theory of finite groups). Duals exist ( with acting by the inverse transpose), , and there are finitely many simples: is fusion. Finally is a ring homomorphism , positive on each , so by uniqueness it is , and .
∎
Theorem— Theorem 4 — the Fibonacci rule is not Rep(G)
There is no finite group (and no semisimple Hopf algebra ) whose representation category has Grothendieck ring isomorphic, as a ring with basis, to the Fibonacci fusion ring. In fact the Fibonacci ring has no ring homomorphism to at all.
Proof
A ring homomorphism from the Fibonacci ring to sends to an integer with , i.e. . But a product of two consecutive integers is never : it is for and at least otherwise. So there is no such . But for (or ), taking the dimension of the underlying vector space is a ring homomorphism , because the forgetful functor to vector spaces preserves and .
∎
The same argument shows that a fusion category with a non-integer Frobenius–Perron dimension admits no fibre functor (no monoidal functor to vector spaces), so it cannot be reconstructed as the representations of a group or Hopf algebra. Fusion categories are strictly more general than .
Theorem— Theorem 5 — Khovanov (2000)
For an oriented link there are bigraded homology groups , computed from any diagram by the cube of smoothings, which are invariant under Reidemeister moves, and whose graded Euler characteristic is the unnormalised Jones polynomial: (with Bar-Natan's normalisation of ).
Khovanov's proof of invariance is a direct verification for the three Reidemeister moves (see Bar-Natan, 2002, for an accessible account). Khovanov homology is functorial for link cobordisms up to sign (Jacobsson 2004; Khovanov 2006; Bar-Natan 2005), with the sign ambiguity resolved by Clark, Morrison and Walker (2009). It is strictly stronger than the Jones polynomial: the figure-eight knot has but of total rank (computed below).
Theorem— Theorem 6 — Chuang–Rouquier (2008)
An -categorification on lifts the action of the simple reflection of the Weyl group on to a derived self-equivalence: the weight spaces and are derived equivalent. Applied to blocks of symmetric groups in characteristic with the -induction and -restriction functors, this shows that blocks with the same weight are derived equivalent; together with the work of Chuang and Kessar (2002), it proves Broué's abelian defect group conjecture for symmetric groups.
We do not prove Theorems 5 and 6 here; see the reading list.
The landscape: what is known, what is open
Established results. Beyond the theorems above:
- Positivity by categorification. Kazhdan–Lusztig positivity for all Coxeter groups (Elias–Williamson, 2014, via the Hodge theory of Soergel bimodules); positivity of Lusztig's canonical bases (via perverse sheaves on quiver representation spaces, see quiver representations).
- Categorified quantum groups. Khovanov–Lauda and Rouquier (2008–2011) defined 2-categories whose Grothendieck groups are quantum groups, with KLR (quiver Hecke) algebras categorifying their positive parts.
- Knot homology. Khovanov homology detects the unknot (Kronheimer–Mrowka, 2011). Rasmussen's -invariant (2010) gives a combinatorial proof of the Milnor conjecture on the slice genus of torus knots, first proved by Kronheimer–Mrowka with gauge theory; Piccirillo (2020) used it to show that the Conway knot is not slice.
- Structure of fusion categories. Etingof, Nikshych and Ostrik (2005): fusion categories over admit no non-trivial deformations ("Ocneanu rigidity"), so a fusion ring has only finitely many categorifications up to equivalence; FP dimensions are algebraic integers; is divisible, in the ring of algebraic integers, by of any fusion subcategory. Ostrik (2003) showed that rank- fusion categories have the fusion rings of or Fibonacci.
- Topology from fusion categories. Spherical fusion categories give the Turaev–Viro invariants of -manifolds (1992), and modular tensor categories give Reshetikhin–Turaev invariants (1991) and -dimensional topological quantum field theories.
Open problems (well documented; consult recent surveys for progress):
- Does the Jones polynomial detect the unknot? Open, although Khovanov homology does.
- Etingof–Nikshych–Ostrik (2011) asked whether every fusion category of integer Frobenius–Perron dimension is weakly group-theoretical. Open.
- The Broué abelian defect group conjecture for finite groups in general (proved for symmetric groups by Theorem 6, and in other families). Open.
- Do the "exotic" Haagerup fusion categories (from Haagerup's 1994 subfactor) arise from a conformal field theory? Open; there is numerical and structural evidence (Evans–Gannon, 2011).
Categorification in Lean and Mathlib
Mathlib has finite types and their cardinalities, finite-dimensional linear algebra, and the category FDRep k G of finite-dimensional representations with its symmetric monoidal and rigid structures and characters. It does not yet have fusion categories, module categories or categorical actions. We formalise the decategorification statements of the lesson.
Finite sets categorify : cardinality turns and into and , and the distributive law is the shadow of a bijection.
/-- Decategorifying the disjoint union: `|A ⊔ B| = |A| + |B|`. This applies Mathlib's
`Fintype.card_sum`. -/
theorem card_sum (A B : Type*) [Fintype A] [Fintype B] :
Fintype.card (A ⊕ B) = Fintype.card A + Fintype.card B :=
Fintype.card_sum/-- Decategorifying the product: `|A × B| = |A| · |B|`. This applies Mathlib's
`Fintype.card_prod`. -/
theorem card_prod (A B : Type*) [Fintype A] [Fintype B] :
Fintype.card (A × B) = Fintype.card A * Fintype.card B :=
Fintype.card_prod A B/-- The distributive law `a(b + c) = ab + ac` is the shadow of a *bijection*
`A × (B ⊔ C) ≃ (A × B) ⊔ (A × C)` (Mathlib's `Equiv.prodSumDistrib`). Categorified, an equation
between numbers becomes an isomorphism between sets — extra information that the numbers forget
(which bijection?). -/
theorem card_distrib (A B C : Type*) [Fintype A] [Fintype B] [Fintype C] :
Fintype.card (A × (B ⊕ C)) = Fintype.card (A × B) + Fintype.card (A × C) := by
rw [Fintype.card_congr (Equiv.prodSumDistrib A B C), Fintype.card_sum]Propositions 1 and 2, proved from rank–nullity (Proposition 2 for a two-term complex):
/-- Dimension is additive on short exact sequences `0 → A --f--> B --g--> C → 0`:
`dim B = dim A + dim C`. Proof by rank–nullity for `g`: `dim B = dim im g + dim ker g`, where
`im g = C` (surjectivity) and `ker g = im f ≅ A` (exactness and injectivity). This is exactly
the relation `[B] = [A] + [C]` defining the Grothendieck group, so `dim` induces a homomorphism
`K₀(vect_k) → ℤ` (in fact an isomorphism). -/
theorem finrank_additive [FiniteDimensional k B] (f : A →ₗ[k] B) (g : B →ₗ[k] C)
(hf : Function.Injective f) (hg : Function.Surjective g)
(hexact : LinearMap.range f = LinearMap.ker g) :
Module.finrank k B = Module.finrank k A + Module.finrank k C := by
have hrn := LinearMap.finrank_range_add_finrank_ker g
have hA : Module.finrank k (LinearMap.range f) = Module.finrank k A :=
LinearMap.finrank_range_of_inj hf
have hC : Module.finrank k (LinearMap.range g) = Module.finrank k C := by
rw [LinearMap.range_eq_top.mpr hg, finrank_top]
rw [← hexact, hA, hC] at hrn
omega/-- For a two-term complex `V₁ --d--> V₀` of finite-dimensional spaces, the Euler
characteristic of the complex equals that of its homology:
`dim V₀ - dim V₁ = dim H₀ - dim H₁`, where `H₀ = coker d = V₀ / im d` and `H₁ = ker d`.
Homology *categorifies* the Euler characteristic: it replaces a number by graded vector spaces
whose alternating dimension recovers it. Proof: rank–nullity for `d`, and
`dim (V₀ / im d) + dim im d = dim V₀`. -/
theorem euler_characteristic_two_term [FiniteDimensional k V₁] [FiniteDimensional k V₀]
(d : V₁ →ₗ[k] V₀) :
(Module.finrank k V₀ : ℤ) - Module.finrank k V₁ =
(Module.finrank k (V₀ ⧸ LinearMap.range d) : ℤ) - Module.finrank k (LinearMap.ker d) := by
have h₁ := LinearMap.finrank_range_add_finrank_ker d
have h₀ := Submodule.finrank_quotient_add_finrank (LinearMap.range d)
omegaThe tensor category , and the character as decategorification (Proposition 3):
/-- Finite-dimensional representations form a symmetric monoidal category under `⊗` (with `g`
acting diagonally): the swap `β : V ⊗ W ≅ W ⊗ V` squares to the identity. This applies
Mathlib's instance `SymmetricCategory (FDRep k G)` and the axiom `SymmetricCategory.symmetry`.
(In a merely *braided* category, such as the representations of a quantum group, this fails.) -/
theorem fdrep_symmetric (V W : FDRep k G) : (β_ V W).hom ≫ (β_ W V).hom = 𝟙 (V ⊗ W) :=
SymmetricCategory.symmetry V W/-- Every finite-dimensional representation `V` has a dual `Vᘁ` with coevaluation
`η : 𝟙 → V ⊗ Vᘁ` and evaluation `ε : Vᘁ ⊗ V → 𝟙` satisfying the zig-zag identity
`(V ◁ ε) ∘ α ∘ (η ▷ V) = ρ⁻¹ ∘ λ`: `FDRep k G` is rigid. This applies Mathlib's instance
`RightRigidCategory (FDRep k G)` (inherited from `FGModuleCat k`) and
`ExactPairing.evaluation_coevaluation`. -/
theorem fdrep_zigzag (V : FDRep k G) :
η_ V Vᘁ ▷ V ≫ (α_ _ _ _).hom ≫ V ◁ ε_ V Vᘁ = (λ_ V).hom ≫ (ρ_ V).inv :=
ExactPairing.evaluation_coevaluation V Vᘁ/-- Decategorifying `⊗`: the character of `V ⊗ W` is the product of the characters. Since
characters are additive on direct sums and depend only on the isomorphism class (`char_iso`),
the character is a ring homomorphism from the Grothendieck ring of `Rep(G)` to class
functions. This applies Mathlib's `FDRep.char_tensor`. -/
theorem char_tensor (V W : FDRep k G) : (V ⊗ W).character = V.character * W.character :=
FDRep.char_tensor V W/-- Isomorphic representations have equal characters, so the character only sees the class
`[V]` in the Grothendieck group. This applies Mathlib's `FDRep.char_iso`. -/
theorem char_iso {V W : FDRep k G} (i : V ≅ W) : V.character = W.character :=
FDRep.char_iso i/-- Evaluating the character at the identity gives the dimension: `χ_V(1) = dim V`. So
`dim : K₀(Rep G) → ℤ` is a ring homomorphism with positive values on non-zero
representations. This applies Mathlib's `FDRep.char_one`. -/
theorem char_one (V : FDRep k G) : V.character 1 = Module.finrank k V :=
FDRep.char_one VThe arithmetic core of Theorem 4:
/-- The Fibonacci fusion ring has basis `1, τ` with `τ ⊗ τ = 1 ⊕ τ`. A ring homomorphism to `ℤ`
would send `τ` to an integer `n` with `n² = 1 + n`, and there is none. Since `dim` is a ring
homomorphism `K₀(Rep G) → ℤ` (`char_one`, `char_tensor`), the Fibonacci fusion category is
not `Rep(G)` for any finite group `G`. (Its Frobenius–Perron dimension is the golden ratio.) -/
theorem fibonacci_no_integer_dimension : ¬ ∃ n : ℤ, n ^ 2 = 1 + n := by
rintro ⟨n, hn⟩
have h₁ : n ≤ 2 := by nlinarith
have h₂ : -1 ≤ n := by nlinarith
interval_cases n <;> omegaWhat is and is not formalised. Formalised: the cardinality and dimension statements, the two-term Euler characteristic identity, the symmetric, rigid structure of FDRep k G and the multiplicativity and isomorphism-invariance of characters (from Mathlib), and the integrality obstruction for the Fibonacci rule. Not formalised: Grothendieck groups as objects (Mathlib has no of an abelian category at this version), fusion categories, Frobenius–Perron dimension, module categories, Khovanov homology and the theorems of Chuang–Rouquier and Elias–Williamson.
Computing shadows, and what they miss
The first experiment builds , and as matrix groups, finds their one-dimensional characters by brute force, adds the trace of a two-dimensional representation, and computes the fusion rings exactly. and are visibly different groups (five involutions against one) with isomorphic fusion rings. It then approximates the Frobenius–Perron dimensions of the Fibonacci and Ising rings.
"""Fusion rings: decategorifying Rep(G), and a fusion ring that is not Rep(G).
The Grothendieck ring of Rep(G) has a basis of irreducible representations,
with V_i (x) V_j = sum_k N_ij^k V_k, and N_ij^k = <chi_i chi_j, chi_k>. We
build S3, D4 and Q8 as groups of matrices, find their one-dimensional
characters by brute force, take traces of a faithful two-dimensional
representation, check that these characters are orthonormal and exhaust the
group (sum of squares of dimensions = |G|), and compute the fusion rings
exactly. D4 and Q8 are not isomorphic (they have 5 and 1 elements of order 2)
but their fusion rings are isomorphic - and Rep(D4), Rep(Q8) are not even
equivalent as tensor categories (Tambara and Yamagami, 1998): the
Grothendieck ring forgets. Finally the Fibonacci fusion ring,
tau (x) tau = 1 + tau, has Frobenius-Perron dimension the golden ratio, so it
is not the Grothendieck ring of any Rep(G); the Ising ring has FPdim sqrt 2.
Exact for the groups; the FP dimensions are floating-point approximations.
"""
from fractions import Fraction
from itertools import permutations, product
import math
# Matrices have Gaussian-integer entries (re, im), so all arithmetic is exact.
ONE = ((1, 0), (0, 0)), ((0, 0), (1, 0))
def g_mul(a, b):
"""Product of Gaussian integers a = (re, im), b = (re, im)."""
return (a[0] * b[0] - a[1] * b[1], a[0] * b[1] + a[1] * b[0])
def m_mul(x, y):
"""Product of 2 x 2 matrices of Gaussian integers."""
def entry(i, j):
p, q = g_mul(x[i][0], y[0][j]), g_mul(x[i][1], y[1][j])
return (p[0] + q[0], p[1] + q[1])
return ((entry(0, 0), entry(0, 1)), (entry(1, 0), entry(1, 1)))
def generate(gens):
"""The finite group generated by some invertible 2 x 2 matrices."""
group, frontier = {ONE}, [ONE]
while frontier:
new = []
for g in frontier:
for s in gens:
h = m_mul(g, s)
if h not in group:
group.add(h)
new.append(h)
frontier = new
return [ONE] + sorted(group - {ONE}) # identity first
def trace(m):
"""Trace, as a Gaussian integer."""
return (m[0][0][0] + m[1][1][0], m[0][0][1] + m[1][1][1])
def element_order(m):
"""Order of a group element."""
k, x = 1, m
while x != ONE:
x, k = m_mul(x, m), k + 1
return k
def linear_characters(group):
"""All homomorphisms group -> {1, -1}, by checking every function."""
index = {g: i for i, g in enumerate(group)}
table = [[index[m_mul(a, b)] for b in group] for a in group]
found = []
for signs in product((1, -1), repeat=len(group)):
if all(signs[table[i][j]] == signs[i] * signs[j]
for i in range(len(group)) for j in range(len(group))):
found.append(list(signs))
return found
def character_table(gens):
"""Linear characters plus the trace of the defining 2-dim representation.
For S3, D4 and Q8 the characters here are real integers.
"""
group = generate(gens)
chars = linear_characters(group)
two = [trace(g) for g in group]
assert all(t[1] == 0 for t in two), "real-valued for these examples"
chars.append([t[0] for t in two])
return group, chars
def inner(f, g):
"""<f, g> = average of f * g over the group (real characters)."""
return Fraction(sum(a * b for a, b in zip(f, g)), len(f))
def fusion(chars):
"""N[i][j][k] = <chi_i chi_j, chi_k>."""
r = range(len(chars))
return [[[inner([x * y for x, y in zip(chars[i], chars[j])], chars[k])
for k in r] for j in r] for i in r]
def check_fusion_ring(n):
"""Non-negative integers, unit = basis element 0, commutative, associative."""
r = range(len(n))
integral = all(v.denominator == 1 and v >= 0
for a in n for b in a for v in b)
unit = all(n[0][j][k] == (j == k) for j in r for k in r)
comm = all(n[i][j][k] == n[j][i][k] for i in r for j in r for k in r)
assoc = all(sum(n[i][j][m] * n[m][k][l] for m in r)
== sum(n[j][k][m] * n[i][m][l] for m in r)
for i, j, k, l in product(r, repeat=4))
return integral and unit and comm and assoc
def isomorphic_fusion(n1, n2):
"""Is there a relabelling of basis elements (fixing the unit) with n1 = n2?"""
size = len(n1)
if size != len(n2):
return False
r = range(size)
for perm in permutations(range(1, size)):
s = (0,) + perm
if all(n1[i][j][k] == n2[s[i]][s[j]][s[k]]
for i in r for j in r for k in r):
return True
return False
def fp_dimension(matrix, steps=200):
"""Perron-Frobenius eigenvalue of a non-negative irreducible matrix.
Power iteration on M + I (whose dominant eigenvalue is strictly largest in
absolute value, so the iteration converges even when M is periodic, as
for Ising), then subtract 1.
"""
size = len(matrix)
shifted = [[matrix[i][j] + (i == j) for j in range(size)]
for i in range(size)]
v = [1.0] * size
lam = 0.0
for _ in range(steps):
w = [sum(a * b for a, b in zip(row, v)) for row in shifted]
lam = max(w) / max(v)
v = [x / max(w) for x in w]
return lam - 1
Z, P, M, I, J = (0, 0), (1, 0), (-1, 0), (0, 1), (0, -1)
GROUPS = {
# S3 = Weyl group of A2: the two simple reflections, in a basis of roots.
"S3": [((M, P), (Z, P)), ((P, Z), (P, M))],
# D4: rotation by 90 degrees and a reflection.
"D4": [((Z, M), (P, Z)), ((P, Z), (Z, M))],
# Q8: the quaternions i and j as 2 x 2 complex matrices.
"Q8": [((I, Z), (Z, J)), ((Z, P), (M, Z))],
}
def main():
rings = {}
for name, gens in GROUPS.items():
group, chars = character_table(gens)
n = fusion(chars)
rings[name] = n
dims = [c[0] for c in chars]
orth = all(inner(a, b) == (i == j) for i, a in enumerate(chars)
for j, b in enumerate(chars))
invol = sum(1 for g in group if element_order(g) == 2)
squares = sum(d * d for d in dims)
ok = orth and check_fusion_ring(n) and squares == len(group)
print(f"Rep({name}): |G| = {len(group)}, dims {dims}, elements of "
f"order 2: {invol}; checks {'pass' if ok else 'FAIL'}")
last = len(rings["S3"]) - 1
print(" in Rep(S3): V (x) V has multiplicities",
[int(v) for v in rings["S3"][last][last]], "(triv, sign, V)")
print(" in Rep(D4): E (x) E has multiplicities",
[int(v) for v in rings["D4"][4][4]], "(four lines, E)")
print(" fusion rings of D4 and Q8 isomorphic:",
isomorphic_fusion(rings["D4"], rings["Q8"]))
print()
fib = [[0, 1], [1, 1]] # multiplication by tau in the basis (1, tau)
lam = fp_dimension(fib)
print("Fibonacci ring: tau (x) tau = 1 + tau")
print(f" FPdim(tau) by power iteration = {lam:.12f}")
print(f" golden ratio (1 + sqrt 5)/2 = {(1 + math.sqrt(5)) / 2:.12f}")
ising = [[0, 1, 0], [1, 0, 1], [0, 1, 0]] # sigma on (1, sigma, psi)
print("Ising ring: sigma (x) sigma = 1 + psi, sigma (x) psi = sigma")
print(f" FPdim(sigma) = {fp_dimension(ising):.12f}"
f" (sqrt 2 = {math.sqrt(2):.12f})")
print()
print("Epistemic status: the groups, characters, fusion coefficients and")
print("ring axioms are computed exactly and exhaustively for these three")
print("groups. The FP dimension is a floating-point approximation; that")
print("d^2 = 1 + d has no integer root is proved in the lesson, and that")
print("Rep(D4), Rep(Q8) differ as tensor categories is a theorem not")
print("checked here.")
if __name__ == "__main__":
main()The second experiment builds Khovanov's complex for the trefoil and figure-eight knots from their PD codes, checks , and computes both the graded Euler characteristic (the Jones polynomial) and the homology over . For the figure-eight knot the Euler characteristic has two terms while the homology has six: categorification has added information.
"""Khovanov homology of small knots: a categorification you can compute.
Khovanov replaced the Kauffman state sum for the Jones polynomial by a chain
complex: each of the 2^n smoothings of an n-crossing diagram with k circles
contributes V^(x)k, where V = Q[x]/(x^2) has basis v+ (q-degree +1) and v-
(q-degree -1), and the edges of the cube of smoothings carry the
multiplication and comultiplication of V. The graded Euler characteristic of
the complex is the unnormalised Jones polynomial J^(q); its homology Kh is a
finer invariant. We build the complex exactly (rational arithmetic) from a PD
code, check d o d = 0, compute J^ and Kh over Q for the trefoil and the
figure-eight knot, and see that Kh has more terms than J^: for the
figure-eight knot J^ = q^-5 + q^5 but Kh has total rank 6. Exact computation
for these diagrams only; that Kh is a knot invariant is Khovanov's theorem.
"""
from fractions import Fraction
from itertools import product
# PD codes (Knot Atlas conventions): X[i, j, k, l] lists the edges at a
# crossing counterclockwise, starting from the incoming under-strand.
KNOTS = {
"trefoil 3_1": [(1, 4, 2, 5), (3, 6, 4, 1), (5, 2, 6, 3)],
"figure-eight 4_1": [(4, 2, 5, 1), (8, 6, 1, 5), (6, 3, 7, 4),
(2, 7, 3, 8)],
}
def crossing_sign(x):
"""+1 for a positive crossing: the over-strand runs from l to j."""
_, j, _, l = x
return 1 if j - l == 1 or l - j > 1 else -1
def circles(pd, state):
"""Circles of a smoothing, as sorted tuple of frozensets of edge labels.
0-smoothing joins (i, j) and (k, l); 1-smoothing joins (j, k) and (l, i).
"""
parent = {}
def find(a):
parent.setdefault(a, a)
while parent[a] != a:
parent[a] = parent[parent[a]]
a = parent[a]
return a
for (i, j, k, l), s in zip(pd, state):
pairs = [(i, j), (k, l)] if s == 0 else [(j, k), (l, i)]
for a, b in pairs:
parent[find(a)] = find(b)
groups = {}
for a in list(parent):
groups.setdefault(find(a), set()).add(a)
return tuple(sorted((frozenset(g) for g in groups.values()), key=min))
def generators(pd):
"""All (state, circles, labels) with labels in {+1, -1} per circle."""
out = []
for state in product((0, 1), repeat=len(pd)):
circ = circles(pd, state)
for labels in product((1, -1), repeat=len(circ)):
out.append((state, circ, labels))
return out
def degrees(pd, gen):
"""(homological degree t, quantum degree q) of a generator."""
n_minus = sum(1 for x in pd if crossing_sign(x) < 0)
n_plus = len(pd) - n_minus
state, _, labels = gen
r = sum(state)
return r - n_minus, sum(labels) + r + n_plus - 2 * n_minus
def differential(pd, gen):
"""d(gen) as a dict {(state, labels): coefficient}."""
state, circ, labels = gen
lab = dict(zip(circ, labels))
out = {}
for c, s in enumerate(state):
if s == 1:
continue
sign = (-1) ** sum(state[:c])
new_state = state[:c] + (1,) + state[c + 1:]
new_circ = circles(pd, new_state)
i, j, k, l = pd[c]
touched = [z for z in circ if z & {i, j, k, l}]
fixed = {z: lab[z] for z in circ if z not in touched}
new_touched = [z for z in new_circ if z not in fixed]
results = [] # list of (labels for new_touched circles, coefficient)
if len(touched) == 2: # merge two circles into one
a, b = lab[touched[0]], lab[touched[1]]
if a == 1 and b == 1:
results = [((1,), 1)]
elif a + b == 0:
results = [((-1,), 1)]
else: # split one circle into two
if lab[touched[0]] == 1:
results = [((1, -1), 1), ((-1, 1), 1)]
else:
results = [((-1, -1), 1)]
for vals, coef in results:
full = dict(fixed)
full.update(zip(new_touched, vals))
key = (new_state, tuple(full[z] for z in new_circ))
out[key] = out.get(key, 0) + sign * coef
return {k: v for k, v in out.items() if v}
def rank(rows):
"""Rank of a rational matrix (list of rows) by Gaussian elimination."""
m = [[Fraction(v) for v in r] for r in rows]
rk, cols = 0, len(m[0]) if m else 0
for c in range(cols):
piv = next((i for i in range(rk, len(m)) if m[i][c]), None)
if piv is None:
continue
m[rk], m[piv] = m[piv], m[rk]
for i in range(len(m)):
if i != rk and m[i][c]:
t = m[i][c] / m[rk][c]
m[i] = [a - t * b for a, b in zip(m[i], m[rk])]
rk += 1
return rk
def khovanov(pd):
"""Return (chain dims, homology dims), both dicts {(t, q): dimension}."""
gens = generators(pd)
key = {(g[0], g[2]): g for g in gens}
by_deg = {}
for g in gens:
by_deg.setdefault(degrees(pd, g), []).append(g)
chain = {d: len(v) for d, v in by_deg.items()}
def d_rank(t, q):
src, dst = by_deg.get((t, q), []), by_deg.get((t + 1, q), [])
if not src or not dst:
return 0
index = {(g[0], g[2]): n for n, g in enumerate(dst)}
rows = [[0] * len(src) for _ in dst]
for col, g in enumerate(src):
for target, coef in differential(pd, g).items():
assert target in key and degrees(pd, key[target]) == (t + 1, q)
rows[index[target]][col] += coef
return rank(rows)
homology = {}
for (t, q), dim in chain.items():
h = dim - d_rank(t, q) - d_rank(t - 1, q)
if h:
homology[(t, q)] = h
return chain, homology
def d_squared_is_zero(pd):
"""Check d(d(g)) = 0 for every generator."""
gens = generators(pd)
key = {(g[0], g[2]): g for g in gens}
for g in gens:
total = {}
for target, c in differential(pd, g).items():
for t2, c2 in differential(pd, key[target]).items():
total[t2] = total.get(t2, 0) + c * c2
if any(total.values()):
return False
return True
def euler(dims):
"""Graded Euler characteristic: {q-power: coefficient}."""
poly = {}
for (t, q), d in dims.items():
poly[q] = poly.get(q, 0) + (-1) ** t * d
return {q: c for q, c in sorted(poly.items()) if c}
def show_poly(poly):
"""Format {power: coefficient} as a Laurent polynomial in q."""
out = ""
for q, c in poly.items():
mag = "" if abs(c) == 1 else str(abs(c))
if not out:
out = ("-" if c < 0 else "") + f"{mag}q^{q}"
else:
out += (" - " if c < 0 else " + ") + f"{mag}q^{q}"
return out
def show_kh(dims):
"""Format {(t, q): dim} as a Poincare polynomial in t and q."""
parts = []
for (t, q), d in sorted(dims.items()):
mag = "" if d == 1 else str(d)
parts.append(f"{mag}t^{t}q^{q}")
return " + ".join(parts)
def main():
for name, pd in KNOTS.items():
chain, kh = khovanov(pd)
writhe = sum(crossing_sign(x) for x in pd)
print(f"{name}: {len(pd)} crossings, writhe {writhe}, "
f"{2 ** len(pd)} smoothings, chain rank {sum(chain.values())}")
print(" d o d = 0:", d_squared_is_zero(pd))
print(" Euler char of chain complex J^ =", show_poly(euler(chain)))
print(" Kh over Q =", show_kh(kh))
print(f" total rank of Kh = {sum(kh.values())};"
f" Euler char of Kh = J^: {euler(kh) == euler(chain)}")
print()
print("Epistemic status: exact rational linear algebra on the full cube")
print("of smoothings for these two diagrams (generators, d o d = 0, ranks).")
print("It shows homology carrying more information than its Euler")
print("characteristic here; it does not prove that Kh is a knot invariant")
print("(Khovanov 2000; Bar-Natan 2002), nor say anything about other knots.")
if __name__ == "__main__":
main()Both computations are exact (rational arithmetic) and exhaustive for the examples shown, and they match the published values (Bar-Natan, 2002). They prove nothing about other groups or knots; invariance of Khovanov homology is Theorem 5.
Exercises
1. Categorical representation theory
Warm-upHumanIn over , with the -dimensional irreducible representation, how many copies of occur in ?
2. Categorical representation theory
Warm-upHumanWhat is , the sum over the simple objects of the representation category of the dihedral group of order ?
3. Categorical representation theory
CoreHumanWhich of these statements are true? (Choose all that apply.)
4. Categorical representation theory
CoreHumanHow many fusion categories over , up to monoidal equivalence, have Grothendieck ring (two simple objects with )?
5. Categorical representation theory
CoreHumanThe proof that the Fibonacci fusion ring is not uses one property of . Which?
6. Categorical representation theory
CoreComputationalThe lesson's experiment finds, for the figure-eight knot, , while has six one-dimensional summands in bidegrees . What does this show?
7. Categorical representation theory
StretchHumanWhich information about a fusion category is lost when passing to its Grothendieck ring (as a ring with its basis of simple objects)? (Choose all that apply.)
8. Categorical representation theory
CoreFormalWhich Lean statement formalises “dimension is additive on short exact sequences ”? (Here f : A →ₗ[k] B, g : B →ₗ[k] C, and B is finite-dimensional.)
9. Categorical representation theory
StretchComputationalWrite fusion_coefficients(sizes, chars) that takes the class sizes of a finite group and a list of its (real-valued) irreducible characters, each a list of values on the classes, and returns the nested list N[i][j][k] as integers.
Common misconceptions
Misconception
"Categorification is a single construction." It is a family of methods, and there is no functor that categorifies. A structure may have many categorifications (the ring is categorified by every ), or none known. Even the Jones polynomial has more than one categorification: Khovanov homology and the odd Khovanov homology of Ozsváth, Rasmussen and Szabó (2013) have the same graded Euler characteristic but are different theories; and its relatives have their own ( link homologies for the polynomials, knot Floer homology for the Alexander polynomial).
Misconception
"The Grothendieck group remembers everything about a category." Much is lost: the associativity constraint (), the group itself ( and ), all morphisms and extensions (the module category of a finite-dimensional algebra has the same as the semisimple category with the same simple objects), and the differentials of a complex (Khovanov homology versus the Jones polynomial).
Misconception
" as a tensor category determines ." Not quite. As a symmetric tensor category it does (Tannaka–Krein duality, and Deligne's theorem in general), but there are non-isomorphic "isocategorical" groups with equivalent representation categories as tensor categories, forgetting the symmetry (Etingof–Gelaki, 2001).
Misconception
"Every fusion category is of something." Fusion categories with non-integer Frobenius–Perron dimensions, such as Fibonacci, admit no fibre functor to vector spaces (Theorem 4), so they are not representation categories of groups or Hopf algebras.
Misconception
"Khovanov homology is just the Jones polynomial written differently." It is strictly finer (figure-eight knot), it is functorial for cobordisms, and it detects the unknot — a property still unknown for the Jones polynomial.
Viewpoints
Topology— Knot homologies and quantum invariants
Khovanov homology is a functor from links and cobordisms to bigraded vector spaces, and its success (unknot detection, the -invariant, the Conway knot) made categorification a working tool of low-dimensional topology (see low-dimensional topology). In the other direction, fusion and modular categories produce topological invariants: a spherical fusion category yields the Turaev–Viro invariant of a -manifold by a state sum over triangulations, which equals the Reshetikhin–Turaev invariant of the Drinfeld centre (Turaev–Virelizier, Balsam–Kirillov). Noether's passage from Betti numbers to homology groups is the archetype of the whole subject.
Physics— Anyons and topological quantum computation
In dimensions, quasi-particles called anyons are described (in the standard mathematical model) by a modular tensor category: simple objects are particle types, fusion rules say which particles two can fuse into, and the braiding gives their exchange statistics. Freedman, Larsen and Wang (2002) proved that braiding Fibonacci anyons is universal for quantum computation, while Ising anyons are not. Moore and Seiberg (1989) found the axioms of modular categories in rational conformal field theory. The physical existence and controllability of such anyons is an experimental question; the mathematical theorems are about the categories.
Algebra— Hecke algebras, Soergel bimodules and blocks
The Hecke algebra of a Coxeter group is categorified by Soergel bimodules: indecomposable bimodules correspond to the Kazhdan–Lusztig basis, and graded ranks of morphism spaces give the KL polynomials. In modular representation theory, categorical actions organise the blocks of symmetric groups and of Hecke algebras: Ariki's theorem computes decomposition numbers via canonical bases, and Chuang–Rouquier derived equivalences prove Broué's conjecture for symmetric groups (see derived categories).
Geometry— Geometric representation theory
Many categorifications come from geometry. Perverse sheaves on the flag variety categorify the Hecke algebra, and the Beilinson–Bernstein localisation theorem (1981) identifies representations of a semisimple Lie algebra with -modules on ; the Kazhdan–Lusztig conjecture became a statement about intersection cohomology. Lusztig's canonical bases arise from perverse sheaves on spaces of quiver representations, and Nakajima quiver varieties carry geometric categorical actions. Here the categories are categories of sheaves on spaces, and functors are given by correspondences.
Combinatorics— Positivity as a shadow of dimension
A combinatorialist's favourite question — "what do these non-negative integers count?" — is often answered by categorification. Littlewood–Richardson coefficients are multiplicities in tensor products of representations of ; Kazhdan–Lusztig coefficients are dimensions of Hom spaces between Soergel bimodules; the coefficients of Kac polynomials have been interpreted through the cohomology of quiver varieties (Hausel, Letellier and Rodriguez-Villegas). A bijective proof of an identity is a categorification of it in .
Category theory— 2-representations and Tannakian duality
The natural home of categorical actions is -representation theory: actions of a monoidal category or -category on categories, with morphisms and -morphisms between them (see higher categories). Module categories over a fusion category form a -category, and Morita theory for fusion categories says that and have equivalent -categories of module categories iff their Drinfeld centres are equivalent as braided categories. Tannakian duality runs the other way: a symmetric tensor category with a fibre functor is of a recovered group (Deligne, 1990, 2002).
History and global context
- 1925–30. Emmy Noether, with Heinz Hopf and Leopold Vietoris, recasts Betti numbers as ranks of homology groups.
- 1957. Alexander Grothendieck introduces in his proof of the Grothendieck–Riemann–Roch theorem.
- 1979–81. Kazhdan and Lusztig formulate their conjectures; Beilinson–Bernstein and Brylinski–Kashiwara prove them via -modules and perverse sheaves.
- 1989–92. Moore and Seiberg axiomatise modular categories from conformal field theory; Reshetikhin–Turaev and Turaev–Viro construct -manifold invariants. Lusztig and, independently, Masaki Kashiwara (Kyoto) construct canonical and crystal bases (1990–91).
- 1994. Louis Crane and Igor Frenkel coin the word categorification.
- 1996–98. Susumu Ariki proves the LLT conjecture; Daisuke Tambara and Shigeru Yamagami classify the fusion categories now named after them.
- 1999–2000. Mikhail Khovanov categorifies the Jones polynomial.
- 2002–08. Pavel Etingof, Dmitri Nikshych and Viktor Ostrik develop the structure theory of fusion categories; Joseph Chuang and Raphaël Rouquier introduce -categorification; Khovanov–Lauda and Rouquier categorify quantum groups.
- 2011–20. Kronheimer–Mrowka (unknot detection), Elias–Williamson (Soergel's conjecture), Piccirillo (the Conway knot).
Further reading
- Pavel Etingof, Shlomo Gelaki, Dmitri Nikshych and Victor Ostrik, Tensor Categories (AMS Mathematical Surveys and Monographs 205, 2015) — the standard reference for tensor, fusion and module categories.
- Volodymyr Mazorchuk, Lectures on Algebraic Categorification (EMS QGM Master Class Series, 2012) — a short course on categorification in representation theory.
- John C. Baez and James Dolan, "Categorification", in Higher Category Theory (Contemporary Mathematics 230, 1998) — the programme, with many examples.
- Dror Bar-Natan, "On Khovanov's categorification of the Jones polynomial", Algebraic & Geometric Topology 2 (2002) — the accessible account, with computations.
- Joseph Chuang and Raphaël Rouquier, "Derived equivalences for symmetric groups and -categorification", Annals of Mathematics 167 (2008).
- Ben Elias, Shotaro Makisumi, Ulrich Thiel and Geordie Williamson, Introduction to Soergel Bimodules (2020).
- Vladimir Turaev, Quantum Invariants of Knots and 3-Manifolds (1994).
A reading path: Baez–Dolan for the idea → EGNO Ch. 1–4 for tensor and fusion categories (with always in mind) → Bar-Natan for Khovanov homology, or Mazorchuk then Chuang–Rouquier for categorical actions.