Saltar al contenido principal

Control de la propagación de errores

La computación cuántica tolerante a fallos es como una carrera entre los errores y la corrección de errores. Si el número de errores es lo suficientemente pequeño, la corrección de errores los corregirá con éxito; si hay demasiados errores, la corrección de errores fracasará.

Por esta razón, debe prestarse especial atención a la forma en que se realizan las computaciones cuánticas en las implementaciones de circuitos tolerantes a fallos, para controlar la propagación de errores. Es decir: un error en un qubit puede potencialmente propagarse a múltiples qubits a través de la acción de las puertas en un circuito cuántico, lo que puede provocar que el número de errores aumente drásticamente. Esta es una preocupación central, porque si no controlamos la propagación de errores, nuestras medidas de corrección de errores se verán rápidamente abrumadas por los errores. Si, por el contrario, podemos mantener bajo control la propagación de errores, la corrección de errores tiene una oportunidad real de mantenerse al ritmo de los errores, de modo que puedan corregirse lo suficientemente rápido como para que la computación cuántica funcione según lo previsto.

El punto de partida para una discusión técnica de este problema es la observación de que las puertas de dos qubits (o, más generalmente, las puertas de múltiples qubits) pueden propagar errores, incluso si funcionan perfectamente. Consideremos, por ejemplo, una puerta NOT controlada y supongamos que un error XX ocurre justo antes de la puerta CNOT en el qubit de control. Como ya observamos en la lección "Corrección de errores cuánticos", esto equivale a un error XX que ocurre en ambos qubits después de la CNOT. De manera similar ocurre con un error ZZ en el qubit objetivo en lugar del qubit de control antes de la puerta CNOT.

Representaciones de circuito de la propagación de errores a través de puertas CNOT

Esta es una propagación de errores porque la ubicación desfavorable de un error XX o ZZ antes de la puerta CNOT lo convierte efectivamente en dos errores después de la puerta CNOT. Esto ocurre incluso cuando la puerta CNOT es perfecta, y no debemos olvidar que una puerta CNOT dada puede ser ruidosa por sí misma, lo que puede generar errores correlacionados en dos qubits.

Además, puertas de dos qubits subsiguientes podrían propagar estos errores aún más, como sugiere la siguiente figura.

Representaciones de circuito de la propagación de errores a través de múltiples puertas CNOT

En cierto sentido, nunca podemos escapar completamente de esto; mientras usemos puertas de múltiples qubits, siempre existe un potencial para la propagación de errores. Pero como discutiremos en las siguientes subsecciones, se pueden tomar medidas para limitar el daño causado y hacer manejables los errores propagados.

Implementaciones transversales de puertas

La forma más sencilla conocida de mitigar la propagación de errores en circuitos cuánticos tolerantes a fallos es la implementación transversal de puertas, lo que significa que se construyen gadgets con una forma simple particular. Concretamente, los gadgets deben ser un producto tensorial de operaciones (o, en otras palabras, un circuito cuántico de profundidad uno), donde cada operación solo puede actuar sobre una única posición de qubit dentro de cada bloque de código que toca. Esto se explica mejor con algunos ejemplos.

Ejemplos de implementaciones transversales de puertas

Consideremos la siguiente figura, que sugiere una implementación transversal de una puerta CNOT. (Esta implementación particular, donde las CNOTs se realizan qubit por qubit, solo funciona para códigos CSS — pero de hecho funciona para todos los códigos CSS.)

Implementación transversal de una puerta CNOT

En esta figura hay dos bloques de código, cada uno representado como compuesto por cinco qubits (aunque podrían ser más, como ya se indicó). El circuito de la derecha tiene profundidad uno, y cada una de las puertas CNOT actúa sobre una única posición de qubit dentro de cada bloque: tanto el control como el objetivo de la primera CNOT es el qubit superior (es decir, el qubit 0 en la convención de numeración de Qiskit), tanto el control como el objetivo de la segunda CNOT es el segundo qubit desde arriba (es decir, el qubit 1), y así sucesivamente. Por lo tanto, este es un gadget transversal.

Como segundo ejemplo — en realidad una clase de ejemplos — consideremos cualquier puerta de Pauli. Las puertas de Pauli siempre pueden implementarse de forma transversal, para cualquier código estabilizador, construyendo gadgets a partir de operaciones de Pauli. En particular, cualquier operación de Pauli sobre un qubit lógico codificado por un código estabilizador puede implementarse de forma transversal eligiendo una operación de Pauli adecuada sobre los qubits físicos de la codificación. Esto es consistente con un hecho mencionado de pasada en la lección "Formalismo de estabilizadores": salvo un factor de fase global, las operaciones de Pauli que conmutan con cada generador de estabilizador de un código estabilizador actúan como operaciones de Pauli sobre el qubit o los qubits codificados por ese código.

