Přeskočit na hlavní obsah

Zkoumání neurčitosti

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 Qiskitu. Aby studenti mohli spouštět úlohy na skutečných kvantových počítačích, musí si 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 8 minut QPU času. Jde pouze o odhad – skutečná spotřeba se může lišit. Dvě časově náročné výpočty jsou v komentářích záhlaví takto označeny a lze je provést na simulátorech, pokud studenti nemají dostatek QPU času. Bez nich modul vyžaduje pouze přibližně 30 sekund QPU času.

# Added by doQumentation — required packages for this notebook
!pip install -q matplotlib 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ůvodce modulem od Dr. Katie McCormick níže, nebo klikni sem a sleduj ho na YouTube.


Úvod

O principu neurčitosti sis pravděpodobně slyšel/a i mimo své fyzikální kurzy. Běžné hovorové přeformulování neurčitosti zní: „Tím, že se na něco podíváš, to ovlivníš." To je jistě pravda. Fyzikálnější způsob popisu neurčitosti je ale ten, že existují určité fyzikální pozorovatelné veličiny, které jsou vzájemně neslučitelné – nelze je obě současně znát s libovolnou přesností. Mnoho studentů se poprvé setkává s dvojicí neslučitelných proměnných xx a pxp_x, tedy polohou podél osy xx a hybností podél tohoto směru. Pro tyto proměnné se omezení neurčitosti zapisuje jako ΔxΔpx2.\Delta x \Delta p_x \geq \frac{\hbar}{2}. Zde se Δx\Delta x nazývá „neurčitost xx", která má stejnou definici jako směrodatná odchylka ve statistice, a lze ji definovat jako Δx=x2x2.\Delta x = \sqrt{\langle x^2 \rangle - \langle x \rangle^2}. Δpx\Delta p_x je definována obdobně. Tuto relaci neurčitosti zde nebudeme odvozovat; upozorníme pouze na to, že je v souladu s naším chápáním klasických vln. Vlna s jednou dokonale přesnou frekvencí ff a vlnovou délkou λ\lambda by se šířila donekonečna jako dokonalá sinusoida. Kvantově mechanicky by to odpovídalo dokonalé znalosti hybnosti podle de Broglieovy hypotézy: λ=h/p\lambda = h/p. Abychom ale věděli, kdekde se částice s vlnovým charakterem nachází, musí se popisující vlna stát v prostoru ostřeji soustředěnou – například jako velmi úzká Gaussova funkce. Víme, že jakoukoli spojitou funkci, včetně takto ostře soustředěných vlnových funkcí, lze vyjádřit jako Fourierovu řadu sinusoid s různými vlnovými délkami. Jak se vlnová funkce stává ostřeji soustředěnou (a poloha je lépe známa), potřebujeme ve Fourierově řadě více členů, tedy směs více vlnových délek (a kvantově mechanicky tedy více hodnot hybnosti).

Jednodušeji řečeno: stav s dobře definovanou hybností (dokonalá sinusoida v prostoru) má velmi neurčitou polohu. Stav s dobře definovanou polohou (jako Diracovo delta rozdělení) má velmi neurčitou hybnost.

Existují i jiné veličiny, které vykazují takovou neslučitelnost. Například spin částice může mít dobře definovanou projekci podél jedné osy, přičemž o projekci na kolmou osu nevíme nic. Stav 0|0\rangle \sim |\uparrow\rangle (pro Qubit nebo spin-1/2 částici) má určitou projekci podél osy zz (hodnotu 1 v kontextu Qubitu a /2\hbar/2 v kontextu spin-1/2 částice). Tento stav však lze zapsat jako superpozici dvou stavů, z nichž každý má dobře definovanou projekci na osu xx: 0=12(+x+x)|0\rangle = \frac{1}{\sqrt{2}}(|+\rangle_x+|-\rangle_x) neboli ekvivalentně (10)=12[12(11)+12(11)].\begin{pmatrix} 1 \\ 0\end{pmatrix} = \frac{1}{\sqrt{2}}\left[\frac{1}{\sqrt{2}}\begin{pmatrix} 1 \\ 1\end{pmatrix}+\frac{1}{\sqrt{2}}\begin{pmatrix} 1 \\ -1\end{pmatrix}\right]. +x|+\rangle_x má dobře definovanou projekci na xx, stejně tak x|-\rangle_x. Pokud tedy určíme projekci stavu podél osy xx, neznáme projekci podél osy zz. A pokud určíme projekci na ose zz, neznáme projekci podél xx. Existují drobné rozdíly při diskusi v kontextu spinu a Qubitů. Obecně ale platí, že vlastní stavy Pauliho matic mají zajímavý vztah, který můžeme prozkoumat. V průběhu této lekce budeme experimentálně ověřovat svou intuici ohledně neurčitosti těchto neslučitelných veličin a budeme na kvantových počítačích IBM® ověřovat platnost relací neurčitosti.

Jednoduchá intuitivní zkouška

V tomto prvním experimentu a v celém modulu budeme používat rámec pro kvantové výpočty známý jako „Qiskit patterns", který rozděluje pracovní postupy do následujících kroků:

  • Krok 1: Mapování klasických vstupů na kvantový problém
  • Krok 2: Optimalizace problému pro kvantové spuštění
  • Krok 3: Spuštění pomocí Qiskit Runtime Primitives
  • Krok 4: Post-processing a klasická analýza

Tyto kroky budeme obecně dodržovat, i když je nemusíme vždy explicitně označovat.

Začněme načtením potřebných balíčků včetně Runtime primitiv. Zároveň vybereme nejméně vytížený dostupný kvantový počítač.

Níže je uveden kód pro uložení přihlašovacích údajů při prvním použití. Po uložení do svého prostředí tyto informace z notebooku smaž, aby nebyly náhodně sdíleny spolu s notebookem. Více informací najdeš v průvodcích Nastavení účtu IBM Cloud a Inicializace služby v nedůvěryhodném prostředí.

