25 Commits

Author SHA1 Message Date
7015f9d644 Add TODOs to fault tolerance chapter 2026-04-25 21:58:00 +02:00
b50308d014 Add a bunch of content TODOs 2026-04-25 19:35:53 +02:00
93f310d843 Add bit-flip noise and modify phenomenological and circuit-level noise figures 2026-04-25 18:49:03 +02:00
163ef926e7 Move figures to next chapter 2026-04-25 17:40:43 +02:00
4da37dbddc Add three-qubit rep. code syndrome extraction circuit under bit-flip noise 2026-04-25 17:28:17 +02:00
6de9cec27e Add Tanner graph windowing figures with highlighted passed information 2026-04-25 17:09:04 +02:00
474b1d21da Add Tanner graph windowing figure 2026-04-25 16:00:19 +02:00
5483a972f9 Add windowing figure 2026-04-25 15:38:32 +02:00
5d104fbf28 Add detector construction figure 2026-04-25 15:13:02 +02:00
50a10ccb4f Add repeated syndrome extraction circuit figures for bit-flip and phenomenological noise 2026-04-25 14:59:26 +02:00
569df381ee Add clean_bibliography.sh; Incorporate LLM corrections 2026-04-25 14:14:58 +02:00
85771405db Add noise model figures 2026-04-25 14:14:41 +02:00
5875066581 Remove TODOs, formatting, minor changes 2026-04-24 17:58:30 +02:00
494a639329 Finish first draft of text for fundamentals 2026-04-24 17:44:16 +02:00
e59120b683 Fix unicode character in bib file 2026-04-24 14:16:18 +02:00
267d431542 Write BB code paragraph 2026-04-24 14:16:02 +02:00
4e1bd62504 Write CSS codes section 2026-04-24 11:04:57 +02:00
ada6e43be3 Finish writing stabilizer codes 2026-04-24 10:36:59 +02:00
6ea151ffeb Add backlog problem explanation 2026-04-24 09:25:55 +02:00
6e2cf5b8ba Add general syndrome extraction circuit 2026-04-24 00:36:34 +02:00
e792141afd Switch order of challenges 2026-04-23 13:06:01 +02:00
1810ec8632 Fix {ll,rr}bracket; Introduce Pauli group 2026-04-22 23:02:12 +02:00
513eb7579f Finish quantum circuits subsection 2026-04-22 22:48:08 +02:00
47c725e1fa Add Mai Anh's corrections 2026-04-22 22:19:15 +02:00
7d92b54deb Add Jonathan's corrections; n->3600 2026-04-22 20:41:09 +02:00
8 changed files with 1705 additions and 839 deletions

View File

