Lewati ke konten utama

Ketidaksetaraan CHSH

Perkiraan penggunaan: Dua menit di prosesor Heron r2 (CATATAN: Ini hanya perkiraan. Waktu eksekusi kamu bisa berbeda.)

Latar Belakang​

Dalam tutorial ini, kamu akan menjalankan eksperimen di komputer kuantum untuk mendemonstrasikan pelanggaran ketidaksetaraan CHSH dengan primitif Estimator.

Ketidaksetaraan CHSH, dinamai berdasarkan para penulisnya yaitu Clauser, Horne, Shimony, dan Holt, digunakan untuk membuktikan teorema Bell secara eksperimental (1969). Teorema ini menyatakan bahwa teori variabel tersembunyi lokal tidak dapat menjelaskan beberapa konsekuensi dari keterikatan dalam mekanika kuantum. Pelanggaran ketidaksetaraan CHSH digunakan untuk menunjukkan bahwa mekanika kuantum tidak kompatibel dengan teori variabel tersembunyi lokal. Ini adalah eksperimen penting untuk memahami fondasi mekanika kuantum.

Hadiah Nobel Fisika 2022 diberikan kepada Alain Aspect, John Clauser, dan Anton Zeilinger, sebagian atas kontribusi mereka yang perintis dalam ilmu informasi kuantum, khususnya eksperimen mereka dengan foton yang saling terikat yang mendemonstrasikan pelanggaran ketidaksetaraan Bell.

Persyaratan​

Sebelum memulai tutorial ini, pastikan kamu telah menginstal hal-hal berikut:

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

Persiapan​

# 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 klasikal ke masalah kuantum​

Untuk eksperimen ini, kita akan membuat pasangan yang saling terikat di mana kita mengukur setiap Qubit pada dua basis yang berbeda. Kita akan memberi label basis untuk Qubit pertama sebagai AA dan aa, dan basis untuk Qubit kedua sebagai BB dan bb. Ini memungkinkan kita menghitung kuantitas CHSH S1S_1:

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

Setiap observabel bernilai +1+1 atau βˆ’1-1. Jelas, salah satu suku BΒ±bB\pm b harus 00, dan yang lainnya harus Β±2\pm 2. Oleh karena itu, S1=Β±2S_1 = \pm 2. Nilai rata-rata S1S_1 harus memenuhi ketidaksetaraan:

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

Dengan menguraikan S1S_1 dalam bentuk AA, aa, BB, dan bb, diperoleh:

∣⟨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 bisa mendefinisikan kuantitas CHSH lainnya yaitu S2S_2:

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

Ini menghasilkan ketidaksetaraan 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 mekanika kuantum dapat dijelaskan oleh teori variabel tersembunyi lokal, ketidaksetaraan di atas harus berlaku. Namun, seperti yang akan didemonstrasikan dalam tutorial ini, ketidaksetaraan ini bisa dilanggar di komputer kuantum. Oleh karena itu, mekanika kuantum tidak kompatibel dengan teori variabel tersembunyi lokal. Jika kamu ingin mempelajari lebih banyak teori, jelajahi Entanglement in Action bersama John Watrous. Kamu akan membuat pasangan yang saling terikat antara dua Qubit di komputer kuantum dengan membuat keadaan Bell ∣Φ+⟩=∣00⟩+∣11⟩2|\Phi^+\rangle = \frac{|00\rangle + |11\rangle}{\sqrt{2}}. Dengan menggunakan primitif Estimator, kamu bisa langsung mendapatkan nilai ekspektasi yang dibutuhkan (⟨AB⟩,⟨Ab⟩,⟨aB⟩\langle AB \rangle, \langle Ab \rangle, \langle aB \rangle, dan ⟨ab⟩\langle ab \rangle) untuk menghitung nilai ekspektasi dari dua kuantitas CHSH ⟨S1⟩\langle S_1\rangle dan ⟨S2⟩\langle S_2\rangle. Sebelum hadirnya primitif Estimator, kamu harus membangun nilai ekspektasi dari hasil pengukuran.

