Saltar al contenido
El bit perdido
Newsletter

Lección 4 de 13

El código de Shor: tres respuestas a tres obstáculos

El código de 9 cúbits de Shor (1995): sus dos palabras, los 8 observables de paridad que lo vigilan y cómo responde a la no clonación y a la medida.

Al terminar sabrás:

  • Escribir las dos palabras del código de Shor y explicar que salen de combinar el código de fase y el de bit
  • Calcular qué resultado dan los 8 observables de paridad ante un error de un cúbit
  • Explicar por qué la redundancia es entrelazamiento y no copias, y por qué medir paridades no destruye el dato
  • Reconocer los operadores lógicos Z1Z4Z7 y X1X2X3 y por qué parecen cruzados

Si sabes multiplicar matrices, operar con números complejos y calcular un síndrome con una matriz de paridad (lo tienes en el curso de códigos correctores), puedes seguirlo. La física imprescindible (estado, medida, producto tensorial) se explica desde cero.

En la lección anterior vimos dos códigos de tres cúbits: uno corrige un cambio de bit (XX) y el otro un cambio de fase (ZZ), pero ninguno corrige los dos. Nos quedamos con una pregunta: ¿se pueden juntar? Esta es la lección donde el relato da el giro. A mediados de los años 90 nadie sabía cómo corregir errores cuánticos: los tres obstáculos de la lección 1 parecían cerrar el paso. En 1995 Peter Shor publicó un código de nueve cúbits que responde a ellos. Hoy lo vemos entero y respondemos a dos de los tres: (a) no se puede clonar y (c) medir destruye la superposición. El (b), los errores continuos, es el tema de la lección 5.

La idea

Juntamos los dos códigos de la lección anterior, uno dentro del otro. Es una concatenación:

  • Por dentro, cada cúbit se protege con el código de bit: ∣0⟩\ket{0} pasa a ser ∣000⟩\ket{000} y ∣1⟩\ket{1} a ∣111⟩\ket{111}. Un XX suelto dentro de un bloque se ve.
  • Por fuera, tres bloques protegen contra los cambios de fase, igual que ∣+++⟩\ket{+++} y ∣−−−⟩\ket{---} en la versión de fase. Pero en vez de ∣+⟩\ket{+} y ∣−⟩\ket{-} usamos sus equivalentes de tres cúbits, (∣000⟩+∣111⟩)/2(\ket{000}+\ket{111})/\sqrt2 y (∣000⟩−∣111⟩)/2(\ket{000}-\ket{111})/\sqrt2.

El resultado usa 3×3=93\times3=9 cúbits. Un cúbit vive en C2\mathbb{C}^2, pero nueve cúbits viven en C512\mathbb{C}^{512}, y hay que escribir los vectores con 512 amplitudes. Por suerte casi todas valen cero.

Las dos palabras

Escribimos los dos estados de un bloque:

∣b+⟩=∣000⟩+∣111⟩2,∣b−⟩=∣000⟩−∣111⟩2.\ket{b_+}=\frac{\ket{000}+\ket{111}}{\sqrt2},\qquad \ket{b_-}=\frac{\ket{000}-\ket{111}}{\sqrt2}.

Las dos palabras del código son tres bloques iguales:

∣0L⟩=∣b+⟩⊗∣b+⟩⊗∣b+⟩,∣1L⟩=∣b−⟩⊗∣b−⟩⊗∣b−⟩.\ket{0_L}=\ket{b_+}\otimes\ket{b_+}\otimes\ket{b_+},\qquad \ket{1_L}=\ket{b_-}\otimes\ket{b_-}\otimes\ket{b_-}.

Al desarrollar el producto salen ocho términos cada una:

∣0L⟩=122(∣000⟩+∣111⟩)(∣000⟩+∣111⟩)(∣000⟩+∣111⟩),\ket{0_L}=\frac{1}{2\sqrt2}\big(\ket{000}+\ket{111}\big)\big(\ket{000}+\ket{111}\big)\big(\ket{000}+\ket{111}\big), ∣1L⟩=122(∣000⟩−∣111⟩)(∣000⟩−∣111⟩)(∣000⟩−∣111⟩),\ket{1_L}=\frac{1}{2\sqrt2}\big(\ket{000}-\ket{111}\big)\big(\ket{000}-\ket{111}\big)\big(\ket{000}-\ket{111}\big),