Como ejemplo concreto, consideremos el código de Shor de 99 qubits, para el cual los estados de la base estándar se codifican de la siguiente manera.

0122(000+111)(000+111)(000+111)1122(000111)(000111)(000111)\begin{aligned} \vert 0\rangle & \:\mapsto\: \frac{1}{2\sqrt{2}} (\vert 000\rangle + \vert 111\rangle) \otimes (\vert 000\rangle + \vert 111\rangle) \otimes (\vert 000\rangle + \vert 111\rangle) \\[3mm] \vert 1\rangle & \:\mapsto\: \frac{1}{2\sqrt{2}} (\vert 000\rangle - \vert 111\rangle) \otimes (\vert 000\rangle - \vert 111\rangle) \otimes (\vert 000\rangle - \vert 111\rangle) \end{aligned}

Una puerta XX sobre el qubit lógico codificado por este código puede implementarse de forma transversal mediante la operación de Pauli de 99 qubits

ZIIZIIZIIZ \otimes \mathbb{I} \otimes \mathbb{I} \otimes Z \otimes \mathbb{I} \otimes \mathbb{I} \otimes Z \otimes \mathbb{I} \otimes \mathbb{I}

mientras que una puerta ZZ sobre el qubit lógico puede implementarse de forma transversal mediante la operación de Pauli de 99 qubits

XXXIIIIIIX \otimes X \otimes X \otimes \mathbb{I} \otimes \mathbb{I} \otimes \mathbb{I} \otimes \mathbb{I} \otimes \mathbb{I} \otimes \mathbb{I}

Ambas operaciones de Pauli tienen peso 33, que es el peso mínimo requerido. (El código de Shor de 99 qubits tiene distancia 33, por lo que cualquier operación de Pauli no identidad con peso 22 o menos se detecta como error.)

Como tercer ejemplo, el código de Steane de 77 qubits (y de hecho cualquier código de color) permite una implementación transversal de todas las puertas de Clifford. Ya hemos visto cómo se implementan las puertas CNOT de forma transversal para cualquier código CSS, por lo que solo quedan por considerar las puertas HH y SS. Aplicar una puerta de Hadamard a los 77 qubits del código de Steane corresponde a HH sobre el qubit lógico que codifica, mientras que aplicar una puerta SS^{\dagger} (en lugar de una puerta SS) a los 77 qubits corresponde a una puerta SS lógica.

Propagación de errores para gadgets transversales

Ahora que sabemos qué son las implementaciones transversales de puertas, discutamos su relación con la propagación de errores.

Para una implementación transversal de una puerta de un solo qubit, simplemente tenemos un producto tensorial de puertas de un solo qubit en nuestro gadget, que actúa sobre un bloque de código de qubits físicos del código corrector de errores cuánticos elegido. Aunque cada una de estas puertas podría fallar e introducir un error, no habrá propagación de errores ya que no hay puertas de múltiples qubits involucradas. Inmediatamente después de aplicar el gadget se realiza la corrección de errores; y si el número de errores introducidos por el gadget (o durante la ejecución del gadget) es suficientemente pequeño, los errores se corregirán. Por lo tanto, si la tasa de errores introducidos por puertas defectuosas es suficientemente baja, la corrección de errores tiene buenas posibilidades de éxito.

Para una implementación transversal de una puerta de dos qubits, en cambio, existe el potencial de propagación de errores — simplemente no hay forma de evitarlo, como ya hemos observado. Sin embargo, el punto esencial es que un gadget transversal nunca puede causar propagación de errores dentro de un solo bloque de código.

Consideremos, por ejemplo, la implementación transversal de una puerta CNOT para un código CSS, como se describió anteriormente: un error XX podría ocurrir en el qubit superior del bloque de código superior justo antes de la ejecución del gadget, y la primera CNOT dentro del gadget propagará este error al qubit superior del bloque inferior. Sin embargo, los dos errores resultantes se encuentran ahora en bloques de código separados. Suponiendo que nuestro código puede corregir un error XX, los pasos de corrección de errores después del gadget corregirán los dos errores XX individualmente — ya que solo hay un error individual en cada bloque de código. En contraste, si la propagación de errores ocurriera dentro del mismo bloque de código, un error de bajo peso podría transformarse en un error de alto peso que el código no puede manejar.

