Welcome to the Bosonic Kingdom.

Bosonic code
Also called an oscillator or a continuous-variable (CV) code. Encodes logical Hilbert space, finite- or infinite-dimensional, into a physical Hilbert space that contains at least one oscillator (a.k.a. bosonic mode or qumode). States of a single oscillator are elements of the Hilbert space of \(\ell^2\)-normalizable functions on \(\mathbb{R}\)). Ideal codewords may not be normalizable because the space is infinite-dimensional, so approximate versions have to be constructed in practice.
Protection: An error set relevant to Fock-state bosonic codes is the set of loss operators associated with the amplitude damping (a.k.a. photon loss or attenuation) noise channel, a common form of physical noise in bosonic systems. For a single mode, loss operators are proportional to powers of the mode's annihilation operator \(a=(\hat{x}+i\hat{p})/\sqrt{2}\), where \(\hat x\) (\(\hat p\)) is the mode's position (momentum) operator, and with the power signifying the number of particles lost during the error. For multiple modes, error set elements are tensor products of elements of the single-mode error set. A definition of distance associated with this error set is the minimum weight of a loss error that implements a nontrivial logical operation in the code.
Parents:
Quantum error-correcting code (QECC).
Parent of:
Bosonic stabilizer code, Hybrid qudit-oscillator code, Oscillator-into-oscillator code, Qudit-into-oscillator code.
Cousin of:
Fermionic code, Group-based quantum code.

Bosonic stabilizer code[1]
Also known as a continuous-variable (CV) stabilizer code. Bosonic code whose codespace is defined as the common \(+1\) eigenspace of a group of mutually commuting displacement operators. Displacements form the stabilizers of the code, and have continuous eigenvalues, in contrast with the discrete set of eigenvalues of qubit stabilizers. As a result, exact codewords are non-normalizable, so approximate constructions have to be considered.
Protection: Protective properties can be delineated in terms of the nullifiers or displacements, and the most natural noise model for such codes is displacement noise. If an error operator does not commute with a stabilizer group element, then that error is detectable. Oscillator-into-oscillator stabilizer codes protect against erasures of a subset of modes, while GKP codes protect against sufficiently small displacements in any number of modes.
Parents:
Stabilizer code, Bosonic code.
Parent of:
Gaussian stabilizer code, Multi-mode GKP code.
Cousin of:
Group GKP code, Number-phase code.

Hybrid qudit-oscillator code
Encodes a \(K\)-dimensional logical Hilbert space into \(n_1\) qudits of dimension \(q\) and \(n_2 \neq 0\) oscillators, i.e., the Hilbert space of \(\ell^2\)-normalizable functions on \(\mathbb{Z}_q^{n_1} \times \mathbb{R}^{n_2}\).
Parents:
Bosonic code.
Parent of:
Very small logical qubit (VSLQ) code.
Cousins:
Qudit-into-oscillator code.

Oscillator-into-oscillator code[2][3]
Also called an analog quantum code. Encodes \(k\) bosonic modes into \(n\) bosonic modes.
Parents:
Bosonic code.
Parent of:
GKP-stabilizer code, Gaussian stabilizer code.

Qudit-into-oscillator code
Encodes \(K\)-dimensional Hilbert space into \(n\) bosonic modes.
Parents:
Bosonic code.
Parent of:
Fock-state bosonic code, GKP cluster-state concatenated code, Single-mode bosonic code.
Cousins:
Approximate quantum error-correcting code (AQECC).
Cousin of:
Hybrid qudit-oscillator code.

Gaussian stabilizer code
Also known as an analog stabilizer code. Oscillator-into-oscillator stabilizer code encoding \(k\) logical modes into \(n\) physical modes. An \(((n,k,d))_{\mathbb{R}}\) Gaussian stabilizer code is denoted as \([[n,k,d]]_{\mathbb{R}}\), where \(d\) is the code's distance.
Protection: Protect against erasures of at most \(d-1\) modes, or arbitrarily large dispalcements on those modes. If an error operator does not commute with a nullifier, then that error is detectable. Protection of logical modes against small displacements cannot be done using only Gaussian resources [4][5][6].
Parents:
Bosonic stabilizer code, Oscillator-into-oscillator code.
Parent of:
Braunstein five-mode code, Homological bosonic code, Lloyd-Slotine nine-mode code.
Cousins:
GKP-stabilizer code.

