Saltar al contenido
El bit perdido
Newsletter

Lección 13 de 13

Reed-Solomon cuánticos: el cierre del curso

Un Reed-Solomon que contiene a su dual da, con la construcción CSS, un código cuántico [[n, 2k−n, n−k+1]] que alcanza la cota de Singleton cuántica.

Al terminar sabrás:

  • Decidir cuándo un Reed-Solomon contiene a su dual
  • Obtener los parámetros [[n, 2k−n, n−k+1]] y ver que es MDS cuántico
  • Escribir los estados lógicos del [[6,2,3]] sobre F_7 como clases laterales
  • Leer la posición y el valor de un error en el síndrome

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 llevaste la construcción CSS a los qudits: dos códigos clásicos sobre Fp\mathbb{F}_p con C2⊥⊆C1C_2^\perp\subseteq C_1 dan un código cuántico. Estamos en la última parada del relato. Empezamos con tres obstáculos que parecían insalvables, Shor los superó, los estabilizadores lo ordenaron todo y los códigos CSS convirtieron cada buen código clásico en una fábrica de códigos cuánticos. La pregunta de hoy: los códigos de Reed-Solomon tienen la mayor distancia posible para su longitud y su dimensión (son MDS). ¿Dan también los mejores códigos cuánticos?

La idea

La construcción CSS pide dos códigos con C2⊥⊆C1C_2^\perp\subseteq C_1. Lo más sencillo es tomar el mismo código dos veces: C1=C2=CC_1=C_2=C, con la condición

C⊥⊆C.C^\perp\subseteq C.

Entonces los estados lógicos son las clases laterales ∣x+C⊥⟩\ket{x+C^\perp} con x∈Cx\in C, y el número de qudits lógicos es dim⁡C−dim⁡C⊥=k−(n−k)=2k−n\dim C-\dim C^\perp=k-(n-k)=2k-n.

Si CC es un Reed-Solomon [n,k,n−k+1][n,k,n-k+1] que contiene a su dual (aquí kk es la dimensión del código clásico), sale un código cuántico

[[ n, 2k−n, n−k+1 ]]q.[[\,n,\ 2k-n,\ n-k+1\,]]_q .

Compáralo con la cota de Singleton cuántica de la lección 8, n−kQ≥2(d−1)n-k_Q\ge 2(d-1), donde kQk_Q es el número de qudits lógicos. Aquí n−(2k−n)=2(n−k)=2(d−1)n-(2k-n)=2(n-k)=2(d-1): se alcanza con igualdad. Un código así se llama MDS cuántico. El mejor código clásico da el mejor código cuántico.

Solo falta saber cuándo C⊥⊆CC^\perp\subseteq C. No se puede suponer: hay que comprobarlo.

Cuándo un Reed-Solomon contiene a su dual

Usamos la definición del curso de códigos: α\alpha genera los elementos no nulos de Fq\mathbb{F}_q, n=q−1n=q-1 y los puntos de evaluación son 1,α,…,αn−11,\alpha,\dots,\alpha^{n-1}, en ese orden. Escribimos ev(f)=(f(1),f(α),…,f(αn−1))\mathrm{ev}(f)=(f(1),f(\alpha),\dots,f(\alpha^{n-1})). El código es C={ev(f):deg⁡f<k}C=\{\mathrm{ev}(f):\deg f<k\}, o sea, el cíclico con g(x)=(x−α)⋯(x−αn−k)g(x)=(x-\alpha)\cdots(x-\alpha^{n-k}).

Repaso Sumar una potencia en todos los puntos

Sea S=∑a≠0amS=\sum_{a\neq0}a^m, la suma sobre los n=q−1n=q-1 elementos no nulos de Fq\mathbb{F}_q. Si nn no divide a mm, entonces αm≠1\alpha^m\neq1. Multiplicar todos los aa por α\alpha solo los cambia de orden, así que αmS=S\alpha^mS=S, y de ahí S=0S=0. Si nn divide a mm, cada término vale 1 y S=n=q−1=−1S=n=q-1=-1.

El producto escalar de dos evaluaciones de monomios es ev(xi)⋅ev(xj)=∑a≠0ai+j\mathrm{ev}(x^i)\cdot\mathrm{ev}(x^j)=\sum_{a\neq0}a^{i+j}, que vale 0 si 0<i+j<n0<i+j<n. Con i≤k−1i\le k-1 y 1≤j≤n−k1\le j\le n-k la suma i+ji+j queda entre 1 y n−1n-1. Por tanto los n−kn-k vectores ev(x),…,ev(xn−k)\mathrm{ev}(x),\dots,\mathrm{ev}(x^{n-k}) son ortogonales a todo CC, y como son independientes y dim⁡C⊥=n−k\dim C^\perp=n-k:

C⊥={ev(b1x+b2x2+⋯+bn−kxn−k)}.C^\perp=\{\mathrm{ev}(b_1x+b_2x^2+\dots+b_{n-k}x^{n-k})\}.

Son los polinomios sin término independiente y de grado como mucho n−kn-k. Estarán en CC si y solo si n−k≤k−1n-k\le k-1, es decir, si

2k>n.2k>n .

Con 2k=n2k=n falla: ev(xk)\mathrm{ev}(x^{k}) está en C⊥C^\perp pero no en CC.

La distancia. Toda palabra de CC no nula pesa al menos n−k+1n-k+1. Las de C⊥C^\perp son evaluaciones de x h(x)x\,h(x) con deg⁡h≤n−k−1\deg h\le n-k-1; como 00 no es un punto de evaluación, tienen como mucho n−k−1n-k-1 ceros y pesan al menos k+1>n−k+1k+1>n-k+1. Así que las palabras de peso n−k+1n-k+1 de CC (que existen, porque el Reed-Solomon es MDS) no están en C⊥C^\perp, y la distancia cuántica, el mínimo peso de C∖C⊥C\setminus C^\perp, es exactamente n−k+1n-k+1.

Estos son los códigos de Reed-Solomon cuánticos. Los introdujeron M. Grassl, W. Geiselmann y T. Beth en 1999, con Reed-Solomon sobre cuerpos F2m\mathbb{F}_{2^m} y escritos en cúbits: cada símbolo se desarrolla en mm cúbits. La versión directa con qudits de qq niveles, que da códigos MDS cuánticos, la estudiaron Grassl, Beth y Rötteler (2004). Encaja en la construcción CSS sobre Fq\mathbb{F}_q que recogen Ketkar, Klappenecker, Kumar y Sarvepalli (2006).

Ejemplo resuelto: el código [[6,2,3]]7[[6,2,3]]_7

Trabajamos en F7\mathbb{F}_7 (restos módulo 7). Las potencias de α=3\alpha=3 son 1,3,2,6,4,51,3,2,6,4,5: recorren los seis elementos no nulos. Tomamos n=6n=6 y k=4k=4, el Reed-Solomon [6,4,3][6,4,3] con g(x)=(x−3)(x−2)=x2+2x+6g(x)=(x-3)(x-2)=x^2+2x+6.

1. El dual. Como n−k=2n-k=2, C⊥C^\perp lo generan

ev(x)=(1,3,2,6,4,5),ev(x2)=(1,2,4,1,2,4).\mathrm{ev}(x)=(1,3,2,6,4,5),\qquad \mathrm{ev}(x^2)=(1,2,4,1,2,4).

Comprobación con un producto: ev(x)⋅ev(x2)=1+6+8+6+8+20=49≡0\mathrm{ev}(x)\cdot\mathrm{ev}(x^2)=1+6+8+6+8+20=49\equiv0. Estas dos filas forman la matriz de paridad HH de CC. Y como xx y x2x^2 tienen grado menor que 4, también están en CC: C⊥⊆CC^\perp\subseteq C.

2. Parámetros. kQ=4−2=2k_Q=4-2=2 qudits lógicos y d=6−4+1=3d=6-4+1=3. Es un [[6,2,3]]7[[6,2,3]]_7: corrige un error cualquiera en un qudit, o dos borrones. Singleton: 6−2=4=2(3−1)6-2=4=2(3-1). Es MDS cuántico.

3. Estabilizadores. Con C1=C2=CC_1=C_2=C son

X(132645),X(124124),Z(132645),Z(124124).X(132645),\quad X(124124),\quad Z(132645),\quad Z(124124).

Los dos XX conmutan entre sí, y los dos ZZ también. Un X(g)X(g) y un Z(h)Z(h) conmutan porque g⋅h=0g\cdot h=0: g∈C⊥⊆Cg\in C^\perp\subseteq C y h∈C⊥h\in C^\perp. Son 4 generadores independientes en 6 qudits: 6−4=26-4=2.

4. Estados lógicos. CC tiene 747^4 palabras y C⊥C^\perp, 727^2, así que hay 72=497^2=49 clases laterales, una por cada pareja (j,l)(j,l) de F7\mathbb{F}_7. Un representante de cada una es la evaluación de j+l x3j+l\,x^3, es decir j⋅111111+l⋅161616j\cdot111111+l\cdot161616 (porque ev(x3)=(1,6,1,6,1,6)\mathrm{ev}(x^3)=(1,6,1,6,1,6)). Así:

∣j,l⟩L=17∑y∈C⊥∣ j⋅111111+l⋅161616+y ⟩.\ket{j,l}_L=\frac{1}{7}\sum_{y\in C^\perp}\ket{\,j\cdot111111+l\cdot161616+y\,}.

El estado ∣0,0⟩L\ket{0,0}_L es la suma de los 49 kets de C⊥C^\perp. En la tabla, la casilla de la fila b1b_1 y la columna b2b_2 es b1 ev(x)+b2 ev(x2)b_1\,\mathrm{ev}(x)+b_2\,\mathrm{ev}(x^2), y cada casilla xx es un ket ∣x⟩\ket{x} de la suma, con coeficiente 1/71/7:

b1 \ b2b_1 \,\backslash\, b_20123456
0000000124124241241365365412412536536653653
1132645256062303116420233544350661404015521
2264513311630435054552101606225023342140466
3326451443505560622614046031163155210202334
4451326505443622560046614163031210155334202
5513264630311054435101552225606342023466140
6645132062256116303233420350544404661521015

Es decir, ∣0,0⟩L=17(∣000000⟩+∣124124⟩+∣241241⟩+⋯+∣521015⟩)\ket{0,0}_L=\frac17\bigl(\ket{000000}+\ket{124124}+\ket{241241}+\cdots+\ket{521015}\bigr). Para ∣1,0⟩L\ket{1,0}_L se suma 1 a cada cifra: 17(∣111111⟩+∣235235⟩+∣352352⟩+⋯ )\frac17\bigl(\ket{111111}+\ket{235235}+\ket{352352}+\cdots\bigr). Clases distintas no comparten ningún ket, así que los 49 estados son ortonormales.

5. Operadores lógicos. Xˉ1=X(111111)\bar X_1=X(111111) lleva ∣j,l⟩L\ket{j,l}_L a ∣j+1,l⟩L\ket{j+1,l}_L, y Xˉ2=X(161616)\bar X_2=X(161616) lleva ∣j,l⟩L\ket{j,l}_L a ∣j,l+1⟩L\ket{j,l+1}_L. Para las fases, Zˉ1=Z(666666)\bar Z_1=Z(666666) cumple Zˉ1∣j,l⟩L=ωj∣j,l⟩L\bar Z_1\ket{j,l}_L=\omega^j\ket{j,l}_L: las cifras de ev(x)\mathrm{ev}(x) suman 21, las de ev(x2)\mathrm{ev}(x^2), 14, y las de 161616161616, 21, así que las de cada ket de C⊥C^\perp y de 161616161616 suman un múltiplo de 7, y las de j⋅111111j\cdot111111 suman 6j6j, así que la fase es ω6⋅6j=ω36j=ωj\omega^{6\cdot6j}=\omega^{36j}=\omega^j. Del mismo modo, Zˉ2=Z(616161)\bar Z_2=Z(616161) da ωl\omega^l.

6. Un error y su síndrome. Un error X2X^2 en el qudit 3 es X(e)X(e) con e=(0,0,2,0,0,0)e=(0,0,2,0,0,0). Medir Z(h)Z(h) sobre el estado dañado da el valor propio ωh⋅e\omega^{h\cdot e}:

s1=ev(x)⋅e=2⋅2=4,s2=ev(x2)⋅e=4⋅2=8≡1.s_1=\mathrm{ev}(x)\cdot e=2\cdot2=4,\qquad s_2=\mathrm{ev}(x^2)\cdot e=4\cdot2=8\equiv1 .

Los X(h)X(h) dan síndrome 0, porque los XX no ven un error XX. Ahora llega el truco de Reed-Solomon. Un error de valor aa en el qudit del punto PP da s=(aP, aP2)s=(aP,\ aP^2). Así que el punto es P=s2/s1P=s_2/s_1 y el valor es a=s1/Pa=s_1/P:

P=1⋅4−1=1⋅2=2,a=4⋅2−1=4⋅4=16≡2.P=1\cdot4^{-1}=1\cdot2=2,\qquad a=4\cdot2^{-1}=4\cdot4=16\equiv2 .

El punto 2 es α2\alpha^2, el qudit 3, con valor 2. Se corrige aplicando X(e)−1X(e)^{-1}, es decir X5X^5 en el qudit 3. Un error ZZ lo detectan los X(h)X(h) del mismo modo (con valor propio ω−h⋅e\omega^{-h\cdot e}, por el signo del producto simpléctico). Los 6⋅48=2886\cdot48=288 errores de un solo qudit dan 288 síndromes distintos y no nulos, de los 74=24017^4=2401 posibles.

