Перейти до основного вмісту

Квантові монети — модуль про суперпозицію та інтерференцію

Для цього модуля Qiskit in Classrooms студенти повинні мати робоче середовище Python із встановленими такими пакетами:

  • qiskit v2.1.0 або новіше
  • qiskit-ibm-runtime v0.40.1 або новіше
  • qiskit-aer v0.17.0 або новіше
  • qiskit.visualization
  • numpy
  • pylatexenc

Щоб налаштувати та встановити наведені вище пакети, скористайся посібником Встановлення Qiskit. Для запуску завдань на реальних квантових комп'ютерах студентам потрібно створити обліковий запис IBM Quantum®, виконавши кроки з посібника Налаштування облікового запису IBM Cloud.

Цей модуль було протестовано, і він використав 47 секунд часу QPU. Це лише орієнтовне значення. Твоє фактичне використання може відрізнятися.

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

Перегляньте відеоогляд модуля від доктора Кеті МакКормік нижче або натисніть тут, щоб переглянути на YouTube.


Вступ

У цьому модулі ми досліджуємо один із ключових принципів квантової теорії: суперпозицію. У повсякденному житті об'єкти завжди мають визначені властивості. Їхнє розташування, розмір, форма, колір — усе про них — визначено й точно, навіть якщо спостерігач ще не виміряв їх. У квантовому світі це не обов'язково так. Квантовий об'єкт може перебувати в так званій «суперпозиції» кількох класично допустимих станів. Коли суперпозицію вимірюють, вона випадково «колапсує» до одного з цих станів.

Певною мірою вимірювання суперпозиційного стану нагадує підкидання монети: немає жодного способу заздалегідь дізнатися, якою стороною вона впаде. Цей фундаментальний індетермінізм є незручним аспектом квантової механіки, із яким навіть Ейнштейн мав проблеми. Він відомо сказав: «Бог не грає в кості» — саме про цю випадковість. Але, як ми побачимо, Бог насправді грає в кості — і підкидає монети.

Ми розглянемо класичне підкидання монети як аналогію вимірювання суперпозиційного стану. І — граючи з «квантовою монетою» за допомогою Qiskit і кубіта на квантовому процесорі IBM® — ми швидко виявимо межі цієї аналогії.

Класична монета

Почнімо з класичної монети. Підкинь монету, і вона впаде або орлом угору, або решкою вниз — з імовірністю 50 ~% для кожного варіанта. Хоча в принципі можна було б розрахувати, якою стороною впаде монета, знаючи точні початкові умови та прикладену силу/момент обертання, на практиці немає жодного способу заздалегідь знати результат. Саме тому підкидання монети є класичним прикладом класичного імовірнісного стану, де результат є, по суті, випадковим. Стан монети до того, як вона впаде, відображає ймовірність 50/50:

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

Тут два доданки представляють два можливі результати підкидання, а їхні коефіцієнти — ймовірності кожного результату. Зверни увагу: зазвичай «|\rangle» (відоме як «кет») використовується для представлення квантового стану, але тут ми говоримо про класичний імовірнісний стан. Дивись Урок 1: Одиничні системи у курсі «Основи квантової інформації», щоб дізнатися більше про те, як ми представляємо класичну та квантову інформацію.

Якби ми підкидали монету 1000 разів і рахували кількість випадінь орла та решки, ми отримали б щось таке:

# 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

Квантова монета

Ми можемо створити подібний імовірнісний стан за допомогою кубіта на нашому квантовому комп'ютері. Як і підкидання монети, кубіт також може бути виміряний у двох можливих станах: 0|0\rangle і 1|1\rangle. Ми створюємо імовірнісний «суперпозиційний» стан, починаючи зі стану 0|0\rangle, а потім застосовуючи до кубіта так звані ворота Адамара (Hadamard gate). Це переводить його в рівну суперпозицію 0|0\rangle і 1|1\rangle. Зверни увагу: хоча цей суперпозиційний стан спочатку може здаватися схожим на монету, незабаром ми побачимо, що в ньому є набагато більше. Мета цього модуля — показати, що суперпозиція — це не те саме, що класичне підкидання монети.