Multi-mode GKP code[7][8]
Generalization of the GKP code to \(n\) bosonic modes whose stabilizer group is an infinite countable group of oscillator displacement operators.
Protection: The level of protection against displacement errors is quantified by the Euclidean code distance \(\Delta=\min_{x\in {\mathcal{L}}^{\perp}\setminus {\mathcal{L}}} \|x\|_2\) [9].
Parents:
Bosonic stabilizer code.
Parent of:
GKP cluster-state concatenated code, GKP-stabilizer code, Gottesman-Kitaev-Preskill (GKP) code.
Cousins:
Approximate quantum error-correcting code (AQECC), Lattice-based code.

GKP cluster-state concatenated code[10]
Multi-mode code encoding logical qubits into a cluster-state stabilizer code concatenated with a single-mode GKP code. Provides a way to perform a continuous-variable (CV) analogue of fault-tolerant measurement-based qubit computation.
Parents:
Qudit-into-oscillator code, Multi-mode GKP code.
Cousins:
Concatenated quantum code.

GKP-stabilizer code[11]
Stub.
Parents:
Oscillator-into-oscillator code, Multi-mode GKP code.
Cousin of:
Gaussian stabilizer code.

Very small logical qubit (VSLQ) code[12]
The two logical codewords are \(|\pm\rangle \propto (|0\rangle\pm|2\rangle)(|0\rangle\pm|2\rangle)|0\rangle|0\rangle\), where the total Hilbert space is the tensor product of two qudits (whose ground states \(|0\rangle\) and second excited states \(|2\rangle\) are used in the codewords) and two oscillators. In the original proposal for implementation, the single logical qubit is given by the two lowest energy states of a circuit composed of two transmons coupled to two lossy resonators, but the resonators can also be thought of as qubits since only a few low-lying Fock states are used by the code.
Protection: Passively protects against single photon loss.
Parents:
Hybrid qudit-oscillator code.
Cousins:
Quantum repetition code.

Fock-state bosonic code
Qudit-into-oscillator code whose protection against amplitude damping (i.e., photon loss) stems from the use of disjoint sets of Fock states for the construction of each code basis state. The simplest example is the dual-rail code, which has codewords consisting of single Fock states \(|10\rangle\) and \(|01\rangle\). This code can detect a single loss error since a loss operator in either mode maps one of the codewords to a different Fock state \(|00\rangle\). More involved codewords consist of several well-separated Fock states such that multiple loss events can be detected and corrected.
Protection: Code distance \(d\) is the minimum distance (assuming some metric) between any two labels of Fock states corresponding to different code basis states. For a single mode, \(d\) is the minimum absolute value of the difference between any two Fock-state labels; such codes can detect up to \(d-1\) loss events. Multimode distances can be defined analogously; see, e.g., Chuang-Leung-Yamamoto codes.
Parents:
Qudit-into-oscillator code.
Parent of:
Bosonic rotation code, Chebyshev code, Chuang-Leung-Yamamoto code, Pair-cat code.
Cousins:
Binary code, Qubit code.
Cousin of:
Fusion-based quantum computing (FBQC) code.

Single-mode bosonic code
Encodes \(K\)-dimensional Hilbert space into a single bosonic mode.
Parents:
Qudit-into-oscillator code.
Parent of:
Bosonic rotation code, Chebyshev code, Gottesman-Kitaev-Preskill (GKP) code, Numerically optimized code.

Chebyshev code[13]
Single-mode bosonic Fock-state code that can be used for error-corrected sensing of a signal Hamiltonian \({\hat n}^s\), where \({\hat n}\) is the occupation number operator. Codewords for the \(s\)th-order Chebyshev code are \begin{align}
\begin{split}
\ket{\overline 0} &=\sum_{k \text{~even}}^{[0,s]} \tilde{c}_k \Ket{\left\lfloor M\sin^2\left( k\pi/{2s}\right) \right\rfloor},\\
\ket{\overline 1} &= \sum_{k \text{~odd}}^{[0,s]} \tilde{c}_k \Ket{\left\lfloor M\sin^2 \left(k\pi/{2s}\right) \right\rfloor},
\end{split}
\end{align} where \(\tilde{c}_k>0\) can be obtained by solving a system of order \(O(s^2)\) linear equations, and where \(\lfloor x \rfloor\) is the floor function. The code approaches optimality for sensing the signal Hamiltonian as \(M\) increases.
Protection: The \(s\)th-order code corrects errors from the set \(\{I,a,a^{\dagger},{\hat n},{\hat n}^2,\cdots,{\hat n}^{s-1}\}\).
Parents:
Single-mode bosonic code, Fock-state bosonic code, Error-corrected sensing code.
Cousins:
Binomial code.

