Przejdź do głównej treści

Kwantowe monety — moduł o superpozycji i interferencji

Do tego modułu Qiskit w klasach uczniowie muszą mieć działające środowisko Python z zainstalowanymi następującymi pakietami:

  • qiskit v2.1.0 lub nowszy
  • qiskit-ibm-runtime v0.40.1 lub nowszy
  • qiskit-aer v0.17.0 lub nowszy
  • qiskit.visualization
  • numpy
  • pylatexenc

Aby skonfigurować i zainstalować powyższe pakiety, zapoznaj się z przewodnikiem Instalacja Qiskit. Aby uruchamiać zadania na prawdziwych komputerach kwantowych, uczniowie będą musieli założyć konto w IBM Quantum®, wykonując kroki opisane w przewodniku Konfiguracja konta IBM Cloud.

Moduł był testowany i zużył 47 sekund czasu QPU. Jest to jedynie szacunek. Rzeczywiste zużycie może się różnić.

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

Obejrzyj omówienie modułu przez dr Katie McCormick poniżej lub kliknij tutaj, aby obejrzeć je na YouTube.


Wprowadzenie

W tym module zbadamy jedną z podstawowych zasad leżących u podstaw teorii kwantowej: superpozycję. W naszym codziennym doświadczeniu obiekty zawsze mają określone cechy. Ich położenie, rozmiar, kształt, kolor — wszystko na ich temat — jest wyznaczone i pewne, nawet jeśli my jako obserwatorzy jeszcze tego nie zmierzyliśmy. W świecie kwantowym niekoniecznie tak jest. Obiekt kwantowy może znajdować się w czymś, co nazywamy „superpozycją" wielu klasycznie dozwolonych stanów. Gdy superpozycja zostaje zmierzona, losowo „zapada się" do jednego z tych stanów.

Pod pewnymi względami mierzenie stanu superpozycji przypomina rzut monetą: nie ma możliwości z góry wiedzieć, w którą stronę wypadnie. Ta fundamentalna indeterminizacja jest niekomfortowym aspektem mechaniki kwantowej, z którym problem miał nawet Einstein. Słynnie powiedział o tej losowości: „Bóg nie gra w kości". Ale, jak się przekonamy, Bóg w rzeczywistości gra w kości — i rzuca monetami.

Będziemy traktować klasyczny rzut monetą jako analogię do pomiaru stanu superpozycji. I — bawiąc się „kwantową monetą" za pomocą Qiskit i Qubit na procesorze kwantowym IBM® — szybko odkryjemy granice tej analogii.

Klasyczna moneta

Zacznijmy od klasycznej monety. Rzuć monetą, a wyląduje ona reszką lub orłem do góry z 50 ~% szansą na każde z nich. Choć teoretycznie można by obliczyć, po której stronie wyląduje moneta, znając dokładne warunki początkowe i siłę/moment obrotowy rzutu, to w praktyce nie ma możliwości a priori wiedzieć, po której stronie wyląduje. Dlatego używamy rzutu monetą jako kanonicznego przykładu klasycznego stanu probabilistycznego, w którym wynik jest zasadniczo losowy. Możemy zapisać stan monety przed lądowaniem, odzwierciedlając to prawdopodobieństwo 50/50:

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

Tutaj dwa składniki reprezentują dwa możliwe wyniki rzutu, a ich współczynniki — prawdopodobieństwa każdego z wyników. Zauważ, że zwykle „|\rangle" (znane jako „ket") służy do reprezentowania stanu kwantowego, ale tutaj mówimy o klasycznym stanie probabilistycznym. Zobacz Lekcja 1: Pojedyncze układy w kursie Podstawy informacji kwantowej, aby dowiedzieć się więcej o tym, jak reprezentujemy informacje klasyczne i kwantowe.

Gdybyśmy rzucili monetą 1000 razy i zliczyli liczbę wyników orła i reszki, otrzymalibyśmy coś takiego:

# 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

Kwantowa moneta

