Přeskočit na hlavní obsah

Kvantové mince — modul o superpozici a interferenci

Pro tento modul Qiskit in Classrooms musí mít studenti funkční prostředí Python s nainstalovanými následujícími balíčky:

  • qiskit v2.1.0 nebo novější
  • qiskit-ibm-runtime v0.40.1 nebo novější
  • qiskit-aer v0.17.0 nebo novější
  • qiskit.visualization
  • numpy
  • pylatexenc

Pokyny k nastavení a instalaci výše uvedených balíčků najdeš v průvodci Instalace Qiskit. Aby mohli studenti spouštět úlohy na skutečných kvantových počítačích, budou si muset vytvořit účet u IBM Quantum® podle pokynů v průvodci Nastavení účtu IBM Cloud.

Tento modul byl otestován a využil 47 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 matplotlib numpy qiskit 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ůvodce modulem od Dr. Katie McCormickové níže, nebo klikni sem pro sledování na YouTube.


Úvod

V tomto modulu prozkoumáme jeden ze základních principů kvantové teorie: superpozici. V každodenní zkušenosti mají objekty vždy jasně určené vlastnosti. Jejich poloha, velikost, tvar, barva — vše je dáno a jisté, i kdyby to pozorovatel ještě neměřil. V kvantovém světě to nutně tak neplatí. Kvantový objekt může být v tom, čemu říkáme „superpozice" více klasicky povolených stavů. Při měření superpozice se tento stav náhodně „zkolabuje" do jednoho z těchto stavů.

V jistém smyslu je měření superpozičního stavu podobné házení mincí: nelze předem vědět, jak padne. Tato základní neurčitost je nepříjemný aspekt kvantové mechaniky, se kterým měl potíže i Einstein. O této náhodnosti proslule prohlásil: „Bůh nehraje v kostky." Ale, jak uvidíme, Bůh kostky skutečně hází — a mince také.

Budeme přemýšlet o klasickém hodu mincí jako o analogii k měření superpozičního stavu. A hraním s „kvantovou mincí" pomocí Qiskit a Qubitu na kvantovém procesoru IBM® rychle odhalíme meze této analogie.

Klasická mince

Začněme klasickou mincí. Hodíme mincí a padne buď lícem, nebo rubem, s 50 ~% pravděpodobností každé varianty. Zatímco teoreticky by bylo možné vypočítat, na kterou stranu mince padne, pokud bychom znali přesné počáteční podmínky a sílu/moment hodu, v praxi není možné předem vědět, na kterou stranu padne. Proto používáme hod mincí jako klasický příklad klasického pravděpodobnostního stavu, kde je výsledek v podstatě náhodný. Stav mince před dopadem můžeme zapsat tak, aby odrážel tuto pravděpodobnost 50/50:

S(coin)=12up+12downS(coin) = \frac{1}{2}|up\rangle + \frac{1}{2}|down\rangle

Oba členy zde představují dvě možné výsledky hodu a jejich koeficienty představují pravděpodobnosti každého z výsledků. Všimni si, že typicky se „|\rangle" (označované jako „ket") používá pro reprezentaci kvantového stavu, ale zde mluvíme o klasickém pravděpodobnostním stavu. Více o tom, jak reprezentujeme klasické a kvantové informace, se dozvíš v Lekci 1: Jednotlivé systémy kurzu Základy kvantové informace.

Kdybychom hodili mincí 1000krát a zaznamenali počet orlů a pán, dostali bychom něco takového:

# import necessary packages:
import numpy as np
import matplotlib.pyplot as plt
import random

nflips = 1000
fliplist = [random.randint(0, 1) for f in range(nflips)]

# bar plots using get_gaussian_probs function
plt.hist(fliplist)
plt.show()

Output of the previous code cell

Kvantová mince

Podobný pravděpodobnostní stav můžeme vytvořit pomocí Qubitu na kvantovém počítači. Stejně jako u hodu mincí může být i Qubit naměřen ve dvou možných stavech: 0|0\rangle a 1|1\rangle. Pravděpodobnostní „superpozice" vznikne tak, že začneme ve stavu 0|0\rangle a pak na Qubit aplikujeme tzv. Hadamardův Gate. Ten ho uvede do rovnoměrné superpozice 0|0\rangle a 1|1\rangle. Všimni si, že ačkoli tento superpozice může na první pohled vypadat a chovat se jako mince, brzy uvidíme, že je v tom mnohem více. Cílem tohoto modulu je ukázat ti, že superpozice není totéž co klasický hod mincí.

Protože se tedy Qubit nachází v rovnoměrné superpozici 0 a 1, při jeho měření bude 50% pravděpodobnost naměření 0|0\rangle a 50% pravděpodobnost naměření 1|1\rangle. Tento stav zapíšeme trochu odlišně od klasického pravděpodobnostního případu, z důvodů, které budou jasné později:

