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:
qiskitv2.1.0 lub nowszyqiskit-ibm-runtimev0.40.1 lub nowszyqiskit-aerv0.17.0 lub nowszyqiskit.visualizationnumpypylatexenc
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:
Tutaj dwa składniki reprezentują dwa możliwe wyniki rzutu, a ich współczynniki — prawdopodobieństwa każdego z wyników. Zauważ, że zwykle „" (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()
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: i . Tworzymy probabilistyczny stan „superpozycji", zaczynając od stanu , a następnie stosując tzw. bramkę Hadamarda do Qubit. Wprowadza to Qubit w równą superpozycję i . 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 i 50% szans na zmierzenie . Zapisujemy ten stan nieco inaczej niż w klasycznym przypadku probabilistycznym — z powodów, które staną się jasne później:
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")
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)
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:
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 i .
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 lub , które wskazują wzdłuż osi . 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 i .
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 i . Jakiej wartości oczekiwanej X spodziewalibyśmy się od Estimatora, gdyby tak było?
Odpowiedź:
Gdy zastosujemy X do stanu , otrzymujemy wartość +1, a do stanu 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 i 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 ? Jakie są prawdopodobieństwa zmierzenia i w tej bazie X?
Odpowiedź:
Ponieważ wartość oczekiwana jest taka sama jak wartość X dla stanu , oznacza to, że mamy 100% prawdopodobieństwo zmierzenia stanu 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:
każdy współczynnik jest po prostu rzeczywistą, dodatnią liczbą reprezentującą prawdopodobieństwo zmierzenia danego stanu. W stanie kwantowym:
współczynniki są zespolone, co oznacza, że zawierają część rzeczywistą i urojoną. Każdy współczynnik można przedstawić jako dwuwymiarowy wektor na płaszczyźnie zespolonej, o module i kącie , jaki tworzy z osią rzeczywistą:

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 obu współczynników – zazwyczaj stosujemy globalną fazę do całego stanu, tak aby był czysto rzeczywisty, a faza względna była w całości zawarta w .
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")
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 . Następnie pierwsza bramka Hadamarda przekształca go w superpozycję, co już widzieliśmy:
W tym przypadku oba współczynniki są w pełni rzeczywiste i dodatnie, co oznacza, że faza wynosi .
Następnie druga bramka Hadamarda jest stosowana do każdego składnika stanu superpozycji osobno. Wiemy już, jak Hadamard przekształca stan . A co z ?
To ponownie równa superpozycja stanów 0 i 1, podobna do rzutu monetą, ale współczynnik przy ma fazę , 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: . Zauważ, że jest rozdzielna, więc możemy zastosować ją do każdego składnika osobno.
Odpowiedź:
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)
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 , jak i w podobne stany, ale z przeciwnymi fazami. Po zastosowaniu drugiej bramki Hadamarda widzimy, że składniki interferują konstruktywnie, natomiast składniki 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 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")
## 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)
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 i . 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)
Kolejna (lepsza) analogia z monetą przy użyciu bramki
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 . 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 .
Wyobraź sobie, że po zastosowaniu bramki 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: , i . Widzimy, że krawędź monety jest skierowana wzdłuż i , 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 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 , nigdy jako 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ę . Zastosujemy do qubitu zaczynającego w stanie , 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")
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 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 na kwantowej monecie, odpowiada wektorowi skierowanemu prosto w górę; orzeł do dołu, czyli , odpowiada wektorowi skierowanemu prosto w dół. Każda równa superpozycja i wskazuje poziomo. Faza stanu wyznacza dokładny kierunek poziomy — kierunek wzdłuż równika odpowiada kierunkowi, w którym współczynnik 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
-
: 90 stopni wokół osi x
-
PHASE: obrót o 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 . Zapisany w tych współrzędnych stan qubitu ma postać:

Sprawdźmy teraz za pomocą Qiskit, jak zmienia się wektor Blocha po zastosowaniu różnych bramek do naszego qubitu zaczynającego od stanu .
NOT
from qiskit.visualization import plot_bloch_multivector
qnot = QuantumCircuit(1)
qnot.x(0)
plot_bloch_multivector(qnot)
{#}
qsqrtnot = QuantumCircuit(1)
qsqrtnot.sx(0)
plot_bloch_multivector(qsqrtnot)
PHASE ()
qphase = QuantumCircuit(1)
qphase.p(np.pi, 0)
plot_bloch_multivector(qphase)
Hadamard
qhadamard = QuantumCircuit(1)
qhadamard.h(0)
plot_bloch_multivector(qhadamard)
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 — , i 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 , 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 i wyznaczają kąt biegunowy , a względna faza między tymi składowymi wyznacza kąt azymutalny .
- Wszystkie Gate'y działające na pojedynczym qubicie można traktować jako obroty wektora na tej sferze.
Pytania P/F (prawda/fałsz):
-
P/F Kwantowa superpozycja jest zasadniczo tym samym co zdarzenie probabilistyczne w fizyce klasycznej, takie jak rzut monetą.
-
P/F Długość wektora Blocha opisującego stan pojedynczego izolowanego qubitu wynosi zawsze 1.
-
P/F Jednoqubitowe Gate'y kwantowe nie zmieniają długości wektora Blocha.
Pytania wielokrotnego wyboru:
- Wskaż poprawny wektor Blocha reprezentujący stan :

-
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:
-
Dlaczego stan qubitu można zwizualizować na sferze Blocha, a rozkładu prawdopodobieństwa rzutu monetą już nie?
-
Dlaczego moneta rzucona w powietrze nie jest najlepszą analogią do kwantowego stanu superpozycji? Jaki aspekt superpozycji nie jest uchwycony w tej analogii?
Zadania dodatkowe:
- Użyj Qiskit, aby zbudować Circuit przekształcający stan w stan