22 Commits

Author SHA1 Message Date
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 1416 additions and 833 deletions

View File

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

View File

@@ -8,6 +8,11 @@
long=belief propagation long=belief propagation
} }
\DeclareAcronym{bpgd}{
short=BPGD,
long=belief propagation with guided decimation
}
\DeclareAcronym{nms}{ \DeclareAcronym{nms}{
short=NMS, short=NMS,
long=normalized min-sum long=normalized min-sum
@@ -18,6 +23,11 @@
long=sum-product algorithm long=sum-product algorithm
} }
\DeclareAcronym{css}{
short=CSS,
long=Calderbank-Shor-Steane
}
\DeclareAcronym{llr}{ \DeclareAcronym{llr}{
short=LLR, short=LLR,
long=log-likelihood ratio long=log-likelihood ratio
@@ -33,6 +43,11 @@
long=low-density parity-check long=low-density parity-check
} }
\DeclareAcronym{qldpc}{
short=QLDPC,
long=quantum low-density parity-check
}
\DeclareAcronym{ml}{ \DeclareAcronym{ml}{
short=ML, short=ML,
long=maximum likelihood long=maximum likelihood
@@ -77,3 +92,8 @@
short=PDF, short=PDF,
long=probability density function 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} \label{ch:Fundamentals}
\Ac{qec} is a field of research combining ``classical'' \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 This chapter provides the relevant theoretical background on both of
these topics and subsequently introduces the fundamentals of \ac{qec}. 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} \section{Classical Error Correction}
\label{sec: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}. \ac{sc}-\ac{ldpc} codes in the waterfall region \cite{costello_spatially_2014}.
\subsection{Iterative Decoding} \subsection{Iterative Decoding}
\label{subsec:Iterative Decoding}
% Introduction % 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 In quantum mechanics, the state of a particle is described by a
\emph{wave function} $\psi(x,t)$. \emph{wave function} $\psi(x,t)$.
The connection between this function and the observable world Born's statistical interpretation provides a connection between this
is Born's statistical interpretation: function and the observable world:
$\lvert \psi (x,t) \rvert^2$ is the \ac{pdf} of finding a praticle at $\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}. 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 % 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. 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 having been proposed by Paul Dirac in 1939 for the express purpose
of simplifying quantum mechanical notation \cite{dirac_new_1939}. of simplifying quantum mechanical notation \cite{dirac_new_1939}.
Two new symbols are defined, \emph{bra}s $\bra{\cdot}$ and Two new symbols are defined, \emph{bra}s $\bra{\cdot}$ and
\emph{ket}s $\ket{\cdot}$. \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$ For example, two vectors specified by the labels $a$ and $b$
respectively are written as $\ket{a}$ and $\ket{b}$. respectively are written as $\ket{a}$ and $\ket{b}$.
Their inner product is $\braket{a\vert 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 The connection we will make between quantum mechanics and linear
algebra is that we will model the state space of a system as a 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 We will represent the state of a particle with wave function
$\psi(x,t)$ using the vector $\ket{\psi}$ $\psi(x,t)$ using the vector $\ket{\psi}$
\cite[Sec.~3.3]{griffiths_introduction_1995}. \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 Operators are useful to describe the relations between different
quantities relating to a particle. quantities relating to a particle.
An example of this is the differential operator $\partial x$. 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} \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 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. compute the expected value $\braket{Q}$ of any observable quantity we wish.
It can be shown that for any $Q$, we can compute a It can be shown that for any $Q$, we can find a
corresponding operator $\hat{Q}$ such that corresponding Hermitian operator $\hat{Q}$ such that
\cite[Sec.~3.3]{griffiths_introduction_1995} \cite[Sec.~3.3]{griffiths_introduction_1995}
\begin{align} \begin{align}
\label{eq:gen_expr_Q_exp} \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 Let us now examine how the observable operator $\hat{Q}$ relates to
the determinate states of the observable quantity. 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} \cite[Eq.~3.114]{griffiths_introduction_1995}
\begin{align} \begin{align}
\label{eq:gen_expr_Q_exp_lin} \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} \end{align}
\autoref{eq:gen_expr_Q_exp_lin} expresses an inherently probabilistic \autoref{eq:gen_expr_Q_exp_lin} expresses an inherently probabilistic
relationhip. relationship.
The determinate states are inherently deterministic. The determinate states are inherently deterministic.
To relate the two, we note that since determinate states should To relate the two, we note that since determinate states should
always yield the same measurement results, the variance of the 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} c_n := \braket{e_n \vert \psi}
.% .%
\end{align} \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 Inserting \autoref{eq:determinate_basis} into
\autoref{eq:gen_expr_Q_exp_lin} we obtain \autoref{eq:gen_expr_Q_exp_lin} we obtain
% tex-fmt: off % 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 \ket{e_n}$, where $\lvert c_n \rvert ^2$ represents the probability
of obtaining a certain measurement value. of obtaining a certain measurement value.
Note that when we speak of an \emph{observable}, we are usually 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} \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} \subsection{Qubits and Multi-Qubit States}
\label{subsec:Qubits and Multi-Qubit States} \label{subsec:Qubits and Multi-Qubit States}
% The qubit % Intro
% TODO: Make sure `quantum gate` is proper terminology % TODO: Make sure `quantum gate` is proper terminology
A central concept for quantum computing is that of the \emph{qubit}. 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, We can chain multiple of these gates together to build up more complex logic,
such as half-adders or eventually a full processor. such as half-adders or eventually a full processor.
In principle, quantum computers work in a similar fashion, only that 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}. 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}$. % Qubits and multi-qubit states
The general description of the state $\ket{\psi}$ of a qubit is thus
\begin{align} We fix an orthonormal basis of $\mathbb{C}^2$ to be
\label{eq:gen_qubit_state} \begin{align*}
\ket{\psi} = \alpha\ket{0} + \beta\ket{1}, \hspace{5mm} \alpha, \ket{0} =
\beta \in \mathbb{C} \begin{pmatrix}
1 \\
0
\end{pmatrix}, \hspace{5mm}
\ket{1} =
\begin{pmatrix}
0 \\
1
\end{pmatrix}
.% .%
\end{align} \end{align*}
A qubit is defined to be a system with quantum state
% The tensor product and multi-qubit states \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 overall state of a composite quantum system is described using
the \emph{tensor product}, denoted as $\otimes$ the \emph{tensor product}, denoted as $\otimes$
\cite[Sec.~2.2.8]{nielsen_quantum_2010}. \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} \ket{\psi_2} = \alpha_2 \ket{0} + \beta_2 \ket{1}
.% .%
\end{align*} \end{align*}
% TODO: Fix the fact that \psi is used above for the single-qubit We examine the state $\ket{\psi}$ of the composite system.
% case and below for the multi-qubit case
We examine the state $\ket{\psi}$ of the composite system as.
Assuming the qubits are independent, this is a \emph{product state} Assuming the qubits are independent, this is a \emph{product state}
$\ket{\psi} = \ket{\psi_1}\otimes\ket{\psi_2}$. $\ket{\psi} = \ket{\psi_1}\otimes\ket{\psi_2}$.
When not ambiguous, we may omit the tensor product symbol or even write When not ambiguous, we may omit the tensor product symbol or even write
@@ -893,6 +921,12 @@ We have
\end{align} \end{align}
We call $\ket{x_0, \ldots, x_n}~, x_i \in \{0,1\}$ the 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}. \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 % Entanglement
@@ -902,9 +936,9 @@ An example of such states are the \emph{Bell states}
\begin{align*} \begin{align*}
\begin{split} \begin{split}
\ket{\psi_{00}} &= \frac{\ket{00} + \ket{11}}{\sqrt{2}} \hspace{15mm} \ket{\psi_{00}} &= \frac{\ket{00} + \ket{11}}{\sqrt{2}} \hspace{15mm}
\ket{\psi_{01}} = \frac{\ket{01} - \ket{10}}{\sqrt{2}} \\ \ket{\psi_{01}} = \frac{\ket{01} + \ket{10}}{\sqrt{2}} \\
\ket{\psi_{10}} &= \frac{\ket{00} + \ket{11}}{\sqrt{2}} \hspace{15mm} \ket{\psi_{10}} &= \frac{\ket{01} - \ket{10}}{\sqrt{2}} \hspace{15mm}
\ket{\psi_{11}} = \frac{\ket{01} - \ket{10}}{\sqrt{2}} \ket{\psi_{11}} = \frac{\ket{00} - \ket{11}}{\sqrt{2}}
\end{split} \end{split}
\hspace{4mm}.% \hspace{4mm}.%
\end{align*} \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 now shift our focus to describing the evolution of their states.
We model state changes as operators. We model state changes as operators.
Unlike classical systems, where there are only two possible states and 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. 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. 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} \emph{Pauli operators} \cite[Sec.~2.2]{gottesman_stabilizer_1997}
\cite[Sec.~2.2]{roffe_quantum_2019} \cite[Sec.~2.2]{roffe_quantum_2019}
\begin{align*} \begin{align*}
@@ -957,23 +991,31 @@ Luckily, we can express any operator as a linear combination of the
\begin{array}{c} \begin{array}{c}
Z\text{ Operator} \\ Z\text{ Operator} \\
\hline\\ \hline\\
\ket{0} \mapsto -\ket{0} \\ \ket{0} \mapsto \phantom{-}\ket{0} \\
\ket{1} \mapsto -\ket{1} \ket{1} \mapsto -\ket{1}
\end{array}% \end{array}%
\hspace{10mm}% \hspace{10mm}%
\begin{array}{c} \begin{array}{c}
Y\text{ Operator} \\ Y\text{ Operator} \\
\hline\\ \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}. \hspace{2.75mm}\ket{1} \mapsto -j\ket{0} \hspace*{1mm}.
\end{array} \end{array}
\end{align*} \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 $I$ is the identity operator and $X$ and $Z$ are referred to as
\emph{bit-flips} and \emph{phase-flips} respectively. \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 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$. to individual qubits independently, which we write, e.g., as $I_1 X_2
We often omit the identity operators, instead writing $X_2 Z_4 Y_5$. 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 Other important operators include the \emph{Hadamard} and
\emph{controlled-NOT (CNOT)} gates \cite[Sec.~1.3]{nielsen_quantum_2010} \emph{controlled-NOT (CNOT)} gates \cite[Sec.~1.3]{nielsen_quantum_2010}
\vspace*{-7mm} \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 \noindent Many more operators relevant to quantum computing exist, but they are
not covered here as they are not central to this work. 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} \subsection{Quantum Circuits}
\label{Quantum Circuits} \label{Quantum Circuits}
\noindent\indent\red{[Controlled operations] % Intro
\cite[Sec.~4.3]{nielsen_quantum_2010}} \\
\indent\red{[In case this reference is needed: Measurements Using these quantum gates, we can construct \emph{circuits} to manipulate
\cite[Sec.~4.4]{nielsen_quantum_2010}]} \\ the states of qubits \cite[Sec.~1.3.4]{nielsen_quantum_2010}.
\indent\red{[General circuit stuff] \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} \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 One of the major barriers on the road to building a functioning
quantum computer is the inevitability of errors during quantum 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}. qubits from external noise \cite[Intro.]{roffe_quantum_2019}.
This isolation is critical for quantum systems, as the constant interactions This isolation is critical for quantum systems, as the constant interactions
with the environment act as small measurements, leading to the with the environment act as small measurements, an effect called
eventual \emph{decoherence} of the quantum state \emph{decoherence} of the quantum state
\cite[Intro.]{gottesman_stabilizer_1997}. \cite[Intro.]{gottesman_stabilizer_1997}.
\ac{qec} is one approach of dealing with this problem, by protecting \ac{qec} is one approach of dealing with this problem, by protecting
the quantum state in a similar fashion to information in classical error the quantum state in a similar fashion to information in classical error
@@ -1047,12 +1120,12 @@ correction.
% The unique challenges of QEC % The unique challenges of QEC
The problem setting of \ac{qec} differs slightly from the classical case, as The problem setting of \ac{qec} differs slightly from the classical case.
three main restrictions apply \cite[Sec.~2.4]{roffe_quantum_2019}: Three main restrictions apply \cite[Sec.~2.4]{roffe_quantum_2019}:
\begin{itemize} \begin{itemize}
\item The no-cloning theorem states that it is \item The no-cloning theorem states that it is
impossible to exactly copy the state of one qubit into another. 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 just bit-flips, as we saw in
\autoref{subsec:Qubits and Multi-Qubit States}. \autoref{subsec:Qubits and Multi-Qubit States}.
\item Directly measuring the state of a qubit collapses it onto \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 % General idea (logical vs. physical gates) + notation
Much like in classical error correction, in \ac{qec} information 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. thereby introducing redundancy.
To this end, $k \in \mathbb{N}$ \emph{logical qubits} are mapped onto To this end, $k \in \mathbb{N}$ \emph{logical qubits} are mapped onto
$n \in \mathbb{N},~n>k$ \emph{physical qubits}. $n \in \mathbb{N}$ \emph{physical qubits}, $n>k$.
We circumvent the no-cloning restriction by not copying the state of We circumvent the no-cloning restriction by not copying the state of any of
the $k$ logical qubits, instead spreading it out over all $n$ the $k$ logical qubits, instead spreading the total state out over all $n$
physical ones \cite[Intro.]{calderbank_good_1996} physical qubits \cite[Intro.]{calderbank_good_1996}.
To differentiate a quantum codes from classical ones, we denote a To differentiate quantum codes from classical ones, we denote a
code with parameters $k,n$ and minimum distance $d_\text{min}$ using 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} \subsection{Stabilizer Measurements}
@@ -1092,8 +1181,8 @@ Consider the two-qubit repetition code
\underbrace{\ket{11}}_{=:\ket{1}_\text{L}} \underbrace{\ket{11}}_{=:\ket{1}_\text{L}}
.% .%
\end{align*} \end{align*}
We call $\ket{\psi}_L$ the logical state. We call $\ket{\psi}_L$ the logical state, and
We define the \emph{codespace} as $\mathcal{C} := \text{span}\mleft\{ we define the \emph{codespace} as $\mathcal{C} := \text{span}\mleft\{
\ket{00}, \ket{11} \mright\}$ and the \emph{error subspace} as \ket{00}, \ket{11} \mright\}$ and the \emph{error subspace} as
$\mathcal{F} := \text{span} \mleft\{\ket{01}, \ket{10} \mright\}$. $\mathcal{F} := \text{span} \mleft\{\ket{01}, \ket{10} \mright\}$.
Note that this code is only able to detect single $X$-type errors. 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 % non-compromising meausrement of the information
To do this without directly observing (and thus potentially To do this without directly observing (and thus potentially
collapsing) the logical state $\ket{\psi}_\text{L}$, we prepare an 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 $\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 More specifically, using a stabilizer measurement circuit as shown in
\autoref{fig:stabilizer_measurement}, we transform the state of the \autoref{fig:stabilizer_measurement}, we transform the state of the
three-qubit system as three-qubit system as
@@ -1158,62 +1247,13 @@ the ancilla qubit. Similarly, if $E \ket{\psi}_\text{L} \in
\begin{figure}[t] \begin{figure}[t]
\centering \centering
\tikzset{ % tex-fmt: off
meter/.append style={ \begin{quantikz}
draw, rectangle, \lstick[2]{$E\ket{\psi}_\text{L}$} & & \gate[2]{Z_1Z_2} & & & \\
font=\vphantom{A}, minimum width=8mm, minimum height=8mm, & & & & & \\
path picture={ \lstick{$\ket{0}_\text{A}$} & \gate{H} & \ctrl{-1} & \gate{H} & \meter{} & \setwiretype{c} \\
\draw[black] \end{quantikz}
([shift={(.1,.3)}]path picture bounding box.south west) % tex-fmt: on
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}
\caption{Stabilizer measurement circuit for the two-qubit repetition code.} \caption{Stabilizer measurement circuit for the two-qubit repetition code.}
\label{fig:stabilizer_measurement} \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}$. \ket{\psi}_\text{L}$ that lie in $\mathcal{F}$.
This process, together with the fact that any coherent error can be This process, together with the fact that any coherent error can be
decomposed into a linear combination of $X$ and $Z$ errors, means 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} This effect is referred to as error \emph{digitization}
\cite[Sec.~2.2]{roffe_quantum_2019}. \cite[Sec.~2.2]{roffe_quantum_2019}.
% The stabilizer group % The stabilizer group
Operators such as $Z_1Z_2$ above are called \emph{stabilizers}. 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 $[[n, k, d_\text{min}]]$ code $\mathcal{C}$, if
\begin{itemize} \begin{itemize}
\item It stabilizes all logical states, i.e., \item It stabilizes all logical states, i.e.,
$P_i\ket{\psi}_\text{L} = (+1)\ket{\psi}_\text{L} ~\forall~ $P_i\ket{\psi}_\text{L} = (+1)\ket{\psi}_\text{L} ~\forall~
\ket{\psi}_\text{L} \in \mathcal{C}$. \ket{\psi}_\text{L} \in \mathcal{C}$.
\item It commutes with all other stabilizers of the code. This \item It commutes with all other stabilizers $P_j$ of the code,
property is important to be able to measure the eigenvalue of i.e., $[P_i, P_j] = 0$.
a stabilizer without disturbing the eigenvectors of the This property is important to be able to measure the
others \cite[Sec.~1.2]{gottesman_stabilizer_1997}. eigenvalue of a stabilizer without disturbing the
eigenvectors of the others \cite[Sec.~1.2]{gottesman_stabilizer_1997}.
\end{itemize} \end{itemize}
Formally, we define the \emph{stabilizer group} $\mathcal{S}$ as Formally, we define the \emph{stabilizer group} $\mathcal{S}$ as
\cite[Sec.~4.1]{roffe_quantum_2019} \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 For classical binary linear block codes, we use $n-k$ parity-checks
to reduce the degrees of freedom introduced by the encoding operation. to reduce the degrees of freedom introduced by the encoding operation.
Effectively, each parity-check defines a local code, splitting the Effectively, each parity-check defines a local code splitting the
vector space in half, with only one half containing valid codewords. vector space in half, with only one part containing valid codewords.
The global code is the intersection of all local codes. The global code is the intersection of all local codes.
We can do the same in the quantum case. 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. 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. 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}. 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 Similar to the classical case, we can use a syndrome vector to
describe which local codes are violated. describe which local codes are violated.
To obtain the syndrome, we simply measure the corresponding 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}. \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? % Logical operators
\indent\red{[Fixing the error after finding it
\cite[Sec.~10.5.5]{nielsen_quantum_2010}]} \\ In order to modify the logical state encoded using the physical
\indent\red{[Logical operators \cite[Sec.~4.2]{roffe_quantum_2019}]} \\ qubits, we can use \emph{logical operators} \cite[Sec.~4.2]{roffe_quantum_2019}.
\indent\red{[Measuring logical operators gives yields the outcomes of For each qubit, there are two logical operators, $X_i$ and $Z_j$.
the encoded computations \cite[Sec.~2.6]{derks_designing_2025}]} \\ These are operators that
\indent\red{[X and Z measurements can be performed with only CNOT and \begin{itemize}
Hadamard gates \cite[Sec.~10.5.8]{nielsen_quantum_2010}]} \\ \item Commute with all the stabilizers in $\mathcal{S}$.
\indent\red{[(?) Stabilizer generators]} \\ \item Anti-commute with one another, i.e., $[ \overline{X}_i,
\indent\red{[Parity-check matrix \cite[Sec.~10.5.1]{nielsen_quantum_2010}]} \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] \begin{figure}[t]
\centering \centering
\tikzset{ % tex-fmt: off
meter/.append style={ \begin{quantikz}
draw, rectangle, \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}} & & & \\
font=\vphantom{A}, minimum width=8mm, minimum height=8mm, & & & & & & & & \\
path picture={ \lstick{$\ket{0}_{\text{A}_1}$} & \gate{H} & \ctrl{-1} & & & & \gate{H} & \meter{} & \setwiretype{c} \\
\draw[black] \lstick{$\ket{0}_{\text{A}_2}$} & \gate{H} & & \ctrl{-2} & & & \gate{H} & \meter{} & \setwiretype{c} \\
([shift={(.1,.3)}]path picture bounding box.south west) \vdots\setwiretype{n} & & & & & & & & \vdots \\
to[bend left=50] \lstick{$\ket{0}_{\text{A}_{n-k}}$} & \gate{H} & & & & \ctrl{-4} & \gate{H} & \meter{} & \setwiretype{c} \\
([shift={(-.1,.3)}]path picture bounding box.south east); \end{quantikz}
\draw[black,-latex] % tex-fmt: on
([shift={(0,.1)}]path picture bounding box.south)
-- ([shift={(.3,-.1)}]path picture bounding box.north);
}
}
}
\red{Hier könnte Ihre Werbung stehen.}
\caption{ \caption{
\red{Illustration of a general syndrome extraction circuit. Illustration of a full syndrome extraction circuit.
Adapted from \cite[Figure~4]{roffe_quantum_2019}.} Adapted from \cite[Figure~4]{roffe_quantum_2019}.
} }
\label{fig:sec} \label{fig:sec}
\end{figure} \end{figure}
@@ -1352,76 +1435,275 @@ Hadamard gates \cite[Sec.~10.5.8]{nielsen_quantum_2010}]} \\
\subsection{Calderbank-Shor-Steane Codes} \subsection{Calderbank-Shor-Steane Codes}
\label{subsec:Calderbank-Shor-Steane Codes} \label{subsec:Calderbank-Shor-Steane Codes}
% Intro
Stabilizer codes are especially practical to work with when they can Stabilizer codes are especially practical to work with when they can
handle $X$- and $Z$-type errors independently. handle $X$ and $Z$ type errors independently.
We can then separate the stabilizer generators into some with only As $Z$ errors anti-commute with $X$ operators in the stabilizers and
$Z$ operators and some with only $X$ operators. 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 ]} \\ % Construction
\indent\red{[Construction from two binary linear codes
\cite[p.~452,469]{nielsen_quantum_2010}]}
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} \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 % 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 % tex-fmt: on
\\
\red{ % Degeneracy and short cycles
\textbf{General Notes:}
\begin{itemize} Decoding \ac{qldpc} codes poses some unique challenges.
\item Note that there are other codes than stabilizer codes One issue is that of \emph{quantum degeneracy}.
(and research and give some examples), but only Because errors that differ by a stabilizer have the same impact on
stabilizer codes are considered in this work all codewords, there can be multiple minimum-weight solutions to the
\item Degeneracy quantum decoding problem \cite[Sec.~II.C.]{babar_fifteen_2015}
\item The QEC decoding problem (considering degeneracy) \cite[Sec.~V]{roffe_decoding_2020}.
\cite[Sec.~2.3]{yao_belief_2024} This leads to the decoding algorithm getting confused about the
\end{itemize} direction to proceed in \cite[Sec.~5]{yao_belief_2024}.
\textbf{Content:} Another problem is that due to the commutativity property of the stabilizers,
\begin{itemize} quantum codes inherently contain short cycles
\item General context \cite[Sec.~IV.C]{babar_fifteen_2015}.
\begin{itemize} As discussed in \autoref{subsec:Iterative Decoding}, these lead to
\item Why we need QEC (correcting errors due the violation of the independence assumption of the messages passed
to noisy gates) during decoding, impeding performance.
\item Main challenges of QEC compared to classical
error correction % BPGD
\item Logical vs physical states, logical vs
physical operators The aforementioned issues both manifest themselves as convergence problems
\end{itemize} of the \ac{bp} algorithm, and different ways of modifying the algorithm
\item Stabilizer codes to aid with convergence exist.
\begin{itemize} One approach is to use \ac{bp} with guided decimation (\acs{bpgd})
\item Definition of a stabilizer code \cite[Alg.~1]{yao_belief_2024}.
\item The stabilizer its generators (note somewhere Here, a number $T\in \mathbb{N}$ of \ac{bp} iterations are performed,
that the generators have to commute before \emph{decimating} the most reliable \ac{vn}, i.e., performing
to be able to a hard decision and excluding it from further decoding.
be measured without disturbing each other) This constrains the solution space more and more as the decoding
(Why we need commutativity of the progresses, encouraging the algorithm to converge to one of the
stabilizers [Journal, solutions \cite[Sec.~5]{yao_belief_2024}.
p.~51], [Got97, p.~6]) Algorithm \ref{alg:bpgd} shows this process.
\item syndrome extraction circuit Note that as the Tanner graph only has $n$ \acp{vn}, this is a
\item Stabilizer codes are effectively the QM natural constraint on the maximum number of outer iterations of the algorithm.
% TODO: Actually binary linear codes or
% just linear codes? % TODO: Explain that setting the channel LLR to infinity is the same
equivalent of binary linear codes (e.g., % as a hard decision and ignoring the VN in the further decoding
expressible via check matrix) % tex-fmt: off
\item Similar to parity checks, quantum states can be \tikzexternaldisable
more conveniently described using stabilizers \begin{algorithm}[t]
rather than working with the states directly \caption{Belief propagation with guided decimation (BPGD) algorithm.}
\cite[Sec.~10.5.1]{nielsen_quantum_2010} \label{alg:bpgd}
\end{itemize} \begin{algorithmic}[1]
\item Digitization of errors \State \textbf{Initialize:} $\tilde{L}_i \leftarrow
\item CSS codes \log \frac{1-p_i}{p_i}$ for all $i \in \mathcal{I}$
\item Color codes? \State \textbf{Initialize:} $L_{i \rightarrow j} \leftarrow
\item Surface codes? \tilde{L}_i$ for all $i \in \mathcal{I},\, j \in \mathcal{N}_\text{V}(i)$
\end{itemize} \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

@@ -10,9 +10,435 @@
\subsection{Detector Error Models} \subsection{Detector Error Models}
\section{Practical Considerations} \section{Practical Considerations}
\subsection{Practical Methodology} \subsection{Practical Methodology}
\indent\red{[(?) Figure from presentation, showing where the LER
calculation takes place]} \\
\subsection{Stim} \subsection{Stim}
\begin{figure}[t]
\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{subfigure}{0.48\textwidth}
\centering
% tex-fmt: off
\begin{quantikz}[row sep=4mm, column sep=4mm]
\lstick[3]{$\ket{\psi}$} & \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
\caption{Depolarizing channel.}
\end{subfigure}%
\begin{subfigure}{0.48\textwidth}
\centering
% tex-fmt: off
\begin{quantikz}[row sep=4mm, column sep=4mm]
\lstick[3]{$\ket{\psi}$} & \xerr & \ctrl{3} & & & & & & \\
& \xerr & & \ctrl{2} & \ctrl{3} & & & & \\
& \xerr & & & & \ctrl{2} & & & \\
\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
\caption{Phenomenological noise.}
\end{subfigure}
\vspace*{3mm}
\centering
\begin{subfigure}[c]{0.75\textwidth}
\centering
% tex-fmt: off
\begin{quantikz}[row sep=4mm, column sep=2mm]
\lstick[3]{$\ket{\psi}$} & \xyzerr & \ctrl{3} & \xyzerr \wire[d][3]{q} & & & & & & & & & \\
& \xyzerr & & & \ctrl{2} & \xyzerr \wire[d][2]{q} & \ctrl{3} & \xyzerr \wire[d][3]{q} & & & & & \\
& \xyzerr & & & & & & & \ctrl{2} & \xyzerr \wire[d][2]{q} & & & \\
\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
\caption{Circuit-level noise.}
\end{subfigure}%
\hfill%
\begin{subfigure}[c]{0.25\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{subfigure}
\caption{Types of noise models.}
\label{fig:Types of noise models.}
\end{figure}
\begin{figure}[t]
\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}
\begin{figure}[t]
\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}$} & \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:}
\end{figure}
\begin{figure}[t]
\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}$} & \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.
}
\end{figure}
\begin{figure}[t]
\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}$} & \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}
\begin{figure}[t]
\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}
\begin{figure}[t]
\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}]
& \gate[3]{\text{SE}_1} & & \gate[3]{\text{SE}_2} & & \gate[3]{\text{SE}_3} & & \gate[3]{\text{SE}_4} & \\
\lstick{$\ket{\psi}$} & & & & & & & & & \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}

