Seção 16.5 Una Aplicación al Diseño de Software
El Teorema Chino de los Restos es un resultado de teoría elemental de números sobre las soluciones simultáneas de sistemas de congruencias. El matemático chino Sun-tsï escribió sobre este teorema en el siglo primero D.C. Este teorema tiene interesantes consecuencias en el diseño de software para el uso de procesadores en paralelo.
Lema 16.5.1.
Sean \(m\) y \(n\) enteros positivos tales que \(\gcd( m, n) = 1\text{.}\) Entonces para \(a, b \in {\mathbb Z}\) el sistema
tiene solución. Si \(x_1\) y \(x_2\) son dos soluciones del sistema, entonces \(x_1 \equiv x_2 \pmod{mn}\text{.}\)
Demonstração.
La ecuación \(x \equiv a \pmod{m}\) tiene solución pues \(a + km\) satisface la ecuación para todo \(k \in {\mathbb Z}\text{.}\) Debemos mostrar que existe un entero \(k_1\) tal que
Esto es equivalente a mostrar que
tiene solución para \(k_1\text{.}\) Como \(m\) y \(n\) son relativamente primos, existen enteros \(s\) y \(t\) tales que \(ms + nt = 1\text{.}\) Concluimos que,
o
Ahora sea \(k_1 = (b-a)s\text{.}\)
Para mostrar que dos soluciones cualquiera son congruentes módulo \(mn\text{,}\) sean \(c_1\) y \(c_2\) dos soluciones del sistema. Es decir,
para \(i = 1, 2\text{.}\) Entonces
por lo tanto, tanto \(m\) como \(n\) dividen a \(c_1 - c_2\text{.}\) Concluimos que \(c_2 \equiv c_1 \pmod{mn}\text{.}\)
Exemplo 16.5.2.
Resolvamos el sistema
Usando el algoritmo de Euclides, podemos encontrar enteros \(s\) y \(t\) tales que \(4s + 5t = 1\text{.}\) Una posibilidad para tales enteros es \(s = 4\) y \(t = -3\text{.}\) Concluimos que
Teorema 16.5.3. Teorema Chino de los Restos.
Sean \(n_1, n_2, \ldots, n_k\) enteros positivos tales que \(\gcd(n_i, n_j) = 1\) para \(i \neq j\text{.}\) Entonces para enteros cualesquiera \(a_1, \ldots, a_k\text{,}\) el sistema
tiene solución. Más aún, dos soluciones cualquiera del sistema son congruentes módulo \(n_1 n_2 \cdots n_k\text{.}\)
Demonstração.
Procederemos por inducción en el número de ecuaciones en el sistema. Si hay \(k= 2\) ecuaciones, entonces el teorema es cierto por el Lema 16.5.1. Ahora supongamos que el resultado es verdadero para un sistema de \(k\) o menos ecuaciones y que deseamos encontrar una solución de
Considerando las primeras \(k\) ecuaciones, existe una solución que es única módulo \(n_1 \cdots n_k\text{,}\) digamos \(a\text{.}\) Como \(n_1 \cdots n_k\) y \(n_{k+1}\) son relativamente primos, el sistema
tiene una solución que es única módulo \(n_1 \ldots n_{k+1}\) por el lema.
Exemplo 16.5.4.
Resolvamos el sistema
Del Ejemplo 16.5.2 sabemos que 19 es una solución de las primeras dos congruencias y cualquier otra solución del sistema es congruente a \(19 \pmod{20}\text{.}\) Luego, podemos reducir el sistema a un sistema de tres congruencias:
Resolviendo las siguientes dos ecuaciones, podemos reducir el sistema a
Resolviendo este último sistema, encontramos que 19 es una solución para el sistema que es única módulo 1260.
Una aplicación interesante del Teorema Chino de los Restos en el diseño de software computacional es que el teorema nos permite descomponer un cálculo que involucre enteros grandes en varios cálculos menos grandes. Un computador puede trabajar con enteros solamente hasta cierto tamaños debido al tamaño de su procesador, que usualmente es un procesador de 32 o 64-bit. Por ejemplo, el mayor entero disponible en un computador con un procesador de 64-bit es
Procesadores mayores como 128 o 256-bit han sido propuesto o están en desarrollo. Incluso se habla de un procesador de 512-bit. El mayor entero que tal procesador podría almacenar sería \(2^{511} - 1\text{,}\) que es un número de 154 dígitos. Sin embargo, necesitaríamos trabajar con números mucho más grandes para romper sofisticados métodos de encriptación.
Se requiere software especial para cálculos con enteros mayores que no pueden ser sumados directamente por la máquina. Usando el Teorema Chino de los Restos podemos descomponer sumas y multiplicaciones de enteros grandes en cálculos que el computador pueda hacer de forma directa. Esto es especialmente útil para el procesamiento paralelo.
La mayor parte de los computadores tiene una única unidad central de proceso (CPU) que contiene un chip procesador que puede sumar solo dos números a la vez. Para sumar una lista de diez números, la CPU debe hacer nueve sumas sucesivamente. Sin embargo un computador de procesamiento paralelo tiene más de una CPU. Un computador con 10 CPUs, por ejemplo, puede hacer 10 operaciones diferentes al mismo tiempo. Si podemos tomar un entero grande y descomponerlo en sus partes, enviando cada una de las partes a una CPU diferente, entonces haciendo sumas y multiplicaciones en paralelo, podemos trabajar con enteros con los que el computador no podría trabajar directamente.
Exemplo 16.5.5.
Supongamos que deseamos multiplicar 2134 por 1531. Usaremos los enteros 95, 97, 98, y 99 pues estos son relativamente primos. Descomponemos cada uno de los enteros en cuatro partes:
y
Multiplicando las ecuaciones correspondientes, obtenemos
Cada uno de estos cálculos puede ser enviado a un procesador diferente si nuestro computador tiene varias CPU. Por el cálculo anterior, sabemos que \(2134 \cdot 1531\) es una solución de este sistema
El Teorema Chino de los Restos que la solución es única módulo \(95 \cdot 97 \cdot 98 \cdot 99 = \text{89,403,930}\text{.}\) Resolviendo el sistema para \(x\) nos dice que \(2134 \cdot 1531 = \text{3,267,154}\text{.}\)
La conversión del cálculo en sus cuatro componentes tomará cierto tiempo de cálculo. Además, resolver el sistema de congruencias puede tomar un tiempo considerable. A pesar de ello, si tenemos muchos cálculos que realizar en un conjunto particular de números, tiene sentido transformar el problema como hicimos arriba y hacer los cálculos necesarios de forma simultánea.
Sage.
Los Anillos están en el núcleo del diseño de Sage por lo que encontraremos una gran variedad de posibilidades para calcular con anillos y con cuerpos. Ideales, cocientes, y homomorfismos están todos disponibles.