Как видно из названия, как реализовать оператор диффузии Гровера в Q #? Я знаю, что это определяется как 2 ⟨s|s⟩ - I
, где |s⟩
- это единообразное состояние для любого произвольного числа кубитов. Это может быть далее определено в терминах ворот Z0 (он назывался U0), расположенных между H-воротами. Мне не удалось найти какую-либо функцию в документах по квантовым примитивам и канонам, начиная с возможных имен, таких как Grover, diff и т. Д.
Я не хочу использовать функцию AmpAmpByOracle
, так как это реализация очень высокого уровня и не очищает мое понимание. Я хочу реализовать функцию, которая принимает оракула Uf (неизвестно мне) и количество кубитов, которое он принимает (N), и выполняет алгоритм Гровера, просто следуя схеме, приведенной в Алгоритм Гровера | Википедия и измерение необходимого состояния путем измерения всех N кубитов в конце итераций r = приблизительно (2 ^ (N / 2)).