Fíjate en que es el mismo código clásico [6,4,3][6,4,3] usado dos veces: una contra los XX y otra contra los ZZ. En el curso de códigos los Reed-Solomon se decodificaban a partir de los símbolos recibidos (Decodificar Reed-Solomon y Corregir errores en Reed-Solomon). Aquí solo se dispone del síndrome. Es justo el punto de partida de decodificadores como Berlekamp-Massey, que se mencionan en la segunda de esas lecciones.

Sobre F8\mathbb{F}_8: el código [[7,1,4]]8[[7,1,4]]_8

El ejercicio 2 de la lección Códigos de Reed-Solomon usaba el [7,4,4][7,4,4] sobre F8=F2[x]/(x3+x+1)\mathbb{F}_8=\mathbb{F}_2[x]/(x^3+x+1), con α3=α+1\alpha^3=\alpha+1. Aquí n=7n=7, k=4k=4 y 2k=8>72k=8>7: su dual, generado por ev(x),ev(x2),ev(x3)\mathrm{ev}(x),\mathrm{ev}(x^2),\mathrm{ev}(x^3), está dentro. Sale un

[[7, 1, 4]]8,7−1=6=2(4−1),[[7,\ 1,\ 4]]_8,\qquad 7-1=6=2(4-1),

otro MDS cuántico. Cada qudit tiene 8 niveles, uno por elemento de F8\mathbb{F}_8. Como en el párrafo de la lección 12, X(a)∣x⟩=∣x+a⟩X(a)\ket{x}=\ket{x+a} y Z(b)∣x⟩=ωTr⁡(b⋅x)∣x⟩Z(b)\ket{x}=\omega^{\operatorname{Tr}(b\cdot x)}\ket{x}, con ω=−1\omega=-1 (porque p=2p=2) y la traza del cuerpo Tr⁡(c)=c+c2+c4\operatorname{Tr}(c)=c+c^2+c^4, que vale 0 o 1. Los estabilizadores son X(g)X(g) y Z(h)Z(h) con g,h∈C⊥g,h\in C^\perp, y hay un qudit lógico de 8 niveles:

∣jL⟩=1512∑y∈C⊥∣ j⋅1111111+y ⟩,j∈F8.\ket{j_L}=\frac{1}{\sqrt{512}}\sum_{y\in C^\perp}\ket{\,j\cdot1111111+y\,},\qquad j\in\mathbb{F}_8 .

Cada uno es una suma de 512 kets; Xˉ=X(a⋅1111111)\bar X=X(a\cdot1111111) suma aa a jj, y Z(b⋅1111111)∣jL⟩=(−1)Tr⁡(bj)∣jL⟩Z(b\cdot1111111)\ket{j_L}=(-1)^{\operatorname{Tr}(bj)}\ket{j_L}, porque 7=17=1 en F8\mathbb{F}_8 y las coordenadas de cada y∈C⊥y\in C^\perp suman 0 (por el repaso de arriba). Corrige un error en cualquiera de los 7 qudits, o hasta 3 borrones.

El relato completo y lo que viene

A mediados de los 90 parecía imposible proteger un cúbit: no se puede copiar, los errores son continuos y mirar destruye el estado. Shor (1995) respondió a los tres a la vez con 9 cúbits, y el formalismo de estabilizadores (Gottesman, 1996; su tesis, de 1997, lo expone entero) convirtió su truco en una teoría con síndromes, como la del curso de códigos. Con los códigos CSS (Calderbank y Shor, y Steane, 1996) cada par de códigos clásicos encajados da uno cuántico, y hoy has visto que los Reed-Solomon dan códigos cuánticos MDS, los de mayor distancia posible para su tamaño.

Lo que queda fuera del curso:

  • El código de 5 cúbits [[5,1,3]][[5,1,3]] (lo citamos en la lección 8): es el más pequeño que protege un cúbit lógico contra un error arbitrario en un cúbit, porque con k=1k=1 y d=3d=3 la cota de Singleton cuántica obliga a n≥5n\ge5. No es CSS.
  • Los códigos de superficie: cúbits en una cuadrícula y estabilizadores que solo tocan vecinos. Son la base de experimentos recientes como el de Google Quantum AI, «Quantum error correction below the surface code threshold» (Nature 638, 2025; publicado en línea en diciembre de 2024), en el que al agrandar el código bajó el error del cúbit lógico.
  • El umbral de error: si cada operación física falla con una probabilidad por debajo de un valor fijo (y el ruido cumple unas hipótesis razonables), se puede calcular tanto tiempo como se quiera con un error final tan pequeño como se desee (Gottesman, 2009, lo explica). Ahí está la frontera entre un cúbit lógico útil y uno que no lo es.