Отже, оскільки кубіт перебуває в рівній суперпозиції 0 і 1, при вимірюванні кубіта є 50% шанс виміряти 0|0\rangle і 50% шанс виміряти 1|1\rangle. Цей стан ми записуємо дещо інакше, ніж у класичному імовірнісному випадку, — з причин, які стануть зрозумілими пізніше:

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

Тут імовірності вимірювання кожного з двох станів більше не дорівнюють коефіцієнтам, як це було у класичному імовірнісному стані вище. Натомість саме квадрат коефіцієнтів дає нам імовірності, і кожен із цих коефіцієнтів тепер може бути комплексним, тобто мати дійсну та уявну частини.

Попри ці відмінності, результат вимірювання цього стану фактично такий самий, як і підкидання монети.

from qiskit import QuantumCircuit

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

qcoin.draw("mpl")

Output of the previous code cell

Таким чином, застосування воріт Адамара є аналогом підкидання монети. І так само, як ми підкидали монету 1000 разів, щоб подивитися на статистику випадінь, ми можемо зробити щось подібне в Qiskit із нашою «квантовою монетою». Ми можемо використати примітив Qiskit під назвою Sampler, який повторить Circuit кілька разів, щоб зібрати статистику результуючого стану.

Спочатку завантажимо сервіс Qiskit Runtime і примітиви, а потім виберемо Backend для запуску Circuit.

Нижче є код для збереження твоїх облікових даних при першому використанні. Обов'язково видали цю інформацію з блокнота після збереження в середовищі, щоб твої облікові дані випадково не потрапили до інших при спільному використанні блокнота. Дивись посібники Налаштування облікового запису IBM Cloud та Ініціалізація сервісу в ненадійному середовищі для детальнішої інформації.

# 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

Якщо в тебе більше немає доступного часу на обліковому записі, можна також запустити це на симуляторі. Просто розкоментуй код і запусти клітинку нижче:

## Use a local simulator

# from qiskit_aer import AerSimulator

## Generate a simulator that mimics the real quantum system

# backend_sim = AerSimulator.from_backend(backend)

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

# from qiskit.primitives import BackendSamplerV2
# sampler_sim = BackendSamplerV2(backend = backend_sim)
# from qiskit.primitives import BackendEstimatorV2
# estimator_sim = BackendEstimatorV2(backend = backend_sim)
## Transpile
from qiskit.transpiler.preset_passmanagers import generate_preset_pass_manager

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

qc_isa = pm.run(qcoin)
## Execute

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

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

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

plot_histogram(counts)

Output of the previous code cell

При 1000 вибірках наведеного вище Circuit ми отримуємо щось практично ідентичне класичній гістограмі монети, з урахуванням статистичних коливань.

Окрім вибірки статистики квантової монети, ми також можемо використати інший примітив Qiskit під назвою Estimator, щоб виміряти так зване математичне сподівання (expectation value) спостережуваної (observable) величини стану. Щоб проілюструвати, що таке це математичне сподівання, використаємо як приклад класичну монету. Скажімо, ти використовуєш монету для гри: кожного разу, коли підкидаєш монету й вона падає «орлом вгору», ти виграєш одну гривню. Але кожного разу, коли вона падає «решкою вниз», ти втрачаєш одну гривню. Якщо хочеш знати, скільки грошей ти очікуєш отримувати за кожне підкидання (математичне сподівання спостережуваної «гроші»), ти розраховуєш:

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}

Оскільки ти з однаковою ймовірністю можеш виграти гривню або втратити її, математичне сподівання дорівнює $0.

Аналогічно, для квантового стану ми можемо обчислити математичне сподівання спостережуваної «Z», де Z — матриця Паулі зі значеннями +1 і -1, пов'язаними зі станами 0|0\rangle і 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

Ми отримуємо математичне сподівання, рівне 0, як і очікувалось. Це ще один спосіб підтвердити, що дійсно існує рівна ймовірність виміряти 0 або 1, і поведінка нагадує підкидання монети.

На цьому етапі «квантова монета» виглядає точнісінько як класична. Але в наступному розділі ми проведемо кілька експериментів, які виявлять фундаментальні відмінності між ними.

