Фазовый оракул шаблона без дополнительных кубитов
Входы — регистр запроса из $N$ кубитов в произвольном состоянии $|x\rangle$ и массив pattern из $N$ логических значений, представляющий базисное состояние: true соответствует $|1\rangle$, false — $|0\rangle$.
Напишите операцию на языке Q#, меняющую знак входного базисного состояния, если оно совпадает с pattern. Вспомогательные кубиты использовать нельзя.
Примеры: для $|010\rangle$ и pattern=[false,true,false] измените знак; для $|1001\rangle$ и pattern=[false,true,true,false] ничего не делайте.
Перед реализацией ответьте: это оракул инверсии цели или фазовый оракул? Подсказка источника: меняется фаза входного состояния по значению функции.
Ещё подсказка: можно ли преобразовать входной регистр по pattern так, чтобы затем менять знак только состояния $|1\ldots1\rangle$?
Заготовка Q#:
namespace Kata {
import Std.Arrays.*;
operation ArbitraryBitPattern_Oracle_Challenge(x : Qubit[], pattern : Bool[])
: Unit is Adj + Ctl {
// Implement your solution here...
}
}Сообщить об ошибке
Войти, чтобы отправить материал.