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