Implementace v Qiskitu
V této lekci implementujeme některé myšlenky z lekce o provázanosti v akci pomocí Qiskitu.
# 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
Tady je implementace teleportačního protokolu jako kvantový Circuit.
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"))

Circuit využívá několik funkcí Qiskitu, které jsme v předchozích lekcích ještě neviděli, včetně funkcí barrier a if_test.
Funkce barrier vytváří vizuální oddělení, díky kterému je diagram Circuit čitelnější, a zároveň brání Qiskitu provádět různá zjednodušení a optimalizace přes bariéru během kompilace, když se Circuit spouštějí na reálném hardwaru.
Funkce if_test aplikuje operaci podmíněně v závislosti na klasickém bitu nebo registru.
Circuit nejprve inicializuje do stavu (což není součástí samotného protokolu), následují Aliciny operace, pak její měření a nakonec Bobovy operace. Abychom ověřili, že protokol funguje správně, aplikujeme náhodně vygenerovanou jednoqubitovou Gate na inicializovaný stav Qubit a získáme náhodný kvantový stavový vektor k teleportaci. Aplikací inverze (tedy komplexně sdruženého transpozice) této Gate na po proběhnutí protokolu můžeme ověřit, že stav byl teleportován, tím, že měřením uvidíme, že se vrátil do stavu .
Nejprve náhodně zvolíme unitární qubitovou Gate.
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()))
Teď vytvoříme nový testovací Circuit, který nejprve aplikuje naši náhodnou Gate na pak spustí teleportační Circuit a nakonec aplikuje inverzi naší náhodné Gate na Qubit a provede měření. Výsledek by měl být s jistotou.
# 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"))

Nakonec spustíme Aer simulátor na tomto Circuit a vykreslíme histogram výstupů. Uvidíme statistiky pro všechny tři klasické bity: spodní/nejlevější bit by měl být vždy což indikuje, že Qubit byl úspěšně teleportován do zatímco ostatní dva bity by měly být přibližně rovnoměrně rozdělené.
result = AerSimulator().run(test).result()
statistics = result.get_counts()
display(plot_histogram(statistics))
Můžeme také vyfiltrovat statistiky tak, aby se zaměřily pouze na výsledkový Qubit testu, pokud chceme, a to takto:
filtered_statistics = marginal_distribution(statistics, [2])
display(plot_histogram(filtered_statistics))
Superdense kódování
Superdense kódování je protokol, který v jistém smyslu dosahuje komplementárního cíle k teleportaci. Místo toho, aby umožňoval přenos jednoho Qubit pomocí dvou klasických bitů komunikace (za cenu jednoho e-bitu provázanosti), umožňuje přenos dvou klasických bitů pomocí jednoho Qubit kvantové komunikace (opět za cenu jednoho e-bitu provázanosti).
Podrobněji: máme odesílatele (Alice) a příjemce (Boba), kteří sdílejí jeden e-bit provázanosti. Podle konvencí zavedených v lekci to znamená, že Alice drží Qubit Bob drží Qubit a společně je pár ve stavu Alice chce Bobovi přenést dva klasické bity, které budeme značit a a dosáhne toho odesláním jednoho Qubit.
Je rozumné považovat tento výkon za méně zajímavý než to, čeho dosahuje teleportace. Odesílání Qubit bude pravděpodobně v dohledné budoucnosti mnohem obtížnější než odesílání klasických bitů, takže výměna jednoho Qubit kvantové komunikace za dva bity klasické komunikace, navíc za cenu e-bitu, se sotva zdá stát za to. To ale neznamená, že superdense kódování není zajímavé, protože zcela jistě je.
V souladu s tématem lekce je jedním z důvodů, proč je superdense kódování zajímavé, to, že demonstruje konkrétní a (v kontextu teorie informace) poměrně pozoruhodné využití provázanosti. Slavná věta v kvantové teorii informace, známá jako Holevova věta, říká, že bez použití sdíleného provázaného stavu je nemožné komunikovat více než jeden bit klasické informace odesláním jednoho Qubit. (Holevova věta je obecnější. Její přesné znění je technické a vyžaduje vysvětlení, ale toto je jeden z jejích důsledků.) Prostřednictvím superdense kódování tedy sdílená provázanost efektivně umožňuje zdvojení kapacity klasického přenosu informace při odesílání Qubit.
Protokol
Následující diagram kvantového Circuit popisuje protokol superdense kódování:

