$CU(1)$ Representations: CU1Irrep
CU1Irrep represents irreducible representations of $U(1) ⋊ C$, where C acts by charge conjugation. This group is also known as $O(2)$.
Sector type
TensorKitSectors.CU1Irrep — Type
struct CU1Irrep <: AbstractIrrep{CU₁}
CU1Irrep(j, s = ifelse(j>zero(j), 2, 0))
Irrep[CU₁](j, s = ifelse(j>zero(j), 2, 0))Represents irreps of the group $U₁ ⋊ C$ ($U₁$ and charge conjugation or reflection), which is also known as just O₂.
Fields
j::HalfInt: the value of the $U₁$ charge.s::Int: the representation of charge conjugation.
They can take values:
- if
j == 0,s = 0(trivial charge conjugation) ors = 1(non-trivial charge conjugation) - if
j > 0,s = 2(two-dimensional representation)
Labels are pairs (j, s), where j is a U1Irrep charge and s is an integer in 0:2. For j == 0, there are two one-dimensional irreps: CU1Irrep(0, 0) and CU1Irrep(0, 1). For j > 0, only s == 2 is valid and the representation is two-dimensional. The unit is CU1Irrep(0, 0), and every irrep is self-dual.
Fusion Rules
The two one-dimensional irreps fuse by XOR of the s label. Fusing either one-dimensional irrep with a two-dimensional irrep returns the same two-dimensional label. For two positive charges, the outputs are governed by sum and absolute difference:
\[j_1 \otimes j_2 = |j_1-j_2| \oplus (j_1+j_2),\]
with the special case j1 == j2, where the zero-charge difference splits into the two one-dimensional irreps. The category has FusionStyle(CU1Irrep) = SimpleFusion().
Quantum dimensions are
\[d_{(0,0)} = d_{(0,1)} = 1,\qquad d_{(j,2)} = 2\quad (j>0).\]
Topological Data
CU1Irrep is a bosonic representation category, so all twists are 1. The Fsymbol values are real and encode the chosen Clebsch-Gordan basis. The Rsymbol is real and equals the N-symbol, with an additional negative sign on channels with c.s == 1 and positive left overbraiding input charge.
Fusion Tensor and Basis Conventions
fusiontensor(a, b, c) returns a rank-4 array of size $d_a \times d_b \times d_c \times N_c^{ab}$. Since CU1Irrep has simple fusion, the final multiplicity axis has length 0 or 1. For allowed channels, the tensor entries are real Clebsch-Gordan coefficients in the convention explained below.
For a two-dimensional irrep (j, 2) with j > 0, the basis is ordered as a pair of charge-conjugate $U(1)$ weights, which we can denote by
\[\ket{+j},\ \ket{-j}.\]
The zero-charge irreps (0, 0) and (0, 1) are one-dimensional. The label (0, 0) is even under charge conjugation, while (0, 1) is odd.
When two equal positive-charge irreps fuse to a zero-charge irrep, the fusion tensors pick the symmetric and antisymmetric combinations:
\[\ket{(0,0)} = \frac{1}{\sqrt{2}}\left(\ket{+j}\otimes\ket{-j} + \ket{-j}\otimes\ket{+j}\right),\]
\[\ket{(0,1)} = \frac{1}{\sqrt{2}}\left(\ket{+j}\otimes\ket{-j} - \ket{-j}\otimes\ket{+j}\right).\]
In array form, these are the entries
\[C_{1,2,1} = \frac{1}{\sqrt{2}},\qquad C_{2,1,1} = \pm\frac{1}{\sqrt{2}},\]
with the plus sign for (0, 0) and the minus sign for (0, 1).
Fusing a zero-charge irrep with a two-dimensional irrep leaves the charge label unchanged. The odd zero-charge irrep contributes a sign on the second basis vector:
\[(0,s) \otimes (j,2) \to (j,2):\qquad \ket{+j}\mapsto\ket{+j},\quad \ket{-j}\mapsto (-1)^s\ket{-j}.\]
The same convention is used for (j,2) ⊗ (0,s), with the sign attached to the second basis vector of the two-dimensional input.
For two positive charges, the sum channel is diagonal:
\[(j_a,2)\otimes(j_b,2)\to(j_a+j_b,2):\qquad \ket{+j_a,+j_b}\mapsto\ket{+(j_a+j_b)},\quad \ket{-j_a,-j_b}\mapsto\ket{-(j_a+j_b)}.\]
The difference channel pairs opposite weights. If j_a > j_b,
\[\ket{+j_a,-j_b}\mapsto\ket{+(j_a-j_b)},\qquad \ket{-j_a,+j_b}\mapsto\ket{-(j_a-j_b)}.\]
If j_b > j_a, the output basis is ordered by the positive charge j_b - j_a, so the two nonzero entries are swapped accordingly:
\[\ket{-j_a,+j_b}\mapsto\ket{+(j_b-j_a)},\qquad \ket{+j_a,-j_b}\mapsto\ket{-(j_b-j_a)}.\]
All omitted entries are zero. These conventions determine the real Fsymbol values.
Iteration
values(CU1Irrep) is infinite. It starts with the two zero-charge irreps and then lists positive half-integer charges:
using TensorKitSectors
values(CU1Irrep)[1]
Irrep[CU₁](0, 0)
values(CU1Irrep)[2]
Irrep[CU₁](0, 1)
values(CU1Irrep)[5]
Irrep[CU₁](3/2, 2)