表面符号の lattice surgery

物理量子ビットで何を測り、どの安定化子を切り替え、なぜそれが論理量子ビット上の Pauli 積測定、CNOT、状態分割・結合になるのかを、CSS stabilizer 代数と時空間 decoding の両方から追う。

対象:surface code の stabilizer と decoder を既知とする 数式:MathJax 図:SVG + JavaScript 主対象:rotated / planar patch の局所 lattice surgery

0. 前提・記法・境界名の約束

ここでは「表面符号の stabilizer 測定、MWPM などの decoding、logical operator の同値類」は理解しているものとして、lattice surgery 固有の論理・物理対応だけを詳細に扱う。

最初に最重要の約束。 文献・実装・図の取り方で rough / smoothX / Z boundary の呼び方が入れ替わることがある。したがって本文では、境界名だけでなく、必ず「測る論理 Pauli 積」を併記する。Horsman–Fowler–Devitt–Van Meter の元論文の流儀に合わせ、以下を基本 convention とする。
本文の名前物理的な切替論理的に測られる量split で測り捨てる seam data
rough merge
本文では MXX とも呼ぶ
中間 data qubit を \(\ket{0}\) に準備し、境界をまたぐ新しい \(X\)-type check を有効化する。 \(\bar X_A\bar X_B\) \(Z\) basis
smooth merge
本文では MZZ とも呼ぶ
中間 data qubit を \(\ket{+}\) に準備し、境界をまたぐ新しい \(Z\)-type check を有効化する。 \(\bar Z_A\bar Z_B\) \(X\) basis

この表で一見「\(\ket{0}\) を用いるのに \(\bar X\bar X\) を測る」「\(\ket{+}\) を用いるのに \(\bar Z\bar Z\) を測る」ように見えるのが混乱の主因である。中間 qubit の準備 basis は「消す・貼る境界の stabilizer 整合性」のためであり、論理 Pauli 積は「新しく有効化された seam check 群の積が、元の 2 パッチ上でどの非自明 logical string と同値か」で決まる。

以下、物理 qubit を data qubit と syndrome ancilla に分ける。data qubit 集合を \(D\)、check ancilla 集合を \(A_X\cup A_Z\) と書く。1 回の syndrome extraction cycle を「1 ラウンド」と呼び、符号距離を \(d\) とする。logical operator は \(\bar X,\bar Z\) と表す。測定値は符号 \(s\in\{+1,-1\}\) または bit \(m\in\{0,1\}\) で表し、\(s=(-1)^m\) と対応させる。

1. 一行でいうと何をしているか

Lattice surgery は、surface-code patch の境界をまたぐ stabilizer 測定を一時的にオン・オフすることで、logical Pauli product を fault-tolerant に測定する code deformationである。

\[ \text{merge} \;\simeq\; \Pi_{s}^{\bar P_A\bar P_B} = \frac{I+s\,\bar P_A\bar P_B}{2}, \qquad \bar P\in\{\bar X,\bar Z\}. \]

重要なのは、通常の量子ゲートのように「data qubit 間に CNOT を横断的に打つ」わけではない点である。量子ハードウェア上で行うことは、局所的にはいつもの stabilizer extraction と同じで、違うのは境界付近の check の support と、何ラウンド分の測定 record をどの logical observable として decoder に渡すかである。

物理レベル

中間 data qubit を \(\ket{0}\) または \(\ket{+}\) に初期化し、境界をまたぐ check ancilla を有効化する。以後 \(d\) ラウンド程度、合体後の大きな patch として syndrome を測る。

stabilizer レベル

旧 stabilizer 群 \(S_A S_B\) に seam check 群を加える。この群の積が、旧符号空間上で \(\bar X_A\bar X_B\) または \(\bar Z_A\bar Z_B\) と等価になる。

論理レベル

2 論理 qubit は logical parity で射影される。merge のみなら \(k=2\to1\) で非ユニタリ。merge-split にすると、2 qubit を保持したまま Pauli 積測定になる。

2. パッチ、論理演算子、境界

距離 \(d\) の rotated planar patch を念頭に置く。標準的には data qubit は \(d^2\) 個、独立 stabilizer は \(d^2-1\) 個で、\([[d^2,1,d]]\) の CSS 符号と見なせる。実装図では境界 check が weight 2 または weight 3、内部 check が weight 4 になることが多い。

CSS stabilizer 群を

\[ S = \langle S_X, S_Z\rangle, \qquad S_X=\{X(f)=\prod_{q\in f} X_q\},\quad S_Z=\{Z(g)=\prod_{q\in g} Z_q\} \]

と書く。ここで \(f,g\) は checkerboard plaquette / vertex / face の集合である。logical operator は stabilizer を掛けても同じ論理作用を持つ同値類であり、例えば

\[ \bar X \sim \prod_{q\in \gamma_X}X_q,\qquad \bar Z \sim \prod_{q\in \gamma_Z}Z_q, \qquad \bar X\bar Z=-\bar Z\bar X \]

で、\(\gamma_X\) と \(\gamma_Z\) は互いに奇数回交差する非自明 string である。

2.1 境界の物理的意味

境界は「ある種の anyon/string の端点が消える場所」である。直感的には、ある Pauli string が境界で終端しても syndrome を出さないなら、その string はその境界同士を結ぶ logical operator になれる。lattice surgery は、この境界を貼り合わせる、または切る操作である。

境界名より操作を優先する。 実装者として重要なのは「どの境界を隣接させると、どの seam check 群の積が \(\bar X_A\bar X_B\) か \(\bar Z_A\bar Z_B\) になるか」である。したがって compile layer では、rough/smooth という自然言語ラベルよりも、measure XX / measure ZZ のように logical observable で管理する方が事故が少ない。

2.2 stabilizer extraction circuit の基準

各 check \(C=\prod_j P_j\) は、syndrome ancilla を介して測る。典型的な CNOT 型回路は次の通りである。

