Saltar al contenido
El bit perdido
Newsletter

Lección 8 de 13

Operadores lógicos, distancia y estados lógicos de un código

Qué errores no ve un código estabilizador, cómo se define su distancia y cómo se escriben sus estados lógicos con la suma sobre el grupo estabilizador.

Al terminar sabrás:

  • Clasificar un error de Pauli como detectable, inofensivo (en C) o lógico (en el ortogonal simpléctico de C, pero fuera de C)
  • Calcular la distancia simpléctica de un código y deducir cuántos errores corrige
  • Entender la degeneración: errores distintos con el mismo efecto
  • Escribir los estados lógicos como autoestados del Z lógico y con la suma sobre el grupo estabilizador

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 definimos un código estabilizador: un grupo abeliano SS de Pauli cuyo subespacio fijo es el código, y un síndrome sj=⟨gj,e⟩ss_j=\langle g_j,e\rangle_s que dice qué generadores anticonmutan con el error. En el relato, Shor ya contestó a los tres obstáculos y el marco de Pauli y estabilizadores es el lenguaje general. Hoy lo usamos para medir un código: ¿qué errores no ve?, ¿cuántos corrige? y, por fin, ¿cómo son sus estados ∣0L⟩\ket{0_L} y ∣1L⟩\ket{1_L}?

La idea

Un error de Pauli EE puede hacer tres cosas muy distintas. Puede delatarse: anticonmuta con algún generador y el síndrome sale distinto de cero. Puede no hacer nada: es un elemento de SS y fija todo el código. O puede ser el peor caso: conmuta con todo SS, nadie lo detecta, pero cambia el dato. Son los operadores lógicos, y el más ligero de ellos marca la distancia del código.

Es la misma historia que en el curso de códigos: la distancia mínima decide cuánto daño aguanta el código. Aquí cambia un detalle esencial, y es que no todo vector que el código «no ve» es peligroso.

El normalizador y las tres clases

Sea C⊆F22nC\subseteq\mathbb{F}_2^{2n} el subespacio de los vectores de SS, de dimensión n−kn-k. Los Pauli que conmutan con todo SS son los de C⊥sC^{\perp_s}, que tiene dimensión 2n−(n−k)=n+k2n-(n-k)=n+k. Es el normalizador del código. Como C⊆C⊥sC\subseteq C^{\perp_s}, cada error cae en una de tres clases:

  1. Fuera de C⊥sC^{\perp_s}: el síndrome no es nulo. El error se detecta.
  2. En CC: es un elemento de SS (salvo fase). Sobre el código actúa como la identidad: es inofensivo.
  3. En C⊥s∖CC^{\perp_s}\setminus C: síndrome nulo, así que no se detecta, y no está en el grupo estabilizador, así que mueve estados del código a otros estados del código. Es un operador lógico.

Para la repetición de 3 cúbits (S=⟨Z1Z2,Z2Z3⟩S=\langle Z_1Z_2,Z_2Z_3\rangle) hay 43=644^3=64 errores de Pauli. El normalizador tiene 24=162^4=16 elementos, de los cuales 4 están en CC. Quedan 4848 con síndrome no nulo, 44 inofensivos y 1212 lógicos.

Los operadores lógicos hacen en el cúbit protegido lo que XX y ZZ hacen en un cúbit normal. Escogemos dos que anticonmuten entre sí, Xˉ\bar X y Zˉ\bar Z (para k=1k=1 siempre se puede). Dos operadores lógicos que se diferencian en un elemento de SS hacen lo mismo sobre el código. En la repetición, Zˉ=Z1\bar Z=Z_1, Z2Z_2 o Z3Z_3 dan igual, porque Z1Z2∈SZ_1Z_2\in S.

Distancia

La distancia de un código estabilizador con k≥1k\ge1 es el peso del operador lógico más ligero:

d=min⁡{wt(v):v∈C⊥s∖C}.d=\min\{\mathrm{wt}(v): v\in C^{\perp_s}\setminus C\}.

Se escribe [[n,k,d]][[n,k,d]], con dobles corchetes para distinguirlo de [n,k,d][n,k,d] clásico.