Slovy, tady je co Alice dělá:
-
Pokud Alice provede Gate na svém Qubit (a pokud neprovede nic).
-
Pokud Alice provede Gate na svém Qubit (a pokud neprovede nic).
Alice pak pošle svůj Qubit Bobovi.
Když Bob přijme Qubit nejprve provede Gate CNOT, kde je řídicí a je cílový, a pak aplikuje Hadamardovu Gate na Poté změří a získá a a získá v obou případech měřením ve standardní bázi.
Analýza
Myšlenka za tímto protokolem je jednoduchá: Alice si vlastně vybere, který Bellův stav chce sdílet s Bobem, pošle Bobovi svůj qubit a Bob měřením zjistí, který Bellův stav Alice zvolila.
To znamená, že na začátku sdílejí a v závislosti na bitech a Alice buď tento stav ponechá beze změny, nebo ho posune do jednoho z ostatních Bellových stavů aplikací nebo na svůj qubit
Bobovy akce mají na čtyři Bellovy stavy následující efekty:
To si můžeš ověřit přímo tak, že spočítáš výsledky Bobových operací na těchto stavech jeden po druhém.
Takže když Bob provede svá měření, dokáže určit, který Bellův stav Alice zvolila. Ověření, že protokol funguje správně, je otázkou kontroly každého případu:
-
Pokud pak stav v okamžiku, kdy Bob obdrží je Tento stav transformuje na a získá
-
Pokud pak stav v okamžiku, kdy Bob obdrží je Tento stav transformuje na a získá
-
Pokud pak stav v okamžiku, kdy Bob obdrží je Tento stav transformuje na a získá
-
Pokud pak stav v okamžiku, kdy Bob obdrží je Tento stav transformuje na a získá (Záporný fázový faktor zde nemá žádný vliv.)
Implementace superdense coding
Tady je jednoduchá implementace superdense coding, kde specifikujeme Circuit sám v závislosti na bitech, které se mají přenést. Nejdřív zvolíme dva bity k přenosu. (Později je budeme volit náhodně, ale prozatím jednoduše provedeme libovolnou volbu.)
c = "1"
d = "0"
Teď sestavíme Circuit podle toho. Zde necháme Qiskit použít výchozí názvy pro qubity: pro horní qubit a pro spodní.
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"))

Nic moc nového tu není, až na funkci measure_all, která změří všechny qubity a uloží výsledky do jednoho klasického registru (v tomto případě tedy se dvěma bity).
Spuštění simulátoru Aer produkuje očekávaný výstup.
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
Teď použijeme další qubit jako generátor náhodných bitů -- v podstatě k hodu spravedlivou mincí. Použijeme ho k náhodnému výběru a a pak spustíme protokol 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"))

Spuštění simulátoru Aer ukazuje výsledky: klasické bity Alice a Boba se vždy shodují.
result = AerSimulator().run(test).result()
statistics = result.get_counts()
display(plot_histogram(statistics))

