№ 1523Квантовая теория информацииУровень 3

Различить две трёхкубитные суперпозиции с комплексными фазами

Три кубита в массиве находятся в одном из двух ортогональных состояний:

$$|S_0\rangle=(|100\rangle+\omega|010\rangle+\omega^2|001\rangle)/\sqrt3,$$

$$|S_1\rangle=(|100\rangle+\omega^2|010\rangle+\omega|001\rangle)/\sqrt3,$$

где $\omega=e^{2\pi i/3}$. Напишите операцию на языке Q#, возвращающую 0 для $S_0$ и 1 для $S_1$. Заготовка содержит обратимую операцию приготовления W на произвольном числе кубитов.

Конечное состояние кубитов неважно.

Заготовка Q#:

namespace Kata {
    import Std.Convert.*;
    import Std.Math.*;
    import Std.Measurement.*;
    operation ThreeQubitMeasurement(qs : Qubit[]) : Int {
        // Implement your solution here...

        return -1;
    }

    // You might find this helper operation from the task
    // "W State on Arbitrary Number of Qubits" from the "Preparing Quantum States" kata useful.
    operation WState_Arbitrary(qs : Qubit[]) : Unit is Adj + Ctl {
        let N = Length(qs);

        if N == 1 {
            X(qs[0]);
        } else {
            let theta = ArcSin(1.0 / Sqrt(IntAsDouble(N)));
            Ry(2.0 * theta, qs[0]);
            X(qs[0]);
            Controlled WState_Arbitrary(qs[0..0], qs[1..N - 1]);
            X(qs[0]);
        }
    }
}