Квантове розкриття: експеримент у трьох вимірах

Проведімо уявний експеримент: уяви, що ти підкидаєш монету в повітря, і замість того, щоб дати їй впасти на землю, ти встигаєш зловити її, притиснувши між долонями. Тепер монета виявляється не орлом угору чи донизу, а орлом ліворуч або праворуч.

Перевір своє розуміння

Прочитай питання нижче, подумай над відповіддю, а потім клацни трикутник, щоб побачити рішення.

Яка ймовірність кожного з цих результатів — орел ліворуч або орел праворуч?

Відповідь:

Імовірність усе одно буде 50 на 50. Не має значення, у якому вимірі ми вирішимо вимірювати результат підкидання монети.

Сподіваємося, ти відповів, що ймовірність знайти орла ліворуч або праворуч все одно 50 на 50. Вимір, уздовж якого вимірюється результат підкидання монети, не повинен впливати на ймовірність результатів.

Але як виглядатимуть речі для нашої квантової монети? Перевіримо.

Ми можемо створити квантову суперпозицію так само, як і минулого разу, — за допомогою воріт Адамара. Щоб виміряти «орел ліворуч або праворуч» на нашій квантовій монеті, можемо зробити те саме, що й із класичною монетою: виміряти вздовж іншої осі. Наші стандартні вимірювання на квантовому комп'ютері проводяться вздовж вертикальної осі, так само як звичайне вимірювання «орел угору або вниз» класичної монети. Але ми також можемо запитати нашу квантову монету, чи вона «орел ліворуч або праворуч», або, що рівноцінно, чи перебуває вона в станах +|+\rangle або |-\rangle, які спрямовані вздовж осі xx. Sampler робить вибірку лише в базисі вимірювань Z, але ми можемо використати Estimator, щоб отримати математичне сподівання X. Значення X дорівнюють +1 і -1 для станів +|+\rangle і |-\rangle відповідно.

Перевір своє розуміння

Прочитай питання нижче, подумай над відповіддю, а потім клацни трикутник, щоб побачити рішення.

Якби квантова монета поводилась як класична в цьому випадку, ми мали б імовірність 50 на 50 виміряти стан +|+\rangle і |-\rangle. Яке математичне сподівання X повернув би Estimator у такому разі?

Відповідь:

Коли ми застосовуємо X до стану +|+\rangle, ми отримуємо значення +1, а до стану |-\rangle — -1. Тому при розподілі 50 на 50 ми б отримали математичне сподівання, рівне 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

Математичне сподівання X для цього стану дорівнює 1. Отже, немає ймовірності 50 на 50 для вимірювання +|+\rangle і |-\rangle.

Перевір своє розуміння

Прочитай питання нижче, подумай над відповіддю, а потім клацни трикутник, щоб побачити рішення.

Що це математичне сподівання говорить нам про стан ψ|\psi\rangle? Які ймовірності виміряти +|+\rangle і |-\rangle у цьому базисі X?

Відповідь:

Оскільки математичне сподівання збігається зі значенням X для стану +|+\rangle, це означає, що ми маємо 100% ймовірність виміряти стан +|+\rangle при вимірюванні вздовж X.

Що тут відбувається? Схоже, наша квантова монета може мати випадкові, імовірнісні результати вздовж одного виміру, але цілком передбачувані результати вздовж іншого. Це було б схоже на підкидання монети з гарантією того, що кожного разу, коли її ловлять, притискаючи між долонями, вона опиняється орлом праворуч.

Квантова фаза

Ключова відмінність квантової монети в тому, що вона має ще одну властивість, якої немає у класичної монети. Пам'ятаймо, що в класичному імовірнісному стані

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

кожен коефіцієнт — це просто дійсне додатне число, що представляє ймовірність виміряти певний стан. У квантовому стані

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

коефіцієнти є комплексними, тобто мають дійсну та уявну частини. Кожен коефіцієнт cic_i можна представити як двовимірний вектор на комплексній площині з модулем ci|c_i| і кутом ϕi\phi_i, який він утворює з дійсною віссю:

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