Chuang-Leung-Yamamoto code[14]
Bosonic Fock-state code that encodes \(k\) qubits into \(n\) oscillators, with each oscillator restricted to having at most \(N\) excitations. Codewords are superpositions of oscillator Fock states which have exactly \(N\) total excitations, and are either uniform (i.e., balanced) superpositions or unbalanced superpositions. Codes can be denoted as \([[N,n,2^k,d]]\), which conflicts with stabilizer code notation.
Protection: Protects against amplitude damping for up to \(t = d-1\) excitation losses. Defining the spacing between two Fock states \(|u_1\cdots u_n\rangle\) and \(|v_1\cdots v_n\rangle\), \begin{align}
\text{Spacing}(u,v) = \frac{1}{2}\sum_{i=1}^n |u_i - v_i|,
\end{align} the code distance \(d\) can be defined as the minimial spacing between Fock states making up the codewords.
Parents:
Fock-state bosonic code, Constant-excitation (CE) code.
Parent of:
Constant-excitation permutation-invariant code.
Cousin of:
Binomial code.

Constant-excitation permutation-invariant code[15]
Stub.
Parents:
Permutation-invariant code, Chuang-Leung-Yamamoto code.
Parent of:
Dual-rail quantum code, Wasilewski-Banaszek code.

Braunstein five-mode code[3]
A \([[5,1,3]]_{\mathbb{R}}\) Gaussian stabilizer analogue of the five-qubit perfect code.
Parents:
Gaussian stabilizer code.
Cousins:
Five-qubit perfect code.

Homological bosonic code[16]
An \([[n,1]]_{\mathbb{R}}\) Gaussian CSS code defined using homological structres associated with an \(n-1\) simplex. Relevant to the study of spacetime replication of quantum information [17].
Protection: Protects against certain types of erasure errors (depending on the specific dimension). Certain constructions also protect arbitrary sized errors on multiple photon states.
Parents:
Gaussian stabilizer code.
Cousins:
Calderbank-Shor-Steane (CSS) stabilizer code, Niset-Andersen-Cerf code, Spacetime code (STC).

Lloyd-Slotine nine-mode code[2]
A \([[9,1,3]]_{\mathbb{R}}\) Gaussian CSS analogue of Shor's nine-qubit code.
Parents:
Gaussian stabilizer code.
Cousins:
Shor \([[9,1,3]]\) code.

Gottesman-Kitaev-Preskill (GKP) code[7]
Bosonic qudit-into-oscillator code whose stabilizers are oscillator displacement operators \(\hat{S}_q(2\alpha)=e^{-2i\alpha \hat{p}}\) and \(\hat{S}_p(2\beta)=e^{2i\beta \hat{x}}\). To ensure \(\hat{S}_q(2\alpha)\) and \(\hat{S}_p(2\beta)\) generate a stabilizer group that is Abelian, there is another constraint that \(\alpha\beta=2k\pi\) where \(k\) is an integer. Codewords can be expressed as equal weight superpositions of coherent states on an infinite lattice, such as a square lattice in phase space with spatial period \(2\sqrt{\pi}\). The exact GKP state is non-normalizable, so approximate constructs have to be considered.
Protection: For stabilizer \(\hat{S}_q(2\alpha),\hat{S}_p(2\beta)\), code can correct displacement errors up to \(\frac{\alpha}{2}\) in the \(q\)-direction and \(\frac{\beta}{2}\) at \(p\)-direction. Approximately protects against photon loss errors [18], outperforming most other codes designed to explicitly protect against loss [19]. Very sensitive to dephasing errors [20]. A biased-noise GKP error correcting code can be prepared by choosing \(\alpha\neq \beta\).
Parents:
Single-mode bosonic code, Multi-mode GKP code.
Cousins:
Approximate quantum error-correcting code (AQECC).
Cousin of:
Number-phase code, Rotor GKP code.

