Characters

The character of an irrep is the trace of its representation matrix, $\chi_\lambda(U) = \operatorname{tr}\rho_\lambda(U)$. Because the trace is unchanged by conjugation ($\chi(U)=\chi(V^\dagger U V)$ for unitary $V$), $\chi_\lambda$ depends on U only through its eigenvalues (it is a class function). character(λ, U) computes it by summing the diagonal group functions over the GT basis (see group functions).

julia> using GroupFunctions
julia> λ = [2, 1, 0];
julia> U = su2_block(3, 1, (0.0, pi/3, 0.0));
julia> character(λ, U)6.464101615137754 + 0.0im

Orthogonality

Characters of distinct irreps are orthonormal under the Haar measure on U(d):

\[\langle \chi_\lambda, \chi_\mu \rangle = \int_{U(d)} \overline{\chi_\lambda(U)}\,\chi_\mu(U)\,dU = \delta_{\lambda\mu}.\]

In particular, for a single irrep $\langle |\chi_\lambda|^2 \rangle = 1$. This is a statement about averages, and we can exemplified it by sampling.

Here we draw Haar-random U(3) matrices with a QR-based sampler and average $|\chi_\lambda|^2$. The average approaches 1; the estimator is noisy, so a small sample scatters by several percent, use roughly $2 \times 10^4$ samples or more:

julia> using GroupFunctions
julia> using LinearAlgebra: Diagonal, diag, qr
julia> using Random: randn, seed!
julia> using Statistics: mean
julia> # Alternative with RandomMatrices.jl: # using RandomMatrices: Haar # rand(Haar(2), d) function haar_unitary(d) z = randn(ComplexF64, d, d) F = qr(z) phases = diag(F.R) ./ abs.(diag(F.R)) Matrix(F.Q) * Diagonal(phases) endhaar_unitary (generic function with 1 method)
julia> λ = [2, 1, 0];
julia> nsamples = 20000;
julia> seed!(420);
julia> values = [character(λ, haar_unitary(3)) for _ in 1:nsamples];
julia> mean(abs2, values)1.0020718103090207

The Weyl character formula

Computing $\chi_\lambda(U)$ does not require building $\rho_\lambda(U)$ (a matrix of size $\dim V_\lambda$) and tracing it. The Weyl character formula recovers the same trace from $\lambda$ and the eigenvalues $x_1,\dots,x_d$ of U alone, as a ratio of two $d\times d$ determinants. The denominator depends only on $d$:

\[\det\begin{pmatrix} x_1^{d-1} & x_1^{d-2} & \cdots & 1 \\ x_2^{d-1} & x_2^{d-2} & \cdots & 1 \\ \vdots & \vdots & & \vdots \\ x_d^{d-1} & x_d^{d-2} & \cdots & 1 \end{pmatrix} = \prod_{i<j}(x_i - x_j),\]

the Vandermonde determinant. The numerator is the same matrix with the partition added into the exponents, so the $(i,j)$-entry is $x_i^{\lambda_j + d - j}$:

\[\det\begin{pmatrix} x_1^{\lambda_1+d-1} & x_1^{\lambda_2+d-2} & \cdots & x_1^{\lambda_d} \\ x_2^{\lambda_1+d-1} & x_2^{\lambda_2+d-2} & \cdots & x_2^{\lambda_d} \\ \vdots & \vdots & & \vdots \\ x_d^{\lambda_1+d-1} & x_d^{\lambda_2+d-2} & \cdots & x_d^{\lambda_d} \end{pmatrix}.\]

Their ratio is the Schur polynomial $s_\lambda$:

\[\chi_\lambda(U) = s_\lambda(x_1,\dots,x_d) = \frac{\det\!\left(x_i^{\,\lambda_j+d-j}\right)}{\det\!\left(x_i^{\,d-j}\right)}.\]

For $d=2$, $\lambda=(1,0)$, the top exponents are $(2,0)$ and the ratio is $\frac{x_1^2 - x_2^2}{x_1 - x_2} = x_1 + x_2$. The size of the irrep never enters — two $d\times d$ determinants regardless of $\dim V_\lambda$.

This is what schur_polynomial computes; character(λ, U) instead builds and traces the representation, so prefer schur_polynomial when only the character is needed.

julia> using GroupFunctions
julia> schur_polynomial([2, 1, 0])x_1*x_2^2 + x_1*x_3^2 + x_1^2*x_2 + x_1^2*x_3 + x_3*x_2^2 + x_3^2*x_2 + 2*x_1*x_3*x_2