from numpy import pi

# 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 (
Batch,
SamplerV2 as Sampler,
EstimatorV2 as Estimator,
)

# Use the least busy backend
backend = service.least_busy(min_num_qubits=127)
print(backend.name)
ibm_sherbrooke

Pokud student vyčerpá dostupný čas na kvantových počítačích během lekce, lze níže uvedené řádky odkomentovat a použít pro nastavení simulátoru, který částečně napodobuje šumové chování výše vybraného kvantového počítače.

# Import an estimator, this time from qiskit (we will import from Runtime for real hardware)
from qiskit_aer.primitives import SamplerV2, EstimatorV2
from qiskit_aer.noise import NoiseModel

# Generate the noise model from the backend properties
noise_model = NoiseModel.from_backend(backend)

noisy_sampler = SamplerV2(options={"backend_options": {"noise_model": noise_model}})
noisy_estimator = EstimatorV2(options={"backend_options": {"noise_model": noise_model}})

Možná si vzpomeneš, že vlastní stav jednoho operátoru Z není vlastním stavem jiného operátoru X. Nyní to experimentálně pozorujeme měřením podél os xx a zz. Pro měření podél zz jednoduše použijeme qc.measure(), protože kvantové počítače IBM jsou konstruovány tak, aby měřily podél zz. Aby bylo možné měřit podél xx, musíme systém otočit tak, abychom efektivně přesunuli osu xx do orientace, podél níž měříme. Toho je dosaženo pomocí Hadamardova Gate. Pro měření podél yy je nutný podobný krok. Potřebné kroky jsou zde shrnuty pro přehlednost:

  • Měření podél zz: qc.measure()
  • Měření podél xx: qc.h() a pak qc.measure()
  • Měření podél yy: qc.sdg(), qc.h(), qc.s a pak qc.measure()

Krok 1: Mapování klasických vstupů na kvantový problém

V tomto případě krok mapování spočívá jednoduše ve vyjádření výše popsaných měření a rotací v kvantovém Circuit:

# Step 1: Map

# Import some general packages
from qiskit import ClassicalRegister, QuantumCircuit, QuantumRegister

# Define registers
qr = QuantumRegister(1, "q")
cr = ClassicalRegister(2, "c")
qc = QuantumCircuit(qr, cr)

# Add a first measurement
qc.measure(qr, cr[0])
qc.barrier()

# Change basis so that measurements made on quantum computer which normally tell us about z, now tell us about x.
qc.h(qr)

# Add a second measurement
qc.measure(qr, cr[1])

qc.draw("mpl")

Output of the previous code cell

Krok 2: Optimalizace problému pro kvantové spuštění

Tento krok vezme operace, které chceme provést, a vyjádří je v termínech funkcionality konkrétního kvantového počítače. Zároveň mapuje náš problém na topologii kvantového počítače.

# 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)

Krok 3: Spuštění pomocí Qiskit Runtime Primitives

Pro sběr statistik z měření můžeme použít Sampler. Primitivum Sampler nakonfigurujeme tak, aby běželo na skutečném kvantovém počítači, pomocí mode = backend. Existují i jiné režimy pro jiné pracovní postupy, jeden z nich použijeme níže. Sampler se spustí voláním jeho metody run() se seznamem „PUBů" (Primitive Unified Blocs). Každý PUB obsahuje až tři hodnoty, které společně definují výpočetní jednotku práce pro Estimator: circuits, observables, parameters. Lze také poskytnout seznam circuits, seznam observables a seznam parameters. Více informací najdeš v části Přehled PUBů.

Chceme spustit výpočet na skutečném kvantovém počítači, abychom prováděli skutečný experiment z kvantové fyziky. Pokud vyčerpáš přidělený čas na skutečných kvantových počítačích, můžeš níže uvést kód pro kvantový počítač do komentáře a odkomentovat kód pro spuštění na simulátoru.

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

sampler = Sampler(mode=backend)
pubs = [qc_isa]
job = sampler.run(pubs)
res = job.result()

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

# Run the job on the Aer simulator with noise model from real backend

# job = noisy_sampler.run([qc_isa])
# res=job.result()
# counts=res[0].data.c.get_counts()

Krok 4: Post-processing

Toto je obzvláště jednoduchý případ post-processingu, při kterém jednoduše vizualizujeme počty.

Všimni si, že Qiskit řadí Qubity, měření a další věci tak, že položku s nejnižším číslem uvádí jako poslední / napravo – tato konvence se nazývá „little-endian". To znamená, že sloupec označený níže jako „10" odpovídá počtům, při nichž první měření vrátilo „0" a druhé měření vrátilo „1".

# Step 4: Post-process

from qiskit.visualization import plot_histogram

plot_histogram(counts)

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

Pokud ti tato konvence nevyhovuje, můžeš použít marginal_counts a vizualizovat výsledky každého měření samostatně:

from qiskit.result import marginal_counts

plot_histogram(
marginal_counts(counts, indices=[0]), title="Counts after first measurement"
)

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

plot_histogram(
marginal_counts(counts, indices=[1]), title="Counts after second measurement"
)

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

Ve výchozím nastavení jsou stavy v Qiskitu inicializovány do stavu 0|0\rangle. Není tedy překvapením, že téměř všechna první měření dala výsledek 0|0\rangle. Všimni si však, že ve druhém měření (které poskytuje informaci o projekcích stavu na osu xx) byl výsledek téměř rovnoměrně rozdělen. Zdá se, že stav, který dává velmi předvídatelný výsledek měření podél zz, nám dává velmi nepředvídatelnou sadu výsledků pro měření podél xx. Pojďme to prozkoumat.

Co se stane, pokud provedeme měření v opačném pořadí? Mohli bychom začít tím, že pomocí Hadamardovy Gate získáme statistiku pravděpodobnosti změření 0|0\rangle v ±x|\pm\rangle_x. Poté při druhém měření převedeme základ zpět na zz pomocí druhé Hadamardovy Gate.