No universalidad de las puertas transversales

Para dos códigos estabilizadores diferentes, puede ocurrir que una puerta particular pueda implementarse de forma transversal con un código pero no con el otro. Aunque, por ejemplo, no es posible implementar una puerta TT de forma transversal con el código de Steane de 77 qubits, existen otros códigos para los cuales esto sí es posible.

Desafortunadamente, para ningún código corrector de errores cuánticos no trivial es posible implementar un conjunto universal de puertas de forma transversal. Este hecho se conoce como el teorema de Eastin-Knill.

Teorema

Teorema de Eastin-Knill: Para cualquier código corrector de errores cuánticos con distancia al menos 2, el conjunto de puertas lógicas que pueden implementarse de forma transversal es discreto (salvo un factor de fase global) y, por lo tanto, no es universal.

La demostración de este teorema no se explica aquí. (No es una demostración complicada, pero requiere conocimientos básicos sobre grupos de Lie y álgebras de Lie, que no están entre los prerrequisitos de la serie.) Sin embargo, la idea básica puede transmitirse de forma intuitiva: las familias infinitas de operaciones transversales no pueden permanecer en el espacio de código de un código no trivial porque diferencias minúsculas en las operaciones transversales se aproximan bien mediante operaciones de Pauli de bajo peso que el código detecta como errores.

En resumen, los gadgets transversales ofrecen una implementación simple e inherentemente tolerante a fallos de puertas — pero para cualquier elección razonable de un código corrector de errores cuánticos, nunca habrá un conjunto universal de puertas que pueda implementarse de esta manera, lo que requiere el uso de gadgets alternativos.

Estados mágicos

Dado que para ningún código corrector de errores cuánticos no trivial es posible implementar un conjunto universal de puertas cuánticas de forma transversal, debemos considerar otros métodos para implementar puertas de forma tolerante a fallos. Un método bien conocido se basa en el concepto de estados mágicos, que son estados de qubit que permiten implementaciones tolerantes a fallos de ciertas puertas.

Implementación de puertas con estados mágicos

Comencemos con las puertas SS y TT, que tienen las siguientes representaciones matriciales.

S=(100i)=(100eiπ/2)yT=(1001+i2)=(100eiπ/4)S = \begin{pmatrix} 1 & 0\\ 0 & i \end{pmatrix} = \begin{pmatrix} 1 & 0\\ 0 & e^{i\pi/2} \end{pmatrix} \qquad\text{y}\qquad T = \begin{pmatrix} 1 & 0\\ 0 & \frac{1+i}{\sqrt{2}} \end{pmatrix} = \begin{pmatrix} 1 & 0\\ 0 & e^{i\pi/4} \end{pmatrix}

Por definición, SS es una operación de Clifford, mientras que TT no lo es; no es posible implementar una puerta TT con un circuito de puertas de Clifford (puertas HH, puertas SS y puertas CNOT).

Sin embargo, es posible implementar una puerta TT (salvo un factor de fase global) con un circuito de puertas de Clifford si además disponemos de una copia del estado

T+=120+eiπ/421T\vert {+} \rangle = \frac{1}{\sqrt{2}} \vert 0 \rangle + \frac{e^{i\pi/4}}{\sqrt{2}} \vert 1\rangle

y se permiten mediciones en la base estándar así como puertas controladas clásicamente. En particular, el siguiente circuito muestra una forma de hacerlo. El fenómeno mostrado aquí es un ejemplo algo simplificado de teleportación de puertas cuánticas.

Un diagrama de circuito que muestra la inyección de estados mágicos

Para verificar que este circuito funciona correctamente, primero calculamos la acción de la puerta CNOT sobre la entrada.

T+ψCNOT120Tψ+1+i21TψT \vert {+} \rangle \otimes \vert\psi\rangle \stackrel{\text{CNOT}}{\longmapsto} \frac{1}{\sqrt{2}} \vert 0\rangle \otimes T \vert \psi\rangle + \frac{1+i}{2} \vert 1\rangle \otimes T^{\dagger} \vert \psi\rangle

La medición produce los resultados 00 y 11 con igual probabilidad. Si el resultado es 00, la puerta SS no se realiza, y el estado de salida es TψT\vert\psi\rangle; y si el resultado es 11, la puerta SS se realiza, y el estado de salida es STψ=Tψ.ST^{\dagger}\vert\psi\rangle = T\vert \psi\rangle.

