Vai al contenuto principale

L'esperimento di Stern-Gerlach con i computer quantistici

Per questo modulo Qiskit in Classrooms, gli studenti devono disporre di un ambiente Python funzionante con i seguenti pacchetti installati:

  • qiskit v2.1.0 o successivo
  • qiskit-ibm-runtime v0.40.1 o successivo
  • qiskit-aer v0.17.0 o successivo
  • qiskit.visualization
  • numpy
  • pylatexenc

Per configurare e installare i pacchetti di cui sopra, consulta la guida Installare Qiskit. Per eseguire job su veri computer quantistici, gli studenti dovranno creare un account con IBM Quantum® seguendo i passaggi nella guida Configura il tuo account IBM Cloud.

Questo modulo è stato testato e ha utilizzato 2 secondi di tempo QPU. Si tratta di una stima approssimativa. L'utilizzo effettivo potrebbe variare.

# Added by doQumentation — required packages for this notebook
!pip install -q numpy qiskit qiskit-aer qiskit-ibm-runtime
# Uncomment and modify this line as needed to install dependencies
#!pip install 'qiskit>=2.1.0' 'qiskit-ibm-runtime>=0.40.1' 'qiskit-aer>=0.17.0' 'numpy' 'pylatexenc'

Guarda il video introduttivo del modulo tenuto dalla Dr.ssa Katie McCormick qui sotto, oppure clicca qui per vederlo su YouTube.


Contesto

All'inizio del Novecento, le prove di comportamenti quantizzati su scale atomiche si stavano accumulando. Molte interpretazioni di successo dei dati — come la spiegazione di Max Planck della catastrofe ultravioletta — e esperimenti come quello condotto da Otto Stern e Walther Gerlach furono fondamentali per convincere il mondo scientifico che era necessario un sistema di meccanica quantistica, e che certi fenomeni fisici sono quantizzati. Nel caso dell'esperimento di Stern-Gerlach (concepito da Stern nel 1921 e realizzato da Stern e Gerlach nel 1922), l'obiettivo era verificare la quantizzazione del momento angolare negli atomi.

In quel periodo, il modello predominante dell'atomo era il modello di Bohr-Sommerfeld, un'estensione del modello di Bohr che, come quest'ultimo, prevedeva che gli elettroni esistessero in orbite quantizzate simili ai pianeti che orbitano attorno al sole.

Diagramma del modello di Bohr-Sommerfeld. Un punto centrale rappresenta il nucleo di un atomo. Cerchi o ellissi attorno a quel punto rappresentano gli orbitali atomici, molto simili alle orbite planetarie attorno al sole. Le orbite ad energia più alta sono più lontane dal nucleo.

Sebbene alla fine questo approccio si sarebbe rivelato insufficiente per spiegare il comportamento quantomeccanico dell'atomo, in linea di massima riusciva a prevedere molti fenomeni osservati, come le righe spettrali discrete degli atomi. Le orbite quantizzate degli elettroni con energie specifiche corrispondono a valori quantizzati del momento angolare. È questo momento angolare orbitale che Stern e Gerlach cercarono di osservare nel loro esperimento, sebbene l'esperimento si applichi a qualsiasi tipo di momento angolare quantizzato, incluso lo spin. Spesso si sente parlare dell'esperimento di Stern-Gerlach applicato agli spin. L'attenzione dell'esperimento originale era rivolta al momento angolare orbitale semplicemente perché George Uhlenbeck e Samuel Goudsmit non avrebbero teorizzato l'esistenza dello spin prima del 1925.

Indipendentemente dal tipo di momento angolare, una carica con momento angolare possiede un momento magnetico. Nel trattamento classico del moto orbitale, ci si aspetterebbe che una particella di carica qq, massa mm e momento angolare L\vec{L} abbia un momento magnetico μ\mu dato da

μ=q2mL\vec{\mu} = \frac{q}{2m}\vec{L}

Si scopre che quasi la stessa formula vale per il momento angolare quantomeccanico, con la precisazione di aggiungere un rapporto numerico legato al tipo di momento angolare, chiamato fattore g gg. Quando si combinano diversi tipi di momento angolare, o si generalizza a un tipo arbitrario, si utilizza spesso J\vec{J} al posto di L\vec{L}, quindi scriviamo:

μ=gq2mJ\vec{\mu} = \frac{gq}{2m}\vec{J}

Per gli oggetti classici g=1g=1. Per gli elettroni, g2g\approx 2, e vi sono molti valori per vari nuclei e particelle subatomiche. Il punto principale qui è che il momento angolare quantizzato implica un momento magnetico quantizzato!

Questo momento magnetico sperimenterà una coppia in un campo magnetico:

τ=μ×B\vec{\tau}=\vec{\mu}\times \vec{B}

E sperimenterà una forza in un campo magnetico con un gradiente non nullo:

F=(μB)\vec{F} = \nabla(\vec{\mu}\cdot\vec{B})

Spesso considereremo l'espressione precedente una componente alla volta, quindi può essere conveniente pensare alla sua componente zz:

Fz=μzdBzdzF_z = \mu_z \frac{dB_z}{dz}

Combinando le espressioni, possiamo ottenere

Fz=gq2mdBzdzJzF_z = \frac{gq}{2m} \frac{dB_z}{dz} J_z

Stern e Gerlach non erano a conoscenza del fattore gg, ma anche con esso nell'espressione, si ha una forza uguale a diverse costanti note o misurabili moltiplicata per un momento angolare. Quindi, usando un campo magnetico con un gradiente noto e misurando la deflessione di una particella mentre attraversa il campo, si dovrebbero ottenere informazioni sul momento angolare. Questo è il nocciolo dell'esperimento di Stern-Gerlach.

Atomi di argento che viaggiano attraverso un campo magnetico non omogeneo e vengono deflessi verso l'alto o verso il basso a seconda del loro spin. Classicamente, ci aspetteremmo una distribuzione continua sullo schermo, ma nell'esperimento vediamo due punti distinti.

Fig. Esperimento di Stern-Gerlach[1]: Atomi di argento che viaggiano attraverso un campo magnetico non omogeneo e vengono deflessi verso l'alto o verso il basso a seconda del loro spin. Classicamente, ci aspetteremmo una distribuzione continua sullo schermo, ma nell'esperimento vediamo due punti distinti.

Atomi di argento neutri venivano riscaldati in un forno. Mentre un fascio di atomi di argento fuoriusciva dal forno, i collimatori del fascio venivano usati per selezionare solo gli atomi che viaggiavano vicino al centro del campo magnetico non omogeneo. Naturalmente, alcuni atomi deviano un po' a sinistra o a destra, e sperimentano un gradiente di campo più debole, o nessun gradiente. Quindi non siamo eccessivamente preoccupati dal comportamento degli atomi molto a sinistra o a destra. Siamo interessati a ciò che accade agli atomi che viaggiano lungo il centro del canale, dove il gradiente del campo magnetico produce una forza che deflette gli atomi solo nella direzione zz.

Cosa dovremmo aspettarci, classicamente?

Come si comporterebbero questi atomi se fossero esattamente come grandi magneti classici? Puoi fare l'esperimento mentalmente. Immagina di lanciare minuscoli magneti al neodimio vicino a un grande magnete potente. L'orientazione dei piccoli magneti è casuale. Ma mentre passano accanto al grande magnete, si riorientano rapidamente per allinearsi con il campo e vengono attratti verso il grande magnete. La stragrande maggioranza dei piccoli magneti viene deflessa verso il grande magnete. L'osservatore più attento potrebbe chiedersi: "E la conservazione dell'energia?"

Infatti, un momento magnetico in un campo magnetico esterno ha un'energia potenziale associata:

U=μB=μBcos(θ)U = -\vec{\mu}\cdot \vec{B} = -\mu B \cos(\theta)

Quindi, se un momento magnetico ruotasse nel campo magnetico esterno, si avrebbe una variazione di energia data da:

