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

Класичні обчислення на квантових комп'ютерах

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

Симуляція булевих схем квантовими схемами

Булеві схеми складаються з вентилів AND, OR, NOT та FANOUT. Щоб симулювати булеві схеми квантовими схемами, почнемо з показу того, як кожен із цих чотирьох вентилів можна замінити квантовими вентилями. Після цього перетворення заданої булевої схеми на квантову — це проста справа симуляції одного вентиля за раз. Для цього знадобляться лише вентилі NOT, контрольовані NOT (CNOT) і вентилі Тоффолі — всі вони є детерміновними операціями, а також унітарними.

Вентилі Тоффолі

Вентилі Тоффолі можна також описати як контрольовано-контрольовані вентилі NOT, дія яких на стандартні базисні стани показана на наступному рисунку.

Вентиль Тоффолі

З урахуванням того, що ми використовуємо конвенцію впорядкування Qiskit, де кубіти впорядковані зі зростанням значущості зверху донизу, матрична вистава цього вентиля виглядає так:

(1000000001000000001000000000000100001000000001000000001000010000)\begin{pmatrix} 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 & 0 & 0 & 0 & 0 \\ 0 & 0 & 1 & 0 & 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 & 0 & 0 & 0 & 1 \\ 0 & 0 & 0 & 0 & 1 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 & 0 & 1 & 0 & 0 \\ 0 & 0 & 0 & 0 & 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 1 & 0 & 0 & 0 & 0 \end{pmatrix}

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

Вентилі Тоффолі не входять до стандартного набору вентилів, розглянутого раніше в уроці, але з вентилів H,H, T,T, TT^{\dagger} та CNOT можна побудувати вентиль Тоффолі таким чином:

Квантова схема для вентиля Тоффолі

Симуляція булевих вентилів за допомогою Тоффолі, CNOT і NOT

Один вентиль Тоффолі у поєднанні з кількома NOT-вентилями може реалізувати вентилі AND та OR, а FANOUT легко реалізується за допомогою CNOT, як показано на наступних схемах.

Симуляція вентилів AND та OR вентилями Тоффолі

У всіх трьох випадках кубіти, на які діють вентилі AND, OR та FANOUT, надходять зліва як входи, і для кожного з них потрібен один робочий кубіт, ініціалізований у нульовий стан. Ці робочі кубіти зображені всередині прямокутників, що представляють реалізації вентилів, щоб підкреслити, що вони нові і тому є частиною вартості цих реалізацій.

Для вентилів AND та OR є також два зайві кубіти, крім вихідного. Наприклад, всередині прямокутника на схемі для симуляції AND два верхніх кубіти залишаються у станах a\vert a\rangle та b.\vert b\rangle. Ці кубіти показані як такі, що залишаються всередині прямокутника, бо вони більше не потрібні і не є частиною виходу. Їх можна поки що ігнорувати, хоча ми повернемося до них незабаром.

Вентиль NOT з нашого стандартного набору квантових вентилів, тому для нього не потрібна симуляція.

Симуляція булевих схем вентиль за вентилем

Припустимо, є звичайна булева схема C,C, складена з вентилів AND, OR, NOT та FANOUT, з nn вхідними бітами і mm вихідними бітами. Нехай t=size(C)t = \operatorname{size}(C) — кількість вентилів у C,C, і назвемо ff функцію, яку обчислює C,C, у вигляді

f:ΣnΣmf:\Sigma^n\rightarrow\Sigma^m

для Σ={0,1}.\Sigma = \{0,1\}.

Тепер уявімо, що ми по одному проходимо вентилі AND, OR та FANOUT схеми C,C, замінюючи кожен відповідною симуляцією, описаною вище, включаючи додавання необхідних робочих кубітів. Назвемо отриману схему RR і впорядкуємо кубіти RR так, щоб nn вхідних бітів CC відповідали верхнім nn кубітам R,R, а робочі кубіти були знизу.

Симуляція зворотної схеми

Тут kk — кількість необхідних робочих кубітів (по одному для кожного вентиля AND, OR та FANOUT схеми CC), а gg — функція вигляду g:ΣnΣn+kmg:\Sigma^n \rightarrow \Sigma^{n+k-m}, що описує стани зайвих кубітів, створених симуляціями вентилів після виконання RR. На рисунку кубіти, що відповідають виходу f(x),f(x), знаходяться вгорі, а зайві кубіти зі значеннями g(x)g(x) — знизу. Якщо бажаємо, можемо досягти цього, переставивши кубіти за допомогою SWAP-вентилів, які можна реалізувати трьома контрольованими NOT, як тут:

Транспозиція за допомогою вентилів CNOT

