Zum Hauptinhalt springe

CHSH-Ungleichung

Nutzungsschätzung: Zwei Minute uf eme Heron r2-Prozessor (HINWEIS: Des isch nur e Schätzung. Dini Laufzeit ka variiere.)

Hintergrund

In dem Tutorial füehret mir e Experiment uf eme Quantecomputer us, um d'Verletzung vo dr CHSH-Ungleichung mit em Estimator-Primitiv z'zeige.

D'CHSH-Ungleichung, benannt nach de Autore Clauser, Horne, Shimony un Holt, wird verwendet, um Bells Theorem (1969) experimentell z'beweise. Des Theorem besagt, dass lokali Theorien mit verborgene Variabble manche Konsequenze vo dr Verschränkung in dr Quantemechanik nit erklärn könnet. D'Verletzung vo dr CHSH-Ungleichung wird verwendet, um z'zeige, dass d'Quantemechanik mit lokale Theorien mit verborgene Variabble nit vereinbar isch. Des isch e wichtigs Experiment zum Verschtändnis vo de Grundlage vo dr Quantemechanik.

Dr Nobelpreis für Physik 2022 isch an Alain Aspect, John Clauser un Anton Zeilinger verliehe worre, unter anderem für ihri Pionierarbeit in dr Quanteinformationswissenschaft un insbesondere für ihri Experimente mit verschränkte Photone, wo d'Verletzung vo de Bellsche Ungleichunge demonstriert hän.

Aforderunge

Stellt vor em Beginn vo dem Tutorial sicher, dass mir Folgendes installiert hän:

  • Qiskit SDK v1.0 oder neuer, mit visualization-Unterstützung
  • Qiskit Runtime (pip install qiskit-ibm-runtime) v0.22 oder neuer

Setup

# 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

Schritt 1: Klassischi Eingabe uf e Quanteproblem abbilden

Für des Experiment erstelle mir e verschränkts Paar, wo mir jeds Qubit uf zwei verschiedeni Basa messe. Mir bezeichne d'Basa für s'erschte Qubit mit AA un aa un d'Basa für s'zweite Qubit mit BB un bb. Des ermöglicht uns, d'CHSH-Größe S1S_1 z'berechne:

S1=A(Bb)+a(B+b).S_1 = A(B-b) + a(B+b).

Jedi Observable isch entweder +1+1 oder 1-1. Klar isch, dass einer vo de Terme B±bB\pm b gleich 00 sei muss un dr andere ±2\pm 2 sei muss. Deshalb isch S1=±2S_1 = \pm 2. Dr Durchschnittswert vo S1S_1 muss d'Ungleichung erfülle:

S12.|\langle S_1 \rangle|\leq 2.

D'Entwicklung vo S1S_1 in Bezug uf AA, aa, BB un bb ergibt:

S1=ABAb+aB+ab2|\langle S_1 \rangle| = |\langle AB \rangle - \langle Ab \rangle + \langle aB \rangle + \langle ab \rangle| \leq 2

Ihr könnet e weiteri CHSH-Größe S2S_2 definiere:

S2=A(B+b)a(Bb),S_2 = A(B+b) - a(B-b),

Des füehrt zu enre weitere Ungleichung:

S2=AB+AbaB+ab2|\langle S_2 \rangle| = |\langle AB \rangle + \langle Ab \rangle - \langle aB \rangle + \langle ab \rangle| \leq 2

Wenn d'Quantemechanik durch lokali Theorien mit verborgene Variabble beschriebe werre ka, müsset d'vorherige Ungleichunge wahr sei. Wie aber in dem Tutorial demonstriert wird, könnet dese Ungleichunge uf eme Quantecomputer verletzt werre. Deshalb isch d'Quantemechanik nit mit lokale Theorien mit verborgene Variabble vereinbar. Falls Ihr mehr Theorie lerne wollet, erkundet Entanglement in Action mit em John Watrous. Ihr werdet e verschränkts Paar zwischen zwei Qubits in eme Quantecomputer erstelle, indem Ihr de Bell-Zustand Φ+=00+112|\Phi^+\rangle = \frac{|00\rangle + |11\rangle}{\sqrt{2}} erzeuget. Mit em Estimator-Primitiv könnet Ihr direkt d'benötigte Erwartungswerte (AB,Ab,aB\langle AB \rangle, \langle Ab \rangle, \langle aB \rangle un ab\langle ab \rangle) kriege, um d'Erwartungswerte vo de beide CHSH-Größe S1\langle S_1\rangle un S2\langle S_2\rangle z'berechne. Vor dr Einführung vom Estimator-Primitiv hän Sie d'Erwartungswerte us de Messergebnisse konstruiere müsse.

