Langkau ke kandungan utama

Ketaksamaan CHSH

Anggaran penggunaan: Dua minit pada pemproses Heron r2 (NOTA: Ini adalah anggaran sahaja. Masa jalan sebenar mungkin berbeza.)

Latar belakang​

Dalam tutorial ini, kamu akan menjalankan eksperimen pada komputer kuantum untuk menunjukkan pelanggaran ketaksamaan CHSH menggunakan primitif Estimator.

Ketaksamaan CHSH, dinamakan sempena pengarang-pengarangnya Clauser, Horne, Shimony, dan Holt, digunakan untuk membuktikan teorem Bell secara eksperimental (1969). Teorem ini menyatakan bahawa teori pembolehubah tersembunyi setempat tidak dapat menjelaskan beberapa kesan keterjaitan dalam mekanik kuantum. Pelanggaran ketaksamaan CHSH digunakan untuk menunjukkan bahawa mekanik kuantum tidak serasi dengan teori pembolehubah tersembunyi setempat. Ini adalah eksperimen penting untuk memahami asas mekanik kuantum.

Hadiah Nobel Fizik 2022 telah dianugerahkan kepada Alain Aspect, John Clauser dan Anton Zeilinger sebahagiannya atas kerja perintis mereka dalam sains maklumat kuantum, khususnya eksperimen mereka dengan foton yang terjalin yang menunjukkan pelanggaran ketaksamaan Bell.

Keperluan​

Sebelum memulakan tutorial ini, pastikan kamu telah memasang yang berikut:

  • Qiskit SDK v1.0 atau lebih baru, dengan sokongan visualisasi
  • Qiskit Runtime (pip install qiskit-ibm-runtime) v0.22 atau lebih baru

Persediaan​

# Added by doQumentation β€” required packages for this notebook
!pip install -q matplotlib numpy qiskit qiskit-ibm-runtime
# General
import numpy as np

# Qiskit imports
from qiskit import QuantumCircuit
from qiskit.circuit import Parameter
from qiskit.quantum_info import SparsePauliOp
from qiskit.transpiler.preset_passmanagers import generate_preset_pass_manager

# Qiskit Runtime imports
from qiskit_ibm_runtime import QiskitRuntimeService
from qiskit_ibm_runtime import EstimatorV2 as Estimator

# Plotting routines
import matplotlib.pyplot as plt
import matplotlib.ticker as tck

Langkah 1: Petakan input klasik kepada masalah kuantum​

Untuk eksperimen ini, kita akan mencipta pasangan terjalin di mana kita mengukur setiap Qubit pada dua asas yang berbeza. Kita akan melabelkan asas untuk Qubit pertama sebagai AA dan aa serta asas untuk Qubit kedua sebagai BB dan bb. Ini membolehkan kita mengira kuantiti CHSH S1S_1:

S1=A(Bβˆ’b)+a(B+b).S_1 = A(B-b) + a(B+b).

Setiap nilai boleh jadi +1+1 atau βˆ’1-1. Jelas sekali, salah satu daripada sebutan BΒ±bB\pm b mesti 00, dan yang satu lagi mesti Β±2\pm 2. Oleh itu, S1=Β±2S_1 = \pm 2. Nilai purata S1S_1 mesti memenuhi ketaksamaan:

∣⟨S1βŸ©βˆ£β‰€2.|\langle S_1 \rangle|\leq 2.

Mengembangkan S1S_1 dalam sebutan AA, aa, BB, dan bb menghasilkan:

∣⟨S1⟩∣=∣⟨ABβŸ©βˆ’βŸ¨Ab⟩+⟨aB⟩+⟨abβŸ©βˆ£β‰€2|\langle S_1 \rangle| = |\langle AB \rangle - \langle Ab \rangle + \langle aB \rangle + \langle ab \rangle| \leq 2

Kamu boleh mentakrifkan kuantiti CHSH lain S2S_2:

S2=A(B+b)βˆ’a(Bβˆ’b),S_2 = A(B+b) - a(B-b),

Ini membawa kepada ketaksamaan lain:

∣⟨S2⟩∣=∣⟨AB⟩+⟨AbβŸ©βˆ’βŸ¨aB⟩+⟨abβŸ©βˆ£β‰€2|\langle S_2 \rangle| = |\langle AB \rangle + \langle Ab \rangle - \langle aB \rangle + \langle ab \rangle| \leq 2

Jika mekanik kuantum boleh diterangkan oleh teori pembolehubah tersembunyi setempat, ketaksamaan sebelumnya mesti benar. Namun, seperti yang ditunjukkan dalam tutorial ini, ketaksamaan-ketaksamaan ini boleh dilanggar dalam komputer kuantum. Oleh itu, mekanik kuantum tidak serasi dengan teori pembolehubah tersembunyi setempat.

Kalau kamu nak belajar lebih banyak teori, terokai Keterjaitan dalam Tindakan bersama John Watrous.

