Implementare Qiskit
În această lecție, implementăm câteva dintre ideile din lecția despre entanglement în acțiune, folosind 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
Iată o implementare prin circuit cuantic a protocolului de teleportare.
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"))

Circuitul folosește câteva funcționalități ale Qiskit pe care nu le-am mai văzut în lecțiile anterioare, inclusiv funcțiile barrier și if_test.
Funcția barrier creează o separare vizuală care face diagrama circuitului mai ușor de citit, și împiedică totodată Qiskit să efectueze diverse simplificări și optimizări de-a lungul barierei în timpul compilării, atunci când circuitele sunt rulate pe hardware real.
Funcția if_test aplică o operație condiționat, în funcție de un bit sau registru clasic.
Circuitul inițializează mai întâi în starea (ceea ce nu face parte din protocol în sine), urmată de operațiile Alicei, apoi de măsurătorile sale, și în final de operațiile lui Bob. Pentru a testa că protocolul funcționează corect, vom aplica o poartă aleatoare pe un singur qubit la starea inițializată a lui , pentru a obține un vector de stare cuantică aleatoriu care să fie teleportat. Aplicând inversa (adică transpusa conjugată) acelei porți la după rularea protocolului, putem verifica că starea a fost teleportată, măsurând pentru a constata că s-a întors la starea .
Mai întâi vom alege aleatoriu o poartă unitară pentru qubit.
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()))
Acum vom crea un nou circuit de testare care aplică mai întâi poarta noastră aleatoare la apoi rulează circuitul de teleportare, și în final aplică inversa porții noastre aleatoare la qubit-ul și măsoară. Rezultatul ar trebui să fie cu certitudine.
# 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"))

În final, să rulăm simulatorul Aer pe acest circuit și să afișăm o histogramă a ieșirilor. Vom vedea statisticile pentru toți cei trei biți clasici: bitul din jos/cel mai din stânga ar trebui să fie întotdeauna indicând că qubit-ul a fost teleportat cu succes în în timp ce ceilalți doi biți ar trebui să fie aproximativ uniformi.
result = AerSimulator().run(test).result()
statistics = result.get_counts()
display(plot_histogram(statistics))
Putem de asemenea filtra statisticile pentru a ne concentra exclusiv pe qubit-ul de rezultat al testului, dacă dorim, astfel:
filtered_statistics = marginal_distribution(statistics, [2])
display(plot_histogram(filtered_statistics))
Codificarea supradensă
Codificarea supradensă este un protocol care, într-un anumit sens, urmărește un scop complementar față de teleportare. În loc să permită transmiterea unui qubit folosind două biți clasici de comunicare (cu prețul unui e-bit de entanglement), acesta permite transmiterea a doi biți clasici folosind un qubit de comunicare cuantică (din nou, cu prețul unui e-bit de entanglement).
Mai în detaliu, avem un expeditor (Alice) și un destinatar (Bob) care împart un e-bit de entanglement. Conform convențiilor stabilite pentru lecție, aceasta înseamnă că Alice deține un qubit Bob deține un qubit iar perechea se află împreună în starea Alice dorește să îi transmită lui Bob doi biți clasici, pe care îi vom nota cu și și va realiza acest lucru trimițându-i un qubit.
Este rezonabil să privim această realizare ca fiind mai puțin impresionantă decât cea pe care o îndeplinește teleportarea. Trimiterea qubiților este probabil mult mai dificilă decât trimiterea biților clasici în viitorul previzibil, astfel că schimbul unui qubit de comunicare cuantică pentru doi biți de comunicare clasică, plus costul unui e-bit, abia pare să merite. Cu toate acestea, acest lucru nu înseamnă că codificarea supradensă nu este interesantă, căci cu siguranță este.
Potrivindu-se cu tema lecției, un motiv pentru care codificarea supradensă este interesantă este că demonstrează o utilizare concretă și (în contextul teoriei informației) destul de izbitoare a entanglement-ului. Un celebru teoremă din teoria informației cuantice, cunoscută sub numele de teorema lui Holevo, implică faptul că fără utilizarea unei stări entanglate comune, este imposibil să se comunice mai mult de un bit de informație clasică prin trimiterea unui singur qubit. (Teorema lui Holevo este mai generală decât atât. Enunțul ei precis este tehnic și necesită explicații, dar aceasta este una dintre consecințele ei.) Deci, prin codificarea supradensă, entanglement-ul comun permite efectiv dublarea capacității de transport a informației clasice prin trimiterea qubiților.
Protocol
Următoarea diagramă de circuit cuantic descrie protocolul de codificare supradensă:

