Código tórico
A continuación discutimos un código CSS específico, el código tórico, descubierto en 1997 por Alexei Kitaev. En realidad, el código tórico no es un solo código, sino una familia de códigos — uno para cada entero positivo a partir de 2. Estos códigos poseen algunas propiedades importantes:
-
Los generadores de estabilizador tienen bajo peso, en particular todos tienen peso 4. En la teoría de codificación, el código tórico es un ejemplo de un código cuántico de verificación de paridad de baja densidad, o código cuántico LDPC (donde baja en este caso significa 4). Esto es ventajoso porque la medición de cada generador de estabilizador no requiere demasiados qubits.
-
El código tórico tiene localidad geométrica. Esto significa que los generadores de estabilizador no solo tienen bajo peso, sino que también es posible disponer los qubits espacialmente de manera que cada una de las mediciones de generadores de estabilizador solo involucre qubits que estén cerca unos de otros. Esto hace que estas mediciones sean, en principio, más fáciles de implementar que si involucraran qubits espacialmente distantes.
-
Los miembros de la familia de códigos tóricos tienen una distancia cada vez mayor y pueden tolerar una tasa de error relativamente alta.
Descripción del código tórico
Sea un entero positivo, y consideremos una cuadrícula de con los llamados bordes periódicos. Este diagrama muestra, por ejemplo, una cuadrícula de para
Nótese que las líneas del lado derecho y del borde inferior son líneas discontinuas. Esto indica que la línea discontinua de la derecha es la misma línea que la del extremo izquierdo, y del mismo modo, la línea discontinua del borde inferior es la misma que la del extremo superior.
Para realizar físicamente una configuración así, se requieren tres dimensiones. En particular, se podría formar un cilindro con la cuadrícula uniendo primero los lados izquierdo y derecho, y luego doblando el cilindro de modo que los círculos de los extremos — que antes eran los bordes superior e inferior de la cuadrícula — se encuentren. O se puede unir primero la parte superior con la inferior y luego los lados; ambas opciones funcionan y no importa cuál se haga primero para esta discusión.
Lo que obtenemos es un toro — o, en otras palabras, un dónut (aunque la imagen de una cámara de aire puede ser más adecuada, ya que esto no es un sólido: la cuadrícula es solo la superficie de un toro). De ahí viene el nombre "código tórico".
La forma en que uno puede moverse entre puntos adyacentes de la cuadrícula en un toro así probablemente resulte familiar para quienes hayan jugado videojuegos clásicos: si se sale por el borde superior de la pantalla, se reaparece abajo, y lo mismo para los bordes izquierdo y derecho. Así es como consideraremos esta cuadrícula con bordes periódicos, en lugar de hablar concretamente de un toro en el espacio tridimensional.
A continuación, se colocan qubits en las aristas de esta cuadrícula, como se muestra en la siguiente figura, donde los qubits se indican mediante círculos azules rellenos.
Nótese que los qubits colocados en las líneas discontinuas no están rellenos, ya que ya están representados por los qubits en las líneas más a la izquierda y más arriba de la cuadrícula. En total hay qubits: qubits en líneas horizontales y qubits en líneas verticales.
Para describir el propio código tórico, quedan por especificar los generadores de estabilizador:
-
Para cada casilla formada por las líneas de la cuadrícula, hay un generador de estabilizador , que se obtiene tensorizando matrices en los cuatro qubits que tocan la casilla junto con matrices identidad en todos los demás qubits.
-
Para cada vértice formado por las líneas de la cuadrícula, hay un generador de estabilizador , que se obtiene tensorizando matrices en los cuatro qubits adyacentes al vértice junto con matrices identidad en todos los demás qubits.
En ambos casos, obtenemos una operación de Pauli con peso 4. Individualmente, estos generadores de estabilizador se pueden representar de la siguiente manera.
Aquí hay una figura con algunos ejemplos de generadores de estabilizador en el contexto de la propia cuadrícula. Nótese que se incluyen los generadores de estabilizador que se extienden alrededor de los bordes periódicos. Estos generadores que rodean los bordes periódicos no son especiales ni diferentes de ninguna manera de los demás.
Los generadores de estabilizador deben conmutar para que esto sea un código estabilizador válido. Como es habitual, los generadores de estabilizador conmutan todos entre sí porque conmuta consigo mismo y la identidad conmuta con todo, y lo mismo para los generadores de estabilizador . Los generadores de estabilizador y conmutan obviamente cuando actúan de forma no trivial sobre conjuntos disjuntos de qubits, como en los ejemplos de la figura anterior. La posibilidad restante es que un generador de estabilizador y un generador de estabilizador se solapen en los qubits sobre los que actúan de forma no trivial, y siempre que esto ocurre, los generadores se solapan siempre en dos qubits, como se muestra en la siguiente figura.
Por consiguiente, dos generadores de estabilizador de este tipo conmutan, al igual que y conmutan. Los generadores de estabilizador conmutan, por tanto, todos entre sí.
La segunda condición requerida para los generadores de estabilizador de un código estabilizador es que formen un conjunto generador mínimo. Esta condición en realidad no se cumple para esta colección: al multiplicar todos los generadores de estabilizador entre sí se obtiene la operación identidad, y lo mismo para los generadores de estabilizador . Por lo tanto, cada generador de estabilizador puede expresarse como producto de todos los restantes, y correspondientemente, cada generador de estabilizador puede expresarse como producto de los restantes generadores de estabilizador . Sin embargo, si eliminamos uno de los generadores de estabilizador y uno de los generadores de estabilizador , obtenemos un conjunto generador mínimo.
Para ser claros: en realidad nos interesan por igual todos los generadores de estabilizador, y estrictamente hablando no hay necesidad operativa de eliminar un generador de estabilizador de cada tipo. Pero para el análisis del código — en particular para contar los generadores — podemos imaginar que se ha eliminado un generador de estabilizador de cada tipo para obtener un conjunto generador mínimo, teniendo en cuenta que siempre podríamos deducir los resultados de estos generadores eliminados (que pueden considerarse como observables) a partir de los resultados de todos los demás observables de generadores de estabilizador del mismo tipo.
Esto deja generadores de estabilizador de cada tipo, es decir, en total, en un conjunto generador mínimo (hipotético). Dado que hay qubits en total, esto significa que el código tórico codifica qubits.
La última condición requerida para los generadores de estabilizador es que al menos un vector de estado cuántico sea fijado por todos los generadores de estabilizador. Veremos que este es el caso cuando continuemos con el análisis del código, pero también se puede argumentar que no hay forma de generar veces la identidad en todos los qubits a partir de los generadores de estabilizador.
Detección de errores
El código tórico tiene una descripción simple y elegante, pero sus propiedades de corrección de errores cuánticos pueden no ser evidentes a primera vista. ¡Es un código asombroso! Para entender por qué y cómo funciona, comenzamos examinando diversos errores y los síndromes que generan.
El código tórico es un código CSS porque todos nuestros generadores de estabilizador son generadores de estabilizador o . Esto significa que los errores y los errores pueden detectarse (y posiblemente corregirse) por separado. De hecho, existe una simetría simple entre los generadores de estabilizador y que nos permite analizar los errores y esencialmente de la misma manera. Nos concentraremos, por tanto, en los errores , que pueden ser detectados por los generadores de estabilizador — pero toda la discusión siguiente puede trasladarse de errores a errores , que son detectados de forma análoga por los generadores de estabilizador .
El siguiente diagrama muestra el efecto de un error en un solo qubit. Aquí se asume que nuestros qubits estaban previamente en un estado contenido en el espacio de código del código tórico, de modo que todas las mediciones de generadores de estabilizador dan . Los generadores de estabilizador detectan errores , y hay uno de estos generadores de estabilizador para cada casilla en la figura, por lo que podemos indicar el resultado de medición del generador de estabilizador correspondiente mediante el color de esa casilla: los resultados se indican con casillas blancas y los resultados con casillas grises. Cuando ocurre un error de inversión de bit en uno de los qubits, provoca que las mediciones de los generadores de estabilizador para las dos casillas que tocan el qubit afectado ahora den .
Esto es intuitivo si consideramos los generadores de estabilizador y su comportamiento. En esencia, cada generador de estabilizador mide la paridad de los cuatro qubits que tocan la casilla correspondiente (respecto a la base estándar). Un resultado indica, por tanto, no que no hayan ocurrido errores en esos cuatro qubits, sino que ha ocurrido un número par de errores , mientras que un resultado indica que ha ocurrido un número impar de errores . Un solo error invierte, por tanto, la paridad de los cuatro bits en ambas casillas que toca, haciendo que las mediciones de los generadores de estabilizador den .
Consideremos ahora múltiples errores para ver qué sucede. En particular, consideremos una cadena de errores adyacentes, donde dos errores son adyacentes si afectan a qubits que tocan la misma casilla.
Los dos generadores de estabilizador en los extremos de la cadena dan ambos el resultado en este caso, ya que en esas dos casillas correspondientes ha ocurrido un número impar de errores . Todos los demás generadores de estabilizador , en cambio, dan el resultado , incluyendo los que tocan la cadena pero no están en los extremos, porque en los qubits que tocan las casillas correspondientes ha ocurrido un número par de errores .
Siempre que tengamos una cadena de errores que tiene extremos, el código tórico detecta que han ocurrido errores — y los resultados de medición para los generadores de estabilizador muestran los extremos de la cadena. Nótese que la cadena de errores real no se revela, ¡solo los extremos! Esto está bien — en la siguiente subsección veremos que no necesitamos saber exactamente qué qubits han sido afectados por errores para corregirlos. (El código tórico es un ejemplo de un código altamente degenerado, en el sentido de que generalmente no identifica de forma unívoca los errores que se corrigen.)
Sin embargo, es posible que una cadena de errores adyacentes no tenga extremos — es decir, que una cadena de errores forme un bucle cerrado, como en la siguiente figura.
En tal caso, en cada casilla ha ocurrido un número par de errores , por lo que cada medición de generador de estabilizador da un resultado . Los bucles cerrados de errores adyacentes no son, por tanto, detectados por el código.
Esto podría parecer decepcionante, ya que solo se necesitan cuatro errores para formar un bucle cerrado (y esperamos algo significativamente mejor que un código de distancia 4). Sin embargo, un bucle cerrado de errores como el de la figura anterior en realidad no es un error — porque está en el estabilizador. Recuérdese: además de los generadores de estabilizador , también tenemos un generador de estabilizador para cada vértice de la cuadrícula. Y cuando multiplicamos generadores de estabilizador adyacentes entre sí, obtenemos bucles cerrados de operaciones . El bucle cerrado de la figura anterior, por ejemplo, puede obtenerse multiplicando los generadores de estabilizador indicados en la siguiente figura.
Sin embargo, este no es el único tipo de bucle cerrado de errores — y no es cierto que todo bucle cerrado de errores esté contenido en el estabilizador. En particular, los diferentes tipos de bucles pueden caracterizarse de la siguiente manera.
-
Bucles cerrados de errores con un número par de errores en cada línea horizontal y vertical de qubits. (El ejemplo anterior entra en esta categoría.) Los bucles de esta forma siempre están en el estabilizador, ya que pueden reducirse a nada multiplicando con generadores de estabilizador .
-
Bucles cerrados de errores con un número impar de errores en al menos una línea horizontal o al menos una línea vertical de qubits. Los bucles de esta forma nunca están en el estabilizador y por tanto representan errores no triviales que el código no detecta.
Un ejemplo de un bucle cerrado de errores de la segunda categoría se muestra en el siguiente diagrama.
Una cadena de errores de este tipo no está en el estabilizador porque cada generador de estabilizador coloca un número par de operaciones en cada línea horizontal y vertical de qubits. Este es, por tanto, un ejemplo real de un error no trivial que el código no detecta.
La clave está en que la única forma de formar un bucle del segundo tipo es rodeando el toro — ya sea a través del agujero en el centro del toro, a través de él, o ambas cosas. Intuitivamente, una cadena de errores de este tipo no puede reducirse a nada multiplicando con generadores de estabilizador porque la topología de un toro lo impide. El código tórico se categoriza a veces como un código corrector de errores cuánticos topológico por esta razón. La longitud más corta posible de un bucle así es , y esa es por tanto la distancia del código tórico: cualquier bucle cerrado de errores con longitud menor que debe pertenecer a la primera categoría y está por tanto en el estabilizador; y cualquier cadena de errores con extremos es detectada por el código.
Dado que el código tórico utiliza qubits para codificar qubits y tiene distancia , es un código estabilizador .
Corrección de errores
Hemos discutido la detección de errores para el código tórico y ahora nos dirigimos brevemente a la corrección de errores. El código tórico es un código CSS, por lo que los errores y los errores pueden detectarse y corregirse de forma independiente. Centrándonos en los generadores de estabilizador , que detectan errores , consideremos cómo puede corregirse una cadena de errores . (Los errores se corrigen de forma simétrica.)
Cuando aparece un síndrome diferente de al medir los generadores de estabilizador , los resultados muestran los extremos de una o más cadenas de errores . Podemos intentar corregir estos errores emparejando los resultados de dos en dos y formando una cadena de correcciones entre ellos. Al hacerlo, es sensato elegir caminos más cortos para las correcciones.
Consideremos, por ejemplo, el siguiente diagrama, que muestra un síndrome con dos resultados (indicados por casillas grises), causados por una cadena de errores representada por la línea y los círculos magenta. Como ya se señaló, la cadena en sí no es revelada por el síndrome; solo los extremos son visibles.
Para corregir esta cadena de errores, se selecciona un camino más corto entre los resultados de medición y se aplican puertas como correcciones a los qubits a lo largo de este camino (marcados en amarillo en la figura). Aunque las correcciones pueden no coincidir con la cadena de errores real, los errores y las correcciones juntos forman un bucle cerrado de operaciones que está contenido en el estabilizador del código. La corrección es, por tanto, exitosa en esta situación, ya que el efecto combinado de errores y correcciones no cambia nada en el estado codificado.
Esta estrategia no siempre será exitosa. Otra explicación para el mismo síndrome que en la figura anterior se muestra en la siguiente figura.
Esta vez, la misma cadena de correcciones que antes falla, porque el efecto combinado de errores y correcciones resulta en un bucle cerrado de operaciones que rodea el toro y por tanto tiene un efecto no trivial sobre el espacio de código. Así que no hay garantía de que la estrategia descrita — elegir un camino más corto de correcciones entre dos resultados de síndrome — corrija adecuadamente el error que causó ese síndrome.
Sin embargo, es más probable, dependiendo del modelo de ruido, que se mida un síndrome con más de dos entradas , como sugiere la siguiente figura.
En tal caso, se conocen diversas estrategias de corrección. Una estrategia natural es emparejar los resultados de medición de dos en dos y realizar correcciones a lo largo de los caminos más cortos entre los pares, como se muestra en amarillo en la figura. En particular, se puede calcular un emparejamiento perfecto de peso mínimo entre los resultados de medición , y luego se conectan los pares mediante caminos más cortos de correcciones . El cálculo de un emparejamiento perfecto de peso mínimo puede realizarse de forma eficiente con un algoritmo clásico, el algoritmo Blossom, descubierto por Edmonds en la década de 1960.
Este enfoque no es óptimo en general para los modelos de ruido más estudiados, pero basándose en simulaciones numéricas funciona muy bien en la práctica para tasas de error de hasta aproximadamente el 10%, bajo la suposición de errores de Pauli independientes donde y son igualmente probables. Aumentar no influye significativamente en el punto de equilibrio a partir del cual el código comienza a ayudar, pero conduce a una disminución más rápida de la probabilidad de un error lógico cuando la tasa de error cae por debajo del punto de equilibrio.