Hra CHSH
Posledním příkladem, o kterém se v této lekci budeme bavit, není protokol, ale hra známá jako hra CHSH.
Když v tomto kontextu mluvíme o hře, nemáme na mysli něco, co je určeno k zábavě nebo sportu, ale spíše matematickou abstrakci ve smyslu teorie her. Matematické abstrakce her se studují například v ekonomii a informatice a jsou fascinující i užitečné.
Písmena CHSH odkazují na autory -- Johna Clausera, Michaela Hornea, Abnera Shimonyho a Richarda Holta -- článku z roku 1969, kde byl tento příklad poprvé popsán. Nepopsali tento příklad jako hru, ale jako experiment. Jeho popis jako hry je ale přirozený a intuitivní.
Hra CHSH spadá do třídy her známých jako nelokální hry. Nelokální hry jsou neuvěřitelně zajímavé a mají hluboké souvislosti s fyzikou, informatikou a matematikou -- skrývají záhady, které zůstávají dosud nevyřešené. Tuto sekci začneme vysvětlením toho, co jsou nelokální hry, a pak se zaměříme na hru CHSH a na to, co ji dělá zajímavou.
Nelokální hry
Nelokální hra je kooperativní hra, ve které dva hráči, Alice a Bob, spolupracují na dosažení konkrétního výsledku. Hru řídí rozhodčí, který se chová podle přísných pravidel, jež jsou Alice a Bobovi známa.
Alice a Bob se na hru mohou připravit jakkoli chtějí, ale jakmile hra začne, mají zakázáno komunikovat. Můžeme si představit, že se hra odehrává v nějakém zabezpečeném zařízení -- jako by rozhodčí hrál roli detektiva a Alice s Bobem byli podezřelí vyslýchaní v oddělených místnostech. Ale jiný způsob, jak si to představit, je, že Alice a Bob jsou odděleni obrovskou vzdáleností a komunikace je zakázána, protože rychlost světla ji v době trvání hry neumožňuje. Jinými slovy, pokud se Alice pokusí poslat Bobovi zprávu, hra skončí dříve, než ji obdrží, a naopak.
Nelokální hra funguje tak, že rozhodčí nejprve položí Alice a Bobovi každému jednu otázku. Budeme používat písmeno pro otázku Alice a pro otázku Boba. Zde si a představujeme jako klasické stavy a v hře CHSH jsou a bity.
Rozhodčí používá k výběru těchto otázek náhodnost. Přesněji řečeno, ke každému možnému páru otázek je přiřazena nějaká pravděpodobnost a rozhodčí se zavázal vybírat otázky v okamžiku hry náhodně tímto způsobem. Všichni, včetně Alice a Boba, tyto pravděpodobnosti znají -- ale nikdo neví, jaký konkrétní pár bude zvolen, dokud hra nezačne.
Poté, co Alice a Bob obdrží své otázky, musí poskytnout odpovědi: odpověď Alice je a odpověď Boba je Obecně jsou to klasické stavy a v hře CHSH jsou to bity.
V tuto chvíli rozhodčí rozhodne: Alice a Bob buď vyhrají, nebo prohrají v závislosti na tom, zda je pár odpovědí považován za správný pro pár otázek podle nějaké pevné sady pravidel. Různá pravidla znamenají různé hry a pravidla pro konkrétně hru CHSH jsou popsána v následující sekci. Jak už bylo naznačeno, pravidla jsou všem známa.
Následující diagram poskytuje grafické znázornění interakcí.