Consecuencias. El código detecta cualquier error de peso ≤d−1\le d-1: no puede ser lógico (pesa menos que dd), así que o bien tiene síndrome no nulo, o bien está en CC y no hace nada. Y corrige t=⌊(d−1)/2⌋t=\lfloor (d-1)/2\rfloor errores. La razón de una línea: si EE y E′E' pesan ≤t\le t y tienen el mismo síndrome, E′†EE'^{\dagger}E pesa ≤2t<d\le 2t<d y tiene síndrome nulo, luego no es lógico y está en CC. Corregir con E′E' cuando ocurrió EE deja el estado igual que estaba (salvo una fase global, que no importa).

Degeneración. Esa razón admite que E≠E′E\neq E'. Dos errores distintos con el mismo síndrome y con E′†E∈SE'^{\dagger}E\in S tienen el mismo efecto sobre el código, y da igual cuál de los dos se corrija. No tiene análogo clásico: en un código lineal, dos errores distintos con el mismo síndrome se diferencian en una palabra no nula del código, y corregir con el equivocado deja una palabra equivocada. El ejemplo de Shor lo muestra: Z1Z_1 y Z2Z_2 dan el mismo síndrome y Z1Z2∈SZ_1Z_2\in S.

Puente con el curso clásico. La distancia mínima clásica pide que toda palabra no nula pese al menos dd. Aquí solo se exige a los vectores de C⊥s∖CC^{\perp_s}\setminus C, porque los de CC (los elementos de SS) son inofensivos. Y el peso cuenta posiciones, sin importar si el error es XX, ZZ o YY. Por eso la repetición, que como código clásico [3,1,3][3,1,3] tiene d=3d=3, es un [[3,1,1]][[3,1,1]]: Z1Z_1 pesa 1 y es lógico.

Estados lógicos de un código estabilizador

Un código con k=1k=1 es un subespacio de dimensión 2. Para describirlo hay que dar una base ∣0L⟩,∣1L⟩\ket{0_L},\ket{1_L}. Con los operadores lógicos es inmediato.

Definición. ∣0L⟩\ket{0_L} es el estado del código que es autoestado +1+1 de Zˉ\bar Z (y de todo SS, por estar en el código). Con k=1k=1 es único salvo fase. Y

∣1L⟩=Xˉ∣0L⟩.\ket{1_L}=\bar X\ket{0_L}.

Como Xˉ\bar X conmuta con SS, ∣1L⟩\ket{1_L} también está en el código. Como ZˉXˉ=−XˉZˉ\bar Z\bar X=-\bar X\bar Z, es autoestado −1-1 de Zˉ\bar Z: es ortogonal a ∣0L⟩\ket{0_L}.

El truco de la suma. Hay una receta para fabricar ∣0L⟩\ket{0_L} sin resolver ecuaciones. Sea

∣v⟩=∑g∈Sg∣0⋯0⟩.\ket{v}=\sum_{g\in S} g\ket{0\cdots0}.

Si multiplicas ∣v⟩\ket v por un h∈Sh\in S, los gg se reordenan: h∣v⟩=∣v⟩h\ket v=\ket v. Luego ∣v⟩\ket v está en el código. (De hecho 1∣S∣∑g∈Sg\frac{1}{|S|}\sum_{g\in S}g es el proyector sobre el código, así que ∣v⟩\ket v es, salvo el factor ∣S∣|S|, la proyección de ∣0⋯0⟩\ket{0\cdots0}.)

Hay que comprobar que no sale cero. Sale cero solo si SS contiene un operador de tipo ZZ (solo ZZ e identidades) con signo −-, como −Z1Z2-Z_1Z_2, que da −1-1 sobre ∣0⋯0⟩\ket{0\cdots0}. En todos nuestros ejemplos no pasa.

