Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
quantum-kittens
GitHub Repository: quantum-kittens/platypus
Path: blob/main/translations/ja/ch-demos/chsh.ipynb
3860 views
Kernel: Python 3

局所実在論とCHSH不等式

これまでに、量子もつれが多粒子系でどのように強い相関をもたらすかを見てきました。実際、これらの相関関係は、古典物理学で説明できるものよりも強いように見えます。

量子力学の歴史的発展は、現実の真の姿と量子力学がそれを説明できる範囲についての激論に満ちています。量子力学が実証的に目覚ましい成功を収めたことを考えれば、直感的に理解できない部分があるからといって、簡単にあきらめるわけにはいかないことは明らかでした。

これらの異なる見解の根底にあったのは、測定の本質の問題です。量子測定にはランダムな要素があることはわかっていますが、それは本当にそうでなのでしょうか?ある測定値が将来どのような値になるかは、宇宙があらかじめこっそり決めているのではないでしょうか?この仮説は、さまざまな隠れた変数理論の基礎でした。しかし、これらの理論は、単一粒子レベルでのランダム性を説明するだけでは不十分だったのです。多粒子からなるもつれた系を、異なる観測者が異なる部分を測定した場合に何が起こるかを説明する必要があったのです!これは、隠れた変数理論を超えたものです。量子力学の観測結果を、局所的な実在が成立する宇宙と調和させるためには、局所的な隠れた変数理論が必要だったのです。

局所実在論とは何ですか?局所性が保たれている宇宙では、2つの系を空間的に分離して、相互に作用させないことが可能なはずです。実在論の概念は、測定可能な量が、今後一切測定されない場合にも特定の値を保持するかどうかということに関連しています。

1963年、ジョン・スチュワート・ベルは、科学史上最も深遠な発見の一つと言えるものを発表しました。ベルは、局所的な隠れた変数を仮定した理論は実験的に否定できると述べました。この章では、その方法を確認し、それを実証する実際の実験を実行します。 (抜け穴を塞がなければならないですが...)

CHSH不等式

アリスとボブに2量子のエンタングルした系のそれぞれ1つずつが与えられているとします。次に、それぞれ、2つの異なる基底で、自分の持っている量子ビットに2つの測定を実行します。アリスの基底をAa 、ボブの基底をBbと呼びましょう。このとき、この量CHSH=ABAb+aB+ab\langle CHSH \rangle = \langle AB \rangle - \langle Ab \rangle + \langle aB \rangle + \langle ab \rangleの期待値は何でしょうか?

現在、アリスとボブはそれぞれ1量子ビットを持っていて、システム(量子ビット)でに対して行う測定では、+1または-1の2つの可能な結果のうちの1つしか得られません。通常、2つの量子ビット状態を0 | 0 \rangle1|1 \rangleと呼びますが、これらは固有状態であり、射影測定により、それぞれ固有値+1と-1が得られることに注意してください。

したがって、 AaB 、およびbのいずれかの測定で±1\pm 1しか得られない場合、量(Bb)(B-b)および(B+b)(B+ b)は0または±2 \pm2になります。したがって、量A(Bb)+a(B+b)A(B-b)+ a(B+b)は、+2または-2のいずれかになります。これは、量CHSH|\langle CHSH \rangleの期待値に限界があることを意味します:CHSH=ABAb+aB+ab2|\langle CHSH \rangle| =|\langle AB \rangle - \langle Ab \rangle + \langle aB \rangle + \langle ab \rangle| \leq 2

アリスとボブからの測定値のセットの結果は局所的の隠れた変数のセットに依存する可能性があるため、上記の説明は単純化されすぎていますが、それが当てはまる場合でも、局所実在論が成り立つなら、量CHSHCHSHの期待値の上限は2になるべきことが数学で示すことができます。

しかし、エンタングルした系でこれらの実験を行うとどうなるでしょうか?試してみましょう!

#import qiskit tools import qiskit from qiskit import QuantumCircuit, ClassicalRegister, QuantumRegister, transpile, Aer, IBMQ from qiskit.tools.visualization import circuit_drawer from qiskit.tools.monitor import job_monitor, backend_monitor, backend_overview from qiskit.providers.aer import noise #import python stuff import matplotlib.pyplot as plt import numpy as np import time
# Set devices, if using a real device IBMQ.load_account() provider = IBMQ.get_provider('ibm-q') quito = provider.get_backend('ibmq_quito')
sim = Aer.get_backend('aer_simulator')