Bosonic rotation code[21]
A single-mode Fock-state bosonic code whose codespace is preserved by a phase-space rotation by a multiple of \(2\pi/N\) for some \(N\). The rotation symmetry ensures that encoded states have support only on every \(N^{\textrm{th}}\) Fock state. For example, single-mode Fock-state codes for \(N=2\) encoding a qubit admit basis states that are, respectively, supported on Fock state sets \(\{|0\rangle,|4\rangle,|8\rangle,\cdots\}\) and \(\{|2\rangle,|6\rangle,|10\rangle,\cdots\}\).
Protection: Losses or gains less than \(N\) are detectable. Dephasing rotations \(\exp(\mathrm{i}\theta \hat{n})\) can be detected whenever \(\theta\) is roughly less than \(\pi/N\). To get precise bounds on \(\theta\), one needs to analyze the particular bosonic rotation code.
Parents:
Single-mode bosonic code, Fock-state bosonic code.
Parent of:
Binomial code, Cat code, Number-phase code.

Pair-cat code[22]
Two- or higher-mode extension of cat codes whose codewords are right eigenstates of powers of products of the modes' lowering operators. Many gadgets for cat codes have two-mode pair-cat analogues, with the advantage being that such gates can be done in parallel with a dissipative error-correction process.
Protection: The occupation-number differences form the syndromes, as opposed to the photon number parity for the single-mode cat code. Any loss even combination that changes the relative differences of photons between modes is a detectable error. The two-mode two-legged paircat code can detect arbitrary single-mode losses, but cannot detect simultaneous photon loss in both modes. An \(n\)-mode code can detect any loss errors of at most \(n-1\) weight. Higher numbers of legs correspond to more pair-coherent state present in the codewords, and allow for protection against simulataneous losses.
Parents:
Fock-state bosonic code.
Cousins:
Cat code, Hamiltonian-based code.

Dual-rail quantum code[23]
Two-mode code encoding a logical qubit in Fock states with one excitation. The logical-zero state is represented by \(|01\rangle\), while the logical-one state is represented by \(|10\rangle\).
Protection: This is an error-detecting code against one photon loss event; it is often used in photonic quantum devices because of its ease of realization. A single loss event can be detected because, after the loss occurs, the output state \(|00\rangle\) is orthogonal to the codespace. Recovery is not possible, so a successful run of a quantum circuit is conditioned on not losing a photon during the circuit.
Parents:
Constant-excitation permutation-invariant code.

Wasilewski-Banaszek code[24]
Three-oscillator Fock-state code encoding a single logical qubit using codewords \begin{align} \begin{split} |\overline{0}\rangle &= \frac{1}{\sqrt{3}}(|003\rangle+|030\rangle+|300\rangle)\\ |\overline{1}\rangle &= |111\rangle \end{split}. \end{align}
Protection: Protects against single photon loss in any one mode.
Parents:
Constant-excitation permutation-invariant code.

Numerically optimized code[25][19]
Bosonic Fock-state code obtained from a numerical minimization procedure, e.g., from enforcing error-correction criteria against some number of losses while minimizing average occupation number.
Protection: Number phase codes protect from a finite number of loss events. However, unlike Fock-state codes, their protection does not stem from a Fock-state spacing.
Parents:
Single-mode bosonic code.

Binomial code[25]
Bosonic rotation codes designed to approximately protect against errors consisting of powers of raising and lowering operators up to some maximum power. Binomial codes can be thought of as spin-coherent states embedded into an oscillator [19]. The \(q\)-dimensional qudit \((N, S)\) binomial codeword states are \(\{|\overline{i}\rangle\mid i\in \mathbb Z_q \}\), where \begin{align}
|\overline{i}\rangle = \frac{1}{\sqrt{q^N}} \sum_{\substack{p=0\\p\equiv i \pmod{q}}}^{(q-1)(N+1)} \sqrt{\binom{N+1}{p}_q} \ket{p(S+1)}.
\end{align} The set \( \ket{i} \mid i \in \mathbb{N}\) is the set of Fock states. Also, \(\binom{N+1}{p}_q\) are extended binomial coefficients, or polynomial coeffiients, defined recursively as \begin{align}
\binom{n}{m}_1 \equiv 1,\quad \binom{n}{m}_q \equiv \sum_{k=0}^n \binom{n}{k}\binom{k}{m-k}_{q-1}.
\end{align} The extended binomial coefficients \( \binom{n}{m}_q \) are also the coefficients of \( x^m \) in the polynomial \( (1 + x + \cdots + x^{q-1})^n \).
Protection: An \((N, S)\) binomial code protects against \(L\) boson losses, \(G\) boson gains, and dephasing up to \(\hat{n}^{D}\), where \(S=L+G\) and \(N = \mathrm{max}(L,G,2D)\). Binomial codes approximately protect against continuous-time amplitude damping, boson loss and gain, and dephasing.
Parents:
Bosonic rotation code.
Cousins:
Cat code, Number-phase code, Chuang-Leung-Yamamoto code.
Cousin of:
Chebyshev code, GNU permutation-invariant code, \([[4,2,2]]\) CSS code.

