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

Различить ноль и плюс без ошибок, допуская неопределённый ответ

Вход — кубит в $|0\rangle$ или $|+\rangle=(|0\rangle+|1\rangle)/\sqrt2$. Напишите операцию на языке Q#, возвращающую 0 для $|0\rangle$, 1 для $|+\rangle$ или $-1$, если результат не позволяет сделать вывод.

Требования:

1. Ответы 0 и 1 никогда не должны быть неправильными.
2. Операция вызывается многократно, оба входа выбираются с одинаковой вероятностью.
3. Неопределённый ответ допустим не более чем в 80 процентах всех вызовов.
4. Правильно определить $|0\rangle$ как 0 требуется не менее чем в 10 процентах всех вызовов.
5. Правильно определить $|+\rangle$ как 1 требуется не менее чем в 10 процентах всех вызовов.

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

Это безошибочное различение с возможностью отказаться от определённого ответа.

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

namespace Kata {
    import Std.Random.*;

    operation IsQubitZeroPlusOrInconclusive(q : Qubit) : Int {
        // Implement your solution here...
        return -2;
    }
}