Поэкспериментировать с однокубитными фазовыми оракулами
В полном исходном примере приготовлено состояние $0.6|0\rangle+0.8|1\rangle$, затем к нему применяется PhaseOracle_X. Автор предлагает использовать другие оракулы из примера и посмотреть, как они действуют.
Поэкспериментируйте с PhaseOracle_Zero, PhaseOracle_One и PhaseOracle_X. Полные операции и исходная программа сохранены ниже. Учтите замечание автора: общая фаза −1 может не отображаться в симуляторе.
Заготовка Q#:
namespace Kata {
import Std.Diagnostics.*;
import Std.Math.*;
operation PhaseOracle_Zero(x : Qubit) : Unit {
// Do nothing...
}
operation PhaseOracle_One(x : Qubit) : Unit {
// Apply a global phase of -1
R(PauliI, 2.0 * PI(), x);
}
operation PhaseOracle_X(x : Qubit) : Unit {
Z(x);
}
@EntryPoint()
operation OracleImplementationDemo() : Unit {
use q = Qubit();
Ry(2.0 * ArcCos(0.6), q);
Message("The qubit state before oracle application is 0.6|0⟩ + 0.8|1⟩:");
DumpMachine();
// Apply the oracle.
// Experiment with using other oracles to see their behavior!
// (Note that the -1 global phase might not show up in simulation)
PhaseOracle_X(q);
Message("The qubit state after oracle application:");
DumpMachine();
Reset(q);
}
}