第3章CNOTと制御ゲート
この章の目標
- 制御ゲート(CNOT, CZ, 制御$U$)の回路記号と行列を読み書きできるようになる
- 「制御ビットが重ね合わせのとき、両方の分岐が同時に走る」計算を確実に実行できるようになる
- 位相キックバックを一般の制御$U$で理解する(ステップ3への最重要部品)
- SWAP・CZ・逆向きCNOTなどの構成をCNOTから組み立てられるようになる
3.1 制御ゲートの記号と一般形
ステップ1第5章で導入したCNOTを回路記号で書くと:
q0: ──●── ● = 制御 (control)
│
q1: ──⊕── ⊕ = 標的 (target, Xを適用)
一般に、任意の1量子ビットユニタリ $U$ に対して制御$U$(制御が $|1\rangle$ のときだけ標的に $U$)が定義できます:
右の表式が実戦向きです:「制御が $|0\rangle$ の成分には $I$、$|1\rangle$ の成分には $U$」という場合分けをそのまま演算子にした形。$U = X$ でCNOT、$U = Z$ でCZになります。
計算のコツはステップ1と同じく基底ごとの場合分け+線形性です。重ね合わせが入力されたら、基底成分ごとに「制御は0か1か→標的に$U$を掛けるか」を判定して足し合わせる。機械的にやれば間違えません。
CZ は「両方が $|1\rangle$ のときだけ符号 $-1$」を付ける対角行列で、制御と標的が対称です。回路記号も ●─● と両側を点で書きます。実機(特に超伝導量子ビット)ではCZの方がネイティブなことも多く、CNOTとは $H$ で行き来できます(演習3-4)。
3.2 制御+重ね合わせ=エンタングルメント(復習と一般化)
ベル回路(ステップ1演習5-6)を回路図で再掲します。これがこのステップの「Hello, World」です:
q0: |0⟩ ──[H]──●── |00⟩ → (H⊗I) → (|00⟩+|10⟩)/√2 → CNOT → (|00⟩+|11⟩)/√2
│
q1: |0⟩ ───────⊕──
ワイヤを増やせばGHZ状態 $\frac{|000\rangle + |111\rangle}{\sqrt2}$ も同じパターンで作れます(演習3-5)。「$H$ で分岐を作り、CNOTで分岐に印を付けて回りに伝播させる」——エンタングルメント生成の基本イディオムです。
3.3 位相キックバック — 制御ゲートの裏の顔
ステップ1の総合演習6-5で、CNOTの標的に $|-\rangle$ を入れると制御側の位相が反転する現象を計算しました。これを一般化します。本章で一番大事な節です。
$|u\rangle$ が $U$ の固有状態($U|u\rangle = e^{i\lambda}|u\rangle$)のとき、制御$U$に制御側 $\alpha|0\rangle + \beta|1\rangle$、標的側 $|u\rangle$ を入力すると: $$CU\big((\alpha|0\rangle + \beta|1\rangle) \otimes |u\rangle\big) = \big(\alpha|0\rangle + \beta e^{i\lambda}|1\rangle\big) \otimes |u\rangle$$ 標的は変化せず、$U$ の固有値の位相 $e^{i\lambda}$ が制御側の相対位相に移る。
導出は1行です:$|0\rangle|u\rangle$ 成分はそのまま、$|1\rangle|u\rangle$ 成分は $|1\rangle(U|u\rangle) = e^{i\lambda}|1\rangle|u\rangle$。位相 $e^{i\lambda}$ はテンソル積のどちらに付けても同じなので、「標的に掛かったはずの位相」を制御側の係数と読み替えられる——それだけのことです。しかしこの読み替えが強力で:
- 制御側に現れた相対位相は、$H$ を掛ければ確率に変換できる(第2章のH–位相–Hサンドイッチ)。
- つまり「$U$ の固有値(=$U$ に隠された情報)を、$U$ を直接測らずに制御ビット経由で読み出せる」。
ステップ3のDeutsch-Jozsa、そしてShorの心臓部である位相推定は、この仕掛けの反復です。ここで手に馴染ませておくと、ステップ3の学習コストが半減します。
3.4 CNOTだけで組む小道具
CNOTを組み合わせると便利な部品が作れます。代表2つ:
SWAP(状態の交換) 逆向きCNOT(Hで挟む)
q0: ──●──⊕──●── q0: ──[H]──⊕──[H]── q0: ──●──
│ │ │ = │ = │
q1: ──⊕──●──⊕── q1: ──[H]──●──[H]── q1: ──⊕──
SWAPは「CNOT3連(向き交互)」で実現できます(演習3-6)。逆向きCNOTの等式は「$H$ で挟むと $X$ と $Z$ が入れ替わる」の2量子ビット版で、CZ の対称性を経由すると鮮やかに示せます(演習3-4)。実機では物理的に隣接した量子ビット間でしか2量子ビットゲートが打てないため、SWAPで状態を「運ぶ」操作が頻繁に挿入されます——回路最適化でSWAPを減らすことが実用上の大テーマです。
qc = QuantumCircuit(2)
qc.x(1); qc.h(1) # 標的を |−⟩ に
qc.h(0) # 制御を |+⟩ に
qc.cx(0, 1) # 位相キックバック発生
qc.h(0) # 相対位相を確率に変換
print(Statevector.from_instruction(qc)) # q0 は |1⟩ に確定しているはず
制御ゲートは qc.cx(制御, 標的), qc.cz(0,1), qc.swap(0,1), さらに任意ゲートの制御化 qc.cp(θ, 0, 1)(制御位相)など。上のコードは演習3-7の答え合わせに使えます。
演習3
CNOT(制御q0)を次の状態に作用させよ。(a) $|10\rangle$ (b) $\frac{|00\rangle + |10\rangle}{\sqrt2}$ (c) $|+\rangle|+\rangle$
解答を見る
(a) 制御が1なので標的反転:$|11\rangle$。(b) 基底ごとに:$|00\rangle \to |00\rangle$, $|10\rangle \to |11\rangle$、よって $\frac{|00\rangle + |11\rangle}{\sqrt2}$(ベル状態)。(c) $|+\rangle|+\rangle = \frac12(|00\rangle + |01\rangle + |10\rangle + |11\rangle)$ の各項を変換すると $\frac12(|00\rangle + |01\rangle + |11\rangle + |10\rangle)$ で元と同じ。$|+\rangle|+\rangle$ はCNOTの固有状態(固有値1)です。「CNOTを掛けても何も起きない入力がある」——固有状態の感覚を養う例です。
制御$U$の定義 $|0\rangle\langle 0| \otimes I + |1\rangle\langle 1| \otimes U$ に $U = Z$ を代入し、CZ の $4 \times 4$ 行列 $\mathrm{diag}(1,1,1,-1)$ を導け。
解答を見る
$|0\rangle\langle 0| \otimes I = \mathrm{diag}(1,1,0,0)$、$|1\rangle\langle 1| \otimes Z = \mathrm{diag}(0,0,1,-1)$。和は $\mathrm{diag}(1,1,1,-1)$ ✓。射影 $|0\rangle\langle 0|, |1\rangle\langle 1|$(ステップ1演習1-10)が「場合分け」の実装部品として働いています。この「射影で場合分けを書く」パターンは制御ゲート全般の設計図です。
次の回路の出力を求めよ(ベル回路の変種)。
q0: |0⟩ ──[H]──●──[H]──
│
q1: |0⟩ ───────⊕───────
解答を見る
CNOTまでで $\frac{|00\rangle + |11\rangle}{\sqrt2}$。最後の $H \otimes I$ で $\frac{|+\rangle|0\rangle + |-\rangle|1\rangle}{\sqrt2} = \frac{|00\rangle + |10\rangle + |01\rangle - |11\rangle}{2}$。4つの確率はすべて $\frac14$。ベル状態に片側だけ $H$ を掛けると相関が「見えなく」なる——どの基底で見るかで相関の見え方が変わる例です(ベル状態の相関はX基底同士で見ればまだ残っています。第4章演習で再訪)。
$(I \otimes H)\,\mathrm{CZ}\,(I \otimes H) = \mathrm{CNOT}$ を示せ。ヒント: 制御$U$の表式を使うと $(I \otimes H)(|0\rangle\langle 0| \otimes I + |1\rangle\langle 1| \otimes Z)(I \otimes H)$ が整理できる。また、この等式とCZの対称性から「CNOTの向きはHで挟むと反転する」を導け。
解答を見る
$(I \otimes H)(|0\rangle\langle 0| \otimes I + |1\rangle\langle 1| \otimes Z)(I \otimes H) = |0\rangle\langle 0| \otimes HIH + |1\rangle\langle 1| \otimes HZH = |0\rangle\langle 0| \otimes I + |1\rangle\langle 1| \otimes X = \mathrm{CNOT}$ ✓($HZH = X$ を使用)。
後半:CZ は上下対称なので、CNOT(0→1) $= (I \otimes H)\,\mathrm{CZ}\,(I \otimes H)$、CNOT(1→0) $= (H \otimes I)\,\mathrm{CZ}\,(H \otimes I)$。2式からCZを消去すると、CNOTの向き反転は両ワイヤを $H$ で挟むことに等しい:$(H \otimes H)\,\mathrm{CNOT}_{0\to1}\,(H \otimes H) = \mathrm{CNOT}_{1\to0}$。「どちらが制御か」すら基底の取り方次第——X基底で見ると制御と標的の役割が入れ替わります。
GHZ状態 $\frac{|000\rangle + |111\rangle}{\sqrt2}$ を作る回路を書き、各ステップの状態を計算して確かめよ。
解答を見る
q0: |0⟩ ──[H]──●─────
│
q1: |0⟩ ───────⊕──●──
│
q2: |0⟩ ──────────⊕──
$|000\rangle \to \frac{|000\rangle + |100\rangle}{\sqrt2} \to \frac{|000\rangle + |110\rangle}{\sqrt2} \to \frac{|000\rangle + |111\rangle}{\sqrt2}$ ✓。CNOT(0→1)とCNOT(0→2)の2本でも作れます(どちらの回路も正解)。「分岐の印をバケツリレーで増やす」パターンは何量子ビットでも同じです。
SWAP = CNOT(0→1)·CNOT(1→0)·CNOT(0→1) を、基底状態 $|01\rangle$ と $|10\rangle$ について追跡して確かめよ($|00\rangle, |11\rangle$ は明らかに不変)。古典プログラミングの「XOR3回でスワップ」(a^=b; b^=a; a^=b)と同じ仕掛けであることに注目。
解答を見る
$|01\rangle$: CNOT(0→1)で制御q0=0、不変 $|01\rangle$ → CNOT(1→0)で制御q1=1、q0反転 $|11\rangle$ → CNOT(0→1)で制御q0=1、q1反転 $|10\rangle$ ✓。$|10\rangle$ も同様に $|10\rangle \to |11\rangle \to |01\rangle$ ✓。まさに「テンポラリ変数なしのXORスワップ」の量子版で、CNOTが「標的 ⊕= 制御」というXOR代入であることがよく分かります。線形性により、基底で正しければ任意の重ね合わせ状態の交換も正しく動きます。
【位相キックバックの実戦形】入力 $|+\rangle \otimes |-\rangle$ にCNOTを掛けたあと、制御側に $H$ を掛けて標準基底で測定する。q0の測定結果を予言せよ。次に、CNOTの代わりに「何もしない($I$)」場合の結果と比較せよ。
解答を見る
キックバック($X|-\rangle = -|-\rangle$、固有値 $-1$)で制御側は $|+\rangle \to |-\rangle$。$H|-\rangle = |1\rangle$ なのでq0は確率1で1。CNOTなしなら制御は $|+\rangle$ のままで $H|+\rangle = |0\rangle$、確率1で0。つまりこの回路は「CNOTが挿入されたか否か」を1回の測定で確実に判定します。「ゲートが作用したかどうかを、標的の状態を一切変えずに($|-\rangle$ のまま)制御側で検出する」——Deutsch-Jozsaアルゴリズム(ステップ3)は、この判定器で関数の性質を1回のクエリで見抜きます。
制御$T$($T$ の固有値は $1$ と $e^{i\pi/4}$)に、制御側 $|+\rangle$、標的側 $|1\rangle$ を入れると、制御側の状態はどうなるか。この操作を $k$ 回繰り返すと制御側はどうなるか。この「固有値の位相を制御側に累積させる」操作が、位相推定アルゴリズム(ステップ3)の原型です。
解答を見る
$T|1\rangle = e^{i\pi/4}|1\rangle$(固有値 $e^{i\pi/4}$)なので、キックバックで制御側は $\frac{|0\rangle + e^{i\pi/4}|1\rangle}{\sqrt2}$。$k$ 回繰り返すと位相が累積して $\frac{|0\rangle + e^{ik\pi/4}|1\rangle}{\sqrt2}$(ブロッホ球の赤道を45°ずつ回る)。標的は常に $|1\rangle$ のまま。未知のユニタリの固有値 $e^{i\lambda}$ を、制御回数 $k$ を変えながらキックバックで「巻き取り」、H–位相–H変換で読み出す——これが位相推定の全体構想で、Shorのアルゴリズムはこれで周期を抽出します。部品はもう全部あなたの手元にあります。
「CNOTの制御ビットは変化しない」という説明は、標準基底の入力については正しい。しかし問3-7では制御側が $|+\rangle$ から $|-\rangle$ に変化した。矛盾しないのはなぜか。「制御ビットは変化しない」という言明の正確な適用範囲を述べよ。
解答を見る
「制御は不変」は標準基底の入力($|0\rangle$ か $|1\rangle$)に限った言明です。CNOTの行列を見ると確かに制御ビットの値(第1ビット)はどの基底状態でも保存されます。しかし重ね合わせの入力では、各分岐に付く位相の違い($|1\rangle|u\rangle$ 分岐だけ $e^{i\lambda}$)が制御側の相対位相として現れ、標準基底以外で見ると状態変化になります。教訓:「このゲートは○○する」という日本語の説明はたいてい標準基底での話で、重ね合わせに対する振る舞いは行列(または線形性)でしか正確に語れません。回路の直観的説明を聞いたら「それはどの基底での話か?」と問い返す癖をつけてください。