ΔU=UfUi=μB(cos(θf)cos(θi)).\Delta U = U_f - U_i = -\mu B (\cos(\theta_f) - \cos(\theta_i)).

Nel caso speciale di un piccolo magnete perfettamente anti-allineato con il campo esterno che si capovolge e si allinea con esso, questo corrisponderebbe a una diminuzione dell'energia potenziale:

ΔU=UfUi=μB(cos(0)cos(π))=2μB.\Delta U = U_f - U_i = -\mu B (\cos(0) - \cos(\pi)) = -2\mu B.

Dove va quindi questa energia? Un magnete classico come un piccolo magnete al neodimio per il frigorifero è composto da molte particelle e può dissipare quasi qualsiasi quantità di energia come calore. L'angolo iniziale e finale tra il momento magnetico e il campo magnetico esterno potrebbe essere qualsiasi cosa, e almeno l'orientazione iniziale sarebbe casuale. Quindi per ogni piccolo magnete verrebbe dissipata una quantità di energia diversa come calore. Ma classicamente questo non è un problema, poiché un insieme di particelle classiche può dissipare qualsiasi quantità di energia come calore.

Cosa dovremmo aspettarci applicando il pensiero classico alle scale atomiche?

Quanto meno, questo non vale per i magneti su scala atomica, perché ci sono meno particelle in gioco, meno gradi di libertà attraverso cui l'energia può essere dissipata. Le proposte dei primi sviluppi della meccanica quantistica suggerivano inoltre che l'energia che può essere assorbita da una singola particella, come l'elettrone, sarebbe quantizzata, il che significa che un elettrone potrebbe assorbire solo alcune quantità specifiche di energia. Poiché le orientazioni iniziali casuali richiederebbero la dissipazione di quantità casuali di energia, questo non dovrebbe essere possibile per un sistema con livelli energetici quantizzati. L'energia in eccesso non potrebbe essere dissipata come calore. Cosa accadrebbe invece?

Verifica la tua comprensione

Leggi le domande qui sotto, rifletti sulle tue risposte, poi clicca sui triangoli per scoprire le soluzioni.

Spiega cosa pensi accadrebbe in una situazione come quella descritta sopra. Hai cioè un magnete di dimensioni atomiche che non può dissipare energia come calore. Quindi, qualsiasi energia potenziale magnetica iniziale deve rimanere nel sistema. Eppure, un campo magnetico esterno applica una coppia che tenta di ruotare il piccolo magnete per allinearlo con il campo esterno. Cosa succede?

Risposta:

Il piccolo momento magnetico ruoterebbe verso l'allineamento con il campo esterno. Ma quando si allinea momentaneamente, avrebbe un'energia cinetica rotazionale che lo farebbe continuare a ruotare oltre il campo e tornare fuori dall'allineamento. Questo comportamento può essere osservato anche nei grandi magneti classici. Ma in quei sistemi classici, l'oscillazione del piccolo momento magnetico alla fine si ferma man mano che l'energia viene dissipata come calore. Ma in un sistema senza tale meccanismo dissipativo, l'oscillazione dovrebbe continuare indefinitamente.

Dato il comportamento previsto nella risposta precedente, quale distribuzione di particelle magnetiche ti aspetteresti di vedere sullo schermo?

Risposta:

Una distribuzione continua, da una deflessione massima verso il lato più forte del campo magnetico (le particelle che per caso erano partite allineate con il campo esterno) a una deflessione massima verso il lato più debole del campo (le particelle che erano partite anti-allineate con il campo esterno), e ogni deflessione intermedia, corrispondente a ogni orientazione iniziale tra questi estremi.

Diagramma di un fascio di particelle che passa attraverso un magnete. Vengono deflesse in varia misura lungo la direzione del campo magnetico. Quando colpiscono uno schermo distante, formano una linea.

Cosa prevede la meccanica quantistica?

Forse la più strana di tutte le possibilità sarebbe la seguente: e se il momento angolare dell'elettrone fosse quantizzato, ma anche la sua proiezione su un certo asse fosse quantizzata? La quantizzazione del momento angolare come grandezza è interessante, ma si potrebbe provare a spiegarla attraverso l'intuizione classica, nel modo in cui le orbite planetarie si assestano in percorsi fissi che non si incrociano, avendo solo determinati momenti angolari consentiti. Ma se quel vettore del momento angolare potesse puntare solo esattamente lungo zz o esattamente opposto a zz, senza avere alcun'altra componente lungo zz? E se, misurato lungo una direzione diversa, il vettore potesse puntare solo interamente lungo xx o interamente opposto a xx, senza nulla in mezzo? Sarebbe strano in un modo che confonde qualsiasi intuizione classica.

Verifica la tua comprensione

Leggi la domanda qui sotto, rifletti sulla tua risposta, poi clicca sul triangolo per scoprire la soluzione.

Che tipo di distribuzione di particelle su uno schermo ti aspetteresti di trovare in quest'ultimo caso, in cui la proiezione del momento angolare nella direzione del campo è quantizzata? Puoi considerare solo le particelle che attraversano perfettamente il centro del dispositivo, oppure includere anche quelle che deviano leggermente verso i lati dove il gradiente è più debole. Sii esplicito.

Risposta:

Le particelle al centro del dispositivo sperimenterebbero un unico campo non omogeneo e verrebbero tutte misurate con uno di due possibili orientamenti del loro momento magnetico. Quindi, sarebbero deflesse massimamente con il gradiente o massimamente contro il gradiente, senza nulla in mezzo. Naturalmente, ai lati, dove il gradiente è più debole, la deflessione sarebbe minore. In posizioni laterali molto grandi, potrebbero trovarsi completamente al di fuori del gradiente, e potrebbe esserci una singola regione di particelle non deflesse.

Diagramma di un fascio di particelle deflesse verso l'alto o verso il basso, che colpisce uno di due punti su uno schermo, senza particelle tra questi due massimi

Come ci aiuteranno i qubit a testare questo?

La maggior parte dei computer quantistici usa i "qubit" — gli analoghi quantistici dei bit classici. Più precisamente, sono progettati per essere sistemi a due livelli, analoghi agli stati "acceso"/"spento" dei bit classici. Esistono paradigmi di calcolo quantistico che fanno uso di sistemi a tre livelli (i cosiddetti "qutrit") o di sistemi a molti livelli (chiamati "qudit"). Ma la maggior parte del lavoro si concentra sui qubit. In particolare, i computer quantistici IBM® usano quelli che vengono chiamati qubit transmon a frequenza fissa. Questi sono abbastanza diversi dal momento angolare orbitale o di spin degli atomi. Ma come lo spin di un elettrone, i qubit IBM® sono sistemi quantomeccanici che possono interagire con la luce e sui quali si possono effettuare misure. Infatti, si trovano spesso analogie tra gli stati dello spin quantomeccanico e gli stati computazionali di un qubit. Ad esempio, spesso si associa lo stato "spin-up" allo stato computazionale 0 e lo "spin-down" allo stato computazionale 1:

0|\uparrow\rangle \sim |0\rangle 1|\downarrow \rangle \sim |1\rangle

Possiamo usare queste similitudini per osservare il comportamento quantomeccanico nei computer quantistici IBM che imita il comportamento quantomeccanico del momento angolare orbitale o di spin negli atomi. Faremo osservazioni simili usando combinazioni lineari di questi stati che ci permettono di estendere la discussione al momento angolare in qualsiasi direzione.

Primo esperimento: una singola misura

In questo primo esperimento e per tutto il modulo, useremo un framework per il calcolo quantistico noto come "Qiskit patterns", che suddivide i flussi di lavoro nei seguenti passaggi:

  • Passo 1: Mappare gli input classici in un problema quantistico
  • Passo 2: Ottimizzare il problema per l'esecuzione quantistica
  • Passo 3: Eseguire usando le Primitive di Qiskit Runtime
  • Passo 4: Post-elaborazione e analisi classica