# Step 1:

# Define registers
qr = QuantumRegister(1, "q")
cr = ClassicalRegister(2, "c")
qc = QuantumCircuit(qr, cr)

# Change basis to measure along x.
qc.h(qr)
qc.measure(qr, cr[0])
qc.barrier()

# Change our basis back to z and make a second measurement
qc.h(qr)
qc.measure(qr, cr[1])

qc.draw("mpl")

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

# Step 2: Transpile the circuit for running on a quantum computer

pm = generate_preset_pass_manager(target=target, optimization_level=3)
qc_isa = pm.run(qc)
# Step 3: Run the job on a real quantum computer

sampler = Sampler(mode=backend)
pubs = [qc_isa]
job = sampler.run(pubs)
res = job.result()
counts = res[0].data.c.get_counts()

# Run the job on the Aer simulator with noise model from real backend
# job = noisy_sampler.run([qc_isa])
# res=job.result()
# counts=res[0].data.c.get_counts()
# Step 4: Post-process
from qiskit.visualization import plot_histogram

plot_histogram(counts)

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

Zde máme zdánlivě ještě méně předvídatelnosti! Dříve jsme alespoň věděli, jaký bude výsledek prvního měření, nyní máme poměrně rovnoměrné rozdělení přes všechny možné stavy. Není příliš těžké pochopit, proč k tomu došlo. Začali jsme ve stavu 0|0\rangle, který je směsí 50–50 stavů +x|+\rangle_x a x|-\rangle_x podle vztahu 0=12(+x+x)|0\rangle=\frac{1}{\sqrt{2}}(|+\rangle_x+|-\rangle_x) Takže je zřejmé, že pravděpodobnost naměření stavu + nebo − (mapovaných na 0 a 1 v grafu) při prvním měření by měla být stejná. Měření podél xx zkolabuje stav buď do vlastního stavu +x|+\rangle_x, nebo do vlastního stavu x|-\rangle_x. Každý z těchto stavů je směsí 50–50 stavů 0|0\rangle a 1|1\rangle podle vztahů +x=12(0+1)|+\rangle_x = \frac{1}{\sqrt{2}}(|0\rangle+|1\rangle) x=12(01)|-\rangle_x = \frac{1}{\sqrt{2}}(|0\rangle-|1\rangle) Jakmile je systém ve vlastním stavu xx, jsou výsledky měření podél zz zřejmě 0|0\rangle i 1|1\rangle, a to přibližně se stejnou pravděpodobností. Náš první příklad nám tedy ukázal, že některé stavy budou mít velmi předvídatelné výsledky určitých měření, ale nepředvídatelné výsledky jiných měření. Aktuální příklad ukazuje, že to může být ještě horší. Existují stavy, které mohou dávat nepředvídatelné výsledky pro obě měření, i když pouze prohodíme jejich pořadí. Pojďme prozkoumat, jak jistá nebo nejistá je daná veličina pro určitý stav.

Výpočet nejistoty

Tuto nejistotu, neboli rozptyl, lze kvantifikovat. „Nejistota" je často definována jako odmocnina „rozptylu" rozdělení. Jinak řečeno, nejistota pro pozorovatelnou veličinu SS se označuje ΔS\Delta S a je dána vztahem

(ΔS)2(SS)2(ΔS)2=S22SS+S2(ΔS)2=S2S2\begin{aligned} (\Delta S)^2 & \equiv \langle (S - \langle S \rangle)^2 \rangle\\ (\Delta S)^2 & = \langle S^2 - 2 S \langle S \rangle +\langle S \rangle^2 \rangle\\ (\Delta S)^2 & = \langle S^2 \rangle - \langle S \rangle^2 \end{aligned}

Pro případ Pauliho matic, pro které platí S2=IS^2 = I, se tento výraz zjednodušší na

(ΔS)2=1S2(\Delta S)^2 = 1 - \langle S \rangle^2

Aplikujme to na konkrétní příklad. Začněme stavem ψ=+y=12(1i),|\psi\rangle = |+\rangle_y = \frac{1}{\sqrt{2}}\begin{pmatrix} 1 \\ i \end{pmatrix}, a určeme nejistotu pozorovatelné veličiny XX v tomto stavu.

Otestuj své znalosti

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

Vypočítej neurčitost XX ve stavu +y=+i|+\rangle_y = |+i\rangle ručně.

Odpověď:

ΔX=+iX2+i+iX+i2\Delta X =\sqrt{\langle+i| X^2 |+i\rangle - \langle+i| X |+i\rangle^2}

V daném stavu to dává:

ΔX=12(1i)(0110)(0110)12(1i)(12(1i)(0110)12(1i))2ΔX=12(1i)(1001)(1i)(12(1i)(i1))2ΔX=12(1i)(1i)(12(0)))2ΔX=12(2)=1\begin{aligned} \Delta X & =\sqrt{\frac{1}{\sqrt{2}}\begin{pmatrix}1 & -i\end{pmatrix} \begin{pmatrix}0 & 1 \\ 1 & 0\end{pmatrix} \begin{pmatrix}0 & 1 \\ 1 & 0\end{pmatrix} \frac{1}{\sqrt{2}}\begin{pmatrix}1 \\ i\end{pmatrix} - \left(\frac{1}{\sqrt{2}}\begin{pmatrix}1 & -i\end{pmatrix} \begin{pmatrix}0 & 1 \\ 1 & 0\end{pmatrix} \frac{1}{\sqrt{2}}\begin{pmatrix}1 \\ i\end{pmatrix}\right)^2}\\ \Delta X & =\sqrt{\frac{1}{2}\begin{pmatrix}1 & -i\end{pmatrix} \begin{pmatrix}1 & 0 \\ 0 & 1\end{pmatrix} \begin{pmatrix}1 \\ i\end{pmatrix} - \left(\frac{1}{2}\begin{pmatrix}1 & -i\end{pmatrix} \begin{pmatrix}i \\ 1\end{pmatrix}\right)^2}\\ \Delta X & =\sqrt{\frac{1}{2}\begin{pmatrix}1 & -i\end{pmatrix} \begin{pmatrix}1 \\ i\end{pmatrix} - \left(\frac{1}{2}(0))\right)^2}\\ \Delta X & =\sqrt{\frac{1}{2}(2)} = 1 \end{aligned}