Możemy stworzyć podobny stan probabilistyczny, używając Qubit na naszym komputerze kwantowym. Podobnie jak rzut monetą, Qubit również może zostać zmierzony w dwóch możliwych stanach: 0|0\rangle i 1|1\rangle. Tworzymy probabilistyczny stan „superpozycji", zaczynając od stanu 0|0\rangle, a następnie stosując tzw. bramkę Hadamarda do Qubit. Wprowadza to Qubit w równą superpozycję 0|0\rangle i 1|1\rangle. Zauważ, że choć ten stan superpozycji może z pozoru wyglądać i zachowywać się jak moneta, wkrótce zobaczymy, że kryje się w nim znacznie więcej. Celem tego modułu jest pokazanie, że superpozycja nie jest tym samym co klasyczny rzut monetą.

Ponieważ więc Qubit jest w równej superpozycji 0 i 1, gdy go zmierzymy, będzie 50% szans na zmierzenie 0|0\rangle i 50% szans na zmierzenie 1|1\rangle. Zapisujemy ten stan nieco inaczej niż w klasycznym przypadku probabilistycznym — z powodów, które staną się jasne później:

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

Tutaj prawdopodobieństwa zmierzenia każdego z dwóch stanów nie są już równe współczynnikom, jak miało to miejsce w klasycznym stanie probabilistycznym powyżej. Zamiast tego to kwadrat współczynników daje nam prawdopodobieństwa, a każdy z tych współczynników może teraz być zespolony, co oznacza, że może mieć zarówno część rzeczywistą, jak i urojoną.

Mimo tych różnic wynik pomiaru tego stanu jest zasadniczo taki sam jak rzut monetą.

from qiskit import QuantumCircuit

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

qcoin.draw("mpl")

Output of the previous code cell

Zastosowanie bramki Hadamarda jest więc w efekcie analogiczne do rzutu monetą. I tak jak rzucaliśmy monetą 1000 razy, żeby przyjrzeć się statystykom lądowania orłem lub reszką do góry, możemy zrobić coś podobnego w Qiskit z naszą „kwantową monetą". Możemy użyć prymitywu Qiskit o nazwie Sampler, który będzie wielokrotnie powtarzał Circuit, aby próbkować statystyki wynikowego stanu.

Najpierw ładujemy usługę Qiskit Runtime i prymitywy, a następnie wybieramy Backend, na którym uruchomimy Circuit.

Poniżej znajdziesz kod do jednorazowego zapisania poświadczeń. Pamiętaj, aby po zapisaniu tych informacji w swoim środowisku usunąć je z notatnika, żeby Twoje poświadczenia nie zostały przypadkowo udostępnione razem z notatnikiem. Więcej wskazówek znajdziesz w przewodnikach Konfiguracja konta IBM Cloud i Inicjalizacja usługi w środowisku niezaufanym.

# 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

Jeśli wyczerpałeś dostępny czas na swoim koncie, możesz też uruchomić to na symulatorze. Wystarczy odkomentować poniższy kod i uruchomić komórkę:

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

Wynik poprzedniej komórki kodu

Przy 1000 próbkach powyższego Circuit otrzymujemy coś, co wygląda niemal identycznie jak klasyczny histogram rzutu monetą — z uwzględnieniem statystycznych fluktuacji.

Oprócz próbkowania statystyk kwantowej monety możemy też skorzystać z innego prymitywu Qiskit — Estimator — aby zmierzyć tzw. wartość oczekiwaną pewnej obserwowalnej stanu. Aby zilustrować, czym jest ta wartość oczekiwana, posłużmy się klasyczną monetą jako przykładem. Powiedzmy, że używasz monety do hazardu: za każdym razem, gdy rzucisz monetą i wypadnie „orzeł", wygrywasz dolara. Ale za każdym razem, gdy wypadnie „reszka", tracisz dolara. Jeśli chcesz wiedzieć, ile pieniędzy możesz się spodziewać za każdy rzut (wartość oczekiwana obserwowalnej „pieniądze"), obliczasz:

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}

Ponieważ z równym prawdopodobieństwem możesz wygrać lub stracić dolara, wartość oczekiwana wynosi 0 dolarów.

Podobnie, dla stanu kwantowego możemy obliczyć wartość oczekiwaną obserwowalnej „Z", gdzie Z to macierz Pauliego z wartościami +1 i -1 przypisanymi odpowiednio do stanów 0|0\rangle i 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

