第2章回路図の読み書き

この章の目標

2.1 回路図の文法

回路図の構成要素は少数です:

この教材ではQiskitのテキスト描画と同じASCII形式を使います:

q0: |0⟩ ──[H]──[T]──[H]──

これは「$|0\rangle$ に $H$、次に $T$、次に $H$」。数式では作用の順に右から左へ積むので: $$|\psi_{\text{out}}\rangle = H\, T\, H\, |0\rangle$$ 回路図とは逆順になります。ここが回路読みの事故多発地点です。「回路の右端のゲート=式の左端の行列」と何度も唱えてください。

2.2 並列はテンソル積、ワイヤ素通りは $I$

複数ワイヤの回路では、同じ時刻の縦1列がひとつの行列(各ワイヤのゲートのテンソル積)になります。ゲートのないワイヤは $I$ を補います:

q0: |0⟩ ──[H]──────●──
                   │
q1: |0⟩ ──────[X]──⊕──

1列目は $H \otimes I$、2列目は $I \otimes X$、3列目はCNOT(記号は第3章)。全体は $$|\psi_{\text{out}}\rangle = \mathrm{CNOT}\,(I \otimes X)(H \otimes I)|00\rangle$$ なお $H \otimes I$ と $I \otimes X$ は別のワイヤに作用するので可換で、1列目と2列目はまとめて $H \otimes X$(1列)と書いても同じです(演習2-3)。

直観: 回路図は「テンソル積と行列積の2次元レイアウト」

縦方向=テンソル積(空間、$\otimes$)、横方向=行列積(時間、通常の積)。回路図が読みやすいのは、この2種類の積を平面の2方向に割り当てているからです。逆に、任意の回路は「縦1列ずつのユニタリの積」として機械的に1本の式に落ちます。回路を見たら式に、式を見たら回路に、両方向の翻訳を訓練するのが本章の演習です。

2.3 回路の等価変形 — 恒等式のストック

同じユニタリを与える回路は無数にあり、簡単な恒等式で書き換えられます。頻出のものをストックしておきましょう(すべてステップ1で計算済みか、演習で確認します):

恒等式意味
$HH = XX = ZZ = YY = I$2連打は消せる(自己逆)
$HZH = X$, $HXH = Z$$H$ で挟むとX⇄Zが入れ替わる(基底変換)
$S^2 = Z$, $T^2 = S$位相ゲートの分解・合成
$XZ = -ZX$同一ワイヤ上の $X$ と $Z$ は順序を変えると符号が出る(反可換)
$(A \otimes I)(I \otimes B) = A \otimes B = (I \otimes B)(A \otimes I)$別ワイヤのゲートは自由にスライドできる

実機ではゲート数(特に深さ=横方向の長さ)がエラー率に直結するため、こうした書き換えで回路を短くする「回路最適化」が重要になります。コンパイラの気持ちが分かる程度に、手で書き換えられるようになっておきましょう。

実験2: 回路ビルダー(1量子ビット)

ボタンでゲートを積むと、回路図・対応する数式(右から左!)・現在の状態が同時に更新されます。「回路の並び」と「式の並び」が逆順であることを、目で何度も確認してください。$H, Z, H$ と積んで式が $HZH|0\rangle$ になること、結果が $X|0\rangle = |1\rangle$ と同じになることを試すこと。

ゲート:
q0: |0⟩ ──
Qiskitで試す
from qiskit import QuantumCircuit
from qiskit.quantum_info import Statevector, Operator

qc = QuantumCircuit(1)
qc.h(0); qc.z(0); qc.h(0)
print(qc.draw())                    # 回路図(左から右)
print(Operator(qc).data.round(3))   # 回路全体を1つの行列に畳む → Xになるはず
print(Statevector.from_instruction(qc))
Operator(qc) は回路全体を1つのユニタリ行列に畳んでくれます。恒等式の検算($HZH = X$ など)が1行でできる強力な答え合わせ道具です。

演習2

問 2-1ウォームアップ

次の回路を数式に翻訳し、出力状態を計算せよ。

q0: |0⟩ ──[X]──[H]──[S]──

解答を見る

式は $S H X |0\rangle$(回路と逆順)。$X|0\rangle = |1\rangle$、$H|1\rangle = |-\rangle$、$S|-\rangle = \frac{|0\rangle - i|1\rangle}{\sqrt2} = |{-i}\rangle$。ブロッホ球なら「南極 → 赤道−x → z軸まわり90°で赤道−y」という経路です。

問 2-2ウォームアップ

式 $|\psi\rangle = (H \otimes H)(X \otimes I)|00\rangle$ を回路図に翻訳し、出力状態を求めよ。

解答を見る
q0: |0⟩ ──[X]──[H]──
q1: |0⟩ ───────[H]──

($X \otimes I$ が先=回路の左)。出力は $(H \otimes H)|10\rangle = |-\rangle \otimes |+\rangle = \frac12(|00\rangle + |01\rangle - |10\rangle - |11\rangle)$。式→回路の翻訳では「式の右端が回路の左端」。

問 2-3ウォームアップ

$(H \otimes I)(I \otimes X) = (I \otimes X)(H \otimes I) = H \otimes X$ を、$(A \otimes B)(C \otimes D) = AC \otimes BD$ の公式で確かめよ。

解答を見る

