Квантовый оракул общего свободного дня
Вы хотите назначить встречу с коллегой Жасмин. У вас обоих пятидневная рабочая неделя. Пятибитные состояния $|x\rangle$ и $|\mathrm{jasmine}\rangle$ задают расписания: 1 означает занятость в этот день, 0 — свободный день.
Входы:
1. Регистр из 5 кубитов в произвольном состоянии $|x\rangle$ с вашим расписанием.
2. Регистр из 5 кубитов в произвольном состоянии $|\mathrm{jasmine}\rangle$ с расписанием Жасмин.
3. Целевой кубит в произвольном состоянии $|y\rangle$.
Напишите операцию на языке Q#, инвертирующую цель, если существует хотя бы один день, когда вы оба свободны, то есть оба соответствующих бита равны 0.
Примеры:
1. При x=10101 и jasmine=01010 ничего не делайте: общего свободного дня нет.
2. При x=10001 и jasmine=01010 инвертируйте цель: оба свободны в среду.
3. При x=00000 и jasmine=00000 инвертируйте цель: оба свободны всю неделю.
4. При x=11111 и jasmine=11111 ничего не делайте: оба заняты всю неделю.
Перед реализацией ответьте: это оракул инверсии цели или фазовый оракул? Подсказка источника: цель меняется по состояниям двух входных регистров; наличие двух регистров не меняет тип оракула.
Заготовка Q#:
namespace Kata {
import Std.Arrays.*;
operation Meeting_Oracle(x : Qubit[], jasmine : Qubit[], y : Qubit)
: Unit is Adj + Ctl {
// Implement your solution here...
}
}