Libovolný počáteční stav můžeme vytvořit pomocí qc.initialize(). Všimni si, že syntaxe pro imaginární jednotku je zde 1j1j.

# Step 1: Map the problem into a quantum circuit

from qiskit.quantum_info import SparsePauliOp
import numpy as np

obs = SparsePauliOp("X")

# Define registers
qr = QuantumRegister(1, "q")
cr = ClassicalRegister(1, "c")
qc = QuantumCircuit(qr, cr)

# Initialize the state
qc.initialize([1, 1j] / np.sqrt(2))

# Step 2: Transpile the circuit

pm = generate_preset_pass_manager(target=target, optimization_level=3)
qc_isa = pm.run(qc)
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 = noisy_estimator.run([[qc_isa,obs_isa]])
# res=job.result()

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

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

Podle naší rovnice výše, (ΔX)2=1X2=1(0.0015...)2ΔX=0.999...(\Delta X)^2 = 1 - \langle X \rangle^2 = 1-(0.0015...)^2 \rightarrow \Delta X = 0.999... Zůstaňme u stejného stavu, ale tentokrát zjistíme střední hodnotu ZZ:

# Step 1: Map the problem into a quantum circuit

obs = SparsePauliOp("Z")

# Define registers
qr = QuantumRegister(1, "q")
cr = ClassicalRegister(1, "c")
qc = QuantumCircuit(qr, cr)

# Initialize the state to |+>_y
qc.initialize([1, 1j] / np.sqrt(2))

# Step 2: Transpile the circuit

pm = generate_preset_pass_manager(target=target, optimization_level=3)
qc_isa = pm.run(qc)
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(pubs)
res = job.result()

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

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

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

Mohli bychom provést stejné výpočty jako předtím, ale viděli bychom, že rozptyl je opět velmi blízký 1,0. Mohli bychom tedy konstatovat, že ΔXΔZ1,0\Delta X \Delta Z \approx 1{,}0. Pro námi zvolený stav to skutečně přibližně platí. Ale lze toho dosáhnout lépe? Nebo hůře?

Vzpomeň si, že mezi polohou v jednom směru, x,x, a hybností ve stejném směru, px,p_x, platí relace neurčitosti. Pro tyto veličiny je nejznámější tvar pravděpodobně ΔxΔpx/2\Delta x \Delta p_x \geq \hbar/2 Pokud si pamatujeme jen tohle, mohli bychom být v pokušení myslet si, že ΔX\Delta X a ΔZ\Delta Z mají také takové fundamentální omezení neurčitosti. Možná je nemožné, aby součin ΔXΔZ\Delta X \Delta Z dosáhl nuly? Zkusme jiný stav a uvidíme, zda to platí. Tentokrát použijeme ψ=12(11).|\psi\rangle = \frac{1}{\sqrt{2}}\begin{pmatrix} 1 \\ 1 \end{pmatrix}. Podívejme se, co se stane. Všimni si, že v níže uvedeném kódu může Estimator přijmout dvě sady obvodů a pozorovatelných veličin ve stejném odeslaném jobu.

# Step 1: Map the problem into a quantum circuit

obs1 = SparsePauliOp("X")
obs2 = SparsePauliOp("Z")

# Define registers

qr = QuantumRegister(1, "q")
cr = ClassicalRegister(1, "c")
qc = QuantumCircuit(qr, cr)

# Initialize the state
qc.initialize([1, 1] / np.sqrt(2))

# Step 2: Transpile the circuit

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

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

with Batch(backend=backend) as batch:
estimator = Estimator(mode=batch)
pubs = [(qc_isa, obs1_isa), (qc_isa, obs2_isa)]
job = estimator.run(pubs)
res = job.result()
batch.close()

# Run the job on the Aer simulator with noise model from real backend

# job = noisy_estimator.run([[qc,obs1],[qc,obs2]])
# res=job.result()

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

print("The expectation value of the first observable is: ", res[0].data.evs)
print("The expectation value of the second observable is: ", res[1].data.evs)
The expectation value of the first observable is:  1.0011036174126302
The expectation value of the second observable is: 0.0029429797670141016

Střední hodnota XX by měla být blízká 1,0, ale neměla by překročit 1,0. Neznepokojuj se, pokud ji překročí o velmi malou částku. To lze přičíst faktorům, jako je šum nebo chyba čtení. Ačkoli se jedná o velmi důležité téma, prozatím ho můžeme ignorovat.

Získali jsme střední hodnotu XX velmi blízkou 1,0 (což odpovídá velmi nízkému rozptylu pro XX). Díky tomu je součin obou rozptylů poměrně malý:

ΔXΔZ=1(0.9853)2×1(0.00195)2=0.171.\Delta X \Delta Z = \sqrt{1-(0.9853)^2} \times \sqrt{1-(-0.00195)^2} = 0.171.

Přestože to není přesně nula, tato hodnota je ve srovnání s vlastními hodnotami Pauliho operátorů (±1\pm 1) malá. Možná si vzpomínáš, že relaci neurčitosti mezi lineární polohou a hybností lze zapsat jinak — s explicitním použitím komutátoru operátorů xx a pxp_x:

ΔxΔpx12[x,px]\Delta x \Delta p_x \geq \frac{1}{2}|\langle [x,p_x] \rangle|

kde

[x,px]=xpxpxx[x,p_x] = xp_x-p_xx

je komutátor xx a pxp_x.

Tento tvar lze nejsnáze rozšířit na Pauliho operátory. Obecně platí pro dva operátory AA a BB:

ΔAΔB12[A,B].\Delta A \Delta B \geq \frac{1}{2}|\langle [A,B] \rangle|.

A v případě Pauliho matic XX a ZZ potřebujeme [X,Z][X,Z], abychom mohli vypočítat

ΔXΔZ12[X,Z].\Delta X \Delta Z \geq \frac{1}{2}|\langle [X,Z] \rangle|.

Ukážeme to zde a podobné výpočty necháváme čtenáři jako cvičení:

[X,Z]=XZZX=(0110)(1001)(1001)(0110)[X,Z] = XZ-ZX = \begin{pmatrix}0 & 1 \\ 1 & 0\end{pmatrix}\begin{pmatrix}1 & 0 \\ 0 & -1\end{pmatrix}-\begin{pmatrix}1 & 0 \\ 0 & -1\end{pmatrix}\begin{pmatrix}0 & 1 \\ 1 & 0\end{pmatrix} [X,Z]=(0110)(0110)=2(0110)[X,Z] = \begin{pmatrix}0 & -1 \\ 1 & 0\end{pmatrix}-\begin{pmatrix}0 & 1 \\ -1 & 0\end{pmatrix} = 2\begin{pmatrix}0 & -1 \\ 1 & 0\end{pmatrix}

Toto je zcela přijatelná odpověď, ale jedním dalším krokem vidíme

[X,Z]=2i(0ii0)=2iY[X,Z] = -2i\begin{pmatrix}0 & -i \\ i & 0\end{pmatrix}=-2iY

Naše relace neurčitosti se tak stává

ΔXΔZY.\Delta X \Delta Z \geq |\langle Y \rangle|.

Ověř své porozumění

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

Urči [X,Y][X,Y] a [Y,Z][Y,Z]. Pomocí výsledků zapiš relace neurčitosti mezi XX a YY a mezi YY a ZZ.

Odpověď:

[X,Y]=XYYX=(0110)(0ii0)(0ii0)(0110)=2(i00i)=2iZ[X,Y] = XY-YX = \begin{pmatrix}0 & 1 \\ 1 & 0\end{pmatrix}\begin{pmatrix}0 & -i \\ i & 0\end{pmatrix}-\begin{pmatrix}0 & -i \\ i & 0\end{pmatrix}\begin{pmatrix}0 & 1 \\ 1 & 0\end{pmatrix} = 2 \begin{pmatrix}i & 0 \\ 0 & -i\end{pmatrix}=2iZ[Y,Z]=YZZY=(0ii0)(1001)(1001)(0ii0)=2(0ii0)=2iX[Y,Z] = YZ-ZY = \begin{pmatrix}0 & -i \\ i & 0\end{pmatrix}\begin{pmatrix}1 & 0 \\ 0 & -1\end{pmatrix}-\begin{pmatrix}1 & 0 \\ 0 & -1\end{pmatrix}\begin{pmatrix}0 & -i \\ i & 0\end{pmatrix} = 2 \begin{pmatrix}0 & i \\ i & 0\end{pmatrix}=2iX

V kombinaci s obecnou relací neurčitosti dostaneme

ΔXΔYZ,\Delta X \Delta Y \geq |\langle Z \rangle|,ΔYΔZX.\Delta Y \Delta Z \geq |\langle X \rangle|.

Ověření konzistence

Než budeme pokračovat, zkontrolujeme, zda je to v souladu s naším předchozím zjištěním. Použili jsme stav ψ=12(11).|\psi\rangle = \frac{1}{\sqrt{2}}\begin{pmatrix} 1 \\ 1 \end{pmatrix}. A zjistili jsme, že ΔXΔZ=0.171.\Delta X \Delta Z = 0.171. Nyní víme, že tento součin by měl být větší nebo roven

Y=12(11)(0ii0)12(11)|\langle Y \rangle|=\frac{1}{\sqrt{2}}\begin{pmatrix} 1 & 1 \end{pmatrix}\begin{pmatrix}0 & -i \\ i & 0\end{pmatrix}\frac{1}{\sqrt{2}}\begin{pmatrix} 1 \\ 1 \end{pmatrix} Y=12(11)(ii)=12(i+i)=0.|\langle Y \rangle| = \frac{1}{2}\begin{pmatrix} 1 & 1 \end{pmatrix}\begin{pmatrix} -i \\ i \end{pmatrix} = \frac{1}{2}(-i+i) = 0.

Skutečně tedy platí ΔXΔZ=0.171Y=0\Delta X \Delta Z = 0.171 \geq |\langle Y \rangle|=0. Pomocí následujících otázek si vytvoř intuici pro tato zjištění:

Ověř své porozumění

Přečti si otázky níže, zamysli se nad odpověďmi a pak klikni na trojúhelníky, aby se zobrazila řešení.

Odpověz na následující body jako celek:

(a) U jakých stavů bys očekával(a) nulovou neurčitost v XX?

(b) U jakých stavů bys očekával(a) nulovou neurčitost v ZZ?

(c) V jakých stavech bys získal(a) nulovou střední hodnotu Y\langle Y \rangle?

(d) Jsou odpovědi na výše uvedené otázky konzistentní s případem ΔXΔZY\Delta X \Delta Z \geq |\langle Y \rangle|?

(e) Napiš kód, který to explicitně ověří pomocí estimatoru.

Odpovědi:

(a) Mohli bychom očekávat, že vlastní stavy operátoru XX dají nulovou neurčitost v XX. Skutečně, pro ψ=+x|\psi\rangle = |+\rangle_x platí ΔX=1X2=112=0.\Delta X = \sqrt{1-\langle X \rangle^2} = \sqrt{1-1^2} = 0.

(b) Mohli bychom očekávat, že vlastní stavy operátoru ZZ dají nulovou neurčitost v ZZ. Skutečně, pro ψ=1|\psi\rangle = |1\rangle platí ΔZ=1Z2=1(1)2=0.\Delta Z = \sqrt{1-\langle Z \rangle^2} = \sqrt{1-(-1)^2} = 0.

