Implementazione con Qiskit
In questa lezione implementiamo alcune delle idee della lezione sull'entanglement in azione, usando Qiskit.
# Added by doQumentation — required packages for this notebook
!pip install -q numpy qiskit qiskit-aer
from qiskit import __version__
print(__version__)
2.1.1
from qiskit import QuantumCircuit, QuantumRegister, ClassicalRegister
from qiskit_aer import AerSimulator
from qiskit.visualization import plot_histogram, array_to_latex
from qiskit.result import marginal_distribution
from qiskit.circuit.library import UGate
from numpy import pi, random
Ecco un'implementazione tramite circuito quantistico del protocollo di teleportazione.
qubit = QuantumRegister(1, "Q")
ebit0 = QuantumRegister(1, "A")
ebit1 = QuantumRegister(1, "B")
a = ClassicalRegister(1, "a")
b = ClassicalRegister(1, "b")
protocol = QuantumCircuit(qubit, ebit0, ebit1, a, b)
# Prepare ebit used for teleportation
protocol.h(ebit0)
protocol.cx(ebit0, ebit1)
protocol.barrier()
# Alice's operations
protocol.cx(qubit, ebit0)
protocol.h(qubit)
protocol.barrier()
# Alice measures and sends classical bits to Bob
protocol.measure(ebit0, a)
protocol.measure(qubit, b)
protocol.barrier()
# Bob uses the classical bits to conditionally apply gates
with protocol.if_test((a, 1)):
protocol.x(ebit1)
with protocol.if_test((b, 1)):
protocol.z(ebit1)
display(protocol.draw(output="mpl"))

Il circuito fa uso di alcune funzionalità di Qiskit che non abbiamo ancora visto nelle lezioni precedenti, tra cui le funzioni barrier e if_test.
La funzione barrier crea una separazione visiva che rende il diagramma del circuito più leggibile, e impedisce anche a Qiskit di eseguire varie semplificazioni e ottimizzazioni attraverso la barriera durante la compilazione quando i circuiti vengono eseguiti su hardware reale.
La funzione if_test applica un'operazione in modo condizionale a seconda di un bit o registro classico.
Il circuito inizializza prima nello stato (che non fa parte del protocollo stesso), seguito dalle operazioni di Alice, poi dalle sue misurazioni, e infine dalle operazioni di Bob. Per verificare che il protocollo funzioni correttamente, applicheremo un gate a qubit singolo generato casualmente allo stato inizializzato di per ottenere un vettore di stato quantistico casuale da teleportare. Applicando l'inverso (cioè la trasposta coniugata) di quel gate a dopo l'esecuzione del protocollo, possiamo verificare che lo stato sia stato teleportato misurando e controllando che sia tornato allo stato .
Per prima cosa scegliamo casualmente un gate unitario a qubit singolo.
random_gate = UGate(
theta=random.random() * 2 * pi,
phi=random.random() * 2 * pi,
lam=random.random() * 2 * pi,
)
display(array_to_latex(random_gate.to_matrix()))
Ora creiamo un nuovo circuito di test che prima applica il nostro gate casuale a poi esegue il circuito di teleportazione, e infine applica l'inverso del nostro gate casuale al qubit e misura. Il risultato dovrebbe essere con certezza.
# Create a new circuit including the same bits and qubits used in the
# teleportation protocol.
test = QuantumCircuit(qubit, ebit0, ebit1, a, b)
# Start with the randomly selected gate on Q
test.append(random_gate, qubit)
test.barrier()
# Append the entire teleportation protocol from above.
test = test.compose(protocol)
test.barrier()
# Finally, apply the inverse of the random unitary to B and measure.
test.append(random_gate.inverse(), ebit1)
result = ClassicalRegister(1, "Result")
test.add_register(result)
test.measure(ebit1, result)
display(test.draw(output="mpl"))