¿Qué estado sale? La regla práctica: busca un operador lógico de tipo ZZ y con signo ++, un Z(b)Z(b) tal cual que conmute con SS sin estar en SS. Con k=1k=1 siempre hay alguno. Fija ∣0⋯0⟩\ket{0\cdots0} y conmuta con todo SS, así que fija ∣v⟩\ket v: ∣v⟩\ket v es su autoestado +1+1 dentro del código. Qué estado lógico es depende solo del nombre que le hayamos dado a ese operador:

  • Si es nuestro Zˉ\bar Z (como en la repetición o, en la lección 10, en Steane), ∣v⟩∝∣0L⟩\ket v\propto\ket{0_L}.
  • Si es nuestro Xˉ\bar X, ∣v⟩\ket v es el estado con Xˉ=+1\bar X=+1, que es (∣0L⟩+∣1L⟩)/2(\ket{0_L}+\ket{1_L})/\sqrt2. Para llegar a ∣0L⟩\ket{0_L} se aplica I+ZˉI+\bar Z: (I+Zˉ)(∣0L⟩+∣1L⟩)=2∣0L⟩(I+\bar Z)(\ket{0_L}+\ket{1_L})=2\ket{0_L}.

El segundo caso es el de Shor. En la lección 4 llamamos Xˉ\bar X al lógico de tipo ZZ, Z1Z4Z7Z_1Z_4Z_7. Podríamos haberlo llamado Zˉ\bar Z, pero entonces los estados de la lección 4 cambiarían de nombre. La suma no se equivoca: refleja la elección «cruzada».

Repaso Los detalles del truco de la suma

Por qué sale cero o no. Llama SZS_Z a los elementos de SS de tipo ZZ, con su signo. Cada uno deja ∣0⋯0⟩\ket{0\cdots0} igual o le cambia el signo. Agrupa los g∈Sg\in S según su parte XX: dos elementos con la misma parte XX se diferencian en un elemento de SZS_Z. Si todos los de SZS_Z dan +1+1, cada grupo aporta ∣SZ∣|S_Z| veces el mismo ket, y grupos distintos dan kets distintos: ∣v⟩≠0\ket v\neq0 y ∥v∥2=∣S∣⋅∣SZ∣\lVert v\rVert^2=|S|\cdot|S_Z|. Si alguno diera −1-1, la mitad de cada grupo daría −1-1 y se cancelaría con la otra mitad: ∣v⟩=0\ket v=0. Entonces se prueba con otro ket de la base en lugar de ∣0⋯0⟩\ket{0\cdots0}.

Por qué siempre hay un lógico de tipo ZZ. Los (0∣b)(0\mid b) que conmutan con SS forman un subespacio de dimensión n−rg⁡An-\operatorname{rg}A (con AA la parte XX de la matriz de estabilizadores de la lección 7), y los que están en CC, uno de dimensión r−rg⁡Ar-\operatorname{rg}A. La diferencia es n−r=k≥1n-r=k\ge1.

Todos los casos. Con k=1k=1, un lógico Z(b)Z(b) actúa sobre el código como uno de ±Zˉ\pm\bar Z, ±Xˉ\pm\bar X o ±Yˉ\pm\bar Y, con Yˉ=iXˉZˉ\bar Y=i\bar X\bar Z, según cómo se hayan elegido Xˉ\bar X y Zˉ\bar Z. La suma da su autoestado +1+1: ∣0L⟩\ket{0_L}, ∣1L⟩\ket{1_L}, (∣0L⟩±∣1L⟩)/2(\ket{0_L}\pm\ket{1_L})/\sqrt2 o (∣0L⟩±i∣1L⟩)/2(\ket{0_L}\pm i\ket{1_L})/\sqrt2. Por ejemplo, si en la repetición se toma Zˉ=−Z1\bar Z=-Z_1 (también anticonmuta con Xˉ\bar X), la suma da ∣1L⟩\ket{1_L}. Con la elección natural, Zˉ=Z1\bar Z=Z_1, da ∣0L⟩\ket{0_L}.

Ejemplo resuelto

Repetición [[3,1,1]][[3,1,1]]. S={I, Z1Z2, Z2Z3, Z1Z3}S=\{I,\,Z_1Z_2,\,Z_2Z_3,\,Z_1Z_3\}, Zˉ=Z1\bar Z=Z_1 (de tipo ZZ), Xˉ=X1X2X3\bar X=X_1X_2X_3. Los cuatro elementos de SS fijan ∣000⟩\ket{000}:

∣v⟩=4∣000⟩⟹∣0L⟩=∣000⟩.\ket v=4\ket{000}\quad\Longrightarrow\quad \ket{0_L}=\ket{000}.