checkancilla 初期化二量子ビット gateancilla 測定出力
\(Z_{q_1}\cdots Z_{q_w}\)\(\ket{0}\)data \(q_j\) を control、ancilla を target とする CNOT\(Z\)\(\prod_j Z_{q_j}\)
\(X_{q_1}\cdots X_{q_w}\)\(\ket{+}\)ancilla を control、data \(q_j\) を target とする CNOT\(X\)\(\prod_j X_{q_j}\)

実機では CZ + basis rotation、Echoed cross-resonance、MS gate などで同等回路を組むことがあるが、stabilizer と detector の意味は同じである。hook error を距離低下に変えないため、各 plaquette の CNOT 順序は通常の rotated surface code と同様に向きをそろえる。seam check を追加したときも、この hook の向きが logical operator の短い方向に伸びないよう schedule を設計する。

3. merge / split の stabilizer 代数

3.1 merge は logical Pauli product の射影

2 つの patch \(A,B\) がそれぞれ 1 logical qubit を持つとする。merge の前の stabilizer 群は

\[ S_{\rm before}=S_A\times S_B, \qquad k_{\rm before}=2. \]

境界を貼ると、合体後の大きな surface code の stabilizer 群 \(S_{\rm merge}\) を測る。旧境界付近の check は support が変わり、seam をまたぐ新しい check 群 \(G_{\rm seam}\) が有効化される。この \(G_{\rm seam}\) の積、または stabilizer を掛けて変形した積が、旧符号空間上で logical Pauli product と同値になる。

\[ \prod_{g\in G_{\rm seam}^{(X)}} g \equiv \bar X_A\bar X_B \pmod{S_A S_B}, \qquad \prod_{g\in G_{\rm seam}^{(Z)}} g \equiv \bar Z_A\bar Z_B \pmod{S_A S_B}. \]

したがって seam check の corrected product が \(s\) なら、論理状態には射影

\[ \Pi_s^{XX}=\frac{I+s\bar X_A\bar X_B}{2} \quad\text{または}\quad \Pi_s^{ZZ}=\frac{I+s\bar Z_A\bar Z_B}{2} \]

が作用する。merge したままなら stabilizer に logical product が追加されるため、独立 logical qubit 数は \(2\to1\) に減る。

3.2 \(M_{XX}\) / rough merge の論理演算子写像

測定 outcome を \(s=(-1)^m\) とする。\(M_{XX}\) merge 後は \(s\bar X_A\bar X_B\) が stabilizer として固定される。新しい 1 logical qubit の代表を

\[ \bar X_M=\bar X_A, \qquad \bar Z_M=\bar Z_A\bar Z_B \]

と選べる。このとき \(\bar X_B=s\bar X_A\) は Pauli frame 上の同値として扱う。反交換は

\[ \bar X_M\bar Z_M =\bar X_A(\bar Z_A\bar Z_B) =-(\bar Z_A\bar Z_B)\bar X_A =-\bar Z_M\bar X_M \]

なので、確かに 1 logical qubit が残る。

計算基底で状態写像を書く。入力を

\[ \ket{\psi}_A=\alpha\ket{0}+\beta\ket{1}, \qquad \ket{\phi}_B=\alpha'\ket{0}+\beta'\ket{1} \]

とする。\(XX\) parity outcome \(s\) の射影後、merged qubit の基底を

\[ \ket{0}_M \leftrightarrow \frac{\ket{00}+s\ket{11}}{\sqrt2}, \qquad \ket{1}_M \leftrightarrow \frac{\ket{01}+s\ket{10}}{\sqrt2} \]

と定義すれば、merged state は

\[ \ket{\psi}\;M_{XX}^{(s)}\;\ket{\phi} \propto (\alpha\alpha'+s\beta\beta')\ket{0}_M +(\alpha\beta'+s\beta\alpha')\ket{1}_M. \]

これは「\(XX\) parity を測ったあと、2 qubit の parity sector を 1 qubit の logical space として再解釈する」ことに等しい。

3.3 \(M_{ZZ}\) / smooth merge の論理演算子写像

双対性 \(X\leftrightarrow Z\) により、\(M_{ZZ}\) merge では \(s\bar Z_A\bar Z_B\) が stabilizer として固定される。代表を

\[ \bar Z_M=\bar Z_A, \qquad \bar X_M=\bar X_A\bar X_B \]

と選べる。Hadamard basis で書けば

\[ \ket{+}_M \leftrightarrow \frac{\ket{++}+s\ket{--}}{\sqrt2}, \qquad \ket{-}_M \leftrightarrow \frac{\ket{+-}+s\ket{-+}}{\sqrt2}. \]

3.4 merge はユニタリではない

merge は \(k=2\to1\) なので、2 logical qubit の完全な情報を 1 logical qubit に保存するユニタリではない。これは欠点ではなく、Pauli product measurement として使うための機能である。merge したままなら logical parity で射影して自由度を 1 つ捨てる。merge の後に split すれば、2 logical qubit を再び持ちながら、その Pauli product 測定結果だけを得る。

4. 物理量子ビットレベルの操作

ここが lattice surgery の中核である。以下では 2 つの距離 \(d\) patch \(A,B\) が、1 data-qubit 幅の routing/seam 領域を挟んで隣接しているとする。実装によっては seam 領域を常時配置し、普段は測らない qubit としてアイドルさせる。別の実装では空き qubit を動的に割り当てる。

4.1 merge 前の状態

  1. patch \(A\) と patch \(B\) は独立に syndrome extraction を回している。
  2. それぞれの patch の境界 stabilizer は、境界のため weight が小さい。seam 領域の qubit は stabilizer に含まれていないか、リセットされたアイドル qubit として扱われる。
  3. decoder は \(A\) と \(B\) の matching graph を別々、またはブロック対角な graph として扱ってよい。

4.2 \(M_{XX}\) / rough merge の物理手順

目的は \(\bar X_A\bar X_B\) を測ること。手順は次である。

0独立 patch として通常 syndrome
1seam data を \(\ket{0}\) に reset / prepare
2境界をまたぐ \(X\)-type seam check をオン
3合体 patch として \(d\) ラウンド syndrome
4corrected first-round seam product から \(\bar X_A\bar X_B\) を読む
5必要なら \(Z\) basis split で再分離

