Поделиться через


Основные сведения о квантовых оракулах

Oracle, $O$, представляет собой неэкспонированную операцию, которая используется в качестве входных данных для другого алгоритма. Часто такие операции определяются с помощью классической функции $f : \0, 1\}^n \to \{{0, 1\}^m$, которая принимает $n-разрядные$ двоичные входные данные и создает двоичные $выходные данные m-bit$. Для этого рассмотрим определенные двоичные входные данные $x = (x_{0}, x_{1}, \dots, x_{n-1})$. Вы можете пометить состояния кубита как $\ket{\vec{x=\ket{}}x_{0}}\ket{{\otimesx_\otimes{1}}\otimes\ket{\cdotsx_{n-1.}}$

Сначала можно попытаться определить $O так, чтобы $O\ket{$ x(x\ket{}=)}$, но этот метод имеет несколько проблем. Во-первых, $f$ может иметь другой размер входных и выходных данных ($n \ne m$), чтобы применение $O$ изменило количество кубитов в регистре. Во-вторых, даже если n m, функция может быть невертимой: если $f(x) = f(y)$ для некоторых $x \ne y, то $O\ket{x\ket{}= O y}$$, но $O^ O\ket{x O^\ne} O^\ket{\dagger\dagger y.}$$= $ Это означает, что вы не можете создать примежную операцию $O^\dagger$, и оракулы должны иметь для них определенное свойство.

Определение оракула по его влиянию на базисные вычислительные состояния

Вы можете справиться с обеими этими проблемами, введя второй реестр $кубитов для$ хранения ответа. Затем определите эффект oracle во всех вычислительных состояниях: для всех $x \{\in0, 1\}^n$ и $y \in \{0, 1\}^m$,

$$\begin{\begin{align} O(\ket{x}\otimes\ket{y}) =\ket{x}\otimes\ket{y \oplus f(x)}. \end{align} $$

Теперь $O = ^\dagger$ путем строительства и вы разрешили обе предыдущие проблемы.

Совет

Чтобы понять, что $O = O^{\dagger}$, учтите, что $O^2 =\mathbf{1}$, так как $a \oplus b \oplus b = a$ для всех $a, b \in{0, 1}$. В результате $O \ket{x}\ket{y \oplus f(x)}=\ket{x}\ket{y \oplus f(x) \oplus f(x)}=\ket{x}\ket{y}$.

Важно, что определение оракула таким образом для каждого базисного вычислительного состояния $\ket{x}\ket{y}$ также определяет, как $O$ ведет себя для любого другого состояния. Это поведение следует немедленно от того факта, что $O$, как и все квантовые операции, линейна в состоянии, на которое он действует. Рассмотрим операцию Hadamard, например, определяемую $H \ket{0}=\ket{+}$ и $H \ket{1}=\ket{-}$. Если вы хотите знать, как $H действует на $\ket{+}$, вы можете использовать этот $H$$ линейный,

$$\begin{align}H\ket{+}& =\frac{1}{\sqrt{{2}} H(\ket{0} + ) ={2}}\frac{1}{\sqrt{(H\ket{0} + \ket{{1}H\ket{1}) \\& =\frac{1}{\sqrt{2}} (\ket{+} + \ket{{-}) =\frac12 ({0}\ket{ +{1} \ket{+ \ket{{0} -{1}\ket{ ) . =\ket{{0} \end{align} $$

При определении oracle $O$ можно также использовать любое состояние $\ket{\psi}$ на $n+ m$ кубитах, как можно записать как

$$\begin{\begin{align}\ket{\psi}&ампер; _x \0, 1\}^n, y \in \{{0, 1\}^m}\alpha(x, y) \ket{x\ket{}y.}\in{=\sum \end{align} $$

Здесь: $\alpha \{0, 1\}^n \times \{0, 1\}^m\mathbb{\to C}$ представляет коэффициенты состояния$\ket{\psi}$. Таким образом, выражение

$$\begin{\begin{align}O \ket{\psi}& = O \sum_x \in \{{0, 1\}^n, y \in \{0, 1\}^m}\alpha(x, y) \ket{x\ket{}y\\&}amp; =\sum_{x \in \0, 1\}^n, y \in \{{0, 1\}^m}\alpha(x, y) O \ket{x}\ket{y\\&}amp; =\sum_{x \in \0, 1\}^n, y \in \{{0, 1\}^m\alpha}(x, y) \ket{x}\ket{y \oplus f(x).} \end{align} $$

Фазовые оракулы

Кроме того, можно закодировать $f$ в oracle $O$ , применяя этап на основе входных данных в $O$. Например, можно определить $O, например $$\begin{align}\begin{O$ \ket{x=} (-1)^{f(x)}\ket{x.} \end{align} $$

Если фазовый оракул работает с регистром изначально в базисном вычислительном состоянии $\ket{x}$, то эта фаза является глобальной и поэтому ненаблюдаемой. Но такой оракул может быть мощным ресурсом, если применяется к суперпозиции или как управляемой операции. Например, рассмотрим фазовый оракул $O_f$ для функции с одним кубитом $f$. Затем O_f $$\begin{align} \ket{+}& = O_f (\ket{0} +{1}\ket{ ) /\\&\sqrt{{2} amp; = ((-1)^f(0)\ket{0}} + (-1)^{{f(1)\ket{1}}) /\\\sqrt{2}& amp; = (-1)^{f(0)} ({0}\ket{ + (-1)^{f(1) - f(0){1}}\ket{/ amp; = (-1)^{f(0) Z^{f(0}){2}&\\\sqrt{ - f(1)}\ket{+.} \end{align} $$

Примечание.

Обратите внимание, что $Z^{-1}=Z^{\dagger}=Z$, следовательно $Z^{f(0)-f(1)}=Z^{f(1)-f(0)}.$

В целом оба представления оракулов можно расширить для представления классических функций, которые возвращают реальные числа вместо одного бита.

Выбор лучшего способа реализации oracle сильно зависит от того, как этот оракул будет использоваться в рамках заданного алгоритма. Например, алгоритм Дойча — Йожи полагается на первую реализацию оракула, тогда как алгоритм Гровера использует вторую реализацию оракула.

Дополнительные сведения см. в обсуждении в Gilyén 1711.00465.