Aller au contenu principal

El algoritmo de Shor

Ahora dirigiremos nuestra atención al problema de la factorización de enteros y veremos cómo puede resolverse eficientemente en una computadora cuántica mediante la estimación de fase. El algoritmo que obtendremos es el algoritmo de Shor para la factorización de enteros. Shor no describió su algoritmo específicamente en términos de estimación de fase, pero es una forma natural e intuitiva de explicar cómo funciona.

Comenzaremos analizando un problema intermedio conocido como el problema de búsqueda de orden, y veremos cómo la estimación de fase proporciona una solución a este problema. Luego veremos cómo una solución eficiente al problema de búsqueda de orden nos da una solución eficiente al problema de factorización de enteros. (Cuando la solución de un problema proporciona la solución de otro problema de este modo, decimos que el segundo problema se reduce al primero — así que en este caso estamos reduciendo la factorización de enteros a la búsqueda de orden.) Esta segunda parte del algoritmo de Shor no hace uso de la computación cuántica en absoluto; es completamente clásica. La computación cuántica solo es necesaria para resolver la búsqueda de orden.

El problema de búsqueda de orden

Algo de teoría básica de números

Para explicar el problema de búsqueda de orden y cómo puede resolverse mediante estimación de fase, será útil comenzar con un par de conceptos básicos de teoría de números, e introducir algo de notación conveniente en el camino.

Para empezar, para cualquier entero positivo NN dado, definimos el conjunto ZN\mathbb{Z}_N de la siguiente manera.

ZN={0,1,,N1}\mathbb{Z}_N = \{0,1,\ldots,N-1\}

Por ejemplo, Z1={0},  \mathbb{Z}_1 = \{0\},\; Z2={0,1},  \mathbb{Z}_2 = \{0,1\},\; Z3={0,1,2},  \mathbb{Z}_3 = \{0,1,2\},\; y así sucesivamente.

Estos son conjuntos de números, pero podemos pensar en ellos como algo más que simples conjuntos. En particular, podemos pensar en operaciones aritméticas sobre ZN\mathbb{Z}_N, como la suma y la multiplicación — y si acordamos tomar siempre nuestros resultados módulo NN (es decir, dividir entre NN y tomar el resto como resultado), siempre permaneceremos dentro de este conjunto al realizar estas operaciones. Las dos operaciones específicas de suma y multiplicación, ambas tomadas módulo NN, convierten ZN\mathbb{Z}_N en un anillo, que es un tipo de objeto fundamentalmente importante en álgebra.

Por ejemplo, 33 y 55 son elementos de Z7\mathbb{Z}_7, y si los multiplicamos obtenemos 35=153\cdot 5 = 15, que deja un resto de 11 al dividirlo entre 77. A veces esto se expresa de la siguiente forma.

351  (mod 7)3 \cdot 5 \equiv 1 \; (\textrm{mod } 7)

Pero también podemos simplemente escribir 35=13 \cdot 5 = 1, siempre que haya quedado claro que estamos trabajando en Z7\mathbb{Z}_7, para mantener la notación lo más sencilla posible.

Como ejemplo, aquí están las tablas de suma y multiplicación para Z6.\mathbb{Z}_6.

+012345001234511234502234501334501244501235501234012345000000010123452024024303030340420425054321\begin{array}{c|cccccc} + & 0 & 1 & 2 & 3 & 4 & 5 \\\hline 0 & 0 & 1 & 2 & 3 & 4 & 5 \\ 1 & 1 & 2 & 3 & 4 & 5 & 0 \\ 2 & 2 & 3 & 4 & 5 & 0 & 1 \\ 3 & 3 & 4 & 5 & 0 & 1 & 2 \\ 4 & 4 & 5 & 0 & 1 & 2 & 3 \\ 5 & 5 & 0 & 1 & 2 & 3 & 4 \\ \end{array} \qquad \begin{array}{c|cccccc} \cdot & 0 & 1 & 2 & 3 & 4 & 5 \\\hline 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ 1 & 0 & 1 & 2 & 3 & 4 & 5 \\ 2 & 0 & 2 & 4 & 0 & 2 & 4 \\ 3 & 0 & 3 & 0 & 3 & 0 & 3 \\ 4 & 0 & 4 & 2 & 0 & 4 & 2 \\ 5 & 0 & 5 & 4 & 3 & 2 & 1 \\ \end{array}

Entre los NN elementos de ZN\mathbb{Z}_N, los elementos aZNa\in\mathbb{Z}_N que satisfacen gcd(a,N)=1\gcd(a,N) = 1 son especiales. Frecuentemente, el conjunto que contiene estos elementos se denota con un asterisco de la siguiente manera.

ZN={aZN:gcd(a,N)=1}\mathbb{Z}_N^{\ast} = \{a\in \mathbb{Z}_N : \gcd(a,N) = 1\}

Si centramos nuestra atención en la operación de multiplicación, el conjunto ZN\mathbb{Z}_N^{\ast} forma un grupo — específicamente un grupo abeliano — que es otro tipo importante de objeto en álgebra. Es un hecho básico sobre estos conjuntos (y los grupos finitos en general) que si tomamos cualquier elemento aZNa\in\mathbb{Z}_N^{\ast} y multiplicamos aa por sí mismo repetidamente, siempre acabaremos obteniendo el número 11.