Kamu akan mengukur Qubit kedua dalam basis ZZ dan XX. Qubit pertama juga akan diukur dalam basis yang ortogonal, tetapi dengan sudut terhadap Qubit kedua yang akan kita sapu antara 00 dan 2Ο€2\pi. Seperti yang akan kamu lihat, primitif Estimator membuat eksekusi Circuit berparameter menjadi sangat mudah. Daripada membuat serangkaian Circuit CHSH, kamu hanya perlu membuat satu Circuit CHSH dengan parameter yang menentukan sudut pengukuran dan serangkaian nilai fase untuk parameter tersebut.

Terakhir, kamu akan menganalisis hasilnya dan memplotnya terhadap sudut pengukuran. Kamu akan melihat bahwa untuk rentang sudut pengukuran tertentu, nilai ekspektasi dari kuantitas CHSH ∣⟨S1⟩∣>2|\langle S_1\rangle| > 2 atau ∣⟨S2⟩∣>2|\langle S_2\rangle| > 2, yang mendemonstrasikan pelanggaran ketidaksetaraan 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'

Membuat Circuit CHSH berparameter​

Pertama, kita tulis Circuit dengan parameter ΞΈ\theta, yang kita sebut theta. Primitif Estimator dapat sangat menyederhanakan pembuatan Circuit dan analisis output dengan langsung memberikan nilai ekspektasi dari observabel. Banyak masalah yang menarik, terutama untuk aplikasi jangka dekat pada sistem yang berisik, dapat dirumuskan dalam bentuk nilai ekspektasi. Primitif Estimator (V2) dapat secara otomatis mengubah basis pengukuran berdasarkan observabel 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

Membuat daftar nilai fase yang akan ditetapkan nanti​

Setelah membuat Circuit CHSH berparameter, kamu akan membuat daftar nilai fase yang akan ditetapkan ke Circuit pada langkah berikutnya. Kamu bisa menggunakan kode berikut untuk membuat daftar 21 nilai fase mulai dari 00 hingga 2Ο€2 \pi dengan jarak yang sama, yaitu 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]

Observabel​

Sekarang kita perlu observabel untuk menghitung nilai ekspektasinya. Dalam kasus ini, kita melihat basis yang ortogonal untuk setiap Qubit, dengan membiarkan rotasi Yβˆ’Y- berparameter untuk Qubit pertama menyapu basis pengukuran hampir secara kontinu terhadap basis Qubit kedua. Kita akan memilih observabel 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: Optimalkan masalah untuk eksekusi perangkat keras kuantum​

Untuk mengurangi total waktu eksekusi job, primitif V2 hanya menerima Circuit dan observabel yang sesuai dengan instruksi dan konektivitas yang didukung oleh sistem target (disebut sebagai circuit dan observabel ISA β€” 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

Observabel ISA​

Demikian pula, kita perlu mentransformasi observabel agar kompatibel dengan Backend sebelum menjalankan job dengan Runtime Estimator V2. Kita bisa melakukan transformasi ini menggunakan metode apply_layout dari objek SparsePauliOp.

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

Langkah 3: Eksekusi menggunakan primitif Qiskit​

Untuk mengeksekusi seluruh eksperimen dalam satu panggilan ke Estimator. Kita bisa membuat primitif Qiskit Runtime Estimator untuk menghitung nilai ekspektasi kita. Metode EstimatorV2.run() menerima iterable dari primitive unified blocs (PUBs). Setiap PUB adalah iterable dengan 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: Pasca-proses dan kembalikan hasil dalam format klasikal yang diinginkan​

Estimator mengembalikan nilai ekspektasi untuk kedua observabel, ⟨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

Pada gambar, garis-garis dan area abu-abu menunjukkan batas-batasnya; garis paling luar (titik-titik-garis) membatasi batas kuantum (Β±2\pm 2), sedangkan garis dalam (putus-putus) membatasi batas klasikal (Β±22\pm 2\sqrt{2}). Kamu bisa melihat bahwa ada rentang di mana kuantitas saksi CHSH melampaui batas klasikal. Selamat! Kamu telah berhasil mendemonstrasikan pelanggaran ketidaksetaraan CHSH dalam sistem kuantum nyata!

Survei tutorial​

Silakan ikuti survei singkat ini untuk memberikan umpan balik tentang tutorial ini. Masukan kamu akan membantu kami meningkatkan konten dan pengalaman pengguna.

Link ke survei

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