(c) Očekáváme Y=0\langle Y \rangle=0 pro stavy, které při měření dávají kladnou projekci na osu yy stejně často jako zápornou. Patří sem vlastní stavy XX a ZZ.

(d) Ano. U vlastních stavů XX nebo ZZ bychom očekávali velmi malou hodnotu součinu neurčitostí ΔXΔZ\Delta X \Delta Z: ΔXΔZ0.\Delta X \Delta Z \approx 0. To může platit, protože pro tytéž stavy bychom rovněž očekávali Y=0\langle Y \rangle=0. Relace neurčitosti tak může být splněna.

(e) Následující kód by to ověřil:

obs1 = SparsePauliOp.from_list(
[("X", 1.000)]
)
obs2 = SparsePauliOp.from_list(
[("Y", 1.000)]
)
obs3 = SparsePauliOp.from_list(
[("Z", 1.000)]
)
qc = QuantumCircuit(1,1)
qc.ry(pi/2,0)

job = estimator.run([(qc, [[obs1], [obs2], [obs3]])], precision=0.001)
res=job.result()

Výsledky vrátí všechny střední hodnoty. Abychom je všechny získali a vypočítali neurčitosti, mohli bychom použít:

xs=res[0].data.evs[0]
ys=abs(res[0].data.evs[1])
zs=res[0].data.evs[2]

import math
prodxz=((1-xs[i]*xs[i])**0.5)*(1-zs[i]*zs[i])**0.5

Odpověz na následující body jako celek:

(a) Dokážeš si představit stav, ve kterém by střední hodnota Y\langle Y \rangle byla velká?

(b) Očekával(a) bys u téhož stavu velkou, nebo malou neurčitost v XX?

(c) Očekával(a) bys u téhož stavu velkou, nebo malou neurčitost v ZZ?

(d) Jsou odpovědi na výše uvedené otázky konzistentní s případem ΔXΔZY\Delta X \Delta Z \geq |\langle Y \rangle|?

(e) Napiš kód, který to explicitně ověří pomocí estimatoru.

Odpovědi:

(a) Očekáváme Y1\langle Y \rangle\approx 1 pro vlastní stav YY: +y|+\rangle_y.

(b) Mohli bychom očekávat velkou neurčitost XX ve stavu +y|+\rangle_y, protože měření XX v tomto stavu by dávalo kladný a záporný výsledek se stejnou četností/pravděpodobností.

(c) Mohli bychom očekávat velkou neurčitost ZZ ve stavu +y|+\rangle_y, protože měření ZZ v tomto stavu by dávalo kladný a záporný výsledek se stejnou četností/pravděpodobností.

(d) Ano. U vlastních stavů YY, a konkrétně u +y|+\rangle_y, bychom očekávali velkou hodnotu součinu neurčitostí ΔXΔZ\Delta X \Delta Z. U téhož stavu bychom rovněž očekávali Y1\langle Y \rangle\approx 1. Tedy jak Y\langle Y \rangle, tak ΔXΔZ\Delta X \Delta Z jsou v tomto stavu celkem velké a je přijatelné, že relace neurčitosti může být opět splněna.

(e) Následující kód by to ověřil:

obs1 = SparsePauliOp.from_list(
[("X", 1.000)]
)
obs2 = SparsePauliOp.from_list(
[("Y", 1.000)]
)
obs3 = SparsePauliOp.from_list(
[("Z", 1.000)]
)
qc = QuantumCircuit(1,1)
qc.rx(-pi/2,0)

job = estimator.run([(qc, [[obs1], [obs2], [obs3]])], precision=0.001)
res=job.result()

Výsledky vrátí všechny střední hodnoty. Abychom je všechny získali a vypočítali neurčitosti, mohli bychom použít:

xs=res[0].data.evs[0]
ys=abs(res[0].data.evs[1])
zs=res[0].data.evs[2]

import math
prodxz=((1-xs[i]*xs[i])**0.5)*(1-zs[i]*zs[i])**0.5

Testování relací neurčitosti

Výše uvedený test prokázal platnost relace neurčitosti pouze pro jediný výběr stavového vektoru ψ=+x|\psi\rangle = |+\rangle_x. Abychom se přesvědčili, že je to obecně v souladu s experimentem, měli bychom provést podobné výpočty pomocí Estimatoru pro mnoho různých stavových vektorů. Začneme tím, že otočíme náš stavový vektor pryč od osy zz pomocí Gate RY, čímž vytvoříme různé počáteční stavy s parametrem θ\theta.

# The calculation below uses approximately 3-4 minutes of QPU time.
# Step 1: Map the problem into a quantum circuit

from qiskit.circuit import Parameter
import numpy as np

# Specify observables
obs1 = SparsePauliOp("X")
obs2 = SparsePauliOp("Y")
obs3 = SparsePauliOp("Z")

# Define registers
qr = QuantumRegister(1, "q")
cr = ClassicalRegister(1, "c")
qc = QuantumCircuit(qr, cr)

# Rotate away from |0>
theta = Parameter("θ")
qc.ry(theta, 0)

params = np.linspace(0, 2, num=21)

# Step 2: Transpile the circuit

pm = generate_preset_pass_manager(target=target, optimization_level=3)
qc_isa = pm.run(qc)
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

with Batch(backend=backend) as batch:
estimator = Estimator(mode=batch)
pubs = [(qc_isa, [[obs1_isa], [obs2_isa], [obs3_isa]], [params])]
job = estimator.run(pubs, precision=0.01)
res = job.result()

batch.close()

# Run the job on the Aer simulator with noise model from real backend

# job = noisy_estimator.run([(qc, [[obs1], [obs2], [obs3]], [params])])
# res=job.result()
# Step 4: Post-processing and classical analysis.
xs = res[0].data.evs[0]
ys = abs(res[0].data.evs[1])
zs = res[0].data.evs[2]

# Calculate uncertainties

