"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 fascinado a escritores y periodistas de tecnología. Su potencial computacional y su complejidad le dieron un cierto aura mística. Con demasiada frecuencia, los artículos de fondo y las infografías describen en detalle las diversas perspectivas de esta industria, sin apenas tocar su aplicación práctica: esto puede engañar al lector menos atento.
Los artículos de divulgación científica omiten descripciones de sistemas cuánticos y hacen afirmaciones como:
Un bit normal puede ser un 1 o un 0, pero un qubit puede ser un 1 y un 0 al mismo tiempo.
Si tienes mucha suerte (de lo cual no estoy seguro), te dirán que:
El qubit está en superposición entre "1" y "0".
Ninguna de estas explicaciones parece plausible, ya que estamos intentando formular un fenómeno de la mecánica cuántica utilizando un lenguaje desarrollado en un mundo muy tradicional. Para explicar claramente los principios de la computación cuántica, es necesario utilizar otro lenguaje: el matemático.
En este tutorial, cubriré las herramientas matemáticas necesarias para modelar y comprender los sistemas de computación cuántica, así como también cómo ilustrar y aplicar la lógica de la computación cuántica. Además, daré un ejemplo de algoritmo cuántico y les diré cuál es su ventaja sobre una computadora tradicional.
Haré todo lo posible para explicar todo esto en un lenguaje claro, pero aún espero que los lectores de este artículo tengan una comprensión básica de álgebra lineal y lógica digital (el álgebra lineal está cubierta
Primero, repasemos los principios de la lógica digital. Se basa en el uso de circuitos eléctricos para realizar cálculos. Para hacer nuestra descripción más abstracta, simplifiquemos el estado del cable eléctrico a “1” o “0”, que corresponderá a los estados “encendido” o “apagado”. Al organizar los transistores en una secuencia determinada, crearemos los llamados elementos lógicos que toman uno o más valores de señal de entrada y los convierten en una señal de salida según ciertas reglas de la lógica booleana.
Puertas lógicas comunes y sus tablas de estado.
A partir de cadenas de elementos tan básicos se pueden crear elementos más complejos y, en última instancia, con un alto grado de abstracción, podemos esperar obtener un análogo de un procesador central.
Como mencioné anteriormente, necesitamos una forma de representar 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 están los números de la izquierda
Identidad | Transformación de identidad |
la Negación | Negación |
Constante-0 | Cálculo de la constante "0" |
Constante-1 | Cálculo de la constante "1" |
Según nuestra nueva representación propuesta de un bit, es bastante fácil realizar operaciones en el bit correspondiente usando una transformación vectorial:
Antes de continuar, veamos el concepto.
Con
Ahora que tenemos casi todos los conceptos matemáticos necesarios, pasemos a nuestra primera puerta de lógica cuántica. este es el operador
Este operador se puede representar como el siguiente vector de transformación:
Para demostrar todo lo que hemos cubierto hasta ahora, le mostraré cómo usar el elemento CNOT en múltiples bits:
Para resumir lo ya dicho: en el primer ejemplo descomponemos |10⟩ en partes de su producto tensorial y utilizamos la matriz CNOT para obtener un nuevo estado correspondiente del producto; luego lo factorizamos a |11⟩ según la tabla de valores CNOT proporcionada anteriormente.
Entonces, hemos recordado todas las reglas matemáticas que nos ayudarán a comprender la computación tradicional y los bits ordinarios, y finalmente podemos pasar a la computación cuántica y los qubits modernos.
Si ha leído hasta aquí, tengo buenas noticias para usted: los qubits se pueden expresar matemáticamente fácilmente. En general, si un bit clásico (cbit) se puede configurar en |1⟩ o |0⟩, el qubit está simplemente en superposición y puede ser |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⟩ según la siguiente fórmula:
donde un₀ и un₁ representan, respectivamente, las amplitudes |0⟩ y |1⟩. Estas pueden considerarse como "probabilidades cuánticas", que representan la probabilidad de que un qubit colapse en uno de los estados después de ser medido, ya que en mecánica cuántica un objeto en superposición colapsa en uno de los estados después de ser fijado. Ampliemos esta expresión y obtengamos lo siguiente:
Para simplificar mi explicación, esta es la representación que usaré en este artículo.
Para este qubit, la posibilidad de colapsar al valor un₀ después de la medición es igual a |a₀|², y la posibilidad de colapso al valor a₁ es igual a |a₁|². Por ejemplo, para el siguiente qubit:
la probabilidad de colapsar en “1” es igual a |1/ √2|², o ½, es decir, 50/50.
Dado que en el sistema clásico todas las probabilidades deben sumar uno (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. Con base en esta información podemos formular la siguiente ecuación:
Si estás familiarizado con la trigonometría, notarás que esta ecuación corresponde al teorema de Pitágoras (a²+b²=c²), es decir, podemos representar gráficamente los posibles estados del qubit como puntos del círculo unitario, a saber:
Los operadores y elementos lógicos se aplican a los qubits de la misma manera que en el caso de los bits clásicos, basándose en una transformación matricial. Todos los operadores matriciales invertibles que hemos recordado hasta ahora, en particular CNOT, se pueden utilizar para trabajar con qubits. Estos operadores matriciales le permiten utilizar cada una de las amplitudes del qubit sin medirlo ni colapsarlo. Déjame darte un ejemplo del uso del operador de negación en un qubit:
Antes de continuar, déjame recordarte que los valores de amplitud a₀ y a₁ son en realidad
Sin embargo, para simplificar la explicación, nos limitaremos aquí a los números reales.
Parece hora de discutir algunos elementos lógicos que tienen sentido únicamente en el contexto de la computación cuántica.
Uno de los operadores más importantes es el "elemento Hadamard": toma un bit en un estado "0" o "1" y lo coloca en la superposición apropiada con un 50% de posibilidades de colapsar en un "1" o "0". después de la medición.
Observe que hay un número negativo en la parte inferior derecha del operador Hadamard. Esto se debe a que el resultado de aplicar el operador depende del valor de la señal de entrada: - |1⟩ o |0⟩, por lo que el cálculo es reversible.
Otro punto importante sobre el elemento Hadamard es su invertibilidad, lo que significa que puede tomar un qubit en la superposición apropiada y transformarlo en |0⟩ o |1⟩.
Esto es muy importante porque nos da la capacidad de transformarnos desde un estado cuántico sin determinar el estado del qubit y, en consecuencia, sin colapsarlo. Por lo tanto, podemos estructurar la computación cuántica basándose en un principio determinista en lugar de probabilístico.
Los operadores cuánticos que contienen solo números reales son sus opuestos, por lo que podemos representar 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:
Así, el qubit, cuyo estado se presenta en el diagrama anterior, tras aplicar la operación Hadamard, se transforma al estado indicado por la flecha correspondiente. Del mismo modo, podemos construir otra máquina de estados que ilustrará la transformación de un qubit utilizando el operador de negación como se muestra arriba (también conocido como operador de negación de Pauli o inversión de bits), como se muestra a continuación:
Para realizar operaciones más complejas en nuestro qubit, podemos encadenar múltiples operadores o aplicar elementos varias veces. Ejemplo de transformación en serie basada en
Es decir, si comenzamos con el bit |0⟩, aplicamos una inversión de bits y luego una operación de Hadamard, luego otra inversión de bits y nuevamente una operación de Hadamard, seguida de una inversión de bits final, terminamos con el vector dado por on el lado derecho de la cadena. Al colocar diferentes máquinas de estados una encima de otra, podemos comenzar en |0⟩ y trazar las flechas de colores correspondientes a cada una de las transformaciones para comprender cómo funciona todo.
Dado que hemos llegado hasta aquí, es hora de considerar uno de los tipos de algoritmos cuánticos, a saber:
Imaginemos que tiene una caja negra que contiene una función/operador en un bit (recuerde: con un bit, solo se pueden realizar cuatro operaciones: conversión de identidad, negación, evaluación de la constante "0" y evaluación de la constante "1). "). ¿Cuál es exactamente la función que se realiza en la caja? No sabes cuál, pero puedes revisar tantas variantes de valores de entrada como quieras y evaluar los resultados de salida.
¿Cuántas entradas y salidas tendría que pasar por la caja negra para determinar qué función se está utilizando? Piensa en esto por un segundo.
En el caso de una computadora clásica, será necesario realizar 2 consultas para determinar la función a utilizar. Por ejemplo, si la entrada "1" produce una salida "0", queda claro que se utiliza la función de cálculo de la constante "0" o la función de negación, después de lo cual será necesario cambiar el valor de la señal de entrada. a "0" y ver qué pasa en la salida.
En el caso de una computadora cuántica, también serán necesarias dos consultas, ya que aún se necesitan dos valores de salida diferentes para definir con precisión la función que se aplicará al valor de entrada. Sin embargo, si reformulas un poco la pregunta, resulta que los ordenadores cuánticos todavía tienen una gran ventaja: si quisieras saber si la función utilizada es constante o variable, los ordenadores cuánticos tendrían la ventaja.
La función utilizada en el cuadro es variable si diferentes valores de la señal de entrada producen diferentes resultados en la salida (por ejemplo, conversión de identidad e inversión de bits), y si el valor de salida no cambia independientemente del valor de entrada, entonces la la función es constante (por ejemplo, calcular una constante "1" o calcular la constante "0").
Usando un algoritmo cuántico, puedes determinar si una función en una caja negra es constante o variable basándose en una sola consulta. Pero antes de ver cómo hacer esto en detalle, necesitamos encontrar una manera de estructurar cada una de estas funciones en una computadora cuántica. Dado que todos los operadores cuánticos deben ser invertibles, inmediatamente nos enfrentamos a un problema: las funciones para calcular las constantes "1" y "0" no lo son.
Una solución común utilizada en la computación cuántica es agregar un qubit de salida adicional que devuelva cualquier valor de entrada que reciba la función.
Antes de | Despues |
De esta manera, podemos determinar los valores de entrada basándose únicamente en el valor de salida y la función se vuelve invertible. La estructura de los circuitos cuánticos crea la necesidad de un bit de entrada adicional. Para desarrollar los operadores correspondientes, asumiremos que el qubit de entrada adicional está establecido en |0⟩.
Usando la misma representación del circuito cuántico que usamos anteriormente, veamos cómo cada uno de los cuatro elementos (transformación de identidad, negación, evaluación de la constante "0" y evaluación de la constante "1") se puede implementar usando operadores cuánticos.
Por ejemplo, así es como puedes implementar la función para calcular la constante “0”:
Cálculo de la constante "0":
Aquí no necesitamos operadores en absoluto. El primer qubit de entrada (que asumimos que era |0⟩) regresa con el mismo valor, y el segundo valor de entrada regresa solo, como de costumbre.
Con la función para calcular la constante “1” la situación es un poco diferente:
Cálculo de la constante "1":
Como hemos asumido que el primer qubit de entrada siempre está configurado en |0⟩, el resultado de aplicar el operador de inversión de bits es que siempre produce uno en la salida. Y como es habitual, el segundo qubit da su propio valor en la salida.
Al mapear el operador de transformación de identidad, la tarea comienza a complicarse. He aquí cómo hacerlo:
Transformación idéntica:
El símbolo utilizado aquí indica el elemento CNOT: la línea superior indica el bit de control y la línea inferior indica el bit de control. Permítanme recordarles que cuando se utiliza el operador CNOT, el valor del bit de control cambia si el bit de control es igual a |1⟩, pero permanece sin cambios si el bit de control es igual a |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.
Procedemos de forma similar con el operador de negación:
Negación:
Simplemente invertimos el bit al final de la línea de salida.
Ahora que hemos aclarado esa comprensió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 una caja negra usando una sola consulta.
Para resolver este problema utilizando la computación cuántica en una sola solicitud, es necesario superponer los qubits de entrada antes de pasarlos a la función, como se muestra a continuación:
El elemento Hadamard se vuelve a aplicar al resultado de la función para separar los qubits de la superposición y hacer que el algoritmo sea determinista. Iniciamos el sistema en el estado |00⟩ y, por razones que explicaré en breve, obtenemos el resultado |11⟩ si la función aplicada es constante. Si la función dentro del cuadro negro es variable, luego de la medición el sistema devuelve el resultado |01⟩.
Para entender el resto del artículo, veamos la ilustración que mostré anteriormente:
Al usar el operador de inversión de bits y luego aplicar el elemento Hadamard a ambos valores de entrada iguales a |0⟩, nos aseguramos de que se traduzcan a la misma superposición de |0⟩ y |1⟩, de la siguiente manera:
Usando el ejemplo de pasar este valor a una función de caja negra, es fácil demostrar que ambas funciones de valor constante generan |11⟩.
Cálculo de la constante "0":
De manera similar, vemos que la función para calcular la constante “1” también produce |11⟩ como salida, es decir:
Cálculo de la constante "1":
Tenga en cuenta que la salida será |1⟩, ya que -1² = 1.
Por el mismo principio, podemos demostrar que al usar ambas funciones variables, siempre obtendremos |01⟩ en la salida (siempre que usemos el mismo método), aunque todo es un poco más complicado.
Transformación idéntica:
Dado que CNOT es un operador de dos qubits, no se puede representar como una máquina de estados simple y, por lo tanto, es necesario definir dos señales de salida basadas en el producto tensorial de ambos qubits de entrada y la multiplicación por la matriz CNOT como se describió anteriormente:
Con este método también podemos confirmar que se recibe el valor de salida |01⟩ si la función de negación está oculta en el cuadro negro:
Negación:
Así, acabamos de demostrar una situación en la que una computadora cuántica es claramente más eficiente que una computadora convencional.
¿Y ahora qué?
Sugiero que terminemos aquí. Ya hicimos un gran trabajo. Si ha entendido todo lo que he cubierto, creo que ahora comprende bien los conceptos básicos de la computación cuántica y la lógica cuántica, y por qué los algoritmos cuánticos pueden ser más eficientes que la computación tradicional en determinadas situaciones.
Mi descripción difícilmente puede considerarse una guía completa sobre algoritmos y computación cuántica; más bien, es una breve introducción a las matemáticas y la notación, diseñada para disipar las ideas de los lectores sobre el tema impuestas por fuentes científicas populares (en serio, muchos realmente no pueden entender ¡la situación!). No tuve tiempo de tocar muchos temas importantes, como
Si quieres sistematizar y estructurar tus conocimientos sobre ordenadores cuánticos, fuertemente te recomiendo leer
Fuente: habr.com