A circle in a complex plane. The quantum state is represented as an arrow of length 1 that can rotate to point to any point on the circle. The horizontal component of the arrow is its real amplitude, and the vertical is its complex amplitude.

Ми називаємо ϕi\phi_i фазою. Фаза говорить нам, як два доданки в квантовому стані будуть інтерферувати, тобто як вони будуть додаватися або гаситися, як хвилі. Якщо дві хвилі синфазні — їхні гребені та западини збігаються, — вони об'єднуються у хвилю вдвічі більшої амплітуди. Це називається конструктивною інтерференцією. Якщо вони у протифазі — гребінь однієї збігається з западиною іншої, і навпаки, — вони інтерферують деструктивно і повністю гасять одна одну.

Як і хвилі, квантові стани також можуть додаватися конструктивно або деструктивно. Це може бути складніше помітити, оскільки ми не завжди говоримо про реальну хвилю у фізичному просторі. У випадку наших кубітів інтерференція відбувається в абстрактному інформаційному просторі кубітів. Також зверни увагу: оскільки для інтерференції важлива лише відносна фаза між двома хвилями — тобто різниця фаз Δϕ=ϕ2ϕ1\Delta \phi = \phi_2 - \phi_1 двох коефіцієнтів — ми зазвичай застосовуємо глобальну фазу ϕ1-\phi_1 до всього стану, щоб c1c_1 був суто дійсним, а відносна фаза повністю була захоплена в c2c_2.

Щоб побачити, як фаза може спричиняти інтерференцію в нашій квантовій монеті, спробуймо застосувати Hadamard двічі замість одного разу. Класично це не мало б жодного сенсу — якщо застосування Hadamard еквівалентно підкиданню монети, то не можна підкинути монету, яка вже летить. Але подивімось, що відбувається з квантовою монетою:

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

Тепер, перш ніж використовувати Sampler для вимірювання результуючого стану, подумаймо, як цей кубіт буде перетворено кожними воротами. Він починає, як завжди, у стані 0|0\rangle. Потім перший Hadamard перетворює стан на суперпозицію, як ми вже бачили:

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

У цьому випадку обидва коефіцієнти суто дійсні й додатні, тобто фаза ϕ=0\phi=0.

Другий Hadamard потім застосовується до кожної частини суперпозиційного стану окремо. Ми вже знаємо, як Hadamard перетворює стан 0|0\rangle. А що з 1|1\rangle?

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

Це знову рівна суперпозиція 0 і 1, схожа на підкидання монети, але коефіцієнт перед 1|1\rangle у цьому стані має фазу ϕ=π\phi = \pi, що дає йому від'ємний знак.

Перевір своє розуміння

Прочитай запитання нижче, подумай над відповіддю, а потім натисни на трикутник, щоб побачити розв'язок.

Обчисли стан, що отримується після застосування другого Адамара. Тобто, обчисли: H(120+121)H(\frac{1}{\sqrt{2}} |0\rangle + \frac{1}{\sqrt{2}} |1\rangle). Зауваж, що HH є дистрибутивним, тому його можна застосовувати до кожного з доданків окремо.

Відповідь:

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

Тепер перевіримо наше передбачення за допомогою 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

Другий Адамар скасував перший, і ми повернулися до стану 0, з якого починали! Це відбувається тому, що Адамар перетворює як стан 0|0\rangle, так і 1|1\rangle на схожі стани, але з протилежними фазами. Після другого Адамара ми бачимо, що доданки 0|0\rangle інтерферують конструктивно, тоді як доданки 1|1\rangle інтерферують деструктивно й скасовують одне одного.

Розглянемо далі: ми можемо змінити фазу за допомогою Gate «PHASE». Отже, тепер застосуємо Адамар для створення суперпозиції, застосуємо зсув фази на π\pi радіан, а потім застосуємо другий Адамар:

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

Тепер Qubit вимірюється у стані 1 замість 0.