Як ми побачимо в наступному розділі, переставляти вихідні кубіти насправді не обов'язково, але це можна легко зробити за бажання.

Функція g,g, що описує класичні стани зайвих кубітів, визначається схемою C,C, але насправді нам не потрібно занадто перейматись нею; нам не важливо, в якому конкретно стані ці кубіти опиняються після завершення обчислення. Літера gg стоїть після f,f, тому це розумна назва і з цієї причини, але є ще одна, краща причина для назви gg — скорочення від garbage (сміття).

Прибирання сміття

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

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

На щастя, прибрати сміття нескладно. Ключем є використання того факту, що оскільки RR — квантова схема, ми можемо запустити її у зворотному напрямку, просто замінивши кожен вентиль його оберненим і застосувавши їх у зворотному порядку, отримавши квантову схему для операції R.R^{\dagger}. Вентилі Тоффолі, CNOT та NOT є власними оберненими, тому запуск RR у зворотному напрямку — це просто питання застосування вентилів у зворотному порядку, але загалом будь-яку квантову схему можна обернути так само.

Конкретно, ми додаємо mm кубітів (нагадаємо, що функція ff має mm вихідних бітів), використовуємо вентилі CNOT для копіювання виходу RR на ці кубіти і обертаємо RR для прибирання сміття. Наступний рисунок ілюструє отриману схему і описує її дію на стандартні базисні стани.

Безсміттєве обчислення

Якщо поставити рамку навколо всієї схеми і назвати її Q,Q, вона виглядає так:

Симуляція як запитний вентиль

Якщо CC має tt вентилів, то схема QQ матиме O(t)O(t) вентилів.

Якщо знехтувати kk додатковими робочими кубітами, то маємо схему Q,Q, яка функціонує точно як запитний вентиль для функції f.f. Якщо просто хочемо обчислити функцію ff на рядку x,x, можна встановити y=0my = 0^m і результуюче значення f(x)f(x) з'явиться на нижніх mm кубітах — або можна подати інший стан на нижні mm кубітів за бажанням (можливо, щоб використати фазовий зворотний зв'язок, як в алгоритмах Дойча або Дойча-Йозса).

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

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

Реалізація оборотних функцій

Описана конструкція дозволяє симулювати будь-яку булеву схему квантовою схемою без сміття. Якщо CC — булева схема, що реалізує функцію f:ΣnΣm,f:\Sigma^n \rightarrow \Sigma^m, то отримуємо квантову схему Q,Q, яка діє так на стандартні базисні стани:

Q(y0kx)=yf(x)0kxQ \bigl( \vert y \rangle \vert 0^k \rangle \vert x\rangle\bigr) = \vert y \oplus f(x) \rangle \vert 0^k \rangle \vert x\rangle

Число kk вказує на загальну кількість необхідних робочих кубітів. Цього достатньо для цілей цього курсу, але методологію можна розвинути далі, коли функція ff сама є оборотною.

Точніше, припустимо, що функція ff має вигляд f:ΣnΣn,f:\Sigma^n \rightarrow \Sigma^n, і також припустимо, що існує функція f1f^{-1} така, що f1(f(x))=xf^{-1}(f(x)) = x для кожного xΣnx\in\Sigma^n (яка є єдиною, коли існує). Це означає, що операція, яка перетворює x\vert x \rangle у f(x)\vert f(x) \rangle для кожного xΣn,x\in\Sigma^n, є унітарною, тому можна сподіватися побудувати квантову схему, яка реалізує унітарну операцію, визначену як

Ux=f(x)U \vert x \rangle = \vert f(x) \rangle

для кожного xΣn.x\in\Sigma^n.

Щоб уточнити, унітарність цієї операції залежить від оборотності ff — вона не є унітарною, коли ff необоротна. Не враховуючи робочі кубіти, UU відрізняється від операції, яку реалізує схема Q,Q, оскільки ми не зберігаємо копію входу та не XOR-имо її з довільним рядком, а замінюємо xx на f(x).f(x).

Питання: коли ff є оборотною, чи можна це зробити?

Відповідь — так, за умови, що нам дозволено використовувати робочі кубіти і, крім булевої схеми, що обчислює f,f, ми також маємо схему для f1.f^{-1}. Тобто це не є обхідним шляхом для обчислювального обернення функцій, коли ми ще не знаємо, як це робити! Наступна діаграма ілюструє, як це можна зробити, компонуючи дві квантові схеми — QfQ_f та Qf1,Q_{f^{-1}}, отримані окремо для функцій ff та f1f^{-1} за описаним вище методом, разом з nn вентилями транспозиції, беручи kk рівним максимуму кількостей необхідних робочих кубітів для QfQ_f та Qf1Q_{f^{-1}}.

Симуляція оборотної функції