Cat code[26][27]
Rotation-symmetric bosonic Fock-state code encoding a \(q\)-dimensional qudit into one oscillator. Codewords for a qubit code (\(q=2\)) consist of a coherent state \(|\alpha\rangle\) projected onto a subspace of Fock state number modulo \(2(S+1)\). The logical state \(|\overline{0}\rangle\) is in the \(\{|0\rangle , |2(S+1)\rangle , |4(S+1)\rangle \cdots \}\) Fock-state subspace, while \(|\overline{1}\rangle\) is in the \(\{|(S+1)\rangle, |3(S+1)\rangle , |5(S+1)\rangle , |7(S+1)\rangle \cdots \}\) subspace. An alternative basis, valid for for general \(q\) and \(\alpha\neq 0\), consists of \(q\) coherent states distributed equidistanctly around a circle in phase space of radius \(\alpha\).
Protection: Due to the spacing between sets of Fock states, the distance between two distinct logical states is \(d=S+1\). Hence, this code is able to detect \(S\)-photon loss error. Two-legged cat codes (\(S=0\)) do not protect against loss events, but there exist modifications based on sign alternation [28] or squeezing [29] that add such protection.
Parents:
Bosonic rotation code.
Cousins:
Number-phase code, Hamiltonian-based code.
Cousin of:
Binomial code, Pair-cat code.

Number-phase code[21]
Bosonic rotation code consisting of superpositions of Pegg-Barnett phase states [30], \begin{align}
|\phi\rangle \equiv \frac{1}{\sqrt{2\pi}}\sum_{n=0}^{\infty} \mathrm{e}^{\mathrm{i} n \phi} \ket{n}.
\end{align} Since phase states and thus the ideal codewords are not normalizable, approximate versions need to be constructed. The codes' key feature is that, in the ideal case, phase measurement has zero uncertainty, making it a good canditate for a syndrome measurement.
Protection: Number-phase codes of order \(N\) detect up to \(N\) photon loss or gain errors, and dephasing up to \(\theta = \pi/N\).
Parents:
Bosonic rotation code.
Cousins:
Rotor GKP code, Bosonic stabilizer code, Gottesman-Kitaev-Preskill (GKP) code.
Cousin of:
Binomial code, Cat code.

## References