Otrzymujemy wartość oczekiwaną równą 0, zgodnie z przewidywaniami (heh). To kolejny sposób na potwierdzenie, że rzeczywiście istnieje równe prawdopodobieństwo zmierzenia 0 lub 1, i że zachowanie wygląda jak rzut monetą.

W tym miejscu „kwantowa moneta" wygląda dokładnie tak samo jak klasyczna moneta. Jednak w następnej sekcji przeprowadzimy eksperymenty, które ujawnią fundamentalne różnice między nimi.

Kwantowa rewelacja: eksperyment w trzech wymiarach

Przeprowadźmy eksperyment myślowy: wyobraź sobie, że podrzucasz monetę w górę i zamiast pozwolić jej spaść na ziemię, masz tyle zręczności, żeby złapać ją między dłonie w chwili, gdy przelatuje między nimi. Zamiast orzełka skierowanego w górę lub w dół, masz teraz orzełka skierowanego w lewo lub w prawo.

Sprawdź swoją wiedzę

Przeczytaj poniższe pytanie(-a), zastanów się nad odpowiedzią, a następnie kliknij trójkąt, aby odsłonić rozwiązanie.

Jakie jest prawdopodobieństwo każdego z tych wyników: orzełek w lewo lub orzełek w prawo?

Odpowiedź:

Prawdopodobieństwo nadal wynosi 50-50. Nie powinno mieć znaczenia, wzdłuż którego wymiaru mierzymy wynik rzutu monetą.

Mam nadzieję, że odpowiedziałeś(-aś), że prawdopodobieństwo otrzymania orzełka w lewo lub w prawo nadal wynosi 50-50. Wymiar, wzdłuż którego mierzymy wynik rzutu monetą, nie powinien wpływać na prawdopodobieństwo wyników.

Ale jak wyglądałoby to w przypadku naszej kwantowej monety? Sprawdźmy.

Możemy wytworzyć kwantową superpozycję tak samo jak poprzednio — za pomocą Gate'u Hadamarda. Żeby zmierzyć „orzełka w lewo lub w prawo" na naszej kwantowej monecie, możemy zrobić to, co zrobiliśmy z klasyczną monetą: zmierzyć wzdłuż innej osi. Nasze standardowe pomiary na komputerze kwantowym odbywają się wzdłuż osi pionowej, tak jak zwykły pomiar „orzełek w górę lub w dół" klasycznej monety. Możemy jednak również zapytać naszą kwantową monetę, czy jest orzełkiem w lewo czy w prawo, lub równoważnie, czy jest w stanach +|+\rangle lub |-\rangle, które wskazują wzdłuż osi xx. Sampler próbkuje tylko w bazie pomiaru Z, ale możemy użyć Estimatora, żeby uzyskać wartość oczekiwaną X. Wartości X wynoszą +1 i -1 odpowiednio dla stanów +|+\rangle i |-\rangle.

Sprawdź swoją wiedzę

Przeczytaj poniższe pytanie, zastanów się nad odpowiedzią, a następnie kliknij trójkąt, aby odsłonić rozwiązanie.

Gdyby kwantowa moneta zachowywała się jak klasyczna w tym przypadku, mielibyśmy prawdopodobieństwo 50-50 zmierzenia stanu +|+\rangle i |-\rangle. Jakiej wartości oczekiwanej X spodziewalibyśmy się od Estimatora, gdyby tak było?

Odpowiedź:

Gdy zastosujemy X do stanu +|+\rangle, otrzymujemy wartość +1, a do stanu |-\rangle otrzymujemy -1, więc przy rozkładzie 50-50 otrzymalibyśmy wartość oczekiwaną równą 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

Wartość oczekiwana X dla tego stanu wynosi 1. Oznacza to, że prawdopodobieństwo zmierzenia +|+\rangle i |-\rangle nie wynosi 50-50.

Sprawdź swoją wiedzę

Przeczytaj poniższe pytanie(-a), zastanów się nad odpowiedzią, a następnie kliknij trójkąt, aby odsłonić rozwiązanie.

