Skip to content
The Lumenary
First-year graduateGraduate 150 min

Representation theory of finite groups

Let a group act by matrices, split the action into irreducible pieces, and read everything off a small table of traces — which still cannot tell the dihedral group from the quaternions.

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

Symmetry, made linear

Groups are abstract, but they usually come to us acting on something: the symmetries of a molecule act on the displacements of its atoms, the rotations of a sphere act on functions on the sphere, the permutations of nn objects act on polynomials in nn variables. In each case the group acts by linear maps on a vector space, and the most useful thing one can do is to split the space into pieces that the group preserves and cannot split further. For a vibrating molecule the pieces are the normal modes; for functions on a circle under rotations they are the Fourier modes einθe^{in\theta}; for the sphere, the spherical harmonics.

Representation theory studies these linear actions. For finite groups over C\C the theory is complete and beautiful. Every representation splits into irreducible ones (Maschke); there are finitely many irreducible ones, as many as conjugacy classes; and each representation is determined by a single function on the group, its character χ(g)=tr⁡ρ(g)\chi(g) = \operatorname{tr} \rho(g), so that the whole theory of a group is compressed into a square character table. The theory grew out of a question of Dedekind about factoring a determinant, answered by Frobenius in 1896, and it now runs through number theory, combinatorics, physics and chemistry.

This lesson assumes groups (conjugacy classes, cosets) and advanced linear algebra (eigenvalues, traces, tensor products, duals). Unless stated otherwise, GG is a finite group and representations are finite-dimensional over C\C.

IntuitionH

Splitting the permutation action of S₃

Let S3S_3 permute the coordinates of C3\C^3. Two subspaces are obviously preserved: the line LL spanned by (1,1,1)(1, 1, 1), on which every permutation acts trivially, and the plane P={x+y+z=0}P = \{x + y + z = 0\}. So C3=L⊕P\C^3 = L \oplus P. The plane cannot be split further: a line in PP preserved by all of S3S_3 would have to be an eigenline of the 33-cycle, which acts on PP as a rotation by 120∘120^\circ with eigenvalues ω,ω2\omega, \omega^2 (ω=e2πi/3\omega = e^{2\pi i/3}) — and the transpositions swap those two eigenlines. Geometrically, PP is the plane of an equilateral triangle, with S3S_3 acting as its symmetry group.

Now take traces. The trace of a permutation matrix counts fixed points: 33 for the identity, 11 for a transposition, 00 for a 33-cycle. On LL the trace is always 11; so on PP it is 2,0,−12, 0, -1. These numbers turn out to determine everything: the decomposition of any representation of S3S_3 can be read off from its traces by taking inner products with the rows

(1,1,1),(1,−1,1),(2,0,−1)(1, 1, 1), \qquad (1, -1, 1), \qquad (2, 0, -1)

of the character table of S3S_3 (values on the identity, transpositions and 33-cycles). Why this works is the main theorem of the lesson.

DefinitionsH

Definitions

Definition— representation; intertwiner

A representation of GG on a vector space VV over a field kk is a homomorphism ρ:G→GL(V)\rho : G \to GL(V); we often write gvgv for ρ(g)v\rho(g)v. Its degree is dim⁡V\dim V. An intertwiner (or GG-map) between representations VV and WW is a linear map φ:V→W\varphi : V \to W with φ(gv)=gφ(v)\varphi(gv) = g\varphi(v) for all g,vg, v; they form a vector space HomG(V,W)\Hom_G(V, W). An invertible intertwiner is an isomorphism of representations.

Definition— subrepresentation; irreducible; completely reducible

A subspace U⊆VU \subseteq V with gU⊆UgU \subseteq U for all gg is a subrepresentation (an invariant subspace). VV is irreducible if V≠0V \neq 0 and its only subrepresentations are 00 and VV. It is completely reducible if it is a direct sum of irreducible subrepresentations.

Definition— group algebra

The group algebra k[G]k[G] has basis {eg:g∈G}\{e_g : g \in G\} and multiplication egeh=eghe_g e_h = e_{gh}. A representation of GG on VV is the same as a k[G]k[G]-module structure on VV (extend ρ\rho linearly), and intertwiners are k[G]k[G]-module homomorphisms. So the language of modules applies: irreducible representations are simple modules. The regular representation is k[G]k[G] acting on itself by left multiplication.

Definition— character; class function; inner product

The character of a representation ρ\rho is χρ:G→k\chi_\rho : G \to k, χρ(g)=tr⁡ρ(g)\chi_\rho(g) = \operatorname{tr} \rho(g). A class function is a function G→CG \to \C constant on conjugacy classes. For class functions α,β\alpha, \beta, define the Hermitian inner product

⟨α,β⟩=1∣G∣∑g∈Gα(g) β(g)‾.\langle \alpha, \beta \rangle = \frac{1}{|G|} \sum_{g \in G} \alpha(g)\, \overline{\beta(g)}.

Definition— restriction and induction

For a subgroup H≤GH \leq G, every representation VV of GG restricts to a representation Res⁡HGV\operatorname{Res}^G_H V of HH. Conversely, for a representation WW of HH, the induced representation is Ind⁡HGW=k[G]⊗k[H]W\operatorname{Ind}_H^G W = k[G] \otimes_{k[H]} W. Choosing coset representatives g1,…,grg_1, \dots, g_r of G/HG/H, it is ⨁igiW\bigoplus_i g_i W, of dimension [G:H]dim⁡W[G : H] \dim W, where gg sends giwg_i w to gj(hw)g_j (h w) when ggi=gjhg g_i = g_j h with h∈Hh \in H.

Worked examplesH

Examples

Example— One-dimensional representations

A one-dimensional representation is a homomorphism χ:G→C×\chi : G \to \C^\times, and it equals its character. The trivial representation sends everything to 11; the sign of SnS_n is another. For the cyclic group Cn=⟨g⟩C_n = \langle g \rangle there are exactly nn of them, χj(gm)=ζjm\chi_j(g^m) = \zeta^{jm} with ζ=e2πi/n\zeta = e^{2\pi i/n}, j=0,…,n−1j = 0, \dots, n-1 — the characters of the discrete Fourier transform. One-dimensional characters factor through the abelianisation G/[G,G]G/[G, G], so there are ∣G/[G,G]∣|G/[G,G]| of them.

Example— Permutation and regular representations

If GG acts on a finite set XX, it acts on CX\C^X by permuting basis vectors, and the character is χ(g)=#{x:gx=x}\chi(g) = \#\{x : gx = x\}, the number of fixed points. The regular representation is the case X=GX = G, with character χreg(1)=∣G∣\chi_{\mathrm{reg}}(1) = |G| and χreg(g)=0\chi_{\mathrm{reg}}(g) = 0 for g≠1g \neq 1.

Example— The two-dimensional representations of S₃, D₄ and Q₈

  • S3≅D3S_3 \cong D_3 acts on the plane of an equilateral triangle: the 33-cycle as a rotation by 120∘120^\circ, a transposition as a reflection. Character (2,0,−1)(2, 0, -1).
  • The dihedral group D4D_4 of order 88 (symmetries of a square, generated by a rotation rr by 90∘90^\circ and a reflection ss) acts on R2\R^2: r↦(0−110)r \mapsto \left(\begin{smallmatrix} 0 & -1 \\ 1 & 0 \end{smallmatrix}\right), s↦(100−1)s \mapsto \left(\begin{smallmatrix} 1 & 0 \\ 0 & -1 \end{smallmatrix}\right).
  • The quaternion group Q8={±1,±i,±j,±k}Q_8 = \{\pm 1, \pm i, \pm j, \pm k\} acts on C2\C^2 by i↦(i00−i)i \mapsto \left(\begin{smallmatrix} i & 0 \\ 0 & -i \end{smallmatrix}\right), j↦(01−10)j \mapsto \left(\begin{smallmatrix} 0 & 1 \\ -1 & 0 \end{smallmatrix}\right).

Each is irreducible: two non-commuting matrices cannot both be diagonal in one basis, and a two-dimensional representation is reducible exactly when it has an invariant line, after which (by Maschke) it splits into two one-dimensional pieces with commuting images. Both order-88 representations have character 22 at the identity, −2-2 at the central element (r2r^2, respectively −1-1), and 00 elsewhere.

Example— Representations that are not completely reducible

  • Infinite groups. Z\Z acting on C2\C^2 by n↦(1n01)n \mapsto \left(\begin{smallmatrix} 1 & n \\ 0 & 1 \end{smallmatrix}\right): the line Ce1\C e_1 is invariant, and it is the only invariant line, so it has no invariant complement.
  • Characteristic dividing ∣G∣|G|. Over Fp\mathbb{F}_p, the same matrix with n∈Fpn \in \mathbb{F}_p gives a representation of the cyclic group of order pp with a single invariant line (formalised below for p=2p = 2; computed for p≤7p \leq 7 in the second experiment).
