El algoritmo F4 fue propuesto por Jean-Charles Faugeré en 1999 como un nuevo algoritmo eficiente de cálculo de la base de Gröbner [1] . Este algoritmo calcula la base de Gröbner de un ideal en un anillo polinomial utilizando una serie de procedimientos estándar de álgebra lineal: reducciones de matrices. Es uno de los más rápidos hasta la fecha.
tal que
Entrada:
Salida: subconjunto finito
mientras lo haces
para hacer
devolver
Algoritmo de reducciónAhora podemos extender la definición de módulo de reducción de polinomios
subconjunto , hasta la reducción del subconjunto por
módulo otro subconjunto :
Entrada: L, G subconjuntos finitos
Salida: subconjuntos finitos (puede estar vacío)
devolver
No se utiliza ninguna operación aritmética: se trata de un preprocesamiento simbólico.
Algoritmo de preprocesamiento simbólicoEntrada: L, G subconjuntos finitos
Salida: subconjuntos finitos
mientras lo haces
si se lanza desde arriba módulo entonces
existe
devolver
LemaPara todos los polinomios tenemos
Teorema (sin demostración)El algoritmo calcula la base de Gröbner G en
tal que
Comentario
Si # es para todos , entonces el algoritmo se reduce al algoritmo de Buchberger . En este caso, la función Sel es la estrategia de selección equivalente al algoritmo de Buchberger.
Función de selecciónEntrada : lista de pares críticos
Salida : lista de pares críticos
devolver
Llamamos a esta estrategia la estrategia normal para .
Por tanto, si los polinomios de entrada son uniformes, llegamos a la potencia y d es la base de Gröbner.
En el siguiente paso, elegimos todos los pares críticos necesarios para calcular la base de Gröbner elevada a d+1.
Hay varias formas de optimizar el algoritmo:
Algoritmo de criterios de Buchberger - implementación:
Entrada:
Salida: subconjunto final de la lista actualizada de pares críticos
Pseudocódigo del algoritmo F4 (con criterio)Entrada:
Salida: subconjunto finito de .
mientras lo haces
mientras lo haces
por
devolver
Sea un conjunto finito de polinomios . Sobre la base de este conjunto, se construye una gran matriz dispersa, cuyas filas corresponden a polinomios de , y las columnas corresponden a monomios. La matriz contiene los coeficientes de polinomios en los monomios correspondientes. Las columnas de la matriz se ordenan según el orden monomio seleccionado (el monomio más alto corresponde a la primera columna). La reducción de tal matriz a una forma escalonada permite encontrar la base del tramo lineal de polinomios en el espacio de polinomios.
Supongamos que en el algoritmo clásico de Buchberger se requiere realizar un paso de reducción del polinomio con respecto a , y al mismo tiempo se debe multiplicar por un monomio . En el algoritmo F4, y se colocará especialmente en la matriz . Se afirma que es posible preparar por adelantado un conjunto de todos los posibles reductores de multiplicación que pueden ser necesarios y colocarlos por adelantado en una matriz. [2]
Generalizamos el algoritmo F4 [3] :
necesitamos reducir el polinomio con respecto al conjunto . Para esto nosotros
(1) agregar a la matriz;
(2) construimos el soporte del polinomio (el conjunto de monomios);
(3) si está vacío, finalizar el procedimiento;
(4) elegir el monomio máximo en (y descartarlo de );
(5) si no es divisible por ninguno de los elementos monomio más altos , vaya al paso (3);
(6) en caso contrario elegimos el reductor ∈ (y el factor adicional ): entonces ;
(7) agregar a la matriz;
(8) agregue monomios del polinomio (excepto el más alto ) al conjunto ;
(9) vaya al paso (3).
Este procedimiento para rellenar una matriz con reductores multiplicados se denomina preprocesamiento simbólico . Además, en lugar de S-polinomios, puede colocar sus partes izquierda y derecha en la matriz (al reducir una fila por otra, obtiene automáticamente un S-polinomio).
Finalmente, la tercera diferencia con el algoritmo de Buchberger es que en el algoritmo F4 se permite colocar partes de varios S-polinomios elegidos de acuerdo con alguna estrategia en una matriz. Entonces, si se selecciona un polinomio S en cada paso, se repite el algoritmo clásico de Buchberger .
El otro extremo es cuando el conjunto de todos los S-polinomios disponibles se reduce en el siguiente paso. Esto tampoco es muy eficiente debido al gran tamaño de las matrices. El autor del algoritmo J.-Sh. Faugère propuso una estrategia normal para elegir S-polinomios para la reducción [4] , según la cual se eligen S-polinomios con el menor grado de lados izquierdo y derecho. Da buenos resultados empíricos para ordenar DegRevLex y su elección es natural para ideales homogéneos.
Se pueden hacer varias mejoras naturales al algoritmo. Como en el algoritmo clásico para calcular la base de Gröbner , los criterios de Buchberger se pueden utilizar para filtrar polinomios S obviamente innecesarios.
Algoritmo F4 implementado
Tarea: Calcular la base de Gröbner para polinomios Primero , asignamos
1) Preprocesamiento de símbolos
Estoy listo ahora.
2) Preprocesamiento de símbolos
desde arriba se reduce a .
3) Preprocesamiento de símbolos
no se reduce a .
cuatro)
Representación matricial de la resultante :
Reducción gaussiana de la matriz resultante :
De esta matriz obtenemos:
Y desde entonces
y entonces
Para el siguiente paso, debemos considerar
De aquí
En el preprocesamiento simbólico, puede intentar simplificar utilizando los cálculos anteriores:
Por ejemplo, 1) Preprocesamiento de símbolos
2) Preprocesamiento de símbolos
3) Preprocesamiento de símbolos
Describamos la simplificación
Propósito: reemplazar cualquier producto con el producto , donde es la cadena previamente calculada, y divide el monomio
En la primera versión del algoritmo: algunas filas de la matriz nunca se usan (filas en la matriz ).
Nueva versión del algoritmo: guardamos estas cadenas
SIMPLIFY intenta reemplazar el producto con el producto , donde
cadena ya calculada en reducción gaussiana, y ut divide el monomio m; Si hemos encontrado el mejor producto, llamamos recursivamente a la función SIMPLIFY:
Entrada:
Salida: El resultado es equivalente a
para hacer
si
si
devolver
de lo contrario volver
devolver
Algoritmo PREPROCESAMIENTO SIMBÓLICO
Entrada:
Salida: subconjunto finito de .
mientras lo haces
si se lanza desde arriba módulo entonces
existe
devolver
Ahora volvamos al ejemplo.
4) Preprocesamiento de símbolos
Y así....
5) Preprocesamiento de símbolos
Después de la reducción de Gauss:
y
En el siguiente paso tenemos:
y llame recursivamente a la simplificación:
En el siguiente paso tenemos:
y
Después de algunos cálculos, resulta que el rango es 5.
Esto significa que hay una anulación inútil.
En el siguiente paso tenemos:
y
Preprocesamiento de símbolos