Es no nulo y Z1∣000⟩=∣000⟩Z_1\ket{000}=\ket{000}. Entonces

∣1L⟩=X1X2X3∣000⟩=∣111⟩.\ket{1_L}=X_1X_2X_3\ket{000}=\ket{111}.

Son ortogonales, y Z1∣111⟩=−∣111⟩Z_1\ket{111}=-\ket{111}. Reconocemos el código de la lección 3: α∣000⟩+β∣111⟩\alpha\ket{000}+\beta\ket{111}. Y como Z1∈C⊥s∖CZ_1\in C^{\perp_s}\setminus C pesa 1, d=1d=1: corrige ⌊0/2⌋=0\lfloor 0/2\rfloor=0 errores en general. Detecta d−1=0d-1=0. Aun así, corrige los XX, porque cada XiX_i da un síndrome distinto. Los operadores lógicos de peso 1 son justo los ZiZ_i.

Shor [[9,1,3]][[9,1,3]]. Los generadores son Z1Z2,…,Z8Z9Z_1Z_2,\dots,Z_8Z_9 (6 de tipo ZZ) y X1⋯X6X_1\cdots X_6, X4⋯X9X_4\cdots X_9. Aquí ∣S∣=28=256|S|=2^8=256. Con Xˉ=Z1Z4Z7\bar X=Z_1Z_4Z_7 (de tipo ZZ) y Zˉ=X1X2X3\bar Z=X_1X_2X_3.

Aplica la suma a ∣000000000⟩\ket{000000000}. Los 6464 elementos de SS de tipo ZZ lo fijan. Los XX de SS son 4: II, X1⋯X6X_1\cdots X_6, X4⋯X9X_4\cdots X_9 y su producto X1X2X3X7X8X9X_1X_2X_3X_7X_8X_9. Por tanto

∣v⟩=64(∣000000000⟩+∣111111000⟩+∣000111111⟩+∣111000111⟩),\ket v=64\bigl(\ket{000000000}+\ket{111111000}+\ket{000111111}+\ket{111000111}\bigr),

con ∥v∥2=256⋅64\lVert v\rVert^2=256\cdot64. Normalizando, cada término tiene amplitud 1/21/2. Para comparar con la lección 4, escribe a=∣000⟩\mathsf a=\ket{000} y b=∣111⟩\mathsf b=\ket{111} para cada bloque. Los cuatro términos son aaa,bba,abb,bab\mathsf{aaa},\mathsf{bba},\mathsf{abb},\mathsf{bab} (un número par de bloques b\mathsf b). Por otra parte

∣0L⟩+∣1L⟩=122[(a+b)⊗3+(a−b)⊗3]=12(aaa+bba+abb+bab),\ket{0_L}+\ket{1_L}=\tfrac{1}{2\sqrt2}\bigl[(\mathsf a+\mathsf b)^{\otimes3}+(\mathsf a-\mathsf b)^{\otimes3}\bigr]=\tfrac{1}{\sqrt2}(\mathsf{aaa}+\mathsf{bba}+\mathsf{abb}+\mathsf{bab}),

porque los términos con número impar de b\mathsf b se cancelan y los pares se duplican. Así que la suma sobre SS da (∣0L⟩+∣1L⟩)/2(\ket{0_L}+\ket{1_L})/\sqrt2, no ∣0L⟩\ket{0_L} a secas, como anunciaba la regla: el lógico de tipo ZZ es nuestro Xˉ\bar X. Para llegar a ∣0L⟩\ket{0_L} aplicamos I+Zˉ=I+X1X2X3I+\bar Z=I+X_1X_2X_3, que cambia a↔b\mathsf a\leftrightarrow\mathsf b en el primer bloque y completa los ocho términos:

(I+X1X2X3) ∣v⟩ ∝ aaa+baa+aab+aba+bba+abb+bab+bbb=(a+b)⊗3.(I+X_1X_2X_3)\,\ket v\ \propto\ \mathsf{aaa}+\mathsf{baa}+\mathsf{aab}+\mathsf{aba}+\mathsf{bba}+\mathsf{abb}+\mathsf{bab}+\mathsf{bbb}=(\mathsf a+\mathsf b)^{\otimes3}.