Отже, навіть із цих кількох простих експериментів ти вже можеш побачити, яку кардинальну різницю може вносити ця фаза у квантовий Circuit. Спочатку це може бути непомітно і важко вловити. У нашому першому експерименті, де ми просто підкидали квантову монету за допомогою Gate Адамара й вимірювали результат підкидання, вплив фази ніяк не проявився. Лише коли ми розкопали глибше, то виявили, яку різницю може зробити фаза. Вона може змусити один і той самий квантовий Gate мати буквально протилежний ефект на Qubit.

Спробуй сам:

Відредагуй клітинку коду нижче, щоб змінити фазу таким чином, щоб другий Адамар створював стан суперпозиції з ймовірностями 25% і 75% виявити стан у 0|0\rangle та 1|1\rangle відповідно. Перевір свою відповідь математично.

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

Ще одна (краща) аналогія з монетою з використанням Gate NOT\sqrt{\text{NOT}}

До цього моменту ми дізналися, що акт підкидання монети досить сильно відрізняється від створення стану суперпозиції. Чи існує краща аналогія з монетою, яка б краще відображала феномени, пов'язані з суперпозицією? Так. Існує.

Ми зробимо ще один уявний експеримент із монетою. Уяви, що монета лежить на столі орлом догори. Щоб перевернути її орлом донизу, ми просто перевертаємо її. Це обчислювальний еквівалент Gate «NOT».

Скажімо, ми хочемо побудувати операцію, яка, якщо застосувати двічі, буде еквівалентна Gate NOT. Тобто ми хочемо «квадратний корінь з NOT», або NOT\sqrt{\text{NOT}}. Ми можемо зробити це, розглянувши, як Gate NOT фізично реалізується на монеті: це просто обертання на 180 градусів, наприклад, навколо осі x. Отже, якщо б ми повернули монету лише на 90 градусів навколо осі x, це було б еквівалентно Gate NOT\sqrt{\text{NOT}}.

Уяви, що після застосування Gate NOT\sqrt{\text{NOT}} ми хочемо запитати, чи монета лежить орлом угору чи вниз. Ні те, ні інше — вона стоїть на ребрі відносно вертикальної осі. Але тепер перевизначимо наше «вимірювання» монети: по-перше, монета «колапсує» вздовж осі вимірювання (якщо притиснути її рукою, щоб вона лягла плиском), а по-друге, перевіряємо, яким боком вона лежить.

Якщо ми виконаємо таке «вимірювання» монети, що стоїть на ребрі, то вона «колапсує» до орла вгору або орла вниз з однаковою імовірністю. Як і при підкиданні монети, в принципі напрямок падіння можна передбачити, виходячи з початкових умов монети й того, як саме сила нашої руки прикладається до монети для її «колапсу». Але на практиці передбачити, який бік опиниться вгорі, складно, тому результат є, по суті, випадковим.

Насправді ми можемо вимірювати цю монету вздовж трьох різних осей: xx, yy і zz. Ми бачимо, що ребро монети направлене вздовж xx і zz, тому вимірювання в цих напрямках вимагає «колапсу» монети — відповідно, вздовж цих осей результат буде випадковим з імовірністю 50:50 для орла вгору й вниз. Але вздовж осі yy монета вже лежить плиском, причому її орел дивиться в напрямку -y. Це можна назвати «орел вперед».

Отже, тоді як вимірювання по x і z давали випадкові результати, вимірювання по y завжди дає той самий результат! Якщо ти пам'ятаєш експеримент «квантове підкидання монети» з попереднього розділу, це нагадує поведінку квантової монети. Вздовж напрямку z вона вимірювалася як 0 або 1 з ймовірністю 50/50, але вздовж X — завжди +|+\rangle і ніколи |-\rangle. Це наводить на думку, що монета, яка спокійно стоїть на ребрі, — можливо, кращий спосіб уявити стан суперпозиції Qubit, ніж монета, що хаотично обертається у повітрі.

Використаємо Qiskit, щоб перевірити, чи поводиться наша «квантова монета» так само, як класична монета при застосуванні Gate NOT\sqrt{\text{NOT}}. Застосуємо NOT\sqrt{\text{NOT}} до Qubit, що починає у стані 0|0\rangle, а потім скористаємося Estimator, щоб перевірити очікувані значення трьох спостережуваних: X, Y і 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]]