Co mówi nam ta wartość oczekiwana o stanie ψ|\psi\rangle? Jakie są prawdopodobieństwa zmierzenia +|+\rangle i |-\rangle w tej bazie X?

Odpowiedź:

Ponieważ wartość oczekiwana jest taka sama jak wartość X dla stanu +|+\rangle, oznacza to, że mamy 100% prawdopodobieństwo zmierzenia stanu +|+\rangle podczas pomiaru wzdłuż X.

Co tu się dzieje? Wygląda na to, że nasza kwantowa moneta może dawać losowe, probabilistyczne wyniki wzdłuż jednego wymiaru, ale doskonale przewidywalne wyniki wzdłuż innego. Byłoby to jak rzucanie monetą z gwarancją, że za każdym razem, gdy zostanie złapana między dłońmi, orzełek wyląduje po prawej stronie.

Faza kwantowa

Kluczowa różnica kwantowej monety polega na tym, że posiada ona pewną właściwość, której klasyczna moneta nie ma. Przypomnij sobie, że w klasycznym stanie probabilistycznym:

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

każdy współczynnik jest po prostu rzeczywistą, dodatnią liczbą reprezentującą prawdopodobieństwo zmierzenia danego stanu. W stanie kwantowym:

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

współczynniki są zespolone, co oznacza, że zawierają część rzeczywistą i urojoną. Każdy współczynnik cic_i można przedstawić jako dwuwymiarowy wektor na płaszczyźnie zespolonej, o module ci|c_i| i kącie ϕi\phi_i, jaki tworzy z osią rzeczywistą:

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

Okrąg na płaszczyźnie zespolonej. Stan kwantowy jest przedstawiony jako strzałka długości 1, która może obracać się i wskazywać dowolny punkt na okręgu. Poziomy składnik strzałki to jej rzeczywista amplituda, a pionowy – amplituda zespolona.

ϕi\phi_i nazywamy fazą. Faza mówi nam, jak dwa składniki stanu kwantowego będą ze sobą interferować, czyli jak będą się sumować lub znosić niczym fale. Jeśli dwie fale są ze sobą w fazie – ich grzbiety i doliny się pokrywają – to łączą się, tworząc falę o dwukrotnie większej amplitudzie. Nazywamy to interferencją konstruktywną. Jeśli są w przeciwfazie, tzn. grzbiet jednej fali pokrywa się z doliną drugiej i odwrotnie, interferują destruktywnie i całkowicie się znoszą.

Podobnie jak fale, stany kwantowe mogą sumować się konstruktywnie lub destruktywnie. Może być to trudniejsze do zauważenia, bo często nie mówimy o rzeczywistej fali w przestrzeni fizycznej. W przypadku naszych Qubitów interferencja zachodzi w abstrakcyjnej przestrzeni informacyjnej Qubitów. Zauważ też, że ponieważ dla sposobu, w jaki dwie fale będą interferować, liczy się jedynie względna faza między nimi – czyli różnica faz Δϕ=ϕ2ϕ1\Delta \phi = \phi_2 - \phi_1 obu współczynników – zazwyczaj stosujemy globalną fazę ϕ1-\phi_1 do całego stanu, tak aby c1c_1 był czysto rzeczywisty, a faza względna była w całości zawarta w c2c_2.

Aby zobaczyć, jak faza może powodować interferencję w naszej kwantowej monecie, spróbujmy zastosować bramkę Hadamarda dwa razy zamiast raz. Klasycznie nie miałoby to żadnego sensu – jeśli zastosowanie bramki Hadamarda jest równoważne rzuceniu monetą, to nie można rzucić monetą, która już się obraca. Zobaczmy jednak, co stanie się z kwantową monetą:

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

qcoin_0.draw("mpl")

Output of the previous code cell

Zanim użyjemy Sampler do zmierzenia wynikowego stanu, zastanówmy się, jak Qubit będzie przekształcany przez każdą bramkę. Jak zwykle, zaczyna w stanie 0|0\rangle. Następnie pierwsza bramka Hadamarda przekształca go w superpozycję, co już widzieliśmy:

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

