Квантова телепортація
Для цього модуля «Qiskit у класі» студенти мають мати робоче середовище Python із встановленими такими пакетами:
qiskitv2.1.0 або новішийqiskit-ibm-runtimev0.40.1 або новішийqiskit-aerv0.17.0 або новішийqiskit.visualizationnumpypylatexenc
Щоб налаштувати і встановити вказані пакети, дивись посібник Встановлення Qiskit. Щоб запускати завдання на реальних квантових комп'ютерах, студентам потрібно створити обліковий запис IBM Quantum®, дотримуючись кроків із посібника Налаштування облікового запису IBM Cloud.
Цей модуль було протестовано — він використав 14 секунд QPU-часу. Це лише оцінка; твоє фактичне використання може відрізнятися.
# Added by doQumentation — required packages for this notebook
!pip install -q numpy qiskit qiskit-aer qiskit-ibm-runtime
# Uncomment and modify this line as needed to install dependencies
#!pip install 'qiskit>=2.1.0' 'qiskit-ibm-runtime>=0.40.1' 'qiskit-aer>=0.17.0' 'numpy' 'pylatexenc'
Переглянь відеоогляд модуля від Dr. Katie McCormick нижче або натисни тут, щоб переглянути на YouTube.
Вступ і контекст
Квантова телепортація — це техніка квантової фізики, яка дозволяє передавати квантову інформацію з одного місця в інше без фізичного переміщення частинок. На відміну від науково-фантастичної концепції телепортації, цей процес не передбачає транспортування матерії. Натомість він спирається на принцип квантової заплутаності, коли дві частинки виявляються пов'язаними незалежно від відстані між ними. Через серію точних вимірювань і класичного зв'язку квантовий стан однієї частинки може бути відтворений в іншій частинці у віддаленому місці — тобто квантова інформація фактично «телепортується». У цьому модулі ми розглянемо, як це працює математично, а потім реалізуємо квантову телепортацію на реальному квантовому комп'ютері. Вступ тут буде коротким; для глибшого ознайомлення з квантовою інформацією та детальнішого пояснення телепортації рекомендуємо курс Джона Ватруса Основи квантової інформації, і зокрема розділ про Телепортацію.
Класичні біти можуть перебувати у станах 0 або 1. Квантові біти (кубіти) можуть перебувати у квантових станах та , а також у лінійних комбінаціях цих станів — так званих «суперпозиціях», наприклад , де та Хоча стани можуть існувати в цій суперпозиції, вимірювання стану «колапсує» його до одного зі станів — або . Параметри та пов'язані з імовірністю кожного результату вимірювання згідно з формулами
Звідси й умова
Ще одна ключова властивість — кубіти можуть бути «заплутані»: вимірювання одного кубіта може впливати на результат вимірювання іншого, заплутаного кубіта. Зрозуміти, чим заплутаність відрізняється від класичних кореляцій, дещо непросто. Спочатку пояснимо нашу нотацію. Розглянемо два кубіти, що належать другу 0 (Алісі) і другу 1 (Бобу), кожен з яких перебуває у стані :
або
що іноді скорочується просто до
Зверни увагу: кубіт з найменшим номером (або літерою) розташований крайнім праворуч. Це конвенція, яка називається «little-endian» нотацією і використовується в усьому Qiskit. Якщо двокубітний стан пари друзів дорівнює і вони вимірюють стан своїх кубітів, кожен отримає 0. Аналогічно, якщо кубіти перебувають у стані , кожне вимірювання дасть 1 — це нічим не відрізняється від класичного випадку. Однак у квантових обчисленнях можна поєднати це із суперпозицією і отримати стани на кшталт
У такому стані невідомо — і навіть ще не визначено природою — чи кубіти Аліси та Боба перебувають у стані 0 чи 1, проте відомо, що вони виміряють однаковий стан свого кубіта. Наприклад, якщо Боб вимірює свій кубіт у стані , це можливо лише тоді, коли вимірювання колапсувало двокубітний стан до одного з двох можливих — а саме до . Це залишає кубіт Аліси також у стані .
Заплутаність кубітів у такий спосіб не вимагає, щоб кубіти залишалися фізично близько один до одного. Іншими словами, можна заплутати кубіти, розділити їх на велику відстань і використовувати їхню заплутаність для передачі інформації. Заплутаний стан, подібний до наведеного вище, є базовою одиницею заплутаності і іноді називається «е-бітом» — одним бітом заплутаності. Ці е-біти можна розглядати як ресурси у квантовому зв'язку, оскільки кожен е-біт, яким діляться між собою віддалені партнери, може бути використаний — як ми описуємо тут — для переміщення інформації з одного місця в інше.
Перша думка багатьох, хто вперше знайомиться з цим, — чи не порушуємо ми теорію відносності: чи не можна так передавати інформацію швидше за світло? Аж ніяк не припиняй ставити запитання і перевіряти наукові закони, але, на жаль, цей підхід не дозволить нам передавати інформацію швидше за світло — з причин, які стануть зрозумілі в ході цього модуля. Спойлер: дивовижно, але це НЕ пов'язано зі швидкістю поширення цього «скидання», яке, схоже, відбувається швидше за світло [1]. Почнемо з двох учасників — Аліси та Боба, які спочатку перебувають в одному місці і можуть спільно працювати з одними кубітами. Ці учасники заплутають свої кубіти. Потім вони переберуться у два різні географічні місця, взявши з собою свої кубіти. Після цього Аліса отримає квантову інформацію на новому кубіті Q. Ми не робимо жодних припущень щодо інформації на Q. Стан Q може бути секретом, невідомим Алісі; він може бути невідомим нікому. Але Аліса отримує завдання передати інформацію з Q до Боба. Вона зробить це за допомогою квантової телепортації.
Щоб це здійснити, нам потрібно знати деякі квантові операції, або «гейти».
Квантові оператори (гейти)
Можеш пропустити цей розділ, якщо вже знайомий із квантовими гейтами. Якщо хочеш краще їх зрозуміти, ознайомся з курсом Основи квантової інформації, особливо першими двома уроками на IBM Quantum Learning.
Для цього протоколу телепортації ми переважно використовуватимемо два типи квантових гейтів: гейт Адамара та гейт CNOT. Кілька інших гейтів відіграватимуть допоміжну роль: гейт , гейт і гейт SWAP.
Цей модуль можна пройти маючи дуже обмежену підготовку з лінійної алгебри, але іноді корисно візуалізувати квантово-механічні гейти через матриці та вектори. Тому ми також наводимо матрично-векторні форми квантових гейтів і станів.
Стани, які ми вже представили, вибрані (частково за конвенцією, частково через обмеження) з такими векторними формами:
Таким чином довільний стан можна записати як
Існує певний вибір щодо того, як розширити нотацію на багатокубітні стани, але варіант нижче є досить стандартним:
З урахуванням цієї векторної нотації введемо необхідні квантові гейти, їхній вплив на квантові стани та їхні матричні форми.
H Гейт Адамара: Створює стан суперпозиції. Однокубітний гейт.
Схема з гейтом Адамара будується так:
from qiskit import QuantumCircuit
qc = QuantumCircuit(1)
qc.h(0)
qc.draw("mpl")
CNOT Гейт керованого NOT: Цей гейт використовує два кубіти: керуючий і цільовий. Перевіряє стан керуючого кубіта, який не змінюється. Якщо керуючий кубіт перебуває у стані , гейт змінює стан цільового кубіта; якщо стан керуючого кубіта — жодних змін не відбувається. У нотації нижче припустимо, що кубіт (крайній правий) є керуючим, а кубіт (крайній лівий) — цільовим. Нижче використовується нотація
Іноді можна зустріти запис CNOT, де порядок керуючого і цільового кубітів просто мається на увазі. Але в коді та на схемах такої неоднозначності немає.
Гейт CNOT виглядає дещо інакше на схемі, оскільки потребує двох кубітів. Ось як його реалізувати:
qc = QuantumCircuit(2)
qc.cx(0, 1)
qc.draw("mpl")
Перевір своє розуміння
Прочитай питання нижче, подумай над відповіддю, а потім натисни на трикутник, щоб побачити рішення.
Більшість гейтів мають однакову матричну форму в Qiskit і в усіх інших місцях. Але гейт CNOT діє на два кубіти, тому одразу виникає питання про порядок нумерації кубітів. Тексти, що впорядковують кубіти як , показуватимуть іншу матричну форму для своїх гейтів CNOT. Перевір явним матричним множенням, що матриця CNOT вище правильно діє на стан
Відповідь:
Гейт : Еквівалент операції NOT. Однокубітний гейт.
У Qiskit схема з гейтом виглядає так:
qc = QuantumCircuit(1)
qc.x(0)
qc.draw("mpl")
Гейт : Додає «фазу» до стану (префактор, який для Z-власних станів та дорівнює 1 або −1 відповідно). Однокубітний гейт.
У Qiskit схема з гейтом виглядає так:
qc = QuantumCircuit(1)
qc.z(0)
qc.draw("mpl")
Теорія
Давай викладемо протокол квантової телепортації за допомогою математики. Потім у наступному розділі ми реалізуємо це налаштування на квантовому комп'ютері.
Аліса та Боб заплутують свої кубіти: Спочатку кубіт Аліси та кубіт Боба кожен окремо перебувають у стані (це правомірне припущення і водночас правильна ініціалізація для квантових комп'ютерів IBM®). Запишемо це як або просто як . Обчислимо, що відбувається, коли Аліса та Боб застосовують гейт Адамара до кубіта Аліси, а потім гейт CNOT із кубітом Аліси як керуючим і кубітом Боба як цільовим:
Зверни увагу: тепер кубіти Аліси та Боба заплутані. Хоча природою ще не визначено, чи їхні кубіти перебувають у стані або , відомо, що вони перебувають в одному стані. Аліса та Боб розділяються: Двоє друзів переміщують свої кубіти до нових місць, можливо, дуже далеко одне від одного. Це супроводжується багатьма застереженнями: переміщення квантової інформації без її порушення — нетривіальне завдання. Але це можливо, і в цьому модулі ти це зробиш. Проте май на увазі, що при переміщенні квантової інформації ми очікуємо певних помилок.
Вводиться Q: Секретний стан підготовлено на кубіті Q:
На цьому етапі Q просто знаходиться поруч із кубітом Аліси (A). Заплутаності не відбулося, тому квантовий стан трьох кубітів разом можна записати як:
Мета — перемістити інформацію з Q від Аліси до місця, де знаходиться Боб. На цьому етапі ми не висуваємо жодних вимог щодо секретності або швидкості передачі інформації — ми просто досліджуємо, як інформація може переміщатися від Аліси до Боба. Оскільки інформація починається на Q, ми припустимо, що Q отримує найменший номер серед кубітів, завдяки чому у little-endian нотації Q буде крайнім правим кубітом у наведеній нижче математиці.
Аліса заплутує кубіти A і Q: Аліса застосовує гейт CNOT із власним кубітом як керуючим і Q як цільовим, а потім застосовує гейт Адамара до Q. Обчислимо трикубітний стан після цієї операції:
Оскільки A і Q знаходяться в одному місці, згрупуємо наведені вище доданки відповідно до результатів вимірювань кубітів A і Q:
Перевір своє розуміння
Прочитай питання нижче, подумай над відповіддю, а потім натисни на трикутник, щоб побачити рішення.
З огляду на наведений вище вираз для станів усіх трьох кубітів, яка ймовірність того, що вимірювання кубітів A і Q дасть
Відповідь:
25%. Щоб це побачити, пригадай, що стан Боба має бути нормований, тому
Тепер Аліса може виміряти кубіти A і Q. Вона не може контролювати результат цього вимірювання, оскільки квантові вимірювання є ймовірнісними. Отже, коли вона вимірює, можливі 4 результати, і всі 4 є однаково ймовірними: та Зверни увагу, що кожен результат по-різному впливає на кубіт Боба. Наприклад, якщо Аліса знаходить свої кубіти у стані , це колапсує весь трикубітний квантовий стан до Інші результати вимірювань Аліси дають різні стани для Боба. Вони зібрані в таблиці нижче.
| Результат Аліси | Стан Боба | Інструкція для Боба | Результат |
|---|---|---|---|
| Нічого | |||
| , потім | |||
| При всіх можливих результатах вимірювань кубітів Аліси кубіт Боба залишається у стані, що нагадує секретний стан, який спочатку був на Q. Якщо Аліса вимірює $ | 0\rangle_C | 0\rangle_A\alphaX | 0\rangle |
Тепер має бути зрозуміло, чому ми не можемо використати це налаштування для передачі інформації швидше за світло. Нам може пощастити виміряти , і тоді Боб миттєво матиме точний секретний стан. Але Боб не знатиме про це, поки ми не зателефонуємо йому і не скажемо: «Ми виміряли , тому тобі нічого не потрібно робити».
У уявному експерименті кубіти часто фізично розділяють і переміщають у нові місця. Квантові комп'ютери IBM® використовують твердотільні кубіти на чіпі, які не можна роз'єднати. Тому замість того, щоб переміщати Алісу та Боба в різні місця, ми розділимо інформацію на самому чіпі, використовуючи так звані «swap-гейти» для переміщення інформації з одного кубіта на інший.
Експеримент 1: Базова телепортація
IBM Quantum рекомендує підходити до задач квантових обчислень за допомогою фреймворку, який ми називаємо «Qiskit patterns» («патерни Qiskit»). Він складається з таких кроків.
- Крок 1: Відобрази свою задачу у квантову схему
- Крок 2: Оптимізуй свою схему для запуску на реальному квантовому залізі
- Крок 3: Виконай своє завдання на квантових комп'ютерах IBM за допомогою Runtime Primitives
- Крок 4: Опрацюй результати після виконання
Крок 1: Відобрази задачу у квантову схему
Вся математика, яку ми виконали вище, — це і є опис кроку 1. Реалізуємо його зараз, побудувавши нашу квантову схему за допомогою Qiskit! Починаємо зі створення квантової схеми з трьома кубітами та заплутуємо два кубіти Аліси та Боба. Візьмемо їх як кубіти 1 і 2, а кубіт 0 зарезервуємо для секретного стану.
# Step 1: Map your problem to a quantum circuit
# Import some general packages
from qiskit import ClassicalRegister, QuantumCircuit, QuantumRegister
import numpy as np
# Define registers
secret = QuantumRegister(1, "Q")
Alice = QuantumRegister(1, "A")
Bob = QuantumRegister(1, "B")
cr = ClassicalRegister(3, "c")
qc = QuantumCircuit(secret, Alice, Bob, cr)
# We entangle Alice's and Bob's qubits as in our work above.
# We apply a Hadamard gate and then a CNOT gate.
# Note that the second argument in the CNOT gate is the target.
qc.h(Alice)
qc.cx(Alice, Bob)
# Inserting a barrier changes nothing about the logic. It just allows us to
# force gates to be positioned in "layers".
qc.barrier()
# Now we will use random variables to create the secret state.
# Don't worry about the "u" gate and the details.
np.random.seed(42) # fixing seed for repeatability
theta = np.random.uniform(0.0, 1.0) * np.pi # from 0 to pi
varphi = np.random.uniform(0.0, 2.0) * np.pi # from 0 to 2*pi
# Assign the secret state to the qubit on the other side of Alice's (qubit 0), labeled Q
qc.u(theta, varphi, 0.0, secret)
qc.barrier()
# Now entangle Q and Alice's qubits as in the discussion above.
qc.cx(secret, Alice)
qc.h(secret)
qc.barrier()
# Now Alice measures her qubits, and stores the outcomes in the "classical registers" cr[]
qc.measure(Alice, cr[1])
qc.measure(secret, cr[0])
# Now we insert some conditional logic. If Alice measures Q in a "1" we need a Z gate, and if Alice
# measures A in a "1" we need an X gate (see the table).
with qc.if_test((cr[1], 1)):
qc.x(Bob)
with qc.if_test((cr[0], 1)):
qc.z(Bob)
qc.draw(output="mpl")
Це все, що потрібно зробити, щоб стан Аліси телепортувався до Боба. Однак пригадай, що коли ми вимірюємо квантовий стан , ми отримуємо або , або Тож наприкінці всього цього Боб точно матиме секретний стан Аліси, але легко перевірити це вимірюванням не вийде. Щоб вимірювання показало, що ми все зробили правильно, потрібно застосувати прийом. Ми використовували оператор «U» для «унітарного», яким готували секретний стан Аліси. Можна застосувати обернений до U наприкінці нашої схеми. Якщо U відображав стан Аліси у , то обернений до U відобразить Боба назад до Цей останній крок не обов'язково виконувати, якщо мета — просто перемістити квантову інформацію. Він потрібен лише для перевірки.
# Add the inverse of U and measure Bob's qubit.
qc.barrier()
qc.u(theta, varphi, 0.0, Bob).inverse() # inverse of u(theta,varphi,0.0)
qc.measure(Bob, cr[2]) # add measurement gate
qc.draw(output="mpl")
Отже, якщо ми все зробили правильно, наше вимірювання кубіта Боба має дати стан . Звісно, ці вимірювання є ймовірнісними. Тому, навіть якщо існує невелика ймовірність виміряти кубіт Боба у стані , одне вимірювання може дати Щоб переконатися, що ймовірність є досить високою, нам потрібно зробити багато вимірювань.
Крок 2: Оптимізуй задачу для квантового виконання
Цей крок бере операції, які ми хочемо виконати, і виражає їх у термінах функціональності конкретного квантового комп'ютера. Він також відображає нашу задачу на топологію квантового комп'ютера.
Почнемо із завантаження кількох пакетів, необхідних для зв'язку з квантовими комп'ютерами IBM. Також потрібно вибрати бекенд, на якому запускати задачу. Можна або обрати найменш завантажений бекенд, або вибрати конкретний бекенд, властивості якого нам відомі.
Нижче є код для першого збереження твоїх облікових даних. Не забудь видалити цю інформацію з блокнота після збереження у своєму середовищі, щоб твої облікові дані випадково не потрапили до інших під час поширення блокнота. Дивись Налаштування облікового запису IBM Cloud та Ініціалізація сервісу в ненадійному середовищі для отримання додаткових вказівок.
# Load the Qiskit Runtime service
from qiskit_ibm_runtime import QiskitRuntimeService
# Load the Qiskit Runtime service
# 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()
# Use the least busy backend, or uncomment the loading of a specific backend like "ibm_brisbane".
backend = service.least_busy(operational=True, simulator=False, min_num_qubits=127)
# backend = service.backend("ibm_brisbane")
print(backend.name)
ibm_sherbrooke
Явно вмикаємо логіку для вимірювань.
from qiskit.circuit import IfElseOp
backend.target.add_instruction(IfElseOp, name="if_else")
Тепер потрібно «транспілювати» квантову схему. Це включає багато підкроків і є захопливою темою. Для прикладу одного підкроку: не всі квантові комп'ютери можуть безпосередньо реалізувати всі логічні гейти Qiskit. Необхідно записати гейти нашої схеми у термінах гейтів, які квантовий комп'ютер може виконати. Це та інші процеси можна виконати за допомогою preset pass manager. Встановлення optimization = 3 (найвищий рівень оптимізації) гарантує, що відображення нашої абстрактної квантової схеми на інструкції для квантового комп'ютера буде настільки ефективним, наскільки дозволяє наша попередня обробка.
# Step 2: Transpile
from qiskit.transpiler.preset_passmanagers import generate_preset_pass_manager
target = backend.target
pm = generate_preset_pass_manager(target=target, optimization_level=3)
qc_isa = pm.run(qc)
«Sampler» — це примітив, призначений для вибірки можливих станів, що виникають у результаті квантової схеми, і збирання статистики про те, які стани можуть бути виміряні та з якою ймовірністю. Імпортуємо тут Qiskit Runtime Sampler:
# Load the Runtime primitive and session
from qiskit_ibm_runtime import SamplerV2 as Sampler
sampler = Sampler(mode=backend)
Не всі обчислення на квантовому комп'ютері можна розумно симулювати на класичних комп'ютерах. Ця проста телепортація точно може, але зовсім не дивно, що ми можемо класично зберегти інформацію в одному місці чи іншому. Ми наполегливо рекомендуємо виконувати ці обчислення на реальному квантовому комп'ютері IBM. Але якщо безкоштовний місячний ліміт вичерпано, або якщо завдання потрібно виконати на заняттях і не можна чекати в черзі, цей модуль можна пройти з використанням симулятора. Для цього просто запусти комірку нижче і розкоментуй відповідні рядки у кроках «Execute».
# Load the backend sampler
from qiskit.primitives import BackendSamplerV2
# Load the Aer simulator and generate a noise model based on the currently-selected backend.
from qiskit_aer import AerSimulator
from qiskit_aer.noise import NoiseModel
noise_model = NoiseModel.from_backend(backend)
# Define a simulator using Aer, and use it in Sampler.
backend_sim = AerSimulator(noise_model=noise_model)
sampler_sim = BackendSamplerV2(backend=backend_sim)
# Alternatively, load a fake backend with generic properties and define a simulator.
# backend_gen = GenericBackendV2(num_qubits=18)
# sampler_gen = BackendSamplerV2(backend=backend_gen)
Крок 3: Виконання
Використай семплер, щоб запустити задачу, передавши схему як аргумент.
job = sampler.run([qc_isa])
# job = sampler_sim.run([qc_isa])
res = job.result()
counts = res[0].data.c.get_counts()
Крок 4: Постобробка та аналіз
Побудуємо графік результатів і проінтерпретуємо їх.
# This required 5 s to run on a Heron r2 processor on 10-28-24
from qiskit.visualization import plot_histogram
plot_histogram(counts)
Перевір своє розуміння
Прочитай запитання нижче, обміркуй відповідь, а потім натисни на трикутник, щоб побачити розв'язок.
Які зі станів вище свідчать про успішну телепортацію, і як це визначити?
Відповідь:
Стани — усі сумісні з успішною телепортацією. Це пояснюється тим, що ми додали гейт, який скасовує початкове підготування секретного стану. Якщо секретний стан було успішно телепортовано до кубіта Боба, цей додатковий гейт має повернути його кубіт до стану . Тобто будь-який з наведених вище станів, у якому кубіт Боба (кубіт 0, вимірюваний у нульовий компонент класичного регістра, а отже — найстарший/крайній правий) перебуває в стані , вказує на успіх.
Цей графік показує всі можливі результати вимірювань трьох кубітів за 5 000 спроб або «знімків» (shots). Раніше ми зазначали, що Аліса вимірює всі можливі стани кубітів A і Q з однаковою ймовірністю. У схемі ми призначили кубітам 0–2 ролі Q, A і B відповідно. У little-endian нотації кубіт Боба є найлівішим/найменшим. Тому чотири стовпчики ліворуч відповідають стану кубіта Боба , а інші два кубіти перебувають у всіх можливих комбінаціях приблизно з однаковою ймовірністю. Зверни увагу: майже всі (зазвичай ~95%) вимірювань дають кубіт Боба у стані , тобто наш експеримент вдався! Є невелика кількість знімків (~5%), де кубіт Боба виявився у стані . Логічно цього бути не повинно. Проте всі сучасні квантові комп'ютери схильні до шуму та помилок значно більшою мірою, ніж класичні. А квантова корекція помилок — це поки що лише галузь, що розвивається.
Експеримент 2: Телепортація через процесор
Мабуть, найцікавіший аспект квантової телепортації полягає в тому, що квантовий стан можна миттєво телепортувати на великі відстані (хоча класична передача додаткових гейтів — не миттєва). Як уже зазначалось, ми не можемо фізично відламати кубіти від процесора й переносити їх. Але ми можемо переміщати інформацію з одного кубіта на інший доти, доки кубіти, задіяні в телепортації, не опиняться на протилежних кінцях процесора. Повторимо описані вище кроки, але цього разу побудуємо більшу схему з достатньою кількістю кубітів, щоб охопити весь процесор.
Крок 1: Відобразь задачу на квантову схему
Цього разу кубіти Аліси і Боба будуть змінюватися. Тому ми не будемо давати конкретному кубіту назву «A» чи «B». Натомість ми пронумеруємо кубіти й використаємо змінні для позначення поточного розташування інформації на кубітах Аліси та Боба. Усі інші кроки, крім гейтів SWAP, залишаються такими ж, як описано раніше.
# Step 1: Map
# Define registers
qr = QuantumRegister(13, "q")
qc = QuantumCircuit(qr, cr)
# Define registers
secret = QuantumRegister(1, "Q")
ebitsa = QuantumRegister(6, "A")
ebitsb = QuantumRegister(6, "B")
# q = ClassicalRegister(1, "q meas")
# a = ClassicalRegister(1, "a")
# b = ClassicalRegister(1, "b")
cr = ClassicalRegister(3, "c")
qc = QuantumCircuit(secret, ebitsa, ebitsb, cr)
# We'll start Alice in the middle of the circuit, then move information outward in both directions.
Alice = 5
Bob = 0
qc.h(ebitsa[Alice])
qc.cx(ebitsa[Alice], ebitsb[Bob])
# Starting with Bob and Alice in the center, we swap their information onto adjacent qubits,
# until the information is on distant qubits.
for n in range(Alice):
qc.swap(ebitsb[Bob], ebitsb[Bob + 1])
qc.swap(ebitsa[Alice], ebitsa[Alice - 1])
Alice = Alice - 1
Bob = Bob + 1
qc.barrier()
# Create a random state for Alice (qubit zero)
np.random.seed(42) # fixing seed for repeatability
# theta = np.random.uniform(0.0, 1.0) * np.pi #from 0 to pi
theta = 0.3
varphi = np.random.uniform(0.0, 2.0) * np.pi # from 0 to 2*pi
qc.u(theta, varphi, 0.0, secret)
# Entangle Alice's two qubits
qc.cx(secret, ebitsa[Alice])
qc.h(secret)
qc.barrier()
# Make measurements of Alice's qubits and store the results in the classical register.
qc.measure(ebitsa[Alice], cr[1])
qc.measure(secret, cr[0])
# Send instructions to Bob's qubits based on the outcome of Alice's measurements.
with qc.if_test((cr[1], 1)):
qc.x(ebitsb[Bob])
with qc.if_test((cr[0], 1)):
qc.z(ebitsb[Bob])
qc.barrier()
# Invert the preparation we did for Carl's qubit so we can check whether we did this correctly.
qc.u(theta, varphi, 0.0, ebitsb[Bob]).inverse() # inverse of u(theta,varphi,0.0)
qc.measure(ebitsb[Bob], cr[2]) # add measurement gate
qc.draw("mpl")
На схемі видно, що логічні кроки залишились такими ж. Єдина відмінність — ми використали гейти SWAP, щоб перенести стан кубіта Аліси з кубіта 6 () до кубіта 1 (), що стоїть поруч із Q. І використали гейти SWAP, щоб перенести початковий стан Боба з кубіта 7 () до кубіта 12 (). Зверни увагу: стан кубіта 12 взагалі не пов'язаний із секретним станом Q аж до моменту вимірювань на віддалених кубітах 0 і 1, і не дорівнює секретному стану аж до застосування умовних гейтів і .
Крок 2: Оптимізуй свою схему
Зазвичай, коли ми використовуємо менеджер проходів для транспіляції та оптимізації схеми, має сенс встановлювати optimization_level = 3, адже ми хочемо, щоб схеми були якомога ефективнішими. Але в цьому випадку немає обчислювальної причини переносити стани з кубітів 6 і 7 на кубіти 1 і 12. Це ми зробили лише для демонстрації телепортації на відстані. Якщо попросити менеджер проходів оптимізувати нашу схему, він зрозуміє, що логічної причини для цих гейтів SWAP немає, і видалить їх, виконуючи гейт-операції на сусідніх кубітах. Тому для цього особливого випадку ми використовуємо optimization_level = 0.
# Step 2: Transpile
from qiskit.transpiler.preset_passmanagers import generate_preset_pass_manager
target = backend.target
pmzero = generate_preset_pass_manager(target=target, optimization_level=0)
qc_isa_zero = pmzero.run(qc)
print(qc_isa_zero.depth())
105
Ми можемо візуалізувати розташування цих кубітів на квантовому процесорі за допомогою функції plot_circuit_layout.
Крок 3: Виконання
Як і раніше, рекомендуємо запускати задачі на реальних квантових комп'ютерах IBM. Якщо щомісячний безкоштовний ліміт вичерпано, можна розкоментувати комірки з симулятором.
# This required 5 s to run on a Heron r2 processor on 10-28-24
job = sampler.run([qc_isa_zero])
# job = sampler_sim.run([qc_isa_zero])
counts = job.result()[0].data.c.get_counts()
from qiskit.visualization import plot_histogram
plot_histogram(counts)
Крок 4: Класична постобробка
Знову бачимо, що ймовірності можливих результатів для кубітів Аліси досить рівномірні. Є явна перевага для знаходження кубіта Боба у стані після інвертування секретного коду, тобто висока ймовірність того, що ми правильно телепортували секретний стан через весь процесор від Q до Боба (з кубіта 0 до кубіта 12). Однак зазначимо, що тепер приблизно вища ймовірність не отримати для Боба. Це важливий урок у квантових обчисленнях: що більше гейтів ти використовуєш, особливо багатокубітних, як-от гейти SWAP, то більше шуму й помилок ти отримаєш.
Питання
Викладачі можуть запросити версії цих ноутбуків із ключами відповідей та рекомендаціями щодо включення до типових навчальних програм, заповнивши це коротке опитування про те, як використовуються ноутбуки.
Ключові концепції
- Кубіти можуть бути заплутані: вимірювання одного кубіта впливає або навіть визначає стан іншого.
- Заплутаність відрізняється від класичних кореляцій; наприклад, кубіти A і B можуть перебувати в суперпозиції станів на кшталт Стан A або B може бути невизначеним від природи, і при цьому A і B гарантовано перебуватимуть в однаковому стані.
- Завдяки комбінації заплутань і вимірювань можна переносити стан (який може зберігати інформацію) з одного кубіта на інший. Такий перенос може відбуватися навіть на великих відстанях — це і є квантова телепортація.
- Квантова телепортація спирається на квантові вимірювання, які є імовірнісними. Тому для коригування телепортованих станів може знадобитися класична комунікація. Саме це не дозволяє квантовій телепортації передавати інформацію швидше за світло. Квантова телепортація не порушує теорію відносності чи принцип причинності.
- Сучасні квантові комп'ютери більш схильні до шуму та помилок, ніж класичні. Очікуй кількох відсотків похибки.
- Що більше гейтів ти додаєш послідовно (особливо 2-кубітних), то більше помилок і шуму варто очікувати.
Запитання «Правда/Хибно»
- П/Х Квантову телепортацію можна використовувати для передачі інформації швидше за світло.
- П/Х Сучасні дані свідчать, що колапс квантового стану поширюється швидше за світло.
- П/Х У Qiskit кубіти впорядковані в станах так, що кубіт з найменшим номером стоїть праворуч, як у
Запитання з множинним вибором
- Кубіти A і B заплутані, а потім розділені на велику відстань . Кубіт A вимірюється. Яке твердження правильно описує швидкість, з якою стан кубіта B зазнає впливу?
- a. Кубіт B зазнає впливу миттєво, в межах експериментальної точності, у проведених досі дослідах.
- b. Кубіт B зазнає впливу через час , тобто квантовий стан «колапсує» приблизно зі швидкістю світла, в межах експериментальної точності.
- c. Кубіт B зазнає впливу лише після класичної комунікації, тобто це відбувається за час, більший за .
- d. Жодне з наведених вище.
- Пригадай, що ймовірність вимірювання пов'язана з амплітудами у квантових станах. Наприклад, якщо кубіт початково перебуває у стані ймовірність виміряти стан дорівнює Не всі набори вимірювань точно відповідатимуть цим ймовірностям через скінченну вибірку (так само, як підкидання монети може двічі поспіль дати решку). Яким із наведених нижче квантових станів може відповідати гістограма вимірювань нижче? Обери найкращий варіант.
- a.
- b.
- c.
- d.
- e.
- Які з наведених нижче станів показують заплутаність кубітів A і B? Обери всі правильні варіанти.
- a.
- b.
- c.
- d.
- e.
- У цьому модулі ми підготували заплутаний стан: Але існує багато інших заплутаних станів, які можна використати для подібного протоколу. Який зі станів нижче може давати гістограму вимірювань двох кубітів, як показано далі? Обери найкращу відповідь.
- a.
- b.
- c.
- d.
- e.
Питання для обговорення
- Опиши протокол квантової телепортації від початку до кінця своєму партнеру/групі. Перевір, чи є в них що додати або які запитання виникли.