Различить суперпозиции с непересекающимися наборами строк
Входы — массив из $N$ кубитов и два массива битовых строк bits1, bits2 типа Bool[][], имеющие размеры $M_1\times N$ и $M_2\times N$. Каждый список задаёт равновесную суперпозицию своих базисных векторов. Все строки в обоих массивах различны: совпадений ни внутри списков, ни между ними нет.
Гарантируется, что состояние кубитов совпадает с одной из этих двух суперпозиций. Напишите операцию на языке Q#, возвращающую 0 для первого списка и 1 для второго. Число измерений не ограничено.
Например, списки [[false, true, false], [false, false, true]] и [[true, true, true], [false, true, true]] задают $(|010\rangle+|001\rangle)/\sqrt2$ и $(|111\rangle+|011\rangle)/\sqrt2$.
Конечное состояние кубитов неважно.
Заготовка Q#:
namespace Kata {
import Std.Convert.*;
operation SuperpositionMeasurement(qs : Qubit[], bits1 : Bool[][], bits2 : Bool[][]) : Int {
// Implement your solution here...
return -1;
}
}