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

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

Входы:

1. Однокубитная унитарная операция $U$ с доступным управляемым вариантом Controlled.
2. Её собственное состояние $|\psi\rangle$, заданное операцией подготовки $P$: $P|0\rangle=|\psi\rangle$.
3. Положительное целое число $n$.

В обозначениях того же урока собственная фаза $\theta$ определяется равенством

$$U|\psi\rangle=e^{2\pi i\theta}|\psi\rangle,\qquad0\le\theta<1.$$

Напишите операцию на языке Q#, возвращающую $2^n\theta$. Гарантируется, что фаза имеет не более $n$ двоичных знаков после точки, поэтому результат — целое число.

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

namespace Kata {
    operation PhaseEstimation(
        U : Qubit => Unit is Ctl, 
        P : Qubit => Unit,
        n : Int
    ) : Int {
        // Implement your solution here...

        return 0;
    }
}