CHSH 부등식
사용 시간 추정: Heron r2 프로세서에서 약 2분 (참고: 이는 추정치이며, 실제 실행 시간은 다를 수 있습니다.)
배경
이 튜토리얼에서는 Estimator 프리미티브를 사용하여 양자 컴퓨터에서 CHSH 부등식의 위반을 증명하는 실험을 실행합니다.
CHSH 부등식은 저자인 Clauser, Horne, Shimony, Holt의 이름을 따서 명명되었으며, 벨의 정리(1969)를 실험적으로 증명하는 데 사용됩니다. 이 정리는 국소 숨은 변수 이론이 양자역학에서 얽힘의 일부 결과를 설명할 수 없다고 주장합니다. CHSH 부등식의 위반은 양자역학이 국소 숨은 변수 이론과 양립할 수 없음을 보여주는 데 사용됩니다. 이는 양자역학의 기초를 이해하는 데 중요한 실험입니다.
2022년 노벨 물리학상은 Alain Aspect, John Clauser, Anton Zeilinger에게 수여되었으며, 이는 부분적으로 양자 정보 과학에서의 선구적인 연구, 특히 얽힌 광자를 이용하여 벨 부등식의 위반을 증명한 실험에 대한 공로를 인정한 것입니다.
요구 사항
이 튜토리얼을 시작하기 전에 다음이 설치되어 있는지 확인하세요:
- Qiskit SDK v1.0 이상 (시각화 지원 포함)
- 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의 기저를 와 , 두 번째 Qubit의 기저를 와 로 레이블합니다. 이를 통해 CHSH 양 을 계산할 수 있습니다:
각 관측량은 또는 입니다. 분명히, 항 중 하나는 이어야 하고, 다른 하나는 이어야 합니다. 따라서 입니다. 의 평균값은 다음 부등식을 만족해야 합니다:
을 , , , 로 전개하면 다음과 같습니다:
또 다른 CHSH 양 를 정의할 수 있습니다:
이는 또 다른 부등식으로 이어집니다:
양자역학이 국소 숨은 변수 이론으로 설명될 수 있다면, 위의 부등식이 성립해야 합니다. 그러나 이 튜토리얼에서 보여주듯이, 이 부등식은 양자 컴퓨터에서 위반될 수 있습니다. 따라서 양자역학은 국소 숨은 변수 이론과 양립할 수 없습니다. 더 많은 이론을 배우고 싶다면, John Watrous와 함께하는 행동 속의 얽힘을 살펴보세요. 양자 컴퓨터에서 두 Qubit 사이에 얽힌 쌍을 생성하기 위해 벨 상태 를 만듭니다. Estimator 프리미티브를 사용하면, 두 CHSH 양 과 의 기댓값을 계산하는 데 필요한 기댓값(, )을 직접 구할 수 있습니다. Estimator 프리미티브가 도입되기 전에는 측정 결과로부터 기댓값을 직접 구성해야 했습니다.
두 번째 Qubit를 기저와 기저에서 측정합니다. 첫 번째 Qubit도 직교 기저에서 측정하지만, 두 번째 Qubit에 대한 각도를 에서 사이로 스윕합니다. 보면 알 수 있듯이, Estimator 프리미티브를 사용하면 매개변수화된 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 생성하기
먼저, theta라고 부르는 매개변수 를 포함한 Circuit을 작성합니다. Estimator 프리미티브는 관측량의 기댓값을 직접 제공하여 Circuit 구성 및 출력 분석을 크게 단순화할 수 있습니다. 관심 있는 많은 문제, 특히 노이즈가 있는 시스템의 단기 응용 프로그램에서는 기댓값으로 공식화할 수 있습니다. Estimator (V2) 프리미티브는 제공된 관측량에 따라 측정 기저를 자동으로 변경할 수 있습니다.
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]
관측량
이제 기댓값을 계산하기 위한 관측량이 필요합니다. 이 경우 각 Qubit의 직교 기저를 살펴보면서, 첫 번째 Qubit의 매개변수화된 회전이 두 번째 Qubit 기저에 대해 측정 기저를 거의 연속적으로 스윕합니다. 따라서 관측량 , , , 를 선택합니다.
# <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)]
)
2단계: 양자 하드웨어 실행을 위한 문제 최적화
총 작업 실행 시간을 줄이기 위해, V2 프리미티브는 대상 시스템이 지원하는 명령어 및 연결성에 부합하는 Circuit과 관측량만 허용합니다 (이를 명령어 집합 아키텍처(ISA) Circuit 및 관측량이라고 합니다).
ISA Circuit
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")
ISA 관측량
마찬가지로, Runtime Estimator V2로 작업을 실행하기 전에 관측량을 Backend와 호환되도록 변환해야 합니다. SparsePauliOp 객체의 apply_layout 메서드를 사용하여 변환을 수행할 수 있습니다.
isa_observable1 = observable1.apply_layout(layout=chsh_isa_circuit.layout)
isa_observable2 = observable2.apply_layout(layout=chsh_isa_circuit.layout)
3단계: Qiskit 프리미티브를 사용하여 실행하기
Estimator를 한 번 호출하여 전체 실험을 실행하기 위해,
Qiskit Runtime Estimator 프리미티브를 생성하여 기댓값을 계산할 수 있습니다. EstimatorV2.run() 메서드는 primitive unified blocs (PUBs)의 이터러블을 받습니다. 각 PUB는 (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()
4단계: 후처리 및 원하는 고전적 형식으로 결과 반환하기
Estimator는 두 관측량 와 에 대한 기댓값을 반환합니다.
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()
그림에서 선과 회색 영역은 경계를 나타냅니다. 가장 바깥쪽(점-대시) 선은 양자 경계()를, 안쪽(점선) 선은 고전적 경계()를 나타냅니다. CHSH 목격자 양이 고전적 경계를 초과하는 영역이 있음을 확인할 수 있습니다. 축하합니다! 실제 양자 시스템에서 CHSH 부등식의 위반을 성공적으로 증명했습니다!
튜토리얼 설문조사
이 튜토리얼에 대한 피드백을 제공하기 위해 이 짧은 설문조사에 참여해 주세요. 여러분의 의견은 콘텐츠 제공 및 사용자 경험을 개선하는 데 도움이 됩니다.
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.