Cu cuvinte, iată ce face Alice:
-
Dacă Alice aplică o poartă pe qubit-ul ei (iar dacă nu face nimic).
-
Dacă Alice aplică o poartă pe qubit-ul ei (iar dacă nu face nimic).
Apoi Alice îi trimite lui Bob qubit-ul ei
Ceea ce face Bob când primește qubit-ul este să aplice mai întâi o poart ă controlled-NOT, cu ca qubit de control și ca qubit țintă, după care aplică o poartă Hadamard pe Apoi măsoară pentru a obține și pentru a obține cu măsurători în baza standard în ambele cazuri.
Analiză
Ideea din spatele acestui protocol este simplă: Alice alege efectiv în ce stare Bell dorește să se afle împreună cu Bob, îi trimite lui Bob qubit-ul ei, iar Bob măsoară pentru a determina ce stare Bell a ales Alice.
Adică, inițial împart iar în funcție de biții și Alice fie lasă această stare neschimbată, fie o schimbă într-una dintre celelalte stări Bell aplicând sau pe qubit-ul ei
Acțiunile lui Bob au următoarele efecte asupra celor patru stări Bell:
Acest lucru poate fi verificat direct, calculând rezultatele operațiunilor lui Bob asupra acestor stări, una câte una.
Deci, când Bob efectuează măsurătorile, poate determina ce stare Bell a ales Alice. Verificarea corectitudinii protocolului constă în examinarea fiecărui caz:
-
Dacă atunci starea perechii când Bob primește este El transformă această stare în și obține
-
Dacă atunci starea perechii când Bob primește este El transformă această stare în și obține
-
Dacă atunci starea perechii când Bob primește este El transformă această stare în și obține
-
Dacă atunci starea perechii când Bob primește este El transformă această stare în și obține (Factorul de fază minus unu nu are niciun efect aici.)
Implementarea codificării supradense
Iată o implementare simplă a codificării supradense în care specificăm circuitul în funcție de biții de transmis. Mai întâi vom alege doi biți de transmis. (Ulterior îi vom alege aleatoriu, dar deocamdată facem o alegere arbitrară.)
c = "1"
d = "0"
Acum vom construi circuitul corespunzător. Aici vom lăsa Qiskit să folosească numele implicite pentru qubiți: pentru qubit-ul de sus și pentru cel de jos.
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"))

Nu apare nimic deosebit de nou aici, cu excepția funcției measure_all, care măsoară toți qubiții și pune rezultatele într-un singur registru clasic (deci doi biți în acest caz).
Rulând simulatorul Aer obținem rezultatul așteptat.
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
Acum să folosim un qubit suplimentar ca generator de biți aleatorii — practic pentru a arunca monede echilibrate. Îl vom folosi pentru a alege aleatoriu și și apoi vom rula protocolul de codificare supradensă.
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"))

Rulând simulatorul Aer, rezultatele arată că biții clasici ai lui Alice și Bob sunt întotdeauna identici.
result = AerSimulator().run(test).result()
statistics = result.get_counts()
display(plot_histogram(statistics))