delx = []
delz = []
prodxz = []
for i in range(len(xs)):
delx.append(abs((1 - xs[i] * xs[i])) ** 0.5)
delz.append(abs((1 - zs[i] * zs[i])) ** 0.5)
prodxz.append(delx[i] * delz[i])
# Here we can plot the results from this simulation.
import matplotlib.pyplot as plt

plt.plot(params, delx, label=r"$\Delta$ X")
plt.plot(params, ys, label=r"$\langle$ Y $\rangle$")
plt.plot(params, delz, label=r"$\Delta$ Z")
plt.plot(params, prodxz, label=r"$\Delta$X $\Delta$Z")
plt.xlabel(r"$\theta$")
plt.ylabel("Expectation/Uncertainty Values")
plt.legend()
plt.show()

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

Všimni si, že červená křivka (ΔXΔZ)(\Delta X \Delta Z) je vždy větší než oranžová křivka Y.\langle Y \rangle. Někdy součin neurčitostí klesne a přiblíží se limitu, jindy stoupne a od limitu se vzdálí, ale relaci neurčitosti vždy splňuje.

Tento test relace neurčitosti ovšem nemusí být nejlepší, protože naše mez Y\langle Y \rangle je vždy velmi blízko nule. Použijme kvantový stav s větší projekcí na vlastní stavy YY. Konkrétně budeme stále otáčet 0|0\rangle dolů od osy zz o různé úhly, ale tentokrát výsledný stav ještě otočíme kolem osy zz o určitý úhel, třeba π/4\pi/4, a uvidíme, co se stane.

# The calculation below uses approximately 3-4 minutes of QPU time.
from qiskit.circuit import Parameter
import numpy as np

# Step 1: Map the problem to a quantum circuit

# Specify observables
obs1 = SparsePauliOp("X")
obs2 = SparsePauliOp("Y")
obs3 = SparsePauliOp("Z")

# Define registers
qr = QuantumRegister(1, "q")
cr = ClassicalRegister(1, "c")
qc = QuantumCircuit(qr, cr)

# Rotate away from |0> along one plane, and then along a transverse direction.
theta = Parameter("θ")
qc.ry(theta, 0)
qc.rz(pi / 4, 0)

params = np.linspace(0, 2, num=21)

# Step 2: Transpile the circuit

pm = generate_preset_pass_manager(target=target, optimization_level=3)
qc_isa = pm.run(qc)

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

with Batch(backend=backend) as batch:
estimator = Estimator(mode=batch)
pubs = [(qc_isa, [[obs1_isa], [obs2_isa], [obs3_isa]], [params])]
job = estimator.run(pubs, precision=0.01)
res = job.result()

batch.close()

# Run the job on the Aer simulator with noise model from real backend

# job = noisy_estimator.run([(qc, [[obs1], [obs2], [obs3]], [params])])
# res=job.result()
# Step 4: Post-processing and classical analysis.
xs = res[0].data.evs[0]
ys = abs(res[0].data.evs[1])
zs = res[0].data.evs[2]

# Calculate uncertainties

delx = []
delz = []
prodxz = []
for i in range(len(xs)):
delx.append(abs((1 - xs[i] * xs[i])) ** 0.5)
delz.append(abs((1 - zs[i] * zs[i])) ** 0.5)
prodxz.append(delx[i] * delz[i])
# Here we can plot the results from this simulation.
import matplotlib.pyplot as plt

plt.plot(params, delx, label=r"$\Delta$ X")
plt.plot(params, ys, label=r"$\langle$ Y $\rangle$")
plt.plot(params, delz, label=r"$\Delta$ Z")
plt.plot(params, prodxz, label=r"$\Delta$X $\Delta$Z")
plt.xlabel(r"$\theta$")
plt.ylabel("Expectation/Uncertainty Values")
plt.legend()
plt.show()

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

Nyní vidíme, že mez neurčitosti (ΔXΔZ)(\Delta X \Delta Z) je opravdu prověřována! Červená křivka se k oranžové přibližuje mnohem více než dříve. Ve skutečnosti by v nepřítomnosti šumu byla relace neurčitosti přesně saturována ((ΔXΔZ)=Y(\Delta X \Delta Z) = \langle Y \rangle) v jednom bodě. V přítomnosti šumu a chyby čtení by nemělo překvapit, pokud běh občas vykáže (ΔXΔZ)(\Delta X \Delta Z) velmi mírně větší než Y.\langle Y \rangle. Nejde o skutečné porušení principu neurčitosti — je to jen artefakt nenulové chyby.

Ověř si porozumění

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

Vysvětli, jak bys to dotáhl do absolutního extrému a maximalizoval Y\langle Y \rangle?

Odpověď:

Kód aktuálně obsahuje řádky, které rotují výchozí počáteční stav 0|0\rangle od osy zz o parametrizovaný úhel θ\theta a pak také kolem osy zz o úhel π/4\pi/4, čímž se stavový vektor přesune částečně směrem k ose yy.

qc.ry(theta,0)

qc.rz(pi/4,0)

Mohli bychom změnit rotaci kolem zz z π/4\pi/4 na π/2\pi/2, čímž bychom stav přesunuli celý až do vlastního stavu YY:

qc.ry(theta,0)

qc.rz(pi/2,0)

Žádné další změny by nebyly potřeba.

Uprav kód nebo ho zkopíruj a implementuj tuto kontrolu relace neurčitosti s maximalizovanou střední hodnotou Y. Platí relace neurčitosti?

Odpověď:

Použili bychom přesně kód z výše uvedeného příkladu, přičemž bychom nahradili

qc.rz(pi/4,0).

za

qc.rz(pi/2,0)

Výsledný graf by měl vypadat jako ten níže a ano, princip neurčitosti by měl stále platit.

Graf porovnávající neurčitost s maximální střední hodnotou operátoru Y.