Очікувані значення для X, Y і Z рівні 0, -1 і 0 відповідно.

Перевір своє розуміння

Прочитай запитання нижче, подумай над відповіддю, а потім натисни на трикутник, щоб побачити розв'язок.

Виходячи з очікуваних значень, які ймовірності виміряти квантову монету орлом вгору/вниз (або ліворуч/праворуч, вперед/назад) для кожної з 3 осей вимірювання?

Відповідь:

Імовірність виміряти будь-який зі станів вздовж X і Z рівна 50/50, а стан вздовж Y завжди вимірюється у напрямку -y.

Це той самий результат, що ми отримали у нашому уявному експерименті, застосовуючи поворот на 90 градусів «NOT\sqrt{\text{NOT}}» до класичної монети. Насправді тепер між монетою і станом Qubit існує точна аналогія. Ми можемо уявити стан Qubit як вектор, що вказує в напрямку орла на монеті, перпендикулярний до її поверхні. Таким чином, орел угору, тобто стан 0|0\rangle на квантовій монеті, еквівалентний вектору, що вказує прямо вгору; орел вниз, тобто 1|1\rangle, — прямо вниз. Будь-яка рівна суперпозиція 0|0\rangle і 1|1\rangle вказує горизонтально. Фаза стану визначає точний горизонтальний напрямок — напрямок, у якому він вказує вздовж екватора, дорівнює напрямку, у якому коефіцієнт c2c_2 вказує на комплексній площині.

Тепер кожен Gate, який ми бачили у цьому ноутбуці, можна уявити як обертання (або серію обертань) монети/вектора.

  • NOT: 180 градусів навколо осі x

  • NOT\sqrt{\text{NOT}}: 90 градусів навколо осі x

  • PHASE: обертання на ϕ\phi навколо осі z

  • Адамар: цей трохи складніший. Спочатку ми порівнювали його з підкиданням монети, яка некеровано крутиться у повітрі. Але Адамар — це насправді контрольоване, детерміноване обертання монети, як і інші Gate. Адамар виконується поворотом на 90 градусів навколо осі y, а потім на 180 градусів навколо осі x.

Отже, у квантовому стані суперпозиції чи у будь-якій зі стандартних операцій над Qubit немає нічого випадкового. Кожна операція є детермінованою і оборотною. Випадковість з'являється лише тоді, коли ми вирішуємо виміряти квантовий стан.

Стан Qubit як вектор Блоха

Цей вектор, що вказує в напрямку «орла» монети, відомий як «вектор Блоха». Формально довільний (ізольований) стан Qubit можна представити вектором, що лежить на поверхні сфери радіуса 1 з координатами (r,θ,ϕ)(r, \theta, \phi). У термінах цих координат стан Qubit записується як:

ψ=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. Тепер перевіримо за допомогою Qiskit, як змінюється вектор Блоха при застосуванні різних Gate до нашого Qubit, починаючи зі стану 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

Адамар

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

plot_bloch_multivector(qhadamard)

Output of the previous code cell

Висновок — що ж таке стан суперпозиції?

Ми розпочали цей модуль, порівнюючи випадковість вимірювання квантового стану суперпозиції з підкиданням монети. Ми порівнювали «Gate Адамара», що породжує квантову суперпозицію, з актом підкидання монети. Але завдяки серії експериментів ми дізналися, що між класичним підкиданням монети і квантовою суперпозицією існують принципові відмінності.

Ми дізналися, що у Qubit у стані суперпозиції насправді немає нічого «випадкового». Він схожий на монету, що спокійно стоїть у тривимірному просторі. Насправді монета, вільна обертатися у 3 вимірах, — дуже близька аналогія до одного зі способів візуалізації квантового стану Qubit, який називається вектором Блоха. Квантові Gate детерміновано й оборотно обертають цю монету/вектор Блоха. Лише коли ми вимірюємо Qubit, з'являється будь-яка випадковість. Ми порівняли цей процес вимірювання з притисканням монети, щоб вона лягла плиском у напрямку осі вимірювання.