Como primer ejemplo, tomemos N=6N=6. Tenemos que 5Z65\in\mathbb{Z}_6^{\ast} porque gcd(5,6)=1\gcd(5,6) = 1, y si multiplicamos 55 por sí mismo obtenemos 11, como confirma la tabla anterior.

52=1(trabajando dentro de Z6)5^2 = 1 \quad \text{(trabajando dentro de $\mathbb{Z}_6$)}

Como segundo ejemplo, tomemos N=21N = 21. Si recorremos los números del 00 al 2020, los que tienen MCD igual a 11 con 2121 son los siguientes.

Z21={1,2,4,5,8,10,11,13,16,17,19,20}\mathbb{Z}_{21}^{\ast} = \{1,2,4,5,8,10,11,13,16,17,19,20\}

Para cada uno de estos elementos, es posible elevar ese número a una potencia entera positiva para obtener 11. A continuación se muestran las potencias más pequeñas para las que esto funciona:

11=182=1163=126=1106=1176=143=1116=1196=156=1132=1202=1\begin{array}{ccc} 1^{1} = 1 \quad & 8^{2} = 1 \quad & 16^{3} = 1 \\[1mm] 2^{6} = 1 \quad & 10^{6} = 1 \quad & 17^{6} = 1 \\[1mm] 4^{3} = 1 \quad & 11^{6} = 1 \quad & 19^{6} = 1 \\[1mm] 5^{6} = 1 \quad & 13^{2} = 1 \quad & 20^{2} = 1 \end{array}

Naturalmente estamos trabajando dentro de Z21\mathbb{Z}_{21} en todas estas ecuaciones, lo cual no hemos escrito explícitamente — lo damos por implícito para no recargar la notación. Continuaremos haciendo esto a lo largo del resto de la lección.

Enunciado del problema y conexión con la estimación de fase

Ahora podemos enunciar el problema de búsqueda de orden.

Búsqueda de orden

Entrada: enteros positivos NN y aa que satisfacen gcd(N,a)=1\gcd(N,a) = 1
Salida: el entero positivo más pequeño rr tal que ar1a^r \equiv 1 (mod N)(\textrm{mod } N)

Alternativamente, en términos de la notación que acabamos de introducir, se nos da aZNa \in \mathbb{Z}_N^{\ast}, y buscamos el entero positivo más pequeño rr tal que ar=1a^r = 1. Este número rr se llama el orden de aa módulo NN.

Para conectar el problema de búsqueda de orden con la estimación de fase, pensemos en la operación definida sobre un sistema cuyos estados clásicos corresponden a ZN\mathbb{Z}_N, donde multiplicamos por un elemento fijo aZNa\in\mathbb{Z}_N^{\ast}.

Max=ax(para cada xZN)M_a \vert x\rangle = \vert ax \rangle \qquad \text{(para cada $x\in\mathbb{Z}_N$)}

Para ser precisos, estamos realizando la multiplicación en ZN\mathbb{Z}_N, por lo que se sobreentiende que tomamos el producto módulo NN dentro del ket en el lado derecho de la ecuación.

Por ejemplo, si tomamos N=15N = 15 y a=2a=2, entonces la acción de M2M_2 sobre la base estándar {0,,14}\{\vert 0\rangle,\ldots,\vert 14\rangle\} es la siguiente.

M20=0M25=10M210=5M21=2M26=12M211=7M22=4M27=14M212=9M23=6M28=1M213=11M24=8M29=3M214=13\begin{array}{ccc} M_{2} \vert 0 \rangle = \vert 0\rangle \quad & M_{2} \vert 5 \rangle = \vert 10\rangle \quad & M_{2} \vert 10 \rangle = \vert 5\rangle \\[1mm] M_{2} \vert 1 \rangle = \vert 2\rangle \quad & M_{2} \vert 6 \rangle = \vert 12\rangle \quad & M_{2} \vert 11 \rangle = \vert 7\rangle \\[1mm] M_{2} \vert 2 \rangle = \vert 4\rangle \quad & M_{2} \vert 7 \rangle = \vert 14\rangle \quad & M_{2} \vert 12 \rangle = \vert 9\rangle \\[1mm] M_{2} \vert 3 \rangle = \vert 6\rangle \quad & M_{2} \vert 8 \rangle = \vert 1\rangle \quad & M_{2} \vert 13 \rangle = \vert 11\rangle \\[1mm] M_{2} \vert 4 \rangle = \vert 8\rangle \quad & M_{2} \vert 9 \rangle = \vert 3\rangle \quad & M_{2} \vert 14 \rangle = \vert 13\rangle \end{array}

Esta es una operación unitaria siempre que gcd(a,N)=1\gcd(a,N)=1; permuta los elementos de la base estándar {0,,N1}\{\vert 0\rangle,\ldots,\vert N-1\rangle\}, de modo que como matriz es una matriz de permutación. Es evidente por su definición que esta operación es determinista, y una forma sencilla de ver que es invertible consiste en pensar en el orden rr de aa módulo NN, y reconocer que la inversa de MaM_a es Mar1M_a^{r-1}.

Mar1Ma=Mar=Mar=M1=IM_a^{r-1} M_a = M_a^r = M_{a^r} = M_1 = \mathbb{I}

Hay otra forma de pensar en la inversa que no requiere ningún conocimiento de rr (que, al fin y al cabo, es lo que estamos tratando de calcular). Para todo elemento aZNa\in\mathbb{Z}_N^{\ast} siempre existe un único elemento bZNb\in\mathbb{Z}_N^{\ast} que satisface ab=1ab=1. Denotamos este elemento bb como a1a^{-1}, y puede calcularse eficientemente; una extensión del algoritmo MCD de Euclides lo hace con un coste cuadrático en lg(N)\operatorname{lg}(N). Y así