@@ -302,8 +302,8 @@
\item Quantum systems are inherently fragile
\item Interacting with the quantum state disturbs it
\item Idea: Represent $k\in \mathbb{N} $ \schlagwort{logical
qubits} using $n \in \mathbb{N},~n>k$ \schlagwort{physical qubits}
\citereferencemanual{Rof19}
qubits} using $n \in \mathbb{N}$ \schlagwort{physical qubits},
$n>k$ \citereferencemanual{Rof19}
\vspace*{2mm}
@@ -1532,8 +1532,8 @@
\item \schlagwort{Detector error model} (DEM) combines
detector error matrix and noise model
\visible<2->{
\item Tanner graph of detector error matrix of \ac{bb} code
\citereferencemanual{KSW$^+$25}
\item Tanner graph of detector error matrix of bivariate
bicycle (\acs{bb}) code \citereferencemanual{KSW$^+$25}
}
\end{itemize}
@@ -1549,21 +1549,25 @@
\vspace*{-5mm}
\visible<3->{
\begin{itemize}
\begin{itemize}
\visible<2->{
\item Challenges
\begin{itemize}
}
\begin{itemize}
\visible<2->{
\item Fault tolerance: Additional error locations \\
$\implies$ \schlagwort{Increased decoding
complexity} \citereferencemanual{GCR24}
}
\visible<3->{
\item Quantum setting: Degeneracy and short
cycles \\
$\implies$ \schlagwort{Degraded performance}
of belief propagation (BP)
\citereferencemanual{BBA$^+$15}
\item Fault tolerance: Additional error locations \\
$\implies$ \schlagwort{Increased decoding
complexity} \citereferencemanual{GCR24}
\end{itemize}
\end{itemize}
}
}
\end{itemize}
\end{itemize}
\vspace*{8mm}
@@ -1572,9 +1576,8 @@
S. Koutsioumpas et al., ``Automorphism ensemble decoding of
quantum LDPC codes,'' \emph{arXiv:2503.01738}, 2025.
}
{GCR24}{A. Gong, S. Cammerer, and J. M. Renes, ``Toward
low-latency iterative decoding of qLDPC codes under
circuit-level noise,'' arXiv:2403.18901, 2024.
{GCR24}{A. Gong et al., ``Toward low-latency iterative decoding
of qLDPC codes under circuit-level noise,'' arXiv:2403.18901, 2024.
}
{BBA$^+$15}{
Z. Babar et al., ``Fifteen years of
@@ -1634,9 +1637,8 @@
% S. Huang and S. Puri, ``Improved noisy syndrome decoding of
% quantum LDPC codes with sliding window,'' \emph{arXiv:2311.03307}, 2023.
% }
% {GCR24}{A. Gong, S. Cammerer, and J. M. Renes, ``Toward
% low-latency iterative decoding of qLDPC codes under
% circuit-level noise,'' arXiv:2403.18901, 2024.
% {GCR24}{A. Gong et al., ``Toward low-latency iterative decoding
% of qLDPC codes under circuit-level noise,'' arXiv:2403.18901, 2024.
% }
% {RWB$^+$20}{
% J. Roffe et al., ``Decoding across the quantum low-density
@@ -1734,9 +1736,8 @@
S. Huang and S. Puri, ``Improved noisy syndrome decoding of
quantum LDPC codes with sliding window,'' \emph{arXiv:2311.03307}, 2023.
}
{GCR24}{A. Gong, S. Cammerer, and J. M. Renes, ``Toward
low-latency iterative decoding of qLDPC codes under
circuit-level noise,'' arXiv:2403.18901, 2024.
{GCR24}{A. Gong et al., ``Toward low-latency iterative decoding
of qLDPC codes under circuit-level noise,'' arXiv:2403.18901, 2024.
}
\stopreferencesmanual
\end{frame}
@@ -2882,11 +2883,12 @@
\vspace*{-10mm}
\centering
\begin{itemize}
\only<1>{\vspace*{10mm}}
\only<1>{\vspace*{10mm}}
\item Most errors due to non-convergence
\vspace*{10mm}
\visible<2-> {
\item BPGD algorithm \citereferencemanual{YLH+24}
\item BP with guided decimation (BPGD)
\citereferencemanual{YLH+24}
\begin{enumerate}
\item Perform $T$ \schlagwort{BP iterations}
\item Hard decision on \schlagwort{most
@@ -2906,12 +2908,12 @@
\vspace*{-10mm}
\begin{itemize}
\item $[[882, 24, 18 \le d \le 24]]$ - generalized
hypergraph product (GHP) code, \\
\item $\llbracket 882, 24, 18 \le d \le 24
\rrbracket$ generalized hypergraph product (GHP) code,
bit-flip noise \citereferencemanual{YLH+24}
\end{itemize}
\vspace*{-5mm}
% \vspace*{-5mm}
\begin{figure}[H]
\centering
@@ -2971,7 +2973,7 @@
}
\end{minipage}
\vspace*{2mm}
\vspace*{5mm}
\addreferencesmanual
{YLH+24}{Hanwen Yao et al. ``Belief propagation decoding of quantum
@@ -3329,7 +3331,7 @@
\item Parameters
\begin{itemize}
\item $T = 1$
\item $n_\text{iterations} = n$
\item $n_\text{iterations} = 3{,}600$
\item $W = 5$
\end{itemize}
\end{itemize}
@@ -3885,9 +3887,8 @@
\vspace*{15mm}
\addreferencesmanual
{GCR24}{A. Gong, S. Cammerer, and J. M. Renes, ``Toward
low-latency iterative decoding of qLDPC codes under
circuit-level noise,'' arXiv:2403.18901, 2024.
{GCR24}{A. Gong et al., ``Toward low-latency iterative decoding
of qLDPC codes under circuit-level noise,'' arXiv:2403.18901, 2024.
}
{MSL$^+$25}{
S. Miao et al., ``Quaternary neural belief propagation
@@ -4107,9 +4108,8 @@
\vspace*{30mm}
\addreferencesmanual
{GCR24}{A. Gong, S. Cammerer, and J. M. Renes, ``Toward
low-latency iterative decoding of qLDPC codes under
circuit-level noise,'' arXiv:2403.18901, 2024.
{GCR24}{A. Gong et al., ``Toward low-latency iterative decoding
of qLDPC codes under circuit-level noise,'' arXiv:2403.18901, 2024.
}
\stopreferencesmanual
\end{frame}
@@ -4170,9 +4170,8 @@
\vspace*{5mm}
\addreferencesmanual
{GCR24}{A. Gong, S. Cammerer, and J. M. Renes, ``Toward
low-latency iterative decoding of qLDPC codes under
circuit-level noise,'' arXiv:2403.18901, 2024.
{GCR24}{A. Gong et al., ``Toward low-latency iterative decoding
of qLDPC codes under circuit-level noise,'' arXiv:2403.18901, 2024.
}
\stopreferencesmanual
\end{frame}

View File

@@ -8,6 +8,11 @@
long=belief propagation
}
\DeclareAcronym{bpgd}{
short=BPGD,
long=belief propagation with guided decimation
}
\DeclareAcronym{nms}{
short=NMS,
long=normalized min-sum
@@ -18,6 +23,11 @@
long=sum-product algorithm
}
\DeclareAcronym{css}{
short=CSS,
long=Calderbank-Shor-Steane
}
\DeclareAcronym{llr}{
short=LLR,
long=log-likelihood ratio
@@ -33,6 +43,11 @@
long=low-density parity-check
}
\DeclareAcronym{qldpc}{
short=QLDPC,
long=quantum low-density parity-check
}
\DeclareAcronym{ml}{
short=ML,
long=maximum likelihood
@@ -77,3 +92,8 @@
short=PDF,
long=probability density function
}
\DeclareAcronym{bb}{
short=BB,
long=bivariate bicycle
}

File diff suppressed because it is too large Load Diff

View File

@@ -1,4 +1,4 @@
\chapter{Fundamentals}
\chapter{Fundamentals of Classical and Quantum Error Correction}
\label{ch:Fundamentals}
\Ac{qec} is a field of research combining ``classical''
@@ -6,8 +6,6 @@ communications engineering and quantum information science.
This chapter provides the relevant theoretical background on both of
these topics and subsequently introduces the fundamentals of \ac{qec}.
% TODO: Is an explanation of BP with guided decimation needed in this chapter?
% TODO: Is an explanation of OSD needed chapter?
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\section{Classical Error Correction}
\label{sec:Classical Error Correction}
@@ -517,6 +515,7 @@ This is precisely the effect that leads to the good performance of
\ac{sc}-\ac{ldpc} codes in the waterfall region \cite{costello_spatially_2014}.
\subsection{Iterative Decoding}
\label{subsec:Iterative Decoding}
% Introduction
@@ -607,21 +606,23 @@ The purpose of this section is to convey these concepts to the reader.
In quantum mechanics, the state of a particle is described by a
\emph{wave function} $\psi(x,t)$.
The connection between this function and the observable world
is Born's statistical interpretation:
$\lvert \psi (x,t) \rvert^2$ is the \ac{pdf} of finding a praticle at
Born's statistical interpretation provides a connection between this
function and the observable world:
$\lvert \psi (x,t) \rvert^2$ is the \ac{pdf} of finding a particle at
position $x$ and time $t$ \cite[Sec.~1.2]{griffiths_introduction_1995}.
Note that this presupposes a normalization of $\psi$ such that
$\int_{-\infty}^{\infty} \lvert \psi(x,t) \rvert^2 dx = 1$.
% Dirac notation
A lot of the related mathematics can be very elegantly expressed
Much of the related mathematics can be very elegantly expressed
using the language of linear algebra.
The so called Bra-ket or Dirac notation is especially appropriate,
The so-called Bra-ket or Dirac notation is especially appropriate,
having been proposed by Paul Dirac in 1939 for the express purpose
of simplifying quantum mechanical notation \cite{dirac_new_1939}.
Two new symbols are defined, \emph{bra}s $\bra{\cdot}$ and
\emph{ket}s $\ket{\cdot}$.
Kets denote ordinary vectors, while bras denote their Hermitian conjugates.
Kets denote column vectors, while bras denote their Hermitian conjugates.
For example, two vectors specified by the labels $a$ and $b$
respectively are written as $\ket{a}$ and $\ket{b}$.
Their inner product is $\braket{a\vert b}$.
@@ -630,7 +631,7 @@ Their inner product is $\braket{a\vert b}$.
The connection we will make between quantum mechanics and linear
algebra is that we will model the state space of a system as a
\emph{function space}.
\emph{function space}, the Hilbert space $L_2$.
We will represent the state of a particle with wave function
$\psi(x,t)$ using the vector $\ket{\psi}$
\cite[Sec.~3.3]{griffiths_introduction_1995}.
@@ -643,6 +644,17 @@ output \cite[Sec.~3.2.2]{griffiths_introduction_1995}.
Operators are useful to describe the relations between different
quantities relating to a particle.
An example of this is the differential operator $\partial x$.
We define the \emph{commutator} of two operators $P_1$ and $P_2$ as
\begin{align*}
[P_1,P_2] = P_1P_2 - P_2P_1
\end{align*}
and the \emph{anticommutator} as
\begin{align*}
[P_1,P_2]_+ = P_1P_2 + P_2P_1
.%
\end{align*}
We say the two operators \emph{commute} iff $[P_1,P_2] = 0$, and they
\emph{anti-commute} iff $[P_1,P_2]_+ = 0$.
%%%%%%%%%%%%%%%%
\subsection{Observables}
@@ -663,8 +675,8 @@ observations \cite[Sec.~3.3]{griffiths_introduction_1995}.
If we know the wave function of a particle, we should be able to
compute the expected value $\braket{Q}$ of any observable quantity we wish.
It can be shown that for any $Q$, we can compute a
corresponding operator $\hat{Q}$ such that
It can be shown that for any $Q$, we can find a
corresponding Hermitian operator $\hat{Q}$ such that
\cite[Sec.~3.3]{griffiths_introduction_1995}
\begin{align}
\label{eq:gen_expr_Q_exp}
@@ -689,7 +701,7 @@ formula simplifies to the direct calculation of the expected value.
Let us now examine how the observable operator $\hat{Q}$ relates to
the determinate states of the observable quantity.
We begin by translating \autoref{eq:gen_expr_Q_exp} into linear alebra as
We begin by translating \autoref{eq:gen_expr_Q_exp} into linear algebra as
\cite[Eq.~3.114]{griffiths_introduction_1995}
\begin{align}
\label{eq:gen_expr_Q_exp_lin}
@@ -697,7 +709,7 @@ We begin by translating \autoref{eq:gen_expr_Q_exp} into linear alebra as
.%
\end{align}
\autoref{eq:gen_expr_Q_exp_lin} expresses an inherently probabilistic
relationhip.
relationship.
The determinate states are inherently deterministic.
To relate the two, we note that since determinate states should
always yield the same measurement results, the variance of the
@@ -742,6 +754,9 @@ We can use the determinate states for this purpose, expressing the state as%
c_n := \braket{e_n \vert \psi}
.%
\end{align}
Because of the normalization of the wave function such that
$\int_{-\infty}^{\infty} \lvert \psi(x,t) \rvert^2 dx = 1$, we have
$\sum_{n=1}^{\infty} \lvert c_n \rvert ^2 = 1$.
Inserting \autoref{eq:determinate_basis} into
\autoref{eq:gen_expr_Q_exp_lin} we obtain
% tex-fmt: off
@@ -771,7 +786,7 @@ We can decompose an arbitrary state as $\ket{\psi} = \sum_{n=1}^{\infty} c_n
\ket{e_n}$, where $\lvert c_n \rvert ^2$ represents the probability
of obtaining a certain measurement value.
Note that when we speak of an \emph{observable}, we are usually
refering to the operator $\hat{Q}$.
referring to the operator $\hat{Q}$.
%%%%%%%%%%%%%%%%
\subsection{Projective Measurements}
@@ -837,7 +852,7 @@ These project a vector onto the subspace spanned by $\ket{e_n}$.
\subsection{Qubits and Multi-Qubit States}
\label{subsec:Qubits and Multi-Qubit States}
% The qubit
% Intro
% TODO: Make sure `quantum gate` is proper terminology
A central concept for quantum computing is that of the \emph{qubit}.
@@ -846,20 +861,35 @@ For classical computers, we alter bits' states using \emph{gates}.
We can chain multiple of these gates together to build up more complex logic,
such as half-adders or eventually a full processor.
In principle, quantum computers work in a similar fashion, only that
instead of bits we use qubits and instead of, e.g. {AND}, OR, and XOR
instead of bits we use qubits and instead of, e.g., AND, OR, and XOR
operations we use \emph{quantum gates} \cite[Sec.~1.3]{nielsen_quantum_2010}.
We define a qubit to be a component with determinate
states $\ket{0}$ and $\ket{1}$.
The general description of the state $\ket{\psi}$ of a qubit is thus
\begin{align}
\label{eq:gen_qubit_state}
\ket{\psi} = \alpha\ket{0} + \beta\ket{1}, \hspace{5mm} \alpha,
\beta \in \mathbb{C}
% Qubits and multi-qubit states
We fix an orthonormal basis of $\mathbb{C}^2$ to be
\begin{align*}
\ket{0} =
\begin{pmatrix}
1 \\
0
\end{pmatrix}, \hspace{5mm}
\ket{1} =
\begin{pmatrix}
0 \\
1
\end{pmatrix}
.%
\end{align}
% The tensor product and multi-qubit states
\end{align*}
A qubit is defined to be a system with quantum state
\begin{align*}
\ket{\psi} =
\begin{pmatrix}
\alpha \\
\beta
\end{pmatrix}
= \alpha \ket{0} + \beta \ket{1}
.%
\end{align*}
The overall state of a composite quantum system is described using
the \emph{tensor product}, denoted as $\otimes$
\cite[Sec.~2.2.8]{nielsen_quantum_2010}.
@@ -869,9 +899,7 @@ Take for example the two qubits
\ket{\psi_2} = \alpha_2 \ket{0} + \beta_2 \ket{1}
.%
\end{align*}
% TODO: Fix the fact that \psi is used above for the single-qubit
% case and below for the multi-qubit case
We examine the state $\ket{\psi}$ of the composite system as.
We examine the state $\ket{\psi}$ of the composite system.
Assuming the qubits are independent, this is a \emph{product state}
$\ket{\psi} = \ket{\psi_1}\otimes\ket{\psi_2}$.
When not ambiguous, we may omit the tensor product symbol or even write
@@ -893,6 +921,12 @@ We have
\end{align}
We call $\ket{x_0, \ldots, x_n}~, x_i \in \{0,1\}$ the
\emph{computational basis states} \cite[Sec.~4.6]{nielsen_quantum_2010}.
To additionally simplify set notation, we define
\begin{align*}
\mathcal{M}^{\otimes n} := \underbrace{\mathcal{M}\otimes \ldots
\otimes \mathcal{M}}_{n \text{ times}}
.%
\end{align*}
% Entanglement
@@ -902,9 +936,9 @@ An example of such states are the \emph{Bell states}
\begin{align*}
\begin{split}
\ket{\psi_{00}} &= \frac{\ket{00} + \ket{11}}{\sqrt{2}} \hspace{15mm}
\ket{\psi_{01}} = \frac{\ket{01} - \ket{10}}{\sqrt{2}} \\
\ket{\psi_{10}} &= \frac{\ket{00} + \ket{11}}{\sqrt{2}} \hspace{15mm}
\ket{\psi_{11}} = \frac{\ket{01} - \ket{10}}{\sqrt{2}}
\ket{\psi_{01}} = \frac{\ket{01} + \ket{10}}{\sqrt{2}} \\
\ket{\psi_{10}} &= \frac{\ket{01} - \ket{10}}{\sqrt{2}} \hspace{15mm}
\ket{\psi_{11}} = \frac{\ket{00} - \ket{11}}{\sqrt{2}}
\end{split}
\hspace{4mm}.%
\end{align*}
@@ -933,10 +967,10 @@ After examining the modelling of single- and multi-qubit systems,
we now shift our focus to describing the evolution of their states.
We model state changes as operators.
Unlike classical systems, where there are only two possible states and
thus the only possible state change is a bit-flip, a gerenal qubit
thus the only possible state change is a bit-flip, a general qubit
state as shown in \autoref{eq:gen_qubit_state} lives on a continuum of values.
We thus technically also have an infinite number of possible state changes.
Luckily, we can express any operator as a linear combination of the
Fortunately, we can express any operator as a linear combination of the
\emph{Pauli operators} \cite[Sec.~2.2]{gottesman_stabilizer_1997}
\cite[Sec.~2.2]{roffe_quantum_2019}
\begin{align*}
@@ -957,23 +991,31 @@ Luckily, we can express any operator as a linear combination of the
\begin{array}{c}
Z\text{ Operator} \\
\hline\\
\ket{0} \mapsto -\ket{0} \\
\ket{0} \mapsto \phantom{-}\ket{0} \\
\ket{1} \mapsto -\ket{1}
\end{array}%
\hspace{10mm}%
\begin{array}{c}
Y\text{ Operator} \\
\hline\\
\ket{0} \mapsto -j\ket{1} \\
\ket{0} \mapsto \phantom{-}j\ket{1} \\
\hspace{2.75mm}\ket{1} \mapsto -j\ket{0} \hspace*{1mm}.
\end{array}
\end{align*}
In fact, if we allow for complex coefficients, the $X$ and $Z$
operators are sufficient to express any other operator as a linear
combination \cite[Sec.~2.2]{roffe_quantum_2019}.
$I$ is the identity operator and $X$ and $Z$ are referred to as
\emph{bit-flips} and \emph{phase-flips} respectively.
We also call these operators \emph{gates}.
We call the set $\mathcal{G}_n = \left\{ \pm I,\pm jI, \pm X,\pm jX,
\pm Y,\pm jY, \pm Z, \pm jZ \right\}^{\otimes n}$ the \emph{Pauli
group} over $n$ qubits.
In the context of modifying qubit states, we also call operators \emph{gates}.
When working with multi-qubit systems, we can also apply Pauli gates
to individual qubits independently, e.g., $I_1 X_2 I_3 Z_4 Y_5$.
We often omit the identity operators, instead writing $X_2 Z_4 Y_5$.
to individual qubits independently, which we write, e.g., as $I_1 X_2
I_3 Z_4 Y_5$.
We often omit the identity operators, instead writing, e.g., $X_2 Z_4 Y_5$.
Other important operators include the \emph{Hadamard} and
\emph{controlled-NOT (CNOT)} gates \cite[Sec.~1.3]{nielsen_quantum_2010}
\vspace*{-7mm}
@@ -1010,20 +1052,51 @@ Other important operators include the \emph{Hadamard} and
\noindent Many more operators relevant to quantum computing exist, but they are
not covered here as they are not central to this work.
\indent\red{[We only need to consider X and Z errors]
\cite[Equation~8]{roffe_quantum_2019}} \\
\indent\red{[Explain commuting/anticommuting property of operators]
[Journal~p.~46]}
%%%%%%%%%%%%%%%%
\subsection{Quantum Circuits}
\label{Quantum Circuits}
\noindent\indent\red{[Controlled operations]
\cite[Sec.~4.3]{nielsen_quantum_2010}} \\
\indent\red{[In case this reference is needed: Measurements
\cite[Sec.~4.4]{nielsen_quantum_2010}]} \\
\indent\red{[General circuit stuff] \cite[Sec.~1.3.4]{nielsen_quantum_2010}}
% Intro
Using these quantum gates, we can construct \emph{circuits} to manipulate
the states of qubits \cite[Sec.~1.3.4]{nielsen_quantum_2010}.
Circuits are read from left to right and each horizontal wire
represents a qubit whose state evolves as it passes through
successive gates.
% General notation
A single line carries a quantum state, while a double line
denotes a classical bit, typically used to carry the result of a measurement.
A measurement is represented by a meter symbol.
In general, gates are represented as labeled boxes placed on one or more wires.
An exception is the CNOT gate, where the operation is represented as
the symbol $\oplus$.
% Controlled gates & example
We can additionally add a control input to a gate.
This conditions its application on the state of another qubit
\cite[Sec.~4.3]{nielsen_quantum_2010}.
The control connection is represented by a vertical line connecting
the gate to the corresponding qubit, where a filled dot is placed.
A controlled gate applies the respective operation only if the
control qubit is in state $\ket{1}$.
An example of this is the CNOT gate introduced in
\autoref{subsec:Qubits and Multi-Qubit States}, which is depicted in
\autoref{fig:cnot_circuit}.
\begin{figure}[t]
\centering
\begin{quantikz}
\lstick{$\ket{\psi}_1$} & \ctrl{1} & \\
\lstick{$\ket{\psi}_2$} & \targ{} & \\
\end{quantikz}
\caption{CNOT gate circuit.}
\label{fig:cnot_circuit}
\end{figure}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\section{Quantum Error Correction}
@@ -1035,11 +1108,11 @@ not covered here as they are not central to this work.
One of the major barriers on the road to building a functioning
quantum computer is the inevitability of errors during quantum
computation due to the difficulty in sufficiently isolating the
computation. These arise due to the difficulty in sufficiently isolating the
qubits from external noise \cite[Intro.]{roffe_quantum_2019}.
This isolation is critical for quantum systems, as the constant interactions
with the environment act as small measurements, leading to the
eventual \emph{decoherence} of the quantum state
with the environment act as small measurements, an effect called
\emph{decoherence} of the quantum state
\cite[Intro.]{gottesman_stabilizer_1997}.
\ac{qec} is one approach of dealing with this problem, by protecting
the quantum state in a similar fashion to information in classical error
@@ -1047,12 +1120,12 @@ correction.
% The unique challenges of QEC
The problem setting of \ac{qec} differs slightly from the classical case, as
three main restrictions apply \cite[Sec.~2.4]{roffe_quantum_2019}:
The problem setting of \ac{qec} differs slightly from the classical case.
Three main restrictions apply \cite[Sec.~2.4]{roffe_quantum_2019}:
\begin{itemize}
\item The no-cloning theorem states that it is
impossible to exactly copy the state of one qubit into another.
\item Qubit are susceptible to more types of errors than
\item Qubits are susceptible to more types of errors than
just bit-flips, as we saw in
\autoref{subsec:Qubits and Multi-Qubit States}.
\item Directly measuring the state of a qubit collapses it onto
@@ -1063,16 +1136,32 @@ three main restrictions apply \cite[Sec.~2.4]{roffe_quantum_2019}:
% General idea (logical vs. physical gates) + notation
Much like in classical error correction, in \ac{qec} information
is protected by mapping it onto codewords in an expanded space,
is protected by mapping it onto codewords in a higher-dimensional space,
thereby introducing redundancy.
To this end, $k \in \mathbb{N}$ \emph{logical qubits} are mapped onto
$n \in \mathbb{N},~n>k$ \emph{physical qubits}.
We circumvent the no-cloning restriction by not copying the state of
the $k$ logical qubits, instead spreading it out over all $n$
physical ones \cite[Intro.]{calderbank_good_1996}
To differentiate a quantum codes from classical ones, we denote a
$n \in \mathbb{N}$ \emph{physical qubits}, $n>k$.
We circumvent the no-cloning restriction by not copying the state of any of
the $k$ logical qubits, instead spreading the total state out over all $n$
physical qubits \cite[Intro.]{calderbank_good_1996}.
To differentiate quantum codes from classical ones, we denote a
code with parameters $k,n$ and minimum distance $d_\text{min}$ using
double brackets, as $[[ n,k,d_\text{min} ]]$ \cite[Sec.~4]{roffe_quantum_2019}.
double brackets, as $\llbracket n,k,d_\text{min} \rrbracket$
\cite[Sec.~4]{roffe_quantum_2019}.
% The backlog problem
Another difference between quantum and classical error correction
lies in the resource constraints.
For \ac{qec}, the most important property is low latency, not, e.g.,
low overall computational complexity.
This is due to the \emph{backlog problem}
\cite[Sec.~II.G.3.]{terhal_quantum_2015}: There are certain gates
at which the effect of existing errors on single qubits may be
exacerbated by transforming them to multi-qubit errors.
We wish to correct the errors before passing qubits through such gates.
If the \ac{qec} system is not fast enough, there will be an increasing
backlog of information at this point in the circuit, leading to an
exponential slowdown in computation.
%%%%%%%%%%%%%%%%
\subsection{Stabilizer Measurements}
@@ -1092,8 +1181,8 @@ Consider the two-qubit repetition code
\underbrace{\ket{11}}_{=:\ket{1}_\text{L}}
.%
\end{align*}
We call $\ket{\psi}_L$ the logical state.
We define the \emph{codespace} as $\mathcal{C} := \text{span}\mleft\{
We call $\ket{\psi}_L$ the logical state, and
we define the \emph{codespace} as $\mathcal{C} := \text{span}\mleft\{
\ket{00}, \ket{11} \mright\}$ and the \emph{error subspace} as
$\mathcal{F} := \text{span} \mleft\{\ket{01}, \ket{10} \mright\}$.
Note that this code is only able to detect single $X$-type errors.
@@ -1132,9 +1221,9 @@ $E\ket{\psi}_\text{L}$ lies in $\mathcal{C}$ or $\mathcal{F}$.
% non-compromising meausrement of the information
To do this without directly observing (and thus potentially
collapsing) the logical state $\ket{\psi}_\text{L}$, we prepare an
ancilla qubit with state $\ket{0}_\text{A}$ and we entangle it with
ancilla qubit with state $\ket{0}_\text{A}$ and entangle it with
$\ket{\psi}_\text{L}$ in such a way that the eigenvalue is indicated
by measuring that instead.
by measuring the ancilla qubit instead.
More specifically, using a stabilizer measurement circuit as shown in
\autoref{fig:stabilizer_measurement}, we transform the state of the
three-qubit system as
@@ -1158,62 +1247,13 @@ the ancilla qubit. Similarly, if $E \ket{\psi}_\text{L} \in
\begin{figure}[t]
\centering
\tikzset{
meter/.append style={
draw, rectangle,
font=\vphantom{A}, minimum width=8mm, minimum height=8mm,
path picture={
\draw[black]
([shift={(.1,.3)}]path picture bounding box.south west)
to[bend left=50]
([shift={(-.1,.3)}]path picture bounding box.south east);
\draw[black,-latex]
([shift={(0,.1)}]path picture bounding box.south)
-- ([shift={(.3,-.1)}]path picture bounding box.north);
}
}
}
\begin{tikzpicture}
\node[rectangle, minimum width=2cm, minimum height=3cm, draw]
(ZZ) {$Z_1Z_2$};
\coordinate (qi1) at (-3, 1);
\coordinate (qi2) at (-3, -1);
\coordinate (qi3) at (-3, -3);
\coordinate (qo1) at (4, 1);
\coordinate (qo2) at (4, -1);
\coordinate (qo3) at (4, -3);
\node[rectangle, minimum width=8mm, minimum height=8mm, draw]
(H1) at ($(qo3 -| ZZ) + (-2, 0)$) {H};
\node[rectangle, minimum width=8mm, minimum height=8mm, draw]
(H2) at ($(qo3 -| ZZ) + (2, 0)$) {H};
\node[circle, fill] (not) at (H1 -| ZZ) {};
\node[meter, right=5mm of H2] (mes) {};
\draw (qi1) -- (ZZ.west |- qi1);
\draw (qi2) -- (ZZ.west |- qi2);
\draw (qo1) -- (ZZ.east |- qo1);
\draw (qo2) -- (ZZ.east |- qo2);
\draw (qi3) -- (H1) -- (not) -- (H2) -- (mes);
\draw (not) -- (ZZ);
\coordinate (qo3u) at ($(qo3) + (0, .5mm)$);
\coordinate (qo3d) at ($(qo3) + (0, -.5mm)$);
\draw (mes.east |- qo3u) -- (qo3u);
\draw (mes.east |- qo3d) -- (qo3d);
\node[left] at (qi3) {$\ket{0}_\text{A}$};
\node[left] at ($(qi1)!.5!(qi2)$) {$E\ket{\psi}_\text{L}$};
\node[right] at ($(qo1)!.5!(qo2)$) {$E\ket{\psi}_\text{L}$};
\end{tikzpicture}
% tex-fmt: off
\begin{quantikz}
\lstick[2]{$E\ket{\psi}_\text{L}$} & & \gate[2]{Z_1Z_2} & & & \\
& & & & & \\
\lstick{$\ket{0}_\text{A}$} & \gate{H} & \ctrl{-1} & \gate{H} & \meter{} & \setwiretype{c} \\
\end{quantikz}
% tex-fmt: on
\caption{Stabilizer measurement circuit for the two-qubit repetition code.}
\label{fig:stabilizer_measurement}
@@ -1237,23 +1277,25 @@ E.g., $P_\mathcal{C}$ will eliminate all components of $E
\ket{\psi}_\text{L}$ that lie in $\mathcal{F}$.
This process, together with the fact that any coherent error can be
decomposed into a linear combination of $X$ and $Z$ errors, means
that it is enough for a \ac{qec} to be able to correct only $X$ and $Z$ errors.
that it is sufficient for \ac{qec} to be able to correct only these
types of errors.
This effect is referred to as error \emph{digitization}
\cite[Sec.~2.2]{roffe_quantum_2019}.
% The stabilizer group
Operators such as $Z_1Z_2$ above are called \emph{stabilizers}.
An operator $P_i \in \mathcal{G}_n$ is called a stabilizer of an
More generally, an operator $P_i \in \mathcal{G}_n$ is called a stabilizer of an
$[[n, k, d_\text{min}]]$ code $\mathcal{C}$, if
\begin{itemize}
\item It stabilizes all logical states, i.e.,
$P_i\ket{\psi}_\text{L} = (+1)\ket{\psi}_\text{L} ~\forall~
\ket{\psi}_\text{L} \in \mathcal{C}$.
\item It commutes with all other stabilizers of the code. This
property is important to be able to measure the eigenvalue of
a stabilizer without disturbing the eigenvectors of the
others \cite[Sec.~1.2]{gottesman_stabilizer_1997}.
\item It commutes with all other stabilizers $P_j$ of the code,
i.e., $[P_i, P_j] = 0$.
This property is important to be able to measure the
eigenvalue of a stabilizer without disturbing the
eigenvectors of the others \cite[Sec.~1.2]{gottesman_stabilizer_1997}.
\end{itemize}
Formally, we define the \emph{stabilizer group} $\mathcal{S}$ as
\cite[Sec.~4.1]{roffe_quantum_2019}
@@ -1291,11 +1333,11 @@ and the stabilizer measurement returns 1.
For classical binary linear block codes, we use $n-k$ parity-checks
to reduce the degrees of freedom introduced by the encoding operation.
Effectively, each parity-check defines a local code, splitting the
vector space in half, with only one half containing valid codewords.
Effectively, each parity-check defines a local code splitting the
vector space in half, with only one part containing valid codewords.
The global code is the intersection of all local codes.
We can do the same in the quantum case.
Each split is represented using stabilizer, whose eigenvalues signify
Each split is represented using a stabilizer, whose eigenvalues signify
whether a candidate vector lies in the local codespace or local error subspace.
It is only a valid codeword if it lies in the codespace of all local codes.
We call codes constructed this way \emph{stabilizer codes}.
@@ -1305,45 +1347,86 @@ We call codes constructed this way \emph{stabilizer codes}.
Similar to the classical case, we can use a syndrome vector to
describe which local codes are violated.
To obtain the syndrome, we simply measure the corresponding
operators, each using a circuit as explained in
operators $P_i$, each using a circuit as explained in
\autoref{subsec:Stabilizer Measurements}.
A full \emph{syndrome extraction circuit} is depicted in \autoref{fig:sec}.
Note that this is an abstract representation of the syndrome extraction.
For the actual implementation in hardware, we can transform this into
a circuit that requires only CNOT and H-gates
\cite[Sec.~10.5.8]{nielsen_quantum_2010}.
% TODO: Move this further up to the commutativity of operators?
\indent\red{[Fixing the error after finding it
\cite[Sec.~10.5.5]{nielsen_quantum_2010}]} \\
\indent\red{[Logical operators \cite[Sec.~4.2]{roffe_quantum_2019}]} \\
\indent\red{[Measuring logical operators gives yields the outcomes of
the encoded computations \cite[Sec.~2.6]{derks_designing_2025}]} \\
\indent\red{[X and Z measurements can be performed with only CNOT and
Hadamard gates \cite[Sec.~10.5.8]{nielsen_quantum_2010}]} \\
\indent\red{[(?) Stabilizer generators]} \\
\indent\red{[Parity-check matrix \cite[Sec.~10.5.1]{nielsen_quantum_2010}]}
% Logical operators
In order to modify the logical state encoded using the physical
qubits, we can use \emph{logical operators} \cite[Sec.~4.2]{roffe_quantum_2019}.
For each qubit, there are two logical operators, $X_i$ and $Z_j$.
These are operators that
\begin{itemize}
\item Commute with all the stabilizers in $\mathcal{S}$.
\item Anti-commute with one another, i.e., $[ \overline{X}_i,
\overline{Z}_i ]_{+} = \overline{X}_i \overline{Z}_i +
\overline{Z}_i \overline{X}_i = 0$.
\end{itemize}
We can also measure these operators to find out the logical state a
physical state corresponds to \cite[Sec.~2.6]{derks_designing_2025}.
% Parity-check matrix
% TODO: Do I have to introduce before that stabilizers only need X
% and Z operators?
We can represent stabilizer codes using a \emph{check matrix}
\cite[Sec.~10.5.1]{nielsen_quantum_2010}
\begin{align*}
\bm{H} = \left[
\begin{array}{c|c}
\bm{H}_X & \bm{H}_Z
\end{array}
\right]
,%
\end{align*}
with $\bm{H} \in \mathbb{F}_2^{(n-k)\times(2n)}$.
This is similar to a classical \ac{pcm} in that it contains $n-k$
rows, each describing one constraint. Each constraint restricts an additional
degree of freedom of the higher-dimensional space we use to introduce
redundancy.
In contrast to the classical case, this matrix now has $2n$ columns,
as we have to consider both the $X$ and $Z$ type operators that make up
the stabilizers.
Take for example the Steane code \cite[Eq.~10.83]{nielsen_quantum_2010}.
We can describe it using the check matrix
\begin{align}
\label{eq:steane}
\bm{H}_\text{Steane} = \left[
\begin{array}{ccccccc|ccccccc}
0 & 0 & 0 & 1 & 1 & 1 & 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\
0 & 1 & 1 & 0 & 0 & 1 & 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\
1 & 0 & 1 & 0 & 1 & 0 & 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\
0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 1 & 1 & 1 & 1 \\
0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 1 & 1 & 0 & 0 & 1 & 1 \\
0 & 0 & 0 & 0 & 0 & 0 & 0 & 1 & 0 & 1 & 0 & 1 & 0 & 1
\end{array}
\right]
.%
\end{align}
The first $n$ columns correspond to $X$ operators acting on the
corresponding physical qubit, the rest to the $Z$ operators.
\begin{figure}[t]
\centering
\tikzset{
meter/.append style={
draw, rectangle,
font=\vphantom{A}, minimum width=8mm, minimum height=8mm,
path picture={
\draw[black]
([shift={(.1,.3)}]path picture bounding box.south west)
to[bend left=50]
([shift={(-.1,.3)}]path picture bounding box.south east);
\draw[black,-latex]
([shift={(0,.1)}]path picture bounding box.south)
-- ([shift={(.3,-.1)}]path picture bounding box.north);
}
}
}
\red{Hier könnte Ihre Werbung stehen.}
% tex-fmt: off
\begin{quantikz}
\lstick[2]{$E\ket{\psi}_\text{L}$} & & \gate[2]{P_1} & \gate[2]{P_2} & \gate[style={draw=none},2]{\ldots} & \gate[2]{P_{n-k}} & & & \\
& & & & & & & & \\
\lstick{$\ket{0}_{\text{A}_1}$} & \gate{H} & \ctrl{-1} & & & & \gate{H} & \meter{} & \setwiretype{c} \\
\lstick{$\ket{0}_{\text{A}_2}$} & \gate{H} & & \ctrl{-2} & & & \gate{H} & \meter{} & \setwiretype{c} \\
\vdots\setwiretype{n} & & & & & & & & \vdots \\
\lstick{$\ket{0}_{\text{A}_{n-k}}$} & \gate{H} & & & & \ctrl{-4} & \gate{H} & \meter{} & \setwiretype{c} \\
\end{quantikz}
% tex-fmt: on
\caption{
\red{Illustration of a general syndrome extraction circuit.
Adapted from \cite[Figure~4]{roffe_quantum_2019}.}
Illustration of a full syndrome extraction circuit.
Adapted from \cite[Figure~4]{roffe_quantum_2019}.
}
\label{fig:sec}
\end{figure}
@@ -1352,76 +1435,275 @@ Hadamard gates \cite[Sec.~10.5.8]{nielsen_quantum_2010}]} \\
\subsection{Calderbank-Shor-Steane Codes}
\label{subsec:Calderbank-Shor-Steane Codes}
% Intro
Stabilizer codes are especially practical to work with when they can
handle $X$- and $Z$-type errors independently.
We can then separate the stabilizer generators into some with only
$Z$ operators and some with only $X$ operators.
handle $X$ and $Z$ type errors independently.
As $Z$ errors anti-commute with $X$ operators in the stabilizers and
vice versa, this property translates into being able to split the
stabilizers into a subset being made up of only $X$
operators and the rest only of $Z$ operators.
We call such codes \ac{css} codes.
We can see this property in \autoref{eq:steane} in the check matrix
of the Steane code.
\indent\red{[Z-type operators for X type errors and vice versa ]} \\
\indent\red{[Construction from two binary linear codes
\cite[p.~452,469]{nielsen_quantum_2010}]}
% Construction
We can exploit this separate consideration of $X$ and $Z$ errors in
the construction of \ac{css} codes.
We combine two binary linear codes $\mathcal{C}_1$ and
$\mathcal{C}_2$, each responsible for correcting one type of error
\cite[Sec.~10.5.6]{nielsen_quantum_2010}.
Using the dual code of $\mathcal{C}_2$ \cite[Eq.~3.4]{ryan_channel_2009}
\begin{align*}
\mathcal{C}_2^\perp := \left\{ \bm{x}' \in \mathbb{F}^2 :
\bm{x}' \bm{x}^\text{T} = 0 ~\forall \bm{x} \in \mathcal{C}_2 \right\}
,%
\end{align*}
we define $\bm{H}_X := \bm{H}(\mathcal{C}_2^\perp)$ and $\bm{H}_Z
:= \bm{H}(\mathcal{C}_1)$, and construct the check matrix as
\begin{align*}
\left[
\begin{array}{c|c}
\bm{H}_X & \bm{0} \\
\bm{0} & \bm{H}_Z
\end{array}
\right]
.%
\end{align*}
In order to yield a valid stabilizer code, $\mathcal{C}_1$ and
$\mathcal{C}_2$ must satisfy the commutativity condition
\begin{align}
\label{eq:css_condition}
\bm{H}_X \bm{H}_Z^\text{T} = \bm{0}
.%
\end{align}
We can ensure this is the case by choosing them such that
$\mathcal{C}_2 \subset \mathcal{C}_1$.
%%%%%%%%%%%%%%%%
\subsection{Quantum Low-Density Parity-Check Codes}
\label{subsec:Quantum Low-Density Parity-Check Codes}
% Intro
Various methods of constructing \ac{qec} codes exist
\cite{swierkowska_eccentric_2025}.
Topological codes, for example, encode information in the features of
a lattice and are intrinsically robust against local errors.
Among these, the \emph{surface code} is the most widely studied.
Another example are concatenated codes, which nest one code within
another, allowing for especially simple and flexible constructions
\cite[Sec.~3.2]{swierkowska_eccentric_2025}.
An area of research that has recently seen more attention is that of
quantum \ac{ldpc} (\acs{qldpc}) codes.
They have much better encoding efficiency than, e.g., the surface
code, scaling up of which would be prohibitively expensive
\cite[Sec.~I]{bravyi_high-threshold_2024}.
% Bivariate Bicycle codes
A recent addition to the class of \ac{qldpc} codes is that of \ac{bb}
codes \cite[Sec.~3]{bravyi_high-threshold_2024}.
These are a special type of \ac{css} code, where $\bm{H}_X$ and
$\bm{H}_Z$ are constructed from two matrices $\bm{A}$ and $\bm{B}$ as
\begin{align*}
\bm{H}_X = [\bm{A} \vert \bm{B}]
\hspace*{5mm} \text{and} \hspace*{5mm}
\bm{H}_Z = [\bm{B}^\text{T} \vert \bm{A}^\text{T}]
.%
\end{align*}
This way, we can guarantee the satisfaction of the commutativity
condition (\autoref{eq:css_condition}).
To define $\bm{A}$ and $\bm{B}$ we first introduce some additional notation.
We denote the identity matrix as $\bm{I_l} \in \mathbb{F}^{l\times l}$ and
the \emph{cyclic shift matrix} as $\bm{S_l} \in \mathbb{F}^{l\times
l},~S_{l,i,j}= \delta_{i+1,j}$, with $l \in \mathbb{N}$.
We further define
\begin{align*}
x = \bm{S}_l \otimes \bm{I}_m
\hspace*{5mm} \text{and} \hspace*{5mm}
y = \bm{I}_l \otimes \bm{S}_m
.%
\end{align*}
We can then construct $\bm{A}$ and $\bm{B}$ as bivariate polynomials
\begin{align*}
\bm{A} = \bm{A}_1 + \bm{A}_2 + \bm{A}_3
\hspace*{5mm} \text{and} \hspace*{5mm}
\bm{B} = \bm{B}_1 + \bm{B}_2 + \bm{B}_3
,%
\end{align*}
where $\bm{A}_i$ and $\bm{B}_i$ are powers of $\bm{x}$ or $\bm{y}$.
\ac{bb} codes have large minimum distance $d_\text{min}$ and high rate,
offering a more than 10-fold reduction of encoding overhead over the
surface code.
Additionally, they posess short-depth syndrome measurement circuits,
leading to lower time requirements for the syndrome extraction
and thus lower error rates \cite[Sec.~1]{bravyi_high-threshold_2024}.
% Syndrome-based BP
As we saw in \autoref{subsec:Stabilizer Measurements}, we work only
with the parity information contained in the syndrome, to avoid
disturbing the quantum states of individual qubits.
This necessitates a modification of the standard \ac{bp} algorithm
introduced in \autoref{subsec:Iterative Decoding}
\cite[Sec.~3.1]{yao_belief_2024}.
Instead of attempting to find the most likely codeword directly, the
algorithm will now try to find an error pattern $\hat{\bm{e}} \in
\mathbb{F}_2^n$ that satisfies
\begin{align*}
\bm{H} \hat{\bm{e}}^\text{T} = \bm{s}
.%
\end{align*}
To this end, we initialize the channel \acp{llr} as
\begin{align*}
\tilde{L}_i = \log{\frac{P(X_i = 0)}{P(X_i = 1)}} = \log{\frac{1
- p_i}{p_i}}
,%
\end{align*}
where $p_i$ is the prior probability of error of \ac{vn} $i$.
Additionally, we amend the \ac{cn} update to consider the parity
indicated by the syndrome, calculating
\begin{align*}
L_{i\leftarrow j} = 2\cdot (-1)^{s_j} \cdot \tanh^{-1} \left( \prod_{i'\in
\mathcal{N}(j)\setminus \{i\}} \tanh \frac{L_{i'\rightarrow j}}{2} \right)
.
\end{align*}
The resulting syndrome-based \ac{bp} algorithm is shown in
algorithm \ref{alg:syndome_bp}.
\noindent\red{[Constant overhead scaling]} \\
\noindent\red{[Scaling of minimum distance with code length]} \\
\noindent\red{[Bivariate Bicycle codes]} \\
\noindent\red{[Decoding QLDPC codes (syndrome-based BP)]} \\
\noindent\red{[Degeneracy -> BP+OSD, BPGD]} \\
\noindent\red{[``The task of decoding is therefore to infer, from a
measured syndrome, the most likely error coset rather than the exact
physical error.''
% tex-fmt: off
\cite[Sec.~II~B)]{koutsioumpas_colour_2025}]}%
\tikzexternaldisable
\begin{algorithm}[t]
\caption{Binary syndrome-based belief propagation (BP) algorithm.}
\label{alg:syndome_bp}
\begin{algorithmic}[1]
\State \textbf{Initialize:} $\tilde{L}_i \leftarrow
\log \frac{1-p_i}{p_i}$ for all $i \in \mathcal{I}$
\State \textbf{Initialize:} $L_{i \rightarrow j} \leftarrow
\tilde{L}_i$ for all $i \in \mathcal{I},\, j \in \mathcal{N}_\text{V}(i)$
\State \textbf{Initialize:} $\hat{e} \leftarrow \bm{0}$
\For{$\ell = 1, \ldots, n_\text{iter}$}
\For{$j \in \mathcal{J}$}
\For{$i \in \mathcal{N}_\text{C}(j)$}
\State $\displaystyle L_{i \leftarrow j} \leftarrow
2\cdot(-1)^{s_j}\cdot\tanh^{-1}
\!\left(
\prod_{i' \in \mathcal{N}_\text{C}(j)\setminus\{i\}}
\tanh\frac{L_{i'\rightarrow j}}{2}
\right)$
\EndFor
\EndFor
\For{$i \in \mathcal{I}$}
\For{$j \in \mathcal{N}_\text{V}(i)$}
\State $\displaystyle L_{i \rightarrow j} \leftarrow
\tilde{L}_i +
\sum_{j' \in \mathcal{N}_\text{V}(i)\setminus\{j\}}
L_{i \leftarrow j'}$
\EndFor
\EndFor
\For{$i \in \mathcal{I}$}
\State $\displaystyle \hat{e}_i \leftarrow
\mathbbm{1}\left\{
\tilde{L}_i +
\sum_{j \in \mathcal{N}_\text{V}(i)} L_{i \leftarrow j} < 0
\right\}$
\EndFor
\If{$\bm{H}\hat{\bm{e}}^\text{T} = \bm{s}$}
\State \textbf{break}
\EndIf
\EndFor
\State \textbf{return} $\hat{\bm{e}}$
\end{algorithmic}
\end{algorithm}
\tikzexternalenable
% tex-fmt: on
\\
\red{
\textbf{General Notes:}
\begin{itemize}
\item Note that there are other codes than stabilizer codes
(and research and give some examples), but only
stabilizer codes are considered in this work
\item Degeneracy
\item The QEC decoding problem (considering degeneracy)
\cite[Sec.~2.3]{yao_belief_2024}
\end{itemize}
\textbf{Content:}
\begin{itemize}
\item General context
\begin{itemize}
\item Why we need QEC (correcting errors due
to noisy gates)
\item Main challenges of QEC compared to classical
error correction
\item Logical vs physical states, logical vs
physical operators
\end{itemize}
\item Stabilizer codes
\begin{itemize}
\item Definition of a stabilizer code
\item The stabilizer its generators (note somewhere
that the generators have to commute
to be able to
be measured without disturbing each other)
(Why we need commutativity of the
stabilizers [Journal,
p.~51], [Got97, p.~6])
\item syndrome extraction circuit
\item Stabilizer codes are effectively the QM
% TODO: Actually binary linear codes or
% just linear codes?
equivalent of binary linear codes (e.g.,
expressible via check matrix)
\item Similar to parity checks, quantum states can be
more conveniently described using stabilizers
rather than working with the states directly
\cite[Sec.~10.5.1]{nielsen_quantum_2010}
\end{itemize}
\item Digitization of errors
\item CSS codes
\item Color codes?
\item Surface codes?
\end{itemize}
}
% Degeneracy and short cycles
Decoding \ac{qldpc} codes poses some unique challenges.
One issue is that of \emph{quantum degeneracy}.
Because errors that differ by a stabilizer have the same impact on
all codewords, there can be multiple minimum-weight solutions to the
quantum decoding problem \cite[Sec.~II.C.]{babar_fifteen_2015}
\cite[Sec.~V]{roffe_decoding_2020}.
This leads to the decoding algorithm getting confused about the
direction to proceed in \cite[Sec.~5]{yao_belief_2024}.
Another problem is that due to the commutativity property of the stabilizers,
quantum codes inherently contain short cycles
\cite[Sec.~IV.C]{babar_fifteen_2015}.
As discussed in \autoref{subsec:Iterative Decoding}, these lead to
the violation of the independence assumption of the messages passed
during decoding, impeding performance.
% BPGD
The aforementioned issues both manifest themselves as convergence problems
of the \ac{bp} algorithm, and different ways of modifying the algorithm
to aid with convergence exist.
One approach is to use \ac{bp} with guided decimation (\acs{bpgd})
\cite[Alg.~1]{yao_belief_2024}.
Here, a number $T\in \mathbb{N}$ of \ac{bp} iterations are performed,
before \emph{decimating} the most reliable \ac{vn}, i.e., performing
a hard decision and excluding it from further decoding.
This constrains the solution space more and more as the decoding
progresses, encouraging the algorithm to converge to one of the
solutions \cite[Sec.~5]{yao_belief_2024}.
Algorithm \ref{alg:bpgd} shows this process.
Note that as the Tanner graph only has $n$ \acp{vn}, this is a
natural constraint on the maximum number of outer iterations of the algorithm.
% TODO: Explain that setting the channel LLR to infinity is the same
% as a hard decision and ignoring the VN in the further decoding
% tex-fmt: off
\tikzexternaldisable
\begin{algorithm}[t]
\caption{Belief propagation with guided decimation (BPGD) algorithm.}
\label{alg:bpgd}
\begin{algorithmic}[1]
\State \textbf{Initialize:} $\tilde{L}_i \leftarrow
\log \frac{1-p_i}{p_i}$ for all $i \in \mathcal{I}$
\State \textbf{Initialize:} $L_{i \rightarrow j} \leftarrow
\tilde{L}_i$ for all $i \in \mathcal{I},\, j \in \mathcal{N}_\text{V}(i)$
\State \textbf{Initialize:} $\hat{e} \leftarrow \bm{0}$
\State \textbf{Initialize:} $\mathcal{I}' \leftarrow \mathcal{I}$
\For{$r = 1, \ldots, n$}
\For{$\ell = 1, \ldots, T$}
\State Perform \ac{cn} update
\State Perform \ac{vn} update
\State $L^\text{total}_i \leftarrow \tilde{L}_i + \sum_{j \in \mathcal{N}_\text{V}(i)} L_{i \leftarrow j}$
\EndFor
\For{$i \in \mathcal{I}$}
\State $\displaystyle \hat{e}_i \leftarrow
\mathbbm{1}\left\{ L^\text{total}_i \right\}$
\EndFor
\If{$\bm{H}\hat{\bm{e}}^\text{T} = \bm{s}$}
\State \textbf{break}
\Else
\State $i_\text{max} \leftarrow \argmax_{i \in \mathcal{I}'} \lvert L^\text{total}_i \rvert $
\If{$L^\text{total}_{i_\text{max}} < 0$}
\State $\tilde{L}_{i_\text{max}} \leftarrow -\infty$
\Else
\State $\tilde{L}_{i_\text{max}} \leftarrow +\infty$
\EndIf
\State $\mathcal{I}' \leftarrow \mathcal{I}'\setminus\{i_\text{max}\}$
\EndIf
\EndFor
\State \textbf{return} $\hat{\bm{e}}$
\end{algorithmic}
\end{algorithm}
\tikzexternalenable
% tex-fmt: on

View File

@@ -1,18 +1,643 @@
% TODO: Make all [H] -> [t]
\chapter{Fault Tolerant QEC}
\section{Fault Tolerance}
% Intro
\content{Syndrome extraction circuitry itself introduces errors}
\content{High level explanation of fault tolerance (with figure)}
\content{Mathematical definition of fault tolerance}
% Practical considerations
\content{We generally need to perform multiple rounds of syndrome extraction}
\content{The number of rounds of syndrome extraction is usually
chosen equal to the $d_\text{min}$ of the code}
\content{One-shot decoding property}
\begin{figure}[H]
\centering
\begin{tikzpicture}
\node[rectangle, draw, fill=orange!20, minimum
height=2cm, minimum width=2.5cm, align=left] at (0,0)
(internal) {Internal\\ Errors};
\node[signal, draw, fill=orange!20, minimum height=2cm,
minimum width=2.5cm, align=left, signal pointer angle=140]
at (-2.45, 0) (input) {Input\\ Errors};
\node at (1.97,0) {\huge =};
\node[rectangle, draw, fill=orange!20, minimum height=2cm,
minimum width=2.5cm, align=left] at (4,0) (output)
{Output\\ Errors};
\node[above] at (input.north) {\small Input State};
\node[above] at (internal.north) {\small QEC};
\node[above] at (output.north) {\small Output State};
\end{tikzpicture}
\caption{Sources of error in a fault-tolerant \ac{qec} system.}
\end{figure}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\section{Noise Models}
\subsection{Depolarizing Channel}
\subsection{Phenomenological Noise}
\subsection{Circuit-Level Noise}
\label{sec:Noise Models}
% Intro
\content{Explanation of what a noise model is}
\content{Mention there are different types of noise models, each with
different possible error locations}
% Figure intro
\content{\autoref{fig:pure_syndrome_extraction} shows the syndrome
extraction circuit of a three-qubit repetition code with stabilizers
$Z_1Z_2$ and $Z_2Z_3$. This code is only able to deal with X errors.
We will use it as a propotypical model to examine the different types
of noise models}
\content{This is now a concrete implementation of the syndrome
measurement circuit using CNOT gates, as opposed to the system-level
view in \autoref{subsec:Stabilizer Codes}}
\content{\autoref{fig:noise_model_types} shows a number of diffent
types of noise models}
% Bit-flip noise
\content{Bit-flip noise}
\content{Introduce \emph{data qubits}}
\content{Only X errors on data qubits}
\content{Most similar to classical channel coding}
\content{\textbf{TODO}: What is this useful for? Just as a first step?}
% Depolarizing channel
\content{Depolarizing channel}
\content{X/Y/Z errors on data qubits}
\content{\textbf{TODO}: What does this model? Memory experiment with
ideal syndrome extraction?}
\content{\textbf{TODO}: Why is it called depolarizing?}
% Phenomenological noise
\content{Phenomenological noise}
\content{First noise model that considers errors during syndrome extraction}
\content{X errors before each syndrome extraction round}
\content{X errors before measurements}
\content{\textbf{TODO}: Why is this useful? Derks et al. mentioned
something about it being useful to derive fault-tolerant circuits}
\content{\textbf{TODO}: Make sure phenomenological noise is only X errors}
% Circuit-level noise
\content{Circuit-level noise}
\content{This is generally what we strive to be able to decode under}
\content{X/Y/Z errors before each syndrome extraction round}
\content{$n$-qubit Pauli errors after each $n$-qubit Pauli gate}
\content{Define $n$-qubit Pauli errors}
\content{X errors right before the measurements}
\content{Note that the only errors right before the measurements that
have any effect on the measurement outcomes are X errors. That is why
it is enough to consider this type of error at this point in the circuit.}
% Different noise models for circuit-level noise
\content{Comparison from Gidney's paper}
\content{In this work we only consider standard circuit-based
depolarizing noise}
\begin{figure}[H]
\centering
\begin{minipage}{0.5\textwidth}
\begin{align*}
\bm{H} =
\begin{pmatrix}
1 & 1 & 0 \\
0 & 1 & 1
\end{pmatrix}
\end{align*}
\end{minipage}%
\begin{minipage}{0.5\textwidth}
% tex-fmt: off
\begin{quantikz}%[row sep=4mm, column sep=4mm]
\lstick[3]{$\ket{\psi}_\text{L}$} & \ctrl{3} & & & & & \\
& & \ctrl{2} & \ctrl{3} & & & \\
& & & & \ctrl{2} & & \\
\lstick{$\ket{0}_{\text{A}_1}$} & \targ{} & \targ{} & & & \meter{} & \setwiretype{c} \\
\lstick{$\ket{0}_{\text{A}_2}$} & & & \targ{} & \targ{} & \meter{} & \setwiretype{c}
\end{quantikz}
% tex-fmt: on
\end{minipage}%
\caption{
Syndrome extraction circuit for the three-qubit repetition
code under bit-flip noise.
}
\label{fig:pure_syndrome_extraction}
\end{figure}
\begin{figure}[H]
\centering
\newcommand{\xerr}{\gate[style={fill=KITblue!50}]{\phantom{1}}}
\newcommand{\xyzerr}{\gate[style={
draw=black,
fill=KITred,
path picture={
% tex-fmt: off
\fill[KITblue!60]
($(path picture bounding box.south west)+(0,0)$)
-- ($(path picture bounding box.north west)+(0,0)$)
-- ($(path picture bounding box.north west)+(0.28,0)$)
-- cycle;
\fill[KITorange!60]
($(path picture bounding box.north east)+(0,0)$)
-- ($(path picture bounding box.south east)+(0,0)$)
-- ($(path picture bounding box.south east)+(-0.28,0)$)
-- cycle;
\fill[KITred!60]
($(path picture bounding box.north east)+(0,0)$)
-- ($(path picture bounding box.south east)+(-0.28,0)$)
-- ($(path picture bounding box.south west)+(0,0)$)
-- ($(path picture bounding box.north west)+(0.28,0)$)
-- cycle;
% tex-fmt: on
}
}]{\phantom{1}}}
\begin{minipage}{0.7\textwidth}
\begin{minipage}{\textwidth}
\centering
% tex-fmt: off
\begin{quantikz}[row sep=4mm, column sep=4mm]
\lstick[3]{$\ket{\psi}_\text{L}$} & \xerr & \ctrl{3} & & & & & \\
& \xerr & & \ctrl{2} & \ctrl{3} & & & \\
& \xerr & & & & \ctrl{2} & & \\
\lstick{$\ket{0}_{\text{A}_1}$} & & \targ{} & \targ{} & & & \meter{} & \setwiretype{c} \\
\lstick{$\ket{0}_{\text{A}_2}$} & & & & \targ{} & \targ{} & \meter{} & \setwiretype{c}
\end{quantikz}
% tex-fmt: on
\subcaption{Bit-flip noise.}
\end{minipage}
\vspace*{5mm}
\begin{minipage}{\textwidth}
\centering
% tex-fmt: off
\begin{quantikz}[row sep=4mm, column sep=4mm]
\lstick[3]{$\ket{\psi}_\text{L}$} & \xyzerr & \ctrl{3} & & & & & \\
& \xyzerr & & \ctrl{2} & \ctrl{3} & & & \\
& \xyzerr & & & & \ctrl{2} & & \\
\lstick{$\ket{0}_{\text{A}_1}$} & & \targ{} & \targ{} & & & \meter{} & \setwiretype{c} \\
\lstick{$\ket{0}_{\text{A}_2}$} & & & & \targ{} & \targ{} & \meter{} & \setwiretype{c}
\end{quantikz}
% tex-fmt: on
\subcaption{Depolarizing channel.}
\end{minipage}
\vspace*{5mm}
\begin{minipage}{\textwidth}
\centering
% tex-fmt: off
\begin{quantikz}[row sep=4mm, column sep=4mm]
\lstick[3]{$\ket{\psi}_\text{L}$} & \xerr & \ctrl{3} & & & & & & \xerr & & \setwiretype{n} & \\
& \xerr & & \ctrl{2} & \ctrl{3} & & & & \xerr & & \setwiretype{n} & \gate[style={left,draw=none}]{\cdots} \\
& \xerr & & & & \ctrl{2} & & & \xerr & & \setwiretype{n} & \\
\lstick{$\ket{0}_{\text{A}_1}$} & & \targ{} & \targ{} & & & \xerr & \meter{} & \setwiretype{c} \\
\lstick{$\ket{0}_{\text{A}_2}$} & & & & \targ{} & \targ{} & \xerr & \meter{} & \setwiretype{c}
\end{quantikz}
% tex-fmt: on
\subcaption{Phenomenological noise.}
\end{minipage}
\vspace*{5mm}
\begin{minipage}{\textwidth}
\centering
% tex-fmt: off
\begin{quantikz}[row sep=4mm, column sep=2mm]
\lstick[3]{$\ket{\psi}_\text{L}$} & \xyzerr & \ctrl{3} & \xyzerr \wire[d][3]{q} & & & & & & & & & \xyzerr & & \setwiretype{n} & \\
& \xyzerr & & & \ctrl{2} & \xyzerr \wire[d][2]{q} & \ctrl{3} & \xyzerr \wire[d][3]{q} & & & & & \xyzerr & & \setwiretype{n} & \gate[style={left,draw=none,xshift=3.5mm}]{\cdots} \\
& \xyzerr & & & & & & & \ctrl{2} & \xyzerr \wire[d][2]{q} & & & \xyzerr & & \setwiretype{n} & \\
\lstick{$\ket{0}_{\text{A}_1}$} & \xyzerr & \targ{} & \xyzerr & \targ{} & \xyzerr & & & & & \xerr & \meter{} & \setwiretype{c} \\
\lstick{$\ket{0}_{\text{A}_2}$} & \xyzerr & & & & & \targ{} & \xyzerr & \targ{} & \xyzerr & \xerr & \meter{} & \setwiretype{c}
\end{quantikz}
% tex-fmt: on
\subcaption{Circuit-level noise.}
\end{minipage}
\end{minipage}%
\hfill%
\begin{minipage}{0.23\textwidth}
\centering
% tex-fmt: off
\begin{quantikz}[row sep=4mm, column sep=2mm]
\setwiretype{n} & \xerr & \gate[style={right, draw=none, xshift=-15mm}]{\text{X error}} \\
\setwiretype{n} & \xyzerr & \gate[style={right, draw=none, xshift=-15mm}]{\text{X,Z, or Y error}} \\
\setwiretype{n} & \gate{\phantom{1}}\wire[d][1]{q} & \gate[style={right, draw=none, xshift=-15mm},2]{\text{Correlated error}} \\
\setwiretype{n} & \gate{\phantom{1}} &
\end{quantikz}
% tex-fmt: on
\end{minipage}
\caption{Types of noise models.}
\label{fig:noise_model_types}
\end{figure}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\section{Detector Error Models}
\label{sec:Detector Error Models}
\content{\textbf{TODO}: Look up how Derks et al. introduce DEMs}
% Different ways of implementing fault tolerance
\content{Ways of implementing fault tolerance different from DEMs}
% Core idea
\content{Model additional error locations in the code}
\content{Construct ``circuit code'' from original code}
% Benefits
\content{Benefits of this approach}
%%%%%%%%%%%%%%%%
\subsection{Measurement Syndrome Matrix}
\label{subsec:Measurement Syndrome Matrix}
% Core idea
\content{Core idea: Matrix describes parity checks \\
$\rightarrow$ A column shows which parity checks the
corresponding VN contributes to \\
$\rightarrow$ View columns as syndromes corresponding to error
locations in the circuit
}
% Multiple rounds of syndrome extraction
% TODO: First introduce syndrome measurement matrix, mathematically
% (consult Derks et al.'s paper). Then use the three-qubit repetition
% code as an example only
\autoref{fig:rep_code_multiple_rounds_bit_flip} shows a circuit
performing three rounds of syndrome extraction for the three-qubit
repetition code introduced earlier.
We are only considering bit-flip noise at this point.
For each syndrome extraction round, we get an additional set of
syndrome measurements.
We combine these measurements by stacking them in a new vector $\bm{s}
\in \mathbb{F}_2^{n_\text{rounds}\cdot(n-k)}$.
To model this behavior mathematically, we append additional rows to
the check matrix.
We call this matrix the \emph{measurement syndrome matrix}
$\bm{\Omega}$.
\begin{figure}[H]
\centering
\begin{minipage}{0.3\textwidth}
\centering
\begin{tikzpicture}
\node{$%
\bm{\Omega} =
\begin{pmatrix}
1 & 1 & 0 \\
0 & 1 & 1 \\
1 & 1 & 0 \\
0 & 1 & 1 \\
1 & 1 & 0 \\
0 & 1 & 1
\end{pmatrix}%
$
};
\draw [
line width=1pt,
decorate,
decoration={brace,mirror,amplitude=3mm,raise=5mm}
]
(1,0.55) -- (1,1.4)
node[midway,right,xshift=10mm]{$\text{SE}_1$};
\draw [
line width=1pt,
decorate,
decoration={brace,mirror,amplitude=3mm,raise=5mm}
]
(1,-0.4) -- (1,0.45)
node[midway,right,xshift=10mm]{$\text{SE}_2\hspace{2mm},$};
\draw [
line width=1pt,
decorate,
decoration={brace,mirror,amplitude=3mm,raise=5mm}
]
(1,-1.38) -- (1,-0.5)
node[midway,right,xshift=10mm]{$\text{SE}_3$};
\end{tikzpicture}
\end{minipage}%
\begin{minipage}{0.3\textwidth}
\centering
\vspace*{-6mm}
\begin{gather*}
\bm{s} \in \text{span} \mleft\{ \bm{\Omega} \mright\}
\end{gather*}
\end{minipage}
\newcommand{\preperr}[1]{
\gate[style={fill=blue!20}]{\scriptstyle #1}
}
\vspace*{5mm}
\begin{quantikz}[
row sep=4mm, column sep=4mm,
wire types={q,q,q,q,q,n,n,n,n},
execute at end picture={
\draw [
line width=1pt,
decorate,
decoration={brace,amplitude=3mm,raise=9mm}
]
(\tikzcdmatrixname-4-19.north east)
--
(\tikzcdmatrixname-5-19.south east)
node[midway,right,xshift=14mm]{$\text{SE}_1$};
\draw [
line width=1pt,
decorate,
decoration={brace,amplitude=3mm,raise=9mm}
]
(\tikzcdmatrixname-6-19.north east)
--
(\tikzcdmatrixname-7-19.south east)
node[midway,right,xshift=14mm]{$\text{SE}_2$};
\draw [
line width=1pt,
decorate,
decoration={brace,amplitude=3mm,raise=9mm}
]
(\tikzcdmatrixname-8-19.north east)
--
(\tikzcdmatrixname-9-19.south east)
node[midway,right,xshift=14mm]{$\text{SE}_3$};
}
]
% tex-fmt: off
\lstick[3]{$\ket{\psi}_\text{L}$} & \preperr{E_0} & \ctrl{3} & & & & & & \ctrl{5} & & & & & & \ctrl{7} & & & & & \\
& \preperr{E_1} & & \ctrl{2} & \ctrl{3} & & & & & \ctrl{4} & \ctrl{5} & & & & & \ctrl{6} & \ctrl{7} & & & \\
& \preperr{E_2} & & & & \ctrl{2} & & & & & & \ctrl{4} & & & & & & \ctrl{6} & & \\
\lstick{$\ket{0}_{\text{A}_1}$} & & \targ{} & \targ{} & & & & & & & & & & & & & & & \meter{} & \setwiretype{c} \\
\lstick{$\ket{0}_{\text{A}_2}$} & & & & \targ{} & \targ{} & & & & & & & & & & & & & \meter{} & \setwiretype{c} \\
& & & & & & \lstick{$\ket{0}_{\text{A}_3}$} & \setwiretype{q} & \targ{} & \targ{} & & & & & & & & & \meter{} & \setwiretype{c} \\
& & & & & & \lstick{$\ket{0}_{\text{A}_4}$} & \setwiretype{q} & & & \targ{} & \targ{} & & & & & & & \meter{} & \setwiretype{c} \\
& & & & & & & & & & & & \lstick{$\ket{0}_{\text{A}_5}$} & \setwiretype{q} & \targ{} & \targ{} & & & \meter{} & \setwiretype{c} \\
& & & & & & & & & & & & \lstick{$\ket{0}_{\text{A}_6}$} & \setwiretype{q} & & & \targ{} & \targ{} & \meter{} & \setwiretype{c}
% tex-fmt: on
\end{quantikz}
\caption{
Repeated syndrome extraction circuit for the three-qubit
repetition code under bit flip noise.
}
\label{fig:rep_code_multiple_rounds_bit_flip}
\end{figure}
\begin{figure}[H]
\begin{gather*}
\hspace*{-33.3mm}%
\begin{array}{c}
E_6 \\
\downarrow
\end{array}
\end{gather*}
\vspace*{-8mm}
\begin{gather*}
\bm{\Omega} =
\left(
\begin{array}{
cccccc%
>{\columncolor{red!20}}c%
cccccccc
}
1 & 1 & 0 & 1 & 0 & 0 & 0 & 0 & 0 & 0
& 0 & 0 & 0 & 0 & 0 \\
0 & 1 & 1 & 0 & 1 & 0 & 0 & 0 & 0 & 0
& 0 & 0 & 0 & 0 & 0 \\
1 & 1 & 0 & 0 & 0 & 1 & 1 & 0 & 1 & 0
& 0 & 0 & 0 & 0 & 0 \\
0 & 1 & 1 & 0 & 0 & 0 & 1 & 1 & 0 & 1
& 0 & 0 & 0 & 0 & 0 \\
1 & 1 & 0 & 0 & 0 & 1 & 1 & 0 & 0 & 0
& 1 & 1 & 0 & 1 & 0 \\
0 & 1 & 1 & 0 & 0 & 0 & 1 & 1 & 0 & 0
& 0 & 1 & 1 & 0 & 1
\end{array}
\right),
\hspace*{7mm}
\bm{s} \in \text{span} \mleft\{
\bm{\Omega} \mright\}
\end{gather*}
\vspace*{5mm}
\newcommand{\preperr}[1]{
\gate[style={fill=blue!20}]{\scriptstyle #1}
}
\newcommand{\measerr}{\gate[style={fill=blue!20}]{\phantom{1}}}
\newcommand{\noise}{
\gate[style={noisy}]{\text{\small X}}%
\setwiretype{n}%
\wire[l][1]{q}
}
\newcommand{\redwire}[1]{
\wire[r][#1][style={draw=red, line width=1.5pt}]{q}
}
\newcommand{\redtarg}{
\targ[style={draw=red}]{}%
\setwiretype{n}%
\wire[l][1]{q}
}
\newcommand{\redctrl}[1]{
\ctrl[style={draw=red,fill=red,line width=1.5pt}]{#1}
}
\newcommand{\redmeter}{\meter[style={draw=red,fill=red!20}]{}}
\tikzset{
noisy/.style={
starburst,
starburst point height=2.5mm,
fill=red!25, draw=red!85!black,
line width=1.5pt,
inner xsep=-2pt, inner ysep=-2pt
},
}
\centering
% tex-fmt: off
\begin{quantikz}[row sep=4mm, column sep=3mm, wire types={q,q,q,q,q,n,n,n,n}]
\lstick[3]{$\ket{\psi}_\text{L}$} & \preperr{E_0} & \ctrl{3} & & & & \preperr{E_5} & & \ctrl{5} & & & & \preperr{E_{10}} & & \ctrl{7} & & & & & & \\
& \preperr{E_1} & & \ctrl{2} & \ctrl{3} & & \noise\redwire{14} & & & \redctrl{4} & \redctrl{5} & & \preperr{E_{11}} & & & \redctrl{6} & \redctrl{7} & & & & \\
& \preperr{E_2} & & & & \ctrl{2} & \preperr{E_7} & & & & & \ctrl{4} & \preperr{E_{12}} & & & & & \ctrl{6} & & & \\
\lstick{$\ket{0}_{\text{A}_1}$} & & \targ{} & \targ{} & & & & & & & & & & & & & & & \preperr{E_3} & \meter{} & \setwiretype{c} \\
\lstick{$\ket{0}_{\text{A}_2}$} & & & & \targ{} & \targ{} & & & & & & & & & & & & & \preperr{E_4} & \meter{} & \setwiretype{c} \\
& & & & & & \lstick{$\ket{0}_{\text{A}_3}$} & \setwiretype{q} & \targ{} & \redtarg\redwire{10} & & & & & & & & & \preperr{E_8} & \redmeter\wire[r][1][style={draw=red,double, line width=1.5pt}]{q} & \setwiretype{n} \\
& & & & & & \lstick{$\ket{0}_{\text{A}_4}$} & \setwiretype{q} & & & \redtarg\redwire{9} & \targ{} & & & & & & & \preperr{E_9} & \redmeter\wire[r][1][style={draw=red,double, line width=1.5pt}]{q} & \setwiretype{n} \\
& & & & & & & & & & & & \lstick{$\ket{0}_{\text{A}_5}$} & \setwiretype{q} & \targ{} & \redtarg\redwire{4} & & & \preperr{E_{13}} & \redmeter\wire[r][1][style={draw=red,double, line width=1.5pt}]{q} & \setwiretype{n} \\
& & & & & & & & & & & & \lstick{$\ket{0}_{\text{A}_6}$} & \setwiretype{q} & & & \redtarg\redwire{3} & \targ{} & \preperr{E_{14}} & \redmeter\wire[r][1][style={draw=red,double, line width=1.5pt}]{q} & \setwiretype{n}
\end{quantikz}
% tex-fmt: on
\caption{
Repeated syndrome extraction circuit for the three-qubit
repetition code under phenomenological noise.
}
\end{figure}
%%%%%%%%%%%%%%%%
\subsection{Detector Error Matrix}
\label{subsec:Detector Error Matrix}
% Core idea
% TODO: Make this a proper definition?
Instead of using the measurements as parity indicators directly, we
may wish to combine them in some way.
We call such combinations \emph{detectors}.
Formally, a detector is a parity constraint on a set of measurement
outcomes \cite[Def.~2.1]{derks_designing_2025}.
\content{Detector matrix}
\content{Detector error matrix}
\content{One way of defining the detectors is ...}
\begin{figure}[H]
\centering
\tikzset{
gate/.style={
draw, %line width=1pt,
minimum height=2cm,
}
}
% tex-fmt: off
\begin{quantikz}[row sep=2mm, column sep=4mm, wire types={q,q,q,n,n,n}]
\lstick[3]{$\ket{\psi}_\text{L}$} & \gate[3]{\text{SE}_1} & & \gate[3]{\text{SE}_2} & & \gate[3]{\text{SE}_3} & & \gate[3]{\text{SE}_4} & \\
& & & & & & & & & \setwiretype{n} & \ldots \\
& \wire[d][3]{c} & & \wire[d][1]{c} & & \wire[d][1]{c} & & \wire[d][1]{c} & \\
& \ctrl[wire=c]{0}\wire[r][1]{c} & \wire[d][1]{c} & \ctrl[vertical wire=c]{1}\wire[r][1]{c} & \wire[d][1]{c} & \ctrl[vertical wire=c]{1}\wire[r][1]{c} & \wire[d][1]{c} & \ctrl[vertical wire=c]{1}\wire[r][1]{c} & \\
& & \wire[r][1]{c} & \targ{}\wire[d][1]{c} & \wire[r][1]{c} & \targ{}\wire[d][1]{c} & \wire[r][1]{c} & \targ{}\wire[d][1]{c} & \\
& \gate[1]{\bm{D}_1} & & \gate[1]{\bm{D}_2} & & \gate[1]{\bm{D}_3} & & \gate[1]{\bm{D}_4} & \\
\end{quantikz}
% tex-fmt: on
\caption{Construction of detectors from measurements in the general case.}
\end{figure}
\content{The three-qubit repetition code as an exmaple}
\begin{figure}[H]
\centering
\hspace*{-5mm}
\begin{minipage}{0.42\textwidth}
\newcommand{\redwire}[1]{
\wire[r][#1][style={draw=red, line width=1.5pt, double}]{q}
}
\newcommand{\inwire}{
\wire[l][1][style={draw=red, line width=1.5pt}]{q}
}
\newcommand{\redtarg}{
\targ[style={draw=red,line width=1.5pt}]{}%
\setwiretype{n}%
}
\newcommand{\redctrl}[1]{
\ctrl[style={draw=red,fill=red, line width=1.5pt}]{0}%
\wire[d][#1][style={draw=red, line width=1.5pt, double}]{q}
}
\newcommand{\redmeter}{\meter[style={draw=red,fill=red!20}]{}}
\newcommand{\redgate}[1]{\gate[style={draw=red,fill=red!20}]{\textcolor{red}{#1}}}
% tex-fmt: off
\begin{quantikz}[row sep=4mm, column sep=3mm, wire types={n,n,n,n,n,n}]
& \meter{}\wire[l][1]{q}\wire[r][1]{c} & \setwiretype{c} & & & \ctrl[vertical wire=c]{2} & & \gate{D_1} \\
& \meter{}\wire[l][1]{q}\wire[r][1]{c} & \setwiretype{c} & & & & \ctrl[vertical wire=c]{2} & \gate{D_2} \\
& \redmeter{}\inwire\redwire{6} & & \redctrl{2} & & \targ{} & & \redgate{D_3} \\
& \redmeter{}\inwire\redwire{6} & & & \redctrl{2} & & \targ{} & \redgate{D_4} \\
& \redmeter{}\inwire\redwire{2} & & \redtarg\wire[r][4]{c} & & & & \gate{D_5} \\
& \redmeter{}\inwire\redwire{3} & & & \redtarg\wire[r][3]{c} & & & \gate{D_6}
\end{quantikz}
% tex-fmt: on
\end{minipage}%
\begin{minipage}{0.56\textwidth}
\newcommand\cc{\cellcolor{orange!20}}
\begin{align*}
\bm{H} =
% tex-fmt: off
\left(\begin{array}{ccccccccccccccc}
1 & 1 & 0 & 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\
0 & 1 & 1 & 0 & 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\
\cc{0} & \cc{0} & \cc{0} & \cc{1} & \cc{0} & 1 & 1 & 0 & 1 & 0 & 0 & 0 & 0 & 0 & 0 \\
\cc{0} & \cc{0} & \cc{0} & \cc{0} & \cc{1} & 0 & 1 & 1 & 0 & 1 & 0 & 0 & 0 & 0 & 0 \\
\cc{0} & \cc{0} & \cc{0} & \cc{0} & \cc{0} & \cc{0} & \cc{0} & \cc{0} & \cc{1} & \cc{0} & 1 & 1 & 0 & 1 & 0 \\
\cc{0} & \cc{0} & \cc{0} & \cc{0} & \cc{0} & \cc{0} & \cc{0} & \cc{0} & \cc{0} & \cc{1} & 0 & 1 & 1 & 0 & 1
\end{array}\right)
% tex-fmt: on
\end{align*}
\end{minipage}
\caption{Construction of detectors from the measurements of a
three-qubit repetition code.}
\label{fig:Construction of the detectors from the measurements}
\end{figure}
%%%%%%%%%%%%%%%%
\subsection{Detector Error Models}
\label{subsec:Detector Error Models}
\content{Combination of detector error matrix and noise model}
\content{Contains all information necessary for decoding
\cite[Intro.]{derks_designing_2025}}
\content{Not only useful for decoding, but also for ... (Derks et al.)}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\section{Practical Considerations}
\label{sec:Practical Considerations}
% Intro
\content{Intro}
%%%%%%%%%%%%%%%%
\subsection{Practical Methodology}
\label{subsec:Practical Methodology}
\indent\red{[(?) Figure from presentation, showing where the LER
calculation takes place]} \\
\content{Per-round-LER explanation}
%%%%%%%%%%%%%%%%
\subsection{Stim}
\label{subsec:Stim}
\content{Circuit code heavily depends on the exact circuit construction}
\content{Not easy to predict how errors at different locations
propagate through the circuit an what detectors they affect}
\content{Stim is a software package that generates DEMs from circuits}
\content{The user still has to define the circuit themselves, and
especially the detectors \cite[Sec~2.5]{derks_designing_2025}}

View File

@@ -1,5 +1,489 @@
% TODO: Make all [H] -> [t]
\chapter{Decoding under Detector Error Models}
% Intro
\content{Intro}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\section{Sliding-Window Decoding}
\section{Treating Detector Error Matrices like SC-LDPC Codes}
\section{Soft-Information Aware Sliding-Window Decoding}
\section{Numerical Results and Analysis}
\label{sec:Sliding-Window Decoding}
% Intro
\content{Callback to previous chapter}
\content{(Maybe even historical) overview of the literature}
% High-level overview of Sliding-Window decoding
\content{Benefits of sliding-window decoding (lower latency due to
earlier decoding start)}
\content{Why it works (block diagonal structure $\rightarrow$ ``Done
with processing'' some VNs)}
% Detailed explanation of sliding-window decoding
\content{We look at rows not columns}
\content{Define W}
\content{Define F}
\content{Explain how we get the columns once we know the rows}
\content{\textbf{General note}: Mathematical definitions where possible}
% Syndrome update
\content{Explain commit region}
\content{Why we need to update the syndrome}
\content{How we update the syndrome}
\content{\textbf{General note}: Mathematical definitions where possible}
% Complete process
\content{1. Decode window}
\content{2. Commit VN estimates}
\content{3. Update syndrome}
\content{4. Decode next window}
\content{(?) Explicitly mention we don't reuse existing messages?}
\begin{figure}[H]
\centering
\hspace*{-114mm}%
\begin{tikzpicture}
\draw[decorate, decoration={brace, amplitude=10pt}, line width=1pt]
(0,0) -- (3.1,0) node[midway, above=4mm] {Commit region};
\end{tikzpicture}
\centering
\includegraphics[scale=0.75]{res/72_bb_dem.pdf}
\vspace*{-25.3mm}
\hspace*{-98mm}%
\begin{tikzpicture}
\draw[{Latex}-{Latex}, line width=.7pt] (0, -0.75mm) -- (0, 5mm);
\draw[line width=1pt] (-1mm,-0.75mm) -- (3mm,-0.75mm);
\draw[line width=1pt] (-1mm,5mm) -- (3mm,5mm);
\node[left] at (-2mm,2.125mm) {$\sim W$};
\draw[{Latex}-{Latex}, line width=.3pt] (6.5cm,1.6mm) -- (6.5cm,5mm);
\draw[line width=1pt] (6.5cm,4.9mm) -- (6.5cm,7mm);
\node[above] at (6.5cm,7mm) {$\sim F$};
\end{tikzpicture}
\vspace*{10mm}
\caption{
Visualization of the windowing process on the detector
error matrix.
}
\label{fig:windowing_pcm}
\end{figure}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\section{Warm-Start Sliding-Window Decoding}
\label{sec:warm_start_bp}
% Intro
\content{Change view from PCM to Tanner graph}
\content{Call attention to SC-LDPC-like structure}
\content{High-level overview of modification}
% Warm-Start decoding for BP
\content{Pass messages to next window}
\content{(?) Explicitly mention initialization using only CN->VN
messages + swapping of CN and VN update?}
\content{(?) Algorithm}
% Warm-Start decoding for BPGD
\content{Modified structure of BPGD $\rightarrow$ In addition to
messages, pass decimation info}
\content{(?) Explicitly mention decimation info = channel llrs?}
\content{(?) Algorithm}
\begin{figure}[H]
\centering
\tikzset{
VN/.style={
circle, fill=KITgreen, minimum width=1mm, minimum height=1mm,
},
CN/.style={
rectangle, fill=KITblue, minimum width=1mm, minimum height=1mm,
},
}
\begin{tikzpicture}[node distance = 5mm]
\node[VN] (vn00) {};
\node[VN, below = of vn00] (vn01) {};
\node[VN, below = of vn01] (vn02) {};
\node[VN, below = of vn02] (vn03) {};
\node[VN, below = of vn03] (vn04) {};
\coordinate (temp) at ($(vn01)!0.5!(vn02)$);
\node[CN, left =10mm of temp] (cn00) {};
\node[CN, below = of cn00] (cn01) {};
\draw (vn00) -- (cn00);
\draw (vn01) -- (cn00);
\draw (vn03) -- (cn00);
\draw (vn01) -- (cn01);
\draw (vn02) -- (cn01);
\draw (vn04) -- (cn01);
\foreach \i in {1,2,3,4} {
\pgfmathtruncatemacro{\prev}{\i-1}
\node[VN, right = 25mm of vn\prev 0] (vn\i0) {};
\node[VN, below = of vn\i0] (vn\i1) {};
\node[VN, below = of vn\i1] (vn\i2) {};
\node[VN, below = of vn\i2] (vn\i3) {};
\node[VN, below = of vn\i3] (vn\i4) {};
\coordinate (temp) at ($(vn\i1)!0.5!(vn\i2)$);
\node[CN, left = 10mm of temp] (cn\i0) {};
\node[CN, below = of cn\i0] (cn\i1) {};
\draw (vn\i0) -- (cn\i0);
\draw (vn\i1) -- (cn\i0);
\draw (vn\i3) -- (cn\i0);
\draw (vn\i1) -- (cn\i1);
\draw (vn\i2) -- (cn\i1);
\draw (vn\i4) -- (cn\i1);
}
\foreach \i in {1,2,3,4} {
\pgfmathtruncatemacro{\prev}{\i-1}
\draw (vn\prev 3) -- (cn\i 0);
\draw (vn\prev 4) -- (cn\i 1);
}
\node[
draw, inner sep=5mm,line width=1pt,
fit=(vn00)(vn04)(cn00)(cn01)(vn20)(vn24)(cn20)(cn21)
]
(box1) {};
\node[
draw, dashed, inner sep=5mm, inner ysep=8mm,line width=1pt,
fit=(vn10)(vn14)(cn10)(cn11)(vn30)(vn34)(cn30)(cn31)
]
(box2) {};
% Marker for W on the bottom
\draw[line width=1pt]
([yshift=-5mm, line width=1pt]box1.south west) -- ++(0,-4mm)
coordinate (dim1l);
\draw[line width=1pt]
([yshift=-5mm]box1.south east) -- ++(0,-4mm)
coordinate (dim1r);
\draw[{Latex}-{Latex}, line width=1pt]
([yshift=1mm]dim1l) -- ([yshift=1mm]dim1r)
node[midway, below=2pt] {$W$};
% Marker for F on top
\draw[line width=1pt]
([yshift=3mm]box2.north west) -- ++(0,4mm)
coordinate (dim3l);
\draw[line width=1pt]
([yshift=3mm]box2.north west -| box1.north west) -- ++(0,4mm)
coordinate (dim3r);
\draw[{Latex}-{Latex}, line width=1pt]
([yshift=-1mm]dim3l) -- ([yshift=-1mm]dim3r)
node[midway, above=2pt] {$F$};
% Arrow on the top right
\draw[-{Latex}, line width=1pt]
([yshift=8mm] box1.north east) -- ++(28mm,0);
\end{tikzpicture}
\caption{Visualization of the windowing process on the Tanner graph.}
\label{fig:windowing_tanner}
\end{figure}
\begin{figure}[H]
\centering
\tikzset{
VN/.style={
circle, fill=KITgreen, minimum width=1mm, minimum height=1mm,
},
CN/.style={
rectangle, fill=KITblue, minimum width=1mm, minimum height=1mm,
},
}
\begin{tikzpicture}[node distance = 5mm]
\node[VN] (vn00) {};
\node[VN, below = of vn00] (vn01) {};
\node[VN, below = of vn01] (vn02) {};
\node[VN, below = of vn02] (vn03) {};
\node[VN, below = of vn03] (vn04) {};
\coordinate (temp) at ($(vn01)!0.5!(vn02)$);
\node[CN, left =10mm of temp] (cn00) {};
\node[CN, below = of cn00] (cn01) {};
\draw (vn00) -- (cn00);
\draw (vn01) -- (cn00);
\draw (vn03) -- (cn00);
\draw (vn01) -- (cn01);
\draw (vn02) -- (cn01);
\draw (vn04) -- (cn01);
\foreach \i in {1,2,3,4} {
\pgfmathtruncatemacro{\prev}{\i-1}
\node[VN, right = 25mm of vn\prev 0] (vn\i0) {};
\node[VN, below = of vn\i0] (vn\i1) {};
\node[VN, below = of vn\i1] (vn\i2) {};
\node[VN, below = of vn\i2] (vn\i3) {};
\node[VN, below = of vn\i3] (vn\i4) {};
\coordinate (temp) at ($(vn\i1)!0.5!(vn\i2)$);
\node[CN, left = 10mm of temp] (cn\i0) {};
\node[CN, below = of cn\i0] (cn\i1) {};
\draw (vn\i0) -- (cn\i0);
\draw (vn\i1) -- (cn\i0);
\draw (vn\i3) -- (cn\i0);
\draw (vn\i1) -- (cn\i1);
\draw (vn\i2) -- (cn\i1);
\draw (vn\i4) -- (cn\i1);
}
\foreach \i in {1,2,3,4} {
\pgfmathtruncatemacro{\prev}{\i-1}
\draw (vn\prev 3) -- (cn\i 0);
\draw (vn\prev 4) -- (cn\i 1);
}
\node[
draw, inner sep=5mm,line width=1pt,
fit=(vn00)(vn04)(cn00)(cn01)(vn20)(vn24)(cn20)(cn21)
]
(box1) {};
\node[
draw, dashed, inner sep=5mm, inner ysep=8mm,line width=1pt,
fit=(vn10)(vn14)(cn10)(cn11)(vn30)(vn34)(cn30)(cn31)
]
(box2) {};
\draw[KITorange, line width=2pt] (cn10) -- (vn10);
\draw[KITorange, line width=2pt] (cn10) -- (vn11);
\draw[KITorange, line width=2pt] (cn10) -- (vn13);
\draw[KITorange, line width=2pt] (cn11) -- (vn11);
\draw[KITorange, line width=2pt] (cn11) -- (vn12);
\draw[KITorange, line width=2pt] (cn11) -- (vn14);
\draw[KITorange, line width=2pt] (vn13) -- (cn20);
\draw[KITorange, line width=2pt] (vn14) -- (cn21);
\draw[KITorange, line width=2pt] (cn20) -- (vn20);
\draw[KITorange, line width=2pt] (cn20) -- (vn21);
\draw[KITorange, line width=2pt] (cn20) -- (vn23);
\draw[KITorange, line width=2pt] (cn21) -- (vn21);
\draw[KITorange, line width=2pt] (cn21) -- (vn22);
\draw[KITorange, line width=2pt] (cn21) -- (vn24);
% Marker for W on the bottom
\draw[line width=1pt]
([yshift=-5mm, line width=1pt]box1.south west) -- ++(0,-4mm)
coordinate (dim1l);
\draw[line width=1pt]
([yshift=-5mm]box1.south east) -- ++(0,-4mm)
coordinate (dim1r);
\draw[{Latex}-{Latex}, line width=1pt]
([yshift=1mm]dim1l) -- ([yshift=1mm]dim1r)
node[midway, below=2pt] {$W$};
% Marker for F on top
\draw[line width=1pt]
([yshift=3mm]box2.north west) -- ++(0,4mm)
coordinate (dim3l);
\draw[line width=1pt]
([yshift=3mm]box2.north west -| box1.north west) -- ++(0,4mm)
coordinate (dim3r);
\draw[{Latex}-{Latex}, line width=1pt]
([yshift=-1mm]dim3l) -- ([yshift=-1mm]dim3r)
node[midway, above=2pt] {$F$};
% Arrow on the top right
\draw[-{Latex}, line width=1pt]
([yshift=8mm] box1.north east) -- ++(28mm,0);
\end{tikzpicture}
\caption{
Visualization of the messages used for the
initialization of the next window.
}
\label{fig:messages_tanner}
\end{figure}
\begin{figure}[H]
\centering
\tikzset{
VN/.style={
circle, fill=KITgreen, minimum width=1mm, minimum height=1mm,
},
CN/.style={
rectangle, fill=KITblue, minimum width=1mm, minimum height=1mm,
},
}
\begin{tikzpicture}[node distance = 5mm]
\node[VN] (vn00) {};
\node[VN, below = of vn00] (vn01) {};
\node[VN, below = of vn01] (vn02) {};
\node[VN, below = of vn02] (vn03) {};
\node[VN, below = of vn03] (vn04) {};
\coordinate (temp) at ($(vn01)!0.5!(vn02)$);
\node[CN, left =10mm of temp] (cn00) {};
\node[CN, below = of cn00] (cn01) {};
\draw (vn00) -- (cn00);
\draw (vn01) -- (cn00);
\draw (vn03) -- (cn00);
\draw (vn01) -- (cn01);
\draw (vn02) -- (cn01);
\draw (vn04) -- (cn01);
\foreach \i in {1,2,3,4} {
\pgfmathtruncatemacro{\prev}{\i-1}
\node[VN, right = 25mm of vn\prev 0] (vn\i0) {};
\node[VN, below = of vn\i0] (vn\i1) {};
\node[VN, below = of vn\i1] (vn\i2) {};
\node[VN, below = of vn\i2] (vn\i3) {};
\node[VN, below = of vn\i3] (vn\i4) {};
\coordinate (temp) at ($(vn\i1)!0.5!(vn\i2)$);
\node[CN, left = 10mm of temp] (cn\i0) {};
\node[CN, below = of cn\i0] (cn\i1) {};
\draw (vn\i0) -- (cn\i0);
\draw (vn\i1) -- (cn\i0);
\draw (vn\i3) -- (cn\i0);
\draw (vn\i1) -- (cn\i1);
\draw (vn\i2) -- (cn\i1);
\draw (vn\i4) -- (cn\i1);
}
\foreach \i in {1,2,3,4} {
\pgfmathtruncatemacro{\prev}{\i-1}
\draw (vn\prev 3) -- (cn\i 0);
\draw (vn\prev 4) -- (cn\i 1);
}
\node[
draw, inner sep=5mm,line width=1pt,
fit=(vn00)(vn04)(cn00)(cn01)(vn20)(vn24)(cn20)(cn21)
]
(box1) {};
\node[
draw, dashed, inner sep=5mm, inner ysep=8mm,line width=1pt,
fit=(vn10)(vn14)(cn10)(cn11)(vn30)(vn34)(cn30)(cn31)
]
(box2) {};
\draw[KITorange, line width=2pt] (cn10) -- (vn10);
\draw[KITorange, line width=2pt] (cn10) -- (vn11);
\draw[KITorange, line width=2pt] (cn10) -- (vn13);
\draw[KITorange, line width=2pt] (cn11) -- (vn11);
\draw[KITorange, line width=2pt] (cn11) -- (vn12);
\draw[KITorange, line width=2pt] (cn11) -- (vn14);
\draw[KITorange, line width=2pt] (vn13) -- (cn20);
\draw[KITorange, line width=2pt] (vn14) -- (cn21);
\draw[KITorange, line width=2pt] (cn20) -- (vn20);
\draw[KITorange, line width=2pt] (cn20) -- (vn21);
\draw[KITorange, line width=2pt] (cn20) -- (vn23);
\draw[KITorange, line width=2pt] (cn21) -- (vn21);
\draw[KITorange, line width=2pt] (cn21) -- (vn22);
\draw[KITorange, line width=2pt] (cn21) -- (vn24);
\node[VN, draw=KITorange, fill=KITorange] at (vn10) {};
\node[VN, draw=KITorange, fill=KITorange] at (vn11) {};
\node[VN, draw=KITorange, fill=KITorange] at (vn12) {};
\node[VN, draw=KITorange, fill=KITorange] at (vn13) {};
\node[VN, draw=KITorange, fill=KITorange] at (vn14) {};
\node[VN, draw=KITorange, fill=KITorange] at (vn20) {};
\node[VN, draw=KITorange, fill=KITorange] at (vn21) {};
\node[VN, draw=KITorange, fill=KITorange] at (vn22) {};
\node[VN, draw=KITorange, fill=KITorange] at (vn23) {};
\node[VN, draw=KITorange, fill=KITorange] at (vn24) {};
% Marker for W on the bottom
\draw[line width=1pt]
([yshift=-5mm, line width=1pt]box1.south west) -- ++(0,-4mm)
coordinate (dim1l);
\draw[line width=1pt]
([yshift=-5mm]box1.south east) -- ++(0,-4mm)
coordinate (dim1r);
\draw[{Latex}-{Latex}, line width=1pt]
([yshift=1mm]dim1l) -- ([yshift=1mm]dim1r)
node[midway, below=2pt] {$W$};
% Marker for F on top
\draw[line width=1pt]
([yshift=3mm]box2.north west) -- ++(0,4mm)
coordinate (dim3l);
\draw[line width=1pt]
([yshift=3mm]box2.north west -| box1.north west) -- ++(0,4mm)
coordinate (dim3r);
\draw[{Latex}-{Latex}, line width=1pt]
([yshift=-1mm]dim3l) -- ([yshift=-1mm]dim3r)
node[midway, above=2pt] {$F$};
% Arrow on the top right
\draw[-{Latex}, line width=1pt]
([yshift=8mm] box1.north east) -- ++(28mm,0);
\end{tikzpicture}
\caption{
Visualization of the messages and decimation information used for the
initialization of the next window.
}
\label{fig:messages_decimation_tanner}
\end{figure}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\section{Numerical results}
\label{sec:warm_start_bpgd}
% Intro
\content{Some info on used code (what it is, why it was chosen)}
\content{Some info on simulation setup (Stim, circuit-level noise,
standard circuit-based depolarizing noise model, etc.)}
\content{All datapoints generated with at least 100 error frames}
%%%%%%%%%%%%%%%%
\subsection{Belief Propagation}
\label{subsec:Belief Propagation}
% Simulation setup
\content{Use min-sum}
%%%%%%%%%%%%%%%%
\subsection{Belief Propagation with Guided Decimation}
\label{subsec:Belief Propagation with Guided Decimation}
% Results when passing all info
% Results when passing only messages

View File

@@ -0,0 +1,2 @@
sed -i "s/Świerkowska/{\\\\'S}wierkowska/" bibliography.bib
sed -Ezi "s/\s(abstract|note|urldate|url|keywords|file) = \{[^}]*(\{[^}]*\}[^}]*)*\},?\n//g" bibliography.bib

View File

@@ -6,27 +6,37 @@
\usepackage{amsfonts}
\usepackage{mleftright}
\usepackage{bm}
\usepackage{bbm}
\usepackage{tikz}
\usepackage{xcolor}
\usepackage{pgfplots}
\pgfplotsset{compat=newest}
\usepackage{acro}
\usepackage{braket}
\usepackage{listings}
\usepackage{caption}
% \usepackage[
% backend=biber,
% style=ieee,
% sorting=nty,
% ]{biblatex}
\usepackage{todonotes}
% \usepackage{todonotes}
\usepackage{quantikz}
\usepackage{stmaryrd}
\usepackage{algorithm}
\usepackage[noEnd=false]{algpseudocodex}
\usepackage{nicematrix}
\usepackage{colortbl}
\usetikzlibrary{calc, positioning, arrows, fit}
\usetikzlibrary{external}
\tikzexternalize
\makeatletter
\renewcommand{\todo}[2][]{\tikzexternaldisable\@todo[#1]{#2}\tikzexternalenable}
\makeatother
% \makeatletter
% \renewcommand{\todo}[2][]{\tikzexternaldisable\@todo[#1]{#2}\tikzexternalenable}
% \makeatother
\setcounter{MaxMatrixCols}{20}
%
%
@@ -35,6 +45,8 @@
%
\newcommand{\red}[1]{\textcolor{red}{#1}}
\newcommand{\content}[1]{\noindent\indent\red{[#1]}\\}
\newcommand{\figwidth}{10cm}
\newcommand{\figheight}{7.5cm}