Uprav výše uvedený kód tak, aby vznikl podobný graf, který na základě měření na kvantovém počítači ukáže, že součin ΔXΔY\Delta X \Delta Y se chová správně. Zvol libovolnou sadu stavů.

Odpověď:

Použili bychom přesně kód z výše uvedeného příkladu, a vlastně bychom mohli využít stejné výsledky jako výše – jen bychom pomocí středních hodnot vypočítali různé neurčitosti. Například bychom mohli použít

xs=res[0].data.evs[0]
ys=res[0].data.evs[1]
zs=abs(res[0].data.evs[2])
import math
delx = []
dely = []
prodxy=[]
for i in range(len(xs)):
delx.append((1-xs[i]*xs[i])**0.5)
dely.append((1-ys[i]*ys[i])**0.5)
prodxy.append(((1-xs[i]*xs[i])**0.5)*(1-ys[i]*ys[i])**0.5)

a mohli bychom vykreslit

import matplotlib.pyplot as plt
plt.plot(params, delx, label=r'$\Delta$ X')
plt.plot(params, dely, label=r'$\langle$ Y $\rangle$')
plt.plot(params, zs, label=r'$\Delta$ Z')
plt.plot(params, prodxy, label=r'$\Delta$X $\Delta$Z')
plt.xlabel(r'$\theta$')
plt.ylabel('Expectation/Uncertainty Values')
plt.legend()
plt.show()

Výzva: Napiš kód, který prochází mnoho hodnot ϕ\phi, stejně jako jsme procházeli mnoho hodnot θ\theta, a vytvoř 3D graf ukazující, že relace neurčitosti není nikdy porušena. Zvol libovolné observabely.

Otázky

Instruktoři mohou požádat o verze těchto notebooků s klíčem k odpovědím a pokyny k zařazení do běžných osnov vyplněním tohoto krátkého dotazníku o tom, jak jsou notebooky využívány.

Klíčové pojmy:

  • Existují relace neurčitosti mezi mnoha dvojicemi fyzikálních observabelů, včetně polohy a hybnosti a složek spinu.
  • Pauliho matice spolu nekomutují. To je matematickým odrazem skutečnosti, že ne všechny složky spinu lze současně znát či určit.
  • Kvantové výpočty hojně využívají Pauliho operátory/matice, proto je užitečné znát relace neurčitosti pro Pauliho operátory i úzce příbuzné spinové operátory.
  • Obecný vzorec pro neurčitost dvou operátorů AA a BB je ΔAΔB12[A,B].\Delta A \Delta B \geq \frac{1}{2}|\langle [A,B] \rangle|.
  • Vlastní stav a|a\rangle nějakého operátoru AA dává nulovou neurčitost fyzikální observabely přidružené k tomuto operátoru. Dokonce i experimentálně platí aAa0.\langle a|A|a\rangle \approx 0.
  • Vlastní stav a|a\rangle nějakého operátoru AA dá větší neurčitost pro operátor BB, který s AA nekomutuje.
  • Experimentální výsledky z reálného kvantového počítače potvrzují intuici, kterou získáváme z maticových reprezentací fyzikálních operátorů.

Otázky pravda/nepravda:

  1. P/N Lze současně měřit XX a YY, ale ne ZZ.
  2. P/N Lze současně měřit XX a ZZ, ale ne YY.
  3. P/N Operátory lineární polohy a lineární hybnosti spolu nekomutují.
  4. P/N Kvantové počítače IBM měří standardně podél ZZ, takže pro měření v jakémkoli jiném směru je nutné provést rotaci.
  5. P/N Circuit níže efektivně měří nejprve ZZ a poté XX.

Schéma Circuit znázorňující měření, Hadamardův Gate a poté další měření.

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

  1. Diagram níže demonstruje kterou z následujících relací neurčitosti?

    • a. ΔXΔYZ\Delta X \Delta Y \geq |\langle Z \rangle|
    • b. ΔYΔZX\Delta Y \Delta Z \geq |\langle X \rangle|
    • c. ΔZΔXY\Delta Z \Delta X \geq |\langle Y \rangle|
    • d. Žádnou z výše uvedených

Graf porovnávající neurčitost s maximální střední hodnotou operátoru Y.

  1. Jaká je standardní posloupnost kroků pro měření podél xx?

    • a. Pouze qc.measure()
    • b. qc.h() a poté qc.measure()
    • c. qc.h(), qc.h() a poté qc.measure()
    • d. qc.h(), qc.s, qc.h() a poté qc.measure()
    • e. qc.sdg(), qc.h(), qc.s a poté qc.measure()
    • f. qc.sdg(), qc.h(), qc.s, qc.h() a poté qc.measure()
  2. Který z následujících stavů dává největší střední hodnotu X\langle X \rangle?

    • a. +x|+\rangle_x
    • b. x|-\rangle_x
    • c. +y|+\rangle_y také označovaný jako +i|+i\rangle
    • d. y|-\rangle_y také označovaný jako i|-i\rangle
    • e. 0|0\rangle také označovaný jako |\uparrow\rangle
    • f. 1|1\rangle také označovaný jako |\downarrow\rangle
  3. Který z následujících stavů dává největší neurčitost ΔX\Delta X?

    • a. +x|+\rangle_x
    • b. +y|+\rangle_y také označovaný jako +i|+i\rangle
    • c. 0|0\rangle také označovaný jako |\uparrow\rangle
    • d. a a b jsou vyrovnané
    • e. b a c jsou vyrovnané
    • f. a, b a c jsou vyrovnané

Diskusní otázky:

  1. Je tento koncept neurčitosti v nějakém ohledu v rozporu s představou spinu jako vektorové šipky v kartézském prostoru? A co na Blochově sféře?

  2. Předpokládejme, že orientuješ měřicí přístroj ve směru přesně uprostřed mezi osami xx a yy. Co se stane? Lze v tomto směru měřit? Jak to souvisí s neurčitostí v XX a YY?

  3. Jaké další experimenty bys chtěl provést, abys se přesvědčil o výsledcích získaných zde?