Jocul CHSH
Ultimul exemplu care va fi discutat în această lecție nu este un protocol, ci un joc cunoscut sub numele de jocul CHSH.
Când vorbim despre un joc în acest context, nu ne referim la ceva care să fie jucat de plăcere sau ca sport, ci mai degrabă la o abstracție matematică în sensul teoriei jocurilor. Abstracțiile matematice ale jocurilor sunt studiate în economie și informatică, de exemplu, și sunt atât fascinante, cât și utile.
Literele CHSH se referă la autori — John Clauser, Michael Horne, Abner Shimony și Richard Holt — ai unui articol din 1969 în care exemplul a fost descris pentru prima dată. Ei nu au descris exemplul ca pe un joc, ci mai degrabă ca pe un experiment. Descrierea sa ca joc este însă atât naturală, cât și intuitivă.
Jocul CHSH face parte dintr-o clasă de jocuri cunoscute sub numele de jocuri nelocale. Jocurile nelocale sunt incredibil de interesante și au conexiuni profunde cu fizica, informatica și matematica — conținând mistere care rămân încă nerezolvate. Vom începe secțiunea prin a explica ce sunt jocurile nelocale, iar apoi ne vom concentra pe jocul CHSH și pe ce îl face interesant.
Jocuri nelocale
Un joc nelocal este un joc cooperativ în care doi jucători, Alice și Bob, lucrează împreună pentru a atinge un anumit rezultat. Jocul este condus de un arbitru, care se comportă conform unor reguli stricte cunoscute de Alice și Bob.
Alice și Bob se pot pregăti pentru joc oricum doresc, dar odată ce jocul începe, le este interzis să comunice. Ne putem imagina jocul desfășurându-se într-o facilitate securizată de un anumit tip — ca și cum arbitrul joacă rolul unui detectiv, iar Alice și Bob sunt suspecți interogați în camere diferite. Dar o altă modalitate de a gândi configurarea este că Alice și Bob sunt separați de o distanță vastă, iar comunicarea este interzisă deoarece viteza luminii nu o permite în timpul de desfășurare al jocului. Adică, dacă Alice încearcă să trimită un mesaj lui Bob, jocul se va fi terminat până când îl primește, și invers.
Modul în care funcționează un joc nelocal este că arbitrul le pune mai întâi câte o întrebare lui Alice și lui Bob. Vom folosi litera pentru întrebarea Alicei și pentru întrebarea lui Bob. Aici ne gândim la și ca stări clasice, iar în jocul CHSH și sunt biți.
Arbitrul folosește aleatorietatea pentru a selecta aceste întrebări. Mai precis, există o probabilitate asociată cu fiecare pereche posibilă de întrebări, iar arbitrul s-a angajat să aleagă întrebările în mod aleatoriu, la momentul jocului, în acest mod. Toată lumea, inclusiv Alice și Bob, cunoaște aceste probabilități — dar nimeni nu știe specific care pereche va fi aleasă până când jocul începe.
După ce Alice și Bob primesc întrebările lor, trebuie să ofere răspunsuri: răspunsul Alicei este și răspunsul lui Bob este Din nou, acestea sunt stări clasice în general, și biți în jocul CHSH.
În acest moment arbitrul ia o decizie: Alice și Bob fie câștigă, fie pierd în funcție de dacă perechea de răspunsuri este considerată corectă pentru perechea de întrebări conform unui set fix de reguli. Reguli diferite înseamnă jocuri diferite, iar regulile pentru jocul CHSH în mod specific sunt descrise în secțiunea care urmează acesteia. Așa cum s-a sugerat deja, regulile sunt cunoscute de toată lumea.
Diagrama următoare oferă o reprezentare grafică a interacțiunilor.

