№ 1823Квантовые вычисленияУровень 3

Поэкспериментировать с однокубитными фазовыми оракулами

В полном исходном примере приготовлено состояние $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);
    }
}