量子情報理論の基本：量子誤り訂正（スタビライザー符号：３）

$$
\def\bra#1{\mathinner{\left\langle{#1}\right|}}
\def\ket#1{\mathinner{\left|{#1}\right\rangle}}
\def\braket#1#2{\mathinner{\left\langle{#1}\middle|#2\right\rangle}}
$$

## はじめに

[前々回](https://qiita.com/SamN/items/15943129816399b90aa9)と[前回](https://qiita.com/SamN/items/db915e9842b81192286d)の記事で、スタビライザー群およびスタビライザー形式の基礎知識が得られたので、今回はそのスタビライザーを利用した誤り訂正符号の話になります（お待たせしました！）。本記事を通して、符号化〜雑音〜検知＆回復という誤り訂正処理の動作原理とそれを具体的な量子回路として実装するための基礎知識が得られるはずです（と思います）。

この後の節で何を説明しようとしているか、最初に言っておきます。まず、「簡単な例」では、直感的にわかりやすいシンプルな例を通してスタビライザーによる誤り訂正処理のイメージを掴みます。「誤り訂正符号の構成」では、与えられたスタビライザー群に対して任意の論理的な基底状態を作成する方法および未知の状態を符号化する方法について説明します。「誤り訂正の条件」では、スタビライザー符号による誤り訂正が可能になる雑音条件に関する定理を証明し、さらに、符号の距離と訂正可能なビット数の関係について述べます。「誤り訂正の動作」では、誤りを検知するシンドローム測定と符号回復の処理手続きについて説明します。最後の「いくつかの実例」では、Shor符号やSteane符号などの具体的な符号方式がどんなスタビライザーの生成元に基づいて構成されるのかを紹介します。

参考にさせていただいたのは、以下の文献です。

1. [ニールセン、チャン「量子コンピュータと量子通信（３）」オーム社（2005年）](https://www.ohmsha.co.jp/book/9784274200090/)
2. [富田「量子情報工学」森北出版（2017年）](https://www.morikita.co.jp/books/book/3109)


## 簡単な例

それでは、簡単な例として3量子ビットのビット反転符号を取り上げ、スタビライザーによる誤り訂正のイメージを把握することから始めます。3量子ビット($2^3$次元)のヒルベルト空間上で定義された、以下のようなスタビライザー群を考えます。

```math
S = <Z_1 Z_2, Z_2 Z_3>  \tag{1}
```

これによってスタビライズされるスタビライザー状態空間は、$\ket{000}$と$\ket{111}$で張られる2次元のヒルベルト空間です。3量子ビットの基底$8$個を頭に思い浮かべながら、その中で$Z_1 Z_2$と$Z_2 Z_3$によってスタビライズされる基底は何でしょうか？と考えれば、この2つの基底が浮かび上がってくると思います。この符号空間を使って量子状態$\ket{\psi} = \alpha \ket{0} + \beta \ket{1}$を、

```math
\ket{\psi_L} = \alpha \ket{000} + \beta \ket{111} \tag{2}
```

のように符号化します。これはビット反転に対して誤り訂正可能な符号になっています。すなわち、1番目、2番目、3番目のビットに対するビット反転演算$X_1, \space X_2, \space X_3$の中のどれかを式(2)に適用したとしても、元に戻すことができます。どのようにやるかと言うと、2つの生成元を測定したときの測定値がどんなパターンになるかをまず見ます。そうすると、以下の表に示す通り、どこに雑音（ビット反転）が加わっていたかがわかるので、その雑音（ビット反転）に対する逆演算を実行すれば訂正処理が完了します。

| $Z_1 Z_2$の測定| $Z_2 Z_3$の測定 | 誤りの型            | 訂正の演算          |
|--------------|---------------|---------------------|---------------------|
| $+1$         | $+1$          | なし                | なし                |
| $+1$         | $-1$          | 3番目のビットが反転 | 3番目のビットを反転 |
| $-1$         | $+1$          | 1番目のビットが反転 | 1番目のビットを反転 |
| $-1$         | $-1$          | 2番目のビットが反転 | 2番目のビットを反転 |

例えば、3番目のビットが反転した場合、式(2)は、$\ket{\psi^{\prime}} = \alpha \ket{001} + \beta \ket{110}$のように変化します。この状態のもとで$Z_1 Z_2$を測定したとすると、$Z_1 Z_2 \ket{\psi^{\prime}} = \ket{\psi^{\prime}}$となり$\ket{\psi^{\prime}}$は$Z_1 Z_2$の固有値$+1$の固有状態なので、100%の確率で測定値は$+1$となります。また、同じこの状態のもとで$Z_2 Z_3$を測定したとすると、$Z_2 Z_3 \ket{\psi^{\prime}} = -\ket{\psi^{\prime}}$なので、100%の確率で測定値は$-1$となります。したがって、上の表の2行目に示す演算によって正しく誤り訂正が実現されることがわかります。同様にして1行目、3行目、4行目も正しい誤り訂正になっていることは容易に確認できると思います。

これを一般化すればスタビライザー群を用いた誤り訂正処理が完成するのですが、動作原理をきちんと理解して、一連の処理を実装・シミュレーションできるレベルにまで持っていきたいので、少しずつ丁寧に見ていきます。まず、符号の構成方法についてです。

## 誤り訂正符号の構成

3量子ビットのヒルベルト空間を考えることから始めましたが、$n$量子ビットのヒルベルト空間を考えても良いです。そして、その上で定義される何らかのスタビライザー群$S$を考えます。例えば、$S$は$n-k$個の独立で互いに可換な生成元[^1]を有するとしてみましょう。[前々回の記事](https://qiita.com/SamN/items/15943129816399b90aa9)で見たように、このような生成元によって規定されるスタビライザー状態空間$V_s$は$2^{k}$次元、つまり、$k$量子ビットの状態空間です。これを論理的な状態空間＝符号空間と見立て、もとの$k$量子ビットの物理的な状態をこれにマッピングするのがスタビライザー符号です。

[^1]: 以後、生成元と言ったら独立で互いに可換なものだと思っておいてください（面倒なのでいちいち言いません）。

### 論理的基底状態

スタビライザー符号を具体的に構成したいとすると、まず論理的な基底状態を知る必要があります。3量子ビットのビット反転符号の場合、2つの生成元を1分ほどじっと睨めば、$\ket{0_L} \equiv \ket{000}, \ket{1_L} \equiv \ket{111}$が論理的な2つの基底状態だなーということがわかったと思います（多分）[^2]。これから説明したいのは、スタビライザー群$S$が、

[^2]: 実は、これが唯一の選択ではありません。例えば、$\ket{0_L}=(\ket{000}+\ket{111})/\sqrt{2}, \space \ket{1_L}=(\ket{000}-\ket{111})/\sqrt{2}$としても良いです。それ以外にも可能な選択はたくさんあります。とにかく$\ket{000}$と$\ket{111}$の線形和を2つ持ってきて正規直交させるように決めれば良いです。

```math
S = <g_1,g_2, \cdots , g_{n-k}>  \tag{3}
```

のように与えられたときに、論理的な基底状態をどう決めれば良いかということです。これはじっと睨んでもなかなかわかるものではありません。原理的には$S$によって規定されるスタビライザー状態空間$V_s$の中から$2^k$個の正規直交基底を任意に持ってくれば良いのですが、「自由にどうぞ」といわれるときほど人は迷ってしまうものです（人によりますが）。なので、何らかの指針というか系統的なやり方をここで与えたいと思います。

まず、論理的な基底のひとつ、ここでは$\ket{0_{L}0_{L} \cdots 0_{L}}$と名付けることにしますが、これを定義することからはじめます。3量子ビットのビット反転符号の場合$\ket{0_L}$としていましたが、いま考えようとしているのは$2^{k}$次元空間を張る一つの基底なので、$0_L$を$k$個並べた記号として表すことにします。$0_L$がいくつ並んでいるかわからないので、$\ket{0_L}^{\otimes k}$と表す場合もあります。これをどう決めれば良いかを考えます。式(3)の$S$でスタビライズされる状態の中から選ぶのですが、自由度がありすぎて決められないので、制限をつけるため生成元を以下のように追加します。

```math
<g_1,g_2, \cdots , g_{n-k}, \bar{Z_1}, \bar{Z_2}, \cdots , \bar{Z_k}>  \tag{4}
```

ここで、$\bar{Z_1}, \bar{Z_2}, \cdots , \bar{Z_k}$の各々は、パウリ群$G_n$の要素であり、他の生成元すべてと可換になるように選ぶものとします。生成元は合計で$n$個になるので、これによってスタビライザー状態はユニークに決まります。その状態を$\ket{0_{L} 0_{L} \cdots 0_{L}} = \ket{0_L}^{\otimes k}$と定義することにします。そして、追加した生成元$\bar{Z_i}$を$i$番目の論理状態に働くパウリ$Z$演算子（論理$Z$演算子）と見なすことにします。実際の$\bar{Z_i}$がパウリ$Z$から構成されていようがいまいが構いません。とにかく、

```math
\begin{align}
\bar{Z_1} \ket{0_{L} 0_{L} 0_{L} \cdots 0_{L}} &= +\ket{0_{L} 0_{L} 0_{L} \cdots 0_{L}} \\
\bar{Z_1} \ket{1_{L} 0_{L} 0_{L} \cdots 0_{L}} &= -\ket{1_{L} 0_{L} 0_{L} \cdots 0_{L}} \\
\bar{Z_2} \ket{0_{L} 0_{L} 0_{L} \cdots 0_{L}} &= +\ket{0_{L} 0_{L} 0_{L} \cdots 0_{L}} \\
\bar{Z_2} \ket{0_{L} 1_{L} 0_{L} \cdots 0_{L}} &= -\ket{0_{L} 1_{L} 0_{L} \cdots 0_{L}} \\
\vdots \tag{5}
\end{align}
```

のように、$i$番目の論理ビットが$0$のときに（他のビットは何でも良い）$\bar{Z_i}$を作用させると状態は不変であり、$i$番目の論理ビットが$1$のときに（他のビットは何でも良い）$\bar{Z_i}$を作用させると状態の前に$-1$がかかったものになるという風に記号を定義します。つまり、$\bar{Z_i}$の固有値$+1$の固有空間の基底を表現するために$i$番目のビットが$0$になっている$2^{k-1}$個の記号を使い、$\bar{Z_i}$の固有値$-1$の固有空間の基底を表現するために$i$番目のビットが$1$になっている$2^{k-1}$個の記号を使うわけです。

この定義より、$\ket{1_{L} 0_{L} \cdots 0_{L}}$をスタビライズする生成元は、

```math
<g_1,g_2, \cdots , g_{n-k}, -\bar{Z_1}, \bar{Z_2}, \cdots , \bar{Z_k}>  \tag{6}
```

となります。$\bar{Z_1}$にマイナスがついているのが、式(4)との違いです。これを延長させると、論理状態$\ket{x_{1} x_{2} \cdots x_{k}}^{L}$をスタイライズする生成元は、

```math
<g_1,g_2, \cdots , g_{n-k}, (-1)^{x_1}\bar{Z_1}, (-1)^{x_2}\bar{Z_2}, \cdots , (-1)^{x_k}\bar{Z_k}>  \tag{7}
```

となることがわかると思います。

論理状態に働く論理パウリ$X$演算子$\bar{X_i}$も、以下を満たすものとして定義することができます。

```math
\begin{align}
\bar{X_i} \bar{Z_j} \bar{X_i} &= -\bar{Z_j} (for \space i=j) \\
\bar{X_i} \bar{Z_j} \bar{X_i} &= \bar{Z_j} (for \space i \ne j) \\
\bar{X_i} \bar{g_l} \bar{X_i} &= \bar{g_l} \tag{8}
\end{align}
```

ん？となったかもしれないので簡単に説明します。例えば、$\bar{X_1}$を$\ket{0_{L} 0_{L} \cdots 0_{L}}$に演算すると、上の定義により、

```math
\bar{X_1}\ket{0_{L} 0_{L} \cdots 0_{L}} = \bar{X_1}\bar{Z_1}\ket{0_{L} 0_{L} \cdots 0_{L}} = -\bar{Z_1}\bar{X_1}\ket{0_{L} 0_{L} \cdots 0_{L}}  \tag{9}
```
となるので、$\bar{X_1}\ket{0_{L} 0_{L} \cdots 0_{L}}$は$\bar{Z_1}$の固有値$-1$に対する固有状態です。式(5)を見ればわかる通り、それは$\ket{1_{L} 0_{L} \cdots 0_{L}}$です。つまり、

```math
\bar{X_1}\ket{0_{L} 0_{L} \cdots 0_{L}} = \ket{1_{L} 0_{L} \cdots 0_{L}}  \tag{10}
```

なので、確かに$\bar{X_1}$は1番目の論理量子ビットを反転させるパウリ$X$演算子になっていることがわかります。同様にして、$\bar{X_i}$はi番目の論理量子ビットに対するパウリ$X$演算子ということにます。

このように論理パウリ$X$演算子が定義できたので、論理的基底状態$\ket{0_L}^{\otimes k} = \ket{0_{L} 0_{L} \cdots 0_{L}}$がわかれば、他の任意の論理基底状態を作成することができます。では、大本の出発点になる$\ket{0_L}^{\otimes k}$はどのような物理的な状態として決めることができるでしょうか、という話を次にします。

式(4)の生成元によってスタビライズされる状態が$\ket{0_L}^{\otimes k}$だったので、何らかの初期的な物理的な基底状態として適当なもの、例えば$\ket{0}^{\otimes n} = \ket{00 \cdots 0}$を用意しておいて、それに対して各生成元の固有値$+1$の固有空間への射影演算を次々に適用していけば、結果としてすべての生成元によってスタビライズされる状態が作れそうです。すなわち、生成元$g$の固有値$+1$の固有空間への射影は$(I+g)/2$なので、

```math
\ket{0_L}^{\otimes k} = \prod_{i=1}^{n-k} \frac{I+g_i}{2} \prod_{l=1}^{k} \frac{I+\bar{Z_l}}{2} \ket{0}^{\otimes n}  \tag{11}
```

で計算すれば良さそうです。この後の議論と式展開を簡単にするため$g_{n-k+i} \equiv \bar{Z_i}$と定義すると、式(11)は、

```math
\ket{0_L}^{\otimes k} = \prod_{i=1}^{n} \frac{I+g_i}{2} \ket{0}^{\otimes n}  \tag{12}
```

となります。数式で書くと一目瞭然なのですが、量子コンピュータで実装しようとするとこれを量子回路で実現しないといけません。ちょっとやっかいなのは、射影演算はユニタリではないということです。測定をしながら測定値に応じて適切に量子ゲートを実行していく必要があります。その手続きを以下で順に見ていきます。

が、その前に生成元$g_i$に対応した演算子$g_{i}^{\prime}$を$g_{i}$と反可換でその他のすべての$g_j(j \ne i)$と可換であるように選んでおきます[^3]。なぜこんなものが必要になるかは、後でわかります。

[^3]: このような$g_{i}^{\prime}$が必ず存在することは、[前々回の記事](https://qiita.com/SamN/items/15943129816399b90aa9)の補題2で証明済です。

さて、それでは順に測定していく手続きの説明に入ります。まず、初期状態を設定します。

```math
\ket{\Psi^{(0)}} = \ket{0}^{\otimes n}  \tag{13}
```

この状態のもとで$g_1$を測定して、$g_1$の固有値$+1$の固有空間へ状態を射影させます[^4]。[前回の記事](https://qiita.com/SamN/items/db915e9842b81192286d)でも述べましたが、以下のように間接測定をします（図では$g_1$は3量子ビットに対する演算になっていますが、任意のビット数の演算だと思ってください）。

[^4]: 式(12)では最初に演算すべきなのは$g_n$のように見えますが、各生成元は可換なので順番はどうでもいいです。説明の都合上、逆順に並べ替えて$g_1$から測定するようにします。


```
|0>      --H--*--H---M
              |
         ---|   |---
|Psi(0)> ---|g1 |---
         ---|   |---
```

測定直前の状態は、

```math
\ket{0} \otimes \frac{I+g_1}{2} \ket{\Psi^{(0)}} + \ket{1} \otimes \frac{I-g_1}{2} \ket{\Psi^{(0)}} \tag{14}
```

なので[^5]、1番目の量子ビットを測定すると、測定値が$+1$（測定値を表す指標としては"0"）の場合は状態が$\frac{I+g_1}{2} \ket{\Psi^{(0)}}$のように射影され、測定値が$-1$（測定値を表す指標としては"1"）の場合は状態が$\frac{I-g_1}{2} \ket{\Psi^{(0)}}$のようにに射影されます。式(12)のような状態を得ることが目的なので、測定値が$+1$だった場合はそのままこれを状態$\ket{\Psi^{(1)}}$とおいて[^6]次の測定に移ります。測定値$-1$だった場合は欲しかった状態ではないないので何とかしたいわけです。ここで先程定義した$g_{1}^{\prime}$を召喚します。測定値が$-1$だった場合、実は$g_{1}^{\prime}$を演算すれば問題は解決します。実際にやってみましょう。

[^5]: 制御$g_1$は、$\ket{0}\bra{0} \otimes I + \ket{1}\bra{1} \otimes g_1$で、その前後にアダマールがかかっているので、式(14)になるのはすぐにわかると思います。

[^6]: $g_1, g_2, \cdots , g_i$の固有値$+1$に対応した固有空間たちの積空間上の状態を$\ket{\Psi^{(i)}}$と書くことにします。

```math
\begin{align}
\frac{I-g_1}{2} \ket{\Psi^{(0)}} &\rightarrow g_{1}^{\prime} \frac{I-g_1}{2} \ket{\Psi^{(0)}} \\
&= g_{1}^{\prime} \frac{I-g_1}{2} g_{1}^{\prime} g_{1}^{\prime} \ket{\Psi^{(0)}} \\
&= \frac{I+g_1}{2} g_{1}^{\prime} \ket{\Psi^{(0)}} \equiv \ket{\Psi^{(1)}} \tag{15}
\end{align}
```

ここで、$g_{1}^{\prime} \ket{\Psi^{(0)}}$はいま考えている$2^n$次元のヒルベルト空間上に存在する何らかの状態です。それに$g_1$の固有値$+1$に対応した固有空間への射影演算を実行しているので、結果としてその固有空間上の状態になります。なので、この新たな状態を$\ket{\Psi^{(1)}}$と書くことにします[^7]。

[^7]: ただし、測定値が$+1$だった場合の状態と測定値が$-1$だった場合に式(15)によって得られた状態はおそらく異なるものです。が、$g_1$の固有値$+1$に対応した固有空間上の状態であることには間違いないので、気にしないことにします。射影を次々に繰り返していけば、どっちにしても最終的に同じ状態が得られるはずなので。

ということで、$g_1$の固有値$+1$に対する固有空間への射影にすり変わりました。量子回路で書くと以下のようになります。

```
|0>      --H--*--H----M
              |       |
         ---|   |---|   |---
|Psi(0)> ---|g1 |---|g1'|--- |Psi(1)>
         ---|   |---|   |---
```

次に、$\ket{\Psi^{(1)}}$のもとで$g_2$を測定します。測定直前の状態は、

```math
\ket{0} \otimes \frac{I+g_2}{2} \ket{\Psi^{(1)}} + \ket{1} \otimes \frac{I-g_2}{2} \ket{\Psi^{(1)}} \tag{16}
```

となるので、先程と同様、測定値が$+1$の場合は得られた状態をそのまま$\ket{\Psi^{(2)}}$とします。測定値が$-1$の場合は以下のように$g_{2}^{\prime}$を演算すると欲しい状態が得られます。

```math
\begin{align}
\frac{I-g_2}{2} \ket{\Psi^{(1)}} &\rightarrow g_{2}^{\prime} \frac{I-g_2}{2} \ket{\Psi^{(1)}} \\
&= g_{2}^{\prime} \frac{I-g_2}{2} g_{2}^{\prime} g_{2}^{\prime} \ket{\Psi^{(1)}} \\
&= \frac{I+g_2}{2} g_{2}^{\prime} \ket{\Psi^{(1)}} \equiv \ket{\Psi^{(2)}} \tag{17}
\end{align}
```

ここで、最後の式に含まれる$g_{2}^{\prime} \ket{\Psi^{(1)}}$は、

```math
g_{2}^{\prime} \ket{\Psi^{(1)}} = g_{2}^{\prime} g_{1} \ket{\Psi^{(1)}} = g_{1} g_{2}^{\prime} \ket{\Psi^{(1)}}  \tag{18}
```

とできるので、$g_1$の固有値$+1$に対応した固有空間上の状態です。式(17)の最後の式はそれに射影$\frac{I+g_2}{2}$を作用させているので、結果として、$\ket{\Psi^{(2)}}$と書けます。

以降、$g_2,g_3, \cdots , g_{n}$について同様の処理を行った結果得られる$\ket{\Psi^{(n)}}$が、欲しかった式(12)の状態になっています。これで、論理的な基底状態$\ket{0_L}^{\otimes k}=\ket{0_{L} 0_{L} \cdots 0_{L}}$が得られたので、これに論理$X$を適当にかければすべての論理的基底状態$\ket{x_{1} x_{2} \cdots x_{k}}^{L}$を得ることができます[^8]。

[^8]: ここに示した手続きは、[ニールセン、チャン](https://www.ohmsha.co.jp/book/9784274200090/)に記載があった数行を自分なりに行間を読んでみたものです。もしかしたら不正確なことを言っていたり余計なことを言っているかもしれませんがご容赦を。またはご指摘いただけるとありがたいです。


### 符号化

論理的な基底状態が得られたので、$k$量子ビットの任意の物理的な状態、

```math
\ket{\psi} = \sum_{x_1=0,1}\sum_{x_2=0,1} \cdots \sum_{x_{k}=0,1} c(x_1,x_2, \cdots x_k) \ket{x_1 x_2 \cdots x_k}  \tag{19}
```

は、

```math
\ket{\psi_{L}} = \sum_{x_1=0,1}\sum_{x_2=0,1} \cdots \sum_{x_{k}=0,1} c(x_1,x_2, \cdots x_k) \ket{x_1 x_2 \cdots x_k}^{L}  \tag{20}
```

という具合に符号化できます。数式で書くのは簡単ですが、これを量子回路を使ってどうやったら実現できるでしょうか。先程定義した論理$X$ゲート（論理パウリ$X$演算子）や論理$Z$ゲート（論理パウリ$Z$演算子）とともに、その他の論理ユニタリゲートが定義できれば、式(19)を作成するのと同じ手続きを実行することで任意の符号化状態を作成できそうです。が、それを理解するには誤り耐性のある（フォールトトレラントな）量子計算についてもう少し知識を仕入れる必要がありそうなので、今回は触れないことにします。その代わり、1量子ビットの未知な状態を量子テレポーテーションを使って符号化する方法があるので、それについて紹介したいと思います[^9]。

[^9]: [ニールセン、チャン](https://www.ohmsha.co.jp/book/9784274200090/)の「問題10.4」に記載されています。

普通の量子テレポーテーションの回路は、以下の通りです。

```
Alice : |psi> ----------*--H-----M
                        |        |
        |0>   --H--*----X-----M  |
                   |          |  |
Bob :   |0>   -----X----------X--Z---- |psi>
```

ここで、Bobが$\ket{0}$をもつ代わりに論理的な基底状態$\ket{0_L}$をもつ想定にします。量子回路を以下に示します。ここでXL,ZLは各々論理Xゲート$\bar{X}$、論理Zゲート$\bar{Z}$を表し、|0L>は論理基底状態$\ket{0_L}$を表すものとします。

```
Alice : |psi>  ----------*--H--------M1
                         |           |
        |0>    --H--*----X-------M2  |
                    |            |   |
Bob :   |0L>   -/---XL-----------XL--ZL---- |psi_L>
                      ^       ^
                     (1)     (2)
```

こうすると、Bobが最終的に受け取る状態はAliceの$\ket{\psi}$を符号化したものなっています。なんだか面白そうな話ではありますが、そんなにうまくいくものなのでしょうか。というわけで、確認してみます。

まず、上図で(1)の状態は、

```math
\begin{align}
& \ket{\psi} \otimes (\ket{0}\bra{0} \otimes I + \ket{1}\bra{1} \otimes \bar{X}) \frac{1}{\sqrt{2}} (\ket{0} + \ket{1}) \ket{0_L} \\
&= \ket{\psi} \otimes  \frac{1}{\sqrt{2}} (\ket{0} \ket{0_L} + \ket{1} \ket{1_L}) \\
&= \frac{1}{\sqrt{2}} (\ket{\psi} \ket{0} \ket{0_L} + \ket{\psi} \ket{1} \ket{1_L}) \tag{21}
\end{align}
```

となります。(2)の状態は、$\ket{\psi} \equiv \alpha \ket{0} + \beta \ket{1}$とおくと、

```math
\begin{align}
& \rightarrow (H \otimes I \otimes I) (\ket{0} \bra{0} \otimes I \otimes I + \ket{1} \bra{1} \otimes X \otimes I) \frac{1}{\sqrt{2}} (\ket{\psi} \ket{0} \ket{0_L} + \ket{\psi} \ket{1} \ket{1_L}) \\
&= (H \otimes I \otimes I) \frac{1}{\sqrt{2}} (\alpha \ket{0}\ket{0}\ket{0_L} + \alpha \ket{0}\ket{1}\ket{1_L} + \beta \ket{1} \ket{1} \ket{0_L} + \beta \ket{1} \ket{0} \ket{1_L}) \\
&= \frac{1}{2} (\alpha (\ket{0}+\ket{1}) \ket{0}\ket{0_L} + \alpha (\ket{0}+\ket{1}) \ket{1}\ket{1_L} + \beta (\ket{0}-\ket{1}) \ket{1} \ket{0_L} + \beta (\ket{0}-\ket{1}) \ket{0} \ket{1_L}) \\
&= \frac{1}{2} (\alpha \ket{00}\ket{0_L} + \alpha \ket{10}\ket{0_L} + \alpha \ket{01}\ket{1_L} + \alpha \ket{11}\ket{1_L} + \beta \ket{01}\ket{0_L} - \beta \ket{11}\ket{0_L} + \beta \ket{00}\ket{1_L} - \beta \ket{10}\ket{1_L}) \tag{22}
\end{align}
```

となります。この状態のもとでM1,M2の測定を実行すると、測定結果が各々どうなるかに応じて、Bobの側の論理状態が以下のように変わります。

|   | M1   | M2   | 論理状態                              |
|---|------|------|---------------------------------------|
| A | $+1$ | $+1$ | $\alpha \ket{0_L} + \beta \ket{1_L}$|
| B | $+1$ | $-1$ | $\alpha \ket{1_L} + \beta \ket{0_L}$|
| C | $-1$ | $+1$ | $\alpha \ket{0_L} - \beta \ket{1_L}$|
| D | $-1$ | $-1$ | $\alpha \ket{1_L} - \beta \ket{0_L}$|

この測定値に応じて、

|   | 演算             |
|---|------------------|
| A | 何もしない       |
| B | $\bar{X}$        |
| C | $\bar{Z}$        |
| D | $\bar{Z}\bar{X}$ |

という演算を施すということなので、すべての場合についてBobが受け取る論理状態は確かに、$\ket{\psi}$を符号化した状態、

```math
\ket{\psi_{L}} = \alpha \ket{0_L} + \beta \ket{1_L}  \tag{23}
```

となります。


## 誤り訂正の条件

任意の状態の符号化のやり方がわかったので、次にそれに雑音が加わったとしていかに誤り訂正ができるかという話に移ります。まず、量子状態に対する雑音についておさらいです。

### 量子雑音の定義

雑音は環境系からの相互作用の影響によって注目系に引き起こされる変化なので、以下のような量子チャネルで表現することができます。

```math
\ket{\Psi}\bra{\Psi} \rightarrow \sum_{i} E_{i} \ket{\Psi}\bra{\Psi} E_{i}^{\dagger}  \tag{24}
```

ここで、$\\{ E_i \\}$は雑音を表すKraus演算子で、

```math
\sum_{i} E_{i}^{\dagger} E_{i} = I  \tag{25}
```

を満たします。

1量子ビット状態に対する雑音は$2 \times 2$の複素行列で表現できるので、パウリ行列と複素数$c_0,c_1,c_2,c_3$を使って、

```math
E = c_0 I + c_1 X + c_2 Z + c_3 XZ  \tag{26}
```

のように展開できます[^10]。n量子ビット状態に対する雑音はこれのテンソル積なので、パウリ演算子のすべてのテンソル積、すなわちパウリ群のすべての要素の重ね合わせになります。誤り訂正を行う際には、後で説明しますが、間接測定によってどれかの状態に波束を収縮（射影）させておいて、回復処理を実行する形になりますので、雑音$E_i$をパウリ群の要素の（重ね合わせではなく）どれかだと仮定しておいても、一般性を失いません（と思います）。

[^10]: ちなみに、$c_0,c_1,c_2,c_3$が実数だとすると、任意の$2 \times 2$のエルミート行列を式(26)で表現できることになります（余談です）。いずれも証明は簡単です。

さて、このような雑音があったときに、どんな条件があればスタビライザー符号による誤り訂正が可能になるのでしょうか。ということを表明している定理があるので、次にそれを証明してみます。[以前の記事](https://qiita.com/SamN/items/650549224eb1f9b511fc)で誤り訂正可能条件を一般論として表した定理を証明しましたが、それをスタビライザー符号に限定した定理になります。一般論として語られた条件とは違って、今回証明する定理はスタビライザー符号を構築する際の一つの具体的な指針にもなるものです（と思います）。


### 定理：スタビライザー符号に対する誤り訂正条件

雑音集合$\\{ E_i \\}(E_i \in G_n, i=1,2,\cdots)$があったとします。ある与えられたスタビライザー群$S = \<g_1,g_2, \cdots, g_{n-k}\>$で規定されるスタビライザー符号$C(S)$によって誤り訂正が可能になるためには、$E_{i}^{\dagger} E_{j} \in G_n - N(S)$または$E_{i}^{\dagger} E_{j} \in S$でなければなりません[^11]。

[^11]: [ニールセン、チャン](https://www.ohmsha.co.jp/book/9784274200090/)には$E_{i}^{\dagger} E_{j} \notin N(S)-S$が誤り訂正可能条件であると記載されていますが同じことです。ちなみに$N(S) \supseteq S$であることはすぐ証明できます。$s_1,s_2 \in S \Rightarrow s_2 s_1 s_2 = s_1, s_1 s_2 s_1 = s_2 \Rightarrow s_1,s_2 \in N(S)$、したがって$N(S) \supseteq S$です。

では、証明してみます。

【証明】

$S$によって符号化された状態$\ket{\Psi} \in C(S)$があったとします。当然ですが$\ket{\Psi}$はスタビライザー群のすべての生成元$g_l$によってスタビライズされる状態になっています。とすると、これも当然ですが$\ket{\Psi}$のもとで生成元$g_l$を測定したとすると、測定値はすべて$+1$になります[^12]。

[^12]: $\ket{\Psi}$はすべてのオブザーバブル$g_l$の固有値$+1$に対応した固有空間たちの積空間上の状態なので、100%の確率ですべての測定値は$+1$になります。

いまこの$\ket{\Psi}$に雑音$E_i$が加わり$E_{i}\ket{\Psi}$になったとします。そうすると、この新しい状態のもとですべての生成元$g_l$を測定したとすると、もはや測定値がすべて$+1$になるということはありません。$E_{i}$と$g_l$が可換の場合測定値は$+1$となり、反可換の場合測定値は$-1$となります。その測定値系列が$\beta_{l}^{(i)} \in \\{ -1, +1 \\}$として得られたとします。そうすると、

```math
g_l E_i \ket{\Psi} = \beta_{l}^{(i)} E_i \ket{\Psi}  \tag{27}
```

という関係が成り立っているはずです。また別の雑音$E_j$に対しては、別の測定値系列$\beta_{l}^{(j)} \in \\{ -1, +1 \\}$が得られ、

```math
g_l E_j \ket{\Psi} = \beta_{l}^{(j)} E_j \ket{\Psi}  \tag{28}
```

という関係が成り立っているはずです。この測定値系列$\\{ \beta_{l}^{(i)} \\}$と$\\{ \beta_{l}^{(j)} \\}$が区別できるのであれば、2つの雑音$E_i$と$E_j$の効果を区別することができるということになります。その区別できる条件を調べるため、$E_{i}^{\dagger} E_{j}$が加わった状態のもとで$g_l$を作用させてみます。そうすると、

```math
g_l E_{i}^{\dagger} E_j \ket{\Psi} = \beta_{l}^{(i)} \beta_{l}^{(j)} E_{i}^{\dagger} E_j \ket{\Psi}  \tag{29}
```

となり、両辺に左から$(E_{i}^{\dagger} E_{j})^{\dagger}$をかけると、

```math
(E_{i}^{\dagger} E_{j})^{\dagger} g_l (E_{i}^{\dagger} E_j) \ket{\Psi} = \beta_{l}^{(i)} \beta_{l}^{(j)} \ket{\Psi}  \tag{30}
```

となります。

もし、$E_{i}^{\dagger} E_{j} \in G_n - N(S)$ならば、少なくとも1つの$l$に対して、

```math
(E_{i}^{\dagger} E_{j})^{\dagger} g_l (E_{i}^{\dagger} E_j) \ket{\Psi} = -g_l \ket{\psi} = -\ket{\psi} \tag{31}
```

となるので、このときの$l$に対して$\beta_{l}^{(i)} \beta_{l}^{(j)}=-1$、つまり$\beta_{l}^{(i)} $と$\beta_{l}^{(j)}$は異符号ということになります。これは$E_i$に対する測定値系列と$E_j$に対する測定値系列が区別できるということを意味するので、この場合誤り訂正は成功します。

もし、$E_{i}^{\dagger} E_{j} \in N(S)$だとすると、すべての$g_l$に対して、

```math
(E_{i}^{\dagger} E_{j})^{\dagger} g_l (E_{i}^{\dagger} E_j) \ket{\Psi} = g_l \ket{\psi} = \ket{\psi} \tag{32}
```

となり、すべての$l$に対して$\beta_{l}^{(i)} \beta_{l}^{(j)}=1$、つまり同符号ということになります。これは$E_i$に対する測定値系列と$E_j$に対する測定値系列が区別できないということを意味するので、この場合誤り訂正は失敗します。しかし、$E_{i}^{\dagger} E_{j} \in S$の場合は、

```math
\begin{align}
& E_{i}^{\dagger} E_{j} \ket{\Psi} = \ket{\Psi} \\
& E_{j} \ket{\Psi} = E_{i} \ket{\Psi} \tag{33}
\end{align}
```

となり、$E_{i}$と$E_{j}$の雑音の効果は全く同じ状態を生むので、どっちを検知したとしても同じように訂正可能です。したがってこの場合誤り訂正は成功します。（証明終）[^13]

[^13]: [ニールセン、チャン](https://www.ohmsha.co.jp/book/9784274200090/)よりも[量子情報工学](https://www.morikita.co.jp/books/book/3109)の証明の方がわかりやすかったので、そちらをベースに証明を組み立ててみました。

### 符号の距離と訂正可能なビット数

スタビライザー符号$C(S)$に対して誤り訂正が可能となる雑音条件がわかりましたが、何ビットの誤りまで訂正可能かについては特に定理では言及していません。実は、古典線形符号のように符号の距離と訂正可能ビット数は関係づけられます。古典線形符号では符号の距離は任意の符号間のHamming距離の最小値と定義されていました[^14]。これと同じようにスタビライザー符号$C(S)$の距離を定義できます。

[^14]: 古典線形符号に関する[以前の記事](https://qiita.com/SamN/items/4a02d8bba4f1df46ef2f)を参照。

$\ket{\Psi} \in C(S)$は、

```math
\ket{\Psi} = \sum_{x_1=0,1} \sum_{x_2=0,1} \cdots \sum_{x_k=0,1} c(x_1,x_2, \cdots , x_k) \ket{x_1 x_2 \cdots x_{k}}^{L}  \tag{34}
```

と表すことができます。古典線形符号とのアナロジーにより、この符号状態$\ket{\Psi}$に何らかの演算子$U$を作用させて異なる符号状態を得るとき、影響を受ける物理ビット数の最小値を符号$C(S)$の距離と考えることができます。$U \in S$とすると符号状態は変化しません。$U \in N(S)-S$を作用させると符号状態は符号空間$C(S)$上を動きます。このとき、影響を受ける物理ビット数の最小値は論理ビット1ビット分と考えると、$U \in N(S)-S$に含まれる$I$ではない演算子のテンソル積の因子数（「重み」と呼びます）で符号の距離を評価できます。例えば$U = X_1 Z_2 Y_3$の場合その重みは$3$であり、この$U$によって影響を受ける物理ビット数は$3$です[^15]。つまり、$U$によって状態は距離$3$だけ移動したと見なせます。このような考えのもと、符号$C(S)$の距離を「$N(S)-S$に含まれる演算子の最小重み」として定義します。符号の距離が定義できれば、後は古典線形符号と同様に距離$2t+1$を有する符号によって、$t$量子ビットまでの誤りが訂正できると言うことができます。

[^15]: 反転する物理ビットの数ではなく、影響を受けるヒルベルト空間の次元に相当するビット数と思えば良いです。いまの例の場合、1番目と2番目と3番目の量子ビットに相当するヒルベルト空間の次元が$U$による影響を受けますが、その他の次元は影響を受けません。


## 誤り訂正の動作

スタビライザー符号の構成法と誤り訂正可能条件が理解できたので、次に雑音が加わったときにどうやれば誤りを検知して回復することができるかを説明します。実は、誤り訂正可能条件を証明するところで、ほぼ説明ができています。

ある与えられたスタビライザー群$S = \<g_1,g_2, \cdots, g_{n-k}\>$に対応したスタビライザー符号$C(S)$によって符号化されている状態$\ket{\Psi} \in C(S)$があったとします。それに雑音$\\{ E_i \\}(E_i \in G_n, i=1,2,\cdots)$が加わったとします（ただし、$\\{ E_i \\}$は誤り訂正可能条件を満たしています）。どんな誤りが加わったかは、$S$の生成元を測定して測定値系列$\\{ \beta_l \\}(l=1,2,\cdots , n-k)$を取得し、それが、

```math
E_{i} g_{l} E_{i}^{\dagger} = \beta_{l}^{(i)} g_{l}  \tag{35}
```

で決まる$i$番目の雑音に対応した系列$\\{ \beta_{l}^{(i)} \\}$のどれと一致するかを調べることで、加わっている雑音の番号を得ることができます。その番号が$j$だったとすると逆演算$E_{j}^{\dagger}$を状態に施すことでもとの状態を得ることができます。

量子回路で書いてみます。

```
|0>   --H--*-------------------------H---M
|0>   --H--|--------*----------------H---M
|0>   --H--|--------|--------*-------H---M
           |        |        |           |
|Psi> ---|   |----|   |----|   |-...---|   |
      ---|g1 |----|g2 |----|g3 |-...---|E+ |
      ---|   |----|   |----|   |-...---|   |
      ...                           ...
```

生成元の個数分($n-k$個)のアンシラを用意して各生成元について間接測定を実行します（上図では3個しか書いていませんが）。測定によって$n-k$個の結果が得られますが、それがどの雑音$E_i$に相当するのかを判断してそれに応じた逆演算を実行します（上図では複数のMにつながっているE+と省略しました）。これで誤り訂正が完了します。


## いくつかの実例

最後に、いくつかの誤り訂正方式がスタビライザー符号のスキームで記述できることを示すため、各種方式について生成元の具体的な形と論理パウリZおよび論理パウリX演算子の一例を紹介します。5量子ビット符号ついては、今回初登場です。量子Hamming限界を説明した[以前の記事](https://qiita.com/SamN/items/650549224eb1f9b511fc#fn12)で、1量子ビットを符号化するのに最低限必要な物理ビット数は5であるという証明をしたのですが、具体的な符号については触れていませんでした。その生成元も最後に記載しておきます[^16]。

[^16]: しかし、どのようにしてこのような生成元がひねり出されたのかわかりません。すみません、勉強しときます、汗。

### 9量子ビットShor符号

|           | 演算子      |
|-----------|-------------|
| $g_1$     | $ZZIIIIIII$ |
| $g_2$     | $IZZIIIIII$ |
| $g_3$     | $IIIZZIIII$ |
| $g_4$     | $IIIIZZIII$ |
| $g_5$     | $IIIIIIZZI$ |
| $g_6$     | $IIIIIIIZZ$ |
| $g_7$     | $XXXXXXIII$ |
| $g_8$     | $IIIXXXXXX$ |
| $\bar{Z}$ | $ZZZZZZZZZ$ |
| $\bar{X}$ | $XXXXXXXXX$ |


### 7量子ビットSteane符号

|           | 演算子    |
|-----------|-----------|
| $g_1$     | $IIIXXXX$ |
| $g_2$     | $IXXIIXX$ |
| $g_3$     | $XIXIXIX$ |
| $g_4$     | $IIIZZZZ$ |
| $g_5$     | $IZZIIZZ$ |
| $g_6$     | $ZIZIZIZ$ |
| $\bar{Z}$ | $ZZZZZZZ$ |
| $\bar{X}$ | $XXXXXXX$ |


### 5量子ビット符号

|           | 演算子  |
|-----------|---------|
| $g_1$     | $XZZXI$ |
| $g_2$     | $IXZZX$ |
| $g_3$     | $XIXZZ$ |
| $g_4$     | $ZXIXZ$ |
| $\bar{Z}$ | $ZZZZZ$ |
| $\bar{X}$ | $XXXXX$ |


## おわりに

これでスタビライザー符号に関する理論説明は終了です（お疲れ様でした！）。

が、数式展開とか定理の証明ばかりで、わかるにはわかるのですが、本当にこの通りに動作するものなのか、なんとなく手触りのような感覚がつかめません。というわけで、次回は楽しいプログラミングの時間です。スタビライザー符号のどれかを取り上げ、シミュレータで本当に誤り訂正ができるのかを確認してみます。


以上