donde los tres paréntesis se multiplican con el producto tensorial. Por ejemplo, ∣0L⟩\ket{0_L} contiene ∣000 000 000⟩\ket{000\,000\,000}, ∣111 000 000⟩\ket{111\,000\,000}, ∣000 111 111⟩\ket{000\,111\,111}, etc., todos con amplitud 1/(22)1/(2\sqrt2). En ∣1L⟩\ket{1_L} cada término lleva signo −- por cada bloque que sea ∣111⟩\ket{111}. Las dos palabras son ortogonales: ⟨b+∣b−⟩=1−12=0\braket{b_+|b_-}=\frac{1-1}{2}=0, y el producto interno de dos productos es el producto de los de cada bloque, así que ⟨0L∣1L⟩=⟨b+∣b−⟩3=0\braket{0_L|1_L}=\braket{b_+|b_-}^3=0.

Para codificar un cúbit, α∣0⟩+β∣1⟩\alpha\ket0+\beta\ket1 se convierte en

α∣0L⟩+β∣1L⟩,∣α∣2+∣β∣2=1.\alpha\ket{0_L}+\beta\ket{1_L},\qquad |\alpha|^2+|\beta|^2=1.

No nos importa cómo se prepara este estado: lo que importa es el estado.

Obstáculo (a): entrelazamiento, no copias

El primer obstáculo decía que no se puede copiar un cúbit, así que no hay código de repetición. Lo que acabamos de escribir no es una copia. Copiar ∣ψ⟩\ket\psi nueve veces daría ∣ψ⟩⊗9\ket\psi^{\otimes9}, un vector con las 512 amplitudes no nulas (en general). Cada palabra del código tiene solo 8 amplitudes no nulas. Dos comprobaciones más lo confirman.

  • ∣0L⟩\ket{0_L} no es ∣0⟩⊗9\ket{0}^{\otimes9}. El estado ∣000000000⟩\ket{000000000} aparece en ∣0L⟩\ket{0_L} con amplitud 1/(22)1/(2\sqrt2), así que al medirlo saldría cero en los nueve cúbits solo con probabilidad 1/81/8.
  • ∣0L⟩\ket{0_L} no es un producto de nueve cúbits sueltos (a1∣0⟩+b1∣1⟩)⊗⋯⊗(a9∣0⟩+b9∣1⟩)(a_1\ket0+b_1\ket1)\otimes\cdots\otimes(a_9\ket0+b_9\ket1). Razona como con el estado de Bell en la lección 2. Como ∣000000000⟩\ket{000000000} y ∣111000000⟩\ket{111000000} aparecen en ∣0L⟩\ket{0_L}, todos los aia_i y b1,b2,b3b_1,b_2,b_3 son distintos de cero. Entonces ∣100000000⟩\ket{100000000} aparecería con amplitud b1a2⋯a9≠0b_1a_2\cdots a_9\neq0, y ∣0L⟩\ket{0_L} no lo contiene. Además, midas lo que midas sobre un solo cúbit de α∣0L⟩+β∣1L⟩\alpha\ket{0_L}+\beta\ket{1_L}, los resultados salen con las mismas probabilidades sean cuales sean α\alpha y β\beta: ningún cúbit suelto revela nada del dato. Esa información no está en ningún cúbit concreto: está en las correlaciones entre ellos. Eso es el entrelazamiento, y es la redundancia del código.

Así que el código no clona. Reparte la información de un cúbit entre nueve de manera que ninguno la guarda por separado. Es una manera de evitar el teorema de no clonación, no de saltárselo.

Los ocho observables

Para vigilar el código se miden ocho observables de paridad. Recuerda la lección 2: medir un observable de valores propios ±1\pm1 como Z1Z2Z_1Z_2 es una medida proyectiva sobre sus autoespacios, con proyectores (I±Z1Z2)/2(I\pm Z_1Z_2)/2. Los seis primeros comparan cúbits dentro de un bloque:

Z1Z2, Z2Z3,  Z4Z5, Z5Z6,  Z7Z8, Z8Z9.Z_1Z_2,\ Z_2Z_3,\ \ Z_4Z_5,\ Z_5Z_6,\ \ Z_7Z_8,\ Z_8Z_9.

Como en la lección anterior, Z1Z2=+1Z_1Z_2=+1 si los cúbits 1 y 2 valen lo mismo y −1-1 si no. Estos seis detectan los XX y son el código de bit en cada bloque. Los otros dos comparan el signo de bloques enteros:

X1X2X3X4X5X6,X4X5X6X7X8X9.X_1X_2X_3X_4X_5X_6,\qquad X_4X_5X_6X_7X_8X_9.

El primero compara los bloques 1 y 2; el segundo, los bloques 2 y 3. La razón es que X1X2X3X_1X_2X_3 deja ∣b+⟩\ket{b_+} como está y cambia el signo de ∣b−⟩\ket{b_-}: vale +1+1 sobre ∣b+⟩\ket{b_+} y −1-1 sobre ∣b−⟩\ket{b_-}. Así que el producto de dos de ellos dice si dos bloques tienen el mismo signo. Estos dos detectan los ZZ.

Las dos palabras son autoestados de valor propio +1+1 de los ocho, porque cada bloque es ∣b+⟩\ket{b_+} o ∣b−⟩\ket{b_-}, y los ocho observables lo respetan (compruébalo: cada ZaZbZ_aZ_b ve dos bits iguales dentro de un bloque, y X1X2X3X_1X_2X_3 deja ∣b+⟩\ket{b_+} igual y cambia el signo de ∣b−⟩\ket{b_-}; en ∣1L⟩\ket{1_L}, X1⋯X6X_1\cdots X_6 produce dos signos −-, que se compensan). Por tanto, medir los ocho sobre un estado sin error da (+,+,+,+,+,+,+,+)(+,+,+,+,+,+,+,+) con certeza y no lo toca. Los ocho conmutan dos a dos, así que se pueden medir juntos en cualquier orden. Para comprobarlo, usa el criterio de la lección 3: cuenta los cúbits donde un operador lleva XX y el otro ZZ. Dos de tipo ZZ nunca chocan, dos de tipo XX tampoco, y cada ZaZbZ_aZ_b comparte con cada X⋯XX\cdots X cero o dos cúbits: un número par.

Obstáculo (c): se miden paridades, nunca los datos

El tercer obstáculo decía que mirar destruye la superposición. Aquí no miramos los datos. Mirar Z1Z2Z_1Z_2 no dice si el cúbit 1 vale 00 o 11, solo si los cúbits 1 y 2 coinciden, y los dos términos de la superposición dan la misma respuesta: ∣000⟩\ket{000} y ∣111⟩\ket{111} tienen ambos Z1Z2=+1Z_1Z_2=+1. Como la medida solo colapsa lo que distingue resultados, no hay nada que colapsar.

La comprobación es esta: para cualquier error de un cúbit, la distribución de los ocho resultados no depende de α\alpha ni de β\beta. Pasa con los nueve XiX_i, con los nueve ZiZ_i y con cualquier giro de un cúbit. Si el síndrome no sabe nada de α\alpha y β\beta, la medida no ha aprendido nada del dato, y por eso (lo veremos con cuentas en la lección 5) tampoco lo destruye: tras medir, el estado se puede devolver al original.

Los operadores lógicos

Hay dos operadores que actúan sobre el dato codificado sin sacarlo del código: Xˉ\bar X lleva ∣0L⟩\ket{0_L} a ∣1L⟩\ket{1_L} y Zˉ\bar Z cambia el signo de ∣1L⟩\ket{1_L}. Son

Xˉ=Z1Z4Z7,Zˉ=X1X2X3.\bar X=Z_1Z_4Z_7,\qquad \bar Z=X_1X_2X_3.