Ihr werdet s'zweite Qubit in de ZZ- un XX-Basa messe. S'erschte Qubit wird ebefalls in orthogonale Basa gmesse, aber mit eme Winkel bezüglich vom zweite Qubit, den mir zwischen 00 un 2π2\pi variiere werdet. Wie Ihr sehet, macht s'Estimator-Primitiv s'Ausführe vo parametrisierte Schaltkreise sehr eifach. Anstatt e Reihe vo CHSH-Schaltkreise z'erstelle, müsset Ihr nur eine CHSH-Schaltkreis mit eme Parameter erstelle, wo de Messwinkel angibt, un e Reihe vo Phasewerte für de Parameter.

Schließlich werdet Ihr d'Ergebnisse analysiere un gege de Messwinkel auftrage. Ihr werdet sehe, dass für ene bestimmte Bereich vo Messwinkeln d'Erwartungswerte vo de CHSH-Größe S1>2|\langle S_1\rangle| > 2 oder S2>2|\langle S_2\rangle| > 2 send, was d'Verletzung vo dr CHSH-Ungleichung demonstriert.

# 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'

En parametrisierte CHSH-Schaltkreis erstelle

Zerscht schreibe mir de Schaltkreis mit em Parameter θ\theta, den mir theta nenne. S'Estimator-Primitiv ka de Schaltkreisaufbau un d'Ausgabeanalyse enorm vereinfache, indem s'direkt Erwartungswerte vo Observabble liefert. Viel interessanti Probleme, insbesondere für kurzfristige Anwendunge uf verrauschet Systeme, könnet in Form vo Erwartungswerte formuliert werre. S'Estimator (V2)-Primitiv ka automatisch d'Messbasis basierend uf dr bereitgestellte Observable ändere.

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

E Lischt vo Phasewerte erstelle, wo später zugewiese werdet

Nachdem Ihr de parametrisierte CHSH-Schaltkreis erstellt hän, erstellt Ihr e Lischt vo Phasewerte, wo em Schaltkreis im nächste Schritt zugewiese werdet. Ihr könnet de folgende Code verwende, um e Lischt vo 21 Phasewerte im Bereich vo 00 bis 2π2 \pi mit gleichem Abstand z'erstelle, also 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]

Observabble

Jetzt brauche mir Observabble, us dene mir d'Erwartungswerte berechne könnet. In unserem Fall betrachte mir orthogonali Basa für jeds Qubit, wobei d'parametrisierte YY-Rotation für s'erschte Qubit d'Messbasis nahezu kontinuierlich in Bezug uf d'Basis vom zweite Qubit variiert. Mir wähle deshalb d'Observabble ZZZZ, ZXZX, XZXZ un 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)]
)

Schritt 2: Problem für d'Ausführung uf Quantehardware optimiere

Um d'Gesamtausführungszeit vom Job z'reduziere, akzeptiere V2-Primitive nur Schaltkreise un Observabble, wo de vom Zielsystem unterstützte Anweisunge un dr Konnektivität entsprechet (bezeichnet als Instruction Set Architecture (ISA)-Schaltkreise un -Observabble).

ISA-Schaltkreis

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

ISA-Observabble

Ebenso müsse mir d'Observabble transformiere, um se backend-kompatibel z'mache, bevor mir Jobs mit Runtime Estimator V2 ausführe. Mir könnet d'Transformation mit dr apply_layout-Methode vom SparsePauliOp-Objekt durchführe.

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

Schritt 3: Ausführe mit Qiskit-Primitive

Um s'gesamte Experiment in eim einzige Aufruf vom Estimator usführe. Mir könnet e Qiskit Runtime Estimator-Primitiv erstelle, um unseri Erwartungswerte z'berechne. D'EstimatorV2.run()-Methode akzeptiert e Iterable vo primitive unified blocs (PUBs). Jeds PUB isch e Iterable im 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()

Schritt 4: Nachbearbeitung un Rückgab vom Ergebnis im gwünscht klassische Format

Dr Estimator gibt Erwartungswerte für beide Observabble zruck, ZZZX+XZ+XX\langle ZZ \rangle - \langle ZX \rangle + \langle XZ \rangle + \langle XX \rangle un ZZ+ZXXZ+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

In dr Abbildung grenze d'Linien un d'graue Bereiche d'Grenzen ab; d'äußerschte (strichpunktierte) Linien begrenzen d'Quantegrenzen (±2\pm 2), während d'innere (gestrichelten) Linien d'klassische Grenzen (±22\pm 2\sqrt{2}) begrenzen. Ihr könnet sehe, dass es Bereiche git, wo d'CHSH-Zeugegröße d'klassische Grenzen überschreitet. Herzliche Glückwunsch! Ihr hän erfolgreich d'Verletzung vo dr CHSH-Ungleichung in eme echte Quantesystem demonstriert!

Tutorial-Umfrage

Bitte nemmet an dere kurze Umfrage teil, um Feedback zu dem Tutorial z'gebe. Dini Erkenntnisse helfet uns, unseri Inhaltsangebote un Benutzererfahrung z'verbessere.

Link zur Umfrage