View File

@@ -1,5 +1,407 @@
\chapter{Decoding under Detector Error Models} \chapter{Decoding under Detector Error Models}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\section{Sliding-Window Decoding} \section{Sliding-Window Decoding}
\section{Treating Detector Error Matrices like SC-LDPC Codes} \label{sec:Sliding-Window Decoding}
\section{Soft-Information Aware Sliding-Window Decoding}
\section{Numerical Results and Analysis} \begin{figure}[t]
\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 under BP}
\label{sec:warm_start_bp}
\begin{figure}[t]
\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}[t]
\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}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\section{Warm-Start Sliding-Window Decoding under BPGD}
\label{sec:warm_start_bpgd}
\begin{figure}[t]
\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}

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,21 +6,29 @@
\usepackage{amsfonts} \usepackage{amsfonts}
\usepackage{mleftright} \usepackage{mleftright}
\usepackage{bm} \usepackage{bm}
\usepackage{bbm}
\usepackage{tikz} \usepackage{tikz}
\usepackage{xcolor} \usepackage{xcolor}
\usepackage{pgfplots} \usepackage{pgfplots}
\pgfplotsset{compat=newest} \pgfplotsset{compat=newest}
\usepackage{acro} \usepackage{acro}
\usepackage{braket} \usepackage{braket}
\usepackage{listings}
\usepackage{caption}
% \usepackage[ % \usepackage[
% backend=biber, % backend=biber,
% style=ieee, % style=ieee,
% sorting=nty, % sorting=nty,
% ]{biblatex} % ]{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{calc, positioning, arrows, fit}
\usetikzlibrary{external} \usetikzlibrary{external}
\tikzexternalize \tikzexternalize
@@ -28,6 +36,8 @@
\renewcommand{\todo}[2][]{\tikzexternaldisable\@todo[#1]{#2}\tikzexternalenable} \renewcommand{\todo}[2][]{\tikzexternaldisable\@todo[#1]{#2}\tikzexternalenable}
\makeatother \makeatother
\setcounter{MaxMatrixCols}{20}
% %
% %
% Custom commands % Custom commands