Infine, eseguiamo il simulatore Aer su questo circuito e tracciamo un istogramma degli output. Vedremo le statistiche per tutti e tre i bit classici: il bit in basso/a sinistra dovrebbe essere sempre indicando che il qubit è stato teleportato con successo in mentre gli altri due bit dovrebbero essere approssimativamente uniformi.
result = AerSimulator().run(test).result()
statistics = result.get_counts()
display(plot_histogram(statistics))
Possiamo anche filtrare le statistiche per concentrarci esclusivamente sul qubit del risultato del test, in questo modo:
filtered_statistics = marginal_distribution(statistics, [2])
display(plot_histogram(filtered_statistics))
Superdense coding
Il superdense coding è un protocollo che, in un certo senso, raggiunge un obiettivo complementare alla teleportazione. Invece di consentire la trasmissione di un qubit usando due bit classici di comunicazione (al costo di un e-bit di entanglement), permette la trasmissione di due bit classici usando un qubit di comunicazione quantistica (anche in questo caso, al costo di un e-bit di entanglement).
In dettaglio, abbiamo un mittente (Alice) e un destinatario (Bob) che condividono un e-bit di entanglement. Secondo le convenzioni adottate nella lezione, questo significa che Alice detiene un qubit Bob detiene un qubit e insieme la coppia si trova nello stato Alice desidera trasmettere due bit classici a Bob, che indicheremo con e e lo farà inviandogli un qubit.
È ragionevole considerare questa operazione come meno interessante di quella che realizza la teleportazione. Inviare qubit sarà probabilmente molto più difficile che inviare bit classici nel prevedibile futuro, al punto che scambiare un qubit di comunicazione quantistica per due bit di comunicazione classica, oltretutto al costo di un e-bit, sembra difficilmente conveniente. Tuttavia, questo non implica che il superdense coding non sia interessante, perché lo è sicuramente.
In linea con il tema della lezione, uno dei motivi per cui il superdense coding è interessante è che dimostra un uso concreto e (nel contesto della teoria dell'informazione) piuttosto sorprendente dell'entanglement. Un famoso teorema nella teoria dell'informazione quantistica, noto come teorema di Holevo, implica che senza l'uso di uno stato entangled condiviso, è impossibile comunicare più di un bit di informazione classica inviando un singolo qubit. (Il teorema di Holevo è più generale di così. La sua formulazione precisa è tecnica e richiede una spiegazione, ma questa è una delle sue conseguenze.) Quindi, attraverso il superdense coding, l'entanglement condiviso consente effettivamente il raddoppio della capacità di trasporto di informazione classica dell'invio di qubit.
Protocollo
Il seguente diagramma di circuito quantistico descrive il protocollo di superdense coding:

In parole, ecco cosa fa Alice:
-
Se Alice esegue un gate sul suo qubit (e se non lo fa).
-
Se Alice esegue un gate sul suo qubit (e se non lo fa).
Alice invia quindi il suo qubit a Bob.
Quando Bob riceve il qubit prima esegue un gate controlled-NOT, con come controllo e come target, e poi applica un gate di Hadamard ad Poi misura per ottenere e per ottenere con misurazioni nella base standard in entrambi i casi.
Analisi
L'idea alla base di questo protocollo è semplice: Alice sceglie effettivamente quale stato di Bell vuole condividere con Bob, invia a Bob il suo qubit, e Bob misura per determinare quale stato di Bell Alice ha scelto.
Cioè, inizialmente condividono e a seconda dei bit e Alice lascia questo stato invariato o lo sposta in uno degli altri stati di Bell applicando o al suo qubit
Le azioni di Bob hanno i seguenti effetti sui quattro stati di Bell:
Questo può essere verificato direttamente, calcolando i risultati delle operazioni di Bob su questi stati uno alla volta.
Quindi, quando Bob esegue le sue misurazioni, è in grado di determinare quale stato di Bell Alice ha scelto. Verificare che il protocollo funzioni correttamente è una questione di controllare ogni caso:
-
Se allora lo stato di quando Bob riceve è Trasforma questo stato in e ottiene
-
Se allora lo stato di quando Bob riceve è Trasforma questo stato in e ottiene
-
Se allora lo stato di quando Bob riceve è Trasforma questo stato in e ottiene
-
Se allora lo stato di quando Bob riceve è Trasforma questo stato in e ottiene (Il fattore di fase negativo non ha alcun effetto qui.)
Implementazione del superdense coding
Ecco una semplice implementazione del superdense coding in cui specifichiamo il circuito stesso in base ai bit da trasmettere. Per prima cosa scegliamo due bit da trasmettere. (In seguito li sceglieremo casualmente, ma per ora facciamo semplicemente una scelta arbitraria.)
c = "1"
d = "0"
Ora costruiamo il circuito di conseguenza. Qui lasceremo che Qiskit usi i nomi predefiniti per i qubit: per il qubit in alto e per quello in basso.
protocol = QuantumCircuit(2)
# Prepare ebit used for superdense coding
protocol.h(0)
protocol.cx(0, 1)
protocol.barrier()
# Alice's operations
if d == "1":
protocol.z(0)
if c == "1":
protocol.x(0)
protocol.barrier()
# Bob's actions
protocol.cx(0, 1)
protocol.h(0)
protocol.measure_all()
display(protocol.draw(output="mpl"))

Non c'è molto di nuovo qui, tranne la funzione measure_all, che misura tutti i qubit e inserisce i risultati in un unico registro classico (e quindi avendo due bit in questo caso).
L'esecuzione del simulatore Aer produce l'output atteso.
result = AerSimulator().run(protocol).result()
statistics = result.get_counts()
for outcome, frequency in statistics.items():
print(f"Measured {outcome} with frequency {frequency}")
display(plot_histogram(statistics))
Measured 10 with frequency 1024
Ora usiamo un qubit aggiuntivo come generatore di bit casuali — essenzialmente per lanciare monete equilibrate. Lo useremo per scegliere casualmente e e poi eseguire il protocollo di superdense coding.
rbg = QuantumRegister(1, "coin")
ebit0 = QuantumRegister(1, "A")
ebit1 = QuantumRegister(1, "B")
Alice_c = ClassicalRegister(1, "Alice c")
Alice_d = ClassicalRegister(1, "Alice d")
test = QuantumCircuit(rbg, ebit0, ebit1, Alice_d, Alice_c)
# Initialize the ebit
test.h(ebit0)
test.cx(ebit0, ebit1)
test.barrier()
# Use the 'coin' qubit twice to generate Alice's bits c and d.
test.h(rbg)
test.measure(rbg, Alice_c)
test.h(rbg)
test.measure(rbg, Alice_d)
test.barrier()
# Now the protocol runs, starting with Alice's actions, which depend
# on her bits.
with test.if_test((Alice_d, 1), label="Z"):
test.z(ebit0)
with test.if_test((Alice_c, 1), label="X"):
test.x(ebit0)
test.barrier()
# Bob's actions
test.cx(ebit0, ebit1)
test.h(ebit0)
test.barrier()
Bob_c = ClassicalRegister(1, "Bob c")
Bob_d = ClassicalRegister(1, "Bob d")
test.add_register(Bob_d)
test.add_register(Bob_c)
test.measure(ebit0, Bob_d)
test.measure(ebit1, Bob_c)
display(test.draw(output="mpl"))

L'esecuzione del simulatore Aer mostra i risultati: i bit classici di Alice e Bob concordano sempre.
result = AerSimulator().run(test).result()
statistics = result.get_counts()
display(plot_histogram(statistics))

Il gioco CHSH
L'ultimo esempio che verrà discusso in questa lezione non è un protocollo, ma un gioco noto come il gioco CHSH.
Quando parliamo di un gioco in questo contesto, non ci riferiamo a qualcosa pensato per essere giocato per divertimento o sport, ma piuttosto a un'astrazione matematica nel senso della teoria dei giochi. Le astrazioni matematiche dei giochi vengono studiate in economia e informatica, ad esempio, e sono sia affascinanti che utili.
Le lettere CHSH si riferiscono agli autori — John Clauser, Michael Horne, Abner Shimony e Richard Holt — di un articolo del 1969 in cui l'esempio fu descritto per la prima volta. Essi non descrissero l'esempio come un gioco, ma piuttosto come un esperimento. La sua descrizione come gioco, tuttavia, è sia naturale che intuitiva.
Il gioco CHSH rientra in una classe di giochi noti come giochi non locali. I giochi non locali sono incredibilmente interessanti e hanno profondi legami con la fisica, l'informatica e la matematica — e custodiscono misteri che rimangono ancora irrisolti. Inizieremo la sezione spiegando cosa sono i giochi non locali, per poi concentrarci sul gioco CHSH e su ciò che lo rende interessante.
Giochi non locali
Un gioco non locale è un gioco cooperativo in cui due giocatori, Alice e Bob, lavorano insieme per ottenere un determinato risultato. Il gioco è gestito da un arbitro, che si comporta secondo linee guida rigide note ad Alice e Bob.
Alice e Bob possono prepararsi al gioco come preferiscono, ma una volta che il gioco inizia è loro vietato comunicare. Potremmo immaginare che il gioco si svolga in una struttura sicura di qualche tipo — come se l'arbitro facesse la parte di un detective e Alice e Bob fossero sospettati interrogati in stanze separate. Ma un altro modo di pensare all'impostazione è che Alice e Bob siano separati da una grande distanza, e la comunicazione sia proibita perché la velocità della luce non la consente entro il tempo di esecuzione del gioco. Vale a dire, se Alice cerca di inviare un messaggio a Bob, il gioco sarà finito quando lui lo riceverà, e viceversa.
Il funzionamento di un gioco non locale prevede che l'arbitro ponga prima una domanda ciascuno ad Alice e Bob. Useremo la lettera per riferirci alla domanda di Alice e per riferirci a quella di Bob. Qui pensiamo a e come stati classici, e nel gioco CHSH e sono bit.
L'arbitro usa la casualità per selezionare queste domande. Per essere precisi, esiste una certa probabilità associata a ogni possibile coppia di domande, e l'arbitro si è impegnato a scegliere le domande in modo casuale, al momento del gioco, in questo modo. Tutti, inclusi Alice e Bob, conoscono queste probabilità — ma nessuno sa specificamente quale coppia sarà scelta fino all'inizio del gioco.
Dopo che Alice e Bob hanno ricevuto le loro domande, devono fornire le risposte: la risposta di Alice è e quella di Bob è Anche queste sono stati classici in generale, e bit nel gioco CHSH.
A questo punto l'arbitro prende una decisione: Alice e Bob vincono o perdono a seconda che la coppia di risposte sia considerata corretta per la coppia di domande secondo un insieme fisso di regole. Regole diverse danno luogo a giochi diversi, e le regole del gioco CHSH nello specifico sono descritte nella sezione che segue. Come già accennato, le regole sono note a tutti.
Il seguente diagramma fornisce una rappresentazione grafica delle interazioni.

È l'incertezza su quali domande verranno poste, e in particolare il fatto che ogni giocatore non conosce la domanda dell'altro giocatore, a rendere i giochi non locali difficili per Alice e Bob — proprio come sospettati in collusione in stanze diverse che cercano di mantenere coerente la loro versione dei fatti.
Una descrizione precisa dell'arbitro definisce un'istanza di un gioco non locale. Questo include una specifica delle probabilità per ogni coppia di domande, insieme alle regole che determinano se ogni coppia di risposte vince o perde per ogni possibile coppia di domande
Daremo un'occhiata al gioco CHSH tra poco, ma prima di farlo, riconosciamo brevemente che è interessante considerare anche altri giochi non locali. In effetti, è estremamente interessante; esistono giochi non locali abbastanza semplici per i quali al momento non si sa quanto bene Alice e Bob possano giocare usando l'entanglement. L'impostazione è semplice, ma c'è una complessità in gioco — e per alcuni giochi può essere impossibilmente difficile calcolare le strategie migliori o quasi migliori per Alice e Bob. Questa è la natura sorprendentemente controintuitiva del modello dei giochi non locali.
Descrizione del gioco CHSH
Ecco la descrizione precisa del gioco CHSH, in cui (come sopra) è la domanda di Alice, è la domanda di Bob, è la risposta di Alice e è la risposta di Bob:
-
Le domande e le risposte sono tutte bit:
-
L'arbitro sceglie le domande in modo uniformemente casuale. Cioè, ognuna delle quattro possibilità, e viene selezionata con probabilità
-
Le risposte vincono per le domande se e perdono altrimenti. La seguente tabella esprime questa regola elencando le condizioni di vittoria e sconfitta sulle risposte per ogni coppia di domande
Limitazione delle strategie classiche
Consideriamo ora le strategie per Alice e Bob nel gioco CHSH, partendo dalle strategie classiche.
Strategie deterministiche
Iniziamo con le strategie deterministiche, in cui la risposta di Alice è una funzione della domanda che riceve, e analogamente la risposta di Bob è una funzione della domanda che riceve. Così, per esempio, possiamo scrivere per rappresentare la risposta di Alice quando la sua domanda è e per rappresentare la risposta di Alice quando la sua domanda è
Nessuna strategia deterministica può vincere il gioco CHSH ogni volta. Un modo per capirlo è semplicemente passare in rassegna una per una tutte le possibili strategie deterministiche e verificare che ognuna di esse perda per almeno una delle quattro possibili coppie di domande. Alice e Bob possono scegliere ciascuno tra quattro possibili funzioni da un bit a un bit — che abbiamo incontrato nella lezione sui Sistemi singoli — quindi ci sono in totale diverse strategie deterministiche da controllare.
Possiamo anche ragionare analiticamente su questo. Se la strategia di Alice e Bob vince quando allora deve essere che se la loro strategia vince quando allora e analogamente, se la strategia vince per allora Quindi, se la loro strategia vince per tutte e tre le possibilità, allora
Ciò implica che la strategia perde nell'ultimo caso dove per vincere è richiesto che Dunque, non può esistere una strategia deterministica che vinca sempre.
D'altra parte, è facile trovare strategie deterministiche che vincano in tre dei quattro casi, come Da ciò concludiamo che la probabilità massima di vittoria per Alice e Bob utilizzando una strategia deterministica è
Strategie probabilistiche
Come abbiamo appena concluso, Alice e Bob non riescono a fare meglio di vincere il gioco CHSH il 75% delle volte usando una strategia deterministica. Ma che dire di una strategia probabilistica? Potrebbe aiutare Alice e Bob usare la casualità — inclusa la possibilità di casualità condivisa, in cui le loro scelte casuali sono correlate?
Si scopre che le strategie probabilistiche non aiutano affatto ad aumentare la probabilità di vittoria di Alice e Bob. Questo perché ogni strategia probabilistica può essere vista alternativamente come una selezione casuale di una strategia deterministica, proprio come (come menzionato nella lezione sui Sistemi singoli) le operazioni probabilistiche possono essere viste come selezioni casuali di operazioni deterministiche. La media non è mai maggiore del massimo, e quindi ne consegue che le strategie probabilistiche non offrono alcun vantaggio in termini di probabilità di vittoria complessiva.
Quindi, vincere con probabilità è il massimo che Alice e Bob possono ottenere usando qualsiasi strategia classica, deterministica o probabilistica.
Strategia per il gioco CHSH
Una domanda naturale da porsi a questo punto è se Alice e Bob possano fare di meglio usando una strategia quantistica. In particolare, se condividono uno stato quantistico entangled come suggerisce la seguente figura, che avrebbero potuto preparare prima di giocare, possono aumentare la loro probabilità di vittoria?

La risposta è sì, e questo è il punto principale dell'esempio e il motivo per cui è così interessante. Vediamo quindi esattamente come Alice e Bob possono fare meglio in questo gioco usando l'entanglement.
Vettori e matrici necessari
La prima cosa che dobbiamo fare è definire un vettore di stato qubit per ogni numero reale (che penseremo come un angolo misurato in radianti) come segue.
Ecco alcuni esempi semplici:
Abbiamo anche i seguenti esempi, che compaiono nell'analisi sottostante:
Guardando la forma generale, vediamo che il prodotto interno tra due qualsiasi di questi vettori ha questa formula:
In dettaglio, questi vettori contengono solo numeri reali, quindi non ci sono coniugati complessi di cui preoccuparsi: il prodotto interno è il prodotto dei coseni più il prodotto dei seni. L'uso di una delle formule di addizione degli angoli della trigonometria porta alla semplificazione di cui sopra. Questa formula rivela l'interpretazione geometrica del prodotto interno tra vettori unitari reali come il coseno dell'angolo tra essi.
Se calcoliamo il prodotto interno del prodotto tensoriale di due qualsiasi di questi vettori con lo stato , otteniamo un'espressione simile, ma con un al denominatore:
Il nostro interesse per questo particolare prodotto interno diventerà chiaro a breve, ma per ora ci limitiamo a osservarlo come formula.
Definiamo poi una matrice unitaria per ogni angolo come segue.
In termini intuitivi, questa matrice trasforma in e in Per verificare che si tratti di una matrice unitaria, un'osservazione chiave è che i vettori e sono ortogonali per ogni angolo :
Quindi, troviamo che
Possiamo in alternativa scrivere questa matrice esplicitamente come
Questo è un esempio di matrice di rotazione, e in particolare ruota vettori bidimensionali con elementi numerici reali di un angolo di attorno all'origine. Se seguiamo una convenzione standard per il nome e la parametrizzazione delle rotazioni di varie forme, abbiamo dove
Descrizione della strategia
Possiamo ora descrivere la strategia quantistica.
-
Configurazione: Alice e Bob iniziano il gioco condividendo un e-bit: Alice tiene un qubit Bob tiene un qubit e insieme i due qubit si trovano nello stato .
-
Azioni di Alice:
- Se Alice riceve la domanda applica al suo qubit
- Se Alice riceve la domanda applica al suo qubit
L'operazione che Alice esegue su può essere descritta alternativamente così:
Dopo che Alice ha applicato questa operazione, misura con una misura nella base standard e imposta la sua risposta come risultato della misura.
-
Azioni di Bob:
- Se Bob riceve la domanda applica al suo qubit
- Se Bob riceve la domanda applica al suo qubit
Come abbiamo fatto per Alice, possiamo esprimere l'operazione di Bob su così:
Dopo che Bob ha applicato questa operazione, misura con una misura nella base standard e imposta la sua risposta come risultato della misura.
Ecco un diagramma di circuito quantistico che descrive questa strategia:

In questo diagramma vediamo due gate controllati ordinari, uno per in alto e uno per in basso. Abbiamo anche due gate che sembrano gate controllati, uno per in alto e uno per in basso, ma il cerchio che rappresenta il controllo non è riempito. Questo indica un tipo diverso di gate controllato in cui il gate viene eseguito se il controllo è impostato su (anziché su come in un normale gate controllato). Quindi, in pratica, Bob esegue sul suo qubit se e se e Alice esegue sul suo qubit se e se il che è coerente con la descrizione del protocollo a parole sopra.
Resta da capire quanto bene funziona questa strategia per Alice e Bob. Lo faremo esaminando uno per uno i quattro possibili coppie di domande.
Analisi caso per caso
-
Caso 1:
In questo caso Alice esegue sul suo qubit e Bob esegue sul suo, quindi lo stato dei due qubit dopo che hanno eseguito le loro operazioni è
Le probabilità per le quattro possibili coppie di risposta sono quindi le seguenti.
Possiamo quindi ottenere le probabilità che e sommando.
Per la coppia di domande Alice e Bob vincono se e quindi vincono in questo caso con probabilità
-
Caso 2:
In questo caso Alice esegue sul suo qubit e Bob esegue sul suo, quindi lo stato dei due qubit dopo che hanno eseguito le loro operazioni è
Le probabilità per le quattro possibili coppie di risposta sono quindi le seguenti.
Anche in questo caso, possiamo ottenere le probabilità che e sommando.
Per la coppia di domande Alice e Bob vincono se e quindi vincono in questo caso con probabilità
-
Caso 3:
In questo caso Alice esegue sul suo qubit e Bob esegue sul suo, quindi lo stato dei due qubit dopo che hanno eseguito le loro operazioni è
Le probabilità per le quattro possibili coppie di risposta sono quindi le seguenti.
Troviamo, ancora una volta, che le probabilità che e sono le seguenti.
Per la coppia di domande Alice e Bob vincono se quindi vincono in questo caso con probabilità
-
Caso 4:
L'ultimo caso è un po' diverso, come ci aspetteremmo perché la condizione di vittoria è diversa in questo caso. Quando e sono entrambi Alice e Bob vincono quando e sono diversi. In questo caso Alice esegue sul suo qubit e Bob esegue sul suo, quindi lo stato dei due qubit dopo che hanno eseguito le loro operazioni è
Le probabilità per le quattro possibili coppie di risposta sono quindi le seguenti.
Le probabilità hanno effettivamente scambiato le posizioni rispetto agli altri tre casi. Otteniamo le probabilità che e sommando.
Per la coppia di domande Alice e Bob vincono se e quindi vincono in questo caso con probabilità
Vincono in ogni caso con la stessa probabilità:
Questa è quindi la probabilità complessiva di vittoria. È significativamente meglio di quanto possa fare qualsiasi strategia classica per questo gioco; le strategie classiche hanno una probabilità di vittoria limitata a E questo rende il gioco CHSH un esempio molto interessante.
Questa è la probabilità di vittoria ottimale per le strategie quantistiche; non possiamo fare di meglio, indipendentemente dallo stato entangled o dalle misure che scegliamo. Questo fatto è noto come disuguaglianza di Tsirelson, dal nome di Boris Tsirelson che la dimostrò per primo — e che descrisse per primo l'esperimento CHSH come un gioco.
Interpretazione geometrica
È possibile pensare alla strategia descritta sopra in modo geometrico, il che può essere utile per comprendere le relazioni tra i vari angoli scelti per le operazioni di Alice e Bob.
Ciò che Alice fa in sostanza è scegliere un angolo in base alla sua domanda e poi applicare al suo qubit e misurare. Analogamente, Bob sceglie un angolo in base a e poi applica al suo qubit e misura. Abbiamo scelto e come segue.
Per il momento, però, prendiamo e come arbitrari. Scegliendo Alice definisce di fatto una base ortonormale di vettori che ha questo aspetto:

Bob fa lo stesso, ma con il suo angolo :

I colori dei vettori corrispondono alle risposte di Alice e Bob: blu per e rosso per
Ora, se combiniamo insieme () e () otteniamo la formula
questo vale per tutti i numeri reali e
Seguendo lo stesso tipo di analisi che abbiamo svolto sopra, ma con e come variabili, troviamo questo:
Concludiamo queste due formule:
Queste equazioni possono essere collegate alle figure precedenti immaginando di sovrapporre le basi scelte da Alice e Bob.
Esplora la strategia
Quando Alice e Bob scelgono e e sovrapponendo le loro basi otteniamo questa figura:

L'angolo tra i vettori rossi è lo stesso dell'angolo tra i due vettori blu. La probabilità che i risultati di Alice e Bob coincidano è il coseno al quadrato di questo angolo,
mentre la probabilità che differiscano è il seno al quadrato di questo angolo,
Quando Alice e Bob scelgono e e sovrapponendo le loro basi otteniamo questa figura:

L'angolo tra i vettori rossi è di nuovo così come l'angolo tra i vettori blu. La probabilità che i risultati di Alice e Bob coincidano è ancora il coseno al quadrato di questo angolo,
mentre la probabilità che differiscano è il seno al quadrato di questo angolo,
Quando Alice e Bob scelgono e e sovrapponendo le loro basi otteniamo questa figura:

Le basi sono cambiate ma gli angoli no — ancora una volta l'angolo tra vettori dello stesso colore è La probabilità che i risultati di Alice e Bob coincidano è
e la probabilità che differiscano è
Quando Alice e Bob scelgono e Sovrapponendo le loro basi, vediamo che è successo qualcosa di diverso:

Per come sono stati scelti gli angoli, questa volta l'angolo tra vettori dello stesso colore è invece di La probabilità che i risultati di Alice e Bob coincidano è ancora il coseno al quadrato di questo angolo, ma questa volta il valore è
La probabilità che i risultati differiscano è il seno al quadrato di questo angolo, che in questo caso è:
Osservazioni
L'idea di base di un esperimento come il gioco CHSH, in cui l'entanglement porta a risultati statistici incompatibili con il ragionamento puramente classico, è dovuta a John Bell, il personaggio che dà il nome agli stati di Bell. Per questo motivo, le persone si riferiscono spesso a esperimenti di questo tipo come test di Bell. A volte si fa anche riferimento al teorema di Bell, che può essere formulato in modi diversi — ma la sua essenza è che la meccanica quantistica non è compatibile con le cosiddette teorie a variabili nascoste locali. Il gioco CHSH è un esempio particolarmente chiaro e semplice di un test di Bell, e può essere visto come una dimostrazione del teorema di Bell.
Il gioco CHSH offre un modo per testare sperimentalmente la teoria dell'informazione quantistica. Possiamo condurre esperimenti che implementano il gioco CHSH e testare i tipi di strategie basate sull'entanglement descritte sopra. Questo ci fornisce un alto grado di fiducia nel fatto che l'entanglement sia reale — e a differenza dei modi a volte vaghi o poetici con cui cerchiamo di spiegare l'entanglement, il gioco CHSH ci dà un modo concreto e verificabile per osservare l'entanglement. Il Premio Nobel per la Fisica 2022 riconosce l'importanza di questa linea di ricerca: il premio è stato assegnato ad Alain Aspect, John Clauser (la C di CHSH) e Anton Zeilinger, per l'osservazione dell'entanglement attraverso test di Bell su fotoni entangled.
Implementazione con Qiskit
Possiamo implementare il gioco CHSH, insieme alla strategia quantistica definita sopra, in Qiskit come segue.
Per prima cosa, ecco la definizione del gioco stesso, che consente di inserire una strategia arbitraria come argomento.
def chsh_game(strategy):
# This function runs the CHSH game, using the strategy (a function
# from two bits to two bits), returning 1 for a win and 0 for a loss.
# Choose x and y randomly
x, y = random.randint(0, 1), random.randint(0, 1)
# Use the strategy to determine a and b
a, b = strategy(x, y)
# Decide if the strategy wins or loses
if (a != b) == (x & y):
return 1 # Win
return 0 # Lose
Ora creeremo una funzione che produce un circuito in base alle domande per Alice e Bob. Per semplicità lasceremo ai qubit i loro nomi predefiniti, e utilizzeremo il gate integrato per le azioni di Alice e Bob.
def chsh_circuit(x, y):
# This function creates a `QuantumCircuit` implementing the quantum
# strategy described above (including the e-bit preparation).
qc = QuantumCircuit(2, 2)
# Prepare an e-bit
qc.h(0)
qc.cx(0, 1)
qc.barrier()
# Alice's actions
if x == 0:
qc.ry(0, 0)
else:
qc.ry(-pi / 2, 0)
qc.measure(0, 0)
# Bob's actions
if y == 0:
qc.ry(-pi / 4, 1)
else:
qc.ry(pi / 4, 1)
qc.measure(1, 1)
return qc
Ecco i quattro possibili circuiti, a seconda delle domande poste.
# Draw the four possible circuits
print("(x,y) = (0,0)")
display(chsh_circuit(0, 0).draw(output="mpl"))
print("(x,y) = (0,1)")
display(chsh_circuit(0, 1).draw(output="mpl"))
print("(x,y) = (1,0)")
display(chsh_circuit(1, 0).draw(output="mpl"))
print("(x,y) = (1,1)")
display(chsh_circuit(1, 1).draw(output="mpl"))
(x,y) = (0,0)

(x,y) = (0,1)

(x,y) = (1,0)

(x,y) = (1,1)

Ora creeremo un job usando il simulatore Aer che esegue il circuito una sola volta per una data coppia di input
def quantum_strategy(x, y):
# This function runs the appropriate quantum circuit defined above
# one time and returns the measurement results
# Setting `shots=1` to run the circuit once
result = AerSimulator().run(chsh_circuit(x, y), shots=1).result()
statistics = result.get_counts()
# Determine the output bits and return them
bits = list(statistics.keys())[0]
a, b = bits[0], bits[1]
return a, b
Infine, giocheremo al gioco 1000 volte e calcoleremo la frazione di partite vinte dalla strategia.
NUM_GAMES = 1000
TOTAL_SCORE = 0
for _ in range(NUM_GAMES):
TOTAL_SCORE += chsh_game(quantum_strategy)
print("Fraction of games won:", TOTAL_SCORE / NUM_GAMES)
Fraction of games won: 0.867
Possiamo anche definire una strategia classica e vedere quanto bene funziona. Questa è solo una strategia — altre possono essere testate modificando il codice — ma è tra le strategie classiche ottimali.
def classical_strategy(x, y):
# This function implements just one example of an optimal classical
# strategy for the CHSH game. Other classical strategies can be
# implemented by changing the bit values assigned to a and b.
# Alice's answer
if x == 0:
a = 0
elif x == 1:
a = 1
# Bob's answer
if y == 0:
b = 1
elif y == 1:
b = 0
return a, b
Giochiamo di nuovo al gioco 1000 volte per vedere quanto bene funziona.
NUM_GAMES = 1000
TOTAL_SCORE = 0
for _ in range(NUM_GAMES):
TOTAL_SCORE += chsh_game(classical_strategy)
print("Fraction of games won:", TOTAL_SCORE / NUM_GAMES)
Fraction of games won: 0.747
Sebbene ci sia della casualità in gioco, le statistiche difficilmente si discostano molto dopo 1000 esecuzioni. La strategia quantistica vince circa l'85% delle volte, mentre una strategia classica non può vincere più di circa il 75% delle volte.