Note: This file contains some important background thoughts on how to handle non-Pauli errors. This grew to become our "error basis" representation. However, this description does not exactly correspond to the current implementation. At the time of this writing, the best documentation is Sec. 5.3 of Takaaki's master's thesis.
We have two main ways of representing errors: tracking Pauli frame errors introduced using Monte Carlo methods, or using a more physically grounded model with density matrices and operator sums.
These are, of course, tied into the choice of [quantum state representation](Quantum State Representations.md).
For simulation of large-scale entangled states, full density matrix representation is impossible. Instead, the simplest, most common approach is the Monte Carlo approach, using randomly introduced X, Y, or Z errors. This is the approach Shota took in his surface code sims, which was then used in Satoh & Kaori's network coding paper and Takaaki's network coding paper.
The disadvantage is that it can't easily represent asymmetric (non-unitary) error processes or multi-qubit error processes.
All we need for this is three parameters, normalized to some time constant:
XFlipProbability
YFlipProbability
ZFlipProbability
More physically motivated error models may be important under some circumstances.
These depend on the Operator Sum representation.
This is a simple, symmetric Shannon channel (through time rather than
space) with some probability
This is the equivalent to the bit flip channel, but for the phase instead. This is known as phase damping.
In phase damping, we have
An asymmetric channel in which
This is tied to
The other parameter we need for a relatively complete picture of
energy relaxation is the Boltzmann polarization, the fraction of
qubits that would be in the
We can build a bit flip channel here by setting the Boltzmann
polarization to 0.5 and setting
It is also possible that errors such as mis-calibration of timing signals results in groups of qubits all decohering together, or in error processes not being memoryless. E.g., if our timing signal is off by 1kHz, after 0.5 msec, the qubit is guaranteed to have a bit flip error, but weirdly, after 1 msec that error vanishes and the state is once again correct, as the timing signals come back into phase with each other.
In practice, these kinds of errors are handled at a level below our simulation here, through techniques such as spin echo or composite pulses (Vandersypen and Chuang, RMP). After their application, we are left with the kinds of errors we discuss in more detail here.
We can initialize an error channel as if it is a combination of all of the above types, by specifying just three parameters when calling a single, unified initializer.
BoltzmannPolarization (0.0 to 1.0, but usually 0.5 to 1.0)
EnergyRelaxationT1
PhaseDampingT2
(Do we need a null value for input sometimes?)
Decoherence processes are local, even for distributed states. Can we keep management of errors entirely local?
I think the answer is yes, except for an important exception: measurement and its effect on the state. In particular, dark counts at a BSA convince the system that actually unentangled qubits are entangled.