Decomposition and Products
Please Log In for full access to the web site.
Note that this link will take you to an external site (https://shimmer.mit.edu) to authenticate, and then you will be redirected back to this page.
These notes are being transcribed, condensed, and illustrated. They may lag or omit details, please refer to the handwritten notes for the full lecture.
This note covers how to algorithmically decompose a representation into its irreducible components, and then introduces two ways to build new representations from existing ones: tensor products of representations of the same group and direct products of commuting groups. We also briefly discuss the semi-direct product, which is essential for understanding Euclidean symmetry groups.
Try the code examples in the companion notebook: Open Notes Companion in Colab
1) Recap
From the previous note on characters:
- The Wonderful Orthogonality Theorem for Characters gives us orthogonality of rows (and columns) of the character table.
- The decomposition formula a_j = \frac{1}{h} \sum_k N_k \left[\chi^{(\Gamma_j)}(C_k)\right]^* \chi(C_k) tells us how many times each irrep appears in a reducible representation — just from the character table.
- The decomposition of a reducible representation into irreps is unique (up to similarity transforms within each equivalence class of irreps).
- The number of irreps equals the number of conjugacy classes.
- The regular representation contains \ell_j copies of each irrep \Gamma_j of dimension \ell_j \times \ell_j. So we know the irreps are in there, but we don't yet know how to extract them without the character table.
Using the characters of a representation, the character table of the group, and the WOT for characters, we can determine which irreps are inside a representation and how many times each appears. But we still don't know two things: how to find the irreps themselves if we don't already have the character table, and how to find the change-of-basis matrix U that block-diagonalizes the representation. Those are our goals today.
2) Decomposing Representations into Irreps
Given a (potentially reducible) representation S, how do we actually find the irreps inside it? In the rep2 exercises, you will code this algorithm.
2.1) Previous Approaches
If you already have examples of irreps, you can test whether they are contained in a given representation using Schur's Lemma and linalg.infer_change_of_basis. But what if we want a general method that doesn't require knowing the irreps in advance?
2.2) Setting Up the Problem
We want to find a matrix Q that commutes with the representation:
What does Schur's Lemma tell us about Q?
- If S is irreducible: Q must be a constant matrix c \, \mathbb{I}.
- If S is reducible: there exist multiple subspaces (corresponding to irreps) that may be mixed by a similarity transform so that S is not block diagonal.
Suppose we did have a representation in block diagonal form U^{-1} S \, U. What would a commuting matrix Q' look like in this basis? By Schur's Lemma, Q' must be a direct sum of constant matrices — one scalar per irreducible block:
where \ell_i is the dimension of the i-th irreducible block. The constants c_1, c_2, \ldots are not necessarily equal — different blocks can have different scalars.
2.3) Eigenspaces of Q Reveal the Irreps
What are the eigenspaces of Q'?
Each block c_i \, \mathbb{I}_{\ell_i} (a d \times d constant matrix for a d-dimensional irrep) has:
- Eigenvalue: c_i
- Eigenspace: the \ell_i-dimensional subspace spanned by that block's basis vectors
- Projector onto eigenspace: \mathbb{I}_{\ell_i} (the identity matrix of that block's dimension)
This is the key insight: the eigenspaces of Q correspond to irreducible (stable) subspaces of the representation!
Strategy: Find a matrix Q that commutes with the representation, then diagonalize Q. The eigenspaces of Q are the irreducible subspaces we're looking for.
Note: In theory, it is possible for c_1 = c_2 (two different irreducible blocks happen to have the same eigenvalue), but as we'll see, this isn't a problem in practice.
2.4) The Algorithm
Using linalg.infer_change_of_basis to find the irrep spaces:
-
Find the commutant space:
linalg.infer_change_of_basisreturns a set of matrices \{Q_1, Q_2, \ldots, Q_r\} that span the solution space of QS = SQ. -
Form a random combination: Since any linear combination of solutions is also a solution, construct Q'' = \sum_{i=1}^{r} \alpha_i \, Q_i where the \alpha_i are randomly sampled. This ensures (with probability 1) that distinct irreducible blocks get distinct eigenvalues.
-
Diagonalize Q'': Compute the eigenvalues \lambda_i and eigenspaces W_i of Q''.
-
Project the representation: For each eigenspace W_i, find an orthonormal basis B_i (the columns of B_i span W_i). The projected representation is:
These \rho_i are the irreps we want!
Important subtlety: The eigenspaces W_i are invariant (stable) subspaces, but they may not be orthogonal to one another. This can happen when S contains 2+ copies of the same irrep — by Schur's Lemma, we are free to "mix" these copies. However, each eigenspace still gives a valid irrep when projected.
See the Decomposition Notes and the rep2 exercise for a detailed implementation.
Try it in the companion notebook:
# Build Γ_1 ⊕ Γ_2, scramble with a random unitary
direct = rep.direct_sum(gamma_1, gamma_2)
scrambled = rep.similarity_transform(direct, U)
# Decompose — recovers the same irreps!
recovered = rep.decompose_rep_into_irreps(scrambled)
Explore the decomposition algorithm step-by-step on the regular representation of P(3):
3) "Multiplying" Representations
We've seen how to decompose representations. Now let's look at how to build new representations from existing ones. We highlight two cases:
- Case 1: Tensor product of two representations of the same group G.
- Case 2: Direct product of representations of two commuting groups G_A and G_B.
Confusingly, the Kronecker product \otimes is used in both cases.
4) Tensor Product of Representations
4.1) Definition
Given two representations D^{(\Gamma_i)}(g) and D^{(\Gamma_j)}(g) of the same group G, their tensor product is defined element-wise using the Kronecker product:
In component form:
This is used to describe how interactions between two representations behave under the group action.
4.2) It's a Valid Representation
We need to verify that D^{(\Gamma_i \otimes \Gamma_j)} satisfies the group multiplication rule. Using the Kronecker product identity (A \otimes B)(C \otimes D) = (AC) \otimes (BD):
The Kronecker product is bilinear, so this defines an invertible linear map. Additionally, (A \otimes B)^{-1} = A^{-1} \otimes B^{-1}, so inverses exist.
4.3) The Clebsch–Gordan Problem
Even if \Gamma_i and \Gamma_j are both irreps, the tensor product \Gamma_i \otimes \Gamma_j is in general reducible.
We can decompose this new representation back into irreps:
where c_{ij}^k are the Clebsch–Gordan coefficients (also called multiplicities or fusion coefficients). Finding these coefficients and the corresponding change-of-basis matrix is the Clebsch–Gordan problem.
This tensor product followed by decomposition is what we will commonly refer to as the "tensor product" operation in equivariant neural networks. It describes how features in two different representations interact to produce features in other representations.
You can compute tensor products and their decompositions (including the change-of-basis matrices) in the companion notebook:
# Compute Γ_i ⊗ Γ_j and decompose into irreps
tp = rep.tensor_product(irreps[i], irreps[j])
sub = rep.decompose_rep_into_irreps(tp)
# e.g. Γ_2 ⊗ Γ_2 = Γ_1 ⊕ Γ_1' ⊕ Γ_2
4.4) Characters Tell Us What, Matrices Tell Us How
A key property of the Kronecker product is that the trace factors: \text{tr}(A \otimes B) = \text{tr}(A) \cdot \text{tr}(B). This means the character of a tensor product representation is simply the product of the individual characters:
Using the decomposition formula a_k = \frac{1}{h} \sum_C N_C \left[\chi^{(\Gamma_k)}(C)\right]^* \chi^{(\Gamma_i \otimes \Gamma_j)}(C), we can determine the multiplicities c_{ij}^k entirely from the character table — no representation matrices needed. The full product table for P(3) below was constructed this way. Click any cell to see the character-level computation:
Note that \Gamma_1 acts as an identity for the tensor product, and \Gamma_1' \otimes \Gamma_1' = \Gamma_1 (the sign representation "squares" back to the trivial representation). The most interesting case is \Gamma_2 \otimes \Gamma_2 = \Gamma_1 \oplus \Gamma_1' \oplus \Gamma_2, where a 4-dimensional tensor product space decomposes into all three irreps.
Characters tell us what irreps appear in a tensor product (the multiplicities c_{ij}^k), but when we have data living in the vector space of a representation, we need the actual change-of-basis matrix to transform between the tensor product basis and the irrep basis. Knowing that \Gamma_2 \otimes \Gamma_2 = \Gamma_1 \oplus \Gamma_1' \oplus \Gamma_2 tells us the answer has three pieces, but to decompose a specific 4-component data vector into those pieces, we must compute the Clebsch–Gordan matrices explicitly.
5) Direct Product of Groups
5.1) Definition
Let G_A = \{E, A_2, \ldots, A_{h_a}\} and G_B = \{E, B_2, \ldots, B_{h_b}\} be two groups such that all operations of G_A commute with all operations of G_B. The direct product of these two groups is (Dresselhaus 6.3):
This group has h_a \times h_b elements. If G_A and G_B are groups, then G_A \otimes G_B is also a group.
5.2) Examples
Many important groups are direct products involving the inversion group \{E, i\} or the horizontal mirror group \{E, \sigma_h\}:
- D_3 \otimes i = D_{3d} — adding inversion to the triangular symmetry group.
- D_3 \otimes \sigma_h = D_{3h} — adding a horizontal mirror plane to the triangular symmetry group.
Are D_{3h} and D_{3d} isomorphic? (Think about this!)
Another example relevant to ML: a Hamiltonian matrix H_{a_i, b_j} with a permutation index a_i and an \text{SO}(3) angular momentum index b_j transforms under P \otimes \text{SO}(3).
5.3) Representations of Direct Product Groups
The direct product of representations is defined via the Kronecker product of matrices (Dresselhaus 6.4):
Theorem (Dresselhaus 6.4): The direct product of representations of two groups G_A and G_B (whose operations commute!) forms a representation of the direct product group.
That is, we need to show:
Proof sketch: Since the elements of G_A commute with those of G_B (by definition of the direct product), the multiplication property of elements in the direct product group is:
One also needs to show that the representation matrices satisfy the multiplication property — see Dresselhaus 6.4 for the details.
Key result (Dresselhaus 6.4): If D^{(a)} and D^{(b)} are irreps of G_A and G_B respectively, then D^{(a \otimes b)} is an irrep of the direct product group G_A \otimes G_B.
This is in contrast to the tensor product of two representations of the same group, which is generally reducible!
There are also relevant character theorems — see Dresselhaus 6.5.
6) Semi-Direct Product: Non-Commuting Groups
What happens when the two groups do not commute?
6.1) Motivation: Euclidean Groups
The Euclidean group E(n) describes all rigid motions of n-dimensional space: combinations of rotations, reflections, and translations. It decomposes as:
where T(n) is the translation group and O(n) is the orthogonal group (rotations + reflections). The symbol \rtimes denotes the semi-direct product — T(n) is a normal subgroup, but O(n) is not.
The quotient group is O(n) \cong E(n) / T(n), because T(n) is a normal subgroup: for any u \in E(n) and t \in T(n), u \, t \, u^{-1} is always in T(n).
However, O(n) is not a normal subgroup of E(n). To see this, let u be a rotation by 90° counterclockwise and t be a translation by (-1, -1). Then:
which changes the norm of the vector — so t \, u \, t^{-1} is not a rotation! This shows O(n) is not closed under conjugation by translations.
6.2) Rotations and Translations Do Not Commute
Here is a concrete example. Let A = translate by (-1, 0) and B = rotate by 90° counterclockwise. Starting from the point (1, 1):
- A then B: (1,1) \xrightarrow{A} (0,1) \xrightarrow{B} (-1,0)
- B then A: (1,1) \xrightarrow{B} (-1,1) \xrightarrow{A} (-2,1)
Since AB(1,1) = (-1, 0) \neq (-2, 1) = BA(1,1), these operations do not commute.
Because rotations and translations don't commute, the Euclidean group is a semi-direct product, not a direct product. The representation theory of semi-direct products is more involved than that of direct products — the irreps of the product do not simply factor into irreps of each subgroup.
6.3) Semi-Direct Products in Crystallography
In the semi-direct product case, you can get irreps that do not belong to either group independently. An important example arises in 3D crystallography:
- Symmorphic space groups: All symmetry operations are combinations of point group operations and lattice translations that exist independently.
- Nonsymmorphic space groups: Contain symmetry operations like screws (rotation + translation along the rotation axis) or glides (mirror + translation parallel to the mirror plane) that cannot be decomposed into a pure rotation/mirror and a pure lattice translation.
These "intertwined" symmetries are a direct consequence of the semi-direct product structure.
Related exercises: Linear Algebra and Representations I, Representations II