$(H \otimes I)(I \otimes X) = HI \otimes IX = H \otimes X$。逆順も $IH \otimes XI = H \otimes X$。別ワイヤのゲートは時間的に前後させても同じ——回路図で縦の位置が違っても、ワイヤが違えば「同時」とみなせる根拠です。回路を式に翻訳するとき、列の切り方に迷ったら「ワイヤが違えばどう切っても同じ」と思い出してください。

問 2-4基本

次の2つの回路が同じユニタリを表すことを示せ。

(a) q0: ──[H]──[X]──[H]──      (b) q0: ──[Z]──
また、この事実を使って回路 ──[H]──[X]──[H]──[Z]── を1ゲートに簡約せよ。

解答を見る

(a) は $HXH = Z$(恒等式ストック、ステップ1の $HZH = X$ と対)。よって (b) と同じ。後半:$Z \cdot (HXH) = Z \cdot Z = Z^2 = I$……順序に注意。回路の式は $Z H X H$ で、$HXH = Z$ より $Z \cdot Z = I$。全体が恒等変換、つまり「何もしない回路」に簡約されます(ゲート4個→0個の最適化)。

問 2-5基本

$XZ = -ZX$(反可換)を行列で確かめよ。この符号 $-1$ はグローバル位相なのに、「$X$ と $Z$ の順序を入れ替えてよい」と言い切れないのはなぜか。ヒント: 第3章の制御ゲートを先取りすると、「一部にだけ」掛かる場合が出てくる。

解答を見る

$XZ = \begin{pmatrix} 0 & -1 \\ 1 & 0 \end{pmatrix}$、$ZX = \begin{pmatrix} 0 & 1 \\ -1 & 0 \end{pmatrix} = -XZ$ ✓。単独の回路全体に掛かる $-1$ はグローバル位相で無害ですが、この操作が制御化される(制御ビットが $|1\rangle$ の分岐にだけ適用される)と、$-1$ は重ね合わせの片方の枝にだけ付く相対位相に化けて、観測可能な差になります(第3章の位相キックバックが正にこれ)。「グローバル位相は無視してよい」が通用するのは回路全体に掛かるときだけ、という重要な但し書きです。

問 2-6基本

次の回路の出力状態と、標準基底での測定確率を求めよ。

q0: |0⟩ ──[H]──[T]──[H]──
ヒント: ステップ1の総合演習6-1($R_{\pi/2}$ 版)と同じ型。$T = R_{\pi/4}$ 相当。

解答を見る

$H|0\rangle = \frac{|0\rangle + |1\rangle}{\sqrt2}$、$T$ で $\frac{|0\rangle + e^{i\pi/4}|1\rangle}{\sqrt2}$、$H$ で $\frac{(1 + e^{i\pi/4})|0\rangle + (1 - e^{i\pi/4})|1\rangle}{2}$。 $$P(0) = \frac{|1 + e^{i\pi/4}|^2}{4} = \frac{2 + 2\cos\frac{\pi}{4}}{4} = \frac{1 + \frac{\sqrt2}{2}}{2} \approx 0.854$$ $P(1) \approx 0.146$。H–位相–H のサンドイッチは「位相 $\phi$ を確率 $\cos^2\frac{\phi}{2}$ に変換する装置」(一般式 $P(0) = \cos^2\frac{\phi}{2}$)。この装置はステップ3のアルゴリズム群の共通骨格なので、一般式ごと覚えてしまってください。

問 2-7考え方

2つの量子ビットに同時に $H$ を掛ける回路(深さ1)と、順番に掛ける回路(深さ2):

(a) q0: ──[H]──    (b) q0: ──[H]──────
    q1: ──[H]──        q1: ──────[H]──
両者のユニタリが同じであることを式で示せ。では「深さ」が同じでない2つの回路が同じユニタリを持つとき、実機ではどちらが望ましいか。

解答を見る

(a) は $H \otimes H$、(b) は $(I \otimes H)(H \otimes I) = H \otimes H$ で同一。実機では深さの浅い (a) が望ましい。量子ビットは時間とともにデコヒーレンス(環境との相互作用で状態が劣化)するため、回路の実行時間=深さが短いほどエラーが少ない。並列化できるゲートは同じ列に詰めるのがコンパイラの基本方針です。「ゲート数」と「深さ」は別の指標で、論文のリソース評価では両方が報告されます。

問 2-8考え方

1量子ビットの任意の回路(ゲート列)は、どれだけ長くても常に1個のユニタリ行列に畳める。さて、「では長い回路は無意味で、すべての量子計算は1ゲートでできる」という主張はどこが間違っているか。$n$ 量子ビットの場合を考えて答えよ。

解答を見る

畳めること自体は正しい($n$ 量子ビットでも回路全体は1個の $2^n \times 2^n$ ユニタリ)。間違いは「その1個の行列が実装できる基本操作だ」という部分です。実機が直接実行できるのは1〜2量子ビットの基本ゲートだけで、$2^n \times 2^n$ の任意のユニタリを基本ゲートに分解すると、一般には指数個のゲートが必要です。量子アルゴリズムの設計とは「役に立つ巨大ユニタリのうち、多項式個の基本ゲートに分解できるものを見つけること」に他なりません。「回路の長さ」こそが計算量であり、ここが計算理論としての量子計算の出発点です(ステップ3へ)。

理解チェックリスト