Kvantová teleportace
Pro tento modul Qiskit in Classrooms musí mít studenti funkční prostředí Pythonu s nainstalovanými následujícími balíčky:
qiskitv2.1.0 nebo novějšíqiskit-ibm-runtimev0.40.1 nebo novějšíqiskit-aerv0.17.0 nebo novějšíqiskit.visualizationnumpypylatexenc
Informace o nastavení a instalaci výše uvedených balíčků najdeš v průvodci Instalace Qiskitu. Abys mohl/a spouštět úlohy na skutečných kvantových počítačích, budeš si muset vytvořit účet u IBM Quantum® podle kroků popsaných v průvodci Nastavení účtu IBM Cloud.
Tento modul byl otestován a spotřeboval 14 sekund QPU času. Jedná se pouze o odhad. Skutečná spotřeba se může lišit.
# 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'
Podívej se na průvodní výklad modulu od Dr. Katie McCormick níže, nebo klikni sem a sleduj jej na YouTube.
Úvod a základní pojmy
Kvantová teleportace je technika v kvantové fyzice, která umožňuje přenos kvantové informace z jednoho místa na druhé, aniž by se fyzicky pohybovaly částice. Na rozdíl od sci-fi konceptu teleportace tento proces nezahrnuje transport hmoty. Místo toho se opírá o princip kvantového provázání, při němž jsou dvě částice vzájemně propojeny bez ohledu na vzdálenost. Prostřednictvím série přesných měření a klasické komunikace lze kvantový stav jedné částice znovu vytvořit v jiné částici na vzdáleném místě, čímž se kvantová informace efektivně „teleportuje". V tomto modulu uvidíme, jak to funguje matematicky, a pak implementujeme kvantovou teleportaci na skutečném kvantovém počítači. Úvod zde bude stručný; pro více zázemí o kvantové informaci a podrobnější vysvětlení teleportace doporučujeme kurz Johna Watrouse Základy kvantové informace, a zejména část o Teleportaci.
Klasické bity mohou nabývat stavů 0 nebo 1. Kvantové bity (qubity) mohou nabývat kvantových stavů označených a a také jejich lineárních kombinací, tzv. „superpozicí", jako je , kde a Přestože stavy mohou existovat v této superpozici, měření stavu ho „zhroutí" buď do stavu , nebo . Parametry a souvisejí s pravděpodobností každého výsledku měření podle
Z toho plyne podmínka
Dalším klíčovým rysem je, že kvantové bity mohou být „provázány", což znamená, že měření jednoho qubitu může ovlivnit výsledek měření jiného, provázaného qubitu. Pochopit, čím se provázání liší od pouhých klasických korelací, je trochu složité. Nejprve si vysvětlíme notaci. Nazvěme dva qubity patřící příteli 0 (Alici) a příteli 1 (Bobovi), přičemž každý je ve stavu
nebo
zkráceně jen
Všimni si, že qubit s nejnižším číslem (nebo písmenem) je nejvíce vpravo. Jde o konvenci zvanou notace „little-endian", která se používá v celém Qiskitu. Pokud je dvouqubitový stav přátel a oni změří stav svých příslušných qubitů, každý z nich najde 0. Podobně pokud by qubity byly ve stavu , každé jejich měření by dalo výsledek 1. To se nijak neliší od klasického případu. V kvantovém počítání ale můžeme toto zkombinovat se superpozicí a získat stavy jako
Ve stavu jako je tento není ještě známo, ani přírodou určeno, zda mají Alice a Bob qubity ve stavu 0 nebo 1, přesto víme, že naměří stejný stav svého qubitu. Pokud například Bob změří svůj qubit a najde stav , jediná možnost, jak k tomu mohlo dojít, je, že měření zhroutilo dvouqubitový stav do jednoho ze dvou možných stavů, konkrétně do . Tím je qubit Alice také ve stavu .
Provázání qubitů tímto způsobem nevyžaduje, aby qubity zůstaly fyzicky blízko sebe. Jinými slovy, můžeme qubity provázat, pak je od sebe vzdálit na velkou vzdálenost a použít jejich provázání k přenosu informace. Provázaný stav jako výše popsaný je základní jednotkou provázání a někdy se označuje jako „e-bit" — jeden bit provázání. Tyto e-bity lze považovat za zdroje v kvantové komunikaci, protože každý e-bit sdílený mezi vzdálenými partnery lze použít, jak zde popisujeme, k přenosu informace z jednoho místa na druhé.
První myšlenka, která mnohým při prvním setkání s tímto tématem napadne, se týká porušení relativity: lze to použít k přenosu informace rychleji než světlo? Rozhodně se ptej a zkoumej vědecká pravidla dál, ale bohužel to nám neumožní přenášet informace rychleji než světlo, z důvodů, které v průběhu tohoto modulu budou jasné. Spoiler: úžasně to NENÍ způsobeno rychlostí šíření tohoto zhroucení, které se zdá probíhat rychleji než světlo [1]. Začínáme se dvěma spolupracovníky Alicí a Bobem, kteří jsou zpočátku na stejném místě a mohou společně pracovat se stejnými qubity. Tito spolupracovníci provážou své qubity. Pak se rozdělí na dvě různá geografická místa a vezmou s sebou příslušné qubity. Alice pak získá kvantovou informaci na novém qubitu Q. Nepředpokládáme nic o informaci na Q. Stav Q mohl být tajný, neznámý pro Alici; mohl být neznámý všem. Ale Alice dostane za úkol přenést informaci na Q k Bobovi. To provede pomocí kvantové teleportace.
K tomu budeme potřebovat znát některé kvantové operace neboli „hradla".
Kvantové operátory (hradla)
Tuto sekci klidně přeskoč, pokud již kvantová hradla znáš. Pokud chceš těmto hradlům lépe porozumět, podívej se na Základy kvantové informace, zejména na první dvě lekce, na IBM Quantum Learning.
Pro tento teleportační protokol budeme primárně používat dva typy kvantových hradel: Hadamardovo hradlo a hradlo CNOT. Menší roli sehrají ještě: hradlo , hradlo a hradlo SWAP.
Tento modul lze dokončit s velmi omezenými znalostmi lineární algebry, ale někdy může být vizualizace kvantově-mechanických hradel pomocí matic a vektorů užitečná. Proto zde uvádíme maticové/vektorové formy kvantových hradel/stavů.
Stavy, které jsme již představili, jsou zvoleny (částečně konvencí a částečně omezením) tak, aby měly vektorové formy:
Libovolný stav lze pak zapsat jako
Existuje určitá volnost v tom, jak notaci rozšířit na stavy více qubitů, ale níže uvedená volba je poměrně standardní:
S touto vektorovou notací na paměti můžeme představit potřebná kvantová hradla, jejich účinky na kvantové stavy a jejich maticové formy.
Hadamardovo hradlo H: Vytváří superpozici. Jednoqubitové hradlo.
Obvod s Hadamardovým hradlem se vytvoří takto:
from qiskit import QuantumCircuit
qc = QuantumCircuit(1)
qc.h(0)
qc.draw("mpl")
Hradlo CNOT (řízený NOT): Toto hradlo používá dva qubity: řídící a cílový. Zkontroluje stav řídícího qubitu, který se nemění. Pokud je však řídící qubit ve stavu , hradlo změní stav cílového qubitu; pokud je řídící qubit ve stavu , nedochází k žádné změně. V níže uvedené notaci předpokládáme, že qubit (nejpravější qubit) je řídící a qubit (nejlevější qubit) je cílový. Níže se používá notace
Někdy se CNOT píše bez explicitního pořadí řídícího a cílového qubitu. V kódu nebo v diagramech obvodů ale taková nejednoznačnost neexistuje.
Hradlo CNOT vypadá v obvodu trochu jinak, protože vyžaduje dva qubity. Takto se implementuje:
qc = QuantumCircuit(2)
qc.cx(0, 1)
qc.draw("mpl")
Ověř si porozumění
Přečti si otázku níže, zamysli se nad odpovědí a pak kliknutím na trojúhelník zobraz řešení.
Většina hradel má v Qiskitu stejnou maticovou formu jako kdekoliv jinde. Ale hradlo CNOT působí na dva qubity, a tak se najednou stane problémem pořadí qubitů. Texty, které řadí qubity jako , budou ukazovat jinou maticovou formu svých hradel CNOT. Ověř explicitním maticovým násobením, že výše uvedená matice CNOT má správné působení na stav
Odpověď:
Hradlo : Ekvivalent operace NOT. Jednoqubitové hradlo.
V Qiskitu vypadá vytvoření obvodu s hradlem takto:
qc = QuantumCircuit(1)
qc.x(0)
qc.draw("mpl")
Hradlo : Přidá ke stavu „fázi" (prefaktor, který v případě vlastních stavů Z, a , nabývá hodnoty 1, resp. -1). Jednoqubitové hradlo.
V Qiskitu vypadá vytvoření obvodu s hradlem takto:
qc = QuantumCircuit(1)
qc.z(0)
qc.draw("mpl")
Teorie
Pojďme si matematicky popsat protokol kvantové teleportace. V další části pak tento postup realizujeme na kvantovém počítači.
Alice a Bob prováží své qubity: Na začátku jsou qubit Alice a qubit Boba každý zvlášť ve stavu (rozumný předpoklad a zároveň správná inicializace pro kvantové počítače IBM®). Toto můžeme zapsat jako nebo jednoduše jako . Vypočítejme, co se stane, když Alice a Bob použijí Hadamardovo hradlo na qubit Alice a poté hradlo CNOT s qubitem Alice jako řídícím a qubitem Boba jako cílovým:
Všimni si, že nyní jsou qubity Alice a Boba provázány. Přestože ještě není přírodou určeno, zda jsou oba jejich qubity ve stavu nebo , víme, že jejich qubity jsou ve stejném stavu. Alice a Bob se rozloučí: Oba přátelé přesunou své qubity na nová místa, možná velmi daleko od sebe. S tím je spojeno mnoho výhrad: přesun kvantové informace bez narušení není triviální. Ale lze to provést, a skutečně to v tomto modulu provedeš. Měj ale na paměti, že při přesouvání kvantové informace lze očekávat určité chyby.
Je připraven qubit Q: Tajný stav je připraven na qubitu Q:
V tento okamžik je Q jednoduše vedle qubitu Alice (A). Nedošlo k žádnému provázání, takže kvantový stav tří qubitů dohromady lze zapsat jako:
Cílem je přesunout informaci na Q z místa Alice na místo Boba. V tuto chvíli nijak nepožadujeme ani netvrdíme nic o tajnosti nebo rychlosti přenosu informace. Jen zkoumáme, jak může informace přejít od Alice k Bobovi. Protože informace začíná na Q, budeme předpokládat, že Q je přiřazen nejnižší číslo qubitu, takže little-endian notace způsobuje, že Q je v níže uvedené matematice nejpravější qubit.
Alice prováže qubity A a Q: Alice nyní použije hradlo CNOT se svým qubitem jako řídícím a Q jako cílovým, poté aplikuje Hadamardovo hradlo na Q. Vypočítejme tříqubitový stav po této operaci:
Protože A a Q jsou na stejném místě, seskupme výše uvedené členy podle výsledků měření qubitů A a Q:
Ověř si porozumění
Přečti si otázku níže, zamysli se nad odpovědí a pak kliknutím na trojúhelník zobraz řešení.
Jaká je pravděpodobnost, že měření qubitů A a Q dá výsledek , s ohledem na výše uvedený výraz pro stavy všech tří qubitů?
Odpověď:
25 %. Abychom to viděli, připomeneme, že stav Boba musí být normovaný, tedy
Nyní Alice může změřit qubity A a Q. Nemůže ovlivnit výsledek tohoto měření, protože kvantová měření jsou pravděpodobnostní. Takže když měří, existují 4 možné výsledky, přičemž všechny 4 jsou stejně pravděpodobné: a Všimni si, že každý výsledek má jiné důsledky pro qubit Boba. Pokud například Alice zjistí, že její qubity jsou ve stavu zhroutí se celý tříqubitový kvantový stav na Ostatní výsledky měření Alice vedou k různým stavům Boba. Ty jsou shrnuty v tabulce níže.
| Výsledek Alice | Stav Boba | Instrukce pro Boba | Výsledek |
|---|---|---|---|
| Žádná | |||
| a pak | |||
| Pro všechny možné výsledky měření qubitů Alice zůstane qubit Boba ve stavu vzdáleně připomínajícím tajný stav původně na Q. V případě, kdy Alice naměří $ | 0\rangle_C | 0\rangle_A\alphaX | 0\rangle |
Nyní by mělo být jasné, proč nemůžeme toto nastavení použít k přenosu informace rychleji než světlo. Může se nám povést změřit což znamená, že Bob okamžitě má tajný stav. Ale Bob to neví, dokud mu nezavoláme a neřekneme mu: „Naměřili jsme , takže nemusíš dělat nic."
V myšlenkovém experimentu jsou qubity často fyzicky odděleny a přeneseny na nové místo. Kvantové počítače IBM® používají pevnolátkové qubity na čipu, které nelze oddělit. Takže místo přesouvání Alice a Boba na různá místa oddělíme informaci na samotném čipu pomocí tzv. „swap hradel", která přesouvají informaci z jednoho qubitu na jiný.
Experiment 1: Základní teleportace
IBM Quantum doporučuje přistupovat k problémům kvantového výpočtu pomocí rámce, který nazývají „Qiskit patterns" (vzory Qiskit). Skládá se z následujících kroků.
- Krok 1: Namapuj svůj problém na kvantový obvod
- Krok 2: Optimalizuj svůj obvod pro spuštění na skutečném kvantovém hardwaru
- Krok 3: Spusť svůj úkol na kvantových počítačích IBM pomocí Runtime Primitives
- Krok 4: Post-processing výsledků
Krok 1: Namapuj svůj problém na kvantový obvod
Všechna matematika, kterou jsme provedli výše, popisovala krok 1. Teď ji implementujeme a sestavíme kvantový obvod pomocí Qisku! Začneme vytvořením kvantového obvodu se třemi qubity a propojíme (entanglujeme) dva qubity Alice a Boba. Budeme předpokládat, že jde o qubity 1 a 2, a qubit 0 si vyhradíme pro tajný stav.
# Step 1: Map your problem to a quantum circuit
# Import some general packages
from qiskit import ClassicalRegister, QuantumCircuit, QuantumRegister
import numpy as np
# Define registers
secret = QuantumRegister(1, "Q")
Alice = QuantumRegister(1, "A")
Bob = QuantumRegister(1, "B")
cr = ClassicalRegister(3, "c")
qc = QuantumCircuit(secret, Alice, Bob, cr)
# We entangle Alice's and Bob's qubits as in our work above.
# We apply a Hadamard gate and then a CNOT gate.
# Note that the second argument in the CNOT gate is the target.
qc.h(Alice)
qc.cx(Alice, Bob)
# Inserting a barrier changes nothing about the logic. It just allows us to
# force gates to be positioned in "layers".
qc.barrier()
# Now we will use random variables to create the secret state.
# Don't worry about the "u" gate and the details.
np.random.seed(42) # fixing seed for repeatability
theta = np.random.uniform(0.0, 1.0) * np.pi # from 0 to pi
varphi = np.random.uniform(0.0, 2.0) * np.pi # from 0 to 2*pi
# Assign the secret state to the qubit on the other side of Alice's (qubit 0), labeled Q
qc.u(theta, varphi, 0.0, secret)
qc.barrier()
# Now entangle Q and Alice's qubits as in the discussion above.
qc.cx(secret, Alice)
qc.h(secret)
qc.barrier()
# Now Alice measures her qubits, and stores the outcomes in the "classical registers" cr[]
qc.measure(Alice, cr[1])
qc.measure(secret, cr[0])
# Now we insert some conditional logic. If Alice measures Q in a "1" we need a Z gate, and if Alice
# measures A in a "1" we need an X gate (see the table).
with qc.if_test((cr[1], 1)):
qc.x(Bob)
with qc.if_test((cr[0], 1)):
qc.z(Bob)
qc.draw(output="mpl")
To je vše, co musíme udělat, aby byl Alenčin stav teleportován Bobovi. Vzpomeňme si ale, že když měříme kvantový stav , dostaneme buď , nebo Na konci celého procesu tedy Bob Alenčin tajný stav skutečně má, ale nelze to snadno ověřit měřením. Aby nám měření řeklo, že jsme to provedli správně, musíme použít trik. Měli jsme operátor označený „U" (z anglického „unitary" – unitární), který jsme použili k přípravě Alenčina tajného stavu. Na konec obvodu můžeme aplikovat inverz U. Pokud U zobrazilo Alenčin stav na , pak inverz U zobrazí Bobův stav zpět na Tato poslední část by se nemusela provádět, pokud by cílem bylo jen přenést kvantovou informaci. Dělá se pouze proto, abychom si mohli zkontrolovat výsledek.
# Add the inverse of U and measure Bob's qubit.
qc.barrier()
qc.u(theta, varphi, 0.0, Bob).inverse() # inverse of u(theta,varphi,0.0)
qc.measure(Bob, cr[2]) # add measurement gate
qc.draw(output="mpl")
Pokud jsme tedy vše provedli správně, mělo by měření Bobova qubitu poskytnout stav . Tato měření jsou samozřejmě probabilistická. Pokud tedy existuje byť malá pravděpodobnost naměřit Bobův qubit ve stavu , může jediné měření skutečně vrátit Abychom se ujistili, že pravděpodobnost je skutečně vysoká, bylo by potřeba provést mnoho měření.
Krok 2: Optimalizace problému pro kvantové spuštění
Tento krok vezme operace, které chceme provést, a vyjádří je pomocí funkcionality konkrétního kvantového počítače. Zároveň namapuje náš problém na uspořádání kvantového počítače.
Začneme načtením několika balíčků potřebných ke komunikaci s kvantovými počítači IBM. Musíme také vybrat backend, na kterém spustíme výpočet. Můžeme zvolit nejméně vytížený backend, nebo vybrat konkrétní backend, jehož vlastnosti známe.
Níže je kód pro první uložení přihlašovacích údajů. Po jejich uložení do prostředí tyto informace z notebooku smaž, aby nebyly omylem sdíleny při sdílení notebooku. Více informací najdeš v Nastavení účtu IBM Cloud a Inicializace služby v nedůvěryhodném prostředí.
# Load the Qiskit Runtime service
from qiskit_ibm_runtime import QiskitRuntimeService
# Load the Qiskit Runtime service
# 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')
# Load saved credentials
service = QiskitRuntimeService()
# Use the least busy backend, or uncomment the loading of a specific backend like "ibm_brisbane".
backend = service.least_busy(operational=True, simulator=False, min_num_qubits=127)
# backend = service.backend("ibm_brisbane")
print(backend.name)
ibm_sherbrooke
Explicitně povolíme logiku pro měření.
from qiskit.circuit import IfElseOp
backend.target.add_instruction(IfElseOp, name="if_else")
Nyní musíme kvantový obvod „transpilovat". Tento proces zahrnuje mnoho dílčích kroků a je fascinujícím tématem sám o sobě. Jako příklad dílčího kroku: ne všechny kvantové počítače dokáží přímo implementovat všechny logické hradla Qisku. Musíme přepsat hradla z našeho obvodu pomocí hradel, která daný kvantový počítač umí. Tento proces (a další) lze provést pomocí přednastavených správců průchodů (pass manager). Nastavením optimization = 3 (nejvyšší úroveň optimalizace) zajistíme, že mapování z abstraktního kvantového obvodu na instrukce zadávané kvantovému počítači bude co nejefektivnější.
# Step 2: Transpile
from qiskit.transpiler.preset_passmanagers import generate_preset_pass_manager
target = backend.target
pm = generate_preset_pass_manager(target=target, optimization_level=3)
qc_isa = pm.run(qc)
„Sampler" (vzorkovač) je primitivum navržené k vzorkování možných stavů vznikajících z kvantového obvodu a ke sběru statistik o tom, jaké stavy mohou být naměřeny a s jakou pravděpodobností. Zde importujeme Qiskit Runtime Sampler:
# Load the Runtime primitive and session
from qiskit_ibm_runtime import SamplerV2 as Sampler
sampler = Sampler(mode=backend)
Ne každý výpočet na kvantovém počítači lze rozumně simulovat na klasických počítačích. Tuto jednoduchou teleportaci klasicky simulovat lze, ale vůbec není překvapující, že dokážeme klasicky uložit informaci na jedno nebo druhé místo. Důrazně doporučujeme provádět tyto výpočty na skutečném kvantovém počítači IBM. Pokud jsi ale vyčerpal/a bezplatné měsíční využití, nebo pokud je potřeba dokončit úkol ve třídě a nechce se čekat ve frontě, lze tento modul dokončit pomocí simulátoru. K tomu jednoduše spusť buňku níže a odkomentuj příslušné řádky v krocích „Execute".
# Load the backend sampler
from qiskit.primitives import BackendSamplerV2
# Load the Aer simulator and generate a noise model based on the currently-selected backend.
from qiskit_aer import AerSimulator
from qiskit_aer.noise import NoiseModel
noise_model = NoiseModel.from_backend(backend)
# Define a simulator using Aer, and use it in Sampler.
backend_sim = AerSimulator(noise_model=noise_model)
sampler_sim = BackendSamplerV2(backend=backend_sim)
# Alternatively, load a fake backend with generic properties and define a simulator.
# backend_gen = GenericBackendV2(num_qubits=18)
# sampler_gen = BackendSamplerV2(backend=backend_gen)
Krok 3: Spuštění
Použij sampler ke spuštění úkolu; jako argument zadej obvod.
job = sampler.run([qc_isa])
# job = sampler_sim.run([qc_isa])
res = job.result()
counts = res[0].data.c.get_counts()
Krok 4: Post-processing a analýza
Vykreslíme výsledky a interpretujeme je.
# This required 5 s to run on a Heron r2 processor on 10-28-24
from qiskit.visualization import plot_histogram
plot_histogram(counts)
Ověř své porozumění
Přečti si níže uvedenou otázku, zamysli se nad odpovědí a pak klikni na trojúhelník pro zobrazení řešení.
Které ze stavů výše ukazují úspěšnou teleportaci a jak to poznáš?
Odpověď:
Stavy jsou všechny konzistentní s úspěšnou teleportací. Přidali jsme totiž hradlo, které vrátí zpět počáteční přípravu tajného stavu. Pokud byl tajný stav úspěšně teleportován na Bobův qubit, toto přídavné hradlo by mělo vrátit Bobův qubit do stavu . Každý stav výše, kde se Bobův qubit (qubit 0, měřený do 0. složky klasického registru, tedy nejvyšší/zcela vpravo) nachází ve stavu , tedy indikuje úspěch.
Tento histogram zobrazuje všechny výsledky měření tří qubitů za 5 000 pokusů neboli „shots". Dříve jsme zmínili, že Alice naměří pro qubity A a Q všechny možné stavy se stejnou pravděpodobností. Qubity 0–2 jsme v obvodu přiřadili Q, A a B v tomto pořadí. V little-endian notaci je Bobův qubit zcela vlevo/nejnižší. Čtyři pruhy vlevo tedy odpovídají Bobovu qubitu ve stavu a zbývající dva qubity jsou ve všech možných kombinacích s přibližně stejnou pravděpodobností. Všimni si, že téměř všechna (obvykle ~95 %) měření vrátí Bobův qubit ve stavu , což znamená, že naše nastavení bylo úspěšné! Existuje jen hrstka shots (~5 %), kde byl Bobův qubit naměřen ve stavu . To by logicky nemělo být možné. Všechny moderní kvantové počítače však trpí šumem a chybami v mnohem větší míře než klasické počítače. A kvantová korekce chyb je stále rozvíjejícím se oborem.
Experiment 2: Teleportace přes procesor
Nejzajímavější aspekt kvantové teleportace je pravděpodobně to, že kvantový stav lze teleportovat na velké vzdálenosti okamžitě (přestože klasická komunikace dalších hradel okamžitá není). Jak již bylo řečeno, nemůžeme qubity odlomit od procesoru a přemísťovat je. Informaci ale můžeme přesunout z jednoho qubitu na druhý, dokud qubity zapojené do teleportace nejsou na opačných stranách procesoru. Zopakujme kroky, které jsme provedli výše, ale tentokrát vytvoříme větší obvod s dostatkem qubitů, aby pokryl celý procesor.
Krok 1: Namapuj svůj problém na kvantový obvod
Tentokrát se qubity odpovídající Alence a Bobovi budou měnit. Nebudeme tedy pojmenovávat jediný qubit „A" a druhý „B". Místo toho qubity očíslujeme a použijeme proměnné k reprezentaci aktuální polohy informace na qubitech patřících Alence a Bobovi. Všechny ostatní kroky kromě swap hradel jsou stejné jako dříve.
# Step 1: Map
# Define registers
qr = QuantumRegister(13, "q")
qc = QuantumCircuit(qr, cr)
# Define registers
secret = QuantumRegister(1, "Q")
ebitsa = QuantumRegister(6, "A")
ebitsb = QuantumRegister(6, "B")
# q = ClassicalRegister(1, "q meas")
# a = ClassicalRegister(1, "a")
# b = ClassicalRegister(1, "b")
cr = ClassicalRegister(3, "c")
qc = QuantumCircuit(secret, ebitsa, ebitsb, cr)
# We'll start Alice in the middle of the circuit, then move information outward in both directions.
Alice = 5
Bob = 0
qc.h(ebitsa[Alice])
qc.cx(ebitsa[Alice], ebitsb[Bob])
# Starting with Bob and Alice in the center, we swap their information onto adjacent qubits,
# until the information is on distant qubits.
for n in range(Alice):
qc.swap(ebitsb[Bob], ebitsb[Bob + 1])
qc.swap(ebitsa[Alice], ebitsa[Alice - 1])
Alice = Alice - 1
Bob = Bob + 1
qc.barrier()
# Create a random state for Alice (qubit zero)
np.random.seed(42) # fixing seed for repeatability
# theta = np.random.uniform(0.0, 1.0) * np.pi #from 0 to pi
theta = 0.3
varphi = np.random.uniform(0.0, 2.0) * np.pi # from 0 to 2*pi
qc.u(theta, varphi, 0.0, secret)
# Entangle Alice's two qubits
qc.cx(secret, ebitsa[Alice])
qc.h(secret)
qc.barrier()
# Make measurements of Alice's qubits and store the results in the classical register.
qc.measure(ebitsa[Alice], cr[1])
qc.measure(secret, cr[0])
# Send instructions to Bob's qubits based on the outcome of Alice's measurements.
with qc.if_test((cr[1], 1)):
qc.x(ebitsb[Bob])
with qc.if_test((cr[0], 1)):
qc.z(ebitsb[Bob])
qc.barrier()
# Invert the preparation we did for Carl's qubit so we can check whether we did this correctly.
qc.u(theta, varphi, 0.0, ebitsb[Bob]).inverse() # inverse of u(theta,varphi,0.0)
qc.measure(ebitsb[Bob], cr[2]) # add measurement gate
qc.draw("mpl")
Z diagramu obvodu vidíš, že logické kroky jsou stejné. Jediný rozdíl je, že jsme použili swap hradla k přesunutí stavu Alenčina qubitu z qubitu 6 () na qubit 1 (), hned vedle Q. A použili jsme swap hradla k přesunutí Bobova počátečního stavu z qubitu 7 () na qubit 12 (). Všimni si, že stav qubitu 12 vůbec nesouvisí s tajným stavem Q, dokud nejsou provedena měření na vzdálených qubitech 0 a 1, a stav qubitu 12 se nerovná tajnému stavu, dokud nejsou aplikována podmíněná hradla a .
Krok 2: Optimalizace obvodu
Obvykle, když používáme správce průchodů k transpilaci a optimalizaci obvodů, má smysl nastavit optimization_level = 3, protože chceme, aby naše obvody byly co nejefektivnější. V tomto případě však nemáme žádný výpočetní důvod k přenosu stavů z qubitů 6 a 7 na qubity 1 a 12. To jsme udělali jen proto, abychom demonstrovali teleportaci na vzdálenost. Pokud bychom požádali správce průchodů o optimalizaci obvodu, zjistil by, že pro tato swap hradla neexistuje logický důvod, a odstranil by je a provedl by operace hradel na sousedních qubitech. Pro tento speciální případ tedy nastavíme optimization_level = 0.
# Step 2: Transpile
from qiskit.transpiler.preset_passmanagers import generate_preset_pass_manager
target = backend.target
pmzero = generate_preset_pass_manager(target=target, optimization_level=0)
qc_isa_zero = pmzero.run(qc)
print(qc_isa_zero.depth())
105
Kde se tyto qubity na kvantovém procesoru nacházejí, můžeme vizualizovat pomocí funkce plot_circuit_layout.
Krok 3: Spuštění
Stejně jako dříve doporučujeme spustit výpočet na skutečných kvantových počítačích IBM. Pokud jsi vyčerpal/a bezplatné měsíční využití, klidně odkomentuj buňky simulátoru pro spuštění na simulátoru.
# This required 5 s to run on a Heron r2 processor on 10-28-24
job = sampler.run([qc_isa_zero])
# job = sampler_sim.run([qc_isa_zero])
counts = job.result()[0].data.c.get_counts()
from qiskit.visualization import plot_histogram
plot_histogram(counts)
Krok 4: Klasický post-processing
Opět vidíme, že pravděpodobnosti možných výsledků pro Alenčiny qubity jsou celkem rovnoměrné. Existuje silná preference pro nalezení Bobova qubitu ve stavu po invertování tajného kódu, což znamená velkou pravděpodobnost, že jsme tajný stav správně teleportovali přes procesor z Q na Boba (qubity 0 na 12). Poznamenejme ale, že nyní je přibližně vyšší šance nenaměřit pro Boba. To je důležitá lekce kvantového výpočtu: čím více hradel, zejména vícekvantových hradel jako jsou swap hradla, tím více šumu a chyb se projeví.
Otázky
Instruktoři mohou požádat o verze těchto notebooků s odpovědmi a pokyny k zařazení do běžných osnov vyplněním tohoto krátkého dotazníku o způsobu použití notebooků.
Klíčové koncepty
- Qubity mohou být provázané (entanglované), což znamená, že měření jednoho qubitu ovlivní nebo dokonce určí stav druhého qubitu.
- Provázanost se liší od klasických korelací; například qubity A a B mohou být v superpozici stavů jako Stav A nebo B může být přírodou neurčený, a přesto mohou být A a B zaručeně ve stejném stavu.
- Prostřednictvím kombinace provázanosti a měření můžeme přenést stav (který může nést informaci) z jednoho qubitu na druhý. Tento přenos lze provést i na velké vzdálenosti — tomu říkáme kvantová teleportace.
- Kvantová teleportace se opírá o kvantová měření, která jsou probabilistická. Klasická komunikace může být proto nutná k doladění teleportovaných stavů. To zabraňuje kvantové teleportaci přenášet informaci rychleji než světlo. Kvantová teleportace neporušuje relativitu ani kauzalitu.
- Moderní kvantové počítače jsou náchylnější k šumu a chybám než klasické počítače. Počítej s chybovostí několika procent.
- Čím více hradel v sekvenci přidáš (zejména dvouqubitových hradel), tím více chyb a šumu lze očekávat.
Otázky pravda/nepravda
- P/N Kvantová teleportace lze použít k přenosu informací rychleji než světlo.
- P/N Moderní experimentální důkazy naznačují, že kolaps kvantového stavu se šíří rychleji než světlo.
- P/N V Qisku jsou qubity ve stavech uspořádány tak, že qubit s nejnižším číslem je zcela vpravo, tedy
Otázky s výběrem odpovědi
- Qubity A a B jsou provázány, poté odděleny na velkou vzdálenost . Qubit A je změřen. Které tvrzení o rychlosti, jakou je ovlivněn stav qubitu B, je správné?
- a. Qubit B je ovlivněn okamžitě, v rámci experimentální přesnosti, v dosud provedených experimentech.
- b. Qubit B je ovlivněn po době , což znamená, že kvantový stav „kolabuje" přibližně rychlostí světla, v rámci experimentální přesnosti.
- c. Qubit B je ovlivněn teprve po proběhnutí klasické komunikace, tedy v době delší než .
- d. Žádná z výše uvedených možností.
- Vzpomeňme, že pravděpodobnost měření souvisí s amplitudami kvantových stavů. Například pokud je qubit zpočátku ve stavu pravděpodobnost naměření stavu je Ne všechny sady měření přesně odpovídají těmto pravděpodobnostem, a to kvůli konečnému vzorkování (stejně jako hod mincí může přinést dvakrát za sebou hlavu). Níže uvedený histogram měření by mohl odpovídat kterému z následujících kvantových stavů? Vyber nejlepší odpověď.
- a.
- b.
- c.
- d.
- e.
- Které z následujících stavů ukazují provázané qubity A a B? Vyber všechny správné odpovědi.
- a.
- b.
- c.
- d.
- e.
- V tomto modulu jsme připravili provázaný stav: Existuje ale mnoho dalších provázaných stavů, které by bylo možné použít pro podobný protokol. Který ze stavů níže by mohl vést k histogramu měření dvou qubitů jako na následujícím obrázku? Vyber nejlepší odpověď.
- a.
- b.
- c.
- d.
- e.
Diskusní otázky
-
Popiš protokol kvantové teleportace od začátku do konce svému partnerovi/skupině. Zjistěte, zda mají co dodat nebo zda mají otázky.
-
Je na počátečním provázaném stavu mezi Alice a Bobem něco jedinečného? Pokud ano, co je na něm jedinečného? Pokud ne, jaké jiné provázané stavy bychom mohli použít?