Es ∣0L⟩=122(∣000⟩+∣111⟩)⊗3\ket{0_L}=\frac{1}{2\sqrt2}(\ket{000}+\ket{111})^{\otimes3} de la lección 4. Y Xˉ∣0L⟩=Z1Z4Z7∣0L⟩\bar X\ket{0_L}=Z_1Z_4Z_7\ket{0_L} cambia el signo de cada bloque b\mathsf b en las posiciones 1, 4 y 7, es decir, (a−b)⊗3/(22)=∣1L⟩(\mathsf a-\mathsf b)^{\otimes3}/(2\sqrt2)=\ket{1_L}. Los dos son ortogonales.

Distancia de Shor. El normalizador tiene 210=10242^{10}=1024 vectores, 256 de ellos en CC y 768768 lógicos. Ninguno pesa 1 o 2: a mano son demasiados casos para recorrerlos, pero en la lección 9 lo veremos con un argumento corto. Los dos que ya conocemos, Xˉ=Z1Z4Z7\bar X=Z_1Z_4Z_7 y Zˉ=X1X2X3\bar Z=X_1X_2X_3, pesan 3. Luego d=3d=3, corrige ⌊2/2⌋=1\lfloor 2/2\rfloor=1 error y detecta 2. Hay 27 errores de peso 1 y solo 21 síndromes: los ZZ de un mismo bloque comparten síndrome y Z1Z2∈SZ_1Z_2\in S. Eso es degeneración.

Una cota y un código que la alcanza

No cualquier terna [[n,k,d]][[n,k,d]] existe. La cota de Singleton cuántica dice que

n−k≥2(d−1).n-k\ge 2(d-1).

Solo la enunciamos. Es el análogo de d≤n−k+1d\le n-k+1 del curso clásico, con un factor 2: hay que protegerse a la vez de los errores XX y de los ZZ, y la demostración (que no damos) se apoya en que un dato cuántico no se puede copiar. Repetición: 2≥02\ge0. Shor: 8≥48\ge4. El código de 5 cúbits, [[5,1,3]][[5,1,3]], la cumple con igualdad, 4=2⋅24=2\cdot2. Lo publicaron Laflamme, Miquel, Paz y Zurek en 1996 (Phys. Rev. Lett. 77, 198) y, por otro camino, Bennett, DiVincenzo, Smolin y Wootters dieron ese mismo año otro código de cinco cúbits con la misma capacidad (Phys. Rev. A 54, 3824, noviembre de 1996). Es el más pequeño posible: ningún código de menos de cinco cúbits protege un cúbit contra un error arbitrario en uno de ellos. Se puede escribir con los generadores XZZXIXZZXI, IXZZXIXZZX, XIXZZXIXZZ y ZXIXZZXIXZ. Lo veremos otra vez al cerrar el curso.

Ejercicios

Ejercicio 1

En la repetición, con S=⟨Z1Z2,Z2Z3⟩S=\langle Z_1Z_2,Z_2Z_3\rangle, clasifica cada error como detectable, inofensivo o lógico: X1X2X3X_1X_2X_3, Z2Z3Z_2Z_3, Z3Z_3, X2X_2.

Ver la solución

Hay que ver cada síndrome, en el orden (Z1Z2,Z2Z3)(Z_1Z_2,Z_2Z_3).

  • X1X2X3X_1X_2X_3 conmuta con Z1Z2Z_1Z_2 (anticonmuta dos veces) y con Z2Z3Z_2Z_3: síndrome (0,0)(0,0). No es de SS. Es lógico (es Xˉ\bar X).
  • Z2Z3∈SZ_2Z_3\in S: síndrome (0,0)(0,0) y es inofensivo.
  • Z3Z_3 conmuta con ambos: síndrome (0,0)(0,0) y no está en SS. Es lógico (peso 1: por eso d=1d=1).
  • X2X_2 anticonmuta con los dos generadores: síndrome (1,1)(1,1). Es detectable.

Ejercicio 2