El estado T+T\vert {+}\rangle se denomina estado mágico en este contexto, aunque no es el único: otros estados también se denominan estados mágicos cuando pueden usarse de manera similar (para posiblemente otras puertas y con otros circuitos). Si, por ejemplo, se sustituye el estado T+T\vert{+}\rangle por el estado S+S\vert{+}\rangle y se reemplaza la puerta SS en el circuito anterior por una puerta ZZ, se implementa una puerta SS — lo cual podría ser útil para computaciones cuánticas tolerantes a fallos que utilicen un código para el cual las puertas SS no puedan implementarse de forma transversal.

Gadgets tolerantes a fallos a partir de estados mágicos

Puede no ser obvio que el uso de estados mágicos para implementar puertas sea útil para la tolerancia a fallos. Para la implementación de la puerta TT descrita anteriormente, por ejemplo, parece que todavía necesitamos aplicar una puerta TT a un estado +\vert{+}\rangle para obtener un estado mágico, que luego usamos para implementar una puerta TT. ¿Cuál es entonces la ventaja de este enfoque para la tolerancia a fallos?

Aquí hay tres puntos importantes que responden a esta pregunta.

  1. La creación de estados mágicos no requiere la aplicación de la puerta que intentamos implementar a un estado particular. Por ejemplo, aplicar una puerta TT a un estado +\vert {+} \rangle no es la única forma de obtener un estado T+T\vert{+}\rangle.

  2. La creación de estados mágicos puede realizarse por separado de la computación en la que se utilizan. Esto significa que los errores que surgen en el proceso de creación de estados mágicos no se propagan a la computación que realmente se está realizando.

  3. Si las puertas individuales en el circuito que implementa una puerta elegida usando un estado mágico pueden implementarse de forma tolerante a fallos, y presuponemos la disponibilidad de estados mágicos, obtenemos una implementación tolerante a fallos de la puerta elegida.

Para simplificar la siguiente discusión, nos concentramos en las puertas TT — teniendo en cuenta que la metodología puede extenderse a otras puertas. Una implementación tolerante a fallos de una puerta TT usando estados mágicos tiene la forma sugerida por la siguiente figura.

Un diagrama de circuito que muestra la inyección de estados mágicos en un qubit codificado

Los qubits en el circuito original de la puerta TT corresponden en este diagrama a qubits lógicos codificados por el código que usamos para la tolerancia a fallos. Las entradas y salidas del diagrama deben entenderse, por tanto, como codificaciones de estos estados. Esto significa, en particular, que en realidad no necesitamos estados mágicos — necesitamos estados mágicos codificados. Las puertas en el circuito original de la puerta TT se reemplazan aquí por gadgets que asumimos tolerantes a fallos.

Esta figura sugiere, por tanto, que ya tenemos gadgets tolerantes a fallos para las puertas CNOT y las puertas SS. Para un código de color, estos gadgets podrían ser transversales; para un código de superficie (o cualquier otro código CSS), la CNOT puede realizarse de forma transversal, mientras que el gadget de la puerta SS podría implementarse a su vez usando estados mágicos, como se sugirió anteriormente que era posible. (La figura también sugiere que tenemos un gadget tolerante a fallos para realizar una medición en la base estándar, lo cual hemos ignorado hasta ahora. Esto podría ser un desafío para algunos códigos, pero para un código CSS es cuestión de medir cada qubit físico y luego realizar un post-procesamiento clásico.)

La implementación es, por tanto, tolerante a fallos, siempre que tengamos una codificación de un estado mágico T+T\vert{+}\rangle. Pero aún no hemos abordado el problema de cómo obtener una codificación de este estado. Una forma de obtener estados mágicos codificados (o, más precisamente, de mejorarlos) es un proceso conocido como destilación de estados mágicos. El siguiente diagrama ilustra cómo se ve este proceso a alto nivel.

Un diagrama de circuito que muestra la destilación de estados mágicos codificados

En palabras: una colección de estados mágicos codificados ruidosos se introduce en un circuito especial, llamado destilador. Todos los bloques de salida excepto uno se miden — lo que significa que los qubits lógicos se miden con mediciones en la base estándar. Si alguno de los resultados de medición es 11, el proceso ha fallado y debe reiniciarse. Sin embargo, si cada resultado de medición es 00, el estado resultante del bloque de código superior será un estado mágico codificado menos ruidoso. Este estado podría luego alimentarse junto con otros cuatro como entrada a otro destilador, o usarse para implementar una puerta TT si se considera suficientemente cercano a un verdadero estado mágico codificado. Por supuesto, el proceso debe comenzar en algún lugar — una posibilidad es preparar los estados mágicos de forma no tolerante a fallos.