W tym przypadku oba współczynniki są w pełni rzeczywiste i dodatnie, co oznacza, że faza wynosi ϕ=0\phi=0.

Następnie druga bramka Hadamarda jest stosowana do każdego składnika stanu superpozycji osobno. Wiemy już, jak Hadamard przekształca stan 0|0\rangle. A co z 1|1\rangle?

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

To ponownie równa superpozycja stanów 0 i 1, podobna do rzutu monetą, ale współczynnik przy 1|1\rangle ma fazę ϕ=π\phi = \pi, co nadaje mu znak ujemny.

Sprawdź swoją wiedzę

Przeczytaj poniższe pytanie, zastanów się nad odpowiedzią, a następnie kliknij trójkąt, aby zobaczyć rozwiązanie.

Oblicz stan wynikowy po zastosowaniu drugiej bramki Hadamarda. Czyli oblicz: H(120+121)H(\frac{1}{\sqrt{2}} |0\rangle + \frac{1}{\sqrt{2}} |1\rangle). Zauważ, że HH jest rozdzielna, więc możemy zastosować ją do każdego składnika osobno.

Odpowiedź:

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

Sprawdźmy teraz nasze przewidywanie za 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)

Output of the previous code cell

Druga bramka Hadamarda zniosła pierwszą i wróciliśmy do stanu 0, od którego zaczęliśmy! Dzieje się tak dlatego, że Hadamard przekształca zarówno stan 0|0\rangle, jak i 1|1\rangle w podobne stany, ale z przeciwnymi fazami. Po zastosowaniu drugiej bramki Hadamarda widzimy, że składniki 0|0\rangle interferują konstruktywnie, natomiast składniki 1|1\rangle interferują destruktywnie i znoszą się nawzajem.

Zbadajmy to głębiej: możemy zmienić fazę za pomocą bramki „PHASE". Teraz zastosujmy bramkę Hadamarda, aby wytworzyć superpozycję, następnie wprowadźmy przesunięcie fazowe o π\pi radianów, a potem zastosujmy drugą bramkę Hadamarda:

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

Output of the previous code cell

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

Output of the previous code cell

Teraz Qubit jest mierzony w stanie 1 zamiast 0.

Już z tych kilku prostych eksperymentów możesz zobaczyć, jak drastyczną różnicę może wprowadzić faza w obwodzie kwantowym. Może być subtelna i na początku trudna do zauważenia. W naszym pierwszym eksperymencie, gdzie po prostu rzuciliśmy kwantową monetą bramką Hadamarda i zmierzyliśmy wynik, nic nie wskazywało na wpływ fazy. Dopiero gdy zagłębiliśmy się głębiej, odkryliśmy, jaką różnicę może wywołać faza. Może sprawić, że ta sama bramka kwantowa będzie miała dosłownie odwrotny efekt na Qubit.

Spróbuj sam:

Zmodyfikuj poniższą komórkę kodu, zmieniając fazę tak, aby druga bramka Hadamarda tworzyła stan superpozycji z prawdopodobieństwami 25% i 75% znalezienia stanu odpowiednio w 0|0\rangle i 1|1\rangle. Zweryfikuj swoją odpowiedź matematycznie.

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)

Output of the previous code cell

Kolejna (lepsza) analogia z monetą przy użyciu bramki NOT\sqrt{\text{NOT}}

Do tej pory dowiedzieliśmy się, że rzut monetą dość mocno różni się od tworzenia stanu superpozycji. Czy istnieje lepsza analogia do monety, która lepiej oddaje zjawiska związane z superpozycją? Tak. Jak najbardziej.

Przeprowadzimy kolejny eksperyment myślowy z monetą. Wyobraź sobie monetę leżącą na stole orłem do góry. Żeby ją obrócić orłem do dołu, wystarczy ją przewrócić. Jest to obliczeniowy odpowiednik bramki „NOT".

Powiedzmy, że chcemy skonstruować operację, która zastosowana dwukrotnie byłaby równoważna bramce NOT. Innymi słowy, szukamy „pierwiastka kwadratowego z NOT", czyli NOT\sqrt{\text{NOT}}. Możemy to zrobić, biorąc pod uwagę sposób fizycznej realizacji bramki NOT na monecie: to po prostu obrót o 180 stopni wokół na przykład osi x. Zatem obrót monety o zaledwie 90 stopni wokół osi x byłby równoważny bramce NOT\sqrt{\text{NOT}}.

