Як я можу реалізувати n-бітовий ворота Toffoli?


17

Я хочу створити ворота Toffoli, керовані російськими кубітами, і реалізувати його в QISKit. Це можна зробити? Якщо так, то як?


Дякуємо за запитання та відповіді. Рада бачити вас тут Алі!
Джеймс Вуттон

Відповіді:


19

Простий спосіб зробити це проілюстровано на малюнку 4.10 Nielsen & Chuang. н-

Де U може бути будь-яким однокубітним обертанням (у цьому випадку Х-ворота).

Ця схема працює так: Ми хочемо застосувати U до цільового кубіту лише у тому випадку, якщо AND всіх кубітів управління дорівнює 1. Нормальний Toffoli дає нам І кубітів. Таким чином, ланцюжком декількох тоффоліс, ми можемо отримати c1.c2.c3.c4.c5, з уловкою, яку були введені деякі "робочі" (або допоміжні) кубіти для зберігання проміжних результатів. Після застосування остаточного МС ми отримуємо кінцевий результат у цілі. Тепер ми можемо очистити проміжні робочі кубіти, скасувавши їх обчислення, повернувши їх у стан | 0>. Ця модель оборотного обчислення відома як метод "обчислити-копіювати-обчислити", і вперше була запропонована Чарлі Беннеттом в 1973 році .

Ось код QISKit для побудови схеми та візуалізації її:

from qiskit import QuantumRegister, QuantumCircuit

n = 5  # must be >= 2

ctrl = QuantumRegister(n, 'ctrl')
anc = QuantumRegister(n-1, 'anc')
tgt = QuantumRegister(1, 'tgt')

circ = QuantumCircuit(ctrl, anc, tgt)

# compute
circ.ccx(ctrl[0], ctrl[1], anc[0])
for i in range(2, n):
    circ.ccx(ctrl[i], anc[i-2], anc[i-1])

# copy
circ.cx(anc[n-2], tgt[0])

# uncompute
for i in range(n-1, 1, -1):
    circ.ccx(ctrl[i], anc[i-2], anc[i-1])
circ.ccx(ctrl[0], ctrl[1], anc[0])    

from qiskit.tools.visualization import circuit_drawer
circuit_drawer(circ)

Врожайність:

qiskit згенерована схема


8

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

Де V2=U. У цьому випадку цього хочетьсяV2=Х, і отже

V=12(1+i1-i1-i1+i) .

Це рекурсивне визначення, тому шлюз n кубіт управління визначається з точки зору кубітного шлюзу n-1 управління. Це триватиме до тих пір, поки ви не досягнете двох кубітних воріт CNOT.

Ця реалізація є дещо складною, однак простіша існує, якщо не проти збирати відносну фазу (див. Лему 7.9 тієї ж статті).

Для реалізації таких воріт, як Vв QISKIT вам потрібно буде використовувати вдосконалені ворота одного кубіта.


Хтось працював над впровадженням цієї ворота в Cirq?
Енріке Сегура

5

Qiskit's QuantumCircuit має метод mct для створення воріт Toffoli з декількома контролями з декількома режимами: базовий, базовий-брудний-анцилла, розширений, неанцилли. Наприклад, ворота Toffoli з 3 кубітами управління:

from qiskit import QuantumCircuit, QuantumRegister

controls = QuantumRegister(3, "c_qb")
target = QuantumRegister(1, "t_qb")
circuit = QuantumCircuit(controls, target)

circuit.mct(controls, target[0], None, mode='advanced')

print(circuit)

Вихід:

c_qb_0: |0>──────■────────■────────────────■──────────────────────────────────■──────────────────────────────────■────────────────────
                 │      ┌─┴─┐            ┌─┴─┐                                │                                  │                    
c_qb_1: |0>──────┼──────┤ X ├──────■─────┤ X ├──────■────────■────────────────┼─────────────────■────────────────┼────────────────────
                 │      └───┘      │     └───┘      │      ┌─┴─┐            ┌─┴─┐             ┌─┴─┐            ┌─┴─┐                  
c_qb_2: |0>──────┼─────────────────┼────────────────┼──────┤ X ├──────■─────┤ X ├──────■──────┤ X ├──────■─────┤ X ├──────■───────────
           ┌───┐ │-pi/4 ┌───┐┌───┐ │pi/4 ┌───┐┌───┐ │-pi/4 ├───┤┌───┐ │pi/4 ├───┤┌───┐ │-pi/4 ├───┤┌───┐ │pi/4 ├───┤┌───┐ │-pi/4 ┌───┐
t_qb_0: |0>┤ H ├─■──────┤ H ├┤ H ├─■─────┤ H ├┤ H ├─■──────┤ H ├┤ H ├─■─────┤ H ├┤ H ├─■──────┤ H ├┤ H ├─■─────┤ H ├┤ H ├─■──────┤ H ├
           └───┘        └───┘└───┘       └───┘└───┘        └───┘└───┘       └───┘└───┘        └───┘└───┘       └───┘└───┘        └───┘
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.