Seguiremo generalmente questi passaggi, anche se non li etichetteremo sempre esplicitamente.

Passo 1: Mappare gli input classici in un problema quantistico

Qui, gli input classici sono le orientazioni di uno spin prima della misura in un dispositivo di Stern-Gerlach. Non preoccuparti troppo della natura esatta dello stato quantistico prima della misura. Questo è l'argomento di un altro modulo Qiskit Classrooms, sul teorema di Bell.

Nota che i computer quantistici IBM misurano gli stati lungo l'asse zz. Quindi questo primo esperimento sarà molto simile all'esperimento di Stern-Gerlach con il gradiente del campo magnetico lungo zz. Vedremo come cambiare il sistema per misurare lungo direzioni diverse, più avanti.

Iniziamo costruendo l'analogo di uno stato di spin, cioè una qualche combinazione di |\uparrow\rangle e |\downarrow\rangle o equivalentemente di 0|0\rangle e 1|1\rangle. Abbiamo proposto alcuni valori iniziali. Ma sei libero di giocare con altri valori o anche con valori casuali.

import random
from numpy import pi
import numpy as np

# Use these lines to choose your own arbitrary state vector and normalize it.
# a = 2
# b = (1+1j)
# norm = np.sqrt(a*np.conjugate(a)+b*np.conjugate(b))
# a = a/norm
# b = b/norm
# print(a,b)

# Use these lines if you would rather look at at random spin orientations.
a = random.random()
b = random.random()
norm = np.sqrt(a * np.conjugate(a) + b * np.conjugate(b))
a = a / norm
b = b / norm
print(a, b)
0.7032089086145691 0.7109832845047109

Ora useremo gli angoli sopra come parametri in un circuito quantistico. Stiamo considerando una sola particella alla volta, quindi useremo un solo qubit nel nostro circuito e avremo bisogno di un solo registro classico.

from qiskit.circuit import QuantumRegister, ClassicalRegister, QuantumCircuit, Parameter

# Define registers
qr = QuantumRegister(1, "q")
cr = ClassicalRegister(1, "c")
qc = QuantumCircuit(qr, cr)

# Initialize the quantum state
qc.initialize([a, b])
qc.measure(0, 0)
qc.draw("mpl")

Output della cella di codice precedente

Passo 2: Ottimizzare il problema per l'esecuzione quantistica

Per eseguire il nostro esperimento su un vero computer quantistico, dobbiamo caricare il servizio Qiskit Runtime e selezionare un computer quantistico (o un "backend"). Di seguito, selezioniamo semplicemente il computer quantistico meno occupato a nostra disposizione.

Il codice seguente include la sintassi per salvare le tue credenziali al primo utilizzo. Assicurati di eliminare queste informazioni dal notebook dopo averle salvate nel tuo ambiente, in modo che le tue credenziali non vengano condivise accidentalmente quando condividi il notebook. Per ulteriori indicazioni, consulta Configura il tuo account IBM Cloud e Inizializza il servizio in un ambiente non affidabile.

# Load the Qiskit Runtime service
from qiskit_ibm_runtime import QiskitRuntimeService

# Syntax for first saving your token. Delete these lines after saving your credentials.
# QiskitRuntimeService.save_account(channel='ibm_quantum_platform', instance = '<YOUR_IBM_INSTANCE_CRN>', token='<YOUR-API_KEY>', overwrite=True, set_as_default=True)
# service = QiskitRuntimeService(channel='ibm_quantum_platform')

# Syntax for specifying a channel and instance (if you need to change from the default set above)
# service = QiskitRuntimeService(channel='<channel name here>', instance="<your instance name here>")

# Load saved credentials
service = QiskitRuntimeService()
# Load the Runtime primitive and session
from qiskit_ibm_runtime import Session, SamplerV2 as Sampler

# Use the least busy backend, specify options as needed
# backend = service.least_busy(operational=True, simulator=False, min_num_qubits = 127)
backend = service.least_busy()
print(backend.name)
ibm_sherbrooke

Dobbiamo ora trasporre il circuito, il che significa mapparlo sui gate di base disponibili per il computer quantistico scelto, e ottimizzare il circuito per l'esecuzione su quel computer quantistico.

# Transpile the circuit and optimize for running on the quantum computer selected
from qiskit.transpiler.preset_passmanagers import generate_preset_pass_manager

pm = generate_preset_pass_manager(optimization_level=3, backend=backend)
qc_ibm = pm.run(qc)

Passo 3: Eseguire usando le Primitive di Qiskit Runtime

Ora vogliamo eseguire questo su un vero computer quantistico. Tutta la sintassi necessaria è nel blocco di codice qui sotto. Se hai esaurito il tempo assegnato sui computer quantistici reali, o se sei senza connessione internet, puoi decommentare il prossimo blocco di codice, che eseguirà il codice su un simulatore locale.

# Specify that we want to use only a single shot, to represent a single measurement of a spin in a SG device.
num_shots = 1

# Evaluate the problem using a QPU via Qiskit IBM Runtime
# The best practice is to use a session as shown below. This is available to Premium Plan, Flex Plan, and On-Prem (IBM Quantum Platform API) Plan users.
with Session(backend=backend) as session:
sampler = Sampler(mode=session)
dist = sampler.run([qc_ibm], shots=num_shots).result()
session.close()
counts = dist[0].data.c.get_counts()

# Open users can still carry out this experiment, but without making use of a session, meaning repeated queuing is possible.
# from qiskit_ibm_runtime import Batch,
# batch = Batch(backend=backend)
# sampler = Sampler(mode=batch)
# dist = sampler.run([qc_ibm], shots=num_shots).result()
# Close the batch because no context manager was used.
# batch.close()
# counts = dist[0].data.c.get_counts()

Usa il codice seguente se non riesci a eseguire l'esperimento su un vero computer quantistico.

# This uses a local simulator
# from qiskit_aer import AerSimulator

# This generates a simulator that mimics the real quantum system
# backend_sim = AerSimulator.from_backend(backend)

# Import an estimator, this time from qiskit (we import from Runtime for real hardware)
# from qiskit.primitives import BackendSamplerV2
# sampler = BackendSamplerV2(backend = backend_sim)

# num_shots = 1

# This runs the job
# dist = sampler.run([qc_ibm], shots = num_shots).result()

# This selects measurement counts for the 0th circuit, which in this case is the only circuit
# counts=dist[0].data.c.get_counts()

Passo 4: Post-elaborazione e analisi classica

Per questo esperimento molto semplice, l'analisi classica consiste semplicemente nel visualizzare il risultato sperimentale.

from qiskit.visualization import plot_histogram

print("counts = ", counts)
plot_histogram(counts)
counts =  {'0': 1}

Output della cella di codice precedente

Abbiamo effettuato una misura e ottenuto "0". Questo non ci sorprende. Sappiamo di usare un computer quantistico composto da qubit e siamo molto abituati ai bit classici che restituiscono uno 0 o un 1. Ma tieni presente: questo è l'analogo computazionale quantistico degli esperimenti effettuati con particelle con momenti magnetici. Se ci fossimo aspettati una distribuzione uniforme tra 0 e +1, sarebbe stato davvero sorprendente ottenere un valore estremo alla prima misura. È questa sorprendente quantizzazione dei risultati nell'esperimento di Stern-Gerlach che ci ha portato a una migliore comprensione della natura, e che a sua volta ci ha aiutato alla fine a costruire computer quantistici.

Vediamo cosa succede quando effettuiamo un insieme di misure.

Secondo esperimento: misurare molte particelle

Per raccogliere statistiche su molte misurazioni di questo tipo, non è necessario ripetere i passi 1 e 2. È sufficiente aumentare il numero di shot nel nostro esperimento. Sentiti libero di giocare con il numero di shot nell'istanza del passo 3 qui sotto.

from qiskit_ibm_runtime import Session, SamplerV2 as Sampler

num_shots = 100