Kamu akan mencipta pasangan terjalin antara dua Qubit dalam komputer kuantum dengan mewujudkan keadaan Bell ∣Φ+⟩=∣00⟩+∣11⟩2|\Phi^+\rangle = \frac{|00\rangle + |11\rangle}{\sqrt{2}}. Menggunakan primitif Estimator, kamu boleh mendapatkan nilai jangkaan yang diperlukan (⟨AB⟩,⟨Ab⟩,⟨aB⟩\langle AB \rangle, \langle Ab \rangle, \langle aB \rangle, dan ⟨ab⟩\langle ab \rangle) secara terus untuk mengira nilai jangkaan dua kuantiti CHSH ⟨S1⟩\langle S_1\rangle dan ⟨S2⟩\langle S_2\rangle. Sebelum diperkenalkannya primitif Estimator, kamu perlu membina nilai jangkaan daripada hasil ukuran.

Kamu akan mengukur Qubit kedua dalam asas ZZ dan XX. Qubit pertama juga akan diukur dalam asas ortogon, tetapi dengan sudut terhadap Qubit kedua, yang akan kita sapu antara 00 dan 2Ο€2\pi. Seperti yang akan kamu lihat, primitif Estimator memudahkan pelaksanaan Circuit berparameter. Daripada mencipta siri Circuit CHSH, kamu hanya perlu mencipta satu Circuit CHSH dengan parameter yang menentukan sudut ukuran dan siri nilai fasa untuk parameter tersebut.

Akhirnya, kamu akan menganalisis hasil dan memplotnya berbanding sudut ukuran. Kamu akan nampak bahawa untuk julat sudut ukuran tertentu, nilai jangkaan kuantiti CHSH ∣⟨S1⟩∣>2|\langle S_1\rangle| > 2 atau ∣⟨S2⟩∣>2|\langle S_2\rangle| > 2, yang menunjukkan pelanggaran ketaksamaan CHSH.

# To run on hardware, select the backend with the fewest number of jobs in the queue
service = QiskitRuntimeService()
backend = service.least_busy(
operational=True, simulator=False, min_num_qubits=127
)
backend.name
'ibm_kingston'

Cipta Circuit CHSH berparameter​

Pertama, kita tulis Circuit dengan parameter ΞΈ\theta, yang kita panggil theta. Primitif Estimator boleh memudahkan pembinaan Circuit dan analisis output dengan besar dengan menyediakan nilai jangkaan boleh ukur secara terus. Banyak masalah yang menarik, terutamanya untuk aplikasi jangka pendek pada sistem bising, boleh diformulasikan dalam sebutan nilai jangkaan. Primitif Estimator (V2) boleh menukar asas ukuran secara automatik berdasarkan boleh ukur yang diberikan.

theta = Parameter("$\\theta$")

chsh_circuit = QuantumCircuit(2)
chsh_circuit.h(0)
chsh_circuit.cx(0, 1)
chsh_circuit.ry(theta, 0)
chsh_circuit.draw(output="mpl", idle_wires=False, style="iqp")

Output of the previous code cell

Cipta senarai nilai fasa untuk ditetapkan kemudian​

Selepas mencipta Circuit CHSH berparameter, kamu akan mencipta senarai nilai fasa untuk ditetapkan pada Circuit dalam langkah seterusnya. Kamu boleh menggunakan kod berikut untuk mencipta senarai 21 nilai fasa yang merentangi 00 hingga 2Ο€2 \pi dengan jarak yang sama, iaitu 00, 0.1Ο€0.1 \pi, 0.2Ο€0.2 \pi, ..., 1.9Ο€1.9 \pi, 2Ο€2 \pi.

number_of_phases = 21
phases = np.linspace(0, 2 * np.pi, number_of_phases)
# Phases need to be expressed as list of lists in order to work
individual_phases = [[ph] for ph in phases]

Boleh Ukur​

Sekarang kita perlukan boleh ukur untuk mengira nilai jangkaan. Dalam kes kita, kita melihat asas ortogon bagi setiap Qubit, membiarkan putaran Yβˆ’Y- berparameter bagi Qubit pertama menyapu asas ukuran hampir berterusan berbanding asas Qubit kedua. Oleh itu, kita akan memilih boleh ukur ZZZZ, ZXZX, XZXZ, dan XXXX.

# <CHSH1> = <AB> - <Ab> + <aB> + <ab> -> <ZZ> - <ZX> + <XZ> + <XX>
observable1 = SparsePauliOp.from_list(
[("ZZ", 1), ("ZX", -1), ("XZ", 1), ("XX", 1)]
)

# <CHSH2> = <AB> + <Ab> - <aB> + <ab> -> <ZZ> + <ZX> - <XZ> + <XX>
observable2 = SparsePauliOp.from_list(
[("ZZ", 1), ("ZX", 1), ("XZ", -1), ("XX", 1)]
)

Langkah 2: Optimumkan masalah untuk pelaksanaan perkakasan kuantum​