- [1]
- Richard L. Barnes, “Stabilizer Codes for Continuous-variable Quantum Error Correction”. quant-ph/0405064
- [2]
- S. Lloyd and J.-J. E. Slotine, “Analog Quantum Error Correction”, Physical Review Letters 80, 4088 (1998). DOI; quant-ph/9711021
- [3]
- S. L. Braunstein, “Error Correction for Continuous Quantum Variables”, Physical Review Letters 80, 4084 (1998). DOI; quant-ph/9711049
- [4]
- C. Vuillot et al., “Quantum error correction with the toric Gottesman-Kitaev-Preskill code”, Physical Review A 99, (2019). DOI; 1810.00047
- [5]
- J. Eisert, S. Scheel, and M. B. Plenio, “Distilling Gaussian States with Gaussian Operations is Impossible”, Physical Review Letters 89, (2002). DOI; quant-ph/0204052
- [6]
- J. Niset, J. Fiurášek, and N. J. Cerf, “No-Go Theorem for Gaussian Quantum Error Correction”, Physical Review Letters 102, (2009). DOI; 0811.3128
- [7]
- D. Gottesman, A. Kitaev, and J. Preskill, “Encoding a qubit in an oscillator”, Physical Review A 64, (2001). DOI; quant-ph/0008040
- [8]
- J. Harrington and J. Preskill, “Achievable rates for the Gaussian quantum channel”, Physical Review A 64, (2001). DOI; quant-ph/0105058
- [9]
- J. Conrad, J. Eisert, and F. Arzani, “Gottesman-Kitaev-Preskill codes: A lattice perspective”, Quantum 6, 648 (2022). DOI; 2109.14645
- [10]
- N. C. Menicucci, “Fault-Tolerant Measurement-Based Quantum Computing with Continuous-Variable Cluster States”, Physical Review Letters 112, (2014). DOI; 1310.7596
- [11]
- K. Noh, S. M. Girvin, and L. Jiang, “Encoding an Oscillator into Many Oscillators”, Physical Review Letters 125, (2020). DOI; 1903.12615
- [12]
- E. Kapit, “Hardware-Efficient and Fully Autonomous Quantum Error Correction in Superconducting Circuits”, Physical Review Letters 116, (2016). DOI
- [13]
- D. Layden et al., “Ancilla-Free Quantum Error Correction Codes for Quantum Metrology”, Physical Review Letters 122, (2019). DOI; 1811.01450
- [14]
- I. L. Chuang, D. W. Leung, and Y. Yamamoto, “Bosonic quantum codes for amplitude damping”, Physical Review A 56, 1114 (1997). DOI
- [15]
- Y. Ouyang and R. Chao, “Permutation-Invariant Constant-Excitation Quantum Codes for Amplitude Damping”, IEEE Transactions on Information Theory 66, 2921 (2020). DOI; 1809.09801
- [16]
- P. Hayden et al., “Spacetime replication of continuous variable quantum information”, New Journal of Physics 18, 083043 (2016). DOI; 1601.02544
- [17]
- P. Hayden and A. May, “Summoning information in spacetime, or where and when can a qubit be?”, Journal of Physics A: Mathematical and Theoretical 49, 175304 (2016). DOI; 1210.0913
- [18]
- B. M. Terhal and D. Weigand, “Encoding a qubit into a cavity mode in circuit QED using phase estimation”, Physical Review A 93, (2016). DOI; 1506.05033
- [19]
- V. V. Albert et al., “Performance and structure of single-mode bosonic codes”, Physical Review A 97, (2018). DOI; 1708.05010
- [20]
- A. L. Grimsmo and S. Puri, “Quantum Error Correction with the Gottesman-Kitaev-Preskill Code”, PRX Quantum 2, (2021). DOI; 2106.12989
- [21]
- A. L. Grimsmo, J. Combes, and B. Q. Baragiola, “Quantum Computing with Rotation-Symmetric Bosonic Codes”, Physical Review X 10, (2020). DOI; 1901.08071
- [22]
- V. V. Albert et al., “Pair-cat codes: autonomous error-correction with low-order nonlinearity”, Quantum Science and Technology 4, 035007 (2019). DOI; 1801.05897
- [23]
- I. L. Chuang and Y. Yamamoto, “Simple quantum computer”, Physical Review A 52, 3489 (1995). DOI
- [24]
- W. Wasilewski and K. Banaszek, “Protecting an optical qubit against photon loss”, Physical Review A 75, (2007). DOI
- [25]
- M. H. Michael et al., “New Class of Quantum Error-Correcting Codes for a Bosonic Mode”, Physical Review X 6, (2016). DOI; 1602.00008
- [26]
- P. T. Cochrane, G. J. Milburn, and W. J. Munro, “Macroscopically distinct quantum-superposition states as a bosonic code for amplitude damping”, Physical Review A 59, 2631 (1999). DOI; quant-ph/9809037
- [27]
- Z. Leghtas et al., “Hardware-Efficient Autonomous Quantum Memory Protection”, Physical Review Letters 111, (2013). DOI; 1207.0679
- [28]
- L. Li et al., “Phase-engineered bosonic quantum codes”, Physical Review A 103, (2021). DOI; 1901.05358
- [29]
- David S. Schlegel, Fabrizio Minganti, and Vincenzo Savona, “Quantum error correction using squeezed Schrödinger cat states”. 2201.02570
- [30]
- S. M. Barnett and D. T. Pegg, “Phase in quantum optics”, Journal of Physics A: Mathematical and General 19, 3849 (1986). DOI