# Evaluate the problem using a QPU via Qiskit IBM Runtime
# The best practice is to use a session as shown below. This is available to Premium Plan, Flex Plan, and On-Prem (IBM Quantum Platform API) Plan users.
with Session(backend=backend) as session:
sampler = Sampler(mode=session)
dist = sampler.run([qc_ibm], shots=num_shots).result()
session.close()
counts = dist[0].data.c.get_counts()

# Open users can still carry out this experiment, but without making use of a session, meaning repeated queuing is possible.
# batch = Batch(backend=backend)
# sampler = Sampler(mode=batch)
# dist = sampler.run([qc_ibm], shots=num_shots).result()
# Close the batch because no context manager was used.
# batch.close()
# counts = dist[0].data.c.get_counts()

Come prima, se non riesci ad eseguire su un vero computer quantistico, decommenta il blocco sopra dal primo esperimento e cambia semplicemente num_shots = 1 in num_shots = 100 o più.

plot_histogram(counts)

Output of the previous code cell

Vediamo che a volte misuriamo 0 e a volte misuriamo 1. Nota che non misuriamo mai nient'altro! Potresti cambiare il numero di shot e notare che la probabilità di misurare 0 o 1 sembra essere abbastanza consistente tra diverse esecuzioni con numeri di shot diversi. Quindi, qualcosa nella preparazione dello stato sembra determinare la probabilità dei risultati di misurazione, anche se una singola misurazione potrebbe dare 0 o 1.

Terzo esperimento: spin casuali in un forno

Nell'esperimento di Stern-Gerlach, i ricercatori non potevano specificare l'angolo con cui un vettore di momento angolare emergeva dal forno. Gli orientamenti erano casuali (o qualcosa di ancora più misterioso! Vedi il modulo Qiskit Classroom sul teorema di Bell). Un'analogia ragionevole con quell'esperimento sarebbe inizializzare casualmente gli stati del nostro qubit ed effettuare molte misurazioni.

Passo 1: tradurre gli input classici in un problema quantistico

Il circuito che vogliamo costruire è lo stesso di prima. L'unica differenza è che questa volta costruiremo il circuito usando gate con parametri liberi θ\theta e ϕ\phi. I valori numerici di quei parametri verranno poi assegnati per ogni nuova esecuzione.

# from qiskit.circuit import QuantumCircuit, Parameter

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

# Define registers
qr = QuantumRegister(1, "q")
cr = ClassicalRegister(1, "c")
qc = QuantumCircuit(qr, cr)

# Add rotation gates for rotating the state of qubit 0 to random orientations
qc.rx(theta, 0)
qc.rz(phi, 0)
qc.measure(0, 0)

qc.draw("mpl")

Output of the previous code cell

Eseguire un circuito quantistico con un solo shot e farlo per molte configurazioni casuali è un flusso di lavoro insolito per un computer quantistico. Si può certamente fare, ma per semplicità useremo qui un simulatore locale.

# This uses a local simulator
from qiskit_aer import AerSimulator

# Import an estimator, this time from qiskit (we import from Runtime for real hardware)
from qiskit.primitives import BackendSamplerV2

# This generates a simulator that mimics the real quantum system
backend_sim = AerSimulator.from_backend(backend)
sampler_sim = BackendSamplerV2(backend=backend_sim)

# from qiskit.primitives import BackendSamplerV2
# sampler = BackendSamplerV2(backend=backend)
# A list to store the accumulated probabilities of the two possible measurement outcomes.
probslist = {"0": 0.0, "1": 0.0}

# Choose how many "particles"/measurements
measurements = 100
num_shots = 1

for i in range(measurements):
# Assign a random orientation for each measurement
phi = random.random() * 2 * pi
theta = random.random() * 2 * pi

angles = [phi, theta]
circuit = qc.assign_parameters(angles)
qc_ibm = pm.run(circuit)

# Run the circuit
# job = sampler.run([circuit],num_shots = 1)
dist = sampler_sim.run([qc_ibm], shots=num_shots).result()

# Update the list of probabilities
zeroterm = dist[0].data.c.get_counts().get("0") or 0
oneterm = dist[0].data.c.get_counts().get("1") or 0
probslist.update({"0": probslist.get("0") + zeroterm})
probslist.update({"1": probslist.get("1") + oneterm})

probslist.update({"0": probslist.get("0") / measurements})
probslist.update({"1": probslist.get("1") / measurements})
# print(probslist)
plot_histogram(probslist)

Output of the previous code cell

Vediamo quindi che lo stato iniziale casuale dei qubit (corrispondente agli orientamenti casuali del momento angolare in un esperimento di Stern-Gerlach) produce numeri simili di stati 0 e 1 (come numeri simili di stati spin-up e spin-down). Questo è esattamente ciò che mostrò l'esperimento originale di Stern-Gerlach.

Quarto esperimento: misurazioni ripetute

Quando un qubit parte da uno stato casuale, vediamo che c'è una probabilità di circa 50-50 di misurare un estremo o l'altro. Ma cosa succede allo stato del qubit (o al momento angolare della particella) dopo la misurazione? Per rispondere a questa domanda, dovremo definire un circuito che ci permetta di effettuare più misurazioni dello stesso qubit. Definiamo un circuito che possiamo usare per investigare questo. Vorremo permettere la possibilità di misurare entrambi gli stati 0|0\rangle e 1|1\rangle, quindi abbiamo bisogno di qualcosa per ruotare lo stato iniziale del qubit dallo stato di default 0|0\rangle. In questo caso useremo un gate di Hadamard HH, poiché H0=12(0+1)H|0\rangle = \frac{1}{\sqrt{2}}(|0\rangle+|1\rangle). Nota che, per impostazione predefinita, entrambe queste misurazioni saranno lungo zz.

from qiskit import QuantumCircuit

# Define registers
qr = QuantumRegister(1, "q")
cr = ClassicalRegister(2, "c")
qc = QuantumCircuit(qr, cr)

# Initialize the qubit to be a mixture of 0 and 1 states.
qc.h(0)

# Add a first measurement
qc.measure(0, 0)
qc.barrier()

# Add a second measurement
qc.measure(0, 1)

qc.draw("mpl")

qc_ibm = pm.run(qc)
# Step 3: Run the job

num_shots = 1000
dist = sampler.run([qc_ibm], shots=num_shots).result()
# To run on a simulator, uncomment the line below and comment out the line above.
# dist = sampler_sim.run([qc_ibm], shots=num_shots).result()
counts = dist[0].data.c.get_counts()
print(counts)
{'00': 497, '11': 498, '01': 3, '10': 2}
# Step 4: Post-process
plot_histogram(counts)

Output of the previous code cell

Nella figura sopra, i bin sono etichettati "00", "01" e così via. Qui, questi numeri si riferiscono al "2° risultato, 1° risultato". Quindi "00" significa che entrambe le misurazioni hanno dato lo stato 0|0\rangle, e "01" significa che la prima misurazione ha dato 1|1\rangle, e la seconda ha dato 0|0\rangle. La grande maggioranza dei qubit è stata misurata nello stato 0|0\rangle due volte, o nello stato 1|1\rangle due volte. È stato molto raro che un qubit venisse misurato in uno stato e poi in un altro stato, e i pochi casi in cui ciò è accaduto (~1%) sono dovuti al rumore. In questo caso quel rumore è stato simulato in linea con il comportamento del vero sistema quantistico. Questa correlazione osservata tra misurazioni successive è osservata anche nelle misurazioni di tipo Stern-Gerlach di particelle con momento angolare di spin. Se una particella viene misurata come "spin-up", una misurazione successiva poco dopo darà ancora "spin-up" (salvo una piccola variazione dovuta al rumore).

Questo potrebbe sembrare banale. Dopotutto, se un qubit viene misurato in uno stato, e poi lo misuro di nuovo, subito dopo, perché non dovrebbe essere ancora in quello stato? Ma se ci soffermiamo su questa sottigliezza, potrebbe aiutarci a selezionare alcuni strumenti matematici per descrivere questo fenomeno.

