Различить ноль и плюс без ошибок, допуская неопределённый ответ
Вход — кубит в $|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;
}
}