1 @c English version: 2013-08-03
3 * Introducción a grobner::
4 * Funciones y variables para grobner::
7 @node Introducción a grobner, Funciones y variables para grobner, Top, Top
8 @section Introducción a grobner
10 @code{grobner} es un paquete para operar con bases de Groebner en Maxima.
13 Para hacer uso de las funciones de este paquete es necesario cargar
14 previamente el archivo @file{grobner.lisp}:
21 Es posible ejecutar una demostración haciendo
33 Algunos de los cálculos de la demostración pueden llevar tiempo,
34 razón por la cual sus resultados se han guardado en el archivo
35 @file{grobner-demo.output}, que se encuentra en el mismo directorio
36 que el archivo de demostración.
38 @subsection Notas sobre el paquete grobner
39 El autor del paquete es
45 @url{http://alamos.math.arizona.edu}
48 habiendo sido distribuido el 24-05-2002 bajo los términos de la
49 General Public License (GPL) (ver archivo @file{grobner.lisp}). Esta
50 documentación ha sido extraída de los archivos
52 @file{README}, @file{grobner.lisp}, @file{grobner.demo} y @file{grobner-demo.output}
56 por G@"unter Nowak. Las sugerencias para mejorar la documentación
57 se pueden hacer en la lista de correos de @emph{maxima},
58 @email{maxima@@math.utexas.edu}.
60 El código está algo anticuado. Las implementaciones modernas utilizan
61 el algoritmo @emph{F4}, más rápido, descrito en
63 A new efficient algorithm for computing Gr@"obner bases (F4)
64 Jean-Charles Faug@`ere
65 LIP6/CNRS Université Paris VI
69 @subsection Implementaciones de órdenes admisibles de monomios
74 lexicográfico puro; orden por defecto para la comparación de
78 grado total, con empates resueltos por el
83 grado total, con empates resueltos por el
84 orden lexicográfico inverso.
88 orden lexicográfico inverso.
92 @node Funciones y variables para grobner, , Introducción a grobner, Top
93 @section Funciones y variables para grobner
95 @subsection Variables opcionales
97 @defvr {Variable opcional} poly_monomial_order
98 Valor por defecto: @code{lex}
100 Controla qué orden de monomios utiliza en los cálculos con
101 polinomios y bases de Groebner. Si no se le asigna valor alguno,
102 se utilizará @code{lex}.
106 @defvr {Variable opcional} poly_coefficient_ring
107 Valor por defecto: @code{expression_ring}
109 Indica el anillo de coeficientes de los polinomios que se va
110 a utilizar en los cálculos. Si no se le asigna ningún valor,
111 se utilizará el anillo de expresiones propio de @emph{maxima}.
112 A esta variable se le puede asignar el valor @code{ring_of_integers}.
115 @defvr {Variable opcional} poly_primary_elimination_order
116 Valor por defecto: @code{false}
118 Nombre del orden por defecto para las variables eliminadas en
119 las funciones basadas en eliminaciones. Si no se le asigna
120 ningún valor, se utilizará @code{lex}.
123 @defvr {Variable opcional} poly_secondary_elimination_order
124 Valor por defecto: @code{false}
126 Nombre del orden por defecto para las variables almacenadas
127 en funciones basadas en eliminaciones. Si no se le asigna
128 ningún valor, se utilizará @code{lex}.
131 @defvr {Variable opcional} poly_elimination_order
132 Valor por defecto: @code{false}
134 Nombre del orden de eliminación por defecto utilizado en
135 los cálculos de eliminación. Si se le asigna un valor,
136 ignorará los guardados en @code{poly_primary_elimination_order}
137 y @code{poly_secondary_elimination_order}.
138 El usuario se asegurará que este es un orden válido de eliminación.
141 @defvr {Variable opcional} poly_return_term_list
142 Valor por defecto: @code{false}
144 Si vale @code{true}, todas las funciones de este paquete devolverán
145 los polinomios como una lista de términos en el orden activo de
146 monomios, en lugar de una expresión ordinaria de @emph{maxima}.
149 @defvr {Variable opcional} poly_grobner_debug
150 Valor por defecto: @code{false}
152 Si vale @code{true}, genera una salida de seguimiento y depuración.
155 @defvr {Variable opcional} poly_grobner_algorithm
156 Valor por defecto: @code{buchberger}
160 @item @code{buchberger}
161 @item @code{parallel_buchberger}
162 @item @code{gebauer_moeller}
165 Es el nombre del algoritmo utilizado para encontrar las bases de Groebner.
168 @defvr {Variable opcional} poly_top_reduction_only
169 Valor por defecto: @code{false}
171 Si no vale @code{false}, siempre que sea posible el algoritmo
172 de división se detendrá tras la primera reducción.
175 @subsection Operadores simples
177 @code{poly_add}, @code{poly_subtract}, @code{poly_multiply} y @code{poly_expt}
178 son los operadores aritméticos para polinomios. Se ejecutan utilizando la
179 representación interna, pero los resultados se devuelven en forma de
180 expresión ordinaria de @emph{maxima}.
182 @deffn {Función} poly_add (@var{poly1}, @var{poly2}, @var{varlist})
183 Suma los polinomios @var{poly1} y @var{poly2}.
186 (%i1) poly_add(z+x^2*y,x-z,[x,y,z]);
193 @deffn {Función} poly_subtract (@var{poly1}, @var{poly2}, @var{varlist})
194 Resta el polinomio @var{poly2} de @var{poly1}.
197 (%i1) poly_subtract(z+x^2*y,x-z,[x,y,z]);
203 @deffn {Función} poly_multiply (@var{poly1}, @var{poly2}, @var{varlist})
204 Multiplica @var{poly1} por @var{poly2}.
207 (%i2) poly_multiply(z+x^2*y,x-z,[x,y,z])-(z+x^2*y)*(x-z),expand;
213 @deffn {Función} poly_s_polynomial (@var{poly1}, @var{poly2}, @var{varlist})
214 Devuelve el @emph{polinomio syzygy} (@emph{S-polinomio}) de dos polinomios @var{poly1} y @var{poly2}.
217 @deffn {Función} poly_primitive_part (@var{poly1}, @var{varlist})
218 Devuelve el polinomio @var{poly} dividido por el MCD de sus coeficientes.
221 (%i1) poly_primitive_part(35*y+21*x,[x,y]);
226 @deffn {Función} poly_normalize (@var{poly}, @var{varlist})
227 Devuelve el polinomio @var{poly} dividido por el coeficiente
228 principal. Da por supuesto que la división es posible, lo cual
229 puede no ser siempre cierto en anillos que no son campos.
232 @subsection Otras funciones
234 @deffn {Función} poly_expand (@var{poly}, @var{varlist})
235 Esta función expande los polinomios. Equivale a @code{expand(@var{poly})}
236 si @var{poly} es un polinomio. Si la representación no es compatible
237 con un polinomio de variables @var{varlist}, devuelve un error.
240 (%i1) poly_expand((x-y)*(y+x),[x,y]);
243 (%i2) poly_expand((y+x)^2,[x,y]);
246 (%i3) poly_expand((y+x)^5,[x,y]);
248 (%o3) y + 5 x y + 10 x y + 10 x y + 5 x y + x
249 (%i4) poly_expand(-1-x*exp(y)+x^2/sqrt(y),[x]);
252 (%o4) - x %e + ------- - 1
255 (%i5) poly_expand(-1-sin(x)^2+sin(x),[sin(x)]);
257 (%o5) - sin (x) + sin(x) - 1
262 @deffn {Función} poly_expt (@var{poly}, @var{number}, @var{varlist})
263 Eleva el polinomio @var{poly} a la potencia @var{number}, siendo este un entero
264 positivo. Si @var{number} no es un número entero positivo, devolverá un error.
267 (%i1) poly_expt(x-y,3,[x,y])-(x-y)^3,expand;
272 @deffn {Función} poly_content (@var{poly}. @var{varlist})
273 @code{poly_content} calcula el MCD de los coeficientes.
276 (%i1) poly_content(35*y+21*x,[x,y]);
281 @deffn {Función} poly_pseudo_divide (@var{poly}, @var{polylist}, @var{varlist})
282 Realiza la seudo-división del polinomio @var{poly} por la
283 lista de @math{n} polinomios de @var{polylist}.
284 Devuelve varios resultados. El primer resultado es una lista de
285 cocientes @math{a}. El segundo resultado es el resto @math{r}. El
286 tercer resultado es un coeficiente escalar @math{c}, tal que @math{c*poly}
287 puede dividirse por @var{polylist} dentro del anillo de coeficientes, el
288 cual no es necesariamente un campo. Por último, el cuarto resultado es
289 un entero que guarda el recuento de reducciones realizadas. El objeto
290 resultante satisface la ecuación:
294 $$c*poly=\sum_{i=1}^{n}({a}_{i}*{polylist}_{i})+r$$
298 @math{c*poly=sum(a[i]*polylist[i],i=1...n)+r}.
302 @deffn {Función} poly_exact_divide (@var{poly1}, @var{poly2}, @var{varlist})
303 Divide el polinomio @var{poly1} por otro polinomio @var{poly2}. Da por supuesto
304 que es posible la división de resto nulo. Devuelve el cociente.
307 @deffn {Función} poly_normal_form (@var{poly}, @var{polylist}, @var{varlist})
308 @code{poly_normal_form} encuentra la forma normal de un polinomio @var{poly} respecto
309 de un conjunto de polinomios @var{polylist}.
312 @deffn {Función} poly_buchberger_criterion (@var{polylist}, @var{varlist})
313 Devuelve @code{true} si @var{polylist} es una base de Groebner respecto del orden
314 de términos activo, utilizando el criterio de Buchberger:
315 para cualesquiera polinomios @math{h1} y @math{h2} de @var{polylist} el
316 S-polinomio @math{S(h1,h2)} se reduce a 0 @math{modulo} @var{polylist}.
320 @deffn {Función} poly_buchberger (@var{polylist_fl} @var{varlist})
321 @code{poly_buchberger} ejecuta el algoritmo de Buchberger sobre una
322 lista de polinomios y devuelve la base de Groebner resultante.
327 @subsection Postprocesamiento estándar de bases de Groebner
331 El \emph{k-ésimo ideal de eliminación} $I_k$ de un ideal $I$ sobre
332 $K [ x_1, ...,x_1 ]$ es $I \cap K [ x_{k + 1}, ..., x_n ]$.
335 El \emph{ideal} $I : J$ es el ideal $\{ h|\forall w \in J : wh \in
339 El ideal $I : p^{\infty}$ es el ideal $\{ h|\exists n \in N : p^n h \in I \}$.@*
342 El ideal $I : J^{\infty}$ es el ideal $\{ h|\exists n \in N, \exists p \in J: p^n h \in I \}$.@*
345 El \emph{ideal radical} $\sqrt{I}$ es el ideal $\{ h| \exists n \in N : h^n \in I \}$.@*
351 El @emph{k-ésimo ideal de eliminación} @math{I_k} de un ideal @math{I} sobre
352 @math{K[ x[1],...,x[n] ]} es el ideal @math{intersect(I, K[ x[k+1],...,x[n] ])}.@*
354 El @emph{ideal} @math{I:J} es el ideal @math{@{h|para todo w en J: w*h pertence a I@}}.@*
356 El ideal @math{I:p^inf} es el ideal @math{@{h| existe un n en N: p^n*h pertence a I@}}.@*
358 El ideal @math{I:J^inf} es el ideal @math{@{h| existe un n en N y un p en J: p^n*h pertence a I@}}.@*
360 El @emph{ideal radical} @math{sqrt(I)} es el ideal @math{@{h| existe un n en N : h^n pertence a I @}}.
364 @deffn {Función} poly_reduction (@var{polylist}, @var{varlist})
365 @code{poly_reduction} reduce una lista de polinomios @var{polylist} de manera
366 que cada polinomio se reduce completamente respecto de los otros polinomios.
369 @deffn {Función} poly_minimization (@var{polylist}, @var{varlist})
370 Devuelve una sublista de la lista de polinomios @var{polylist} con
371 el mismo ideal de monomios que @var{polylist}, pero mínimo,
372 esto es, ningún monomio principal de los polinomios de la sublista divide
373 a los monomios principales de los demás polinomios.
378 @deffn {Función} poly_normalize_list (@var{polylist}, @var{varlist})
379 @code{poly_normalize_list} aplica @code{poly_normalize} a cada polinomio
380 de la lista. Esto significa que divide cada polinomio de @var{polylist}
381 por su coeficiente principal.
385 @deffn {Función} poly_grobner (@var{polylist}, @var{varlist})
386 Devuelve la base de Groebner del ideal asociado a los polinomios
387 de @var{polylist}. El resultado depende de las variables globales.
390 @deffn {Función} poly_reduced_grobner (@var{polylist}, @var{varlist})
391 Devuelve la base de Groebner reducida del ideal asociado a los polinomios
392 de @var{polylist}. El resultado depende de las variables globales.
396 @deffn {Función} poly_depends_p (@var{poly}, @var{var}, @var{varlist})
397 @code{poly_depends} comprueba si el polinomio depende de la variable @var{var}.
401 @deffn {Función} poly_elimination_ideal (@var{polylist}, @var{n}, @var{varlist})
402 @code{poly_elimination_ideal} devuelve la base de Groebner del @math{n}-ésimo
403 ideal de eliminación de un ideal especificado como una lista de polinomios
404 generadores (no necesariamente una base de Groebner).
407 @deffn {Función} poly_colon_ideal (@var{polylist1}, @var{polylist2}, @var{varlist})
408 Devuelve la base de Groebner reducida del ideal
410 @math{I(polylist1):I(polylist2)}
413 siendo @math{polylist1} y @math{polylist2} dos listas de polinomios.
416 @deffn {Función} poly_ideal_intersection (@var{polylist1}, @var{polylist2}, @var{varlist})
418 @code{poly_ideal_intersection} devuelve la intersección de dos ideales.
421 @deffn {Función} poly_lcm (@var{poly1}, @var{poly2}, @var{varlist})
422 Devuelve el MCM de @var{poly1} y @var{poly2}.
425 @deffn {Función} poly_gcd (@var{poly1}, @var{poly2}, @var{varlist})
426 Devuelve el MCD de @var{poly1} y @var{poly2}.
428 Véanse también @code{ezgcd}, @code{gcd}, @code{gcdex} y
434 (%i1) p1:6*x^3+19*x^2+19*x+6;
436 (%o1) 6 x + 19 x + 19 x + 6
437 (%i2) p2:6*x^5+13*x^4+12*x^3+13*x^2+6*x;
439 (%o2) 6 x + 13 x + 12 x + 13 x + 6 x
440 (%i3) poly_gcd(p1, p2, [x]);
446 @deffn {Función} poly_grobner_equal (@var{polylist1}, @var{polylist2}, @var{varlist})
447 @code{poly_grobner_equal} comprueba si dos bases de Groebner generan el mismo
448 ideal. Devuelve @code{true} si dos listas de polinomios @var{polylist1} y @var{polylist2},
449 supuestas bases de Groebner, generan el mismo ideal, o @code{false} en caso contrario.
450 Eso equivale a comprobar si cada polinomio de la primera base se reduce a 0
451 módulo la segunda base y viceversa. Nótese que en el ejemplo que sigue la
452 primera lista no es una base de Groebner, por lo que el resultado es @code{false}.
455 (%i1) poly_grobner_equal([y+x,x-y],[x,y],[x,y]);
461 @deffn {Función} poly_grobner_subsetp (@var{polylist1}, @var{polylist2}, @var{varlist})
462 @code{poly_grobner_subsetp} comprueba si el ideal generado por @var{polylist1}
463 está contenido en el ideal generado por @var{polylist2}. Para que esta comprobación
464 tenga éxito, @var{polylist2} debe ser una base de Groebner.
467 @deffn {Función} poly_grobner_member (@var{poly}, @var{polylist}, @var{varlist})
468 Devuelve @code{true} si el polinomio @var{poly} pertenece al ideal generado por la
469 lista de polinomios @var{polylist}, la cual se supone una base de Groebner.
470 Devolverá @code{false} en caso contrario.
473 @deffn {Función} poly_ideal_saturation1 (@var{polylist}, @var{poly}, @var{varlist})
474 Devuelve la base de Groebner reducida de la saturación del ideal
477 $$I(polylist):poly^\infty$$
486 Desde un punto de vista geométrico, sobre un campo algebraicamente
487 cerrado, este es el conjunto de polinomios del ideal generado por
488 @var{polylist} que no se anulan sobre la variedad de @var{poly}.
491 @deffn {Función} poly_ideal_saturation (@var{polylist1}, @var{polylist2}, @var{varlist})
492 Devuelve la base de Groebner reducida de la saturación del ideal
495 $$I(polylist1):I(polylist2)^\infty$$
500 I(polylist1):I(polylist2)^inf
504 Desde un punto de vista geométrico, sobre un campo algebraicamente
505 cerrado, este es el conjunto de polinomios del ideal generado por
506 @var{polylist1} que no se anulan sobre la variedad de @var{polylist2}.
509 @deffn {Función} poly_ideal_polysaturation1 (@var{polylist1}, @var{polylist2}, @var{varlist})
510 @var{polylist2} es una lista de n poliomios @code{[poly1,...,polyn]}.
511 Devuelve la base de Groebner reducida del ideal
514 $$I(polylist):poly1^\infty:...:polyn^\infty$$
519 I(polylist):poly1^inf:...:polyn^inf
523 obtenida a partir de una secuencia de saturaciones sucesivas de
524 los polinomios de la lista @var{polylist2} del ideal generado
525 por la lista de polinomios @var{polylist1}.
528 @deffn {Función} poly_ideal_polysaturation (@var{polylist}, @var{polylistlist}, @var{varlist})
529 @var{polylistlist} es una lista de n listas de polinomios @code{[polylist1,...,polylistn]}.
530 Devuelve la base de Groebner reducida de la saturación del ideal
533 $$I(polylist):I(polylist_1)^\infty:...:I(polylist_n)^\infty$$
538 I(polylist):I(polylist_1)^inf:...:I(polylist_n)^inf
542 @deffn {Función} poly_saturation_extension (@var{poly}, @var{polylist}, @var{varlist1}, @var{varlist2})
543 @code{poly_saturation_extension} ejecuta el truco de Rabinowitz.
546 @deffn {Función} poly_polysaturation_extension (@var{poly}, @var{polylist}, @var{varlist1}, @var{varlist2})