Código de fase: S=⟨X1X2,X2X3⟩S=\langle X_1X_2,X_2X_3\rangle, con Xˉ=Z1Z2Z3\bar X=Z_1Z_2Z_3 y Zˉ=X1\bar Z=X_1. Calcula ∣v⟩=∑g∈Sg∣000⟩\ket v=\sum_{g\in S}g\ket{000} y úsalo para llegar a ∣0L⟩\ket{0_L}.

Ver la solución

S={I,X1X2,X2X3,X1X3}S=\{I,X_1X_2,X_2X_3,X_1X_3\}, y ∣v⟩=∣000⟩+∣110⟩+∣011⟩+∣101⟩\ket v=\ket{000}+\ket{110}+\ket{011}+\ket{101}. No sale cero (los cuatro términos son distintos). Aquí Zˉ=X1\bar Z=X_1 no es de tipo ZZ pero Xˉ=Z1Z2Z3\bar X=Z_1Z_2Z_3 sí: ∣v⟩\ket v tiene Xˉ=+1\bar X=+1 y ∥v∥2=4\lVert v\rVert^2=4, luego ∣v⟩/2=(∣0L⟩+∣1L⟩)/2\ket v/2=(\ket{0_L}+\ket{1_L})/\sqrt2. Con I+Zˉ=I+X1I+\bar Z=I+X_1:

(I+X1)∣v⟩=∑x∈{0,1}3∣x⟩,(I+X_1)\ket v=\sum_{x\in\{0,1\}^3}\ket{x},

las ocho palabras, que es 22 ∣+++⟩2\sqrt2\,\ket{+++}. Por tanto ∣0L⟩=∣+++⟩\ket{0_L}=\ket{+++} y ∣1L⟩=Z1Z2Z3∣+++⟩=∣−−−⟩\ket{1_L}=Z_1Z_2Z_3\ket{+++}=\ket{---}, como en la lección 3.

Ejercicio 3

Con la cota de Singleton cuántica, ¿cuál es el menor nn posible para un [[n,1,3]][[n,1,3]]? ¿Y para un [[n,1,5]][[n,1,5]]? ¿Excluye la cota un [[4,1,3]][[4,1,3]]?

Ver la solución

Con k=1k=1 la cota es n−1≥2(d−1)n-1\ge2(d-1), es decir, n≥2d−1n\ge 2d-1. Para d=3d=3 sale n≥5n\ge5 (el código de 5 cúbits lo alcanza). Para d=5d=5 sale n≥9n\ge9. Un [[4,1,3]][[4,1,3]] tendría n−k=3<4=2(d−1)n-k=3<4=2(d-1): no puede existir. La cota solo dice qué es imposible, no qué existe: con ella sola no sabemos si hay un [[9,1,5]][[9,1,5]].

En resumen

  • Los errores de Pauli se reparten en tres clases: detectables (fuera de C⊥sC^{\perp_s}), inofensivos (en CC) y lógicos (en C⊥s∖CC^{\perp_s}\setminus C, indetectables y dañinos).
  • La distancia dd es el peso del lógico más ligero. El código detecta d−1d-1 errores y corrige ⌊(d−1)/2⌋\lfloor (d-1)/2\rfloor.
  • Hay degeneración cuando dos errores distintos con el mismo síndrome difieren en un elemento de SS: da igual cuál se corrija.
  • ∣0L⟩\ket{0_L} es el autoestado +1+1 de Zˉ\bar Z en el código y ∣1L⟩=Xˉ∣0L⟩\ket{1_L}=\bar X\ket{0_L}. Además ∑g∈Sg∣0⋯0⟩\sum_{g\in S}g\ket{0\cdots0} (si no sale cero) es el autoestado +1+1 del lógico de tipo ZZ con signo ++: da ∣0L⟩\ket{0_L} si ese lógico es Zˉ\bar Z, y (∣0L⟩+∣1L⟩)/2(\ket{0_L}+\ket{1_L})/\sqrt2 si es Xˉ\bar X, como en Shor.
  • La cota de Singleton cuántica n−k≥2(d−1)n-k\ge2(d-1) la alcanza el [[5,1,3]][[5,1,3]].

Siguiente lección: Códigos CSS: un código cuántico hecho con dos clásicos

Para profundizar