ProofH

The main theorems

Theorem— Theorem 1 (Maschke, 1898)

Let GG be a finite group and kk a field whose characteristic does not divide ∣G∣|G|. Then every subrepresentation WW of a representation VV has an invariant complement. Consequently every finite-dimensional representation is completely reducible.

Proof

Choose any linear projection π:V→W\pi : V \to W (a linear map with π(w)=w\pi(w) = w for w∈Ww \in W), for instance by extending a basis of WW. Average it over GG:

π0=1∣G∣∑g∈Gg∘π∘g−1.\pi_0 = \frac{1}{|G|} \sum_{g \in G} g \circ \pi \circ g^{-1}.

This makes sense because ∣G∣|G| is invertible in kk. Each term maps VV into WW (as WW is invariant), and for w∈Ww \in W, gπ(g−1w)=gg−1w=wg\pi(g^{-1}w) = g g^{-1} w = w, so π0\pi_0 is again a projection onto WW. It is an intertwiner: for h∈Gh \in G,

hπ0h−1=1∣G∣∑g(hg) π (hg)−1=π0,h \pi_0 h^{-1} = \frac{1}{|G|} \sum_{g} (hg)\, \pi\, (hg)^{-1} = \pi_0,

reindexing g↦hgg \mapsto hg. Hence U=ker⁡π0U = \ker \pi_0 is invariant, and V=W⊕UV = W \oplus U. Complete reducibility follows by induction on dim⁡V\dim V.

∎

