อสมการ CHSH
ประมาณการการใช้งาน: สองนาทีบนโปรเซสเซอร์ Heron r2 (หมายเหตุ: นี่เป็นเพียงการประมาณการ ระยะเวลาจริงอาจแตกต่างกัน)
พื้นหลัง
ในบทแนะนำนี้ คุณจะรันการทดลองบนคอมพิวเตอร์ควอนตัมเพื่อแสดงให้เห็นการละเมิดอสมการ CHSH ด้วย Estimator primitive
อสมการ CHSH ซึ่งตั้งชื่อตามผู้เขียน Clauser, Horne, Shimony และ Holt ถูกใช้เพื่อพิสูจน์ทฤษฎีบทของเบลล์เชิงทดลอง (ค.ศ. 1969) ทฤษฎีบทนี้ยืนยันว่าทฤษฎีตัวแปรซ่อนเร้นเฉพาะที่ไม่สามารถอธิบายผลที่ตามมาบางประการของการพัวพันในกลศาสตร์ควอนตัมได้ การละเมิดอสมการ CHSH ถูกใช้เพื่อแสดงว่ากลศาสตร์ควอนตัมนั้นไม่สอดคล้องกับทฤษฎีตัวแปรซ่อนเร้นเฉพาะที่ นี่เป็นการทดลองที่สำคัญในการทำความเข้าใจรากฐานของกลศาสตร์ควอนตัม
รางวัลโนเบลสาขาฟิสิกส์ปี 2022 มอบให้แก่ Alain Aspect, John Clauser และ Anton Zeilinger ส่วนหนึ่งเนื่องจากผลงานบุกเบิกของพวกเขาในสาขาวิทยาศาสตร์สารสนเทศควอนตัม และโดยเฉพาะอย่างยิ่งสำหรับการทดลองด้วยโฟตอนที่พัวพันกันซึ่งแสดงให้เห็นการละเมิดอสมการของเบลล์
ข้อกำหนดเบื้องต้น
ก่อนเริ่มบทแนะนำนี้ ตรวจสอบให้แน่ใจว่าคุณได้ติดตั้งสิ่งต่อไปนี้แล้ว:
- Qiskit SDK v1.0 หรือใหม่กว่า พร้อมรองรับ visualization
- Qiskit Runtime (
pip install qiskit-ibm-runtime) v0.22 หรือใหม่กว่า
ตั้งค่า
# 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
ขั้นตอนที่ 1: แปลงอินพุตแบบคลาสสิกเป็นปัญหาควอนตัม
สำหรับการทดลองนี้ เราจะสร้างคู่ที่พัวพันกันซึ่งเราวัด Qubit แต่ละตัวบนสองฐานที่แตกต่างกัน เราจะกำหนดชื่อฐานสำหรับ Qubit แรกว่า และ และฐานสำหรับ Qubit ที่สองว่า และ ซึ่งช่วยให้เราคำนวณปริมาณ CHSH ไ ด้:
Observable แต่ละตัวมีค่าเป็น หรือ เห็นได้ชัดว่าหนึ่งในเทอม ต้องเป็น และอีกเทอมต้องเป็น ดังนั้น ค่าเฉลี่ยของ ต้องเป็นไปตามอสมการ:
การกระจาย ในรูปของ , , , และ ให้ผลลัพธ์:
คุณสามารถกำหนดปริมาณ CHSH อีกค่าหนึ่งคือ :
ซึ่งนำไปสู่อสมการอีกข้อหนึ่ง:
หากกลศาสตร์ควอนตัมสามารถอธิบายได้ด้วยทฤษฎีตัวแปรซ่อนเร้นเฉพาะที่ อสมการข้างต้นจะต้องเป็นจริง อย่างไรก็ตาม ดังที่แสดงให้เห็นในบทแนะนำนี้ อสมการเหล่านี้สามารถถูกละเมิดได้ในคอมพิวเตอร์ควอนตัม ดังนั้นกลศาสตร์ควอนตัมจึงไม่สอดคล้องกับทฤษฎีตัวแปรซ่อนเร้นเฉพาะที่ หากต้องการศึกษาทฤษฎีเพิ่มเติม ลองสำรวจ Entanglement in Action กับ John Watrous คุณจะสร้างคู่ที่พัวพันกันระหว่าง Qubit สองตัวในคอมพิวเตอร์ควอนตัมโดยการสร้างสถานะเบลล์ การใช้ Estimator primitive ช่วยให้คุณได้ค่าความคาดหวังที่ต้องการโดยตรง ( และ ) เพื่อคำนวณค่าความคาดหวังของปริมาณ CHSH ทั้งสอง และ ก่อนการแนะนำ Estimator primitive คุณต้องสร้างค่าความคาดหวังจากผลลัพธ์การวัด
คุณจะวัด Qubit ที่สองใน ฐาน และ ส่วน Qubit แรกจะวัดในฐานตั้งฉากเช่นกัน แต่มีมุมเทียบกับ Qubit ที่สอง ซึ่งเราจะกวาดระหว่าง ถึง ดังที่คุณจะเห็น Estimator primitive ทำให้การรัน Circuit ที่ มีพารามิเตอร์เป็นเรื่องง่ายมาก แทนที่จะสร้าง CHSH Circuit หลายตัว คุณต้องสร้างเพียง หนึ่ง CHSH Circuit ที่มีพารามิเตอร์ระบุมุมการวัดและชุดค่าเฟสสำหรับพารามิเตอร์นั้น
สุดท้าย คุณจะวิเคราะห์ผลลัพธ์และพล็อตเทียบกับมุมการวัด คุณจะเห็นว่าในช่วงมุมการวัดบางช่วง ค่าความคาดหวังของปริมาณ CHSH หรือ ซึ่งแสดงให้เห็นการละเมิดอสมการ 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'
สร้าง CHSH Circuit ที่มีพารามิเตอร์
ก่อนอื่น เราจะเขียน Circuit ที่มีพารามิเตอร์ ซึ่งเราเรียกว่า theta Estimator primitive สามารถทำให้การสร้าง Circuit และการวิเคราะห์ผลลัพธ์ง่ายขึ้นอย่างมากโดยการให้ค่าความคาดหวังของ Observable โดยตรง ปัญหาหลายอย่างที่น่าสนใจ โดยเฉพาะสำหรับการประยุกต์ใช้งานระยะใกล้บนระบบที่มีสัญญาณรบกวน สามารถกำหนดในรูปของค่าความคาดหวัง Estimator (V2) primitive สามารถเปลี่ยนฐานการวัดโดยอัตโนมัติตาม Observable ที่ให้มา
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")
สร้างรายการค่าเฟสที่จะกำหนดภายหลัง
หลังจากสร้าง CHSH Circuit ที่มีพารามิเตอร์แล้ว คุณจะสร้างรายการค่าเฟสที่จะกำหนดให้กับ Circuit ในขั้นตอนถัดไป คุณสามารถใช้โค้ดต่อไปนี้เพื่อสร้างรายการค่าเฟส 21 ค่าในช่วง ถึง ด้วยระยะห่างเท่ากัน คือ , , , ..., ,
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]
Observable
ตอนนี้เราต้องการ Observable เพื่อคำนวณค่าความคาดหวัง ในกรณีของเรา เราดูที่ฐานตั้งฉากสำหรับ Qubit แต่ละตัว โดยให้การหมุน ที่มีพารามิเตอร์สำหรับ Qubit แรกกวาดฐานการวัดแทบต่อเนื่องเทียบกับฐานของ Qubit ที่สอง ดังนั้นเราจะเลือก Observable , , และ
# <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)]
)