Toric codeによる量子エラー訂正

量子コンピューターでも古典コンピューターと同様にノイズの影響で各量子ビットの情報が消えてしまうことがあります。その発生をチェックするためにはエラー訂正という仕組みが必要ですが、まだそのようなシステムは実用化に至っていないのが量子コンピューターにとって痛いところですね。。。しかしそうした研究は進んでいて、ホットトピックの１つであるトポロジカル量子誤り訂正の原理をご紹介したいと思います。これはToric codeと呼ばれています。

### 記号
$X,Y,Z$をパウリ行列、$I$を単位行列とします。
$n$量子ビットのシステムを考えて全体の状態空間を

```math
\Omega = \{ |\sigma_1\sigma_2\cdots\sigma_n\rangle \mid \sigma_i = \pm1\}
```

とします。

# Toric code ハミルトニアン
ボンド上に量子ビットがあるシステムで次のように表されるハミルトニアンを使います。

```math
H_{TC} = -J_e \sum_{vertex} A_s - J_m \sum_{plaquettes}B_p \\
A_s = \prod_{i \in star(s)} X_i \\
B_p = \prod_{i \in boundary(p)} Z_i
```
$A$や$B$は例えば正方格子上では次のようなものです(緑が$A$、青が$B$)。
$s$は濃い色の格子点、$p$は各正方形の中心(＝薄い色の格子(双対格子)の格子点)です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2445529/0b2e9ee4-af15-8803-fa27-d12442baa0ab.png)
F.H.E. Watson et. al., New J. Phys., 16 093045 (2014)より引用

ここで全ての$A,B$は可換であるという特徴があります：

```math
[A_v,B_p]=0
```

## キタエフ模型
$H_{TC}$のような模型を近似的に実現できる模型として例えばキタエフ模型があります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2445529/d21ccc21-422d-e6b1-e348-960663331ca1.png)
Kitaev, Alexei, Annals of Physics. 321 (1): 2–111 (2006)より引用

```math
H_{Kitaev} = -J_x \sum_{(i,j) : x-link} X_i X_j -J_y \sum_{(i,j) : y-link} Y_i Y_j -J_z \sum_{(i,j) : z-link} Z_i Z_j 
```

これを

```math
H_0 = -J_z \sum_{(i,j) : z-link} Z_i Z_j \\
V = -J_x \sum_{(i,j) : x-link} X_i X_j -J_y \sum_{(i,j) : y-link} Y_i Y_j
```

として$V$についての4次摂動をとり、zリンクを潰します。すると次図のようになり、

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2445529/391b118e-8cdb-0dbf-65fd-8edfdf366ad6.png)
Kitaev, Alexei, Annals of Physics. 321 (1): 2–111 (2006)より引用

適当なユニタリ変換によって摂動ハミルトニアンは

```math
H_{eff} = -\frac{J_x^2J_y^2}{16|J_z|^3} \left( \sum_{vertex} A_s + \sum_{plaquettes}B_p \right)
```

となります。

# スタビライザー形式
量子誤り訂正の方法としてスタビライザーコードというものがあります。

## スタビライザー群

複数の量子ビットに対するパウリ行列のテンソル積全体の集合

```math
\mathcal{P}_n = \{ \pm1, \pm i \} \times \{ I, X, Y, Z \}^{\otimes n}
```

をパウリ群と呼びます。その部分群$\mathcal{S}_n \subset \mathcal{P}_n$が

```math
-I \notin \mathcal{S}_n \\
\forall S_i \in \mathcal{S}_n, \quad S^\dagger_i = S_i \\
\forall S_i, S_j \in \mathcal{S}_n, \quad [S_i,S_j]=0
```


を満たすときスタビライザー群と呼びます($I \otimes \cdots \otimes I$を略して$I$としています)。先のトーリックコードハミルトニアンで出てきた$A,B$もスタビライザー群の元になっています。

また

```math
\forall S_i \in \mathcal{S}_n, \quad |\Psi\rangle = S_i |\Psi\rangle
```

を満たす状態$|\Psi\rangle$をスタビライザー状態と呼びます。スタビライザー状態全体がなすベクトル空間をスタビライザー空間$V_s$と言います。

$G \subset \mathcal{S}_n$のとき、$G$の元の積で$\mathcal{S}_n$のすべての要素が表されるとします：

```math
\forall S_i \in \mathcal{S}_n, \quad \exists \{G_j\} \subset G, \quad S_i = \prod_{ \{G_j\} } G_j
```

このような$G$で最小のものを群の生成系と言います($S_i^2=1$なので逆元は考えません)。これを

```math
\mathcal{S}_n = \langle G \rangle
```
と書くことにします。

このとき、スタビライザー空間$V$の次元は

```math
dim V_s = 2^{n-|G|}
```

また各$G_i \in G$の固有値は$\pm 1$で、$G_i$の固有値が$g_i$である固有空間を$W(g_1,g_2,\cdots,g_{|G|})$とすると、