Práv ě nejistota ohledně toho, jaké otázky budou položeny, a konkrétně fakt, že žádný z hráčů nezná otázku toho druhého, dělá nelokální hry pro Alici a Boba náročné -- stejně jako když se spolčení podezřelí v oddělených místnostech snaží udržet svou verzi příběhu konzistentní.
Přesný popis rozhodčího definuje instanci nelokální hry. To zahrnuje specifikaci pravděpodobností pro každý pár otázek spolu s pravidly, která určují, zda každý pár odpovědí vyhrává nebo prohrává pro každý možný pár otázek
Podíváme se na hru CHSH za okamžik, ale předtím si krátce přiznejme, že je také zajímavé uvažovat o dalších nelokálních hrách. Ve skutečnosti je to nesmírně zajímavé; existují poměrně jednoduché nelokální hry, pro které v současnosti není známo, jak dobře mohou Alice a Bob hrát s využitím provázanosti. Nastavení je jednoduché, ale je v tom skrytá složitost -- a pro některé hry může být nemožně obtížné vypočítat nejlepší nebo téměř nejlepší strategie pro Alici a Boba. To je překvapivě neintuitivní povaha modelu nelokálních her.
Popis hry CHSH
Zde je přesný popis hry CHSH, kde (jak je uvedeno výše) je otázka pro Alici, je otázka pro Boba, je odpověď Alice a je odpověď Boba:
-
Otázky a odpovědi jsou všechny bity:
-
Rozhodčí vybírá otázky rovnoměrně náhodně. To znamená, že každá ze čtyř možností, a je vybrána s pravděpodobností
-
Odpovědi vyhrávají pro otázky pokud a prohrávají v opačném případě. Následující tabulka vyjadřuje toto pravidlo tím, že uvádí výherní a proherní podmínky pro odpovědi pro každý pár otázek
Omezení klasických strategií
Nyní se podívejme na strategie pro Alici a Boba ve hře CHSH, počínaje klasickými strategiemi.
Deterministické strategie
Začneme deterministickými strategiemi, kde odpověď Alice je funkcí otázky , kterou obdrží, a stejně tak odpověď Boba je funkcí otázky , kterou obdrží. Takže například můžeme psát pro odpověď Alice, když je její otázka a pro odpověď Alice, když je její otázka
Žádná deterministická strategie nemůže vyhrát hru CHSH pokaždé. Jeden způsob, jak to pochopit, je jednoduše projít jednu po druhé všechny možné deterministické strategie a ověřit, že každá z nich prohrává alespoň pro jeden ze čtyř možných párů otázek. Alice i Bob si mohou vybrat ze čtyř možných funkcí z jednoho bitu na jeden bit -- se kterými jsme se setkali v lekci o Jednotlivých systémech -- a tedy je celkem různých deterministických strategií ke kontrole.
Můžeme to také odvodit analyticky. Pokud strategie Alice a Boba vyhrává, když pak musí platit pokud jejich strategie vyhrává, když pak a podobně, pokud strategie vyhrává pro pak Takže pokud jejich strategie vyhrává pro všechny tři možnosti, pak
To znamená, že strategie prohrává v posledním případě protože pro výhru je zde nutné, aby Tedy nemůže existovat žádná deterministická strategie, která vyhrává pokaždé.
Na druhou stranu je snadné najít deterministické strategie, které vyhrávají ve třech ze čtyř případů, například Z toho vyplývá, že maximální pravděpodobnost výhry Alice a Boba pomocí deterministické strategie je
Pravděpodobnostní strategie
Jak jsme právě odvodili, Alice a Bob nemohou dosáhnout lepšího výsledku než výhry ve hře CHSH v 75 % případů pomocí deterministické strategie. Ale co pravděpodobnostní strategie? Mohlo by Alici a Bobovi pomoci použití náhodnosti -- včetně možnosti sdílené náhodnosti, kde jsou jejich náhodné volby korelované?
Ukazuje se, že pravděpodobnostní strategie vůbec nepomáhají zvýšit pravděpodobnost výhry Alice a Boba. Je to proto, že každou pravděpodobnostní strategii lze alternativně chápat jako náhodný výběr deterministické strategie, stejně jako (jak bylo zmíněno v lekci o Jednotlivých systémech) lze pravděpodobnostní operace chápat jako náhodné výběry deterministických operací. Průměr nikdy není větší než maximum, a z toho vyplývá, že pravděpodobnostní strategie neposkytují žádnou výhodu z hlediska celkové pravděpodobnosti výhry.
Tedy výhra s pravděpodobností je to nejlepší, čeho mohou Alice a Bob dosáhnout pomocí jakékoli klasické strategie, ať už deterministické nebo pravděpodobnostní.
Strategie pro hru CHSH
Přirozenou otázkou v tuto chvíli je, zda si mohou Alice a Bob polepšit pomocí kvantové strategie. Konkrétně, pokud sdílejí provázaný kvantový stav, jak naznačuje následující obrázek, který si mohli připravit před začátkem hry, mohou zvýšit svou pravděpodobnost výhry?

Odpověď je ano, a to je hlavní pointa tohoto příkladu a důvod, proč je tak zajímavý. Pojďme se tedy přesně podívat, jak mohou Alice a Bob v této hře dosáhnout lepšího výsledku pomocí provázanosti.
Potřebné vektory a matice
První věc, kterou musíme udělat, je definovat stavový vektor Qubit pro každé reálné číslo (které si budeme představovat jako úhel měřený v radiánech) takto.
Zde je několik jednoduchých příkladů:
Máme také následující příklady, které se objeví v analýze níže:
Podíváme-li se na obecný tvar, vidíme, že skalární součin libovolných dvou z těchto vektorů má tento vzorec:
Podrobně řečeno, v těchto vektorech jsou pouze reálné hodnoty, takže se nemusíme starat o komplexní sdružení: skalární součin je součin kosinů plus součin sinů. Použití jednoho ze součtových vzorců z trigonometrie vede ke zjednodušení uvedenému výše. Tento vzorec odhaluje geometrickou interpretaci skalárního součinu mezi reálnými jednotkovými vektory jako kosinus úhlu mezi nimi.
Pokud vypočítáme skalární součin tenzorového součinu libovolných dvou z těchto vektorů se stavem , získáme podobný výraz, až na to, že má ve jmenovateli:
Náš zájem o tento konkrétní skalární součin se objasní za chvíli, ale prozatím si jej prostě zaznamenáváme jako vzorec.
Dále definujme unitární matici pro každý úhel takto.
Intuitivně řečeno, tato matice transformuje na a na