Ma1Ma=Ma1a=M1=I.M_{a^{-1}} M_a = M_{a^{-1}a} = M_1 = \mathbb{I}.

Por tanto, la operación MaM_a es a la vez determinista e invertible. Eso implica que está descrita por una matriz de permutación y, por lo tanto, es unitaria.

Ahora pensemos en los vectores propios y los valores propios de la operación MaM_a, suponiendo que aZNa\in\mathbb{Z}_N^{\ast}. Como acabamos de argumentar, esta suposición nos dice que MaM_a es unitaria.

Hay NN valores propios de MaM_a, posiblemente incluyendo el mismo valor propio repetido varias veces, y en general hay cierta libertad al seleccionar los vectores propios correspondientes — pero no necesitamos preocuparnos por todas las posibilidades. Empecemos de manera sencilla e identifiquemos solo un vector propio de MaM_a.

ψ0=1+a++ar1r\vert \psi_0 \rangle = \frac{\vert 1 \rangle + \vert a \rangle + \cdots + \vert a^{r-1} \rangle}{\sqrt{r}}

El número rr es el orden de aa módulo NN, aquí y en el resto de la lección. El valor propio asociado a este vector propio es 11 porque no cambia cuando multiplicamos por aa.

Maψ0=a++ar1+arr=a++ar1+1r=ψ0M_a \vert \psi_0 \rangle = \frac{\vert a \rangle + \cdots + \vert a^{r-1} \rangle + \vert a^r \rangle}{\sqrt{r}} = \frac{\vert a \rangle + \cdots + \vert a^{r-1} \rangle + \vert 1 \rangle}{\sqrt{r}} = \vert \psi_0 \rangle

Esto ocurre porque ar=1a^r = 1, de modo que cada estado de la base estándar ak\vert a^k \rangle se desplaza a ak+1\vert a^{k+1} \rangle para kr1k\leq r-1, y ar1\vert a^{r-1} \rangle vuelve a desplazarse a 1\vert 1\rangle. Informalmente hablando, es como si estuviéramos agitando lentamente ψ0\vert \psi_0 \rangle, pero ya está completamente mezclado y nada cambia.

Aquí hay otro ejemplo de vector propio de MaM_a. Este resulta ser más interesante en el contexto de la búsqueda de orden y la estimación de fase.

ψ1=1+ωr1a++ωr(r1)ar1r\vert \psi_1 \rangle = \frac{\vert 1 \rangle + \omega_r^{-1} \vert a \rangle + \cdots + \omega_r^{-(r-1)}\vert a^{r-1} \rangle}{\sqrt{r}}

Alternativamente, podemos escribir este vector usando una suma de la siguiente manera.

ψ1=1rk=0r1ωrkak\vert \psi_1 \rangle = \frac{1}{\sqrt{r}} \sum_{k = 0}^{r-1} \omega_r^{-k} \vert a^k \rangle

Aquí vemos aparecer de forma natural el número complejo ωr=e2πi/r\omega_r = e^{2\pi i/r}, debido a la manera en que funciona la multiplicación por aa módulo NN. Esta vez el valor propio correspondiente es ωr\omega_r. Para verlo, podemos calcular primero de la siguiente manera.

Maψ1=1rk=0r1ωrkMaak=1rk=0r1ωrkak+1=1rk=1rωr(k1)ak=1rωrk=1rωrkakM_a \vert \psi_1 \rangle = \frac{1}{\sqrt{r}}\sum_{k = 0}^{r-1} \omega_r^{-k} M_a\vert a^k \rangle = \frac{1}{\sqrt{r}}\sum_{k = 0}^{r-1} \omega_r^{-k} \vert a^{k+1} \rangle = \frac{1}{\sqrt{r}}\sum_{k = 1}^{r} \omega_r^{-(k - 1)} \vert a^{k} \rangle = \frac{1}{\sqrt{r}}\omega_r \sum_{k = 1}^{r} \omega_r^{-k} \vert a^{k} \rangle

Luego, como ωrr=1=ωr0\omega_r^{-r} = 1 = \omega_r^0 y ar=1=a0\vert a^r \rangle = \vert 1\rangle = \vert a^0\rangle, vemos que

1rk=1rωrkak=1rk=0r1ωrkak=ψ1,\frac{1}{\sqrt{r}}\sum_{k = 1}^{r} \omega_r^{-k} \vert a^{k} \rangle = \frac{1}{\sqrt{r}}\sum_{k = 0}^{r-1} \omega_r^{-k} \vert a^k \rangle = \vert\psi_1\rangle,

por lo que Maψ1=ωrψ1.M_a \vert\psi_1\rangle = \omega_r \vert\psi_1\rangle.

Usando el mismo razonamiento, podemos identificar pares adicionales de vector propio/valor propio para MaM_a. Para cualquier elección de j{0,,r1}j\in\{0,\ldots,r-1\} tenemos que

ψj=1rk=0r1ωrjkak\vert \psi_j \rangle = \frac{1}{\sqrt{r}} \sum_{k = 0}^{r-1} \omega_r^{-jk} \vert a^k \rangle

es un vector propio de MaM_a cuyo valor propio correspondiente es ωrj\omega_r^j.