Para seguir: la guía de computación cuántica y, si te quedaste con ganas de Reed-Solomon, el curso de códigos correctores.

Ejercicios

Ejercicio 1

Con F7\mathbb{F}_7, n=6n=6 y k=5k=5: ¿contiene el Reed-Solomon a su dual? ¿Qué parámetros tiene el código cuántico? ¿Y con k=3k=3?

Ver la solución

Con k=5k=5, 2k=10>62k=10>6: sí. Su dual es {ev(b1x)}\{\mathrm{ev}(b_1x)\}, generado por (1,3,2,6,4,5)(1,3,2,6,4,5), que tiene grado 1<51<5. Sale un [[6, 2⋅5−6, 6−5+1]]7=[[6,4,2]]7[[6,\ 2\cdot5-6,\ 6-5+1]]_7=[[6,4,2]]_7: cuatro qudits lógicos, detecta un error (no lo corrige) o corrige un borrón. También es MDS: 6−4=2=2(2−1)6-4=2=2(2-1).

Con k=3k=3, 2k=6=n2k=6=n: no. El dual contiene ev(x3)=(1,6,1,6,1,6)\mathrm{ev}(x^3)=(1,6,1,6,1,6), que no es evaluación de ningún polinomio de grado menor que 3.

Ejercicio 2

En el [[6,2,3]]7[[6,2,3]]_7 del ejemplo, los estabilizadores Z(132645)Z(132645) y Z(124124)Z(124124) dan el síndrome (s1,s2)=(6,3)(s_1,s_2)=(6,3) y los XX dan (0,0)(0,0). ¿Qué error se produjo y cómo se corrige?

Ver la solución

Los XX no detectan nada, así que es un error XaX^a en un qudit. El punto es P=s2/s1=3⋅6−1=3⋅6=18≡4P=s_2/s_1=3\cdot6^{-1}=3\cdot6=18\equiv4 (porque 6⋅6=36≡16\cdot6=36\equiv1). El valor es a=s1/P=6⋅4−1=6⋅2=12≡5a=s_1/P=6\cdot4^{-1}=6\cdot2=12\equiv5.

El punto 4 es α4\alpha^4, el qudit 5. El error es X5X^5 en el qudit 5. Comprobación: s=(5⋅4, 5⋅16)=(20,80)≡(6,3)s=(5\cdot4,\ 5\cdot16)=(20,80)\equiv(6,3). Se corrige con X−5=X2X^{-5}=X^2 en el qudit 5.

Ejercicio 3

El ejercicio 3 de la lección Códigos de Reed-Solomon usaba el [255,223,33][255,223,33] sobre F256\mathbb{F}_{256}. ¿Contiene a su dual? ¿Qué código cuántico da, cuántos errores corrige y qué tasa kQ/nk_Q/n tiene?

Ver la solución

2k=446>2552k=446>255, así que sí. Da un [[255, 2⋅223−255, 33]]256=[[255,191,33]]256[[255,\ 2\cdot223-255,\ 33]]_{256}=[[255,191,33]]_{256}, que corrige ⌊32/2⌋=16\lfloor32/2\rfloor=16 errores en qudits de 256 niveles. Su tasa es 191/255≈74,9 %191/255\approx74{,}9\,\%, frente al 87,5 %87{,}5\,\% del código clásico: proteger contra XX y contra ZZ a la vez cuesta el doble de redundancia, 2(n−k)=642(n-k)=64 en lugar de 32.

En resumen

  • Con C1=C2=CC_1=C_2=C y C⊥⊆CC^\perp\subseteq C, la construcción CSS da 2k−n2k-n qudits lógicos, con estados ∣x+C⊥⟩\ket{x+C^\perp}.
  • Un Reed-Solomon de longitud n=q−1n=q-1 contiene a su dual si y solo si 2k>n2k>n: el dual son las evaluaciones de los polinomios sin término independiente de grado como mucho n−kn-k.
  • Sale un [[n,2k−n,n−k+1]]q[[n,2k-n,n-k+1]]_q que alcanza la cota de Singleton cuántica: es MDS cuántico.
  • Ejemplos: [[6,2,3]]7[[6,2,3]]_7 (corrige un error y lee su posición en el síndrome) y [[7,1,4]]8[[7,1,4]]_8.
  • El curso termina donde empieza la ingeniería: código de 5 cúbits, códigos de superficie y el umbral.

Fin del curso. Has recorrido el camino desde «no se sabe si es posible» hasta los Reed-Solomon cuánticos. Vuelve al índice del curso cuando quieras repasar.

Para profundizar