Классические и квантовые коды
Торические коды.
Приведем важный пример симплектического кода. Он строится так. Пусть есть квадратная решетка размера на торе. Сопоставим каждому ее ребру по q-биту. Таким образом, всего имеется
q-битов. Проверочные операторы будут двух типов.
Тип I задается вершинами. Выберем некоторую вершину и сопоставим ей проверочный оператор
![A^{(x)}_s=\sigma(f^{(x)}_s)=\prod_{j\in\,\mathrm {\text{звезда}}(s)}^{} \sigma^x_j.](/sites/default/files/tex_cache/5d75c53a43864b2efd9781200acbd330.png)
Тип II задается гранями. Выберем некоторую грань и сопоставим ей проверочный оператор
![A^{(z)}_u=\sigma(f^{(z)}_u)=\prod_{j\in\, \mathrm {\text{граница}}(u)}^{} \sigma^z_j.](/sites/default/files/tex_cache/7834c5861093a6d43a66f485be6f059c.png)
Операторы и
коммутируют, поскольку граница и звезда всегда пересекаются по четному числу ребер. (Перестановочность операторов одного типа очевидна.)
Хотя мы указали проверочных операторов (по одному на грань и на вершину), между ними есть соотношения. Произведение всех
-операторов, как и произведение всех
-операторов, равны тождественному. Можно показать, что других соотношений нет. Поэтому
, а
. Поэтому торический код позволяет закодировать два q-бита. Посмотрим, чему равно кодовое расстояние для торического кода.
Для торического кода имеются естественные разложения
![F=F^{(x)}\oplus F^{(z)},\qquad F_+=F_+^{(x)}\oplus F_+^{(z)}](/sites/default/files/tex_cache/39fc7ba410391367d5c24d6cb263a463.png)
![\sigma_j^x](/sites/default/files/tex_cache/42a8953e9437296c35e1561daa371be1.png)
![\sigma_j^z](/sites/default/files/tex_cache/8854e3ed6790923f3d38f84e3b8981ac.png)
![F^{(z)}](/sites/default/files/tex_cache/8b31fcaad07b03b83f9f2871e7e3f045.png)
![F_+^{(z)}](/sites/default/files/tex_cache/a188c2a5bc8b663229085e0f4bbdaaac.png)
![(0,\beta_1,\dots,0,\beta_n)](/sites/default/files/tex_cache/b197413323d1995dae85f82b2f1ffce9.png)
![\beta_1,\dots,\beta_n\double\in\FF_2](/sites/default/files/tex_cache/1beb39b2b0768d8fe7471ed9af2f4468.png)
![F^{(x)}_{\ms},\ F_+^{(x)}](/sites/default/files/tex_cache/fe679d9f7e255ddf66e16236e49c42f8.png)
![f^{(z)}_u\in F^{(z)}_{\ms}](/sites/default/files/tex_cache/6fcd52059e733096640b0cdd7169cfd3.png)
![u](/sites/default/files/tex_cache/7b774effe4a349c6dd82ad4f4f21d34c.png)
![F^{(z)}](/sites/default/files/tex_cache/8b31fcaad07b03b83f9f2871e7e3f045.png)
![f_s^{(x)}](/sites/default/files/tex_cache/0839266edf6326e4a0c811e613d40287.png)
Возьмем произвольный элемент ,
. Условия коммутирования запишутся следующим образом:
![\begin{multiline}
\omega(f_s^{(x)},g)=0\quad \Longleftrightarrow\quad
\omega(f_s^{(x)},g^{(z)})=0, \\
\omega(f_u^{(z)},g)=0\quad \Longleftrightarrow\quad
\omega(f_u^{(z)},g^{(x)})=0.
\end{multiline}](/sites/default/files/tex_cache/bbd6adb128b29e512d687a94ce7e425c.png)
![\omega(f_s^{(x)},g^{(z)}_{\ms})=0](/sites/default/files/tex_cache/275a6eb8ee6731537db352ff3c0d3efa.png)
![g^{(z)}](/sites/default/files/tex_cache/6ca7df072d1993daaacf5ccf747d98f7.png)
![g^{(z)}](/sites/default/files/tex_cache/6ca7df072d1993daaacf5ccf747d98f7.png)
![\ZZ_2](/sites/default/files/tex_cache/dac99edd8afb858d55a4207dfeec28ec.png)
![g^{(x)}](/sites/default/files/tex_cache/ad3872e73eda397414067e7213cfe8c0.png)
Итак, пространства ,
состоят из 1-циклов и 1-коциклов, а пространства
,
состоят из 1-границ и 1-кограниц. Следовательно, кодовое расстояние есть минимальная мощность (количество ненулевых коэффициентов) по циклам, не являющимся границами, и коциклам, не являющимся кограницами. Легко видеть, что этот минимум равен
(нужны либо цикл, либо разрез, не гомологичные 0). Это означает, что торический код исправляет
ошибок.
Будем обозначать коды описанного вида через .
Замечание. Торические коды являются очень важным примером, обладающим рядом замечательных свойств. В частности, это коды с локальными проверками. Последовательность кодов называется кодами с локальными проверками, если выполнены следующие условия:
- каждый проверочный оператор действует на ограниченное константой число q-битов;
- каждый q-бит входит в ограниченное константой число проверочных операторов;
- кодовое расстояние неограниченно возрастает.
Такие коды представляют интерес для задачи построения вычислительных схем, устойчивых к ошибкам. При исправлении ошибок могут происходить новые ошибки. Но для кодов с локальными проверками схемы исправления ошибок имеют фиксированную глубину, поэтому одна ошибка при работе такой схемы портит ограниченное число q-битов.
Процедура исправления ошибок.
Определение 14.6 и теорема 14.2 указывают только на принципиальную возможность восстановить исходное состояние системы после действия ошибки. На примере симплектических кодов покажем, как реализовать процедуру исправления ошибки.
Рассмотрим частный случай, к которому все сводится. Пусть имеются две ошибки, заданные операторами ,
. Тогда
(
). Назовем синдромом ошибки
вектор
(для
— аналогично).
Возьмем вектор . Обозначим
. Проверочные операторы действуют на
так:
. Поэтому, измеряя собственные числа
на состоянии
, можно измерить синдром.
Если кодовое расстояние равно , то выполнено
![\forall\,g_1,g_2\: \Bigl((|g_1|\leq k, |g_2|\leq k) \Rightarrow \big((g_1-g_2\in F)\vee(g_1-g_2\not\in F_+)\big)\Bigr).](/sites/default/files/tex_cache/677b9113110a7b8632f3496f10b31772.png)
![g_1-g_2\in F](/sites/default/files/tex_cache/9fe915ab196c66d00a40178be13338f3.png)
![g_1](/sites/default/files/tex_cache/e11ba37d5d784af689e175bec8a2f284.png)
![g_2](/sites/default/files/tex_cache/d7f116997176d81a3bbd4e6dfc6fe6b0.png)
![\sigma(g_1)\ket\eta=c\sigma(g_2)\ket\eta](/sites/default/files/tex_cache/7ea679c70578377c661d6bed19f657ee.png)
![\ket\eta](/sites/default/files/tex_cache/c9a8e2ef0c6dad80c78196f70ce54807.png)
![g_1-g_2\not\in F_+](/sites/default/files/tex_cache/cef36c56e10a37594409c38891f93901.png)
![g_1](/sites/default/files/tex_cache/e11ba37d5d784af689e175bec8a2f284.png)
![g_2](/sites/default/files/tex_cache/d7f116997176d81a3bbd4e6dfc6fe6b0.png)
![F](/sites/default/files/tex_cache/800618943025315f869e4e1f09471012.png)
Теперь ясно, как нужно исправлять ошибку. После того как определен синдром, применим оператор, обратный к оператору восстановленной по синдрому ошибки. Получим состояние, отличающееся от исходного лишь на фазовый множитель. Вся процедура изображена на рис. 14.2.
Выше рассмотрен случай ошибки типа . На самом деле ошибка состоит в действии преобразования матриц плотности вида
![T=\sum_{|h|\leq k,|h'|\leq k}^{} b_{h,h'} \sigma(h)\cdot\sigma(h')^\dagger.](/sites/default/files/tex_cache/0d3fd860f08a6bcfd385d16adcc86f20.png)
Задача 14.6. Постройте полиномиальный алгоритм определения ошибки по синдрому для торического кода.