```math
\Omega = \bigotimes_{ \{g_1,g_2\cdots,g_{|G|}\} }W(g_1,g_2\cdots,g_{|G|})
```

となります。この意味ではスタビライザー空間は$V_s=W(1,1,\cdots,1)$となります。


## スタビライザー符号
もしエラー$E$が起こる（＝ノイズで異なるエネルギーの状態に遷移する）とどうなるでしょうか？これは別の固有空間に飛ぶということなので仮にそれが$g_i=-1$の空間だったとすると$G_i$を作用させると符号が反転していることになります。これによってエラーが起こるかどうかが判定できます(反転する固有値は1個だけとは限りません)。

## 論理演算子

```math
\mathcal{L}_n = \{ L_i \in \mathcal{P}_n - \mathcal{S}_n \mid \forall S_j \in \mathcal{S}_n, \quad [L_i,S_j]=0 \}
```

の元を論理演算子と言います。$L_i \in \mathcal{L}_n$対応する操作が入ることによって縮退が解けて固有空間が更に分裂します。

```math
W(g_1g_2\cdots g_{|G|}) \rightarrow W(g_1g_2\cdots g_{|G|};l_i=-1)\oplus W(g_1g_2\cdots g_{|G|};l_i=+1)
```
## 符号距離

```math
d = \min_{L_i \in \mathcal{L}_n}\{ \text{$L_i$に含まれるパウリ演算子の個数} \}
```
を符号距離(古典コンピューターでいうところの最小ハミング距離)と言います。
古典コンピューターと同様に訂正可能なエラーの個数は最大で

```math
\frac{d-1}{2}
```
です。

## Toric codeのスタビライザー形式
Toric codeの場合でスタビライザー形式はどうなるのか見てみましょう。
スタビライザー群は

```math
G = \{ A_s,B_p \mid \text{s,p: cross points of (dual) lattice} \} \\
\mathcal{S}_n = \langle G \rangle
```
です。

次に論理演算子を考えます。
格子(双対格子)上の経路$c(\bar{c})$に対して

```math
Z(c) \equiv \prod_{s \in c} Z_s \\
X(\bar{c}) \equiv \prod_{p \in \bar{c}} X_p \\ 
```

とします。ホモロジー風に書くと$K$を元の格子の単体的複体、$\bar{K}$を双対格子の単体的複体として

```math
c \in C(K) \\
\bar{c} \in C(\bar{K})
```

です。ホモロジーについては

https://qiita.com/hiro949/items/9c793415313be6312154

を参照してください。

さて、これらの中で端のない経路$c,\bar{c}$に対して$Z(c),X(\bar{c})$が論理演算子となります($\partial c=0$ということ)。端があるとなぜいけないのかを次図の例で見てみましょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2445529/ce69dd65-7840-9b08-c5fa-ec5584a17dea.png)
F.H.E. Watson et. al., New J. Phys., 16 093045 (2014)より引用

緑の点線の経路$\bar{c}$に対して考えます。
まず$A_s$は同じ$X$で構成されているので問題ありません。
$B_p$でも$p$が$\bar{c}$の途中の点のとき、$X(\bar{c})$のうちの2つの$X$が$B_p$と非可換なので、両方と入れ替えると可換になるのでOKです。しかし$p$が$\bar{c}$の端の点であるとき、$B_p$(上図の青い正方形)と非可換な$X(\bar{c})$中の$Z$は1つだけです。よって非可換になってしまい、論理演算子の条件に引っかかってしまいます。つまりホモロジーでいうところの輪体$\mathcal{Z}(K)$に対して

```math
\{ Z(c),X(\bar{c}) \mid c \in \mathcal{Z}(K), \bar{c} \in \mathcal{Z}(\bar{K}) \} \supset \mathcal{S}_n
```

の元が論理演算子の候補となります。しかしこの中には式にある通り、スタビライザー群やその要素の積も含まれています。$\mathcal{S}_n$は取り除かなければいけません。\mathcal{S}_nは閉路に対する$Z(c),X(\bar{c}$です。つまり、ホモロジーでいうところの境界輪体の元$c \in \mathcal{B}(K),\bar{c} \in \mathcal{B}(\bar{K})$です。よって

```math
\mathcal{S}_n = \{ Z(c),X(\bar{c}) \mid c \in \mathcal{Z}(B), \bar{c} \in \mathcal{B}(\bar{K}) \}
```

といえます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2445529/44837e10-1408-d831-c03c-ce4be910212e.png)
F.H.E. Watson et. al., New J. Phys., 16 093045 (2014)より引用

したがって論理演算子は$\mathcal{Z}(K),\mathcal{Z}(\bar{K})$の元ではあるが、$\mathcal{B}(K),\mathcal{B}(\bar{K})$ではない経路に対する$X,Z$の積です。これはまさにホモロジー$\mathcal{H}(K),\mathcal{H}(\bar{K})$に対応しています。
今の例では周期的境界の正方格子=トーラスを考えています。トーラスのホモロジーは2次元でそれぞれ