ψ=120+121|\psi\rangle = \frac{1}{\sqrt{2}} |0\rangle + \frac{1}{\sqrt{2}} |1\rangle

Pravděpodobnosti naměření každého ze dvou stavů již nejsou rovny koeficientům, jak tomu bylo v klasickém pravděpodobnostním stavu výše. Místo toho jsou pravděpodobnosti dány druhou mocninou koeficientů, přičemž každý z těchto koeficientů může být nyní komplexní, tedy může mít reálnou i imaginární část.

Navzdory těmto rozdílům je výsledek měření tohoto stavu v podstatě stejný jako hod mincí.

from qiskit import QuantumCircuit

qcoin = QuantumCircuit(1)
qcoin.h(0)
qcoin.measure_all()

qcoin.draw("mpl")

Output of the previous code cell

Aplikace Hadamardova Gate je tedy analogií k hodu mincí. A stejně jako jsme hodili mincí 1000krát, abychom se podívali na statistiku, jak padá, můžeme udělat něco podobného na Qiskit s naší „kvantovou mincí." Můžeme využít Qiskit primitiv zvaný Sampler, který circuit několikrát zopakuje, aby vzorkoval statistiku výsledného stavu.

Nejprve načteme službu Qiskit Runtime a primitiva, poté vybereme Backend, na kterém circuit spustíme.

Níže je uveden kód pro první uložení přihlašovacích údajů. Nezapomeň tyto informace z notebooku po uložení do prostředí smazat, aby ses vyhnul/a náhodnému sdílení přihlašovacích údajů při sdílení notebooku. Více informací najdeš v průvodcích 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

# 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()
# Load the Runtime primitive and session
from qiskit_ibm_runtime import (
SamplerV2 as Sampler,
EstimatorV2 as Estimator,
)

# Use the least busy backend
backend = service.least_busy()
print(backend.name)
ibm_kingston

Pokud ti na účtu zbývá méně času, můžeš zvolit spuštění na simulátoru. Odkomentuj níže uvedený kód a spusť buňku:

## Use a local simulator

# from qiskit_aer import AerSimulator

## Generate a simulator that mimics the real quantum system

# backend_sim = AerSimulator.from_backend(backend)

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

# from qiskit.primitives import BackendSamplerV2
# sampler_sim = BackendSamplerV2(backend = backend_sim)
# from qiskit.primitives import BackendEstimatorV2
# estimator_sim = BackendEstimatorV2(backend = backend_sim)
## 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(qcoin)
## Execute

# On real hardware:
sampler = Sampler(mode=backend)
pubs = [qc_isa]
job = sampler.run(pubs, shots=1000)
res = job.result()

counts = res[0].data.meas.get_counts()

# or with Aer simulator with noise model from real backend
# job = sampler_sim.run([qc_isa])
# counts=job.result()[0].data.meas.get_counts()
## Analysis
from qiskit.visualization import plot_histogram

plot_histogram(counts)

Output of the previous code cell

Z 1000 vzorků výše uvedeného Circuitu dostaneme něco, co vypadá v podstatě stejně jako histogram klasické mince, jen s určitými statistickými výkyvy.