Parecen cruzados: el «XX lógico» está hecho con ZZ y el «ZZ lógico» con XX. La razón está en la concatenación. El bit lógico se guarda en el signo de los bloques, que es el código de fase de fuera. Cambiar ∣b+⟩\ket{b_+} por ∣b−⟩\ket{b_-} en un bloque es lo que hace Z1Z_1 en el bloque 1; para pasar de ∣0L⟩\ket{0_L} a ∣1L⟩\ket{1_L} hay que cambiar los tres bloques, y basta tocar un cúbit en cada uno: Z1Z4Z7Z_1Z_4Z_7. Y X1X2X3X_1X_2X_3 vale +1+1 sobre ∣b+⟩\ket{b_+} y −1-1 sobre ∣b−⟩\ket{b_-}, así que sobre ∣0L⟩\ket{0_L} no hace nada y sobre ∣1L⟩\ket{1_L} cambia el signo, que es lo que hace Zˉ\bar Z. Los dos conmutan con los ocho observables, así que no se ven al medir el síndrome, y anticonmutan entre sí, como XX y ZZ.

Ejemplo resuelto

Tomamos α∣0L⟩+β∣1L⟩\alpha\ket{0_L}+\beta\ket{1_L} y le aplicamos un cambio de bit en el cúbit 5, X5X_5. Veamos qué da cada observable.

El estado tras el error. X5X_5 cambia el cúbit central del segundo bloque: ∣000⟩→∣010⟩\ket{000}\to\ket{010} y ∣111⟩→∣101⟩\ket{111}\to\ket{101}. El estado es αX5∣0L⟩+βX5∣1L⟩\alpha X_5\ket{0_L}+\beta X_5\ket{1_L}.

Observables de bloque. En los dos términos del segundo bloque, ∣010⟩\ket{010} y ∣101⟩\ket{101}, los cúbits 4 y 5 son distintos y los cúbits 5 y 6 también. Así que Z4Z5=−1Z_4Z_5=-1 y Z5Z6=−1Z_5Z_6=-1 en los dos términos, es decir, con certeza y sin tocar α\alpha ni β\beta. Los demás (Z1Z2Z_1Z_2, Z2Z3Z_2Z_3, Z7Z8Z_7Z_8, Z8Z9Z_8Z_9) no ven nada: +1+1.

Observables de signo. X5X_5 conmuta con X1⋯X6X_1\cdots X_6 y con X4⋯X9X_4\cdots X_9, que son +1+1 sobre el estado limpio, así que siguen en +1+1.

Resultado: (+,+,−,−,+,+,+,+)(+,+,-,-,+,+,+,+), que escrito con sj=0s_j=0 para +1+1 y sj=1s_j=1 para −1-1 es el síndrome 0011000000110000. Entre los errores XiX_i y ZiZ_i, solo X5X_5 da ese síndrome, así que corregimos aplicando X5X_5 otra vez. Este resultado ocurre con probabilidad 11 y la medida no cambia el estado: sigue siendo X5(α∣0L⟩+β∣1L⟩)X_5(\alpha\ket{0_L}+\beta\ket{1_L}), con α\alpha y β\beta intactos.

Otros ejemplos, calculados igual:

errorsíndromeobservables que dan −1-1
ninguno00000000ninguno
X5X_500110000Z4Z5Z_4Z_5, Z5Z6Z_5Z_6
X7X_700001000Z7Z8Z_7Z_8
Z2Z_200000010X1⋯X6X_1\cdots X_6
Z8Z_800000001X4⋯X9X_4\cdots X_9

Un Z2Z_2 cambia ∣b+⟩\ket{b_+} del primer bloque en ∣b−⟩\ket{b_-}, así que los bloques 1 y 2 quedan con signos distintos y X1⋯X6X_1\cdots X_6 da −1-1; los bloques 2 y 3 siguen iguales. Los tres cúbits de un mismo bloque dan el mismo síndrome de fase, porque cambiar el signo de un bloque es lo mismo desde cualquiera de sus cúbits. En la lección 5 verás que da igual cuál se corrija.

Un adelanto del (b). Si el error no es un X5X_5 limpio sino cos⁡θ I−isin⁡θ X5\cos\theta\,I-i\sin\theta\,X_5 (un poco de «no pasa nada» y un poco de X5X_5), el síndrome sale 0000000000000000 con probabilidad cos⁡2θ\cos^2\theta y 0011000000110000 con probabilidad sin⁡2θ\sin^2\theta (para θ=0,7\theta=0{,}7: 0,58500{,}5850 y 0,41500{,}4150). En el primer caso el estado queda limpio; en el segundo, queda X5X_5 aplicado, que se corrige. En los dos hay recuperación, y la lección 5 lo hará para cualquier error.