Theorem— Theorem 2 (Schur's lemma, 1905)

Let V,WV, W be irreducible representations of GG over a field kk.

  1. Every non-zero intertwiner V→WV \to W is an isomorphism; so HomG(V,W)=0\Hom_G(V, W) = 0 if V≇WV \not\cong W.
  2. If kk is algebraically closed and VV is finite-dimensional, every intertwiner V→VV \to V is a scalar: HomG(V,V)=k⋅id\Hom_G(V, V) = k \cdot \mathrm{id}.

Proof

(1) For an intertwiner φ\varphi, ker⁡φ\ker \varphi and im⁡φ\operatorname{im} \varphi are subrepresentations. If φ≠0\varphi \neq 0, then ker⁡φ≠V\ker \varphi \neq V, so ker⁡φ=0\ker \varphi = 0; and im⁡φ≠0\operatorname{im} \varphi \neq 0, so im⁡φ=W\operatorname{im} \varphi = W.

(2) φ\varphi has an eigenvalue λ∈k\lambda \in k (kk algebraically closed, V≠0V \neq 0 finite-dimensional). Then φ−λ id\varphi - \lambda\,\mathrm{id} is an intertwiner with non-zero kernel, hence zero by (1).

∎

A first consequence: every irreducible complex representation of an abelian group is one-dimensional, since each ρ(g)\rho(g) commutes with the action and is therefore a scalar, so every line is invariant.

From now on k=Ck = \C. Two facts about characters are immediate: χ(1)=dim⁡V\chi(1) = \dim V, and χ\chi is a class function, since tr⁡(ρ(h)ρ(g)ρ(h)−1)=tr⁡ρ(g)\operatorname{tr}(\rho(h)\rho(g)\rho(h)^{-1}) = \operatorname{tr} \rho(g). Moreover ρ(g)∣G∣=1\rho(g)^{|G|} = 1, so ρ(g)\rho(g) is diagonalisable with roots of unity λi\lambda_i as eigenvalues, and χ(g−1)=∑λi−1=∑λi‾=χ(g)‾\chi(g^{-1}) = \sum \lambda_i^{-1} = \sum \overline{\lambda_i} = \overline{\chi(g)}. Characters add over direct sums and multiply over tensor products, and the dual representation V∗V^* has character χV‾\overline{\chi_V}.

Theorem— Theorem 3 (orthogonality of characters)

For representations V,WV, W of GG,

⟨χV,χW⟩=dim⁡HomG(W,V).\langle \chi_V, \chi_W \rangle = \dim \Hom_G(W, V).

In particular, the characters of irreducible representations are orthonormal: ⟨χV,χW⟩=1\langle \chi_V, \chi_W \rangle = 1 if V≅WV \cong W and 00 otherwise.

Proof

Invariants. For any representation UU, the average e=1∣G∣∑gρU(g)e = \frac{1}{|G|}\sum_g \rho_U(g) satisfies ρU(h)e=e\rho_U(h) e = e for all hh, so it maps UU into the invariants UG={u:gu=u ∀g}U^G = \{u : gu = u \ \forall g\}, and it is the identity on UGU^G. So ee is a projection onto UGU^G, and its trace is its rank:

dim⁡UG=tr⁡e=1∣G∣∑gχU(g).\dim U^G = \operatorname{tr} e = \frac{1}{|G|} \sum_g \chi_U(g).

Apply it to U=Hom(W,V)U = \Hom(W, V), with GG acting by (g⋅φ)(w)=gφ(g−1w)(g \cdot \varphi)(w) = g\varphi(g^{-1}w). Its invariants are exactly the intertwiners, and since Hom(W,V)≅W∗⊗V\Hom(W, V) \cong W^* \otimes V, its character is χW(g)‾ χV(g)\overline{\chi_W(g)}\, \chi_V(g). So dim⁡HomG(W,V)=1∣G∣∑gχV(g)χW(g)‾=⟨χV,χW⟩\dim \Hom_G(W, V) = \frac{1}{|G|}\sum_g \chi_V(g)\overline{\chi_W(g)} = \langle \chi_V, \chi_W \rangle. For irreducible V,WV, W, Schur's lemma gives dim⁡HomG(W,V)=1\dim \Hom_G(W, V) = 1 or 00.

∎

Theorem— Corollary 4 (decomposing with characters)

Let V1,…,VrV_1, \dots, V_r be the distinct irreducible representations, with characters χ1,…,χr\chi_1, \dots, \chi_r and degrees did_i.

  1. In any decomposition V≅⨁iVimiV \cong \bigoplus_i V_i^{m_i}, the multiplicities are mi=⟨χV,χi⟩m_i = \langle \chi_V, \chi_i \rangle; so a representation is determined up to isomorphism by its character.
  2. VV is irreducible if and only if ⟨χV,χV⟩=1\langle \chi_V, \chi_V \rangle = 1.
  3. The regular representation contains each ViV_i exactly did_i times, C[G]≅⨁iVidi\C[G] \cong \bigoplus_i V_i^{d_i}, and hence ∑idi2=∣G∣\sum_i d_i^2 = |G|. In particular there are finitely many irreducibles.

Proof

(1) By orthonormality, ⟨∑jmjχj,χi⟩=mi\langle \sum_j m_j \chi_j, \chi_i \rangle = m_i. (2) ⟨χV,χV⟩=∑imi2\langle \chi_V, \chi_V \rangle = \sum_i m_i^2, which is 11 exactly when one mim_i is 11 and the rest vanish. (3) ⟨χreg,χi⟩=1∣G∣∣G∣ χi(1)‾=di\langle \chi_{\mathrm{reg}}, \chi_i \rangle = \frac{1}{|G|} |G| \, \overline{\chi_i(1)} = d_i; every irreducible VV occurs, since dV≥1d_V \geq 1; and comparing dimensions gives ∣G∣=∑di⋅di|G| = \sum d_i \cdot d_i.

∎

Theorem— Theorem 5 (the character table is square)

The irreducible characters form an orthonormal basis of the space of class functions on GG. Hence the number of irreducible representations equals the number of conjugacy classes. Moreover the columns are orthogonal: for g,h∈Gg, h \in G,

∑iχi(g) χi(h)‾={∣CG(g)∣if g,h are conjugate,0otherwise.\sum_{i} \chi_i(g)\, \overline{\chi_i(h)} = \begin{cases} |C_G(g)| & \text{if } g, h \text{ are conjugate}, \\ 0 & \text{otherwise.} \end{cases}

Proof

Orthonormal vectors are independent, so it remains to show that the χi\chi_i span. Let ff be a class function with ⟨f,χi⟩=0\langle f, \chi_i \rangle = 0 for all ii. For a representation VV put ρf=∑gf(g)‾ ρ(g)\rho_f = \sum_g \overline{f(g)}\, \rho(g). Since ff is a class function, ρ(h)ρfρ(h)−1=∑gf(g)‾ρ(hgh−1)=ρf\rho(h)\rho_f\rho(h)^{-1} = \sum_g \overline{f(g)}\rho(hgh^{-1}) = \rho_f, so ρf\rho_f is an intertwiner. On ViV_i it is a scalar λ\lambda by Schur's lemma, and taking traces, λdi=∑gf(g)‾χi(g)=∣G∣ ⟨f,χi⟩‾=0\lambda d_i = \sum_g \overline{f(g)} \chi_i(g) = |G|\, \overline{\langle f, \chi_i \rangle} = 0. So ρf=0\rho_f = 0 on every irreducible, hence on every representation (Maschke), in particular on the regular one, where ρf(e1)=∑gf(g)‾ eg=0\rho_f(e_1) = \sum_g \overline{f(g)}\, e_g = 0 forces f=0f = 0.

For the columns: let XX be the square matrix with entries XiC=∣C∣/∣G∣ χi(C)X_{iC} = \sqrt{|C|/|G|}\,\chi_i(C) over irreducibles ii and classes CC. Row orthonormality says XX‾T=IX \overline{X}^{\mathsf T} = I; for a square matrix this implies X‾TX=I\overline{X}^{\mathsf T} X = I, which is the column relation, using ∣G∣/∣C∣=∣CG(g)∣|G|/|C| = |C_G(g)| (orbit–stabiliser).

∎

Theorem— Theorem 6 (Frobenius reciprocity, 1898)

For H≤GH \leq G, a class function ψ\psi on HH and a class function χ\chi on GG, define the induced class function

Ind⁡ψ(g)=1∣H∣∑x∈Gx−1gx∈Hψ(x−1gx).\operatorname{Ind}\psi(g) = \frac{1}{|H|} \sum_{\substack{x \in G \\ x^{-1}gx \in H}} \psi(x^{-1} g x).

It is the character of Ind⁡HGW\operatorname{Ind}_H^G W when ψ=χW\psi = \chi_W, and

⟨Ind⁡ψ,χ⟩G=⟨ψ,Res⁡χ⟩H.\langle \operatorname{Ind} \psi, \chi \rangle_G = \langle \psi, \operatorname{Res} \chi \rangle_H.

Equivalently HomG(Ind⁡W,V)≅HomH(W,Res⁡V)\Hom_G(\operatorname{Ind} W, V) \cong \Hom_H(W, \operatorname{Res} V): induction is left adjoint to restriction.

Proof

The character. In Ind⁡W=⨁igiW\operatorname{Ind} W = \bigoplus_i g_i W, the element gg maps giWg_i W to gjWg_j W with ggi=gjhg g_i = g_j h. Only blocks with j=ij = i contribute to the trace, that is gi−1ggi∈Hg_i^{-1} g g_i \in H, and there the block acts as gi−1ggig_i^{-1} g g_i on WW. So χ(g)=∑i:gi−1ggi∈HχW(gi−1ggi)\chi(g) = \sum_{i : g_i^{-1}gg_i \in H} \chi_W(g_i^{-1} g g_i); replacing gig_i by any x∈giHx \in g_i H gives the same term, hence the formula with 1∣H∣∑x\frac{1}{|H|}\sum_x.

Reciprocity. Using that χ\chi is a class function and substituting h=x−1gxh = x^{-1}gx (for each xx a bijection between the gg with x−1gx∈Hx^{-1}gx \in H and HH),

⟨Ind⁡ψ,χ⟩G=1∣G∣∣H∣∑x∈G∑h∈Hψ(h) χ(xhx−1)‾=1∣H∣∑h∈Hψ(h)χ(h)‾=⟨ψ,Res⁡χ⟩H.\langle \operatorname{Ind}\psi, \chi \rangle_G = \frac{1}{|G||H|} \sum_{x \in G} \sum_{h \in H} \psi(h)\, \overline{\chi(xhx^{-1})} = \frac{1}{|H|} \sum_{h \in H} \psi(h) \overline{\chi(h)} = \langle \psi, \operatorname{Res}\chi \rangle_H.

The adjunction form follows from Theorem 3 and complete reducibility, or directly from Ind⁡W=C[G]⊗C[H]W\operatorname{Ind} W = \C[G] \otimes_{\C[H]} W and the tensor–hom adjunction.

∎

Theorem— Theorem 7 (four character tables)

With classes listed as indicated, the character tables of S3S_3, D4D_4, Q8Q_8 and S4S_4 are:

S3S_3 — classes 11, (12)(12), (123)(123) of sizes 1,3,21, 3, 2: rows (1,1,1)(1,1,1), (1,−1,1)(1,-1,1), (2,0,−1)(2,0,-1).

D4D_4 and Q8Q_8 — classes of sizes 1,1,2,2,21, 1, 2, 2, 2, namely 1,r2,{r±1},{s,sr2},{sr,sr3}1, r^2, \{r^{\pm 1}\}, \{s, sr^2\}, \{sr, sr^3\} for D4D_4 and 1,−1,{±i},{±j},{±k}1, -1, \{\pm i\}, \{\pm j\}, \{\pm k\} for Q8Q_8: rows

(1,1,1,1,1), (1,1,1,−1,−1), (1,1,−1,1,−1), (1,1,−1,−1,1), (2,−2,0,0,0).(1,1,1,1,1),\ (1,1,1,-1,-1),\ (1,1,-1,1,-1),\ (1,1,-1,-1,1),\ (2,-2,0,0,0).

S4S_4 — classes 11, (12)(34)(12)(34), (12)(12), (123)(123), (1234)(1234) of sizes 1,3,6,8,61, 3, 6, 8, 6: rows

(1,1,1,1,1), (1,1,−1,1,−1), (2,2,0,−1,0), (3,−1,1,0,−1), (3,−1,−1,0,1).(1,1,1,1,1),\ (1,1,-1,1,-1),\ (2,2,0,-1,0),\ (3,-1,1,0,-1),\ (3,-1,-1,0,1).

In particular D4D_4 and Q8Q_8 have the same character table, although they are not isomorphic.

Proof

S3S_3: three classes, so three irreducibles; trivial and sign; the third has degree dd with 1+1+d2=61 + 1 + d^2 = 6, so d=2d = 2, and its character is (2,0,−1)(2, 0, -1) from the intuition section (or from column orthogonality).

D4D_4 and Q8Q_8: five classes. In both groups the commutator subgroup is the centre {1,z}\{1, z\} (z=r2z = r^2, respectively −1-1), and G/{1,z}≅C2×C2G/\{1, z\} \cong C_2 \times C_2, which has four one-dimensional characters; they give the first four rows (they are 11 on zz). The fifth irreducible has degree dd with 4+d2=84 + d^2 = 8, so d=2d = 2; its character is the one computed in the examples, and column orthogonality confirms its values.

S4S_4: five classes. Trivial and sign. The permutation representation on C4\C^4 has character (4,0,2,1,0)(4, 0, 2, 1, 0) and ⟨χ,χ⟩=(16+0+24+8+0)/24=2\langle \chi, \chi \rangle = (16 + 0 + 24 + 8 + 0)/24 = 2, so it is the trivial representation plus an irreducible VV with character (3,−1,1,0,−1)(3, -1, 1, 0, -1). Then V⊗signV \otimes \mathrm{sign} has character (3,−1,−1,0,1)(3, -1, -1, 0, 1), a different irreducible. The last has degree dd with 1+1+9+9+d2=241 + 1 + 9 + 9 + d^2 = 24, so d=2d = 2; it is pulled back from S3S_3 through the surjection S4→S3S_4 \to S_3 (the action on the three ways of splitting {1,2,3,4}\{1,2,3,4\} into two pairs, with kernel {1,(12)(34),(13)(24),(14)(23)}\{1, (12)(34), (13)(24), (14)(23)\}), giving (2,2,0,−1,0)(2, 2, 0, -1, 0).

D4≇Q8D_4 \not\cong Q_8: D4D_4 has five elements of order 22 (r2r^2 and four reflections), Q8Q_8 only one (−1-1).

∎

The character table does not see the power map g↦g2g \mapsto g^2: the Frobenius–Schur indicator 1∣G∣∑gχ(g2)\frac{1}{|G|}\sum_g \chi(g^2) of the two-dimensional character is +1+1 for D4D_4 (it is realisable over R\R) and −1-1 for Q8Q_8 (it is quaternionic, not realisable over R\R), as the first experiment computes.

Explore

Explore: the two-dimensional representation of S₃

Below, AA is the rotation by 120∘120^\circ (a 33-cycle in S3S_3) and BB the reflection in the xx-axis (a transposition), the images of two generators in the two-dimensional representation of S3≅D3S_3 \cong D_3. Compare "first AA, then BB" with "first BB, then AA": they differ, so the representation is not a sum of one-dimensional ones (whose images would commute). Look also at the invariant lines: the reflection has two, the rotation none over R\R — there is no line preserved by both, which is irreducibility seen geometrically. Over C\C the rotation has two eigenlines, but the reflection swaps them. Check the traces: tr⁡A=−1\operatorname{tr} A = -1 and tr⁡B=0\operatorname{tr} B = 0, the character values χ(123)=−1\chi(123) = -1 and χ(12)=0\chi(12) = 0.

Two generators of S₃ acting on the plane

Rotation by 120° and a reflection do not commute: the representation is irreducible.

Entries of the matrix A
A =
Entries of the matrix B
B =
First A, then B: the matrix BA
BA =
−0.5−0.866−0.8660.5
First B, then A: the matrix AB
AB =
−0.50.8660.8660.5
  • image of the grid
  • image of the unit square
  • image of the flag
  • before the transformation
  • after the first step

AB ≠ BA: the order matters.

BA means “apply A first, then B”: products of transformations are read from right to left.

det(AB) = det(BA) = det A · det B = 1 · −1 = −1 The area scale factor is the same in either order.

Every representation in this lesson can be seen as symmetries of a shape: S3≅D3S_3 \cong D_3 for the triangle, D4D_4 for the square. Turn on the lines of symmetry and the rotation to see the elements of each group; the class sizes of D4D_4 (1,1,2,2,21, 1, 2, 2, 2) appear as the identity, the half-turn, the two quarter-turns, and the two pairs of mirror lines (through vertices, and through edge midpoints).

Symmetry groups of polygons

D₃ ≅ S₃ for the triangle, D₄ for the square.

Equilateral triangleTriangle

Lines of symmetry
3
Rotational symmetry
Order 3

All three sides are equal and all three angles are 60°.

Each dashed line is a line of symmetry: fold along it and the two halves match exactly.

Formal mathematicsF

Representation theory in Lean and Mathlib

Mathlib's Representation k G V is a monoid homomorphism G →* (V →ₗ[k] V), and FDRep k G is the category of finite-dimensional representations. Schur's lemma, proved here as in the text from the simplicity of kernels and images (stated for simple modules over any ring, which covers k[G]k[G]-modules), with Mathlib's versions:

schurLean 4Proved here from basic factsFormally verified
/-- **Schur's lemma.** A non-zero homomorphism between simple modules is bijective. (For
representations of `G` over `k`, take modules over the group algebra `k[G]`.) Human proof: the
kernel of `f` is a submodule of the simple module `M`, so it is `0` or `M`; it is not `M` because
`f ≠ 0`; so `f` is injective. The image is a submodule of the simple module `N`, so it is `0` or
`N`; it is not `0`; so `f` is surjective. -/
theorem schur {R M N : Type*} [Ring R] [AddCommGroup M] [Module R M] [AddCommGroup N]
    [Module R N] [IsSimpleModule R M] [IsSimpleModule R N] (f : M →ₗ[R] N) (hf : f ≠ 0) :
    Function.Bijective f := by
  constructor
  · rcases IsSimpleOrder.eq_bot_or_eq_top (LinearMap.ker f) with h | h
    · exact LinearMap.ker_eq_bot.mp h
    · exact absurd (LinearMap.ker_eq_top.mp h) hf
  · rcases IsSimpleOrder.eq_bot_or_eq_top (LinearMap.range f) with h | h
    · exact absurd (LinearMap.range_eq_bot.mp h) hf
    · exact LinearMap.range_eq_top.mp h
Axioms used: propext, Classical.choice, Quot.soundformal/Lumenary/RepresentationTheory.leanTry it in the Lean web editor
schur_libraryLean 4Applies a library theoremFormally verified
/-- Schur's lemma in Mathlib: `LinearMap.bijective_of_ne_zero`. -/
theorem schur_library {R M N : Type*} [Ring R] [AddCommGroup M] [Module R M] [AddCommGroup N]
    [Module R N] [IsSimpleModule R M] [IsSimpleModule R N] {f : M →ₗ[R] N} (hf : f ≠ 0) :
    Function.Bijective f :=
  LinearMap.bijective_of_ne_zero hf
Axioms used: propext, Classical.choice, Quot.soundformal/Lumenary/RepresentationTheory.leanTry it in the Lean web editor
schur_dimensionLean 4Applies a library theoremFormally verified
/-- **Schur's lemma over an algebraically closed field**: between irreducible finite-dimensional
representations, `dim Hom(V, W)` is `1` if `V ≅ W` and `0` otherwise; in particular every
endomorphism of an irreducible representation is a scalar. Mathlib:
`FDRep.finrank_hom_simple_simple`. -/
theorem schur_dimension {k G : Type} [Field k] [IsAlgClosed k] [Monoid G] (V W : FDRep k G)
    [Simple V] [Simple W] [Decidable (Nonempty (V ≅ W))] :
    Module.finrank k (V ⟶ W) = if Nonempty (V ≅ W) then 1 else 0 := by
  classical
  convert FDRep.finrank_hom_simple_simple V W
Axioms used: propext, Classical.choice, Quot.soundformal/Lumenary/RepresentationTheory.leanTry it in the Lean web editor

Maschke's theorem from Mathlib, proved there by the same averaging argument; and its failure when the characteristic divides ∣G∣|G|, proved here for the shear over F2\mathbb{F}_2, following the human argument:

maschkeLean 4Applies a library theoremFormally verified
/-- **Maschke's theorem**: if `G` is finite and `|G|` is non-zero in the field `k`, every
subrepresentation of a representation of `G` (a `k[G]`-submodule) has an invariant complement.
Mathlib: `MonoidAlgebra.Submodule.exists_isCompl`, proved by averaging a projection over `G`, as
in the lesson. -/
theorem maschke {k G V : Type*} [Field k] [Group G] [Finite G] [NeZero (Nat.card G : k)]
    [AddCommGroup V] [Module (MonoidAlgebra k G) V] (p : Submodule (MonoidAlgebra k G) V) :
    ∃ q : Submodule (MonoidAlgebra k G) V, IsCompl p q :=
  MonoidAlgebra.Submodule.exists_isCompl p
Axioms used: propext, Classical.choice, Quot.soundformal/Lumenary/RepresentationTheory.leanTry it in the Lean web editor
shearLean 4Formally verified
/-- The shear `(x, y) ↦ (x + y, y)` on `𝔽₂²`. -/
def shear : (ZMod 2 × ZMod 2) →ₗ[ZMod 2] (ZMod 2 × ZMod 2) :=
  (LinearMap.fst (ZMod 2) (ZMod 2) (ZMod 2) + LinearMap.snd (ZMod 2) (ZMod 2) (ZMod 2)).prod
    (LinearMap.snd (ZMod 2) (ZMod 2) (ZMod 2))
Axioms used: propext, Quot.soundformal/Lumenary/RepresentationTheory.leanTry it in the Lean web editor
shear_sqLean 4Proved here from basic factsFormally verified
/-- Over `𝔽₂` the shear has order `2`: `(x + y + y, y) = (x, y)`. So `1 ↦ id`, `g ↦ shear` is a
representation of the cyclic group of order `2` on `𝔽₂²`. -/
theorem shear_sq : shear ∘ₗ shear = LinearMap.id := by
  apply LinearMap.ext
  rintro ⟨x, y⟩
  simp only [shear, LinearMap.comp_apply, LinearMap.prod_apply, LinearMap.id_apply]
  revert x y
  decide
Axioms used: propext, Classical.choice, Quot.soundformal/Lumenary/RepresentationTheory.leanTry it in the Lean web editor
maschke_failsLean 4Proved here from basic factsFormally verified
/-- **Maschke fails when the characteristic divides `|G|`.** For the representation of the group
of order `2` by the shear on `𝔽₂²`, the invariant line `L = 𝔽₂ · (1, 0)` has no invariant
complement. Human proof: a complement `Q` contains a vector `b = (c, 1)` (since `L + Q` contains
`(0, 1)`); if `Q` were invariant, it would contain `shear b - b = (1, 0)`, which lies in `L`,
contradicting `L ∩ Q = 0`. -/
theorem maschke_fails :
    ¬ ∃ q : Submodule (ZMod 2) (ZMod 2 × ZMod 2),
      IsCompl (Submodule.span (ZMod 2) {((1 : ZMod 2), (0 : ZMod 2))}) q ∧
        ∀ x ∈ q, shear x ∈ q := by
  rintro ⟨q, hc, hq⟩
  have htop : ((0 : ZMod 2), (1 : ZMod 2)) ∈
      Submodule.span (ZMod 2) {((1 : ZMod 2), (0 : ZMod 2))} ⊔ q := by
    rw [hc.sup_eq_top]; trivial
  obtain ⟨a, ha, b, hb, hab⟩ := Submodule.mem_sup.mp htop
  obtain ⟨c, rfl⟩ := Submodule.mem_span_singleton.mp ha
  have hb2 : b.2 = 1 := by
    have := congrArg Prod.snd hab
    simpa using this
  have hdiff : shear b - b ∈ q := q.sub_mem (hq b hb) hb
  have hval : shear b - b = ((1 : ZMod 2), (0 : ZMod 2)) := by
    ext
    · simp [shear, hb2]
    · simp [shear]
  have hmem : ((1 : ZMod 2), (0 : ZMod 2)) ∈
      Submodule.span (ZMod 2) {((1 : ZMod 2), (0 : ZMod 2))} ⊓ q :=
    ⟨Submodule.subset_span rfl, hval ▸ hdiff⟩
  rw [hc.inf_eq_bot, Submodule.mem_bot] at hmem
  have := congrArg Prod.fst hmem
  simp at this
Axioms used: propext, Classical.choice, Quot.soundformal/Lumenary/RepresentationTheory.leanTry it in the Lean web editor

Characters are class functions, and irreducible characters are orthonormal (Mathlib, over any algebraically closed field in which ∣G∣|G| is invertible):

char_class_functionLean 4Applies a library theoremFormally verified
/-- **Characters are class functions**: `χ(h g h⁻¹) = χ(g)`, because the trace is invariant under
conjugation. Mathlib: `Representation.char_conj`. -/
theorem char_class_function {k G V : Type*} [Field k] [Group G] [AddCommGroup V] [Module k V]
    [FiniteDimensional k V] (ρ : Representation k G V) (g h : G) :
    ρ.character (h * g * h⁻¹) = ρ.character g :=
  ρ.char_conj g h
Axioms used: propext, Classical.choice, Quot.soundformal/Lumenary/RepresentationTheory.leanTry it in the Lean web editor
char_orthonormalLean 4Applies a library theoremFormally verified
/-- **Orthogonality of irreducible characters**: for irreducible representations `ρ, σ` of a
finite group over an algebraically closed field in which `|G|` is invertible,
`(1/|G|) ∑_g χ_ρ(g) χ_σ(g⁻¹)` is `1` if `σ ≅ ρ` and `0` otherwise. Mathlib:
`Representation.char_orthonormal`, proved from Schur's lemma and averaging, as in the lesson. -/
theorem char_orthonormal {k G V W : Type*} [Field k] [IsAlgClosed k] [Group G] [Fintype G]
    [Invertible (Nat.card G : k)] [AddCommGroup V] [Module k V] [FiniteDimensional k V]
    [AddCommGroup W] [Module k W] [FiniteDimensional k W] (ρ : Representation k G V)
    (σ : Representation k G W) [ρ.IsIrreducible] [σ.IsIrreducible]
    [Decidable (Nonempty (σ.Equiv ρ))] :
    (Nat.card G : k)⁻¹ * ∑ g : G, ρ.character g * σ.character g⁻¹ =
      if Nonempty (σ.Equiv ρ) then 1 else 0 := by
  classical
  convert Representation.char_orthonormal ρ σ
Axioms used: propext, Classical.choice, Quot.soundformal/Lumenary/RepresentationTheory.leanTry it in the Lean web editor

The character tables of S3S_3 and of the groups of order 88, with their orthogonality relations checked by evaluation, and the non-isomorphism of D4D_4 and Q8Q_8 (Mathlib's DihedralGroup 4 and QuaternionGroup 2) by counting solutions of g2=1g^2 = 1:

s3TableLean 4Formally verified
/-- The character table of `S₃`. Rows: the trivial, sign and 2-dimensional (standard)
characters; columns: the classes of the identity (size `1`), the transpositions (size `3`) and
the 3-cycles (size `2`). -/
def s3Table : Fin 3 → Fin 3 → ℤ := ![![1, 1, 1], ![1, -1, 1], ![2, 0, -1]]
Axioms used: propextformal/Lumenary/RepresentationTheory.leanTry it in the Lean web editor
s3_orthogonalityLean 4Proved here from basic factsFormally verified
/-- **Row orthogonality for `S₃`**: `∑_C |C| χᵢ(C) χⱼ(C) = 6 δᵢⱼ` (the characters are real, so no
complex conjugation is needed), and **column orthogonality**: `∑ᵢ χᵢ(C) χᵢ(C') = δ_{CC'} |G|/|C|`.
Checked by evaluation. -/
theorem s3_orthogonality :
    (∀ i j : Fin 3, ∑ c : Fin 3, ![1, 3, 2] c * s3Table i c * s3Table j c =
      if i = j then 6 else 0) ∧
    (∀ c c' : Fin 3, ∑ i : Fin 3, s3Table i c * s3Table i c' =
      if c = c' then 6 / ![1, 3, 2] c else 0) := by
  decide
Axioms used: propext, Classical.choice, Quot.soundformal/Lumenary/RepresentationTheory.leanTry it in the Lean web editor
order8TableLean 4Formally verified
/-- The common character table of `D₄` and `Q₈`. Columns: classes of sizes `1, 1, 2, 2, 2`
(for `D₄`: `1`, `r²`, `{r, r³}`, `{s, sr²}`, `{sr, sr³}`; for `Q₈`: `1`, `-1`, `±i`, `±j`, `±k`).
Rows: four 1-dimensional characters and one of degree `2`. -/
def order8Table : Fin 5 → Fin 5 → ℤ :=
  ![![1, 1, 1, 1, 1], ![1, 1, 1, -1, -1], ![1, 1, -1, 1, -1], ![1, 1, -1, -1, 1],
    ![2, -2, 0, 0, 0]]
Axioms used: propextformal/Lumenary/RepresentationTheory.leanTry it in the Lean web editor
order8_orthogonalityLean 4Proved here from basic factsFormally verified
/-- **Row orthogonality for the order-8 table**: `∑_C |C| χᵢ(C) χⱼ(C) = 8 δᵢⱼ`. With
`1 + 1 + 1 + 1 + 2² = 8 = |G|`. Checked by evaluation. -/
theorem order8_orthogonality :
    (∀ i j : Fin 5, ∑ c : Fin 5, ![1, 1, 2, 2, 2] c * order8Table i c * order8Table j c =
      if i = j then 8 else 0) ∧ ∑ i : Fin 5, order8Table i 0 ^ 2 = 8 := by
  decide
Axioms used: propext, Classical.choice, Quot.soundformal/Lumenary/RepresentationTheory.leanTry it in the Lean web editor
d4_not_q8Lean 4Proved here from basic factsFormally verified
/-- **…but `D₄` and `Q₈` are not isomorphic.** In `D₄` (Mathlib's `DihedralGroup 4`) six elements
satisfy `g² = 1` (the identity, `r²` and four reflections); in `Q₈` (`QuaternionGroup 2`) only
two do (`±1`). An isomorphism would carry one set bijectively onto the other. So the character
table does not determine the group. -/
theorem d4_not_q8 : IsEmpty (DihedralGroup 4 ≃* QuaternionGroup 2) := by
  constructor
  intro e
  have hcard : Fintype.card {g : DihedralGroup 4 // g * g = 1} =
      Fintype.card {h : QuaternionGroup 2 // h * h = 1} :=
    Fintype.card_congr (e.toEquiv.subtypeEquiv fun g => by
      change g * g = 1 ↔ e g * e g = 1
      rw [← map_mul, ← map_one e, e.injective.eq_iff])
  have h1 : Fintype.card {g : DihedralGroup 4 // g * g = 1} = 6 := by decide
  have h2 : Fintype.card {h : QuaternionGroup 2 // h * h = 1} = 2 := by decide
  omega
Axioms used: propext, Classical.choice, Quot.soundformal/Lumenary/RepresentationTheory.leanTry it in the Lean web editor

Frobenius reciprocity in its categorical form:

frobenius_reciprocityLean 4Applies a library theoremFormally verified
/-- **Frobenius reciprocity**: induction along a group homomorphism `φ : G →* H` is left adjoint to
restriction, so `Hom_H(Ind A, B) ≅ Hom_G(A, Res B)` naturally. Mathlib: `Rep.indResAdjunction`. -/
theorem frobenius_reciprocity (k : Type) {G H : Type} [CommRing k] [Group G] [Group H]
    (φ : G →* H) : Nonempty (Rep.indFunctor k φ ⊣ Rep.resFunctor φ) :=
  ⟨Rep.indResAdjunction k φ⟩
Axioms used: propext, Classical.choice, Quot.soundformal/Lumenary/RepresentationTheory.leanTry it in the Lean web editor

What is and is not formalised. Proved here: Schur's lemma, the counterexample to Maschke in characteristic 22, the orthogonality relations of the two tables as integer identities, and D4≇Q8D_4 \not\cong Q_8. From Mathlib: Maschke's theorem, Schur's lemma over algebraically closed fields, characters as class functions, orthonormality of irreducible characters, and induction as left adjoint to restriction. Not formalised: Theorem 5 (characters span the class functions; number of irreducibles = number of classes), ∑di2=∣G∣\sum d_i^2 = |G|, and the fact that the listed rows are the irreducible characters of these groups — our tables are definitions whose orthogonality we check, and the first experiment derives them from the groups.

ComputationC

Character tables, computed

The first experiment builds S3S_3, S4S_4, D4D_4 and Q8Q_8 explicitly, finds their conjugacy classes, and extracts the irreducible characters from permutation characters (on cosets of cyclic subgroups) and natural characters: it repeatedly subtracts known irreducible components and keeps any remainder χ\chi with ⟨χ,χ⟩=1\langle \chi, \chi \rangle = 1 — irreducible by Corollary 4. It then checks Theorem 5 and ∑di2=∣G∣\sum d_i^2 = |G|, compares the tables of D4D_4 and Q8Q_8, and computes the Frobenius–Schur indicators that tell them apart.

Character tables of S3, S4, D4 and Q8 from scratchPythonExact computationComputationally tested
"""Character tables of S3, S4, D4 and Q8 found from permutation characters.

Each group is built concretely (permutations, or 2 x 2 complex matrices for
the quaternion group Q8). We compute conjugacy classes by brute force and the
permutation characters of G acting on the cosets of each cyclic subgroup,
plus the trace of a natural matrix representation. Using the inner product
<a, b> = (1/|G|) sum_g a(g) b(g)^*, we strip off known irreducible components
and keep any remainder with <chi, chi> = 1 (an irreducible character, by the
orthogonality relations), also trying products of characters, until there are
as many irreducibles as classes. We then check sum of squares of degrees = |G|
and compare the tables of D4 and Q8. Exact rational arithmetic.
"""

from fractions import Fraction
from itertools import permutations

def compose(p, q):
    """Permutation composite p after q (tuples)."""
    return tuple(p[i] for i in q)

def perm_group(gens):
    """Closure of a list of permutations under composition."""
    elems = {tuple(range(len(gens[0])))}
    frontier = list(elems)
    while frontier:
        new = []
        for x in frontier:
            for g in gens:
                y = compose(g, x)
                if y not in elems:
                    elems.add(y)
                    new.append(y)
        frontier = new
    return sorted(elems)

def matmul2(a, b):
    """Product of 2 x 2 complex matrices stored as 4-tuples."""
    return (a[0] * b[0] + a[1] * b[2], a[0] * b[1] + a[1] * b[3],
            a[2] * b[0] + a[3] * b[2], a[2] * b[1] + a[3] * b[3])

def quaternion_group():
    """Q8 as matrices generated by i = diag(i, -i) and j = [[0, 1], [-1, 0]]."""
    gens = [(1j, 0, 0, -1j), (0, 1, -1, 0)]
    elems = {(1, 0, 0, 1)}
    frontier = list(elems)
    while frontier:
        new = [matmul2(g, x) for x in frontier for g in gens]
        new = [y for y in new if y not in elems]
        elems.update(new)
        frontier = new
    return sorted(elems, key=str)

class Group:
    """A finite group given by its elements and multiplication."""

    def __init__(self, elems, mul):
        self.elems, self.mul = list(elems), mul
        self.one = next(e for e in self.elems
                        if all(mul(e, x) == x for x in self.elems))
        self.inv = {x: next(y for y in self.elems if mul(x, y) == self.one)
                    for x in self.elems}
        self.classes = []
        seen = set()
        for x in self.elems:
            if x not in seen:
                cls = {mul(mul(g, x), self.inv[g]) for g in self.elems}
                seen |= cls
                self.classes.append(sorted(cls, key=str))
        self.classes.sort(key=lambda c: (self.order(c[0]), len(c)))
        self.class_of = {x: i for i, c in enumerate(self.classes) for x in c}

    def order(self, x):
        """Order of an element."""
        k, y = 1, x
        while y != self.one:
            y, k = self.mul(y, x), k + 1
        return k

    def cyclic_subgroup(self, x):
        """The subgroup generated by x."""
        out, y = [self.one], x
        while y != self.one:
            out.append(y)
            y = self.mul(y, x)
        return out

    def coset_character(self, sub):
        """Permutation character of G acting on the left cosets of sub."""
        cosets = {frozenset(self.mul(x, h) for h in sub) for x in self.elems}
        return tuple(sum(1 for c in cosets
                         if frozenset(self.mul(cls[0], y) for y in c) == c)
                     for cls in self.classes)

    def inner(self, a, b):
        """<a, b> = (1/|G|) sum over classes |C| a(C) b(C) (real characters)."""
        total = sum(len(c) * a[i] * b[i] for i, c in enumerate(self.classes))
        return Fraction(total, len(self.elems))

def irreducibles(group, candidates):
    """Irreducible characters extracted from candidates and their products."""
    irr, pool = [], list(candidates)
    while len(irr) < len(group.classes) and pool:
        progress = False
        for chi in pool + [tuple(a * b for a, b in zip(x, y))
                           for x in irr for y in pool]:
            rest = list(chi)
            for psi in irr:
                m = group.inner(chi, psi)
                rest = [r - m * p for r, p in zip(rest, psi)]
            rest = tuple(int(r) for r in rest)
            if any(rest) and group.inner(rest, rest) == 1:
                if rest[0] < 0:
                    rest = tuple(-r for r in rest)
                if rest not in irr:
                    irr.append(rest)
                    progress = True
        if not progress:
            break
    return sorted(irr, key=lambda c: (c[0], [-v for v in c]))

def fs_indicator(group, chi):
    """Frobenius-Schur indicator (1/|G|) sum_g chi(g^2): +1 real,
    -1 quaternionic, 0 not real-valued."""
    total = sum(chi[group.class_of[group.mul(x, x)]] for x in group.elems)
    return Fraction(total, len(group.elems))

def same_table(g, h, tg, th):
    """Equal character tables up to reordering rows and same-size columns."""
    if sorted(len(c) for c in g.classes) != sorted(len(c) for c in h.classes):
        return False
    n = len(g.classes)
    for perm in permutations(range(n)):
        if all(len(g.classes[i]) == len(h.classes[perm[i]]) for i in range(n)):
            rows = {tuple(row[perm[i]] for i in range(n)) for row in th}
            if rows == set(tg):
                return True
    return False

def sign(p):
    """Sign of a permutation, by counting inversions."""
    inv = sum(1 for i in range(len(p)) for j in range(i + 1, len(p))
              if p[i] > p[j])
    return -1 if inv % 2 else 1

def natural_characters(group, kind):
    """Sign and fixed-point characters of a permutation group, or the trace
    of the defining 2 x 2 matrices of Q8."""
    reps = [c[0] for c in group.classes]
    if kind == "perm":
        return [tuple(sign(x) for x in reps),
                tuple(sum(1 for i, v in enumerate(x) if i == v) for x in reps)]
    return [tuple(int((x[0] + x[3]).real) for x in reps)]

def build_groups():
    """The four groups, with the kind of their natural representation."""
    return {"S3": (Group(perm_group([(1, 0, 2), (1, 2, 0)]), compose), "perm"),
            "S4": (Group(perm_group([(1, 0, 2, 3), (1, 2, 3, 0)]), compose),
                   "perm"),
            "D4": (Group(perm_group([(1, 2, 3, 0), (0, 3, 2, 1)]), compose),
                   "perm"),
            "Q8": (Group(quaternion_group(), matmul2), "matrix")}

def character_table(group, kind):
    """Irreducible characters of the group, from coset and natural
    characters."""
    cands = [group.coset_character(group.elems)]        # trivial character
    cands += [group.coset_character(group.cyclic_subgroup(x))
              for x in group.elems]
    cands += natural_characters(group, kind)
    return irreducibles(group, list(dict.fromkeys(cands)))

def main():
    groups = {name: g for name, (g, _) in build_groups().items()}
    kinds = {name: kind for name, (_, kind) in build_groups().items()}
    tables = {}
    for name, g in groups.items():
        t = character_table(g, kinds[name])
        tables[name] = t
        sizes = [len(c) for c in g.classes]
        degrees = [row[0] for row in t]
        print(f"{name}: |G| = {len(g.elems)}, class sizes {sizes}, "
              f"degrees {degrees}")
        print(f"  irreducibles = classes: {len(t) == len(sizes)}; "
              f"sum of squares = |G|: {sum(d * d for d in degrees) == len(g.elems)}")
        if name in ("S3", "S4", "Q8"):
            for row in t:
                print("   ", row)
    d4, q8 = groups["D4"], groups["Q8"]
    print("D4 and Q8 have the same character table:",
          same_table(d4, q8, tables["D4"], tables["Q8"]))
    inv_d4 = sum(1 for x in d4.elems if d4.order(x) == 2)
    inv_q8 = sum(1 for x in q8.elems if q8.order(x) == 2)
    print(f"  but elements of order 2: D4 has {inv_d4}, Q8 has {inv_q8}")
    two = {name: next(r for r in tables[name] if r[0] == 2) for name in tables
           if name in ("D4", "Q8")}
    print("  Frobenius-Schur indicator (1/|G|) sum chi(g^2) of the 2-dim "
          "character:")
    print(f"    D4: {fs_indicator(d4, two['D4'])} (real), "
          f"Q8: {fs_indicator(q8, two['Q8'])} (quaternionic)")
    print()
    print("Epistemic status: exact computations for four specific groups; "
          "the extraction\nuses the orthogonality relations (proved in the "
          "lesson) to certify each\ncharacter as irreducible. It does not "
          "prove anything about other groups.")

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

The second experiment lists all lines of Fp2\mathbb{F}_p^2 for p=2,3,5,7p = 2, 3, 5, 7 and finds those invariant under the shear (order pp) and the swap (order 22), then runs Maschke's averaging, which needs to divide by ∣G∣|G|.

Maschke's theorem fails in characteristic pPythonExact computationExhaustive finite checkCounterexampleComputationally tested
"""Maschke's theorem and its failure when the characteristic divides |G|.

Over F_p, the shear J = [[1, 1], [0, 1]] has order p, so g -> J^g is a
representation of the cyclic group of order p on F_p^2. We list all p + 1
lines of F_p^2 and find the invariant ones: there is exactly one, so it has
no invariant complement and the representation is not completely reducible.
For contrast, the swap S = [[0, 1], [1, 0]] (a representation of the group of
order 2) has two complementary invariant lines when p is odd but only one
when p = 2. Finally we run Maschke's averaging on a projection: for p odd,
(pi + S pi S) / 2 is an equivariant projection; for p = 2 the division by
|G| = 2 is impossible, and the sum pi + S pi S is not a projection.
"""

def lines(p):
    """One spanning vector for each of the p + 1 lines of F_p^2."""
    return [(1, a) for a in range(p)] + [(0, 1)]

def apply(m, v, p):
    """Matrix times vector mod p."""
    return ((m[0][0] * v[0] + m[0][1] * v[1]) % p,
            (m[1][0] * v[0] + m[1][1] * v[1]) % p)

def on_line(w, v, p):
    """Is w a multiple of v mod p?"""
    return (w[0] * v[1] - w[1] * v[0]) % p == 0

def invariant_lines(m, p):
    """Lines of F_p^2 mapped into themselves by m."""
    return [v for v in lines(p) if on_line(apply(m, v, p), v, p)]

def matmul(a, b, p):
    """2 x 2 matrix product mod p."""
    return [[sum(a[i][k] * b[k][j] for k in range(2)) % p for j in range(2)]
            for i in range(2)]

def order(m, p):
    """Multiplicative order of an invertible 2 x 2 matrix mod p."""
    k, x = 1, m
    while x != [[1, 0], [0, 1]]:
        x, k = matmul(x, m, p), k + 1
    return k

SHEAR = [[1, 1], [0, 1]]
SWAP = [[0, 1], [1, 0]]
# projection onto the line spanned by (1, 1) along the line spanned by (1, 0)
PI = [[0, 1], [0, 1]]

def averaged(p):
    """sum over G = {1, S} of g pi g^-1, divided by |G| = 2 if possible."""
    total = [[(PI[i][j] + matmul(matmul(SWAP, PI, p), SWAP, p)[i][j]) % p
              for j in range(2)] for i in range(2)]
    if p == 2:
        return total
    half = pow(2, p - 2, p)
    return [[x * half % p for x in row] for row in total]

def main():
    print(" p  order of shear  invariant lines (shear)  invariant lines (swap)")
    for p in (2, 3, 5, 7):
        print(f"{p:2}  {order(SHEAR, p):14}  {str(invariant_lines(SHEAR, p)):23}"
              f"  {invariant_lines(SWAP, p)}")
    for p in (3, 5, 2):
        e = averaged(p)
        proj = matmul(e, e, p) == e
        equiv = matmul(e, SWAP, p) == matmul(SWAP, e, p)
        label = "(pi + S pi S)/2" if p != 2 else "pi + S pi S (no 1/2)"
        print(f"p = {p}: {label} = {e}")
        print(f"  idempotent: {proj}; commutes with S: {equiv}")
    print()
    print("Epistemic status: exhaustive over all lines of F_p^2 for the four "
          "primes shown,\nwith exact modular arithmetic: genuine "
          "counterexamples to complete reducibility\nwhen p divides |G|. "
          "Maschke's theorem itself is proved in the lesson.")

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

Exercises

1. Representation theory of finite groups

Warm-upHuman

The alternating group A4A_4 (order 1212) has 44 conjugacy classes and exactly 33 one-dimensional complex representations. What is the degree of its remaining irreducible representation?

2. Representation theory of finite groups

Warm-upHuman

Which statements are true for complex representations of a finite group GG? (Choose all that apply.)

Choose all that apply

3. Representation theory of finite groups

CoreHuman

A representation of S3S_3 has character χ=(4,0,1)\chi = (4, 0, 1) on the classes of the identity, the transpositions and the 33-cycles (sizes 1,3,21, 3, 2). Decompose it into irreducibles (1\mathbf{1} trivial, ε\varepsilon sign, VV two-dimensional).

Choose one

4. Representation theory of finite groups

CoreHuman

S4S_4 permutes the 66 two-element subsets of {1,2,3,4}\{1, 2, 3, 4\}. The character of this permutation representation on the classes 1,(12)(34),(12),(123),(1234)1, (12)(34), (12), (123), (1234) (sizes 1,3,6,8,61, 3, 6, 8, 6) is (6,2,2,0,0)(6, 2, 2, 0, 0). Compute ⟨χ,χ⟩\langle \chi, \chi \rangle, the number of irreducible constituents counted with squared multiplicity.

5. Representation theory of finite groups

CoreHuman

In the proof of Maschke's theorem we replace a projection π:V→W\pi : V \to W by π0=1∣G∣∑ggπg−1\pi_0 = \frac{1}{|G|}\sum_g g\pi g^{-1}. Which step uses that the characteristic of kk does not divide ∣G∣|G|?

Choose one

6. Representation theory of finite groups

StretchHuman

Which of these representations are not completely reducible? (Choose all that apply.)

Choose all that apply

7. Representation theory of finite groups

CoreHuman

Let ω\omega be a non-trivial one-dimensional character of A3={1,(123),(132)}≤S3A_3 = \{1, (123), (132)\} \le S_3. What is Ind⁡A3S3ω\operatorname{Ind}_{A_3}^{S_3} \omega?

Choose one

8. Representation theory of finite groups

CoreFormal

Which Lean statement says that the shear representation over F2\mathbb{F}_2 is not completely reducible, as in maschke_fails? (Here L abbreviates Submodule.span (ZMod 2) {((1 : ZMod 2), (0 : ZMod 2))}.)

Choose one

9. Representation theory of finite groups

StretchComputational

Write multiplicities(chi, table, sizes): given a real character chi (values on the conjugacy classes), the character table (a list of rows of real irreducible characters, same class order) and the class sizes, return the list of multiplicities mi=1∣G∣∑C∣C∣ χ(C) χi(C)m_i = \frac{1}{|G|}\sum_C |C|\,\chi(C)\,\chi_i(C) as integers, where ∣G∣=∑C∣C∣|G| = \sum_C |C|.

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

Common misconceptions

Misconception

"Every representation of a finite group is completely reducible." Only when the characteristic of the field does not divide ∣G∣|G|. Over Fp\mathbb{F}_p, the cyclic group of order pp acting by (1101)\left(\begin{smallmatrix} 1 & 1 \\ 0 & 1 \end{smallmatrix}\right) has exactly one invariant line, with no invariant complement; the averaging in Maschke's proof needs 1/∣G∣1/|G|. The theory of representations in characteristic dividing ∣G∣|G| — modular representation theory, founded by Richard Brauer — is much harder and still full of open problems.

Misconception

"The character table determines the group." D4D_4 and Q8Q_8 have the same table but are not isomorphic. The table determines a lot — the order, the class sizes, the normal subgroups, whether the group is abelian, simple or solvable — but not the power maps or the Frobenius–Schur indicators, and not the group itself.

Misconception

"Irreducible over R\R means irreducible over C\C." The rotation by 90∘90^\circ gives an irreducible two-dimensional real representation of C4C_4 (no real eigenvector), but over C\C it splits into the two eigenlines with eigenvalues ±i\pm i. Schur's lemma in the form "intertwiners are scalars" needs an algebraically closed field: here HomC4(R2,R2)≅C\Hom_{C_4}(\R^2, \R^2) \cong \C.

Misconception

"The tensor product of irreducible representations is irreducible." For the two-dimensional representation VV of S3S_3, χV2=(4,0,1)\chi_V^2 = (4, 0, 1) and ⟨χV2,χV2⟩=(16+0+2)/6=3\langle \chi_V^2, \chi_V^2 \rangle = (16 + 0 + 2)/6 = 3: V⊗V≅1⊕sign⊕VV \otimes V \cong \mathbf{1} \oplus \mathrm{sign} \oplus V. Decomposing tensor products (Clebsch–Gordan problems) is one of the central computations of the subject.

ViewpointsH

Viewpoints

Geometry— Groups as symmetries; the cube

Every finite group is a symmetry group, and its representations are the ways it can act by linear symmetries. The rotation group of the cube is isomorphic to S4S_4, acting on the four long diagonals. Its action on R3\R^3 is a three-dimensional representation: the identity has trace 33; the three half-turns about face axes, forming the class of (12)(34)(12)(34), have trace −1-1; the eight rotations by 120∘120^\circ about long diagonals (33-cycles) have trace 00; the six quarter-turns about face axes (44-cycles) have trace 11; and the six half-turns about edge axes (transpositions) have trace −1-1. This is the row (3,−1,−1,0,1)(3, -1, -1, 0, 1) of the table of S4S_4, the standard representation twisted by the sign — which proves at once that the cube's rotations act irreducibly on space. Klein's Erlangen programme reads geometry through such groups; crystallographic point groups and their character tables organise the symmetries of crystals (see transformation geometry).

Analysis— Fourier analysis on groups

For an abelian group the irreducible characters are homomorphisms G→S1G \to S^1, and expanding a function f:G→Cf : G \to \C in characters is Fourier analysis: on Z/n\Z/n it is the discrete Fourier transform, f^(j)=⟨f,χj⟩\hat f(j) = \langle f, \chi_j \rangle, computed by the fast Fourier transform. For non-abelian GG, Corollary 4(3) says C[G]≅⨁iEnd⁡(Vi)\C[G] \cong \bigoplus_i \operatorname{End}(V_i) (Wedderburn), and the Fourier transform of ff is the family of matrices ∑gf(g)ρi(g)\sum_g f(g)\rho_i(g). For compact groups, averaging over GG becomes integration against Haar measure, and the Peter–Weyl theorem (1927) decomposes L2(G)L^2(G) in the same way; for the circle it is classical Fourier series, and for SO(3)SO(3) acting on the sphere it gives spherical harmonics, with L2(S2)=⨁^ℓHℓL^2(S^2) = \widehat{\bigoplus}_{\ell} \mathcal{H}_\ell, dim⁡Hℓ=2ℓ+1\dim \mathcal{H}_\ell = 2\ell + 1 (see Lie groups).

Physics— Degeneracy and selection rules

If a symmetry group GG acts on the state space of a quantum system and commutes with the Hamiltonian HH, then each eigenspace of HH is a representation of GG; Schur's lemma says HH acts as a scalar on each isotypic piece. So, generically, the degeneracies of energy levels are the dimensions of irreducible representations — for a molecule with symmetry group D3D_3 one sees levels of multiplicity 11 and 22 — and a level of dimension dd that is not irreducible signals hidden symmetry or accident. Characters give selection rules: a transition between states in representations VV and WW, driven by an operator transforming like UU, can occur only if 1\mathbf{1} appears in V∗⊗U⊗WV^* \otimes U \otimes W. Wigner and Weyl introduced these methods around 1927–31; they are theorems about the symmetric model, and the physical predictions are only as good as the model (see quantum mechanics).

Number theory— Dirichlet characters and Artin L-functions

The characters of the abelian group (Z/n)×(\Z/n)^\times — Dirichlet characters — were the first characters in mathematics. Dirichlet (1837) used their orthogonality to isolate the primes p≡a(modn)p \equiv a \pmod n: the indicator of the class aa is 1φ(n)∑χχ(a)‾χ\frac{1}{\varphi(n)}\sum_\chi \overline{\chi(a)}\chi, and the non-vanishing of L(1,χ)L(1, \chi) for χ≠1\chi \neq 1 gives infinitely many such primes. For a Galois extension K/QK/\Q with group GG, each representation of GG has an Artin LL-function, and Artin's conjecture that these are entire for non-trivial irreducibles remains open in general. The Langlands programme proposes a vast correspondence between such Galois representations and automorphic representations (see algebraic number theory and the Langlands programme).

Category theory— Representations as functors; Tannaka duality

A group GG is a one-object category BGBG, and a representation is a functor BG→VectkBG \to \cat{Vect}_k; intertwiners are natural transformations, so Rep(G)=[BG,Vectk]\mathrm{Rep}(G) = [BG, \cat{Vect}_k] (see functors). Restriction along H↪GH \hookrightarrow G is precomposition, and induction is its left adjoint (Theorem 6) — a left Kan extension. Over C\C, Rep(G)\mathrm{Rep}(G) is semisimple with finitely many simple objects, and the character table records its Grothendieck ring only additively; the tensor product adds the fusion rules, which coincide for D4D_4 and Q8Q_8. Tannaka–Krein duality (in Deligne's form for symmetric tensor categories) says that GG is recovered from Rep(G)\mathrm{Rep}(G) as a symmetric monoidal category with its forgetful functor to vector spaces — structure that does distinguish D4D_4 from Q8Q_8. This is the starting point of categorical representation theory.

History & global context

History and global context

  • Peter Gustav Lejeune Dirichlet (1837) used characters of (Z/n)×(\Z/n)^\times to prove his theorem on primes in arithmetic progressions; characters of finite abelian groups were developed by Dedekind and Weber.
  • Richard Dedekind asked Ferdinand Georg Frobenius about the factorisation of the "group determinant" det⁡(xgh−1)\det(x_{gh^{-1}}); in answering (1896) Frobenius created the characters of non-abelian groups, and soon after induced representations and reciprocity (1898). Heinrich Maschke proved complete reducibility (1898–99); William Burnside used characters to prove his paqbp^aq^b theorem (1904); Issai Schur gave a new foundation of the theory based on his lemma (1905); Alfred Young and Frobenius found the representations of SnS_n, indexed by partitions.
  • Emmy Noether recast the subject as the theory of modules over the group algebra (1929). Hermann Weyl and Eugene Wigner brought representations into quantum mechanics (1927–31), and Fritz Peter and Weyl extended the theory to compact groups (1927). Richard Brauer founded modular representation theory from the 1930s.
  • Infinite-dimensional representations of Lie groups were developed by Harish-Chandra, Israel Gelfand and many others from the 1940s; Robert Langlands's conjectures (from 1967) link representation theory with number theory, and research in the field is now pursued worldwide.
Further reading

Further reading

  • Jean-Pierre Serre, Linear Representations of Finite Groups (1977) — Part I is the classic concise course on characters over C\C.
  • William Fulton and Joe Harris, Representation Theory: A First Course (1991) — Lectures 1–3 for finite groups, then on to Lie groups and algebras.
  • Gordon James and Martin Liebeck, Representations and Characters of Groups (2nd ed., 2001) — a gentle, example-rich undergraduate text.
  • I. Martin Isaacs, Character Theory of Finite Groups (1976) — the standard advanced text.
  • Pavel Etingof et al., Introduction to Representation Theory (2011) — finite groups, quivers and categories in one short book.
  • Shlomo Sternberg, Group Theory and Physics (1994) — representations in quantum mechanics and chemistry.