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 dado, definimos el conjunto de la siguiente manera.
Por ejemplo, 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 , como la suma y la multiplicación — y si acordamos tomar siempre nuestros resultados módulo (es decir, dividir entre 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 , convierten en un anillo, que es un tipo de objeto fundamentalmente importante en álgebra.
Por ejemplo, y son elementos de , y si los multiplicamos obtenemos , que deja un resto de al dividirlo entre . A veces esto se expresa de la siguiente forma.
Pero también podemos simplemente escribir , siempre que haya quedado claro que estamos trabajando en , para mantener la notación lo más sencilla posible.
Como ejemplo, aquí están las tablas de suma y multiplicación para
Entre los elementos de , los elementos que satisfacen son especiales. Frecuentemente, el conjunto que contiene estos elementos se denota con un asterisco de la siguiente manera.
Si centramos nuestra atención en la operación de multiplicación, el conjunto 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 y multiplicamos por sí mismo repetidamente, siempre acabaremos obteniendo el número .
Como primer ejemplo, tomemos . Tenemos que porque , y si multiplicamos por sí mismo obtenemos , como confirma la tabla anterior.
Como segundo ejemplo, tomemos . Si recorremos los números del al , los que tienen MCD igual a con son los siguientes.
Para cada uno de estos elementos, es posible elevar ese número a una potencia entera positiva para obtener . A continuación se muestran las potencias más pequeñas para las que esto funciona:
Naturalmente estamos trabajando dentro de 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.
Alternativamente, en términos de la notación que acabamos de introducir, se nos da , y buscamos el entero positivo más pequeño tal que . Este número se llama el orden de módulo .
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 , donde multiplicamos por un elemento fijo .
Para ser precisos, estamos realizando la multiplicación en , por lo que se sobreentiende que tomamos el producto módulo dentro del ket en el lado derecho de la ecuación.
Por ejemplo, si tomamos y , entonces la acción de sobre la base estándar es la siguiente.
Esta es una operación unitaria siempre que ; permuta los elementos de la base estándar , 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 de módulo , y reconocer que la inversa de es .
Hay otra forma de pensar en la inversa que no requiere ningún conocimiento de (que, al fin y al cabo, es lo que estamos tratando de calcular). Para todo elemento siempre existe un único elemento que satisface . Denotamos este elemento como , y puede calcularse eficientemente; una extensión del algoritmo MCD de Euclides lo hace con un coste cuadrático en . Y así
Por tanto, la operación 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 , suponiendo que . Como acabamos de argumentar, esta suposición nos dice que es unitaria.
Hay valores propios de , 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 .
El número es el orden de módulo , aquí y en el resto de la lección. El valor propio asociado a este vector propio es porque no cambia cuando multiplicamos por .
Esto ocurre porque , de modo que cada estado de la base estándar se desplaza a para , y vuelve a desplazarse a . Informalmente hablando, es como si estuviéramos agitando lentamente , pero ya está completamente mezclado y nada cambia.
Aquí hay otro ejemplo de vector propio de . Este resulta ser más interesante en el contexto de la búsqueda de orden y la estimación de fase.
Alternativamente, podemos escribir este vector usando una suma de la siguiente manera.
Aquí vemos aparecer de forma natural el número complejo , debido a la manera en que funciona la multiplicación por módulo . Esta vez el valor propio correspondiente es . Para verlo, podemos calcular primero de la siguiente manera.
Luego, como y , vemos que
por lo que
Usando el mismo razonamiento, podemos identificar pares adicionales de vector propio/valor propio para . Para cualquier elección de tenemos que
es un vector propio de cuyo valor propio correspondiente es .
Existen otros vectores propios de , pero no necesitamos preocuparnos por ellos — nos centraremos únicamente en los vectores propios 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 podemos aplicar el procedimiento de estimación de fase a la operación
Para hacer esto, necesitamos implementar eficientemente con un circuito cuántico no solo sino también 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 por sí sola. Naturalmente, como estamos trabajando con el modelo de circuitos cuánticos, usaremos notación binaria para codificar los números entre y El número más grande que necesitamos codificar es por lo que el número de bits que necesitamos es
Por ejemplo, si tenemos Así es como se ve la codificación de los elementos de como cadenas binarias de longitud
Y ahora, aquí está la definición precisa de cómo se define como una operación de cúbits.
El punto es que aunque solo nos importa cómo funciona para sí tenemos que especificar cómo funciona para los restantes estados de la base estándar — y necesitamos hacerlo de una forma que nos siga dando una operación unitaria. Definir 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 para cualquier elección de con un costo de Una forma de hacer esto es la siguiente.
-
Construir un circuito para realizar la operación
donde
usando el método descrito en la lección anterior. Esto nos da un circuito de tamaño
-
Intercambiar los dos sistemas de cúbits usando compuertas swap para intercambiar los cúbits individualmente.
-
De forma similar al primer paso, construir un circuito para la operación
donde es el inverso de en
Al inicializar los cúbits inferiores y componer los tres pasos, obtenemos esta transformación:
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
Para realizar y así sucesivamente, podemos usar exactamente el mismo método, excepto que reemplazamos por y así sucesivamente, como elementos de Es decir, para cualquier potencia que elijamos, podemos crear un circuito para no iterando veces el circuito para sino calculando y luego usando el circuito para
El cálculo de potencias 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 que sean potencias de 2, en particular y podemos obtener estas potencias elevando al cuadrado iterativamente veces. Cada elevación al cuadrado puede realizarse mediante un circuito booleano de tamaño
En esencia, lo que estamos haciendo aquí es delegar el problema de iterar hasta 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
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 usando el autovector 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 correspondiente al autovector es
Es decir, para Entonces, si ejecutamos el procedimiento de estimación de fase sobre usando el autovector obtendremos una aproximación a Calculando el recíproco podremos aprender — siempre que nuestra aproximación sea lo suficientemente buena.
Con más detalle, cuando ejecutamos el procedimiento de estimación de fase usando cúbits de control, lo que obtenemos es un número Luego tomamos como estimación para que en este caso es Para determinar qué es a partir de esta aproximación, lo natural es calcular el recíproco de nuestra aproximación y redondear al entero más cercano.
Por ejemplo, supongamos que y realizamos la estimación de fase sobre con el autovector usando bits de control. La mejor aproximación de bits a es y tenemos una buena probabilidad (alrededor del en este caso) de obtener el resultado de la estimación de fase. Tenemos
y redondeando al entero más cercano obtenemos 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 cúbits de control en la estimación de fase, podríamos obtener la mejor aproximación de bits a que es Tomando el recíproco obtenemos
y redondeando al entero más cercano obtenemos la respuesta incorrecta de
Entonces, ¿cuánta precisión necesitamos para obtener la respuesta correcta? Sabemos que el orden es un entero, e intuitivamente lo que necesitamos es suficiente precisión para distinguir de posibilidades cercanas, incluyendo y El número más cercano a del que debemos preocuparnos es y la distancia entre estos dos números es
Entonces, si queremos asegurarnos de no confundir con es suficiente usar suficiente precisión para garantizar que la mejor aproximación a sea más cercana a que a Si usamos suficiente precisión para garantizar que
de modo que el error sea menor que la mitad de la distancia entre y entonces estará más cerca de que de cualquier otra posibilidad, incluyendo y
Podemos verificar esto de la siguiente manera. Supongamos que
para satisfaciendo
Cuando tomamos el recíproco obtenemos
Maximizando en el numerador y minimizando en el denominador, podemos acotar qué tan lejos estamos de de la siguiente manera.
Estamos a menos de de distancia de por lo que como se esperaba obtendremos al redondear.
Desafortunadamente, como todavía no sabemos qué es no podemos usarlo para indicarnos cuánta precisión necesitamos. Lo que podemos hacer en cambio es usar el hecho de que debe ser menor que para asegurarnos de usar suficiente precisión. En particular, si usamos suficiente precisión para garantizar que la mejor aproximación a satisfaga
entonces tendremos suficiente precisión para determinar correctamente cuando tomemos el recíproco. Tomar garantiza que tenemos una alta probabilidad de obtener una estimación con esta precisión usando el método descrito anteriormente. (Tomar 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 de podemos aprender 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 por lo que necesitamos determinar cómo proceder.
Supongamos momentáneamente que procedemos igual que antes, pero con el autovector en lugar de para cualquier elección de que queramos considerar. El resultado que obtenemos del procedimiento de estimación de fase será una aproximación
Bajo el supuesto de que no conocemos ni ni esto puede o no permitirnos identificar Por ejemplo, si obtendremos una aproximación a lo que desafortunadamente no nos dice nada. Sin embargo, este es un caso inusual; para otros valores de al menos podremos aprender algo sobre
Podemos usar un algoritmo conocido como el algoritmo de fracciones continuas para convertir nuestra aproximación en fracciones cercanas — incluyendo 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.
Si tenemos una aproximación muy cercana a y ejecutamos el algoritmo de fracciones continuas para y obtendremos y tal como se describen en el hecho. Un análisis del hecho nos permite concluir que
Nótese en particular que no necesariamente aprendemos y solo aprendemos en su expresión irreducible.
Por ejemplo, y como ya hemos notado, no vamos a aprender nada de Pero ese es el único valor de donde eso ocurre. Cuando es distinto de cero, puede tener factores comunes con pero el número que obtenemos del algoritmo de fracciones continuas debe al menos dividir a
Aunque no es evidente, es cierto que si tenemos la capacidad de aprender y para con elegido uniformemente al azar, entonces es muy probable que podamos recuperar después de solo unas pocas muestras. En particular, si nuestra estimación para es el mínimo común múltiplo de todos los valores del denominador que observamos, tendremos razón con alta probabilidad. Intuitivamente, algunos valores de no son buenos porque comparten factores comunes con y esos factores comunes quedan ocultos cuando aprendemos y Pero las elecciones aleatorias de no tienden a ocultar factores de por mucho tiempo, y la probabilidad de no adivinar 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 de 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 con lo que nos referimos a la codificación binaria de bits del número en lugar de un autovector de 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 y eso es lo que hacemos aquí con el estado (Esto no es un autovector de a menos que que no es una elección que nos interesará.)
La justificación para elegir el estado en lugar de un autovector de es que la siguiente ecuación es verdadera.
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 uniformemente al azar y usado como autovector.
Con mayor detalle, imaginemos que ejecutamos el procedimiento de estimación de fase con el estado en lugar de uno de los autovectores Después de realizar la transformada cuántica de Fourier inversa, esto nos deja con el estado
donde
El vector representa el estado de los 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 es un conjunto ortonormal, encontramos que una medición de los cúbits superiores produce una aproximación al valor donde se elige uniformemente al azar. Como ya hemos discutido, esto nos permite aprender 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 es Hay operaciones unitarias controladas, y tenemos por lo que el costo total de las operaciones unitarias controladas es Además, tenemos compuertas Hadamard (que contribuyen al costo), y la transformada cuántica de Fourier inversa contribuye al costo. Por lo tanto, el costo de las operaciones unitarias controladas domina el costo de todo el procedimiento — que es entonces
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 en para que se necesitan para crear las compuertas unitarias controladas, así como el algoritmo de fracciones continuas que convierte aproximaciones de en fracciones. Estos cálculos pueden realizarse mediante circuitos booleanos con un costo total de
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 y podemos hacer esto recursivamente. Específicamente, podemos enfocarnos en la tarea de dividir que significa encontrar dos enteros cualesquiera para los cuales Esto no es posible si es un número primo, pero podemos probar eficientemente si es primo usando un algoritmo de prueba de primalidad primero, y si no es primo intentaremos dividirlo. Una vez que dividimos podemos simplemente recurrir sobre y hasta que todos nuestros factores sean primos y obtengamos la factorización prima de
Dividir enteros pares es fácil: simplemente damos como resultado y
También es fácil dividir potencias perfectas, es decir, números de la forma para enteros simplemente aproximando las raíces y así sucesivamente, y comprobando los enteros cercanos como candidatos para No necesitamos ir más allá de pasos en esta secuencia, porque en ese punto la raíz cae por debajo de 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 resulta ser primo. Si es impar y no es una potencia prima, sin embargo, la búsqueda de orden nos permite dividir
Una ejecución de este algoritmo puede no encontrar un factor de Específicamente, esto ocurre en dos situaciones:
- El orden de módulo es impar.
- El orden de módulo es par y
Usando teoría básica de números se puede probar que, para una elección aleatoria de con probabilidad al menos ninguno de estos eventos ocurre. De hecho, la probabilidad de que ocurra alguno de estos eventos es a lo sumo siendo el número de factores primos distintos de razón por la cual se necesita el supuesto de que no es una potencia prima. (El supuesto de que 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 Por lo tanto, si ejecutamos el algoritmo veces, eligiendo aleatoriamente cada vez, tendremos éxito en dividir con probabilidad al menos
La idea básica detrás del algoritmo es la siguiente. Si tenemos una elección de para la cual el orden de módulo es par, entonces es un entero y podemos considerar los números
Usando la fórmula concluimos que
Ahora, sabemos que por la definición del orden — lo que es otra forma de decir que divide exactamente a Eso significa que divide exactamente al producto
Para que esto sea verdad, todos los factores primos de deben ser también factores primos de o de (o de ambos) — y para una selección aleatoria de resulta ser poco probable que todos los factores primos de dividan a uno de los términos sin que ninguno divida al otro. De lo contrario, siempre que algunos de los factores primos de dividan al primer término y algunos dividan al segundo término, podremos encontrar un factor no trivial de calculando el MCD con el primer término.