Maψj=ωrjψjM_a \vert \psi_j \rangle = \omega_r^j \vert \psi_j \rangle

Existen otros vectores propios de MaM_a, pero no necesitamos preocuparnos por ellos — nos centraremos únicamente en los vectores propios ψ0,,ψr1\vert\psi_0\rangle,\ldots,\vert\psi_{r-1}\rangle que acabamos de identificar.

Búsqueda de orden mediante estimación de fase

Para resolver el problema de búsqueda de orden para una elección dada de aZN,a\in\mathbb{Z}_N^{\ast}, podemos aplicar el procedimiento de estimación de fase a la operación Ma.M_a.

Para hacer esto, necesitamos implementar eficientemente con un circuito cuántico no solo Ma,M_a, sino también Ma2,M_a^2, Ma4,M_a^4, Ma8,M_a^8, y así sucesivamente, avanzando tanto como sea necesario para obtener una estimación suficientemente precisa del procedimiento de estimación de fase. Aquí explicaremos cómo puede hacerse esto, y determinaremos exactamente cuánta precisión se necesita más adelante.

Empecemos con la operación MaM_a por sí sola. Naturalmente, como estamos trabajando con el modelo de circuitos cuánticos, usaremos notación binaria para codificar los números entre 00 y N1.N-1. El número más grande que necesitamos codificar es N1,N-1, por lo que el número de bits que necesitamos es

n=lg(N1)=log(N1)+1.n = \operatorname{lg}(N-1) = \lfloor \log(N-1) \rfloor + 1.

Por ejemplo, si N=21N = 21 tenemos n=lg(N1)=5.n = \operatorname{lg}(N-1) = 5. Así es como se ve la codificación de los elementos de Z21\mathbb{Z}_{21} como cadenas binarias de longitud 5.5.

0000001000012010100\begin{gathered} 0 \mapsto 00000\\[1mm] 1 \mapsto 00001\\[1mm] \vdots\\[1mm] 20 \mapsto 10100 \end{gathered}

Y ahora, aquí está la definición precisa de cómo se define MaM_a como una operación de nn cúbits.