Analisi degli esperimenti finora

Raccogliamo alcune osservazioni dai nostri esperimenti finora:

  • La misurazione di un sistema meccanico quantistico produrrà solo uno di un insieme di "valori ammessi". Per sistemi a due livelli come i qubit o le particelle spin-1/2, una misurazione produrrà solo uno dei due risultati binari.
  • Quando inizializziamo casualmente lo stato del nostro sistema binario (come le particelle spin-1/2 che emergono da un forno), entrambi i risultati di misurazione binari sono possibili.
  • Una volta effettuata una misurazione e noto lo stato del sistema, ripetere la misurazione dello stesso osservabile fisico non cambia lo stato! Cioè, se otteniamo lo stato 0 una volta, quando misuriamo di nuovo è ancora nello stato 0 (salvo un piccolo rumore nel sistema ~0.1% to 1%).

Nota esplicitamente che non abbiamo ancora affrontato la natura probabilistica della meccanica quantistica, né detto nulla sul "collasso" dello stato in un autostato. Usando solo le osservazioni sopra, potrebbe essere allettante cercare un'operazione matematica OO che lasci invariato un insieme speciale di stati quantomeccanici ψ|\psi\rangle a meno di una costante: Oψ=cψO|\psi\rangle = c|\psi \rangle, poiché misurare lungo zz due volte dà lo stesso risultato. In definitiva, quella ricerca non riuscirà a descrivere tutti i comportamenti che vedremo. Ma può descrivere alcune cose, quindi la proseguiremo un po' più a lungo.

Esiste davvero un'operazione di questo tipo. L'operazione matriciale su alcuni vettori cambia i vettori, mentre l'operazione matriciale su altri vettori (autovettori) lascia il vettore invariato a meno di una costante. Prendi ad esempio la matrice MM e il vettore v|v\rangle dove

M=(1221)M= \begin{pmatrix} 1 & 2 \\ 2 & 1\end{pmatrix}

e

v=(11)|v\rangle = \begin{pmatrix} 1\\1 \end{pmatrix}

Nota che

Mv=(1221)(11)=(11+2121+11)=(33)=3v.M|v\rangle= \begin{pmatrix} 1 & 2 \\ 2 & 1\end{pmatrix}\begin{pmatrix} 1\\1 \end{pmatrix} = \begin{pmatrix} 1*1+2*1\\2*1+1*1 \end{pmatrix} = \begin{pmatrix} 3\\3 \end{pmatrix} = 3|v\rangle.

Ma per altri vettori, diciamo v=(12)|v'\rangle = \begin{pmatrix} 1\\2\end{pmatrix}, abbiamo

Mv=(1221)(12)=(11+2221+12)=(54)cv.M|v'\rangle= \begin{pmatrix} 1 & 2 \\ 2 & 1\end{pmatrix}\begin{pmatrix} 1\\2 \end{pmatrix} = \begin{pmatrix} 1*1+2*2\\2*1+1*2 \end{pmatrix} = \begin{pmatrix} 5\\4 \end{pmatrix} \neq c|v'\rangle.

Potremmo provare a descrivere lo spin di una particella usando una matrice, e potremmo provare a descrivere gli stati delle particelle dopo la misurazione usando un vettore, chiamato "vettore di stato". Non è affatto ovvio quali valori inserire in tale matrice o vettore di stato, ma l'unica proprietà che abbiamo dalle misurazioni finora e che potremmo usare per etichettare gli stati sarebbe la probabilità di misurare 0 o 1 ("spin-up" o "spin-down" nel contesto delle particelle spin-1/2). Dovremmo considerare che le voci nei vettori di stato debbano essere correlate a questa probabilità (esattamente la probabilità, "ampiezza di probabilità" - cioè elevare al quadrato la voce per ottenere la probabilità, e così via). Ma a questo punto, non siamo sicuri se le voci in queste matrici debbano essere strettamente reali, complesse, o altro. Per sicurezza, proviamo a sviluppare un framework in cui i vettori e le matrici soddisfano le seguenti condizioni:

  • Gli operatori matrice sono collegati all'esperimento il più possibile. Ad esempio, potremmo associare gli autovalori di una matrice di spin alle proiezioni di spin osservate sperimentalmente.
  • I vettori di stato devono essere collegati alla probabilità nel seguente modo: se una particella è nel vettore di stato A|A\rangle, la probabilità che una misurazione successiva trovi la particella nello stato B|B\rangle è PABAB2P_{AB}\equiv |\langle A| B \rangle|^2.

Questo ci dà molta libertà nello sviluppare le nostre prime matrici. Ad esempio, potremmo ingenuamente provare

0(10).|0\rangle \sim |\uparrow\rangle \sim \begin{pmatrix} 1 \\0 \end{pmatrix}.

Qui il 0|0\rangle \sim |\uparrow\rangle significa che esistono stati nei computer quantistici e nei sistemi spin-1/2 che sono molto simili e vengono spesso mappati l'uno sull'altro. Ovviamente non sono esattamente gli stessi, poiché si riferiscono a sistemi diversi. Ma l'algebra che descrive questi sistemi a due stati potrebbe conformarsi alle stesse regole (spoiler: lo fanno!). Nota che questa scelta casuale ha già un bell'attributo. Nota che

P00=002=(10)(10)2=12=1.P_{00} = |\langle 0| 0 \rangle|^2 = \vert \begin{pmatrix} 1 & 0\end{pmatrix} \begin{pmatrix} 1 \\ 0\end{pmatrix}\vert ^2 = |1|^2 = 1.

Cioè, se una particella è già nello stato 0|0\rangle, la probabilità che una misurazione successiva dia ancora 0|0\rangle è 1 (escludendo gli effetti del rumore). Questo è eccellente, perché abbiamo già visto che una volta che uno stato è nello stato 0 o "spin-up", vi rimane alla misurazione successiva. La probabilità sopra dovrebbe essere effettivamente del 100%.

Verifica la tua comprensione

Leggi le domande qui sotto, pensa alle tue risposte, poi clicca sui triangoli per vedere le soluzioni.

Perché

0=(10)|0\rangle = \begin{pmatrix} 1 \\0 \end{pmatrix}

è una scelta migliore rispetto a, diciamo,

0=(20)?|0\rangle = \begin{pmatrix} 2 \\0 \end{pmatrix}?

Risposta:

Il nostro tentativo di associare la probabilità di una misurazione al quadrato del prodotto interno significa che abbiamo bisogno che la magnitudine di ogni vettore sia 1. Cioè, vv2=1|\langle v|v\rangle|^2 = 1 per tutti i v|v\rangle, poiché la probabilità che una cosa nello stato v|v\rangle sia nello stato v|v\rangle è del 100%. Questa è nota come "condizione di normalizzazione".

Perché

0=(10)|0\rangle = \begin{pmatrix} 1 \\0 \end{pmatrix}

è una scelta migliore rispetto a, diciamo,

0=(01)?|0\rangle = \begin{pmatrix} 0 \\1 \end{pmatrix}?

Risposta:

Non lo è. Non c'è motivo per cui dobbiamo inizialmente scegliere 0=(10)|0\rangle = \begin{pmatrix} 1 \\0 \end{pmatrix}. È piuttosto una convenzione. Tuttavia, una volta fatta quella scelta, impone certi vincoli sulle scelte successive. Vedi sotto.

Ricorda che negli esperimenti sopra, abbiamo scoperto che un qubit inizialmente nello stato 0|0\rangle rimane in quello stato alla misurazione successiva. Lo stesso vale per 1|1\rangle. Questo significa che un qubit che è in 0|0\rangle ha probabilità zero di essere misurato nello stato 1|1\rangle (escludendo gli effetti del rumore). La nostra richiesta di connessione tra prodotti interni e probabilità di misurazioni ci dice quindi che

P01=P10=0.P_{01} = P_{10}=0.