Wyobraź sobie, że po zastosowaniu bramki NOT\sqrt{\text{NOT}} chcemy sprawdzić, czy moneta leży orłem do góry czy do dołu. Nie leży ani tak, ani tak — stoi na krawędzi względem osi pionowej. Ale teraz przedefiniujmy nasze „pomiary" monety tak, że polegają one najpierw na złożeniu monety wzdłuż osi pomiaru (przez dociśnięcie jej dłonią tak, by leżała płasko), a po drugie na sprawdzeniu, czy orzeł jest skierowany do góry czy do dołu.

Jeśli wykonamy ten „pomiar" na monecie stojącej na krawędzi, moneta „załamie się" do stanu orła do góry lub do dołu z jednakowym prawdopodobieństwem. Podobnie jak przy rzucie monetą, w zasadzie kierunek upadku monety można przewidzieć na podstawie jej warunków początkowych i tego, jak dokładnie przyłożona siła naszej dłoni „składa" monetę. Jednak w praktyce trudno przewidzieć, która strona wypadnie do góry, więc wynik jest zasadniczo losowy.

Możemy faktycznie mierzyć tę monetę wzdłuż trzech różnych osi: xx, yy i zz. Widzimy, że krawędź monety jest skierowana wzdłuż xx i zz, więc pomiar w tych kierunkach wymaga „złożenia" monety — a zatem wzdłuż tych osi wynik będzie losowy z prawdopodobieństwem 50:50 dla orła do góry i do dołu. Ale wzdłuż osi yy moneta już leży płasko, z orłem skierowanym w kierunku -y. Możemy to nazwać „orłem do przodu."

Tak więc, podczas gdy pomiary w x i z dają losowe wyniki, pomiar w y zawsze da ten sam wynik! Jeśli pamiętasz eksperyment z „kwantowym rzutem monetą" z poprzedniej sekcji, przypomina to zachowanie kwantowej monety. Była mierzona jako 0 lub 1 z prawdopodobieństwem 50/50 w kierunku z, ale zawsze jako +|+\rangle, nigdy jako |-\rangle wzdłuż X. To sugeruje, że moneta stojąca nieruchomo na krawędzi jest lepszym sposobem wizualizacji stanu superpozycji qubitu niż moneta gwałtownie obracająca się w powietrzu.

Użyjmy Qiskit, aby sprawdzić, czy nasza „kwantowa moneta" zachowuje się tak samo jak klasyczna moneta, gdy zastosujemy bramkę NOT\sqrt{\text{NOT}}. Zastosujemy NOT\sqrt{\text{NOT}} do qubitu zaczynającego w stanie 0|0\rangle, a następnie użyjemy Estimator, aby sprawdzić wartość oczekiwaną trzech obserwowalnych: X, Y i 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]]

Wartości oczekiwane wynoszą odpowiednio 0, -1 i 0 dla X, Y i Z.

Sprawdź swoje rozumienie

Przeczytaj poniższe pytanie, zastanów się nad odpowiedzią, a następnie kliknij trójkąt, aby zobaczyć rozwiązanie.

Jakie są prawdopodobieństwa zmierzenia kwantowej monety jako orła do góry/dołu (lub lewo/prawo albo do przodu/tyłu) dla każdej z 3 osi pomiarowych, biorąc pod uwagę wartości oczekiwane?

Odpowiedź:

Prawdopodobieństwo zmierzenia dowolnego stanu wzdłuż X i Z wynosi 50/50, natomiast stan jest zawsze mierzony w kierunku -y wzdłuż Y.

