Omówienie wyroczni kwantowych
Wyrocznia, $O$, jest nieeksponowaną operacją używaną jako dane wejściowe do innego algorytmu. Często takie operacje są definiowane przy użyciu klasycznej funkcji $f : \{0, 1\}^n \to \{0, 1\}^m$, która przyjmuje $n-bitowe$ dane wejściowe binarne i generuje $dane wyjściowe binarne m-bitowe$. W tym celu należy rozważyć określone dane wejściowe $binarne x = (x_, x_{0}{1}, \kropki, x_{n-1})$. Stany kubitów można oznaczyć jako $\ket{\vec{x=}}\ket{x_{\otimes{0}}\ket{x_x_\otimes{1}}\otimes\ket{\cdots{n-1.}}$
Możesz najpierw spróbować zdefiniować $O$ , aby $O\ket{x}=\ket{f(x)}$, ale ta metoda ma kilka problemów. Po pierwsze, $f$ może mieć inny rozmiar danych wejściowych i wyjściowych ($n \ne m$), tak aby zastosowanie $systemu O$ zmieniło liczbę kubitów w rejestrze. Po drugie, nawet jeśli n m, funkcja może nie być odwracalna: jeśli $f(x) = f(y)$ dla niektórych $x y$, to $O\ket{x= \ne}O\ket{y}$, ale $O^\dagger O x}\ne O^ O\ket{^\dagger O\ket{y.}$$= $ Oznacza to, że nie można skonstruować operacji $przylegania O^\dagger$, a wyrocznie muszą mieć dla nich zdefiniowane przyleganie.
Definiowanie wyroczni przez jej wpływ na stany obliczeniowe
Oba te problemy można rozwiązać, wprowadzając drugi rejestr $kubitów m$ do przechowywania odpowiedzi. Następnie zdefiniuj wpływ wyroczni na wszystkie stany obliczeniowe: dla wszystkich $x \in \{0, 1\}^n$ i $y \in \{0, 1\}^m$,
$$\begin{\begin{align}O(\ket{x}\ket{\otimesy) =\ket{x\ket{}\otimesy} \oplus f(x).} \end{align} $$
Teraz $O = ^\dagger$ przez konstrukcję i rozwiązano oba wcześniejsze problemy.
Napiwek
Aby zobaczyć, że O O^, należy pamiętać, że $O^{\dagger}$2 =\mathbf{1}$ od $\oplus b \oplus b = a$ dla wszystkich$, b{\in 0, 1}$.= $ W rezultacie $O \ket{x}\ket{y \oplus f(x)\ket{}=x}\ket{y \oplus f(x) \oplus f(x)}\ket{=x}\ket{y.}$
Co ważne, zdefiniowanie wyroczni w ten sposób dla każdego stanu $\ket{podstawy obliczeniowej x}\ket{y}$ definiuje również sposób $działania O$ dla dowolnego innego stanu. To zachowanie wynika bezpośrednio z faktu, że $O$, podobnie jak wszystkie operacje kwantowe, jest liniowy w stanie, na który działa. Rozważmy na przykład operację Hadamard, która jest zdefiniowana przez $H \ket{0}\ket{=+}$ i $H .\ket{1}=\ket{-}$ Jeśli chcesz wiedzieć, jak $działa H$ na $\ket{+}$, możesz użyć tego $H$ jest liniowy,
$$\begin{align}H\ket{+}& =\frac{1}{\sqrt{{2}} H(\ket{0} + \ket{{1}) ={2}}\frac{1}{\sqrt{(H + H\ket{1}\ket{0}) \\& =\frac{1}{\sqrt{2}} (\ket{+} + \ket{{-}) =\frac12 ({0}\ket{ + + \ket{\ket{{0}{1} -{1}\ket{ ) . =\ket{{0} \end{align} $$
Podczas definiowania wyroczni $O$ można również użyć dowolnego stanu $\ket{\psi}$ na $n + m$ kubitów można zapisać jako
$$\begin{\begin{align}\ket{\psi}&Amp; =\sum_{x \in \{0, 1\}^n, y \in \{0, 1\}^m}\alpha(x, y) \ket{x}\ket{y}. \end{align} $$
Tutaj: $\alpha \{0, 1\}^n \times \{0, 1\}^m\mathbb{\to C}$ reprezentuje współczynniki stanu $\ket{\psi}$. Tak więc,
$$\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} $$
Wyrocznie fazowe
Alternatywnie możesz zakodować $$ f do wyroczni $O$, stosując fazę opartą na danych wejściowych do $systemu operacyjnego$. Można na przykład zdefiniować O taki, że $$\begin{\begin{align} O \ket{x}= (-1)^{f(x)}\ket{x.}$ $ \end{align} $$
Jeśli wyrocznia fazowa działa na rejestrze początkowo w stanie $\ket{podstawy obliczeniowej x}$, ta faza jest fazą globalną i dlatego nie jest zauważalna. Jednak taka wyrocznia może być potężnym zasobem, jeśli zostanie zastosowana do superpozycji lub jako kontrolowanej operacji. Rozważmy na przykład wyrocznię $fazową O_f$ dla funkcji $z jednym kubitem f$. $$\begin{align} Następnie O_f \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{}) /\\{2}&\sqrt{ amp; = (-1)^{f(0)} Z^{f(0) - f(1)}\ket{+.} \end{align} $$
Uwaga
Należy pamiętać, że Z^{-1}=Z^Z^Z$ i{\dagger}= dlatego $Z^{f(0)-f(1)Z^{f(1)}=-f(0)}.$$
Ogólnie rzecz biorąc, oba widoki wyroczni można rozszerzyć w celu reprezentowania funkcji klasycznych, które zwracają liczby rzeczywiste zamiast tylko jednego bitu.
Wybór najlepszego sposobu implementacji wyroczni zależy w dużym stopniu od tego, jak ta wyrocznia ma być używana w ramach danego algorytmu. Na przykład algorytm Deutsch-Jozsa opiera się na wyroczni zaimplementowanej w pierwszy sposób, podczas gdy algorytm Grovera opiera się na wyroczni zaimplementowanej w drugi sposób.
Aby uzyskać więcej informacji, zobacz dyskusję w Gilyén 1711.00465.