Basic quantum optics using GroupFunctions.jl
Introduction
Linear optical networks (beamsplitters, phase shifters, etc. )act on $n$ optical modes via SU($n$) transformations. A key object is the transition amplitude between Fock states under such transformations.
Consider $N$ photons distributed across $n$ modes. The Fock state $|m_1, m_2, \ldots, m_n\rangle$ with $\sum_i m_i = N$ transforms under passive linear optics as: $|m_1, \ldots, m_n\rangle \xrightarrow{U} \sum_{m'} c_{m,m'}(U) |m'_1, \ldots, m'_n\rangle$ where $U \in \mathrm{SU}(n)$ mixes the mode creation operators: $a^\dagger_i \mapsto \sum_j U_{ij} a^\dagger_j$.
The amplitudes $c_{m,m'}(U)$ are matrix elements of SU($n$) irreducible representations, specifically, the symmetric irrep $\lambda = [N, 0, \ldots, 0]$, corresponding to a single-row Young tableau. This is because bosonic states are symmetric under particle exchange. For symmetric irreps, occupation_number(pattern) converts a Gelfand-Tsetlin pattern to the corresponding Fock occupation list.
The basic items to translate between quantum optics and GT pattern language are thus the following:
- Define photon number subspace
λ = [N, 0, ..., 0] - Enumerate the basis of the above subspace using GT patterns
basis = basis_states(λ) - Each basis element corresponds to the Fock state with occupation numbers given by
occupation_number(pattern) - Transition amplitude is read out by
group_function(λ, final, initial, U), where $U$ is the $SU(n)$ unitary in previous paragraphs (e.g. provided bysu2_block(n, i, (α, β, γ))),finalandinitialare the final and initial states (written as GT patterns).
Basis states and occupation numbers
The Hilbert space of $N$ photons in $n$ modes has dimension $\binom{N+n-1}{n-1}$. We enumerate basis states as GT patterns:
using GroupFunctions
# Two photons in three modes
λ = [2, 0, 0]
basis = basis_states(λ)
# Each GT pattern corresponds to a Fock state
for b in basis
occ = occupation_number(b)
println("|", join(occ, ","), "⟩")
endExpected output:
|2,0,0⟩
|1,1,0⟩
|1,0,1⟩
|0,2,0⟩
|0,1,1⟩
|0,0,2⟩Building SU($n$) matrices
Any SU($n$) matrix can be decomposed into SU(2) blocks acting on adjacent modes. The function su2_block(n, i, (α, β, γ)) embeds an SU(2) rotation (parametrized by Euler angles) into modes $i$ and $i+1$:
# Beamsplitter on modes 1-2 (θ = π/2 for 50:50)
θ = float(π)/2
BS_12 = su2_block(3, 1, (0., θ, 0.))
# Beamsplitter on modes 2-3
BS_23 = su2_block(3, 2, (0., θ, 0.))
# Compose: first BS_12, then BS_23
U = BS_12 * BS_23TODO: Verify sign/phase conventions for su2_block. The beamsplitter mixing $a^\dagger_1 \mapsto \frac{1}{\sqrt{2}}(a^\dagger_1 + a^\dagger_2)$ corresponds to which Euler angles?
Transition amplitudes
The amplitude $\langle m' | U | m \rangle$ is computed via group_function:
λ = [2, 0, 0]
basis = basis_states(λ)
# Initial state: |2,0,0⟩
initial = basis[findfirst(b -> occupation_number(b) == [2,0,0], basis)]
# Final state: |1,1,0⟩
final = basis[findfirst(b -> occupation_number(b) == [1,1,0], basis)]
# Amplitude
amp = group_function(λ, final, initial, U)
prob = abs2(amp)Example: Hong-Ou-Mandel interference
Two photons entering a 50:50 beamsplitter from different input ports:
- Initial state: $|1,1\rangle$
- Beamsplitter: $a^\dagger_1 \mapsto \frac{1}{\sqrt{2}}(a^\dagger_1 + a^\dagger_2)$, $a^\dagger_2 \mapsto \frac{1}{\sqrt{2}}(a^\dagger_1 - a^\dagger_2)$
λ = [2, 0]
basis = basis_states(λ)
initial = basis[findfirst(b -> occupation_number(b) == [1,1], basis)]
θ = float(π)/2
BS = su2_block(2, 1, (0., θ, 0.))
for final in basis
amp = group_function(λ, final, initial, BS)
println("|", join(occupation_number(final), ","), "⟩: ", round(abs2(amp), digits=4))
endExpected (HOM effect): The $|1,1\rangle \to |1,1\rangle$ amplitude vanishes due to destructive interference. Output is $\frac{1}{\sqrt{2}}(|2,0\rangle + |0,2\rangle)$.
TODO: Verify output matches expected HOM signature. Check if beamsplitter convention gives the correct phases.