
量子テレポーテーションをQiskitで実装する|状態を"転送"するしくみ
2026-08-14 ・ 実践
「量子テレポーテーション」という名前は派手ですが、モノが瞬間移動するわけではありません。量子ビットの"状態"を、もつれと古典通信を使って別の量子ビットへ移すプロトコルです。量子ネットワークの土台になる技術を、Qiskitで実装して確かめます。
しくみ: もつれ+古典通信
送りたい状態を持つアリスと、受け取るボブが、あらかじめもつれたペアを共有しておきます。アリスが手元で測定し、その結果(古典ビット2つ)をボブに伝えると、ボブは自分の量子ビットを補正して元の状態を復元できます。
光より速くはない
状態を復元するにはアリスの測定結果(古典ビット)が必要で、それは普通の通信で送ります。だから光速を超えて情報は伝わりません。ここが「テレポーテーション」の誤解しやすい点です。
準備
pip install qiskit qiskit-aer
① 転送したい状態を用意する
q0に「転送したい状態」を作ります。今回はアダマール+Tゲートで適当な重ね合わせにします。
from qiskit import QuantumCircuit
qc = QuantumCircuit(3, 3) # q0=送る状態, q1=アリス, q2=ボブ
qc.h(0)
qc.t(0) # 何か特徴のある状態にしておく
qc.barrier()
② もつれペアを配る
q1・q2をもつれさせ、アリス(q1)とボブ(q2)が共有します。
qc.h(1)
qc.cx(1, 2)
qc.barrier()
③ アリスの操作と測定
q0とq1をベル基底で測定します。
qc.cx(0, 1)
qc.h(0)
qc.measure(0, 0)
qc.measure(1, 1)
qc.barrier()
④ ボブの補正(古典制御)
アリスの測定結果(古典ビット)に応じて、ボブがXとZで補正します。Qiskitの現行APIでは if_test を使い、個別の古典ビットで条件分岐します。
with qc.if_test((qc.clbits[1], 1)): # q1の測定が1ならX
qc.x(2)
with qc.if_test((qc.clbits[0], 1)): # q0の測定が1ならZ
qc.z(2)
古い c_if は使えない
昔の記事にある qc.x(2).c_if(...) はQiskitのバージョンアップでAPIが変わり、現行(Qiskit 2系)では動きません。with qc.if_test(...) が現在の書き方です。また条件はレジスタ全体の値ではなく、補正したい個別のビットに対して書くのがポイント。
検証のコツ
本当に転送できたか確かめるには、最後にq2へ「①でかけた操作の逆」をかけて測定します。完全に転送できていれば、q2は必ず 0 に戻るはず。ズレがあれば実装のどこかが間違っています。この「逆操作で0に戻るか」テストは量子回路デバッグの定番です。
逆操作テストで確かめる
from qiskit_aer import AerSimulator
# ①の逆(T†→H)をq2にかけて測定
qc.tdg(2)
qc.h(2)
qc.measure(2, 2)
result = AerSimulator().run(qc, shots=1000).result()
counts = result.get_counts()
# q2(左端ビット)が常に0なら成功
q2_zero = sum(v for k, v in counts.items() if k[0] == "0")
print("q2=0 の割合:", q2_zero / 1000) # 1.0 になる
q2=0 の割合: 1.0 ——アリスの手元にあった状態が、もつれと2ビットの古典通信だけでボブへ完全に転送できました。
まとめ
- 量子テレポーテーション=もつれ+古典通信で状態を別の量子ビットへ移す
- モノも情報も光速を超えては伝わらない(古典ビットの送信が必須)
- ボブは測定結果に応じてX/Zで補正して復元する
- 「逆操作で0に戻るか」で転送成功を検証できる
もう少し詳しく(背景と理論)
量子テレポーテーションは Bennett et al. (1993) が提案し1、未知の量子状態を「もつれ+2古典ビットの通信」で別の量子ビットへ移します。状態そのものは複製されず元は壊れるため、複製不可定理(未知状態はコピーできない)と矛盾しません2。また補正に必要な古典ビットは通常通信で送るので、光速を超えて情報は伝わりません(相対論と整合)3。1997年に光子で初の実験実証が行われ、以後もつれ交換や量子中継器へと発展し、量子ネットワークの基盤技術になっています4。
次の一歩 🌸
もつれの基礎は量子ビット超入門、回路の書き方はQiskit入門、状態ベクトルの裏側はNumPyで作る量子シミュレータへどうぞ。
Footnotes
-
Bennett, C. H. et al. (1993). "Teleporting an unknown quantum state via dual classical and Einstein-Podolsky-Rosen channels." Phys. Rev. Lett., 70, 1895. ↩
-
Wootters & Zurek (1982) の複製不可定理により、未知の量子状態を複製することはできない。テレポーテーションは「移動」であって「複製」ではないため両立する。 ↩
-
ボブは古典ビット(測定結果)が届くまで正しい状態を復元できない。この古典通信が光速に縛られるため、超光速通信はできない(no-signaling)。 ↩
-
もつれ交換(entanglement swapping)と量子中継器により、遠距離のもつれ配送=量子インターネットの実現が目指されている。 ↩