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

Отражение относительно подготовленного состояния

Входы — регистр из $N$ кубитов в произвольном состоянии и операция $P$, которая готовит состояние $|\psi\rangle$ из $|0\ldots0\rangle$.

Напишите операцию на языке Q#, отражающую состояние регистра относительно $|\psi\rangle$: реализуйте

$$2|\psi\rangle\langle\psi|-I.$$

Если в качестве $P$ использовать подготовку равномерной суперпозиции, получится отражение относительно среднего.

В заготовке приведена вспомогательная операция ConditionalPhaseFlip из предыдущего упражнения.

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

namespace Kata {
    import Std.Math.*;

    operation ReflectionAboutState(
        qs : Qubit[],
        statePrep : Qubit[] => Unit is Adj + Ctl
    ) : Unit is Adj + Ctl {
        // Implement your solution here...

    }

    // You might find this helper operation from an earlier task useful.
    operation ConditionalPhaseFlip(qs : Qubit[]) : Unit is Adj + Ctl {
        within {
            ApplyToEachA(X, qs);
        } apply {
            Controlled Z(qs[1...], qs[0]);
        }
        R(PauliI, 2.0 * PI(), qs[0]);
    }
}