Lección 2 de 11
Cuerpos finitos: sumar y multiplicar con pocos símbolos
Qué es un cuerpo finito, por qué los códigos lo necesitan y cómo se construyen Z_p, F_4 y F_8 con sus tablas de sumar y multiplicar.
Borrador: pendiente de que lo revise el autor. Esta página no aparece en Google.
Al terminar sabrás:
- Explicar por qué el alfabeto de un código lineal debe ser un cuerpo
- Calcular en Z_p con p primo y ver por qué Z_4 no es un cuerpo
- Sumar y multiplicar en F_4 y en F_8
- Saber para qué tamaños existe un cuerpo finito
Si sabes multiplicar matrices, resolver un sistema de ecuaciones lineales y operar con polinomios (sumar, multiplicar, dividir), puedes seguirlo. Lo demás (aritmética módulo 2, subespacios, cuerpos finitos) se explica sobre la marcha.
En la lección anterior los símbolos eran bits y casi no necesitamos hacer cuentas con ellos. A partir de ahora sí: para construir códigos buenos hay que sumar palabras, multiplicarlas por números y resolver sistemas de ecuaciones, igual que en álgebra lineal. Para eso los símbolos deben comportarse como números normales. Los bits lo hacen (con ), pero un código potente como el de los QR o el de un CD trabaja con bytes, que son 256 símbolos distintos. ¿Cómo se suman y se multiplican bytes de forma que todo siga funcionando? La respuesta son los cuerpos finitos.
La idea
En álgebra lineal usas los números reales: puedes sumar, restar, multiplicar y, lo importante, dividir entre cualquier número distinto de cero. Eso es lo que permite despejar una incógnita o aplicar Gauss sin que nada se rompa. Un conjunto con esas cuatro operaciones y las propiedades de siempre se llama cuerpo.
Los reales son infinitos, y en un código necesitamos un alfabeto finito. ¿Existen cuerpos con un número finito de elementos? Sí, y se llaman cuerpos finitos. Los bits con la aritmética módulo 2 son el más pequeño. Hay cuerpos de 3, 4, 5, 7, 8, 9, 11… elementos, y uno de 256 elementos, que es el que usan los QR y la demo del curso.
Repaso Qué es un cuerpo
Un cuerpo es un conjunto con una suma y una multiplicación que cumplen: son conmutativas y asociativas, la multiplicación se reparte sobre la suma, existen el 0 (neutro de la suma) y el 1 (neutro de la multiplicación, con ), todo elemento tiene opuesto y, además, todo elemento distinto de 0 tiene inverso multiplicativo. Esa última condición es la que permite dividir. Los racionales, los reales y los complejos son cuerpos; los enteros no lo son, porque el 2 no tiene inverso entero.
Los enteros módulo p
La construcción más sencilla es la «aritmética del reloj». Fijado un entero , con la suma y el producto usuales, tomando siempre el resto de dividir entre . Por ejemplo, en : y .
Si es primo, es un cuerpo, que se escribe también . La razón es que todo elemento no nulo tiene inverso. En , los inversos son:
| 1 | 2 | 3 | 4 | 5 | 6 | |
|---|---|---|---|---|---|---|
| 1 | 4 | 5 | 2 | 3 | 6 |
(por ejemplo ). Con inversos, se puede dividir: .
Si no es primo, no es un cuerpo. Mira : . Dos números no nulos que al multiplicarse dan 0. Entonces el 2 no puede tener inverso (si lo tuviera, multiplicando por él saldría ) y ecuaciones tan simples como no tienen solución, mientras que tiene dos: y . Por eso no es un espacio vectorial y la teoría de este curso (subespacios, bases, dimensión, Gauss) no se le aplica. Existen códigos sobre el anillo , como los de Kerdock y Preparata, pero son otra historia. Para tener 4 símbolos usaremos otro conjunto de 4 elementos que sí es un cuerpo, y lo construimos enseguida.
Cuerpos de elementos
¿Qué tamaños admiten un cuerpo? Se sabe que existe un cuerpo finito de elementos si y solo si es una potencia de un primo, , y que, salvo renombrar los elementos, es único. Se escribe . Así que hay un cuerpo de 2, 3, 4, 5, 7, 8, 9… elementos, pero ninguno de 6, 10 ni 12.
Para construir se usa una idea que ya conoces de , pero con polinomios: se trabaja con polinomios en con coeficientes en y se toma el resto al dividir entre un polinomio irreducible de grado (que no se pueda factorizar), igual que antes se tomaba el resto al dividir entre un primo.
Repaso Restos de polinomios
Dividir polinomios es como dividir enteros: el resto tiene grado menor que el divisor. Trabajar «módulo » significa sustituir cada polinomio por su resto. Basta con recordar la regla (en coeficientes módulo 2, , así que equivale a ) y aplicarla cada vez que aparece . Con coeficientes binarios todo polinomio de grado menor que 2 es , , o : cuatro posibilidades.
El cuerpo
El polinomio es irreducible sobre : no vale 0 ni en ni en , así que no tiene raíces, y un polinomio de grado 2 sin raíces no se factoriza (si se factorizara, tendría un factor de grado 1, es decir, una raíz). Así que nos inventamos una.
Repaso Inventar una raíz
La ecuación no tiene solución real, así que se inventa un número con y se trabaja con ; cada vez que sale , se cambia por . Aquí hacemos lo mismo: no tiene raíces en , así que inventamos un símbolo con y trabajamos con , con . Cada vez que sale , se cambia por . Por ejemplo, . No hace falta saber «qué es» : basta con la regla.
Sea, pues, una raíz de , es decir, . Entonces
La suma es la de polinomios con coeficientes módulo 2. La multiplicación usa la regla . Las tablas son:
| 0 | 1 | |||
|---|---|---|---|---|
| 0 | 0 | 1 | ||
| 1 | 1 | 0 | ||
| 0 | 1 | |||
| 1 | 0 |
| 0 | 1 | |||
|---|---|---|---|---|
| 0 | 0 | 0 | 0 | 0 |
| 1 | 0 | 1 | ||
| 0 | 1 | |||
| 0 | 1 |
Por ejemplo, y . Ahora sí: en cada fila de la tabla del producto, salvo la del 0, aparece un 1, es decir, todo elemento no nulo tiene inverso. Nótese que no es : aquí (todos los elementos son su propio opuesto), mientras que en .
El cuerpo
Igual, pero con un polinomio irreducible de grado 3: . No tiene raíces en , y un polinomio de grado 3 que se factoriza tiene un factor de grado 1, es decir, una raíz; así que es irreducible. Sea una raíz: . Los elementos son los polinomios de grado menor que 3 en , es decir, con : ocho en total. Y aquí ocurre algo muy útil. Calculando las potencias de aparecen todos los elementos no nulos:
| potencia | polinomio en | vector |
|---|---|---|
y . Ojo con el orden: el vector es , con el término constante primero. Cada fila sale de la anterior multiplicando por y usando : por ejemplo, y .
Esta tabla es una «calculadora» completa de con dos reglas:
- Sumar es sumar los vectores módulo 2 (columna de la derecha).
- Multiplicar es sumar los exponentes módulo 7: , con .
Todo elemento no nulo es una potencia de ; a un elemento con esa propiedad se le llama primitivo. Todo cuerpo finito tiene alguno (es un teorema que aquí aceptamos sin demostrar), y eso es lo que hace tan cómodo calcular con ellos, y lo usaremos para los códigos de Reed-Solomon.
Ejemplo resuelto
Vamos a calcular en el producto de dos maneras y a resolver un sistema.
Producto, a la fuerza bruta. Desarrollamos y reducimos con y :
porque los dos se anulan y de los tres queda uno.
Producto, con la tabla. Según la tabla, y . Multiplicamos sumando exponentes: . Sale lo mismo, y mucho más rápido.
Un sistema. Resolvamos en
De la primera, . Sustituimos en la segunda: , es decir, . Como y :
(Dividir es restar exponentes, siempre módulo 7: .) Y entonces . Comprobamos en la segunda ecuación: . La solución es , , única: justo lo que garantiza que estemos en un cuerpo.
Para qué sirve esto
Cuando en las próximas lecciones el alfabeto sea , los códigos lineales serán subespacios de y todo el álgebra lineal funcionará como la conoces. En los códigos binarios, . En los de Reed-Solomon de las lecciones 9 a 11 usaremos para el ejemplo. En la práctica, los QR, los CD y la demo usan (llamado a veces GF(256), de ): cada símbolo es un byte, sumar bytes es hacer el «o exclusivo» bit a bit y multiplicarlos sigue la misma idea que en , con un polinomio irreducible de grado 8.
Ejercicios
Ejercicio 1
En , calcula y resuelve .
Ver la solución
Buscamos con . Probando, , así que . Entonces , es decir, . Comprobación: , que da 4.
Ejercicio 2
Con la tabla de , calcula: a) ; b) ; c) ; d) el inverso de .
Ver la solución
a) Sumamos exponentes: .
b) y . Su suma es .
c) y . Su suma es .
d) Buscamos con : . El inverso de es , porque .
Ejercicio 3
Explica por qué no es un cuerpo. Después resuelve en la ecuación .
Ver la solución
En , con y no nulos, así que ni el 2 ni el 3 tienen inverso (como en con el 2). Tampoco existe ningún cuerpo de 6 elementos, porque 6 no es potencia de un primo.
Para la ecuación en : . Entonces . Comprobación: .
En resumen
- Para hacer álgebra lineal con los símbolos de un código necesitamos un cuerpo: sumar, restar, multiplicar y dividir entre lo no nulo.
- con primo es un cuerpo; o no lo son, porque tienen divisores de cero.
- Existe un cuerpo de elementos si y solo si es potencia de un primo, y se construye con polinomios módulo uno irreducible.
- En , sumar es sumar vectores módulo 2 y multiplicar es sumar exponentes de módulo 7.
- Los QR, los CD y la demo trabajan con : cada símbolo es un byte.
Siguiente lección: Códigos lineales: un código que es un subespacio
Pruébalo: Raya y corrige
Para profundizar
- V. Guruswami, A. Rudra y M. Sudan, Essential Coding Theory (2023).
- W. C. Huffman y V. Pless, Fundamentals of Error-Correcting Codes, Cambridge University Press (2003).
- R. M. Roth, Introduction to Coding Theory, Cambridge University Press (2006).