Incertitudinea cu privire la ce întrebări vor fi puse, și în special faptul că fiecare jucător nu cunoaște întrebarea celuilalt jucător, face jocurile nelocale dificile pentru Alice și Bob — la fel ca suspecții care conspiră în camere diferite și încearcă să-și mențină povestea consecventă.
O descriere precisă a arbitrului definește o instanță a unui joc nelocal. Aceasta include o specificare a probabilităților pentru fiecare pereche de întrebări, împreună cu regulile care determină dacă fiecare pereche de răspunsuri câștigă sau pierde pentru fiecare pereche posibilă de întrebări
Vom arunca o privire la jocul CHSH imediat, dar înainte de asta, să recunoaștem pe scurt că este de asemenea interesant să luăm în considerare alte jocuri nelocale. De fapt, este extrem de interesant; există câteva jocuri nelocale destul de simple pentru care nu se știe în prezent cât de bine pot juca Alice și Bob folosind entanglementul. Configurarea este simplă, dar există complexitate la lucru — și pentru unele jocuri poate fi imposibil de dificil să calculezi strategii bune sau aproape bune pentru Alice și Bob. Aceasta este natura surprinzător de neintuitivă a modelului jocurilor nelocale.
Descrierea jocului CHSH
Iată descrierea precisă a jocului CHSH, unde (ca mai sus) este întrebarea Alicei, este întrebarea lui Bob, este răspunsul Alicei și este răspunsul lui Bob:
-
Întrebările și răspunsurile sunt toți biți:
-
Arbitrul alege întrebările uniform aleatoriu. Adică, fiecare dintre cele patru posibilități, și este selectată cu probabilitatea
-
Răspunsurile câștigă pentru întrebările dacă și pierd în caz contrar. Tabelul următor exprimă această regulă listând condițiile de câștig și pierdere ale răspunsurilor pentru fiecare pereche de întrebări
Limitarea strategiilor clasice
Acum să luăm în considerare strategiile pentru Alice și Bob în jocul CHSH, începând cu strategiile clasice.
Strategii deterministe
Vom începe cu strategiile deterministe, în care răspunsul Alicei este o funcție a întrebării pe care o primește, și similar răspunsul lui Bob este o funcție a întrebării pe care o primește. Deci, de exemplu, putem scrie pentru a reprezenta răspunsul Alicei când întrebarea ei este și pentru a reprezenta răspunsul Alicei când întrebarea ei este
Nicio strategie deterministă nu poate câștiga jocul CHSH de fiecare dată. O modalitate de a înțelege acest lucru este pur și simplu să parcurgi una câte una toate strategiile deterministe posibile și să verifici că fiecare dintre ele pierde pentru cel puțin una dintre cele patru perechi posibile de întrebări. Alice și Bob pot alege fiecare dintre patru funcții posibile de la un bit la un bit — pe care le-am întâlnit în lecția despre Sisteme individuale — astfel că există strategii deterministe diferite în total de verificat.
Putem raționa și analitic. Dacă strategia lui Alice și Bob câștigă când atunci trebuie să fie că dacă strategia lor câștigă când atunci și similar, dacă strategia câștigă pentru atunci Deci, dacă strategia lor câștigă pentru toate cele trei posibilități, atunci
Aceasta implică că strategia pierde în ultimul caz iar pentru a câștiga acolo este nevoie ca Prin urmare, nu poate exista nicio strategie deterministă care să câștige de fiecare dată.
Pe de altă parte, este ușor să găsești strategii deterministe care câștigă în trei din cele patru cazuri, cum ar fi Din aceasta concluzionăm că probabilitatea maximă ca Alice și Bob să câștige folosind o strategie deterministă este
Strategii probabilistice
Așa cum am concluzionat tocmai, Alice și Bob nu pot face mai bine decât să câștige jocul CHSH 75% din timp folosind o strategie deterministă. Dar ce zici de o strategie probabilistică? Ar putea ajuta Alice și Bob să folosească aleatorietatea — inclusiv posibilitatea aleatorietății partajate, în care alegerile lor aleatorii sunt corelate?
Se dovedește că strategiile probabilistice nu ajută deloc la creșterea probabilității că Alice și Bob câștigă. Aceasta se datorează faptului că orice strategie probabilistică poate fi văzută alternativ ca o selecție aleatorie a unei strategii deterministe, la fel cum (după cum s-a menționat în lecția despre Sisteme individuale) operațiile probabilistice pot fi văzute ca selecții aleatoare ale operațiilor deterministe. Media nu este niciodată mai mare decât maximul, astfel că rezultă că strategiile probabilistice nu oferă niciun avantaj în termeni de probabilitate globală de câștig.
Prin urmare, câștigarea cu probabilitatea este cel mai bun lucru pe care Alice și Bob îl pot face folosind orice strategie clasică, fie deterministă, fie probabilistică.
Strategia pentru jocul CHSH
O întrebare naturală de pus în acest moment este dacă Alice și Bob pot face mai bine folosind o strategie cuantică. În particular, dacă partajează o stare cuantică entanglată, așa cum sugerează figura următoare, pe care ar fi putut să o prepare înainte de a juca, pot ei crește probabilitatea de câștig?