Untuk mengurangkan jumlah masa pelaksanaan kerja, primitif V2 hanya menerima Circuit dan boleh ukur yang mematuhi arahan dan ketersambungan yang disokong oleh sistem sasaran (dirujuk sebagai Circuit dan boleh ukur ISA, iaitu instruction set architecture).

Circuit ISA​

target = backend.target
pm = generate_preset_pass_manager(target=target, optimization_level=3)

chsh_isa_circuit = pm.run(chsh_circuit)
chsh_isa_circuit.draw(output="mpl", idle_wires=False, style="iqp")

Output of the previous code cell

Boleh Ukur ISA​

Begitu juga, kita perlu mengubah boleh ukur supaya serasi dengan Backend sebelum menjalankan kerja dengan Runtime Estimator V2. Kita boleh melakukan transformasi menggunakan kaedah apply_layout pada objek SparsePauliOp.

isa_observable1 = observable1.apply_layout(layout=chsh_isa_circuit.layout)
isa_observable2 = observable2.apply_layout(layout=chsh_isa_circuit.layout)

Langkah 3: Laksanakan menggunakan primitif Qiskit​

Untuk melaksanakan keseluruhan eksperimen dalam satu panggilan kepada Estimator. Kita boleh mencipta primitif Qiskit Runtime Estimator untuk mengira nilai jangkaan kita. Kaedah EstimatorV2.run() mengambil iterable bagi primitive unified blocs (PUB). Setiap PUB adalah iterable dalam format (circuit, observables, parameter_values: Optional, precision: Optional).

# To run on a local simulator:
# Use the StatevectorEstimator from qiskit.primitives instead.

estimator = Estimator(mode=backend)

pub = (
chsh_isa_circuit, # ISA circuit
[[isa_observable1], [isa_observable2]], # ISA Observables
individual_phases, # Parameter values
)

job_result = estimator.run(pubs=[pub]).result()

Langkah 4: Proses pasca dan kembalikan hasil dalam format klasik yang dikehendaki​

Estimator memulangkan nilai jangkaan bagi kedua-dua boleh ukur, ⟨ZZβŸ©βˆ’βŸ¨ZX⟩+⟨XZ⟩+⟨XX⟩\langle ZZ \rangle - \langle ZX \rangle + \langle XZ \rangle + \langle XX \rangle dan ⟨ZZ⟩+⟨ZXβŸ©βˆ’βŸ¨XZ⟩+⟨XX⟩\langle ZZ \rangle + \langle ZX \rangle - \langle XZ \rangle + \langle XX \rangle.

chsh1_est = job_result[0].data.evs[0]
chsh2_est = job_result[0].data.evs[1]
fig, ax = plt.subplots(figsize=(10, 6))

# results from hardware
ax.plot(phases / np.pi, chsh1_est, "o-", label="CHSH1", zorder=3)
ax.plot(phases / np.pi, chsh2_est, "o-", label="CHSH2", zorder=3)

# classical bound +-2
ax.axhline(y=2, color="0.9", linestyle="--")
ax.axhline(y=-2, color="0.9", linestyle="--")

# quantum bound, +-2√2
ax.axhline(y=np.sqrt(2) * 2, color="0.9", linestyle="-.")
ax.axhline(y=-np.sqrt(2) * 2, color="0.9", linestyle="-.")
ax.fill_between(phases / np.pi, 2, 2 * np.sqrt(2), color="0.6", alpha=0.7)
ax.fill_between(phases / np.pi, -2, -2 * np.sqrt(2), color="0.6", alpha=0.7)

# set x tick labels to the unit of pi
ax.xaxis.set_major_formatter(tck.FormatStrFormatter("%g $\\pi$"))
ax.xaxis.set_major_locator(tck.MultipleLocator(base=0.5))

# set labels, and legend
plt.xlabel("Theta")
plt.ylabel("CHSH witness")
plt.legend()
plt.show()

Output of the previous code cell

Dalam rajah itu, garis dan kawasan kelabu mengehadkan sempadan; garis paling luar (titik-bergaris) mengehadkan sempadan kuantum (Β±2\pm 2), manakala garis dalam (bergaris) mengehadkan sempadan klasik (Β±22\pm 2\sqrt{2}). Kamu boleh nampak ada kawasan di mana kuantiti saksi CHSH melebihi sempadan klasik. Tahniah! Kamu berjaya menunjukkan pelanggaran ketaksamaan CHSH dalam sistem kuantum sebenar!

Kaji selidik tutorial​

Sila ambil kaji selidik ringkas ini untuk memberikan maklum balas tentang tutorial ini. Pandangan kamu akan membantu kami memperbaiki kandungan dan pengalaman pengguna kami.

Pautan ke kaji selidik

Note: This survey is provided by IBM Quantum and relates to the original English content. To give feedback on doQumentation's website, translations, or code execution, please open a GitHub issue.

Source: IBM Quantum docs β€” updated 7 Feb 2026
English version on doQumentation β€” updated 7 Mei 2026
This translation based on the English version of 9 Apr 2026