№ 1888Квантовые вычисленияУровень 3

Удаление промежуточных данных оракула

В примере автора $f(x)=x$, $g(x)=x$, где x — один бит. Четыре квантовых регистра по одному кубиту называются input, output, garbage и final-output. Оператор $V_f$ состоит из CNOT(input,garbage) и CNOT(input,output). Операция copy — CNOT(output,final-output). Рассматривается полная схема $V_f$, copy, $V_f^\dagger$, показанная на исходном рисунке. Регистры garbage и final-output сначала находятся в $|0\rangle$; input может быть базисным x или суперпозицией.

1. Покажите, что результат правильно записывается в final-output и только в него, если output инициализирован состоянием $|0\rangle$.
2. Определите, что происходит, если output инициализирован состоянием $|1\rangle$.

Вход input при этом сохраняется. «Только в final-output» относится к результату среди рабочих регистров; автор не требует стереть вход.

Полная исходная программа:

from qiskit import QuantumCircuit, QuantumRegister

input_bit = QuantumRegister(1, 'input')
output_bit = QuantumRegister(1, 'output')
garbage_bit = QuantumRegister(1, 'garbage')

Uf = QuantumCircuit(input_bit, output_bit, garbage_bit)
Uf.cx(input_bit[0], output_bit[0])

Uf.draw()

Vf = QuantumCircuit(input_bit, output_bit, garbage_bit)
Vf.cx(input_bit[0], garbage_bit[0])
Vf.cx(input_bit[0], output_bit[0])
Vf.draw()

final_output_bit = QuantumRegister(1, 'final-output')

copy = QuantumCircuit(output_bit, final_output_bit)
copy.cx(output_bit, final_output_bit)

copy.draw()

(Vf.inverse().compose(copy).compose(Vf)).draw()
Рисунок к задаче 1888