Senza perdita di generalità, possiamo scrivere il vettore di stato 1=(ab)|1\rangle = \begin{pmatrix} a \\ b \end{pmatrix}. Poi possiamo scrivere

P01=012=(10)(ab)2=a2=0.P_{01} = |\langle 0| 1 \rangle|^2 = \vert \begin{pmatrix} 1 & 0\end{pmatrix} \begin{pmatrix} a \\ b\end{pmatrix}\vert ^2 = |a|^2 = 0.

Il requisito che P11=1P_{11} = 1, la cosiddetta "condizione di normalizzazione", ci dice che b2=1|b|^2=1. Questo di per sé ci limita a b=eiϕb=e^{i\phi} per ϕR\phi \in \mathbb{R}. Si scopre che ci sono altre ragioni per scegliere b=1b=1 che vanno oltre questa introduzione all'argomento. Per ora, basti sapere che b=1b=1 è una soluzione accettabile.

Siamo arrivati piuttosto lontano nella nostra analisi. Scegliere una forma per i nostri vettori di stato ci permette di costruire una matrice che descriva qualcosa sui fenomeni fisici in gioco. In particolare, poiché l'esperimento originale di Stern-Gerlach misurava una separazione delle traiettorie basata sulle componenti del momento angolare di spin lungo l'asse zz, vorremmo un operatore che descriva esattamente questo: SzS_z. Un'altra connessione chiave con l'esperimento è che dalla quantità di deflessione, dal tempo di percorrenza e dalla forza del campo magnetico noto, possiamo determinare la magnitudine della componente zz dello spin. Sebbene ciò richieda molte ipotesi sulla precisione dell'apparato sperimentale, qui ci limitiamo a ribadire che le componenti z misurate del momento angolare di spin sono ±/2\pm \hbar/2.

Stiamo quindi cercando una matrice con autovalori reali (soddisfatta dalle matrici hermitiane) con autovalori corrispondenti a queste componenti di spin osservate sperimentalmente. Senza perdita di generalità, possiamo scrivere Sz=(s11s12s21s22)S_z = \begin{pmatrix} s_{11} & s_{12} \\ s_{21} & s_{22}\end{pmatrix}, e possiamo richiedere:

Sz=(s11s12s21s22)(10)=(s11s21)=!2(10)s11=/2,s21=0S_z |\uparrow\rangle = \begin{pmatrix} s_{11} & s_{12} \\ s_{21} & s_{22}\end{pmatrix}\begin{pmatrix}1 \\0\end{pmatrix} = \begin{pmatrix} s_{11} \\ s_{21} \end{pmatrix} \overset{!}{=} \frac{\hbar}{2} \begin{pmatrix}1 \\0\end{pmatrix} \rightarrow s_{11} = \hbar/2,s_{21}=0 Sz=(s11s12s21s22)(01)=(s12s22)=!2(01)s12=0,s22=/2S_z |\downarrow\rangle = \begin{pmatrix} s_{11} & s_{12} \\ s_{21} & s_{22}\end{pmatrix}\begin{pmatrix}0 \\1\end{pmatrix} = \begin{pmatrix} s_{12} \\ s_{22} \end{pmatrix} \overset{!}{=} -\frac{\hbar}{2} \begin{pmatrix}0 \\1\end{pmatrix} \rightarrow s_{12} = 0, s_{22}=-\hbar/2

Combinando, ed estraendo il fattore complessivo di /2\hbar/2, abbiamo

Sz=2(1001).S_z = \frac{\hbar}{2} \begin{pmatrix} 1 & 0 \\ 0 & -1\end{pmatrix}.

Questo è il ben noto operatore spin-z che si trova in tutti i libri di testo di meccanica quantistica. Spesso lo si vede senza il /2\hbar/2, nel qual caso è l'operatore "Pauli-z", tipicamente denotato σz\sigma_z:

σz=(1001).\sigma_z = \begin{pmatrix} 1 & 0 \\ 0 & -1\end{pmatrix}.

Questo è utile, poiché questo operatore di Pauli (e le matrici correlate) può descrivere molti sistemi fisici che coinvolgono due livelli o due possibili risultati di misurazione, inclusi gli stati dei qubit transmon in un computer quantistico.

Prima di passare ad altri operatori e stati correlati a questo, dobbiamo affrontare un fatto che molte persone fraintendono. L'azione di un operatore non è la stessa cosa di una misurazione. In un certo senso, potresti dire: "Ovviamente no! Una avviene sulla carta come parte di un calcolo matematico, e l'altra avviene in laboratorio su sistemi fisici." Sì, è vero, ma è più di questo. Effettuare una misurazione della componente zz dello spin darà sempre uno stato "spin-up" o "spin-down", indipendentemente dallo stato iniziale del sistema. Lo abbiamo visto con gli analoghi quantistici 0|0\rangle e 1|1\rangle. Abbiamo inizializzato gli stati in centinaia di orientamenti casuali, e le misurazioni hanno sempre dato 0|0\rangle o 1|1\rangle. Questo è noto come "collasso dello stato" in un autostato dovuto alla misurazione. Questo non accade quando si applica una matrice a uno stato. Prova le domande qui sotto per esplorare questo.

Verifica la tua comprensione

Leggi le domande qui sotto, pensa alla tua risposta, poi clicca sul triangolo per vedere la soluzione.

Supponi di iniziare con una particella in uno stato di spin

ψ=(3/52/5).|\psi\rangle = \begin{pmatrix}\sqrt{3/5} \\ \sqrt{2/5}\end{pmatrix}.

(a) Cosa ottieni se applichi l'operatore SzS_z a questo vettore di stato? (b) Cosa ottieni se effettui una singola misurazione della componente zz dello spin di questa particella? (c) Cosa ottieni se prepari molte particelle identiche a questo stato ed effettui migliaia di misurazioni della componente zz dello spin?

Risposte:

(a) Ottieni

Szψ=2(1001)(3/52/5)S_z |\psi\rangle = \frac{\hbar}{2} \begin{pmatrix} 1 & 0 \\ 0 & -1\end{pmatrix} \begin{pmatrix}\sqrt{3/5} \\ \sqrt{2/5}\end{pmatrix}=2(3/52/5).= \frac{\hbar}{2} \begin{pmatrix}\sqrt{3/5} \\ -\sqrt{2/5}\end{pmatrix}.

Tutto qui. Non c'è nessun risultato sperimentale. Hai semplicemente applicato la matrice al vettore e hai ottenuto un vettore leggermente diverso che ora ha un nuovo segno "-", e non ha più una magnitudine di 1, poiché ha un prefatore /2\hbar/2.

(b) Otterrai |\uparrow\rangle oppure |\downarrow\rangle. Questo corrisponde all'osservare una proiezione dello spin sull'asse zz di /2\hbar/2 oppure /2-\hbar/2, rispettivamente. Possiamo anche determinare la probabilità di ciascun risultato, poiché

Pψ=ψ2=(10)(3/52/5)2=3/52=35P_{\uparrow\psi}=|\langle \uparrow|\psi\rangle|^2 = \vert \begin{pmatrix}1 & 0\end{pmatrix} \begin{pmatrix}\sqrt{3/5} \\ \sqrt{2/5}\end{pmatrix}\vert^2 = |\sqrt{3/5}|^2 = \frac{3}{5}Pψ=ψ2=(01)(3/52/5)2=2/52=25P_{\downarrow\psi}=|\langle \downarrow|\psi\rangle|^2 = \vert \begin{pmatrix}0 & 1\end{pmatrix} \begin{pmatrix}\sqrt{3/5} \\ \sqrt{2/5}\end{pmatrix}\vert^2 = |\sqrt{2/5}|^2 = \frac{2}{5}

Quindi, sebbene lo stato spin-up sia il 20% più probabile, entrambi i risultati sono possibili, e otterremo solo uno di questi due stati.

(c) Approssimativamente il 60% delle misurazioni darà particelle spin-up, e approssimativamente il 40% darà particelle spin-down, secondo le probabilità di misurazione calcolate nella parte (b).