Jest to ten sam wynik, który uzyskaliśmy w eksperymencie myślowym z zastosowaniem obrotu o 90 stopni NOT\sqrt{\text{NOT}} na klasycznej monecie. W rzeczywistości istnieje teraz precyzyjna analogia między monetą a stanem qubitu. Możemy wizualizować stan qubitu jako wektor wskazujący kierunek orła na monecie, prostopadły do jej powierzchni. Tak więc orzeł do góry, czyli stan 0|0\rangle na kwantowej monecie, odpowiada wektorowi skierowanemu prosto w górę; orzeł do dołu, czyli 1|1\rangle, odpowiada wektorowi skierowanemu prosto w dół. Każda równa superpozycja 0|0\rangle i 1|1\rangle wskazuje poziomo. Faza stanu wyznacza dokładny kierunek poziomy — kierunek wzdłuż równika odpowiada kierunkowi, w którym współczynnik c2c_2 wskazuje na płaszczyźnie zespolonej.

Teraz każdą bramkę, którą widzieliśmy w tym notatniku, można zwizualizować jako obrót (lub serię obrotów) monety/wektora.

  • NOT: 180 stopni wokół osi x

  • NOT\sqrt{\text{NOT}}: 90 stopni wokół osi x

  • PHASE: obrót o ϕ\phi wokół osi z

  • Hadamard: Ta jest nieco trudniejsza. Początkowo porównywaliśmy ją do rzutu monetą, wprawiającego monetę w niekontrolowane wirowanie w powietrzu. Jednak Hadamard jest w rzeczywistości kontrolowanym, deterministycznym obrotem monety, podobnie jak inne bramki. Hadamard wykonuje się przez obrót o 90 stopni wokół osi y, a następnie obrót o 180 stopni wokół osi x.

Tak więc stan kwantowej superpozycji ani żadna ze standardowych operacji na qubicie nie są w żaden sposób losowe. Każda operacja jest deterministyczna i odwracalna. Losowość pojawia się jedynie wtedy, gdy decydujemy się zmierzyć stan kwantowy.

Stan qubitu jako wektor Blocha

Ten wektor wskazujący kierunek „orła" na monecie nazywany jest „wektorem Blocha". Formalnie, dowolny (izolowany) stan qubitu można przedstawić jako wektor leżący na powierzchni sfery o promieniu 1, o współrzędnych (r,θ,ϕ)(r, \theta, \phi). Zapisany w tych współrzędnych stan qubitu ma postać:

ψ=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.

Sprawdźmy teraz za pomocą Qiskit, jak zmienia się wektor Blocha po zastosowaniu różnych bramek do naszego qubitu zaczynającego od stanu 0|0\rangle.

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

Wnioski — czym właściwie jest stan superpozycji?

Rozpoczęliśmy ten moduł, porównując losowość pomiaru kwantowego stanu superpozycji do rzutu monetą. Przyrównaliśmy „Gate Hadamarda", który wytwarza kwantową superpozycję, do aktu rzucania monetą. Jednak dzięki serii eksperymentów dowiedzieliśmy się, że między klasycznym rzutem monetą a kwantową superpozycją istnieją fundamentalne różnice.

Dowiedzieliśmy się, że w stanie superpozycji qubit nie ma w sobie nic „losowego". Przypomina monetę spokojnie leżącą w trójwymiarowej przestrzeni. Co więcej, moneta swobodnie obracająca się w 3 wymiarach jest bardzo dobrą analogią do pewnego sposobu wizualizacji stanu kwantowego qubitu — tak zwanego wektora Blocha. Kwantowe Gate'y obracają tę monetę/wektor Blocha w sposób deterministyczny i odwracalny. Losowość pojawia się dopiero wtedy, gdy mierzymy qubit. Porównaliśmy ten proces pomiaru do spłaszczenia monety tak, aby leżała płasko wzdłuż osi pomiaru.

To, czy dany stan kwantowy w ogóle jest w superpozycji, zależy wyłącznie od perspektywy obserwatora. Jak zapewne już wiesz, możemy swobodnie wybierać układ współrzędnych — xx, yy i zz mogą wskazywać dowolne trzy wzajemnie prostopadłe kierunki. Jeśli więc mamy superpozycję stanów 0 i 1 w jednym układzie współrzędnych, możemy zdefiniować nowy układ — lub równoważnie nową „bazę pomiaru" — w którym stan wskazuje czysto w kierunku +z+z, a zatem nie jest stanem superpozycji. Kiedy mówimy, że qubit jest w superpozycji, musimy również odpowiedzieć na pytanie: „superpozycja czego?"

