量子測定とは?量子コンピュータの計算結果を取り出す仕組み
はじめに:量子コンピュータの「答え」はどうやって知るのか
量子コンピュータは、量子力学の原理を使って計算を行います。量子ビットが重ね合わせ状態やもつれ状態を利用することで、古典コンピュータでは難しい計算も効率的に行える可能性があります。
しかし、計算が終わった後の量子ビットの状態は、私たちが普段目にしている古典的な0か1といった明確な情報ではありません。量子状態は非常に繊細で、直接「見る」ことはできません。では、量子コンピュータが行った計算の結果を、私たちはどのようにして知ることができるのでしょうか。
そこで重要になるのが、「量子測定」という操作です。量子測定は、量子コンピュータが行った計算の結果を、私たち人間が理解できる古典的な情報(0または1)として取り出すための最後のステップです。この量子測定には、古典的な測定とは異なる、量子力学特有の性質があります。本記事では、この量子測定の基本的な仕組みと、その特徴について分かりやすく解説します。
量子測定の基本的な仕組み
量子測定の最も基本的な役割は、量子ビットが持っている量子的な状態を、古典的なビット値(0か1)に変換することです。量子ビットは計算の途中では重ね合わせ状態など様々な状態を取り得ますが、測定を行うとその状態は0か1のどちらかに確定します。
例えば、1つの量子ビットが $|0\rangle$ と $|1\rangle$ の重ね合わせ状態にあるとします。これは、0であり同時に1でもあるような、あいまいな状態です。このような状態を測定すると、必ず0または1のどちらかの結果が得られます。
このとき、どちらの結果が得られるかは確率的に決まります。量子ビットの状態が $| \psi \rangle = \alpha |0\rangle + \beta |1\rangle$ で表される場合、測定によって0が得られる確率は $|\alpha|^2$、1が得られる確率は $|\beta|^2$ となります。ここで、$\alpha$と$\beta$は複素数で、それぞれの絶対値の2乗は確率を表します($|\alpha|^2 + |\beta|^2 = 1$)。この確率の法則は「ボルンの規則」と呼ばれ、量子力学の基本的なルールの一つです。
測定による状態の変化(収縮)
量子測定の非常に重要な特徴として、「測定を行うと量子ビットの状態が変化する」という性質があります。具体的には、測定によってある結果(例えば0)が得られた場合、その量子ビットの状態は、測定前にどのような重ね合わせ状態にあったとしても、測定後はその結果に対応する状態(この場合は $|0\rangle$)に確定してしまいます。この現象は「状態の収縮(あるいは波動関数の収縮)」と呼ばれます。
まるで、箱の中の猫が生と死の重ね合わせ状態にあるとして、箱を開けて観測した瞬間に、猫の状態が生か死かのどちらかに確定してしまう、という有名な思考実験「シュレーディンガーの猫」に似ています。量子測定は、量子ビットの重ね合わせ状態を壊し、古典的な状態に確定させる操作なのです。
この性質は、古典的な情報処理にはない、量子測定特有のものです。古典的なビット(0か1)を読んでも、そのビットの値が変わることはありません。しかし、量子ビットでは、測定自体が状態を変化させてしまうため、計算の途中で安易に測定を行うと、計算プロセスそのものに影響を与えてしまう可能性があります。したがって、通常は計算の最後に必要な量子ビットだけを測定して結果を取り出します。
複数の量子ビットの測定
量子コンピュータは、複数の量子ビットを使って計算を行います。複数の量子ビットを測定する場合、それぞれの量子ビットに対して独立に測定を行うことが一般的です。
例えば、2つの量子ビットがそれぞれ独立した重ね合わせ状態にある場合、それぞれの量子ビットを測定すると、それぞれのビットに対して確率的に0または1が得られます。結果は2ビットの古典的な情報(00, 01, 10, 11のいずれか)として得られます。
一方、量子もつれ状態にある複数の量子ビットを測定する場合、面白い現象が起こります。例えば、2つの量子ビットが $|00\rangle + |11\rangle$ のもつれ状態にあるとします。この状態にある2つの量子ビットを測定すると、結果は必ず00か11のどちらかになります。01や10の結果は絶対に得られません。これは、片方の量子ビットを測定して結果が0だった場合、もう片方の量子ビットも測定するまでもなく0であることが確定する、というように、測定結果に強い相関が現れることを意味します。もつれ状態の測定は、量子コンピュータの強力な計算能力の源泉の一つでもあります。
量子回路における測定
実際の量子コンピュータのプログラミングでは、量子ゲートによって量子ビットの状態を操作した後、最後に「測定ゲート」や「測定操作」を適用することで、量子ビットの状態を古典的なビット(レジスタ)に書き込みます。
例えば、Qiskitのような量子プログラミングライブラリでは、measure
のようなコマンドを使って、特定の量子ビット(q[0]など)を測定し、その結果を古典レジスタ(c[0]など)に格納する、といった操作を記述します。
from qiskit import QuantumCircuit, ClassicalRegister, QuantumRegister, Aer, execute
# 量子ビット1つ、古典ビット1つを用意
qr = QuantumRegister(1, 'q')
cr = ClassicalRegister(1, 'c')
qc = QuantumCircuit(qr, cr)
# 量子ビットを重ね合わせ状態にする(例:Hゲート)
qc.h(qr[0])
# 量子ビットを測定し、古典ビットに結果を書き込む
qc.measure(qr[0], cr[0])
# シミュレーターで実行し、測定結果を得る
simulator = Aer.get_backend('qasm_simulator')
job = execute(qc, simulator, shots=1024) # 1024回測定を繰り返す
result = job.result()
counts = result.get_counts(qc)
print("測定結果:", counts)
# 測定結果: {'0': 518, '1': 506} のように、おおよそ半々の確率で0と1が得られる
このコード例のように、重ね合わせ状態の量子ビットを複数回測定すると、確率に応じた頻度で0と1の結果が得られます。量子コンピュータの計算結果は、このように何度も測定を繰り返して統計的に得るのが一般的です。
まとめ:量子測定の重要性
量子測定は、量子コンピュータの計算結果を古典的な情報として取り出すために不可欠な操作です。その主な特徴は以下の通りです。
- 量子状態を古典的なビット値(0または1)に変換します。
- 結果は確率的に得られ、その確率は量子状態の確率振幅によって決まります。
- 測定を行うと量子状態が変化(収縮)し、測定結果に対応する古典的な状態に確定します。
- 複数の量子ビットを測定する場合、もつれ状態にある場合は結果に相関が見られます。
量子コンピュータの計算は、量子ゲートによる状態の操作と、最後に測定を行って結果を取り出す、という流れで構成されます。この測定の性質を理解することは、量子アルゴリズムがどのように機能するのか、また量子コンピュータで何ができて何が難しいのかを理解する上で、非常に重要になります。
量子測定は、私たちが量子世界から情報を得るための唯一の窓口であり、その確率的な性質と状態への影響は、量子コンピュータの設計やプログラミングにおいて常に考慮すべき基本的な概念です。