Verifica le risposte alle parti (b) e (c) della domanda precedente usando l'analogia tra gli stati spin-up di un atomo e gli stati qubit:

0.|\uparrow\rangle\sim|0\rangle.

Scrivi dei circuiti quantistici per creare lo stato iniziale desiderato, poi usa hardware reale o un simulatore per verificare i risultati di una singola misurazione, e da un ensemble di centinaia o anche migliaia di misurazioni.

Risposta:

#Use the backend sampler for part (b) because it allows us to use a single shot.
from qiskit_aer import AerSimulator
backend_sim = AerSimulator.from_backend(backend)
from qiskit.primitives import BackendSampler
sampler = BackendSampler(backend = backend_sim)

#Create a quantum circuit to initialize the state.
import math
psi = [math.sqrt(3/5),math.sqrt(2/5)]
qc = QuantumCircuit(1,1)
qc.initialize(psi, [0])

#Add measurement to the circuit
qc.measure(0,0)
qc.draw('mpl')

#Set num_shots =1 for part (b) and num_shots = 1000 or more for part (c).
num_shots = 1000

#Run the job and print the result. You should obtain only 0 or 1 in part (b) for a single shot.
#You should obtain a probability distribution with approximately 60% 0 and 40% 1 in part (c)

dist = sampler.run([qc_ibm], shots = num_shots).result()
counts=dist[0].data.c.get_counts()
print(counts)

#You should obtain {0: 599, 1: 401} or something equivalently close to the 60%-40% distribution predicted.

Quinto esperimento: misurare osservabili diversi

Finora abbiamo effettuato misurazioni solo lungo l'asse z. In un esperimento di Stern-Gerlach, se volessimo misurare lungo, diciamo, l'asse x, orienteremmo semplicemente il campo magnetico disomogeneo in modo che punti lungo l'asse xx, e cercheremmo le deflessioni lungo xx sullo schermo. I computer quantistici IBM, tuttavia, sono progettati per effettuare misurazioni lungo un solo asse (zz). Per misurare uno stato lungo xx dobbiamo eseguire un "cambio di base". Questo significa che dobbiamo eseguire un'operazione che porta gli stati lungo xx nella sfera di Bloch a zz, e viceversa. Ci sono alcuni modi per implementarlo, ma quello preferito è un gate di Hadamard:

H=12(1111)H=\frac{1}{\sqrt{2}}\begin{pmatrix}1 & 1 \\ 1 & -1\end{pmatrix}

Verifica la tua comprensione

Leggi le domande qui sotto, pensa alla tua risposta, poi clicca sul triangolo per vedere la soluzione.

Dimostra che H0=+xH|0\rangle = |+\rangle_x e che H+x=0H|+\rangle_x = |0\rangle

Risposta:

H0=12(1111)(10)=12(11)=+xH|0\rangle = \frac{1}{\sqrt{2}}\begin{pmatrix}1 & 1 \\ 1 & -1\end{pmatrix}\begin{pmatrix}1 \\ 0\end{pmatrix} = \frac{1}{\sqrt{2}}\begin{pmatrix}1 \\ 1\end{pmatrix} = |+\rangle_xH+x=1(2)(1111)12(11)=12(20)=(10)=0H|+\rangle_x = \frac{1}{\sqrt(2)}\begin{pmatrix}1 & 1 \\ 1 & -1\end{pmatrix}\frac{1}{\sqrt{2}}\begin{pmatrix}1 \\ 1\end{pmatrix} = \frac{1}{2}\begin{pmatrix}2 \\ 0\end{pmatrix} = \begin{pmatrix}1 \\ 0\end{pmatrix} = |0\rangle

Dimostra che H1=xH|1\rangle = |-\rangle_x e che Hx=1H|-\rangle_x = |1\rangle

Risposta:

H1=12(1111)(01)=12(11)=xH|1\rangle = \frac{1}{\sqrt{2}}\begin{pmatrix}1 & 1 \\ 1 & -1\end{pmatrix}\begin{pmatrix}0 \\ 1\end{pmatrix} = \frac{1}{\sqrt{2}}\begin{pmatrix}1 \\ -1\end{pmatrix} = |-\rangle_xHx=1(2)(1111)12(11)=12(02)=(01)=1H|-\rangle_x = \frac{1}{\sqrt(2)}\begin{pmatrix}1 & 1 \\ 1 & -1\end{pmatrix}\frac{1}{\sqrt{2}}\begin{pmatrix}1 \\ -1\end{pmatrix} = \frac{1}{2}\begin{pmatrix}0 \\ 2\end{pmatrix} = \begin{pmatrix}0 \\ 1\end{pmatrix} = |1\rangle
# Define registers
qr = QuantumRegister(1, "q")
cr = ClassicalRegister(1, "c")
qc = QuantumCircuit(qr, cr)

# Add a hadamard gate to rotate into the x-basis
qc.h(0)
qc.measure(0, 0)

qc.draw("mpl")

Output of the previous code cell

Questo circuito ruota il nostro sistema in modo che le misurazioni (lungo zz) ci informino sulle caratteristiche lungo xx prima della rotazione. Sappiamo già che il computer quantistico inizializza gli stati a 0|0\rangle che corrisponde a |\uparrow\rangle. Vediamo cosa succede quando misuriamo la proiezione dello spin lungo xx per uno stato inizialmente in |\uparrow\rangle. Mostriamo questo passo su un simulatore per incoraggiarti a esplorare le statistiche di altri circuiti con inizializzazioni diverse.

from qiskit.primitives import StatevectorSampler as Sampler

sampler_sv = Sampler()

job = sampler_sv.run([qc], shots=10000)
print(job.result()[0].data.c.get_counts())
{'1': 4977, '0': 5023}

Questo mostra che per un qubit inizialmente in 0|0\rangle (o equivalentemente, uno spin in |\uparrow\rangle) la probabilità di misurare una proiezione lungo +x+x o x-x è circa 50-50. In un certo senso, questo ha perfettamente senso. Dopotutto, se qualcosa puntasse nella direzione z, non avrebbe alcuna preferenza particolare per ±x\pm x. Potremmo aspettarci lo stesso se iniziamo con lo stato 1|1\rangle (o |\downarrow\rangle). Verifichiamo:

# Define registers
qr = QuantumRegister(1, "q")
cr = ClassicalRegister(1, "c")
qc = QuantumCircuit(qr, cr)

# Add a NOT gate and hadamard gate. Measure.
qc.x(0)
qc.h(0)
qc.measure(0, 0)

qc.draw("mpl")

Output of the previous code cell

job = sampler_sv.run([qc], shots=10000)
print(job.result()[0].data.c.get_counts())
{'0': 4935, '1': 5065}

Sì! Ancora una volta, troviamo una probabilità 50-50 di misurare proiezioni lungo ±x\pm x. In analogia con le misurazioni lungo zz, potremmo ulteriormente sospettare che una particella che collassa in uno stato definitivamente lungo +x+x abbia probabilità zero di essere successivamente misurata lungo x-x. Verifichiamo:

from qiskit import QuantumCircuit

# Define registers
qr = QuantumRegister(1, "q")
cr = ClassicalRegister(2, "c")
qc = QuantumCircuit(qr, cr)

# Rotate into x-basis using a Hadamard gate, then make two measurements in succession
qc.h(0)
qc.measure(0, 0)
qc.barrier()
qc.measure(0, 1)

qc.draw("mpl")

Output of the previous code cell

job = sampler_sv.run([qc])
print(job.result()[0].data.c.get_counts())
plot_histogram(job.result()[0].data.c.get_counts())
{'00': 504, '11': 520}

Output of the previous code cell