Kromě vzorkování statistiky kvantové mince můžeme použít další Qiskit primitiv zvaný Estimator k měření tzv. střední hodnoty (expectation value) pozorovatelné veličiny daného stavu. Pro ilustraci, co tato střední hodnota znamená, použijme opět jako příklad klasickou minci. Řekněme, že mincí hraješ hazardní hru: pokaždé, když mince padne „lícem nahoru," vyhraješ jedno euro. Pokaždé, když padne „rubem nahoru," jedno euro prohraješ. Chceš-li vědět, kolik peněz průměrně za jeden hod získáš (střední hodnota pozorovatelné „peníze"), vypočítáš:

E(money)=12(+1 dollar)+12(1 dollar)=0 dollarsE(money) = \frac{1}{2} (+ \text{1 dollar}) + \frac{1}{2} (- \text{1 dollar}) = \text{0 dollars}

Protože je stejně pravděpodobné, že euro vyhraješ, jako že ho prohraješ, je střední hodnota $0.

Podobně u kvantového stavu můžeme vypočítat střední hodnotu pozorovatelné „Z", kde Z je Pauliho matice s hodnotami +1 a -1 přiřazenými stavům 0|0\rangle a 1|1\rangle.

ψZψ=120Z0+121Z1=12(+1)+12(1)=0\langle \psi|Z|\psi \rangle = \frac{1}{2} \langle 0 | Z | 0 \rangle + \frac{1}{2} \langle 1 | Z | 1 \rangle = \frac{1}{2} (+1) + \frac{1}{2}(-1) = 0
from qiskit.quantum_info import Pauli

qcoin = QuantumCircuit(1)
qcoin.h(0)

# for Estimator, we do not apply the measurement to the circuit
<qiskit.circuit.instructionset.InstructionSet at 0x136df1ba0>
## Transpile
from qiskit.transpiler.preset_passmanagers import generate_preset_pass_manager

target = backend.target
pm = generate_preset_pass_manager(target=target, optimization_level=3)

obs = Pauli("Z")

qc_isa = pm.run(qcoin)
obs_isa = obs.apply_layout(layout=qc_isa.layout)
## Execute

# On real hardware:
estimator = Estimator(mode=backend)
pubs = [(qc_isa, obs_isa)]
job = estimator.run([[qc_isa, obs_isa]])
res = job.result()

# On a simulator:
# job = estimator_sim.run([[qc_isa, obs_isa]])
# res=job.result()

print(res[0].data.evs)
-0.014799284701239441

Dostaneme střední hodnotu 0, jak jsme očekávali. To je další způsob, jak potvrdit, že skutečně existuje stejná pravděpodobnost naměření 0 a 1, a kvantová mince se chová jako klasická.

V tuto chvíli vypadá „kvantová mince" úplně stejně jako klasická mince. Ale v další části provedeme experimenty, které odhalí zásadní rozdíly mezi nimi.

Kvantové odhalení: experiment ve třech dimenzích

Zkus si myšlenkový experiment: Hodíš mincí do vzduchu a místo toho, aby dopadla na zem, máš takovou koordinaci, že ji chytíš zatleskáním mezi dlaněmi. Teď místo toho, aby mince padla lícem nahoru nebo dolů, leží lícem doleva nebo doprava.

Ověř si porozumění

Přečti si otázku níže, zamysli se nad odpovědí a pak klikni na trojúhelník pro zobrazení řešení.

Jaká je pravděpodobnost každého z těchto výsledků — lícem doleva nebo lícem doprava?

Odpověď:

Pravděpodobnost bude stále 50-50. Nezáleží na tom, podél které dimenze zvolíme měření výsledku hodu mincí.

Doufejme, že jsi odpověděl/a, že pravděpodobnost nalezení líce doleva nebo doprava je stále 50-50. Dimenze, podél které je výsledek hodu mincí měřen, by neměla ovlivňovat pravděpodobnost výsledků.

Jak by to ale vypadalo u naší kvantové mince? Pojďme to zkontrolovat.

Kvantovou superpozici vytvoříme stejným způsobem jako minule — pomocí Hadamardova Gate. Abychom měřili „lícem doleva nebo doprava" na naší kvantové minci, můžeme udělat totéž co u klasické mince: měřit podél jiné osy. Naše standardní měření na kvantovém počítači probíhají podél svislé osy, stejně jako obvyklé měření „lícem nahoru nebo dolů" u klasické mince. Ale můžeme se také zeptat naší kvantové mince, zda je lícem doleva nebo doprava, neboli zda se nachází ve stavech +|+\rangle nebo |-\rangle, které leží podél osy xx. Sampler vzorkuje pouze v bázi měření Z, ale můžeme použít Estimator, který nám dá střední hodnotu X. Hodnoty X jsou +1 a -1 pro stavy +|+\rangle nebo |-\rangle.

Ověř si porozumění

Přečti si otázku níže, zamysli se nad odpovědí a pak klikni na trojúhelník pro zobrazení řešení.

Pokud by se kvantová mince chovala jako klasická mince, měli bychom 50% pravděpodobnost naměření stavu +|+\rangle a |-\rangle. Jakou střední hodnotu X bychom v takovém případě od Estimatoru očekávali?

Odpověď:

Když aplikujeme X na stav +|+\rangle, dostaneme hodnotu +1, a na stav |-\rangle hodnotu -1, takže při rozdělení 50-50 bychom dostali střední hodnotu 0.

# Step 1: map problem

qcoin_lr = QuantumCircuit(1)
qcoin_lr.h(0)

obs = Pauli("X")

# Step 2: Transpile the circuit

pm = generate_preset_pass_manager(target=target, optimization_level=3)
qc_isa = pm.run(qcoin_lr)
obs_isa = obs.apply_layout(layout=qc_isa.layout)

# Step 3: Run the circuit on a real quantum computer

estimator = Estimator(mode=backend)
pubs = [(qc_isa, obs_isa)]
job = estimator.run([[qc_isa, obs_isa]])
res = job.result()

# Run the job on the Aer simulator with noise model from real backend
# job = estimator_sim.run([[qc_isa,obs_isa]])
# res=job.result()

# Step 4: Return the result in classical form, and analyze.

print(res[0].data.evs)
0.9985207100591716

Střední hodnota X pro tento stav je 1. Tedy není tu 50% pravděpodobnost naměření +|+\rangle a |-\rangle.

Ověř si porozumění

Přečti si otázku níže, zamysli se nad odpovědí a pak klikni na trojúhelník pro zobrazení řešení.

Co nám tato střední hodnota říká o stavu ψ|\psi\rangle? Jaké jsou pravděpodobnosti naměření +|+\rangle a |-\rangle v této X bázi?

Odpověď:

Protože střední hodnota je stejná jako hodnota X pro stav +|+\rangle, znamená to, že máme 100% pravděpodobnost naměření stavu +|+\rangle při měření podél X.

Co se to tu děje? Zdá se, že naše kvantová mince může mít náhodné, pravděpodobnostní výsledky podél jedné dimenze, ale dokonale předvídatelné výsledky podél jiné. Bylo by to, jako kdybys hodil/a mincí a zaručil/a, že pokaždé, když ji chytíš zatleskáním mezi dlaněmi, skončí lícem doprava.

Kvantová fáze

Klíčový rozdíl kvantové mince spočívá v tom, že má další vlastnost, kterou klasická mince nemá. Vzpomeň si, že v klasickém pravděpodobnostním stavu

S(coin)=c1up+c2downS(coin) = c_1|up\rangle + c_2|down\rangle

je každý koeficient prostě reálné kladné číslo vyjadřující pravděpodobnost naměření daného stavu. V kvantovém stavu

ψ=c10+c21|\psi\rangle = c_1 |0\rangle + c_2 |1\rangle

jsou koeficienty komplexní, takže mají reálnou i imaginární složku. Každý koeficient cic_i lze vyjádřit jako dvourozměrný vektor v komplexní rovině, s velikostí ci|c_i| a úhlem ϕi\phi_i, který svírá s reálnou osou:

ci=cieiϕi.c_i = |c_i| e^{i \phi_i}.

Kružnice v komplexní rovině. Kvantový stav je znázorněn šipkou délky 1, která se může otáčet a ukazovat na libovolný bod na kružnici. Vodorovná složka šipky je její reálná amplituda, svislá je její komplexní amplituda.

ϕi\phi_i nazýváme fáze. Fáze nám říká, jak budou dva členy kvantového stavu interferovat – tedy jak se budou sčítat nebo rušit jako vlny. Jsou-li dvě vlny ve fázi, jejich vrcholy a údolí jsou zarovnány, a pak se skládají v vlnu dvojnásobné výšky. Tomu říkáme konstruktivní interference. Jsou-li naopak mimo fázi – vrchol jedné se kryje s údolím druhé a naopak – interferují destruktivně a navzájem se zcela vyruší.

Podobně jako vlny se i kvantové stavy mohou skládat konstruktivně nebo destruktivně. Může být obtížnější to vidět, protože często nejde o skutečnou vlnu ve fyzickém prostoru. V případě našich Qubitů interference probíhá v abstraktním informačním prostoru Qubitů. Všimni si také, že pro to, jak budou vlny interferovat, záleží pouze na relativní fázi mezi nimi – tedy na rozdílu fází Δϕ=ϕ2ϕ1\Delta \phi = \phi_2 - \phi_1 obou koeficientů – takže na celý stav obvykle aplikujeme globální fázi ϕ1-\phi_1, aby byl c1c_1 čistě reálný a relativní fáze byla celá zachycena v c2c_2.

Abychom viděli, jak může fáze způsobit interferenci v naší kvantové minci, zkusme aplikovat Hadamardovu bránu dvakrát místo jednou. Klasicky by to nedávalo smysl – pokud je aplikace Hadamardovy brány ekvivalentní hodu mincí, nemůžeš hodit mincí, která se již otáčí. Ale podívejme se, co se stane s kvantovou mincí:

qcoin_0 = QuantumCircuit(1)
qcoin_0.h(0)
qcoin_0.h(0)
qcoin_0.measure_all()

qcoin_0.draw("mpl")

Výstup předchozí buňky kódu

Než použijeme Sampler k měření výsledného stavu, zamysleme se nad tím, jak bude tento Qubit transformován každou bránou. Začíná, jako obvykle, ve stavu 0|0\rangle. Pak první Hadamardova brána transformuje stav do superpozice, jak jsme již viděli:

H0=120+121.H|0\rangle = \frac{1}{\sqrt{2}} |0\rangle + \frac{1}{\sqrt{2}} |1\rangle.

V tomto případě jsou oba koeficienty zcela reálné a kladné, což znamená, že fáze je ϕ=0\phi=0.

Druhá Hadamardova brána je pak aplikována na každou část superpozičního stavu zvlášť. Již víme, jak Hadamardova brána transformuje stav 0|0\rangle. Ale co 1|1\rangle?

H1=120121H|1\rangle = \frac{1}{\sqrt{2}} |0\rangle - \frac{1}{\sqrt{2}} |1\rangle

Jde opět o rovnoměrnou superpozici 0 a 1, podobně jako hod mincí, ale koeficient tohoto stavu před 1|1\rangle má fázi ϕ=π\phi = \pi, která mu dává záporné znaménko.

Ověř si porozumění

Přečti si otázku níže, zamysli se nad odpovědí a pak klikni na trojúhelník pro zobrazení řešení.

Vypočítej výsledný stav po aplikaci druhé Hadamardovy brány. To jest, vypočítej: H(120+121)H(\frac{1}{\sqrt{2}} |0\rangle + \frac{1}{\sqrt{2}} |1\rangle). Všimni si, že HH je distributivní, takže ho můžeme aplikovat na každý člen zvlášť.

Odpověď:

H(120+121)=12H0+12H1=12[(0+1)+(01)]=0H(\frac{1}{\sqrt{2}} |0\rangle + \frac{1}{\sqrt{2}} |1\rangle) = \frac{1}{\sqrt{2}} H|0\rangle + \frac{1}{\sqrt{2}} H|1\rangle = \frac{1}{2} [(|0\rangle + |1\rangle) + (|0\rangle - |1\rangle)] = |0\rangle

Nyní si ověřme naši předpověď pomocí Sampler.

## Transpile

target = backend.target
pm = generate_preset_pass_manager(target=target, optimization_level=3)

qc_isa = pm.run(qcoin_0)

## Execute

# On real hardware:
sampler = Sampler(mode=backend)
pubs = [qc_isa]
job = sampler.run(pubs, shots=1000)
res = job.result()

counts = res[0].data.meas.get_counts()

# or with Aer simulator with noise model from real backend
# job = sampler_sim.run([qc_isa])
# counts=job.result()[0].data.meas.get_counts()

## Analyze
plot_histogram(counts)

Výstup předchozí buňky kódu

Druhá Hadamardova brána zrušila první a my jsme se vrátili do stavu 0, ze kterého jsme začínali! Je to proto, že Hadamardova brána transformuje stavy 0|0\rangle i 1|1\rangle do podobných stavů, ale s opačnými fázemi. Po druhé Hadamardově bráně vidíme, že členy 0|0\rangle interferují konstruktivně, zatímco členy 1|1\rangle interferují destruktivně a navzájem se vyruší.

Pojďme prozkoumat dál: fázi lze změnit pomocí brány „PHASE". Aplikujeme tedy Hadamardovu bránu pro vytvoření superpozice, pak fázový posun o π\pi radiánů a poté druhou Hadamardovu bránu:

qcoin_pi = QuantumCircuit(1)
qcoin_pi.h(0)
qcoin_pi.p(np.pi, 0)
qcoin_pi.h(0)
qcoin_pi.measure_all()

qcoin_pi.draw("mpl")

Výstup předchozí buňky kódu

## Transpile

target = backend.target
pm = generate_preset_pass_manager(target=target, optimization_level=3)

qc_isa = pm.run(qcoin_pi)

## Execute

# On real hardware:
sampler = Sampler(mode=backend)
pubs = [qc_isa]
job = sampler.run(pubs, shots=1000)
res = job.result()

counts = res[0].data.meas.get_counts()

# or with Aer simulator with noise model from real backend
# job = sampler_sim.run([qc_isa])
# counts=job.result()[0].data.meas.get_counts()

## Analyze
plot_histogram(counts)

Výstup předchozí buňky kódu

A nyní je Qubit naměřen ve stavu 1 místo 0.

Takže již z těchto několika jednoduchých experimentů vidíš dramatický rozdíl, jaký může tato fáze přinést do kvantového Circuit. Může být nenápadná a zpočátku těžko postřehnutelná. V našem prvním experimentu, kde jsme jednoduše hodili kvantovou mincí pomocí Hadamardovy Gate a měřili výsledek, se žádný vliv fáze neprojevil. Teprve když jsme se ponořili hlouběji, odhalili jsme, jaký rozdíl může fáze způsobit. Může způsobit, že tatáž kvantová Gate bude mít na Qubit doslova opačný účinek.

Vyzkoušej si to sám:

Uprav níže uvedenou buňku kódu tak, aby se fáze změnila tak, že druhá Hadamardova Gate vytvoří superpozici s pravděpodobnostmi 25 % a 75 % pro nalezení stavu v 0|0\rangle a 1|1\rangle. Ověř svou odpověď matematicky.

qcoin_phase = QuantumCircuit(1)
qcoin_phase.h(0)
# replace "x" below with a phase from 0 to 2*np.pi (this cell won't run if you leave x)
# qcoin_phase.rz(x, 0)
qcoin_phase.h(0)
qcoin_phase.measure_all()

## Transpile

target = backend.target
pm = generate_preset_pass_manager(target=target, optimization_level=3)

qc_isa = pm.run(qcoin_phase)

## Execute

# On real hardware:
sampler = Sampler(mode=backend)
pubs = [qc_isa]
job = sampler.run(pubs, shots=1000)
res = job.result()

counts = res[0].data.meas.get_counts()

# or with Aer simulator with noise model from real backend
# job = sampler_sim.run([qc_isa])
# counts=job.result()[0].data.meas.get_counts()

## Analyze
plot_histogram(counts)

Výstup předchozí buňky kódu

Další (lepší) analogie s mincí pomocí hradla NOT\sqrt{\text{NOT}}

Doposud jsme zjistili, že házení mincí se poměrně výrazně liší od vytváření stavu superpozice. Existuje lepší analogie s mincí, která by zachytila více jevů podobných superpozici? Ano. Ano, existuje.

Provedeme další myšlenkový experiment s mincí. Představ si minci ležící na stole rubem nahoru. Abychom ji otočili rubem dolů, stačí ji jednoduše překlopit. To je výpočetní ekvivalent hradla „NOT".

Řekněme, že chceme sestavit operaci, která by – aplikovaná dvakrát – byla ekvivalentní hradlu NOT. Tedy chceme „odmocninu z NOT," neboli NOT\sqrt{\text{NOT}}. Toho dosáhneme tím, že uvažujeme, jak je hradlo NOT fyzicky implementováno na minci: je to prostě otočení o 180 stupňů kolem, například, osy x. Pokud bychom tedy minci otočili jen o 90 stupňů kolem osy x, bylo by to ekvivalentní hradlu NOT\sqrt{\text{NOT}}.

Představ si, že po aplikaci hradla NOT\sqrt{\text{NOT}} chceme zjistit, zda je mince rubem nahoru nebo dolů. Není ani jedno – stojí na hraně vůči svislé ose. Ale teď si předefinujme naše „měření" mince takto: nejprve sesklapneme minci podél osy měření (přimáčkneme ji rukou, aby ležela naplocho), a poté zkontrolujeme, zda je rubem nahoru nebo dolů.

Pokud toto „měření" provedeme na minci stojící na hraně, mince „zkolabuje" do polohy rubem nahoru nebo dolů se stejnou pravděpodobností. Podobně jako u hodu mincí lze – v principu – předpovědět, na kterou stranu mince spadne, na základě počátečních podmínek mince a přesné síly, kterou přikládáme rukou, abychom ji „zkolabovali". V praxi je však obtížné předpovědět, která strana padne nahoru, takže je to v podstatě náhodné.

Tuto minci můžeme ve skutečnosti měřit podél tří různých os: xx, yy a zz. Vidíme, že hrana mince míří podél xx a zz, takže měření v těchto směrech vyžaduje „zkolabování" mince – podél těchto os tedy bude výsledek náhodný s pravděpodobností 50:50 pro měření rubem nahoru nebo dolů. Ale podél osy yy už leží naplocho, s rubem otočeným ve směru -y. To můžeme nazvat „rubem dopředu."

Zatímco měření podél x a z dávala náhodné výsledky, měření podél y vždy vrátí stejný výsledek! Pokud si vzpomeneš na experiment „kvantový hod mincí" z předchozí části, připomíná to chování kvantové mince. Podél osy z se měřila jako 0 nebo 1 s pravděpodobností 50/50, ale podél X vždy jako +|+\rangle a nikdy jako |-\rangle. To naznačuje, že mince klidně stojící na hraně je možná lepším způsobem, jak vizualizovat stav superpozice qubitu, než mince divoce se otáčející ve vzduchu.

Použijme Qiskit a podívejme se, zda se naše „kvantová mince" chová stejně jako klasická mince po aplikaci hradla NOT\sqrt{\text{NOT}}. Aplikujeme NOT\sqrt{\text{NOT}} na qubit začínající ve stavu 0|0\rangle a pak použijeme Estimator, abychom zkontrolovali střední hodnotu tří pozorovatelných veličin: X, Y a Z.

qcoin_sx = QuantumCircuit(1)
qcoin_sx.sx(0)

qcoin_sx.draw("mpl")

Output of the previous code cell

obs1 = Pauli("X")
obs2 = Pauli("Y")
obs3 = Pauli("Z")

# Step 2: Transpile the circuit

pm = generate_preset_pass_manager(target=target, optimization_level=3)
qc_isa = pm.run(qcoin_sx)
obs1_isa = obs1.apply_layout(layout=qc_isa.layout)
obs2_isa = obs2.apply_layout(layout=qc_isa.layout)
obs3_isa = obs3.apply_layout(layout=qc_isa.layout)

# Step 3: Run the circuit on a real quantum computer

estimator = Estimator(mode=backend)
pubs = [(qc_isa, [[obs1_isa], [obs2_isa], [obs3_isa]])]
job = estimator.run(pubs)
res = job.result()

# Run the job on the Aer simulator with noise model from real backend
# pubs = [(qc_isa, [[obs1_isa], [obs2_isa], [obs3_isa]])]
# job = estimator_sim.run(pubs)
# res=job.result()

# Step 4: Return the result in classical form, and analyze.

print(res[0].data.evs)
[[-0.01234492]
[-1.00388865]
[ 0.00740695]]

Střední hodnoty jsou 0, -1 a 0 pro X, Y a Z.

Ověř si své porozumění

Přečti si níže uvedenou otázku, zamysli se nad odpovědí a poté klikni na trojúhelník pro zobrazení řešení.

Na základě středních hodnot: jaké jsou pravděpodobnosti naměření kvantové mince jako rubem nahoru/dolů (nebo doleva/doprava nebo dopředu/dozadu) pro každou ze 3 os měření?

Odpověď:

Podél X a Z je pravděpodobnost 50/50 pro naměření libovolného stavu; podél Y se stav vždy naměří ve směru -y.

Toto je stejný výsledek, jaký jsme dostali v myšlenkovém experimentu s aplikací NOT\sqrt{\text{NOT}} – rotace o 90 stupňů – na klasickou minci. Ve skutečnosti nyní existuje přesná analogie mezi mincí a stavem qubitu. Stav qubitu si můžeme vizualizovat jako vektor mířící ve směru rubu mince, kolmo na povrch mince. Takže rub nahoru, neboli stav 0|0\rangle na kvantové minci, odpovídá vektoru mířícímu přímo nahoru; rub dolů, neboli 1|1\rangle, míří přímo dolů. Jakákoli stejná superpozice 0|0\rangle a 1|1\rangle míří vodorovně. Fáze stavu určuje přesný vodorovný směr – směr, do kterého míří podél rovníku, je roven směru, do kterého ukazuje koeficient c2c_2 v komplexní rovině.

Nyní lze každé hradlo, které jsme v tomto notebooku viděli, vizualizovat jako rotaci (nebo sérii rotací) mince/vektoru.

  • NOT: 180 stupňů kolem osy x

  • NOT\sqrt{\text{NOT}}: 90 stupňů kolem osy x

  • PHASE: rotace o ϕ\phi kolem osy z

  • Hadamard: Toto je o něco složitější. Zpočátku jsme ho přirovnávali k hodu mincí, kdy se mince nekontrolovatelně otáčí ve vzduchu. Hadamardovo hradlo je však ve skutečnosti řízená, deterministická rotace mince, stejně jako ostatní hradla. Hadamard se provede otočením o 90 stupňů kolem osy y a poté o 180 stupňů kolem osy x.

Takže na kvantovém stavu superpozice ani na žádné ze standardních operací, které na qubitu provádíme, není nic náhodného. Každá operace je deterministická a reverzibilní. Náhodnost nastupuje pouze tehdy, když se rozhodneme kvantový stav změřit.

Stav qubitu jako Blochův vektor

Tento vektor mířící ve směru „rubu" mince je znám jako „Blochův vektor." Formálně lze libovolný (izolovaný) stav qubitu reprezentovat vektorem ležícím na povrchu sféry s poloměrem 1 se souřadnicemi (r,θ,ϕ)(r, \theta, \phi). Zapsáno v těchto souřadnicích je stav qubitu:

ψ=cosθ20+eiϕsinθ21|\psi\rangle = \cos{\frac{\theta}{2}} |0\rangle + e^{i \phi} \sin{\frac{\theta}{2}} |1\rangle

A diagram of the Bloch sphere. The quantum state is a vector in three dimensions. Since it can point in any direction, the quantum state can be specified using polar angles theta and phi to locate a point on a spherical surphace. Nyní se pomocí Qiskitu podívejme, jak se Blochův vektor mění, když na qubit začínající ve stavu 0|0\rangle aplikujeme různá hradla.

NOT

from qiskit.visualization import plot_bloch_multivector

qnot = QuantumCircuit(1)
qnot.x(0)

plot_bloch_multivector(qnot)

Output of the previous code cell

NOT\sqrt{\text{NOT}}

qsqrtnot = QuantumCircuit(1)
qsqrtnot.sx(0)

plot_bloch_multivector(qsqrtnot)

Output of the previous code cell

PHASE (ϕ=π\phi = \pi)

qphase = QuantumCircuit(1)
qphase.p(np.pi, 0)

plot_bloch_multivector(qphase)

Output of the previous code cell

Hadamard

qhadamard = QuantumCircuit(1)
qhadamard.h(0)

plot_bloch_multivector(qhadamard)

Output of the previous code cell

Závěr – co tedy je stav superpozice?

Tento modul jsme začali srovnáváním náhodnosti měření kvantového stavu superpozice s hodem mincí. Přirovnali jsme „Hadamardovo hradlo," které produkuje kvantovou superpozici, k aktu hodu mincí. Prostřednictvím série experimentů jsme však zjistili, že mezi klasickým hodem mincí a kvantovou superpozicí existují zásadní rozdíly.

Naučili jsme se, že na qubitu v superpozičním stavu není ve skutečnosti nic „náhodného". Připomíná to minci klidně stojící v trojrozměrném prostoru. Ve skutečnosti je mince, která se může volně otáčet ve třech dimenzích, velmi blízkou analogií k jednomu konkrétnímu způsobu vizualizace kvantového stavu qubitu – Blochovu vektoru. Kvantová hradla tuto minci/Blochův vektor otáčejí deterministicky a reverzibilně. Náhodnost je vnášena pouze tehdy, když qubit měříme. Tento proces měření jsme přirovnali k přimáčknutí mince tak, aby ležela naplocho ve směru osy měření.

Zda se kvantový stav vůbec nachází v superpozici, závisí skutečně jen na pohledu pozorovatele. Jak jsi pravděpodobně již narazil(a), jsme svobodní ve volbě souřadnicového systému – xx, yy a zz mohou ukazovat podél libovolných tří vzájemně kolmých směrů. Pokud tedy máme superpozici 0 a 1 v jednom souřadnicovém systému, můžeme definovat nový souřadnicový systém – nebo ekvivalentně, novou „měřicí bázi" – ve které stav míří čistě ve směru +z+z, a proto není ve stavu superpozice. Když tedy říkáme, že qubit je v superpozici, musíme také odpovědět na otázku: „superpozice čeho?"

Tento modul možná opustíš s dojmem, že jsme právě odstranili veškeré tajemství z kvantové mechaniky. Koneckonců, jeden z údajně „nejpodivnějších" aspektů – stav superpozice qubitu – je ve skutečnosti tak jednoduchý jako trojrozměrný vektor. Mějme však na paměti, že mince je stále jen analogií a dokonce i Blochův vektor je pouze vizualizačním nástrojem pro výpočet pravděpodobností výsledků měření. Nemůžeme říci, co kvantový stav skutečně dělá, než je změřen. Protože ověření toho vyžaduje měření!

Toto dilema ohledně „pravé" povahy kvantového stavu a to, jak nám kvantový jev provázanosti může pomoci jej objasnit, budeme diskutovat v modulu o Bellově nerovnosti.

Otázky

Vyučující mohou požádat o verze těchto notebooků s klíči odpovědí a pokyny k jejich zařazení do běžných osnov vyplněním tohoto krátkého dotazníku o způsobu využití notebooků.

Klíčové pojmy:

  • Ačkoliv je měření qubitu v superpozici pravděpodobnostní – podobně jako hod mincí – samotný stav superpozice se chová jinak než hozená mince.
  • Hlavní rozdíl mezi klasickým pravděpodobnostním rozdělením a superpozicí spočívá v tom, že superpozice má fázovou koherenci, která jí umožňuje konstruktivně nebo destruktivně interferovat.
  • Stav jednoho izolovaného qubitu lze vizualizovat jako bod na takzvané „Blochově sféře", kde relativní amplitudy složek 0|0\rangle a 1|1\rangle určují polární úhel θ\theta a relativní fáze mezi těmito dvěma složkami určují azimutální úhel ϕ\phi.
  • Všechny jednoQubitové kvantové Gate lze chápat jako rotace vektoru na této sféře.

Otázky pravda/nepravda:

  1. P/N Kvantová superpozice je v podstatě totéž jako pravděpodobnostní jev v klasické fyzice, například hod mincí.

  2. P/N Délka Blochova vektoru popisujícího stav jednoho izolovaného qubitu je vždy 1.

  3. P/N JednoQubitové kvantové Gate nemění délku Blochova vektoru.

Otázky s výběrem odpovědi:

  1. Vyber správný Blochův vektor reprezentující stav Ψ=130+eiπ/4231|\Psi\rangle = \sqrt{\frac{1}{3}}|0\rangle + e^{i \pi / 4} \sqrt{\frac{2}{3}}|1\rangle:

Jsou zobrazeny čtyři Blochovy sféry. Ve variantě a vektor míří téměř podél +x, ve variantě b míří uprostřed mezi +x a +y a mírně pod rovinu xy, ve variantě c míří mezi +x a -y a mírně nad rovinu xy a ve variantě d míří podél -x.

  1. Blochova sféra popisuje u qubitu: (vyber vše, co platí)

    a. amplitudu

    b. provázanost s ostatními qubity

    c. fázi

    d. barvu

    e. pravděpodobnost výsledků měření

Diskusní otázky:

  1. Proč lze stav qubitu vizualizovat na Blochově sféře, ale pravděpodobnostní rozdělení hodu mincí nikoliv?

  2. Proč není mince letící vzduchem nejlepší analogií ke kvantovému stavu superpozice? Jaký aspekt superpozic tato analogie nezachycuje?

Úlohy pro pokročilé:

  1. Pomocí Qiskitu vytvoř Circuit, který transformuje stav 0|0\rangle do stavu 320+12ei5π61\frac{\sqrt{3}}{2}|0\rangle + \frac{1}{2}e^{i \frac{5\pi}{6}}|1\rangle