Те, чи перебуває квантовий стан у суперпозиції взагалі, залежить лише від точки зору спостерігача. Як ти, мабуть, вже стикався раніше, ми вільні обирати свою систему координат — xx, yy і zz можуть вказувати вздовж будь-яких трьох ортогональних напрямків. Тому, якщо у нас є суперпозиція 0 і 1 в одній системі координат, ми можемо визначити нову систему координат — або, що еквівалентно, новий «базис вимірювання» — в якому стан вказує суто в напрямку +z+z і тому не є станом суперпозиції. Отже, коли ми говоримо, що Qubit перебуває у суперпозиції, ми також повинні відповісти на запитання: «суперпозиція чого

Можливо, після цього модуля у тебе складеться враження, що ми щойно розвіяли всю таємничість квантової механіки. Зрештою, один із нібито «дивних» аспектів — стан суперпозиції Qubit — насправді такий же простий, як тривимірний вектор. Але майте на увазі, що монета — це лише аналогія, а вектор Блоха — лише інструмент візуалізації для обчислення ймовірностей результатів вимірювань. Ми не можемо стверджувати, що квантовий стан насправді робить до того, як його виміряють. Адже перевірити це потребує вимірювання!

Ми обговоримо цю дилему щодо «справжньої» природи квантового стану та те, як квантовий феномен заплутаності може допомогти нам прояснити це, у модулі про нерівність Белла.

Запитання

Викладачі можуть замовити версії цих ноутбуків із ключами відповідей та рекомендаціями щодо місця у типових навчальних програмах, заповнивши це коротке опитування про те, як використовуються ноутбуки.

Ключові поняття:

  • Хоча вимірювання Qubit у стані суперпозиції є імовірнісним, як і підкидання монети, сам стан суперпозиції поводиться інакше, ніж монета, що підкидається.
  • Головна відмінність між класичним розподілом імовірностей та суперпозицією полягає в тому, що суперпозиція має фазову когерентність, яка дозволяє їй конструктивно або деструктивно інтерферувати.
  • Стан одного ізольованого Qubit можна візуалізувати як точку на так званій «сфері Блоха», де відносні амплітуди компонент 0|0\rangle і 1|1\rangle визначають полярний кут θ\theta, а відносні фази між двома компонентами — азимутальний кут ϕ\phi.
  • Всі однокубітні квантові Gate можна розглядати як обертання вектора на цій сфері.

Питання вірно/хибно:

  1. В/Х Квантова суперпозиція — це, по суті, те саме, що ймовірнісна подія у класичній фізиці, наприклад підкидання монети.

  2. В/Х Довжина вектора Блоха, що описує стан одного ізольованого Qubit, завжди дорівнює 1.

  3. В/Х Однокубітні квантові Gate не змінюють довжину вектора Блоха.

Питання з множинним вибором:

  1. Вибери правильний вектор Блоха, що відповідає стану Ψ=130+eiπ/4231|\Psi\rangle = \sqrt{\frac{1}{3}}|0\rangle + e^{i \pi / 4} \sqrt{\frac{2}{3}}|1\rangle:

Four Bloch spheres are shown. The vector points nearly along +x in option a, halfway between +x and +y and slightly below the xy plane in option b, between +x and -y, and slightly above the xy plane in option c, and along -x in option d.

  1. Сфера Блоха описує: (вибери всі правильні відповіді)

    a. амплітуду

    b. заплутаність з іншими Qubit

    c. фазу

    d. колір

    e. ймовірності результатів вимірювань

Питання для обговорення:

  1. Чому стан Qubit можна візуалізувати на сфері Блоха, а розподіл імовірностей підкидання монети — ні?

  2. Чому монета, що обертається у повітрі, не є найкращою аналогією до квантового стану суперпозиції? Який аспект суперпозиції не відображає ця аналогія?

Задачі підвищеної складності:

  1. Використай Qiskit, щоб створити Circuit, що перетворює стан 0|0\rangle на стан 320+12ei5π61\frac{\sqrt{3}}{2}|0\rangle + \frac{1}{2}e^{i \frac{5\pi}{6}}|1\rangle