Come previsto, otteniamo risultati in cui la proiezione è lungo +x+x, e poi di nuovo lungo +x+x, e risultati in cui la proiezione è inizialmente lungo x-x e poi di nuovo lungo x-x. Non vediamo casi in cui la proiezione passi da +x+x a x-x o viceversa. Possiamo raccogliere le nostre osservazioni e usarle per sviluppare ulteriori operatori in forma matriciale, e ulteriori vettori di stato.

Sappiamo:

  • Gli stati con proiezioni definite lungo +z+z o z-z hanno il 50% di probabilità di avere una proiezione lungo +x+x e il 50% di probabilità di avere una proiezione lungo x-x.
  • Gli stati con una proiezione definita lungo +x+x hanno probabilità zero di essere successivamente trovati con una proiezione lungo x-x, e viceversa.

Possiamo usare questi risultati per costruire stati con una proiezione definita e positiva lungo xx (che chiamiamo +x|+x\rangle), e quelli con proiezione definita e negativa lungo xx (che chiamiamo x|-x\rangle). Da quegli stati, possiamo costruire la matrice corrispondente a SxS_x, esattamente come abbiamo fatto per SzS_z. Lasciamo questi come esercizi per chi studia. Analogamente, si possono costruire esperimenti che effettuano misurazioni lungo l'asse yy, determinare i vettori per +y|+y\rangle e y|-y\rangle, e infine ottenere un'espressione per SyS_y.

Raccogliendo tutti questi vettori e matrici insieme, abbiamo

+x=12(11)x=12(11)Sx=2(0110)+y=12(1i)y=12(1i)Sy=2(0ii0)+z=(10)z=(01)Sz=2(1001)\begin{aligned} |+x\rangle &= \frac{1}{\sqrt{2}}\begin{pmatrix}1 \\ 1\end{pmatrix} & \: & |-x\rangle &=& \frac{1}{\sqrt{2}}\begin{pmatrix}1 \\ -1\end{pmatrix} & \: &S_x &=& \frac{\hbar}{2} \begin{pmatrix} 0 & 1 \\ 1 & 0\end{pmatrix}\\ |+y\rangle &= \frac{1}{\sqrt{2}}\begin{pmatrix}1 \\ i\end{pmatrix} & \: & |-y\rangle &=& \frac{1}{\sqrt{2}}\begin{pmatrix}1 \\ -i\end{pmatrix} & \: &S_y &=& \frac{\hbar}{2} \begin{pmatrix} 0 & -i \\ i & 0\end{pmatrix}\\ |+z\rangle &= \begin{pmatrix}1 \\ 0\end{pmatrix} & \: &|-z\rangle &=& \begin{pmatrix}0 \\ 1\end{pmatrix} & \: &S_z &=& \frac{\hbar}{2} \begin{pmatrix} 1 & 0 \\ 0 & 1\end{pmatrix}\\ \end{aligned}

Domande

Gli istruttori possono richiedere versioni di questi notebook con le soluzioni e indicazioni sul loro inserimento nei curricula più comuni compilando questo breve sondaggio sull'utilizzo dei notebook.

Concetti fondamentali:

  • Per una particella con spin-1/2, una misurazione della proiezione dello spin su un certo asse può dare solo uno di due risultati, spesso chiamati "su" e "giù".
  • I qubit possono essere misurati solo in uno di due stati, spesso indicati come 0|0\rangle e 1|1\rangle.
  • Possiamo modellare l'esperimento di Stern-Gerlach su particelle con spin-1/2 usando qubit in un computer quantistico.
  • Misurazioni ripetute della stessa osservabile fisica della stessa particella/qubit restituiranno lo stesso risultato (a meno che il sistema non venga perturbato dal rumore).
  • Possiamo usare i risultati dell'esperimento di Stern-Gerlach o degli esperimenti analoghi con computer quantistici per derivare un sistema di vettori di stato e operatori matriciali che descrivono lo spin quantomeccanico.

Domande V/F:

  1. V/F Partendo dalle osservazioni sperimentali, l'unica scelta valida per un vettore che rappresenti |\uparrow\rangle è (10)\begin{pmatrix}1 \\ 0\end{pmatrix}
  2. V/F Se =(10)|\uparrow\rangle = \begin{pmatrix}1 \\ 0\end{pmatrix}, l'unica scelta per |\downarrow\rangle è (01)\begin{pmatrix}0 \\ 1\end{pmatrix} (a meno di una fase globale).
  3. V/F Una particella misurata nello stato 0|0\rangle continuerà a essere trovata nello stato 0|0\rangle nelle misurazioni successive lungo zz.
  4. V/F Una particella misurata nello stato 0|0\rangle continuerà a essere trovata nello stato 0|0\rangle nelle misurazioni successive lungo xx.
  5. V/F Una particella misurata nello stato 0|0\rangle verrà sempre trovata nello stato +x|+\rangle_x nelle misurazioni successive lungo xx.

Domande a scelta multipla:

  1. Una particella inizialmente in |\uparrow\rangle ha quale probabilità di essere misurata nello stato +x|+x\rangle?

    • a. 0%
    • b. 25%
    • c. 50%
    • d. 71%
    • e. 100%
  2. Una particella inizialmente in |\uparrow\rangle ha quale probabilità di essere misurata nello stato |\downarrow\rangle?

    • a. 0%
    • b. 25%
    • c. 50%
    • d. 71%
    • e. 100%
  3. Lo stato |\uparrow\rangle di una particella con spin-1/2 è più comunemente associato a quale stato del quantum computing?

    • a. +|+\rangle
    • b. |-\rangle
    • c. 0|0\rangle
    • d. 1|1\rangle
    • e. Nessuna delle precedenti

Domande di discussione:

  1. Tre amici stanno discutendo di misurazioni quantistiche e operatori. L'amico A dice: "Effettuare una misurazione lungo zz e applicare l'operatore σz\sigma_z sono la stessa cosa." L'amico B dice: "Beh, sono procedure diverse, ma producono lo stesso risultato." L'amico C dice: "Sono totalmente diverse; hanno persino effetti diversi sulla maggior parte degli stati." Con chi sei d'accordo e perché?

Problemi a risposta aperta:

  1. Date le osservazioni sperimentali e la sintassi proposta:

P+x=(10)(ab)2=a2=12P_{\uparrow+x}=\vert \begin{pmatrix}1 & 0\end{pmatrix}\begin{pmatrix}a \\ b\end{pmatrix}\vert^2 = |a|^2 =\frac{1}{2} P+x=(01)(ab)2=b2=12P_{\downarrow+x}=\vert \begin{pmatrix}0 & 1\end{pmatrix}\begin{pmatrix}a \\ b\end{pmatrix}\vert^2 = |b|^2 =\frac{1}{2}

mostra che a meno di una fase globale

+x=12(1eiα)|+\rangle_x = \frac{1}{\sqrt{2}}\begin{pmatrix}1 \\ e^{i\alpha}\end{pmatrix}

Scegli α=0\alpha = 0 per ottenere il risultato standard.

  1. Date le osservazioni sperimentali e la sintassi proposta:

Px=(10)(ab)2=a2=12P_{\uparrow-x}=\vert \begin{pmatrix}1 & 0\end{pmatrix}\begin{pmatrix}a \\ b\end{pmatrix}\vert^2 = |a|^2 =\frac{1}{2} Px=(01)(ab)2=b2=12P_{\downarrow-x}=\vert \begin{pmatrix}0 & 1\end{pmatrix}\begin{pmatrix}a \\ b\end{pmatrix}\vert^2 = |b|^2 =\frac{1}{2}

E usando il risultato del problema bonus 3:

P+xx=12(11)(cd)2=12c+d2=0P_{+x-x}=\vert \frac{1}{\sqrt{2}}\begin{pmatrix}1 & 1\end{pmatrix}\begin{pmatrix}c \\ d\end{pmatrix}\vert^2 = \frac{1}{2}|c+d|^2 =0

mostra che a meno di una fase globale

+x=12(11)|+\rangle_x = \frac{1}{\sqrt{2}}\begin{pmatrix}1 \\ -1\end{pmatrix}

Ringraziamenti