Być może kończysz ten moduł z wrażeniem, że właśnie pozbawiliśmy kwantową mechanikę całej jej tajemniczości. W końcu jeden z rzekomo „najdziwniejszych" jej aspektów — stan superpozycji qubitu — okazuje się być tak prosty jak trójwymiarowy wektor. Pamiętaj jednak, że moneta to wciąż tylko analogia, a nawet wektor Blocha jest jedynie narzędziem wizualizacji służącym do obliczania prawdopodobieństw wyników pomiarów. Nie możemy stwierdzić, co stan kwantowy naprawdę robi przed dokonaniem pomiaru. Bo sprawdzenie tego wymaga pomiaru!

O dylemacie dotyczącym „prawdziwej" natury stanu kwantowego oraz o tym, jak kwantowe zjawisko splątania może nam to wyjaśnić, będziemy mówić w module dotyczącym nierówności Bella.

Pytania

Instruktorzy mogą poprosić o wersje tych notebooków z kluczem odpowiedzi oraz wskazówkami dotyczącymi umiejscowienia w typowych programach nauczania, wypełniając tę krótką ankietę na temat sposobu wykorzystania notebooków.

Kluczowe pojęcia:

  • Chociaż pomiar qubitu w superpozycji jest probabilistyczny, jak rzut monetą, sam stan superpozycji zachowuje się inaczej niż rzucana moneta.
  • Główna różnica między klasycznym rozkładem prawdopodobieństwa a superpozycją polega na tym, że superpozycja ma koherencję fazy, która pozwala na konstruktywne lub destruktywne interferencje.
  • Stan pojedynczego, izolowanego qubitu można zwizualizować jako punkt na tak zwanej „sferze Blocha", gdzie względne amplitudy składowych 0|0\rangle i 1|1\rangle wyznaczają kąt biegunowy θ\theta, a względna faza między tymi składowymi wyznacza kąt azymutalny ϕ\phi.
  • Wszystkie Gate'y działające na pojedynczym qubicie można traktować jako obroty wektora na tej sferze.

Pytania P/F (prawda/fałsz):

  1. P/F Kwantowa superpozycja jest zasadniczo tym samym co zdarzenie probabilistyczne w fizyce klasycznej, takie jak rzut monetą.

  2. P/F Długość wektora Blocha opisującego stan pojedynczego izolowanego qubitu wynosi zawsze 1.

  3. P/F Jednoqubitowe Gate'y kwantowe nie zmieniają długości wektora Blocha.

Pytania wielokrotnego wyboru:

  1. Wskaż poprawny wektor Blocha reprezentujący stan Ψ=130+eiπ/4231|\Psi\rangle = \sqrt{\frac{1}{3}}|0\rangle + e^{i \pi / 4} \sqrt{\frac{2}{3}}|1\rangle:

Pokazane są cztery sfery Blocha. W opcji a wektor wskazuje prawie wzdłuż +x, w opcji b — w połowie drogi między +x a +y i nieznacznie poniżej płaszczyzny xy, w opcji c — między +x a -y i nieznacznie powyżej płaszczyzny xy, w opcji d — wzdłuż -x.

  1. Sfera Blocha opisuje: (zaznacz wszystkie poprawne odpowiedzi)

    a. amplitudę

    b. splątanie z innymi qubitami

    c. fazę

    d. kolor

    e. prawdopodobieństwo wyników pomiarów

Pytania do dyskusji:

  1. Dlaczego stan qubitu można zwizualizować na sferze Blocha, a rozkładu prawdopodobieństwa rzutu monetą już nie?

  2. Dlaczego moneta rzucona w powietrze nie jest najlepszą analogią do kwantowego stanu superpozycji? Jaki aspekt superpozycji nie jest uchwycony w tej analogii?

Zadania dodatkowe:

  1. Użyj Qiskit, aby zbudować Circuit przekształcający stan 0|0\rangle w stan 320+12ei5π61\frac{\sqrt{3}}{2}|0\rangle + \frac{1}{2}e^{i \frac{5\pi}{6}}|1\rangle