Step 1:中間 data qubit の \(\ket{0}\) 準備

seam の data qubit \(r_1,\dots,r_\\ell\) を物理 \(Z\) basis で初期化する。

\[ Z_{r_i}\ket{0}_{r_i}=+\ket{0}_{r_i}. \]

測定リセットが使えるなら \(Z\) 測定 outcome に応じて conditional \(X\) correction か Pauli frame update を行う。active reset がなければ、測定値を記録し、必要な stabilizer sign と logical frame に吸収する。中間 qubit はまだ logical 情報を持たない。

Step 2:seam check の有効化

境界付近の syndrome ancilla の隣接リストを変更する。具体的には、旧境界で切れていた \(X\)-type check を、seam data と反対側 patch の data を含む check に置き換える。rotated code では境界や角により weight 2, 3, 4 の check が混在するが、抽象的には

\[ X(f)_{\rm old,left},\;X(f')_{\rm old,right} \quad\leadsto\quad X(h)_{\rm seam}=\prod_{q\in h}X_q \]

という変更である。ここで \(h\) は seam をまたぐ plaquette / vertex の support である。bulk check はそのまま測り続ける。\(Z\)-type check については、合体後の surface code の定義に従って seam data を含む通常 check を測る。重要なのは、以後 decoder には「2 つの patch」ではなく「1 つの合体 patch」の check layout を渡すことである。

Step 3:\(d\) ラウンドの合体 syndrome

1 ラウンドごとに以下を実行する。

  1. 全 \(X\)-check ancilla を \(\ket{+}\) に、全 \(Z\)-check ancilla を \(\ket{0}\) に reset する。
  2. 通常の hook-safe schedule に従い、各 check の support 上の data qubit と ancilla の間で局所 2-qubit gate を行う。
  3. ancilla を対応 basis で測定し、syndrome bit を記録する。
  4. 連続ラウンドの syndrome 差分から detection event を作る。ただし seam check の最初の測定は merge によって新規生成された check なので、過去値との差分ではなく時空間 boundary に接続する。

logical parity の raw value は、原理的には 最初の merge ラウンドで得られた seam \(X\)-check 群の積である。ただし測定誤りや data error があるので、この raw product は decoder correction によって flip され得る。

\[ m_{XX}^{\rm decoded} = \bigoplus_{g\in G_{\rm seam}^{X}} m_g(t_0) \oplus \operatorname{obsFlip}(\widehat E), \]

ここで \(t_0\) は merge 後最初の syndrome round、\(\widehat E\) は decoder が推定した error chain、\(\operatorname{obsFlip}\) はその error chain が chosen logical observable と反交換するかを表す bit である。

Step 4:merge 後の logical frame

merge 後に 1 つの patch として保持するなら、\(\bar X_A\bar X_B=(-1)^{m_{XX}}\) を stabilizer sign として記録する。物理的な correction は原則として行わず、以後の logical operator の代表と measurement interpretation を更新する。

4.3 \(M_{ZZ}\) / smooth merge の物理手順

完全に双対である。目的は \(\bar Z_A\bar Z_B\) の測定。

0独立 patch として通常 syndrome
1seam data を \(\ket{+}\) に reset / prepare
2境界をまたぐ \(Z\)-type seam check をオン
3合体 patch として \(d\) ラウンド syndrome
4corrected first-round seam product から \(\bar Z_A\bar Z_B\) を読む
5必要なら \(X\) basis split で再分離

seam data の準備は

\[ X_{r_i}\ket{+}_{r_i}=+\ket{+}_{r_i}. \]

新しく有効化するのは seam をまたぐ \(Z\)-type check 群であり、decoded observable は

\[ m_{ZZ}^{\rm decoded} = \bigoplus_{g\in G_{\rm seam}^{Z}} m_g(t_0) \oplus \operatorname{obsFlip}(\widehat E). \]

4.4 何が「物理的に」起きていないか

lattice surgery では、通常の transversal CNOT のように patch \(A\) の各 data qubit と patch \(B\) の対応 data qubit を直接 CNOT することはない。境界近傍の syndrome ancilla が、近傍 data qubit に対していつもの stabilizer extraction gate を行うだけである。logical action は、stabilizer measurement の back-action と decoding された measurement record によって生じる。

5. なぜ論理 Pauli 積測定になるか

5.1 stabilizer 群としての証明

\(M_{XX}\) の場合を考える。merge 前の符号空間 \(\mathcal C_A\otimes\mathcal C_B\) では、すべての旧 stabilizer は \(+1\) に固定されている。merge 後に新しい seam \(X\)-check 群 \(G_{\rm seam}^X\) を測る。これらの check は個々には旧 logical operator ではないが、その積は旧 stabilizer を掛けた上で \(\bar X_A\bar X_B\) に等しい。

\[ \left.\prod_{g\in G_{\rm seam}^{X}} g\right|_{\mathcal C_A\otimes\mathcal C_B} = \left.\bar X_A\bar X_B\right|_{\mathcal C_A\otimes\mathcal C_B}. \]

したがって、すべての \(g\in G_{\rm seam}^{X}\) を測り、その積の固有値 \(s\) を得ることは、旧 logical space 上で \(\bar X_A\bar X_B\) の固有値 \(s\) を測ることと同じである。

同様に \(M_{ZZ}\) では

\[ \left.\prod_{g\in G_{\rm seam}^{Z}} g\right|_{\mathcal C_A\otimes\mathcal C_B} = \left.\bar Z_A\bar Z_B\right|_{\mathcal C_A\otimes\mathcal C_B}. \]

5.2 homology / cancellation としての証明

seam check 群を幾何的に掛け合わせると、内部 qubit 上の Pauli は偶数回現れて消える。残るのは seam の両端と旧境界に沿う非自明 string である。この string は旧 patch それぞれの logical string を 1 本ずつ含むため、全体として \(\bar P_A\bar P_B\) と同じ homology class になる。

これが「新しい check 群の積が logical product である」という事実の幾何学的な中身である。表面符号の stabilizer は境界を持つ 2 次元 cell complex の境界作用素と見なせるため、seam check の積で内部境界が打ち消され、外側の非自明 cycle だけが残る、と言ってもよい。

5.3 測定 back-action と logical parity

Pauli product \(\bar P_A\bar P_B\) の測定は、状態をその固有空間へ射影する。

\[ \ket{\Psi}\mapsto \frac{\Pi_s^{\bar P_A\bar P_B}\ket{\Psi}} {\sqrt{\bra{\Psi}\Pi_s^{\bar P_A\bar P_B}\ket{\Psi}}}. \]

個々の \(\bar P_A\) や \(\bar P_B\) を測ったわけではない。測ったのは積だけなので、例えば \(ZZ\) 測定なら computational basis の個々の値は壊さず、その parity だけが分かる。これが CNOT や teleportation 型 Clifford gadget に使える理由である。

6. split の物理操作と論理写像

split は merge の逆向き code deformation である。1 つの patch の中央の row / strip の data qubit を測定して取り除き、境界 check を切って 2 つの独立 patch を作る。merge と同様、split だけでも非ユニタリである。ただし merge と異なり、1 logical qubit の情報を 2 logical qubit の entangled subspace に埋め込む isometry として理解できる。

6.1 物理的な stabilizer update

data qubit \(q\) を Pauli \(P_q\) basis で測って取り除くとき、stabilizer の更新は一般に次の規則で書ける。

  • \(P_q\) と可換で、\(P_q\) を含む stabilizer \(S=P_q R\) は、測定 outcome \(p_q\in\{\pm1\}\) により \(S\leadsto p_q R\) へ縮約される。
  • \(P_q\) と反可換な stabilizer は測定で壊れ、対応する境界が新しくできる。
  • 縮約後の boundary check の sign は、旧 stabilizer outcome と cut-row data measurement outcome の積で決まる。

これが split 時に「測り捨てた qubit の outcome を decoder / Pauli frame に入れる」必要がある理由である。

6.2 smooth split / \(Z\)-split

smooth merge、すなわち \(M_{ZZ}\) の逆は、cut row の data qubit を \(X\) basis で測る。論理写像は computational basis をコピーする形になる。

\[ S_Z^{(r)}: \quad \ket{0}_M\mapsto \ket{0}_L\ket{0}_R, \qquad \ket{1}_M\mapsto (-1)^r\ket{1}_L\ket{1}_R. \]

ここで \(r\) は cut-row \(X\)-measurement と境界 stabilizer の積から得られる frame bit である。\(r=1\) の符号は片方の子 patch に logical \(Z\) を Pauli frame として掛ければ取り除ける。operator の対応は

\[ \bar Z_M \mapsto \bar Z_L \simeq \bar Z_R, \qquad \bar X_M \mapsto \bar X_L\bar X_R. \]

つまり split 後の 2 patch は独立な 2 logical qubit ではあるが、初期状態は \(\bar Z_L\bar Z_R=+1\) で相関している。

6.3 rough split / \(X\)-split

rough merge、すなわち \(M_{XX}\) の逆は、cut row の data qubit を \(Z\) basis で測る。Hadamard basis をコピーする。

\[ S_X^{(r)}: \quad \ket{+}_M\mapsto \ket{+}_L\ket{+}_R, \qquad \ket{-}_M\mapsto (-1)^r\ket{-}_L\ket{-}_R. \]

operator 対応は

\[ \bar X_M \mapsto \bar X_L \simeq \bar X_R, \qquad \bar Z_M \mapsto \bar Z_L\bar Z_R. \]

6.4 split 後に必要な syndrome ラウンド

split 直後は、新しい境界 check の sign に測定誤りが混入し得る。出力 patch を距離 \(d\) の保護状態として使うには、分離後の layout で syndrome extraction を少なくとも \(d\) ラウンド相当回し、split boundary に沿う measurement error を時空間 decoder で保護する必要がある。実際のスケジューリングでは、前後の操作と detection graph を共有してパイプライン化できるが、「時空間方向にも距離 \(d\) を確保する」という原理は変わらない。

7. merge-split としての Pauli 積測定

計算で最もよく使うのは、2 patch を永久に merge する操作ではなく、一時的に merge して parity を読み、その後 split して 2 patch に戻す操作である。

7.1 \(\bar X_A\bar X_B\) 測定

  1. \(A,B\) の向かい合う rough seam を使う。
  2. 中間 data を \(\ket{0}\) に準備する。
  3. seam \(X\)-check をオンにし、合体 patch として \(d\) ラウンド syndrome を取る。
  4. 最初の seam \(X\)-check product を decoder で補正し、\(m_{XX}\) を得る。
  5. 中間 row を \(Z\) basis で測って split し、境界 sign を更新する。
  6. 分離 layout で syndrome を継続し、measurement error を時空間的に閉じる。

論理作用は

\[ \rho_{AB}\mapsto \frac{\Pi_{m_{XX}}^{XX}\rho_{AB}\Pi_{m_{XX}}^{XX}} {\operatorname{Tr}(\Pi_{m_{XX}}^{XX}\rho_{AB})}, \quad \Pi_{m}^{XX}=\frac{I+(-1)^m\bar X_A\bar X_B}{2}. \]

7.2 \(\bar Z_A\bar Z_B\) 測定

  1. smooth seam を使う。
  2. 中間 data を \(\ket{+}\) に準備する。
  3. seam \(Z\)-check をオンにし、合体 patch として \(d\) ラウンド syndrome を取る。
  4. 最初の seam \(Z\)-check product を decoder で補正し、\(m_{ZZ}\) を得る。
  5. 中間 row を \(X\) basis で測って split し、境界 sign を更新する。
\[ \rho_{AB}\mapsto \frac{\Pi_{m_{ZZ}}^{ZZ}\rho_{AB}\Pi_{m_{ZZ}}^{ZZ}} {\operatorname{Tr}(\Pi_{m_{ZZ}}^{ZZ}\rho_{AB})}, \quad \Pi_{m}^{ZZ}=\frac{I+(-1)^m\bar Z_A\bar Z_B}{2}. \]

7.3 単一 logical measurement も同じ枠組み

単一 patch の \(\bar Z\) 測定は、すべての data qubit を \(Z\) basis で測り、任意の \(\bar Z\) string 上の parity を decoder で補正して読む。\(\bar X\) 測定も同様に \(X\) basis で測る。lattice surgery の Pauli product 測定は、この「論理演算子の代表に沿った測定 parity」を、patch を壊さず境界 check の first-round product として得る方法である。

8. CNOT の完全な測定型導出

lattice surgery は Pauli product measurement を実装する。CNOT は、Pauli product measurement と ancilla patch を組み合わせて得る。ここでは最も透明な測定型 gadget を示す。

8.1 論理レベルの手順

control を \(C\)、target を \(T\)、中間 ancilla を \(A\) とする。\(A\) を \(\ket{+}_L\) に準備し、以下を行う。

  1. \(m_1\):\(\bar Z_C\bar Z_A\) を測る。物理的には \(M_{ZZ}\) / smooth merge-split。
  2. \(m_2\):\(\bar X_A\bar X_T\) を測る。物理的には \(M_{XX}\) / rough merge-split。
  3. \(m_3\):\(A\) を logical \(Z\) basis で測る。
  4. Pauli frame correction として \(Z_C^{m_2}\) と \(X_T^{m_1\oplus m_3}\) を記録する。
\[ \boxed{ \ket{\psi}_{CT} \xrightarrow{\;\text{上の測定}\;} Z_C^{m_2}X_T^{m_1\oplus m_3}\,\CNOT_{C\to T}\ket{\psi}_{CT} } \]

8.2 projector での導出

符号 \(s_i=(-1)^{m_i}\) を使う。測定 projector は

\[ \Pi_{s_1}^{Z_CZ_A}=\frac{I+s_1 Z_CZ_A}{2}, \qquad \Pi_{s_2}^{X_AX_T}=\frac{I+s_2 X_AX_T}{2}. \]

ancilla を \(\ket{+}_A\) で準備し、最後に \(Z_A\) outcome \(s_3\) に射影する Kraus operator は

\[ K_{s_1,s_2,s_3} = {}_A\!\bra{z_{s_3}} \Pi_{s_2}^{X_AX_T}\Pi_{s_1}^{Z_CZ_A} \ket{+}_A. \]

直接展開すると

\[ K_{s_1,s_2,s_3} = \frac{1}{2\sqrt2}\, Z_C^{(1-s_2)/2} X_T^{(1-s_1s_3)/2} \CNOT_{C\to T}. \]

bit 表記では \((1-s_2)/2=m_2\)、\((1-s_1s_3)/2=m_1\oplus m_3\) なので、上の correction rule が出る。

展開を基底で確認する

入力基底 \(\ket{c,t}\) に対して \(A\) は \(\ket{+}\)。最初の \(Z_CZ_A\) 測定は \(A\) の computational value を \(c\oplus m_1\) に相関させる。次の \(X_AX_T\) 測定は、Hadamard-dual な parity によって \(T\) 側の bit flip を生成する。最後の \(Z_A\) 測定で ancilla を消去すると、\(t\mapsto t\oplus c\) が残り、測定 outcome 由来の byproduct が \(Z_C^{m_2}X_T^{m_1\oplus m_3}\) として残る。

8.3 物理レベルでの CNOT 手順

上の 3 つの論理測定を surface-code patch で実装すると、以下になる。

段階物理操作decoder が返す logical 情報frame update
Ancilla prep patch \(A\) の全 data を \(\ket{+}\) に準備し、\(d\) ラウンド syndrome で \(\ket{+}_L\) を作る。 初期 logical \(\bar X_A=+1\) 必要なら初期 syndrome に基づく frame
\(m_1=ZZ\) \(C\) と \(A\) を smooth / \(M_{ZZ}\) merge-split。seam data は \(\ket{+}\)、seam \(Z\)-check を \(d\) ラウンド。 \(m_1\) まだ correction しない
\(m_2=XX\) \(A\) と \(T\) を rough / \(M_{XX}\) merge-split。seam data は \(\ket{0}\)、seam \(X\)-check を \(d\) ラウンド。 \(m_2\) \(Z_C^{m_2}\) を記録
Ancilla readout patch \(A\) の data を \(Z\) basis で破壊測定し、logical \(\bar Z_A\) parity を decode する。 \(m_3\) \(X_T^{m_1\oplus m_3}\) を記録

物理的な Pauli correction を直ちにかける必要はない。control に \(Z\) frame、target に \(X\) frame をソフトウェアで記録し、以後の logical measurement interpretation と Clifford propagation に反映すればよい。

8.4 Heisenberg picture での確認

byproduct を補正した後の CNOT は logical Pauli を

\[ \bar X_C\mapsto \bar X_C\bar X_T, \qquad \bar Z_C\mapsto \bar Z_C, \qquad \bar X_T\mapsto \bar X_T, \qquad \bar Z_T\mapsto \bar Z_C\bar Z_T \]

へ写す。これは \(C\to T\) CNOT の定義そのものである。

9. decoder / Pauli frame / fault tolerance

9.1 動的 matching graph

lattice surgery の decoding は、通常の surface code memory と同じく時空間 3D graph 上の推定問題だが、途中で check layout が変わる。したがって detector 定義には merge boundary と split boundary が入る。

  • merge 開始時:新しい seam check には過去の測定値がない。最初の seam outcome は detector というより logical observable の候補であり、測定誤りは後続ラウンドとの整合性で検出される。
  • merge 中:seam check も bulk check と同じように連続ラウンド差分から detection event を作る。
  • split 時:測り捨てる data qubit の outcome と隣接 check の最後の outcome を組み合わせ、新しい boundary detector を作る。
  • split 後:2 patch の通常 detector に戻る。ただし split boundary 起源の sign / frame が残る。

9.2 logical observable の decoding

lattice surgery で得たい \(m_{XX}\) や \(m_{ZZ}\) は、単なる raw parity ではなく「error correction 後の logical observable」である。実装上は、測定 record のある subset の XOR と、decoder correction がその observable と反交換するかどうかで決める。

\[ m_{\rm logical} = \bigoplus_{i\in R_{\rm obs}} m_i \oplus \left\langle \widehat e,\, o\right\rangle, \]

ここで \(R_{\rm obs}\) は seam first-round check など observable を構成する measurement record の集合、\(\widehat e\) は推定 error、\(o\) はその logical observable の dual surface / cut、\(\langle\cdot,\cdot\rangle\) は mod 2 交差数である。

9.3 なぜ \(d\) ラウンドか

測定値そのものが noisy なので、1 ラウンドで得た seam product は信頼できない。\(d\) ラウンド測ることで、time-like 方向の measurement error chain も少なくとも長さ \(d\) の保護を受ける。rough/smooth merge の途中で code distance が落ちないよう seam 長と patch 幅を設計すれば、空間方向と時間方向の両方で距離 \(d\) の fault tolerance が得られる。

9.4 Pauli frame

lattice surgery では outcome に応じて logical frame が変わる。典型的には物理 data qubit に corrective Pauli を打たず、classical control 上の frame を更新する。

eventframe に記録するもの理由
merge outcome \(s=-1\)merged logical operator の代表に符号を入れる、または片側の logical Pauli byproduct として記録する。\(\bar P_A\bar P_B=-1\) sector に射影されたため。
split cut measurement の random parity片方の子 patch に \(X\) または \(Z\) frame を記録する。split isometry の相対位相が測定値で決まるため。
CNOT gadget outcome\(Z_C^{m_2}\)、\(X_T^{m_1\oplus m_3}\)測定型 CNOT の byproduct。

9.5 距離を落とさない条件

lattice surgery が fault-tolerant であるには、合体中・分割中・前後のいずれの時空間断面でも、論理失敗を起こす最短 error chain が長さ \(d\) 未満にならない必要がある。代表的な条件は次である。

  • seam の長さを少なくとも \(d\) にする。
  • merge により外側境界間に短い logical string が生まれない patch 配置にする。
  • hook error の向きを、短い logical direction に沿わせない。
  • split で正方形 patch を半分にする場合、出力 patch の距離が半減しないよう、分割前 patch の寸法を設計する。
  • idle seam qubit / routing region の leakage や reset error を detector model に入れる。

10. インタラクティブ図解

以下の図は概念図であり、特定ハードウェアの exact layout ではない。step を動かすと、prepare → seam check activation → \(d\) rounds → split の流れを確認できる。

10.1 merge-split 操作ビューア

0

data qubit X-check / XX observable Z-check / ZZ observable seam / bridge data

10.2 CNOT Pauli-frame calculator

測定 outcome を選ぶと、CNOT 後に frame へ入れる byproduct を表示する。\(+1\) を bit 0、\(-1\) を bit 1 とする。

10.3 check product のキャンセル

内部 support は偶数回現れて消え、外側に残る非自明 string が logical product になる。

11. 実装上の落とし穴

11.1 rough / smooth のラベルだけで実装しない

境界名は流儀差がある。実装 spec では「この操作は \(\bar X_A\bar X_B\) を測る」「この操作は \(\bar Z_A\bar Z_B\) を測る」と logical observable を明記し、さらに seam data の準備 basis と split basis を明記する。

11.2 first-round product を捨てない

merge 中に stabilizer を何ラウンドも測ると、最後の round の seam product を parity outcome と誤解しやすい。pre-merge logical parity を測っているのは、seam check が初めて有効化された round の product である。後続 round は、その測定値を measurement error から守るために必要である。

11.3 split boundary の measurement outcome を stabilizer sign に入れる

cut row を測って qubit を消すと、その outcome は新しい境界 check の sign に入る。ここを忘れると、decoder に偽の syndrome が入り、logical frame がずれる。

11.4 merge を CNOT そのものだと思わない

merge は非ユニタリな parity measurement であり、CNOT は複数の parity measurement と ancilla preparation / readout / frame correction から作られる。merge 単体を「2 qubit gate」と呼ぶと、論理自由度の数が変わる事実を見落とす。

11.5 decoder と compiler を分離しすぎない

compiler が「\(M_{XX}\) を実行」とだけ言い、decoder が seam observable を知らないと、測定結果を正しく補正できない。lattice surgery の命令は、少なくとも以下を decoder model に渡す必要がある。

  • merge 開始 round と split round
  • その round で有効な check layout
  • logical observable を構成する measurement record IDs
  • 新規 detector / boundary detector の定義
  • hook error を含む circuit-level noise model

12. 拡張:多体測定、Y、magic state

12.1 多体 Pauli product measurement

lattice surgery は 2 patch の \(XX\) / \(ZZ\) だけでなく、ancilla patch や routing patch を使えば多体 Pauli product の測定器として使える。例えば

\[ \bar Z_1\bar Z_2\cdots \bar Z_r, \qquad \bar X_1\bar X_2\cdots \bar X_r \]

を 1 回の長い seam / bus patch の merge で測る設計がある。multi-target CNOT は、こうした多体測定により時空間コストを削減できる。

12.2 \(Y\) を含む測定

標準の twist-free planar patch で直接 \(Y\) 境界を貼ることは自然ではない。\(Y=iXZ\) を含む product は、Hadamard / phase frame、magic-state gadget、twist defect、または temporally encoded lattice surgery などで実装する。大規模 architecture では、Clifford 層を Pauli product measurement の列へコンパイルし、必要な basis change を patch orientation や frame に吸収するのが一般的である。

12.3 magic state injection / distillation との関係

surface code で universal computation を行うには非 Clifford が必要である。lattice surgery は主に Clifford / Pauli measurement substrate を提供し、\(T\) や CCZ は injection と distillation で得た magic state を消費して実行する。実用的な大規模設計では、データ patch と magic-state factory patch を lattice surgery で接続し、必要な Pauli product measurement を実行する。

付録A. 低レベル命令列:1 回の surgery を hardware schedule に落とす

ここでは、抽象命令 MEASURE_XX_PATCH(A,B) または MEASURE_ZZ_PATCH(A,B) を、物理 reset / gate / measurement / classical record の列として書く。特定の rotated layout では check の support が異なるが、命令の依存関係は同じである。

A.1 入力データ構造

compiler / control system は少なくとも次の情報を持つ。

記号内容
\(D_A,D_B\)patch \(A,B\) の data qubit ID。
\(R\)routing / seam data qubit ID。merge 前は logical code に入っていない。
\(\mathcal S_{\rm sep}\)分離時 layout の check support と ancilla ID。
\(\mathcal S_{\rm merge}^{XX}\), \(\mathcal S_{\rm merge}^{ZZ}\)合体時 layout の check support。どちらも surface code として妥当な CSS check 集合。
\(G_{\rm seam}^{X}\), \(G_{\rm seam}^{Z}\)logical observable を構成する seam check の subset。
\(O_{XX},O_{ZZ}\)decoder に渡す observable definition。measurement record IDs と correction-crossing rule を含む。

A.2 疑似コード:\(M_{XX}\)

procedure LATTICE_SURGERY_MXX(A, B, R, d):
    # Phase 0: separated memory rounds may already be running.
    assert seam_length(R) >= d
    assert merged_layout_distance(A, B, R, type="XX") >= d

    # Phase 1: prepare bridge data.
    for q in R:
        reset_Z(q)                 # prepare |0>; if measurement-reset, record reset outcome
        record_reset_frame(q)

    # Phase 2: switch check layout.
    active_checks := S_merge_XX(A, B, R)
    mark_observable_records := []

    for t in 0 .. d-1:
        round_records := EXTRACT_SYNDROME_ROUND(active_checks, hook_safe_order=True)
        if t == 0:
            mark_observable_records += records_of(G_seam_X, round_records)
        append_detector_events(round_records, previous_round_records, layout_transition=(t==0))
        previous_round_records := round_records

    raw_m := xor(mark_observable_records)
    e_hat := decode_dynamic_graph()
    m_xx := raw_m xor observable_flip(e_hat, O_XX)
    update_logical_parity_frame(A, B, P="X", value=m_xx)

    return m_xx

EXTRACT_SYNDROME_ROUND の内部は通常の surface code cycle と同じである。\(X\)-check なら ancilla を \(\ket{+}\) に reset し、ancilla-control の CNOT を check support の data へ順に打ち、ancilla を \(X\) basis で測る。\(Z\)-check なら ancilla を \(\ket{0}\) に reset し、data-control の CNOT を ancilla へ順に打ち、ancilla を \(Z\) basis で測る。

A.3 疑似コード:\(M_{ZZ}\)

procedure LATTICE_SURGERY_MZZ(A, B, R, d):
    assert seam_length(R) >= d
    assert merged_layout_distance(A, B, R, type="ZZ") >= d

    for q in R:
        reset_X(q)                 # prepare |+>; equivalently reset_Z + H
        record_reset_frame(q)

    active_checks := S_merge_ZZ(A, B, R)
    mark_observable_records := []

    for t in 0 .. d-1:
        round_records := EXTRACT_SYNDROME_ROUND(active_checks, hook_safe_order=True)
        if t == 0:
            mark_observable_records += records_of(G_seam_Z, round_records)
        append_detector_events(round_records, previous_round_records, layout_transition=(t==0))
        previous_round_records := round_records

    raw_m := xor(mark_observable_records)
    e_hat := decode_dynamic_graph()
    m_zz := raw_m xor observable_flip(e_hat, O_ZZ)
    update_logical_parity_frame(A, B, P="Z", value=m_zz)

    return m_zz

A.4 split を含む parity measurement

2 patch を出力として残すなら、merge 後に split transition を行う。\(M_{XX}\) 後は seam data を \(Z\) basis、\(M_{ZZ}\) 後は \(X\) basis で測る。

procedure SPLIT_AFTER_MXX(A, B, R, d):
    z_records = {}
    for q in R:
        z_records[q] = measure_Z(q)
    active_checks := S_separated(A, B)
    create_split_boundary_detectors(z_records, last_merged_round, basis="Z")
    for t in 0 .. d-1:
        round_records := EXTRACT_SYNDROME_ROUND(active_checks, hook_safe_order=True)
        append_detector_events(round_records, previous_round_records, layout_transition=(t==0))
    update_child_patch_frames_from_cut(z_records, basis="Z")

procedure SPLIT_AFTER_MZZ(A, B, R, d):
    x_records = {}
    for q in R:
        x_records[q] = measure_X(q)
    active_checks := S_separated(A, B)
    create_split_boundary_detectors(x_records, last_merged_round, basis="X")
    for t in 0 .. d-1:
        round_records := EXTRACT_SYNDROME_ROUND(active_checks, hook_safe_order=True)
        append_detector_events(round_records, previous_round_records, layout_transition=(t==0))
    update_child_patch_frames_from_cut(x_records, basis="X")

A.5 syndrome extraction の moment 分解

1 ラウンドをさらに moment に分解すると、概念的には以下になる。

moment操作注意
0全 syndrome ancilla を reset。\(Z\)-check ancilla は \(\ket{0}\)、\(X\)-check ancilla は \(\ket{+}\)。reset error は detector model に入れる。
1–4各 plaquette の 1 番目から 4 番目の data neighbor と 2-qubit gate。rotated code では weight 2/3 check は存在する gate だけ実行。hook-safe order を seam check にも適用。
5ancilla measurement。measurement record ID を check ID と round ID に紐づける。
6classical processing。detector event、observable record、frame update を生成。低レイテンシ decoder ならここで逐次処理。

superconducting qubit などですべての check を完全並列に測れない場合は、同じ round 内で色分け schedule を使う。重要なのは、round の終わりに各 active check の syndrome value が 1 つずつ定義されることである。

付録B. stabilizer 更新の形式化

B.1 CSS chain complex として見る

CSS surface code は、binary chain complex

\[ C_2 \xrightarrow{\partial_2} C_1 \xrightarrow{\partial_1} C_0, \qquad \partial_1\partial_2=0 \]

から作れる。data qubit は 1-chain \(C_1\)、\(Z\)-check は face boundary \(\partial_2 C_2\)、\(X\)-check は co-boundary \(\partial_1^T C_0\) と見なせる。logical \(Z\) は \(H_1=\ker\partial_1/\operatorname{im}\partial_2\)、logical \(X\) は相対 cohomology の代表である。

merge は cell complex に seam cell を追加し、境界写像 \(\partial_1,\partial_2\) を変更する操作である。新しい seam check の積は、追加された局所 boundary の和であり、内部 boundary が \(\mathbb F_2\) 上で消えるため、旧 complex 上の非自明 homology/cohomology class だけが残る。

B.2 stabilizer 測定としての一般補題

補題。 旧符号空間 \(\mathcal C\) の stabilizer 群を \(S\) とする。互いに可換な Pauli 群 \(G=\langle g_1,\dots,g_r\rangle\) を測るとき、ある積 \(g_J=\prod_{j\in J}g_j\) が \(\mathcal C\) 上で logical Pauli \(\bar P\) と等価、すなわち \(g_J\bar P\in S\) なら、測定 outcome の積 \(\prod_{j\in J}s_j\) は \(\bar P\) の測定 outcome である。

証明は 1 行で済む。\(\ket{\psi}\in\mathcal C\) では任意の \(h\in S\) が \(h\ket{\psi}=\ket{\psi}\) を満たすため、\(g_J\ket{\psi}=\bar P h\ket{\psi}=\bar P\ket{\psi}\)。したがって \(g_J\) の固有値積は \(\bar P\) の固有値と等しい。

B.3 merge 後の logical operator の選び方

\(M_{XX}\) では \(\bar X_A\bar X_B=s\) が stabilizer constraint になる。logical operator の候補は、測られた operator と可換で、新 stabilizer ではないものから選ぶ。

候補\(\bar X_A\bar X_B\) との関係merge 後
\(\bar X_A\), \(\bar X_B\)可換互いに stabilizer constraint で同一視:\(\bar X_B=s\bar X_A\)
\(\bar Z_A\)反可換単独では残らない。測定で壊れる。
\(\bar Z_B\)反可換単独では残らない。
\(\bar Z_A\bar Z_B\)可換新 logical \(\bar Z_M\)

\(M_{ZZ}\) はこの表の \(X\leftrightarrow Z\) 交換で得られる。

B.4 split 時の gauge 的自由度

split は stabilizer generator を削除するため、logical qubit 数が増える。ただし増えた qubit は任意状態で現れるのではなく、cut-row measurement によって決まる parity constraint を持つ。たとえば \(Z\)-split では \(\bar Z_L\bar Z_R\) が既知であり、\(X\)-split では \(\bar X_L\bar X_R\) が既知である。これは「新しい qubit を作る」というより「もとの logical qubit を 2 patch の相関部分空間に展開する」と捉えるのが正確である。

付録C. 実装チェックリスト

以下は、lattice surgery を実機制御または simulator に実装するときの確認項目である。

Compiler 側

  • 各 patch の orientation と boundary type が logical observable と一致している。
  • \(M_{XX}\) なら seam data \(\ket{0}\)、\(M_{ZZ}\) なら \(\ket{+}\) を準備する。
  • seam 長、patch 幅、routing 領域により距離 \(d\) が保たれる。
  • merge / split の開始・終了 round が明示されている。
  • 同時に走る surgery の seam / bus が交差しない、または交差時の check が定義されている。

Circuit schedule 側

  • 全 active check に ancilla が割り当てられている。
  • seam check の CNOT/CZ 順序が hook-safe。
  • reset / measurement / idle / leakage のエラーが noise model に入っている。
  • 境界 weight 2/3 check の moment が他 check と衝突しない。
  • seam qubit が prepare 直後に必要な stabilizer 以外と不整合を起こさない。

Decoder 側

  • 動的 detector graph が merge / split transition を含む。
  • first-round seam records が observable に含まれている。
  • split cut-row records が boundary detector と frame update に含まれている。
  • decoder correction が observable を flip するか計算できる。
  • logical measurement と frame の bit ordering が compiler と一致している。

Runtime / control 側

  • Pauli frame を物理 correction ではなく classical に追跡する。
  • CNOT gadget の correction rule \(Z_C^{m_2}X_T^{m_1\oplus m_3}\) が正しく適用される。
  • 次の Clifford / measurement へ frame を伝播する。
  • decoder latency が長い場合でも、必要な frame が測定解釈までに反映される。
  • 異常 syndrome / leakage event に対する abort / reinitialize policy がある。

参考文献

  1. Dominic Horsman, Austin G. Fowler, Simon Devitt, Rodney Van Meter, “Surface code quantum computing by lattice surgery,” New Journal of Physics 14, 123011 (2012). arXiv:1111.4022.
  2. Austin G. Fowler, Matteo Mariantoni, John M. Martinis, Andrew N. Cleland, “Surface codes: Towards practical large-scale quantum computation,” Physical Review A 86, 032324 (2012). arXiv:1208.0928.
  3. Daniel Litinski, “A Game of Surface Codes: Large-Scale Quantum Computing with Lattice Surgery,” Quantum 3, 128 (2019). arXiv:1808.02892.
  4. Austin G. Fowler, Craig Gidney, “Low overhead quantum computation using lattice surgery,” arXiv:1808.06709.
  5. Niel de Beaudrap, Ross Duncan, Dominic Horsman, Simon Perdrix, “The ZX calculus is a language for surface code lattice surgery,” Quantum 4, 218 (2020). Quantum journal page.
  6. Daniel Herr, Alexandre Paler, Simon J. Devitt, Franco Nori, “Lattice surgery translation for quantum computation,” New Journal of Physics 19, 013034 (2017).
  7. Error Correction Zoo, “Rotated surface code.” errorcorrectionzoo.org.
  8. A. Erhard et al., “Entangling logical qubits with lattice surgery,” Nature 589, 220–224 (2021).