Max={ax  (mod  N)0x<NxNx<2nM_a \vert x\rangle = \begin{cases} \vert ax \; (\textrm{mod}\;N)\rangle & 0\leq x < N\\[1mm] \vert x\rangle & N\leq x < 2^n \end{cases}

El punto es que aunque solo nos importa cómo funciona MaM_a para 0,,N1,\vert 0\rangle,\ldots,\vert N-1\rangle, sí tenemos que especificar cómo funciona para los restantes 2nN2^n - N estados de la base estándar — y necesitamos hacerlo de una forma que nos siga dando una operación unitaria. Definir MaM_a de manera que no haga nada a los estados de la base estándar restantes logra esto.

Usando los algoritmos para la multiplicación entera y la división discutidos en la lección anterior, junto con la metodología para implementaciones reversibles y libres de basura de estos, podemos construir un circuito cuántico que realice Ma,M_a, para cualquier elección de aZN,a\in\mathbb{Z}_N^{\ast}, con un costo de O(n2).O(n^2). Una forma de hacer esto es la siguiente.

  1. Construir un circuito para realizar la operación

    xyxyfa(x)\vert x \rangle \vert y \rangle \mapsto \vert x \rangle \vert y \oplus f_a(x)\rangle

    donde

    fa(x)={ax  (mod  N)0x<NxNx<2nf_a(x) = \begin{cases} ax \; (\textrm{mod}\;N) & 0\leq x < N\\[1mm] x & N\leq x < 2^n \end{cases}

    usando el método descrito en la lección anterior. Esto nos da un circuito de tamaño O(n2).O(n^2).

  2. Intercambiar los dos sistemas de nn cúbits usando nn compuertas swap para intercambiar los cúbits individualmente.

  3. De forma similar al primer paso, construir un circuito para la operación

    xyxyfa1(x)\vert x \rangle \vert y \rangle \mapsto \vert x \rangle \bigl\vert y \oplus f_{a^{-1}}(x)\bigr\rangle

    donde a1a^{-1} es el inverso de aa en ZN.\mathbb{Z}_N^{\ast}.

Al inicializar los nn cúbits inferiores y componer los tres pasos, obtenemos esta transformación:

x0npaso 1xfa(x)paso 2fa(x)xpaso 3fa(x)xfa1(fa(x))=fa(x)0n\vert x \rangle \vert 0^n \rangle \stackrel{\text{paso 1}}{\mapsto} \vert x \rangle \vert f_a(x)\rangle \stackrel{\text{paso 2}}{\mapsto} \vert f_a(x)\rangle \vert x \rangle \stackrel{\text{paso 3}}{\mapsto} \vert f_a(x)\rangle \bigl\vert x \oplus f_{a^{-1}}(f_a(x)) \bigr\rangle = \vert f_a(x)\rangle\vert 0^n \rangle

El método requiere cúbits de espacio de trabajo, pero estos se devuelven a su estado inicializado al final, lo que nos permite usar estos circuitos para la estimación de fase. El costo total del circuito que obtenemos es O(n2).O(n^2).

Para realizar Ma2,M_a^2, Ma4,M_a^4, Ma8,M_a^8, y así sucesivamente, podemos usar exactamente el mismo método, excepto que reemplazamos aa por a2,a^2, a4,a^4, a8,a^8, y así sucesivamente, como elementos de ZN.\mathbb{Z}_N^{\ast}. Es decir, para cualquier potencia kk que elijamos, podemos crear un circuito para MakM_a^k no iterando kk veces el circuito para Ma,M_a, sino calculando b=akZNb = a^k \in \mathbb{Z}_N^{\ast} y luego usando el circuito para Mb.M_b.

El cálculo de potencias akZNa^k \in \mathbb{Z}_N es el problema de exponenciación modular mencionado en la lección anterior. Este cálculo puede realizarse clásicamente, usando el algoritmo de exponenciación modular mencionado en la lección anterior (frecuentemente llamado el algoritmo de potenciación en la teoría computacional de números). De hecho, solo necesitamos potencias de aa que sean potencias de 2, en particular a2,a4,a2m1ZN,a^2, a^4, \ldots a^{2^{m-1}} \in \mathbb{Z}_N^{\ast}, y podemos obtener estas potencias elevando al cuadrado iterativamente m1m-1 veces. Cada elevación al cuadrado puede realizarse mediante un circuito booleano de tamaño O(n2).O(n^2).

En esencia, lo que estamos haciendo aquí es delegar el problema de iterar MaM_a hasta 2m12^{m-1} veces a un cálculo clásico eficiente. ¡Y es una gran suerte que esto sea posible! Para una elección arbitraria de un circuito cuántico en el problema de estimación de fase, es poco probable que esto sea posible — y en ese caso el costo resultante para la estimación de fase crece exponencialmente en el número de cúbits de control m.m.

Solución dado un autovector conveniente

Para entender cómo podemos resolver el problema de búsqueda de orden usando estimación de fase, empecemos suponiendo que ejecutamos el procedimiento de estimación de fase sobre la operación MaM_a usando el autovector ψ1.\vert\psi_1\rangle. Conseguir este autovector no es fácil, como veremos, así que esta no será la historia completa — pero es útil comenzar aquí.

El autovalor de MaM_a correspondiente al autovector ψ1\vert \psi_1\rangle es

ωr=e2πi1r.\omega_r = e^{2\pi i \frac{1}{r}}.

Es decir, ωr=e2πiθ\omega_r = e^{2\pi i \theta} para θ=1/r.\theta = 1/r. Entonces, si ejecutamos el procedimiento de estimación de fase sobre MaM_a usando el autovector ψ1,\vert\psi_1\rangle, obtendremos una aproximación a 1/r.1/r. Calculando el recíproco podremos aprender rr — siempre que nuestra aproximación sea lo suficientemente buena.

Con más detalle, cuando ejecutamos el procedimiento de estimación de fase usando mm cúbits de control, lo que obtenemos es un número y{0,,2m1}.y\in\{0,\ldots,2^m-1\}. Luego tomamos y/2my/2^m como estimación para θ,\theta, que en este caso es 1/r.1/r. Para determinar qué es rr a partir de esta aproximación, lo natural es calcular el recíproco de nuestra aproximación y redondear al entero más cercano.

2my+12\left\lfloor \frac{2^m}{y} + \frac{1}{2} \right\rfloor

Por ejemplo, supongamos que r=6r = 6 y realizamos la estimación de fase sobre MaM_a con el autovector ψ1\vert\psi_1\rangle usando m=5m = 5 bits de control. La mejor aproximación de 55 bits a 1/r=1/61/r = 1/6 es 5/32,5/32, y tenemos una buena probabilidad (alrededor del 68%68\% en este caso) de obtener el resultado y=5y=5 de la estimación de fase. Tenemos

2my=325=6.4,\frac{2^m}{y} = \frac{32}{5} = 6.4,

y redondeando al entero más cercano obtenemos 6,6, que es la respuesta correcta.

Por otro lado, si no usamos suficiente precisión, podríamos no obtener la respuesta correcta. Por ejemplo, si tomamos m=4m = 4 cúbits de control en la estimación de fase, podríamos obtener la mejor aproximación de 44 bits a 1/r=1/6,1/r = 1/6, que es 3/16.3/16. Tomando el recíproco obtenemos

2my=163=5.333\frac{2^m}{y} = \frac{16}{3} = 5.333 \cdots

y redondeando al entero más cercano obtenemos la respuesta incorrecta de 5.5.

Entonces, ¿cuánta precisión necesitamos para obtener la respuesta correcta? Sabemos que el orden rr es un entero, e intuitivamente lo que necesitamos es suficiente precisión para distinguir 1/r1/r de posibilidades cercanas, incluyendo 1/(r+1)1/(r+1) y 1/(r1).1/(r-1). El número más cercano a 1/r1/r del que debemos preocuparnos es 1/(r+1),1/(r+1), y la distancia entre estos dos números es

1r1r+1=1r(r+1).\frac{1}{r} - \frac{1}{r+1} = \frac{1}{r(r+1)}.

Entonces, si queremos asegurarnos de no confundir 1/r1/r con 1/(r+1),1/(r+1), es suficiente usar suficiente precisión para garantizar que la mejor aproximación y/2my/2^m a 1/r1/r sea más cercana a 1/r1/r que a 1/(r+1).1/(r+1). Si usamos suficiente precisión para garantizar que

y2m1r<12r(r+1),\left\vert \frac{y}{2^m} - \frac{1}{r} \right\vert < \frac{1}{2 r (r+1)},

de modo que el error sea menor que la mitad de la distancia entre 1/r1/r y 1/(r+1),1/(r+1), entonces y/2my/2^m estará más cerca de 1/r1/r que de cualquier otra posibilidad, incluyendo 1/(r+1)1/(r+1) y 1/(r1).1/(r-1).

Podemos verificar esto de la siguiente manera. Supongamos que

y2m=1r+ε\frac{y}{2^m} = \frac{1}{r} + \varepsilon

para ε\varepsilon satisfaciendo

ε<12r(r+1).\vert\varepsilon\vert < \frac{1}{2 r (r+1)}.

Cuando tomamos el recíproco obtenemos

2my=11r+ε=r1+εr=rεr21+εr.\frac{2^m}{y} = \frac{1}{\frac{1}{r} + \varepsilon} = \frac{r}{1+\varepsilon r} = r - \frac{\varepsilon r^2}{1+\varepsilon r}.

Maximizando en el numerador y minimizando en el denominador, podemos acotar qué tan lejos estamos de rr de la siguiente manera.

εr21+εrr22r(r+1)1r2r(r+1)=r2r+1<12\left\vert \frac{\varepsilon r^2}{1+\varepsilon r} \right\vert \leq \frac{ \frac{r^2}{2 r(r+1)}}{1 - \frac{r}{2r(r+1)}} %= \frac{r^2}{2 r (r+1) - r} = \frac{r}{2 r + 1} < \frac{1}{2}

Estamos a menos de 1/21/2 de distancia de r,r, por lo que como se esperaba obtendremos rr al redondear.

Desafortunadamente, como todavía no sabemos qué es r,r, no podemos usarlo para indicarnos cuánta precisión necesitamos. Lo que podemos hacer en cambio es usar el hecho de que rr debe ser menor que NN para asegurarnos de usar suficiente precisión. En particular, si usamos suficiente precisión para garantizar que la mejor aproximación y/2my/2^m a 1/r1/r satisfaga

y2m1r12N2,\left\vert \frac{y}{2^m} - \frac{1}{r} \right\vert \leq \frac{1}{2N^2},

entonces tendremos suficiente precisión para determinar correctamente rr cuando tomemos el recíproco. Tomar m=2lg(N)+1m = 2\operatorname{lg}(N)+1 garantiza que tenemos una alta probabilidad de obtener una estimación con esta precisión usando el método descrito anteriormente. (Tomar m=2lg(N)m = 2\operatorname{lg}(N) es suficiente si estamos cómodos con un límite inferior del 40% en la probabilidad de éxito.)

Solución general

Como acabamos de ver, si tenemos el autovector ψ1\vert \psi_1 \rangle de Ma,M_a, podemos aprender rr mediante estimación de fase, siempre y cuando usemos suficientes cúbits de control para hacerlo con la precisión suficiente. Desafortunadamente, no es fácil conseguir el autovector ψ1,\vert\psi_1\rangle, por lo que necesitamos determinar cómo proceder.

Supongamos momentáneamente que procedemos igual que antes, pero con el autovector ψk\vert\psi_k\rangle en lugar de ψ1,\vert\psi_1\rangle, para cualquier elección de k{0,,r1}k\in\{0,\ldots,r-1\} que queramos considerar. El resultado que obtenemos del procedimiento de estimación de fase será una aproximación

y2mkr.\frac{y}{2^m} \approx \frac{k}{r}.

Bajo el supuesto de que no conocemos ni kk ni r,r, esto puede o no permitirnos identificar r.r. Por ejemplo, si k=0k = 0 obtendremos una aproximación y/2my/2^m a 0,0, lo que desafortunadamente no nos dice nada. Sin embargo, este es un caso inusual; para otros valores de k,k, al menos podremos aprender algo sobre r.r.

Podemos usar un algoritmo conocido como el algoritmo de fracciones continuas para convertir nuestra aproximación y/2my/2^m en fracciones cercanas — incluyendo k/rk/r si la aproximación es lo suficientemente buena. No explicaremos el algoritmo de fracciones continuas aquí. En cambio, aquí está el enunciado de un hecho conocido sobre este algoritmo.

Hecho

Dados un entero N2N\geq 2 y un número real α(0,1),\alpha\in(0,1), existe a lo sumo una elección de enteros u,v{0,,N1}u,v\in\{0,\ldots,N-1\} con v0v\neq 0 y gcd(u,v)=1\gcd(u,v)=1 que satisface αu/v<12N2.\vert \alpha - u/v\vert < \frac{1}{2N^2}. Dados α\alpha y N,N, el algoritmo de fracciones continuas encuentra uu y v,v, o informa que no existen. Este algoritmo puede implementarse como un circuito booleano de tamaño O((lg(N))3).O((\operatorname{lg}(N))^3).

Si tenemos una aproximación muy cercana y/2my/2^m a k/r,k/r, y ejecutamos el algoritmo de fracciones continuas para NN y α=y/2m,\alpha = y/2^m, obtendremos uu y v,v, tal como se describen en el hecho. Un análisis del hecho nos permite concluir que

uv=kr.\frac{u}{v} = \frac{k}{r}.

Nótese en particular que no necesariamente aprendemos kk y r,r, solo aprendemos k/rk/r en su expresión irreducible.

Por ejemplo, y como ya hemos notado, no vamos a aprender nada de k=0.k=0. Pero ese es el único valor de kk donde eso ocurre. Cuando kk es distinto de cero, puede tener factores comunes con r,r, pero el número vv que obtenemos del algoritmo de fracciones continuas debe al menos dividir a r.r.

Aunque no es evidente, es cierto que si tenemos la capacidad de aprender uu y vv para u/v=k/ru/v = k/r con k{0,,r1}k\in\{0,\ldots,r-1\} elegido uniformemente al azar, entonces es muy probable que podamos recuperar rr después de solo unas pocas muestras. En particular, si nuestra estimación para rr es el mínimo común múltiplo de todos los valores del denominador vv que observamos, tendremos razón con alta probabilidad. Intuitivamente, algunos valores de kk no son buenos porque comparten factores comunes con r,r, y esos factores comunes quedan ocultos cuando aprendemos uu y v.v. Pero las elecciones aleatorias de kk no tienden a ocultar factores de rr por mucho tiempo, y la probabilidad de no adivinar rr correctamente tomando el mínimo común múltiplo de los denominadores observados decrece exponencialmente en el número de muestras.

Queda por abordar la cuestión de cómo conseguimos un autovector ψk\vert\psi_k\rangle de MaM_a sobre el cual ejecutar el procedimiento de estimación de fase. Resulta que ¡en realidad no necesitamos crearlos!

Lo que haremos en su lugar es ejecutar el procedimiento de estimación de fase sobre el estado 1,\vert 1\rangle, con lo que nos referimos a la codificación binaria de nn bits del número 1,1, en lugar de un autovector ψ\vert\psi\rangle de Ma.M_a. Hasta ahora solo hemos hablado de ejecutar el procedimiento de estimación de fase sobre un autovector particular, pero nada nos impide ejecutar el procedimiento sobre un estado de entrada que no sea un autovector de Ma,M_a, y eso es lo que hacemos aquí con el estado 1.\vert 1\rangle. (Esto no es un autovector de MaM_a a menos que a=1,a=1, que no es una elección que nos interesará.)

La justificación para elegir el estado 1\vert 1\rangle en lugar de un autovector de MaM_a es que la siguiente ecuación es verdadera.

1=1rk=0r1ψk\vert 1\rangle = \frac{1}{\sqrt{r}} \sum_{k = 0}^{r-1} \vert \psi_k\rangle

Una forma de verificar esta ecuación es comparar los productos internos de ambos lados con cada estado de la base estándar, usando fórmulas mencionadas anteriormente en la lección para ayudar a evaluar los resultados del lado derecho. Como consecuencia, obtendremos exactamente los mismos resultados de medición que si hubiéramos elegido k{0,,r1}k\in\{0,\ldots,r-1\} uniformemente al azar y usado ψk\vert\psi_k\rangle como autovector.

Con mayor detalle, imaginemos que ejecutamos el procedimiento de estimación de fase con el estado 1\vert 1\rangle en lugar de uno de los autovectores ψk.\vert\psi_k\rangle. Después de realizar la transformada cuántica de Fourier inversa, esto nos deja con el estado

1rk=0r1ψkγk,\frac{1}{\sqrt{r}} \sum_{k = 0}^{r-1} \vert \psi_k\rangle \vert \gamma_k\rangle,

donde

γk=12my=02m1x=02m1e2πix(k/ry/2m)y.\vert\gamma_k\rangle = \frac{1}{2^m} \sum_{y=0}^{2^m - 1} \sum_{x=0}^{2^m-1} e^{2\pi i x (k/r - y/2^m)} \vert y\rangle.

El vector γk\vert\gamma_k\rangle representa el estado de los mm cúbits superiores después de que se ha aplicado la inversa de la transformada cuántica de Fourier sobre ellos.

Entonces, en virtud de que {ψ0,,ψr1}\{\vert\psi_0\rangle,\ldots,\vert\psi_{r-1}\rangle\} es un conjunto ortonormal, encontramos que una medición de los mm cúbits superiores produce una aproximación y/2my/2^m al valor k/rk/r donde k{0,,r1}k\in\{0,\ldots,r-1\} se elige uniformemente al azar. Como ya hemos discutido, esto nos permite aprender rr con un alto grado de confianza después de varias ejecuciones independientes, que era nuestro objetivo.

Costo total

El costo de implementar cada unitaria controlada MakM_a^k es O(n2).O(n^2). Hay mm operaciones unitarias controladas, y tenemos m=O(n),m = O(n), por lo que el costo total de las operaciones unitarias controladas es O(n3).O(n^3). Además, tenemos mm compuertas Hadamard (que contribuyen O(n)O(n) al costo), y la transformada cuántica de Fourier inversa contribuye O(n2)O(n^2) al costo. Por lo tanto, el costo de las operaciones unitarias controladas domina el costo de todo el procedimiento — que es entonces O(n3).O(n^3).

Además del circuito cuántico en sí, hay algunos cálculos clásicos que deben realizarse en el camino. Esto incluye calcular las potencias aka^k en ZN\mathbb{Z}_N para k=2,4,8,,2m1,k = 2, 4, 8, \ldots, 2^{m-1}, que se necesitan para crear las compuertas unitarias controladas, así como el algoritmo de fracciones continuas que convierte aproximaciones de θ\theta en fracciones. Estos cálculos pueden realizarse mediante circuitos booleanos con un costo total de O(n3).O(n^3).

Como es habitual, todas estas cotas pueden mejorarse usando algoritmos asintóticamente rápidos; estas cotas asumen que estamos usando algoritmos estándar para las operaciones aritméticas básicas.

Factorización mediante búsqueda de orden

Lo último que necesitamos discutir es cómo resolver el problema de búsqueda de orden nos ayuda a factorizar. Esta parte es completamente clásica — no tiene nada que ver específicamente con la computación cuántica.

Aquí está la idea básica. Queremos factorizar el número N,N, y podemos hacer esto recursivamente. Específicamente, podemos enfocarnos en la tarea de dividir N,N, que significa encontrar dos enteros cualesquiera b,c2b,c\geq 2 para los cuales N=bc.N = bc. Esto no es posible si NN es un número primo, pero podemos probar eficientemente si NN es primo usando un algoritmo de prueba de primalidad primero, y si NN no es primo intentaremos dividirlo. Una vez que dividimos N,N, podemos simplemente recurrir sobre bb y cc hasta que todos nuestros factores sean primos y obtengamos la factorización prima de N.N.

Dividir enteros pares es fácil: simplemente damos como resultado 22 y N/2.N/2.

También es fácil dividir potencias perfectas, es decir, números de la forma N=sjN = s^j para enteros s,j2,s,j\geq 2, simplemente aproximando las raíces N1/2,N^{1/2}, N1/3,N^{1/3}, N1/4,N^{1/4}, y así sucesivamente, y comprobando los enteros cercanos como candidatos para s.s. No necesitamos ir más allá de log(N)\log(N) pasos en esta secuencia, porque en ese punto la raíz cae por debajo de 22 y no revelará candidatos adicionales.

Es bueno que podamos hacer ambas cosas porque la búsqueda de orden no nos ayudará a factorizar números pares ni potencias primas, donde el número ss resulta ser primo. Si NN es impar y no es una potencia prima, sin embargo, la búsqueda de orden nos permite dividir N.N.

Algoritmo probabilístico para dividir un entero compuesto impar N que no es una potencia prima
  1. Elige aleatoriamente a{2,,N1}.a\in\{2,\ldots,N-1\}.

  2. Calcula d=gcd(a,N).d=\gcd(a,N).

  3. Si d>1d > 1 entonces da como resultado b=db = d y c=N/dc = N/d y detente. De lo contrario continúa con el siguiente paso sabiendo que aZN.a\in\mathbb{Z}_N^{\ast}.

  4. Sea rr el orden de aa módulo N.N. (Aquí es donde necesitamos la búsqueda de orden.)

  5. Si rr es par:

    5.1 Calcula x=ar/21x = a^{r/2} - 1 módulo NN
    5.2 Calcula d=gcd(x,N).d = \gcd(x,N).
    5.3 Si d>1d>1 entonces da como resultado b=db=d y c=N/dc = N/d y detente.

  6. Si se llega a este punto, el algoritmo no ha podido encontrar un factor de N.N.

Una ejecución de este algoritmo puede no encontrar un factor de N.N. Específicamente, esto ocurre en dos situaciones:

  • El orden de aa módulo NN es impar.
  • El orden de aa módulo NN es par y gcd(ar/21,N)=1.\gcd\bigl(a^{r/2} - 1, N\bigr) = 1.

Usando teoría básica de números se puede probar que, para una elección aleatoria de a,a, con probabilidad al menos 1/21/2 ninguno de estos eventos ocurre. De hecho, la probabilidad de que ocurra alguno de estos eventos es a lo sumo 2(m1)2^{-(m-1)} siendo mm el número de factores primos distintos de N,N, razón por la cual se necesita el supuesto de que NN no es una potencia prima. (El supuesto de que NN es impar también es necesario para que este hecho sea verdadero.)

Esto significa que cada ejecución tiene al menos un 50% de probabilidad de dividir N.N. Por lo tanto, si ejecutamos el algoritmo tt veces, eligiendo aa aleatoriamente cada vez, tendremos éxito en dividir NN con probabilidad al menos 12t.1 - 2^{-t}.

La idea básica detrás del algoritmo es la siguiente. Si tenemos una elección de aa para la cual el orden rr de aa módulo NN es par, entonces r/2r/2 es un entero y podemos considerar los números

ar/21  (mod  N)yar/2+1  (mod  N).a^{r/2} - 1\; (\textrm{mod}\; N) \quad \text{y} \quad a^{r/2} + 1\; (\textrm{mod}\; N).

Usando la fórmula Z21=(Z+1)(Z1),Z^2 - 1 = (Z+1)(Z-1), concluimos que

(ar/21)(ar/2+1)=ar1.\bigl(a^{r/2} - 1\bigr) \bigl(a^{r/2} + 1\bigr) = a^r - 1.

Ahora, sabemos que ar  (mod  N)=1a^r \; (\textrm{mod}\; N) = 1 por la definición del orden — lo que es otra forma de decir que NN divide exactamente a ar1.a^r - 1. Eso significa que NN divide exactamente al producto

(ar/21)(ar/2+1).\bigl(a^{r/2} - 1\bigr) \bigl(a^{r/2} + 1\bigr).

Para que esto sea verdad, todos los factores primos de NN deben ser también factores primos de ar/21a^{r/2} - 1 o de ar/2+1a^{r/2} + 1 (o de ambos) — y para una selección aleatoria de aa resulta ser poco probable que todos los factores primos de NN dividan a uno de los términos sin que ninguno divida al otro. De lo contrario, siempre que algunos de los factores primos de NN dividan al primer término y algunos dividan al segundo término, podremos encontrar un factor no trivial de NN calculando el MCD con el primer término.