Ejercicios

Ejercicio 1

¿Qué síndrome da un error X7X_7? ¿Y un error Z9Z_9? Indica qué observables dan −1-1.

Ver la solución

X7X_7 cambia el primer cúbit del tercer bloque. Los cúbits 7 y 8 pasan a ser distintos, así que Z7Z8=−1Z_7Z_8=-1. El 8 y el 9 siguen igual, y los observables de signo no se ven afectados. Síndrome 0000100000001000.

Z9Z_9 cambia el signo del tercer bloque. Los bloques 2 y 3 quedan con signos distintos, así que X4⋯X9=−1X_4\cdots X_9=-1. Síndrome 0000000100000001. Es el mismo que Z7Z_7 o Z8Z_8.

Ejercicio 2

¿Se podría añadir Z3Z4Z_3Z_4 como noveno observable de paridad? Razona con el criterio de conmutación de la lección 3.

Ver la solución

Hay que ver si conmuta con los otros ocho. Con X4X5X6X7X8X9X_4X_5X_6X_7X_8X_9 comparte un solo cúbit, el 4: Z4Z_4 y X4X_4 anticonmutan, y todos los demás cúbits conmutan, así que Z3Z4Z_3Z_4 anticonmuta con él. Dos observables que anticonmutan no se pueden medir a la vez con resultado seguro. Compara con Z2Z3Z_2Z_3, que sí es uno de los ocho: con X1⋯X6X_1\cdots X_6 comparte dos cúbits, dos cambios de signo que se compensan, y conmutan. Por eso las comparaciones de ZZ se hacen dentro de cada bloque.

Ejercicio 3

Comprueba que Xˉ=Z1Z4Z7\bar X=Z_1Z_4Z_7 y Zˉ=X1X2X3\bar Z=X_1X_2X_3 anticonmutan, y que Z1Z_1 solo (de peso 1) no es un operador lógico.

Ver la solución

Z1Z4Z7Z_1Z_4Z_7 y X1X2X3X_1X_2X_3 solo comparten el cúbit 1, donde Z1Z_1 y X1X_1 anticonmutan. En los cúbits 2 y 3 no hay ZZ, y en los cúbits 4 y 7 no hay XX. Un solo cambio de signo: anticonmutan.

Z1Z_1 solo no vale como operador lógico porque anticonmuta con X1⋯X6X_1\cdots X_6: saca el estado del código y el síndrome lo detecta (0000001000000010). Para pasar de ∣0L⟩\ket{0_L} a ∣1L⟩\ket{1_L} sin que se note hay que tocar los tres bloques.

En resumen

  • El código de Shor es una concatenación: el código de bit dentro de cada bloque de tres cúbits y el de fase entre los tres bloques. Usa 9 cúbits y las palabras ∣0L⟩=∣b+⟩⊗3\ket{0_L}=\ket{b_+}^{\otimes3}, ∣1L⟩=∣b−⟩⊗3\ket{1_L}=\ket{b_-}^{\otimes3}.
  • Obstáculo (a): la redundancia es entrelazamiento, no copias: ∣0L⟩\ket{0_L} no es ∣0⟩⊗9\ket{0}^{\otimes9} ni un producto de cúbits sueltos, y ningún cúbit guarda α\alpha ni β\beta.
  • Obstáculo (c): se miden ocho observables de paridad (Z1Z2,…,Z8Z9Z_1Z_2,\dots,Z_8Z_9 y X1⋯X6X_1\cdots X_6, X4⋯X9X_4\cdots X_9), nunca los datos. El síndrome no depende de α\alpha ni de β\beta.
  • Xˉ=Z1Z4Z7\bar X=Z_1Z_4Z_7 y Zˉ=X1X2X3\bar Z=X_1X_2X_3 están «cruzados» porque el bit lógico vive en el signo de los bloques.
  • Obstáculo (b): queda anunciado. En la lección 5 veremos que este código corrige cualquier error de un cúbit, no solo XX y ZZ.

Siguiente lección: El código de Shor corrige cualquier error

Para profundizar