まず、CHSH回路を作成するための関数を定義します。一般性を失うことなく、ボブはBBbbの測定に計算基底(Z Z )とX X基底を常に使用するのに対し、アリスは直交基底を選択しますが、その角度はボブの基底に対して、00から2π2\piの間で変化します。この角度のセットが、CHSHCHSH回路構築関数への入力引数になります。

def make_chsh_circuit(theta_vec): """Return a list of QuantumCircuits for use in a CHSH experiemnt (one for each value of theta in theta_vec) Args: theta_vec (list): list of values of angles between the bases of Alice and Bob Returns: List[QuantumCircuit]: CHSH QuantumCircuits for each value of theta """ chsh_circuits = [] for theta in theta_vec: obs_vec = ['00', '01', '10', '11'] for el in obs_vec: qc = QuantumCircuit(2,2) qc.h(0) qc.cx(0, 1) qc.ry(theta, 0) for a in range(2): if el[a] == '1': qc.h(a) qc.measure(range(2),range(2)) chsh_circuits.append(qc) return chsh_circuits

次に、数量 CHSH\langle CHSH \rangle を推定する関数を定義します。そのような量のうち 2 つを定義できます。実際には、 CHSH1=ABAb+aB+ab\langle CHSH1 \rangle = \langle AB \rangle - \langle Ab \rangle + \langle aB \rangle + \langle ab \rangleCHSH2=AB+AbaB+ab\langle CHSH2 \rangle = \langle AB \rangle + \langle Ab \rangle - \langle aB \rangle + \langle ab \rangle です。各量子ビットの測定軸を決めると、出力ビット列からのカウントを適切な符号 (偶数項 00001111 の場合はプラス、奇数項 01011010 の場合はマイナス) で加算するだけで、各期待値を簡単に推定できます。

def compute_chsh_witness(counts): """Computes expectation values for the CHSH inequality, for each angle (theta) between measurement axis. Args: counts (list[dict]): dict of counts for each experiment (4 per value of theta) Returns: Tuple(List, List): Tuple of lists with the two CHSH witnesses """ # Order is ZZ,ZX,XZ,XX CHSH1 = [] CHSH2 = [] # Divide the list of dictionaries in sets of 4 for i in range(0, len(counts), 4): theta_dict = counts[i:i + 4] zz = theta_dict[0] zx = theta_dict[1] xz = theta_dict[2] xx = theta_dict[3] no_shots = sum(xx[y] for y in xx) chsh1 = 0 chsh2 = 0 for element in zz: parity = (-1)**(int(element[0])+int(element[1])) chsh1+= parity*zz[element] chsh2+= parity*zz[element] for element in zx: parity = (-1)**(int(element[0])+int(element[1])) chsh1+= parity*zx[element] chsh2-= parity*zx[element] for element in xz: parity = (-1)**(int(element[0])+int(element[1])) chsh1-= parity*xz[element] chsh2+= parity*xz[element] for element in xx: parity = (-1)**(int(element[0])+int(element[1])) chsh1+= parity*xx[element] chsh2+= parity*xx[element] CHSH1.append(chsh1/no_shots) CHSH2.append(chsh2/no_shots) return CHSH1, CHSH2

最後に、間隔 [0,2π)[0, 2\pi) を 15 の角度に分割し、対応する CHSHCHSH 回路のセットを構築します。

number_of_thetas = 15 theta_vec = np.linspace(0,2*np.pi,number_of_thetas) my_chsh_circuits = make_chsh_circuit(theta_vec)

ここで、これらの回路のうち 4 つが特定の θ\theta に対してどのように見えるかを簡単に見てみましょう。

my_chsh_circuits[4].draw()
Image in a Jupyter notebook
my_chsh_circuits[5].draw()
Image in a Jupyter notebook
my_chsh_circuits[6].draw()
Image in a Jupyter notebook
my_chsh_circuits[7].draw()
Image in a Jupyter notebook

これらの回路は、ベル・ペアを作成し、各量子ビットを異なる基底で測定しています。ボブ(q1 q_1 )は常に計算基底またはX X 基底のいずれかで測定しますが、アリスの測定基底はボブに対してθ \thetaの角度で回転しています。

# Execute and get counts result_ideal = sim.run(my_chsh_circuits).result() tic = time.time() transpiled_circuits = transpile(my_chsh_circuits, quito) job_real = quito.run(transpiled_circuits, shots=8192) job_monitor(job_real) result_real = job_real.result() toc = time.time() print(toc-tic)
Job Status: job has successfully run 794.7613911628723
CHSH1_ideal, CHSH2_ideal = compute_chsh_witness(result_ideal.get_counts()) CHSH1_real, CHSH2_real = compute_chsh_witness(result_real.get_counts())