Existen varias formas conocidas de construir el destilador en sí, que no se explican ni analizan aquí. A nivel lógico, el enfoque típico — notablemente y algo casualmente — es ejecutar un circuito de codificación para un código estabilizador ¡al revés! Este podría ser de hecho un código estabilizador diferente del que se usa para la corrección de errores. Por ejemplo, se podría usar un código de superficie o de color para la corrección de errores, pero ejecutar un codificador para el código de 55 qubits al revés para la destilación de estados mágicos. Los circuitos de codificación para códigos estabilizadores solo requieren puertas de Clifford, lo que simplifica la implementación tolerante a fallos de un destilador. En la práctica, los detalles dependen de los códigos utilizados.

En resumen, esta sección solo ha ofrecido una discusión muy general de los estados mágicos, con la intención de proporcionar únicamente una idea básica de cómo funciona esto. A veces se afirma que la sobrecarga para la implementación tolerante a fallos de puertas usando estados mágicos de esta manera sería extremadamente alta, con la mayor parte del trabajo dedicado al proceso de destilación. Sin embargo, esto en realidad no está tan claro — hay muchas oportunidades potenciales de optimización para estos procesos. Además, existen enfoques alternativos para construir gadgets tolerantes a fallos para puertas que no pueden implementarse de forma transversal. Por ejemplo, la deformación de código y el cambio de código son términos asociados con algunos de estos esquemas — y se siguen desarrollando y refinando nuevos métodos.

Corrección de errores tolerante a fallos

Además de implementar los diversos gadgets necesarios para una implementación tolerante a fallos de un circuito cuántico dado, hay otro problema importante que debe reconocerse: la implementación de los propios pasos de corrección de errores. Esto nos remite a la idea de que todo lo que involucra información cuántica es susceptible a errores — incluidos los circuitos destinados a corregir errores.

Consideremos, por ejemplo, el tipo de circuito descrito en la lección "El formalismo de estabilizadores" para la medición no destructiva de generadores de estabilizador mediante estimación de fase. Estos circuitos claramente no son tolerantes a fallos, ya que pueden provocar la propagación de errores dentro del bloque de código sobre el que operan. Esto puede parecer bastante problemático, pero existen varios caminos conocidos para realizar la corrección de errores de forma tolerante a fallos, sin propagar errores dentro de los bloques de código que se corrigen.

Un método se conoce como corrección de errores de Shor, porque fue descubierto por primera vez por Peter Shor. La idea es realizar mediciones de síndrome utilizando un llamado estado cat, un estado de nn qubits de la forma

120n+121n,\frac{1}{\sqrt{2}} \vert 0^n \rangle + \frac{1}{\sqrt{2}} \vert 1^n \rangle,

donde 0n0^n y 1n1^n denotan las cadenas de longitud nn compuestas enteramente por ceros y unos, respectivamente. Esto es, por ejemplo, un estado de Bell ϕ+\vert\phi^+\rangle para n=2n=2 y un estado GHZ para n=3n=3, pero en general la corrección de errores de Shor requiere un estado así para nn igual al peso del generador de estabilizador que se va a medir.

Como ejemplo, el circuito que se muestra aquí mide un generador de estabilizador de la forma P2P1P0.P_2\otimes P_1 \otimes P_0.

Un circuito de detección de errores de Shor

Esto también requiere construir el propio estado cat, y para que funcione de manera confiable en presencia de errores y puertas potencialmente defectuosas, el método en realidad requiere la ejecución repetida de tales circuitos para inferir dónde en el proceso podrían haber ocurrido diferentes errores.

Un método alternativo se conoce como corrección de errores de Steane. Este método funciona de manera diferente y solo funciona para códigos CSS. La idea es que no realizamos realmente las mediciones de síndrome sobre los estados cuánticos codificados del circuito que queremos ejecutar, sino que en su lugar propagamos errores intencionalmente a un sistema de trabajo y luego medimos ese sistema y detectamos errores clásicamente. Los siguientes diagramas de circuito ilustran cómo se hace esto para la detección de errores XX y ZZ, respectivamente.

Un circuito de detección de errores de Steane

Un método relacionado, conocido como corrección de errores de Knill, extiende este método a códigos estabilizadores arbitrarios mediante teleportación.