第4章測定のタイミングと意味
この章の目標
- 回路の中の測定(途中測定・末尾測定)を正確に計算できるようになる
- 途中測定が干渉を破壊することを、計算と実験の両方で確認する
- 「基底を回してから測る」を回路の道具として使えるようになる
- 遅延測定の原理(測定は最後まで先送りできる)を理解する
4.1 回路の中の測定
測定は回路図ではメーター記号で書かれ、以降のワイヤは二重線(古典ビット)になります:
q0: |0⟩ ──[H]──[M]══════ ══ は古典ビット(0 か 1 が確定している)
計算規則はステップ1第4章の公理3そのままです:測定した量子ビットについてボルン則で確率を出し、結果に応じて状態を収縮させ、残りの回路は収縮後の状態に対して続行する。つまり途中測定のある回路は「確率的な場合分けを含む計算」になります。
4.2 本章のハイライト: 測定は干渉を破壊する
次の2つの回路を比べます。違いは真ん中の測定だけです:
回路A: q0: |0⟩ ──[H]────────[H]──[M]══
回路B: q0: |0⟩ ──[H]──[M]══─[H]──[M]══
回路A: $HH|0\rangle = |0\rangle$ なので、測定結果は確率1で 0。$H$ で開いた2つの分岐($|0\rangle$ 経由と $|1\rangle$ 経由)の振幅が、2回目の $H$ で干渉して $|1\rangle$ 成分を打ち消し合うからです。
回路B: 1回目の測定で状態は $|0\rangle$ または $|1\rangle$(各 $\frac12$)に収縮。どちらの場合も2回目の $H$ で $|\pm\rangle$ になり、最終測定は50/50。
干渉は「複数の分岐の振幅が共存して足し算される」ことで起きます。途中測定は分岐のどちらかを確定させる=経路情報を取得する操作で、その瞬間にもう一方の分岐の振幅は消え、打ち消し合いの相手がいなくなります。二重スリット実験で「どちらのスリットを通ったか観測すると縞が消える」のと同型の現象を、いまあなたは2×2行列だけで完全に計算できています。
回路設計上の教訓:量子アルゴリズムの途中に安易に測定を入れてはいけない。干渉で答えを浮かび上がらせる前に測ると、せっかくの振幅の構造が壊れます。測定は原則、干渉が完了した最後に置くものです。
4.3 基底を回してから測る(回路の定石)
実機とQiskitの測定は標準基底(Z基底)固定です。他の基底で測りたければ、測定の直前にユニタリで基底を回します(ステップ1演習4-6の回路版):
| 測りたい基底 | 測定前に置くゲート | 結果の読み替え |
|---|---|---|
| X基底 $\{|+\rangle, |-\rangle\}$ | $H$ | 0 → 「$+$」, 1 → 「$-$」 |
| Y基底 $\{|{+i}\rangle, |{-i}\rangle\}$ | $S^\dagger$ then $H$ | 0 → 「$+i$」, 1 → 「$-i$」 |
| 任意の基底 | その基底を標準基底へ写すユニタリ | — |
ブロッホ球で言えば「測りたい軸をz軸へ回してから、z軸で測る」。第1章の絵とここで繋がります。
4.4 遅延測定の原理
回路の途中の測定は、測定結果を後段で「古典制御」として使っていても、制御を量子制御ゲートに置き換えることで回路の最後まで先送りできる。先送りしても最終的な測定統計は変わらない。
q0: ──[M]══●══ q0: ──●──[M]══
║ = │
q1: ───────X── q1: ──⊕───────
(測って1なら古典的にXを打つ) (CNOTしてから測る)
左は「q0を測り、結果が1だったらq1にXを掛ける」、右はただのCNOT+末尾測定。両者の最終統計が一致することは演習4-6で確かめます。この原理のおかげで、理論解析では「測定は全部最後」と仮定してよく、逆に実装では「量子制御を早めの測定+古典制御に置き換えてハードを節約する」方向にも使えます(量子テレポーテーション(第7章)で実際に使います)。
注意:先送り「できる」のは統計が変わらないという意味であって、4.2節の回路Bのように測定の後に干渉を起こすゲート($H$ など)が同じワイヤに続く場合、測定を入れる/入れないは別の回路です。「入れても同じ」なのは、測定結果が古典制御にしか使われない(そのワイヤにもう干渉が起きない)ときです。
from qiskit import QuantumCircuit
from qiskit_aer import AerSimulator
# 回路B: 途中測定あり
qc = QuantumCircuit(1, 2) # 量子ビット1個、古典ビット2個
qc.h(0)
qc.measure(0, 0) # 途中測定 → 古典ビット0
qc.h(0)
qc.measure(0, 1) # 最終測定 → 古典ビット1
print(AerSimulator().run(qc, shots=1000).result().get_counts())
# 結果は '00','01','10','11' がほぼ均等(左が最終測定)。
# 途中測定を消すと最終測定は必ず0になる。
古典ビットを2個用意すると途中と最後の両方の結果が記録できます。qc.x(0).c_if(...) 系の古典制御(動的回路)もありますが、まずは「測ってから続ける」が計算できれば十分です。
演習4
次の回路の測定結果の分布を求めよ。
q0: |0⟩ ──[H]──●──[M]══
│
q1: |0⟩ ──[X]──⊕──[M]══
解答を見る
$(H \otimes X)|00\rangle = \frac{|01\rangle + |11\rangle}{\sqrt2}$。CNOTで $|01\rangle \to |01\rangle$(制御0)、$|11\rangle \to |10\rangle$(制御1)。最終状態 $\frac{|01\rangle + |10\rangle}{\sqrt2}$(ベル状態 $|\Psi^+\rangle$!)。測定分布は 01 と 10 が半々——今度は「必ず食い違う」相関です。
未知の量子ビットが $|+\rangle$ か $|-\rangle$ のどちらかであることが分かっている。1回の測定で確実に判別する回路を書け。
解答を見る
──[H]──[M]══。$H|+\rangle = |0\rangle$, $H|-\rangle = |1\rangle$ なので、結果0なら $|+\rangle$、1なら $|-\rangle$ と確定します(ステップ1演習2-7の回路版)。「直交する2状態は、適切な基底(=適切な前処理ユニタリ)で1回で完全に区別できる」の実装です。逆に直交しない2状態(例: $|0\rangle$ と $|+\rangle$)はどんな回路でも確実には区別できません。
回路B($H$ → 測定 → $H$ → 測定)で、1回目の測定が 1 だった場合に限定すると、2回目の測定の分布はどうなるか。また「1回目が1 かつ 2回目が0」となる確率は?
解答を見る
1回目で1が出たら状態は $|1\rangle$ に収縮。$H|1\rangle = |-\rangle$ なので2回目は50/50。「1回目1かつ2回目0」は $\frac12 \times \frac12 = \frac14$。途中測定入りの回路は結果で条件付けた確率の木として計算します(4通りの葉がすべて $\frac14$)。
ベル状態 $\frac{|00\rangle + |11\rangle}{\sqrt2}$ の両方の量子ビットをX基底で測定する(両ワイヤに $H$ を掛けてから標準基底で測定)。結果の分布を計算せよ。Z基底での測定(00/11が半々)と比べ、相関はどうなっているか。
解答を見る
$(H \otimes H)\frac{|00\rangle + |11\rangle}{\sqrt2}$ を計算する。$H \otimes H$ で $|00\rangle \to \frac12(|00\rangle{+}|01\rangle{+}|10\rangle{+}|11\rangle)$、$|11\rangle \to \frac12(|00\rangle{-}|01\rangle{-}|10\rangle{+}|11\rangle)$。和を取ると $|01\rangle, |10\rangle$ 成分が打ち消し、$\frac{|00\rangle + |11\rangle}{\sqrt2}$。ベル状態はX基底で見てもベル状態で、測定結果は「$++$」か「$--$」が半々——X基底でも完全相関です。Z基底でもX基底でも相関する、この「複数の基底で同時に成り立つ相関」は古典的な仕掛け(あらかじめ答えを仕込んだ紙切れ)では再現できないことが示せて(ベルの不等式)、エンタングルメントが本質的に量子的である証拠になっています(読み物として調べてみてください)。
回路Aの $H$–$H$ の間に $Z$ を入れた回路($H$–$Z$–$H$–測定)の結果の分布を求めよ。次に $Z$ の代わりに測定を入れてから $Z$ を掛けた場合($H$–測定–$Z$–$H$–測定)はどうか。
解答を見る
前半:$HZH = X$ なので $X|0\rangle = |1\rangle$、確率1で1。後半:途中測定で $|0\rangle$ か $|1\rangle$ に収縮(各 $\frac12$)。$Z$ は $|0\rangle$ を不変、$|1\rangle$ を $-|1\rangle$(グローバル位相)にするだけなので物理的に何もせず、$H$ で $|\pm\rangle$ になり最終測定は50/50。$Z$ が意味を持つのは重ね合わせの相対位相としてであり、収縮後の基底状態には効かない——「位相は干渉の中でしか観測に影響しない」ことの好例です。
【遅延測定の原理の検証】初期状態 $|+\rangle \otimes |0\rangle$ について、(a) 「q0を測定し、結果が1ならq1に$X$を掛け、最後にq1を測定」、(b) 「CNOT(0→1)を掛けてから両方測定」——それぞれの (q0の結果, q1の結果) の同時分布を計算し、一致することを確かめよ。
解答を見る
(a) q0測定:0か1が各 $\frac12$。結果0 → q1は $|0\rangle$ のまま → (0,0)。結果1 → $X$ でq1は $|1\rangle$ → (1,1)。分布:(0,0)と(1,1)が各 $\frac12$。 (b) CNOTで $\frac{|00\rangle + |11\rangle}{\sqrt2}$(ベル状態)、測定で00か11が各 $\frac12$。完全に一致 ✓。「古典制御(測定してから if で操作)」と「量子制御(制御ゲートを掛けてから測定)」が統計として等価——これが遅延測定の原理です。第7章のテレポーテーションでは、この等価性を逆向きに使って回路を実装しやすい形に変形します。
回路Bで、1回目の「測定」の代わりにCNOTで補助量子ビットに情報をコピーするだけ(測定はしない)にした回路を考える:
q0: |0⟩ ──[H]──●──[H]──[M]══
│
q1: |0⟩ ───────⊕──────────── (q1は測らず放置)
q0の測定分布を計算せよ。結果は回路A(干渉あり、必ず0)と回路B(測定あり、50/50)のどちらに近いか。
解答を見る
CNOT後は $\frac{|00\rangle + |11\rangle}{\sqrt2}$。$H \otimes I$ で $\frac{|+\rangle|0\rangle + |-\rangle|1\rangle}{\sqrt2} = \frac12(|00\rangle + |10\rangle + |01\rangle - |11\rangle)$。q0の測定分布は $P(0) = \frac14 + \frac14 = \frac12$。誰も測っていないのに、回路B(50/50)と同じです。
干渉が消えた理由:q0の2つの分岐が $|0\rangle_{q1}$ と $|1\rangle_{q1}$ という直交した「目撃者」と絡んでしまったため、q0単独では振幅が足し合わされなくなった($|00\rangle$ と $|10\rangle$ は別の基底ベクトルなので打ち消し合えない)。測定装置に限らず、経路情報がどこかに漏れた時点で干渉は死ぬ——これがデコヒーレンスの正体で、「環境」という巨大な目撃者と絡むことが実機のエラーの主因です。誤り訂正が必要な理由(ステップ3の後の読み物テーマ)はこの計算の延長にあります。
古典プログラマの発想で「量子回路の途中に print(状態) 的な測定を仕込んでデバッグしたい」。この発想の何が問題か、そして実際のデバッグではどうするのが正しいか、この章と第0章の内容を踏まえて述べよ。
解答を見る
問題点は2つ。(1) 測定は状態を収縮させるので、「観察してから続行」した回路はもはや元の回路ではない(回路A vs B)。(2) 1回の測定で得られるのは振幅ではなく1個の結果だけで、状態の把握には大量の反復が必要(ステップ1演習4-8)。正しいデバッグは:シミュレータの神の視点を使う——Statevector.from_instruction() で途中までの回路の振幅を直接覗く(実機では不可能だが、開発中はシミュレータでよい)。あるいは回路を部分ごとに単体テストする(小さい入力で手計算と突き合わせる)。「実行を止めて中を見る」が原理的に許されない計算モデルでは、検証は「見る」のではなく「予言と統計を突き合わせる」形になる——量子プログラミングの開発体験の最大の特徴です。