次に、結果をプロットします。

plt.figure(figsize=(12,8)) plt.rcParams.update({'font.size': 22}) plt.plot(theta_vec,CHSH1_ideal,'o-',label = 'CHSH1 Noiseless') plt.plot(theta_vec,CHSH2_ideal,'o-',label = 'CHSH2 Noiseless') plt.plot(theta_vec,CHSH1_real,'x-',label = 'CHSH1 Quito') plt.plot(theta_vec,CHSH2_real,'x-',label = 'CHSH2 Quito') plt.grid(which='major',axis='both') plt.rcParams.update({'font.size': 16}) plt.legend() plt.axhline(y=2, color='r', linestyle='-') plt.axhline(y=-2, color='r', linestyle='-') plt.axhline(y=np.sqrt(2)*2, color='k', linestyle='-.') plt.axhline(y=-np.sqrt(2)*2, color='k', linestyle='-.') plt.xlabel('Theta') plt.ylabel('CHSH witness')
Text(0, 0.5, 'CHSH witness')
Image in a Jupyter notebook

何が起こったかよく見てください! CHSH2|CHSH| \geq 2となるような特定の測定基底の組合せがあります。どうしてそんなことが可能なのでしょうか?エンタングルした2粒子系を考えてみましょう。ψ=1/2(00+11)|\psi \rangle = 1/\sqrt{2} (|00\rangle + |11\rangle) の場合、期待値 AB=ψABψ=cosθAB\langle AB \rangle = \langle \psi|A \otimes B| \psi \rangle = -\cos \theta_{AB} であることを示すのは簡単です。ここで、 θAB\theta_{AB}は測定基底AABBの間の角度です。したがって、基底A=1/2(σzσx)A = 1/\sqrt{2}(\sigma_z - \sigma_x) および a=1/2(σz+σx)a = 1/\sqrt{2}(\sigma_z + \sigma_x) の特定の選択について、Bob にB=σzB=\sigma_zb=σxb=\sigma_x で測定させると、CHSH1=22>2|\langle CHSH1 \rangle| = 2\sqrt{2} > 2 となることがわかります。 222\sqrt{2} は、量子の場合でも達成可能な最大値であることを示すこともできます (プロット中の点線)。

上記の不等式は、Clauser、Horne、Shimony、HoltにちなんでCHSHと呼ばれ、Bellの元の不等式を表す最も一般的な方法です。

実際のデバイスでCHSH不等式を破ったことは意義深いことです。ほんの10年前には、このような実験は大きな衝撃を与えたことでしょう。現在では、量子デバイスの性能は大幅に改善されており、これらの結果は最先端のハードウェアで簡単に再現できます。しかし、局所性と実在性のどちらかが反証されたと主張するためには、不等式を破る際に閉じなければならない抜け道がいくつかあります。これらは、検出の抜け穴(検出器に障害があり、意味のある統計が得られない場合)と局所性/因果性の抜け穴(エンタングルした系の2つの部分が、測定にかかる時間の中で光が到達する距離よりも小さい距離で離れている場合)です。忠実度の高いエンタングル・ペアを生成でき、すべての測定で結果が得られる(つまり、測定された粒子が「失われる」ことはない)ことを考えると、我々は上記の実験において検出の抜け穴を塞いだことになります。ただし、量子ビット間の距離(数mm)と測定の実行にかかる時間(μ\musのオーダー)を考えると、因果関係の抜け穴を塞いだとは言えません。

練習問題

アリスとボブが別々の部屋に入れられ、それぞれに少しの xxyy が与えられるゲームを考えてみましょう。これらのビットはランダムに選択され、互いに独立しています。ビットを受信すると、それぞれが独自のビット aabb で応答します。ここで、x=y=1x=y=1 の場合は常に aabb が異なり、それ以外の場合は等しい場合、Alice と Bob がゲームに勝ちます。 Alice と Bob にとって最善の戦略は、常に a=b=0a=b=0 (または 11) を与えることです。この戦略では、アリスとボブは最大 75% の確率でゲームに勝つことができます。

アリスとボブがエンタングルした2量子ビット状態を共有しているとします。75%よりも高い確率で勝てる戦略はあるでしょうか? (事前に戦略について合意することはできますが、ランダムなビットが与えられると、通信できなくなります。もちろん、エンタングルしたペアのそれぞれの量子ビットをいつでも持ち歩くことができます。)

import qiskit.tools.jupyter %qiskit_version_table