Răspunsul este da, și acesta este punctul principal al exemplului și motivul pentru care este atât de interesant. Deci să vedem exact cum pot Alice și Bob să facă mai bine în acest joc folosind entanglementul.
Vectori și matrice necesare
Primul lucru pe care trebuie să îl facem este să definim un vector de stare cubit pentru fiecare număr real (la care ne vom gândi ca la un unghi măsurat în radiani) astfel:
Iată câteva exemple simple:
Avem și următoarele exemple, care apar în analiza de mai jos:
Privind forma generală, observăm că produsul intern dintre oricare doi dintre acești vectori are această formulă:
În detaliu, există doar intrări de numere reale în acești vectori, deci nu există conjugate complexe de care să ne preocupăm: produsul intern este produsul cosinusurilor plus produsul sinusurilor. Folosind una dintre formulele de adunare a unghiurilor din trigonometrie duce la simplificarea de mai sus. Această formulă dezvăluie interpretarea geometrică a produsului intern dintre vectori unitari reali ca cosinusul unghiului dintre ei.
Dacă calculăm produsul intern al produsului tensorial al oricăror doi dintre acești vectori cu starea obținem o expresie similară, cu excepția că are un în numitor:
Interesul nostru față de acest produs intern particular va deveni clar în curând, dar deocamdată observăm pur și simplu aceasta ca o formulă.
Acum, definim o matrice unitară pentru fiecare unghi astfel:
Intuitiv vorbind, această matrice transformă în și în Pentru a verifica că aceasta este o matrice unitară, o observație cheie este că vectorii și sunt ortogonali pentru fiecare unghi :
Astfel, găsim că
Putem scrie alternativ această matrice explicit ca
Acesta este un exemplu de matrice de rotație, și în mod specific rotește vectori bidimensionali cu intrări de numere reale cu un unghi de în jurul originii. Dacă urmăm o convenție standard pentru denumirea și parametrizarea rotațiilor de diverse forme, avem unde
Descrierea strategiei
Acum putem descrie strategia cuantică.
-
Configurare: Alice și Bob încep jocul partajând un e-bit: Alice deține un cubit Bob deține un cubit iar împreună cei doi cubiți se află în starea .
-
Acțiunile Alicei:
- Dacă Alice primește întrebarea aplică cubitului său
- Dacă Alice primește întrebarea aplică cubitului său
Operația pe care Alice o efectuează pe poate fi descrisă alternativ astfel:
După ce Alice aplică această operație, măsoară cu o măsurătoare în baza standard și setează răspunsul său ca rezultatul măsurătorii.
-
Acțiunile lui Bob:
- Dacă Bob primește întrebarea aplică cubitului său
- Dacă Bob primește întrebarea aplică cubitului său
Ca și pentru Alice, putem exprima operația lui Bob pe astfel:
După ce Bob aplică această operație, măsoară cu o măsurătoare în baza standard și setează răspunsul său ca rezultatul măsurătorii.
Iată o diagramă de circuit cuantic care descrie această strategie:

În această diagramă vedem două porți controlate obișnuite, una pentru în partea de sus și una pentru în partea de jos. Avem și două porți care arată ca porți controlate, una pentru în partea de sus și una pentru în partea de jos, cu excepția că cercul care reprezintă controlul nu este umplut. Aceasta denotă un tip diferit de poartă controlată în care poarta este efectuată dacă controlul este setat la (nu la ca o poartă controlată obișnuită). Deci, efectiv, Bob efectuează pe cubitul său dacă și dacă iar Alice efectuează pe cubitul ei dacă și dacă ceea ce este consistent cu descrierea protocolului în cuvinte de mai sus.
Rămâne să aflăm cât de bine funcționează această strategie pentru Alice și Bob. Vom face acest lucru parcurgând cele patru perechi posibile de întrebări individual.
Analiză caz cu caz
-
Cazul 1:
În acest caz Alice efectuează pe cubitul ei și Bob efectuează pe al lui, deci starea celor doi cubiți după ce efectuează operațiile lor este
Probabilitățile pentru cele patru perechi posibile de răspunsuri sunt prin urmare după cum urmează.
Putem obține apoi probabilitățile că și prin însumare.
Pentru perechea de întrebări Alice și Bob câștigă dacă și prin urmare câștigă în acest caz cu probabilitatea
-
Cazul 2:
În acest caz Alice efectuează pe cubitul ei și Bob efectuează pe al lui, deci starea celor doi cubiți după ce efectuează operațiile lor este
Probabilitățile pentru cele patru perechi posibile de răspunsuri sunt prin urmare după cum urmează.
Din nou, putem obține probabilitățile că și prin însumare.
Pentru perechea de întrebări Alice și Bob câștigă dacă și prin urmare câștigă în acest caz cu probabilitatea
-
Cazul 3:
În acest caz Alice efectuează pe cubitul ei și Bob efectuează pe al lui, deci starea celor doi cubiți după ce efectuează operațiile lor este
Probabilitățile pentru cele patru perechi posibile de răspunsuri sunt prin urmare după cum urmează.
Găsim, încă o dată, că probabilitățile că și sunt după cum urmează.
Pentru perechea de întrebări Alice și Bob câștigă dacă deci câștigă în acest caz cu probabilitatea
-
Cazul 4:
Ultimul caz este puțin diferit, ceea ce ar trebui să ne așteptăm deoarece condiția de câștig este diferită în acest caz. Când și sunt amândoi Alice și Bob câștigă când și sunt diferite. În acest caz Alice efectuează pe cubitul ei și Bob efectuează pe al lui, deci starea celor doi cubiți după ce efectuează operațiile lor este
Probabilitățile pentru cele patru perechi posibile de răspunsuri sunt prin urmare după cum urmează.
Probabilitățile și-au schimbat efectiv locurile față de celelalte trei cazuri. Obținem probabilitățile că și prin însumare.
Pentru perechea de întrebări Alice și Bob câștigă dacă și prin urmare câștigă în acest caz cu probabilitatea
Câștigă în fiecare caz cu aceeași probabilitate:
Aceasta este prin urmare probabilitatea că câștigă în ansamblu. Este semnificativ mai bine decât poate face orice strategie clasică pentru acest joc; strategiile clasice au probabilitatea de câștig limitată la Și asta face din acesta un exemplu foarte interesant.
Aceasta se întâmplă să fie probabilitatea de câștig optimă pentru strategiile cuantice; nu putem face mai bine de atât, indiferent ce stare entanglată sau măsurători alegem. Acest fapt este cunoscut sub numele de inegalitatea lui Tsirelson, numită după Boris Tsirelson care a dovedit-o primul — și care a descris primul experimentul CHSH ca pe un joc.
Imagine geometrică
Este posibil să te gândești la strategia descrisă mai sus în mod geometric, ceea ce poate fi util pentru a înțelege relațiile dintre diversele unghiuri alese pentru operațiile lui Alice și Bob.
Ceea ce face Alice efectiv este să aleagă un unghi în funcție de întrebarea sa și apoi să aplice cubitului ei și să măsoare. Similar, Bob alege un unghi în funcție de și apoi aplică cubitului său și măsoară. Am ales și după cum urmează.
Deocamdată, să considerăm și ca fiind arbitrare. Alegând Alice definește efectiv o bază ortonormată de vectori care arată astfel:

Bob face la fel, cu diferența că unghiul său este :

Culorile vectorilor corespund răspunsurilor lui Alice și Bob: albastru pentru și roșu pentru
Acum, dacă combinăm () și () obținem formula
aceasta este valabilă pentru orice numere reale și
Urmând același tip de analiză ca mai sus, dar cu și ca variabile, obținem:
Deducem aceste două formule:
Aceste ecuații pot fi legate de figurile de mai sus imaginând că suprapunem bazele alese de Alice și Bob.
Explorează strategia
Când Alice și Bob aleg și iar suprapunând bazele lor obținem această figură:

Unghiul dintre vectorii roșii este același cu unghiul dintre cei doi vectori albaștri. Probabilitatea ca rezultatele lui Alice și Bob să coincidă este cosinusul pătrat al acestui unghi,
în timp ce probabilitatea ca acestea să difere este sinusul pătrat al acestui unghi,
Când Alice și Bob aleg și iar suprapunând bazele lor obținem această figură:

Unghiul dintre vectorii roșii este din nou la fel ca și unghiul dintre vectorii albaștri. Probabilitatea ca rezultatele lui Alice și Bob să coincidă este din nou cosinusul pătrat al acestui unghi,
în timp ce probabilitatea ca acestea să difere este sinusul pătrat al acestui unghi,
Când Alice și Bob aleg și iar suprapunând bazele lor obținem această figură:

Bazele s-au schimbat, dar unghiurile nu — unghiul dintre vectorii de aceeași culoare este din nou Probabilitatea ca rezultatele lui Alice și Bob să coincidă este
iar probabilitatea ca acestea să difere este
Când Alice și Bob aleg și Când suprapunem bazele lor, observăm că s-a întâmplat ceva diferit:

Datorită modului în care au fost alese unghiurile, de această dată unghiul dintre vectorii de aceeași culoare este în loc de Probabilitatea ca rezultatele lui Alice și Bob să coincidă este în continuare cosinusul pătrat al acestui unghi, dar de această dată valoarea este
Probabilitatea ca rezultatele să difere este sinusul pătrat al acestui unghi, care în acest caz este:
Observații
Ideea de bază a unui experiment precum jocul CHSH, în care entanglementul duce la rezultate statistice incompatibile cu raționamentul pur clasic, îi aparține lui John Bell, cel al cărui nume îl poartă stările Bell. Din acest motiv, oamenii se referă adesea la experimente de acest tip ca teste Bell. Uneori se vorbește și despre teorema lui Bell, care poate fi formulată în diverse moduri — dar esența sa este că mecanica cuantică nu este compatibilă cu așa-numitele teorii cu variabile ascunse locale. Jocul CHSH este un exemplu deosebit de clar și simplu de test Bell și poate fi văzut ca o dovadă, sau demonstrație, a teoremei lui Bell.
Jocul CHSH oferă o modalitate de a testa experimental teoria informației cuantice. Putem efectua experimente care implementează jocul CHSH și testa tipurile de strategii bazate pe entanglement descrise mai sus. Aceasta ne oferă un grad ridicat de încredere că entanglementul este real — și, spre deosebire de modurile uneori vagi sau poetice prin care încercăm să explicăm entanglementul, jocul CHSH ne oferă o modalitate concretă și testabilă de a observa entanglementul. Premiul Nobel pentru Fizică din 2022 recunoaște importanța acestei direcții de cercetare: premiul a fost acordat lui Alain Aspect, John Clauser (C-ul din CHSH) și Anton Zeilinger, pentru observarea entanglementului prin teste Bell pe fotoni entanglați.
Implementare în Qiskit
Putem implementa jocul CHSH, împreună cu strategia cuantică definită mai sus, în Qiskit după cum urmează.
Mai întâi, iată definiția jocului în sine, care permite introducerea unei strategii arbitrare ca argument.
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
Acum vom crea o funcție care produce un circuit în funcție de întrebările pentru Alice și Bob. Vom lăsa cubiții cu numele lor implicite pentru simplitate și vom folosi poarta încorporată pentru acțiunile lui Alice și 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
Iată cele patru circuite posibile, în funcție de întrebările puse.
# 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)

Acum vom crea un job folosind simulatorul Aer care rulează circuitul o singură dată pentru o pereche de intrare dată
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
În final, vom juca jocul de 1000 de ori și vom calcula fracțiunea în care strategia câștigă.
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
Putem defini și o strategie clasică și să vedem cât de bine funcționează. Aceasta este doar o strategie — altele pot fi testate modificând codul — dar se numără printre strategiile clasice optime.
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
Să jucăm din nou jocul de 1000 de ori pentru a vedea cât de bine funcționează.
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
Deși există aleatorism implicat, statisticile au foarte puține șanse să se abată prea mult după 1000 de rulări. Strategia cuantică câștigă aproximativ 85% din timp, în timp ce o strategie clasică nu poate câștiga mai mult de aproximativ 75% din timp.