```math
\mathcal{H}(K)= Span([c^L_1],[c^L_2]) \\
\mathcal{H}(\bar{K}) = Span([\bar{c}^L_1],[\bar{c}^L_2])
```
($c^L_1,c^L_2$は縦(横)の一直線)であるとすると、

論理演算子は

```math
\mathcal{L}_n = \{ Z(c),X(\bar{c}) \mid c \in h \in \mathcal{H}(K), \bar{c} \in h \in \mathcal{H}(\bar{K}) \} 
```
となります。

```math 
\{ Z(c^L_1),Z(c^L_2), X(\bar{c}^L_1), X(\bar{c}^L_2) \}
```

の4種類がベースになっています。
符号距離は格子のサイズが一辺長$N$だとすると、$c^L(\bar{c}^L)$の長さが$N$なので$d=N$です。

# Toric codeのエラー訂正
先に議論したようにエラーはエッジのある経路に対する$Z(c),X(\bar{c})$で表されます。

```math
\mathcal{E} = \{ Z(c),X(\bar{c}) \mid \partial c\neq 0, \partial \bar{c} \neq 0\}
```
## 成功例

ここでは大阪大学の藤井先生が( https://quantphys.org/wp/qinfp/%E9%87%8F%E5%AD%90%E3%82%B3%E3%83%B3%E3%83%94%E3%83%A5%E3%83%BC%E3%83%86%E3%82%A3%E3%83%B3%E3%82%B0-%E6%9C%882-%E5%A4%A7%E5%AD%A6%E9%99%A2%E6%8E%88%E6%A5%AD/ )で紹介されていた例を追っていきます。
以下、用いる図はここからの引用です。

あるエラー$X(\bar{c})$が起きた場合でやってみましょう(下図)。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2445529/bbaacb9f-05d8-1816-60d6-24add210171d.png)

水色のビットで$X$エラーが起きているとします。すると双対格子上で青線の経路$\bar{c}$の端点のプラケット$B_p$(紫の正方形)の固有値が$-1$になります。

ここからわかる情報は次図のようなものです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2445529/b5d40001-cc44-e846-0afb-08dd26b6b4fd.png)

これを元にどこのビットでエラーが起きているかを推定しなければなりません。

例えば次にようにエラーの経路$\bar{c}'$を推定したとします。これは最小重み完全マッチング問題として解くことができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2445529/ee3623d8-e45f-309b-eaa4-2de21c8f838f.png)

$\bar{c}'$は一部間違っていますね...
しかし$X(\bar{c}')$を作用させて修復したとしても残ったエラー$\bar{c}-\bar{c}'$は
次図のようになり

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2445529/895ea79a-b902-f63b-fe92-954de7297e5f.png)

これは$A_{s_1}A_{s_2}$のようになっていてスタビライザー状態を変えない演算子です。
つまり$\bar{c}-\bar{c}' \in \mathcal{B}(\bar{K})$ならOKです。

ここでエラーの経路$\bar{c}$と修復の経路$\bar{c}'$について両方とも該当する格子の点を全て端点に持ち、それ以外に端点はありません。つまり

```math
\partial \bar{c} = \partial \bar{c}' \\
\Leftrightarrow \partial (\bar{c} - \bar{c}') = 0 \\
\Leftrightarrow (\bar{c} - \bar{c}') \in \mathcal{Z}(\bar{K})
```

です。

よってホモロジーが非自明なために$\bar{c} - \bar{c}' \notin \mathcal{B}(\bar{K})$となって訂正に失敗する場合が存在します。次はその例を見てみましょう。

## 失敗例
図のような$Z$エラーを考えます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2445529/9cbb96a5-73e6-3515-9547-0974a639af72.png)
F.H.E. Watson et. al., New J. Phys., 16 093045 (2014)より引用

今度は$A_s$の固有値が$-1$になっている箇所があります。そこで次のようにエラーの経路を推定したとします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2445529/8b287617-7089-e75a-6bc6-3867595e80e1.png)
F.H.E. Watson et. al., New J. Phys., 16 093045 (2014)より引用

すると訂正後に残るエラーは

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2445529/33195dec-810b-28b9-bcd2-6dddbc74b41c.png)
F.H.E. Watson et. al., New J. Phys., 16 093045 (2014)より引用

となりこれは論理演算子を作用させた状態になります。これはスタビライザーでも検出できず、取り除くことができないエラーです。これをロジカルエラーといい、ロジカルエラーが起きたら訂正失敗です。

# 関連
実際の計算でこの謝り耐性を組み込むやり方を以下の記事で紹介しています。

https://qiita.com/hiro949/items/5ca55036d6f57251836f

# 参考
- https://www.sciencedirect.com/science/article/pii/S0003491605002381
- https://quantphys.org/wp/qinfp/%e6%8e%88%e6%a5%ad/
- https://qipconference.org/2009/talks/4-Bravyi-QIP-2009.pdf
- https://iopscience.iop.org/article/10.1088/1367-2630/16/9/093045/meta