"Creo que puedo decir con seguridad que nadie entiende la mecánica cuántica", Richard Feynman
El tema de la computación cuántica siempre ha atraído a escritores técnicos y periodistas. Su potencial computacional y su complejidad le dieron una especie de halo místico. Con demasiada frecuencia, los artículos temáticos y las infografías describen en detalle todo tipo de perspectivas para esta industria, mientras apenas tocan los temas de su aplicación práctica: esto puede confundir a un lector no demasiado cuidadoso.
En los artículos de divulgación científica, se omiten descripciones de sistemas cuánticos y declaraciones como:
Un bit normal puede ser igual a "1" o "0", pero un qubit puede ser simultáneamente igual a "1" y "0".Si tienes mucha suerte (de lo que no estoy seguro), te dirán que:
El qubit está en una superposición entre "1" y "0".Ninguna de estas explicaciones parece plausible, porque estamos tratando de formular un fenómeno de mecánica cuántica utilizando herramientas de lenguaje creadas en un mundo muy tradicional. Para explicar claramente los principios de la computación cuántica, es necesario usar otro lenguaje: matemático.
En esta guía, hablaré sobre las herramientas matemáticas necesarias para modelar y comprender los sistemas de computación cuántica, y cómo ilustrar y aplicar la lógica de la computación cuántica. Además, daré un ejemplo de un algoritmo cuántico y diré cuál es su ventaja sobre una computadora tradicional.
Haré todo lo posible para hablar de todo esto en un lenguaje comprensible, pero aun así espero que los lectores de este artículo tengan ideas básicas sobre álgebra lineal y lógica digital (
aquí se describe el álgebra lineal, la lógica digital está
aquí ).
Para comenzar, repasemos los principios de la lógica digital. Se basa en el uso de circuitos eléctricos para los cálculos. Para hacer nuestra descripción más abstracta, simplificamos el estado del cable a "1" o "0", que corresponderá a los estados "encendido" o "apagado". Habiendo construido transistores en una secuencia determinada, crearemos los llamados elementos lógicos que toman uno o más valores de las señales de entrada y los convertimos en una señal de salida basada en ciertas reglas de la lógica booleana.
Elementos lógicos comunes y tablas de estado
Sobre la base de las cadenas de estos elementos básicos, puede crear elementos más complejos, y sobre la base de las cadenas de elementos más complejos, en última instancia, podemos confiar en obtener un análogo del procesador central con un alto grado de abstracción.
Como mencioné anteriormente, necesitamos una forma de mapear matemáticamente la lógica digital. Primero, introduzcamos la lógica matemática tradicional. Usando álgebra lineal, los bits clásicos con los valores "1" y "0" se pueden representar como dos vectores de columna:
donde los números a la izquierda son la
notación vectorial de
Dirac . Al representar nuestros bits de esta manera, podemos modelar operaciones lógicas en bits utilizando transformaciones vectoriales. Tenga en cuenta: a pesar del hecho de que cuando usa dos bits en elementos lógicos, puede realizar muchas operaciones (“AND” (AND), “Not” (NOT), “Exclude Or” (XOR), etc.), cuando usa uno bits es posible realizar solo cuatro operaciones: conversión de identidad, negación, cálculo de la constante "0" y cálculo de la constante "1". Durante la conversión idéntica, el bit permanece sin cambios, cuando se niega, el valor del bit se invierte (de "0" a "1" o de "1" a "0"), y el cálculo de la constante "1" o "0" establece el bit a "1" o "0" independientemente de su valor anterior.
Basado en nuestra nueva representación de un bit, es bastante fácil realizar operaciones en el bit correspondiente usando la transformación vectorial:
Antes de continuar, veamos el concepto de
computación reversible , que solo implica que para garantizar la reversibilidad de una operación o elemento lógico, es necesario determinar una lista de valores de señal de entrada en función de las señales de salida y los nombres de las operaciones utilizadas. Por lo tanto, podemos concluir que la transformación de identidad y la negación son reversibles, pero la operación de calcular las constantes "1" y "0" no lo es. Debido a la
unitaridad de la mecánica cuántica, las computadoras cuánticas utilizan operaciones exclusivamente reversibles, por lo que nos centraremos en ellas. A continuación, convertiremos los elementos irreversibles en elementos reversibles para garantizar que puedan ser utilizados por una computadora cuántica.
Usando el
producto tensor de bits individuales, se pueden representar muchos bits:
Ahora que tenemos casi todos los conceptos matemáticos necesarios, pasaremos a nuestro primer elemento de lógica cuántica. Este es el operador
CNOT , o el "NO" controlado (NO), que es de gran importancia en la computación reversible y cuántica. El elemento CNOT se aplica a dos bits y devuelve dos bits. El primer bit se asigna como "control" y el segundo - "control". Si el bit de control se establece en "1", el bit de control cambia su valor; si el bit de control se establece en "0", el bit de control no cambia.
Este operador se puede representar como el siguiente vector de transformación:
Para demostrar todo lo que ya hemos tratado, le mostraré cómo usar el elemento CNOT con respecto a muchos bits:
Resumimos lo que ya se ha dicho: en el primer ejemplo, descomponemos | 10⟩ en partes de su producto tensor y utilizamos la matriz CNOT para obtener un nuevo estado correspondiente del producto; entonces lo factorizamos a | 11⟩ de acuerdo con la tabla de valores CNOT dada anteriormente.
Entonces, recordamos todas las reglas matemáticas que nos ayudarán a lidiar con los cálculos tradicionales y los bits ordinarios, y finalmente podemos pasar a la computación cuántica moderna y los qubits.
Si lees hasta este lugar, entonces tengo buenas noticias para ti: los qubits se pueden expresar fácilmente matemáticamente. En general, si el bit clásico (cbit) se puede establecer en | 1⟩ o | 0⟩, el qubit está simplemente en superposición y puede ser igual a | 0⟩ y | 1⟩ antes de la medición. Después de la medición, colapsa en | 0⟩ o | 1⟩. En otras palabras, un qubit se puede representar como una combinación lineal de | 0⟩ y | 1⟩ de acuerdo con la siguiente fórmula:
donde
a₀ y
a₁ representan, respectivamente, las amplitudes | 0⟩ y | 1⟩. Pueden considerarse como "probabilidades cuánticas", que representan la probabilidad de que un qubit se colapse en cualquiera de los estados después de su medición, ya que en la mecánica cuántica un objeto en superposición se colapsa en uno de los estados después de la fijación. Expanda esta expresión y obtenga lo siguiente:
Para simplificar mi explicación, utilizaré esta misma noción en este artículo.
Para este qubit, la probabilidad de colapso de
a₀ después de la medición es |
a ₀ | ², y la posibilidad de colapso en
a ₁ es igual a |
a ₁ | ². Por ejemplo, para el siguiente qubit:
la posibilidad de colapso en "1" es | 1 / √2 | ², o ½, es decir, 50/50.
Dado que en el sistema clásico todas las probabilidades en la suma deben dar unidad (para una distribución de probabilidad completa), podemos concluir que los cuadrados de los valores absolutos de las amplitudes | 0⟩ y | 1⟩ deben sumar uno. En base a esta información, podemos componer la siguiente ecuación:
Si está familiarizado con la trigonometría, notará que esta ecuación corresponde al teorema de Pitágoras (a² + b² = c²), es decir, podemos representar gráficamente los posibles estados del qubit en forma de puntos en el círculo unitario, a saber:
Los operadores y elementos lógicos se aplican a los qubits, así como en el caso de los bits clásicos, basados en la transformación de la matriz. Todos los operadores de matriz reversibles que hemos recordado hasta la fecha, en particular, CNOT, se pueden usar para trabajar con qubits. Tales operadores de matriz hacen posible usar cada una de las amplitudes de un qubit sin medirlo ni colapsarlo. Permíteme darte un ejemplo del uso del operador de negación para dejar de fumar:
Antes de continuar, recuerdo que las amplitudes
a ₀ y
a ₁ son en realidad
números complejos , por lo que el estado qubit se puede mostrar con mayor precisión en una esfera de unidad tridimensional, también conocida como
esfera de Bloch :
Sin embargo, para simplificar la explicación, aquí nos restringimos a los números reales.
Parece que ha llegado el momento de discutir algunos elementos lógicos que tienen sentido exclusivamente en el contexto de la computación cuántica.
Uno de los operadores más importantes es el "elemento Hadamard": toma un poco en el estado "0" o "1" y lo coloca en la superposición correspondiente con un 50% de posibilidades de colapsarlo a "1" o "0" después de la medición.
Tenga en cuenta que hay un número negativo en el lado inferior derecho del operador Hadamard. Esto se debe al hecho de que el resultado del uso del operador depende del valor de la señal de entrada: - | 1⟩ o | 0⟩, y por lo tanto el cálculo es reversible.
Otro punto importante relacionado con el elemento Hadamard es su reversibilidad, es decir, puede tomar un qubit en la superposición correspondiente y convertirlo a | 0⟩ o | 1⟩.
Esto es muy importante porque nos permite transformarnos de un estado cuántico sin determinar el estado del qubit, y, en consecuencia, sin colapsarlo. Entonces, podemos estructurar la computación cuántica sobre la base de un principio determinista en lugar de un principio probabilístico.
Los operadores cuánticos que contienen números exclusivamente reales son lo opuesto, por lo que podemos presentar el resultado de aplicar el operador a un qubit como una transformación dentro del círculo unitario en forma de máquina de estados:
Por lo tanto, el qubit, cuyo estado se muestra en el diagrama anterior, después de aplicar la operación Hadamard se convierte al estado indicado por la flecha correspondiente. De manera similar, podemos construir otra máquina de estados que ilustrará la transformación de un qubit usando el operador de negación, como se muestra arriba (también conocido como el operador de negación de Pauli o inversión de bits), como se muestra a continuación:
Para realizar operaciones más complejas con nuestro qubit, puede usar una cadena de muchos operadores o aplicar elementos muchas veces. Un ejemplo de una transformación en serie basada en la
representación de una cadena cuántica es la siguiente:
Es decir, si comenzamos con el bit | 0⟩, aplicamos la inversión de bits, y luego la operación Hadamard, luego otra inversión de bits, y nuevamente la operación Hadamard, después de la cual la inversión de bits final, obtenemos el vector en el lado derecho de la cadena. Al superponer varias máquinas de estado una encima de la otra, podemos comenzar con | 0⟩ y rastrear las flechas de colores correspondientes a cada una de las transformaciones para comprender cómo funciona todo esto.
Como hemos llegado tan lejos, es hora de considerar uno de los tipos de algoritmos cuánticos, a saber, el algoritmo
Deutsch-Joji , y mostrar su ventaja sobre una computadora clásica. Vale la pena señalar que el algoritmo Deutsch-Yogi es completamente determinista, es decir, devuelve la respuesta correcta en el 100% de los casos (a diferencia de muchos otros algoritmos cuánticos basados en la determinación probabilística de qubits).
Imaginemos que tiene un cuadro negro que contiene una función / operador en un bit (recuerde: cuando se usa un bit, solo son posibles cuatro operaciones: idénticamente transformar, negar, calcular la constante "0" y calcular la constante "1"). ¿Qué función se realiza en una caja? Sin embargo, no sabe cuál puede clasificar tantas variantes de los valores de entrada como desee y evaluar los resultados de salida.
¿Cuántas señales de entrada y salida deberán pasar por el cuadro negro para averiguar qué función se utiliza? Piénsalo por un segundo.
En el caso de una computadora clásica, deberá realizar 2 consultas para determinar la función utilizada. Por ejemplo, si al ingresar “1” obtenemos “0” en la salida, queda claro que se utiliza la función para calcular la constante “0” o la función de negación, después de lo cual deberá cambiar el valor de la señal de entrada a “0” y ver qué sucede. A la salida.
En el caso de una computadora cuántica, también necesitará dos consultas, ya que aún necesita dos valores de salida diferentes para determinar la función exacta que se aplica al valor de entrada. Sin embargo, si reformulamos un poco la pregunta, resulta que las computadoras cuánticas aún tienen una gran ventaja: si quisiera saber si la función utilizada es constante o variable, la superioridad estaría del lado de las computadoras cuánticas.
La función utilizada en el cuadro es una variable, si diferentes valores de la señal de entrada dan resultados diferentes en la salida (por ejemplo, conversión e inversión idénticas de un bit), y si el valor de salida no cambia independientemente del valor de entrada, entonces la función es constante (por ejemplo, calcular la constante "1" o el cálculo de la constante "0").
Usando el algoritmo cuántico, puede determinar si una función en un cuadro negro es constante o variable en base a una sola solicitud. Pero antes de examinar en detalle cómo hacer esto, necesitamos encontrar una manera que nos permita estructurar cada una de estas funciones en una computadora cuántica. Como cualquier operador cuántico debe ser invertible, inmediatamente encontramos un problema: las funciones para calcular las constantes "1" y "0" no lo son.
En la computación cuántica, a menudo se usa la siguiente solución: se agrega un qubit de salida adicional, que devuelve cualquier valor de la señal de entrada recibida por la función.
Por lo tanto, podemos determinar los valores de entrada únicamente en función del valor obtenido en la salida, y la función se vuelve invertible. La estructura de los circuitos cuánticos crea la necesidad de un bit de entrada adicional. En aras de desarrollar los operadores correspondientes, suponemos que el qubit de entrada adicional se establece en | 0⟩.
Aplicando la misma representación de la cadena cuántica que usamos anteriormente, veremos cómo cada uno de los cuatro elementos (transformación de identidad, negación, cálculo de la constante "0" y cálculo de la constante "1") se puede implementar utilizando operadores cuánticos.
Por ejemplo, de esta manera puede implementar la función de calcular la constante "0":
Cálculo de la constante "0":Aquí no necesitamos operadores en absoluto. El primer qubit de entrada (que tomamos igual a | 0⟩) regresa con el mismo valor, y el segundo valor de entrada regresa a sí mismo, como de costumbre.
Con la función para calcular la constante "1", la situación es ligeramente diferente:
Cálculo de la constante "1":Como aceptamos que el primer qubit de entrada siempre se establece en | 0⟩, como resultado de aplicar el operador de inversión de bits, siempre da uno en la salida. Y como de costumbre, el segundo qubit da su propio valor en la salida.
Cuando se muestra el operador de transformación de identidad, la tarea comienza a ser más complicada. Aquí se explica cómo hacerlo:
Transformación de identidad:El símbolo utilizado aquí denota el elemento CNOT: la línea superior indica el bit de control y la línea inferior indica el bit de control. Permítame recordarle que cuando utiliza el operador CNOT, el valor del bit de control cambia si el bit de control es | 1⟩, pero permanece sin cambios si el bit de control es | 0⟩. Como asumimos que el valor de la línea superior siempre es igual a | 0⟩, su valor siempre se asigna a la línea inferior.
Del mismo modo, actuamos con el operador de negación:
Negación:Simplemente invertimos el bit al final de la línea de salida.
Ahora que hemos descubierto la presentación preliminar, veamos las ventajas específicas de una computadora cuántica sobre una computadora tradicional cuando se trata de determinar la constancia o variabilidad de una función oculta en un cuadro negro usando solo una consulta.
Para resolver este problema utilizando la computación cuántica en una sola solicitud, es necesario traducir los qubits de entrada en una superposición antes de transferirlos a la función, como se muestra a continuación:
El elemento Hadamard se vuelve a aplicar al resultado del uso de la función para derivar qubits de la superposición y hacer que el algoritmo sea determinista. Iniciamos el sistema en el estado | 00⟩ y por las razones de las que hablaré ahora, obtenemos el resultado | 11⟩ si la función utilizada es constante. Si la función dentro del cuadro negro es variable, después de medir el sistema devuelve el resultado | 01⟩.
Para tratar el resto del artículo, pasemos a la ilustración que mostré anteriormente:
Usando el operador de inversión de bits y luego aplicando el elemento Hadamard a ambos valores de entrada iguales a | 0⟩, aseguraremos su traducción a la misma superposición | 0 | y | 1⟩, a saber:
Usando el ejemplo de transferir este valor de una función a un cuadro negro, es fácil demostrar que ambas funciones de un valor constante dan | 11⟩ a la salida.
Cálculo de la constante "0":, , «1» |11⟩, :
«1»:: |1⟩, -1² = 1.
, |01⟩ ( ), .
:CNOT , , CNOT :
|01⟩, :
:, , , .
?
. . , , , , , .
— , , , - (, !). — ,
, |0⟩ |1⟩ .
,
« » (An Introduction to Quantum Algorithms) : , .