Rename specvar integer-info to *integer-info*
[maxima.git] / doc / info / es / grobner.texi
blob98733b6b1da500e38348990ad8a7d4a3f7ab9bef
1 @c English version: 2013-08-03
2 @menu
3 * Introducción a grobner::
4 * Funciones y variables para grobner::
5 @end menu
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.
12 @noindent
13 Para hacer uso de las funciones de este paquete es necesario cargar 
14 previamente el archivo @file{grobner.lisp}:
16 @example
17 load("grobner");
18 @end example
20 @noindent
21 Es posible ejecutar una demostración haciendo
22 @example
23 demo("grobner.demo");
24 @end example
26 @noindent
28 @example
29 batch("grobner.demo")
30 @end example
32 @noindent
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
41 @noindent
42 Marek Rychlik 
44 @noindent
45 @url{http://alamos.math.arizona.edu}
47 @noindent
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
51 @flushleft
52 @file{README}, @file{grobner.lisp}, @file{grobner.demo} y @file{grobner-demo.output}
53 @end flushleft
55 @noindent
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
62 @smallformat
63 A new efficient algorithm for computing Gr@"obner bases (F4) 
64 Jean-Charles Faug@`ere
65 LIP6/CNRS Université Paris VI 
66 January 20, 1999
67 @end smallformat
69 @subsection Implementaciones de órdenes admisibles de monomios
71 @itemize @bullet
72 @item @code{lex}
74 lexicográfico puro; orden por defecto para la comparación de
75 monomios.
76 @item @code{grlex}
78 grado total, con empates resueltos por el
79 orden lexicográfico.
81 @item @code{grevlex}
83 grado total, con empates resueltos por el
84 orden lexicográfico inverso.
86 @item @code{invlex}
88 orden lexicográfico inverso.
90 @end itemize
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}.
103 @end defvr
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}.
113 @end defvr
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}.
121 @end defvr
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}.
129 @end defvr
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.
139 @end defvr
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}.
147 @end defvr
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.
153 @end defvr
155 @defvr {Variable opcional} poly_grobner_algorithm
156 Valor por defecto: @code{buchberger}
158 Valores posibles: 
159 @itemize
160 @item @code{buchberger}
161 @item @code{parallel_buchberger}
162 @item @code{gebauer_moeller}
163 @end itemize
165 Es el nombre del algoritmo utilizado para encontrar las bases de Groebner.
166 @end defvr
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.
173 @end defvr
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}.
184 @example
186 (%i1) poly_add(z+x^2*y,x-z,[x,y,z]);
187                                     2
188 (%o1)                              x  y + x
189 @end example
191 @end deffn
193 @deffn {Función} poly_subtract (@var{poly1}, @var{poly2}, @var{varlist})
194 Resta el polinomio @var{poly2} de @var{poly1}.
195 @example
197 (%i1) poly_subtract(z+x^2*y,x-z,[x,y,z]);
198                                       2
199 (%o1)                          2 z + x  y - x
200 @end example
201 @end deffn
203 @deffn {Función} poly_multiply (@var{poly1}, @var{poly2}, @var{varlist})
204 Multiplica @var{poly1} por @var{poly2}.
205 @example
207 (%i2) poly_multiply(z+x^2*y,x-z,[x,y,z])-(z+x^2*y)*(x-z),expand;
208 (%o1)                                  0
209 @end example
210 @end deffn
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}.
215 @end deffn
217 @deffn {Función} poly_primitive_part (@var{poly1}, @var{varlist})
218 Devuelve el polinomio @var{poly} dividido por el MCD de sus coeficientes. 
220 @example
221 (%i1) poly_primitive_part(35*y+21*x,[x,y]);
222 (%o1)                              5 y + 3 x
223 @end example
224 @end deffn
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.
230 @end deffn
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.
238 @example
240 (%i1) poly_expand((x-y)*(y+x),[x,y]);
241                                      2    2
242 (%o1)                               x  - y
243 (%i2) poly_expand((y+x)^2,[x,y]);
244                                 2            2
245 (%o2)                          y  + 2 x y + x
246 (%i3) poly_expand((y+x)^5,[x,y]);
247                   5      4         2  3       3  2      4      5
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]);
250                                           2
251                                   y      x
252 (%o4)                       - x %e  + ------- - 1
253                                        sqrt(y)
255 (%i5) poly_expand(-1-sin(x)^2+sin(x),[sin(x)]);
256                                 2
257 (%o5)                      - sin (x) + sin(x) - 1
259 @end example
260 @end deffn
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.
265 @example
267 (%i1) poly_expt(x-y,3,[x,y])-(x-y)^3,expand;
268 (%o1)                                  0
269 @end example
270 @end deffn
272 @deffn {Función} poly_content (@var{poly}. @var{varlist})
273 @code{poly_content} calcula el MCD de los coeficientes.
274 @example
276 (%i1) poly_content(35*y+21*x,[x,y]);
277 (%o1)                                  7
278 @end example
279 @end deffn
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:
292 @iftex
293 @tex
294 $$c*poly=\sum_{i=1}^{n}({a}_{i}*{polylist}_{i})+r$$
295 @end tex
296 @end iftex
297 @ifnottex
298 @math{c*poly=sum(a[i]*polylist[i],i=1...n)+r}.
299 @end ifnottex
300 @end deffn
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.
305 @end deffn
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}.
310 @end deffn
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}.
318 @end deffn
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.
324 @end deffn
327 @subsection Postprocesamiento estándar de bases de Groebner
329 @iftex
330 @tex
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 ]$.
334 \noindent
335 El \emph{ideal} $I : J$ es el ideal $\{ h|\forall w \in J : wh \in
336 I \}$.@*
338 \noindent
339 El ideal $I : p^{\infty}$ es el ideal $\{ h|\exists n \in N : p^n h \in I \}$.@*
341 \noindent
342 El ideal $I : J^{\infty}$ es el ideal $\{ h|\exists n \in N, \exists p \in J: p^n h \in I \}$.@*
344 \noindent
345 El \emph{ideal radical} $\sqrt{I}$ es el ideal $\{ h| \exists n \in N : h^n \in I \}$.@*
347 @end tex
348 @end iftex
350 @ifnottex
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] ])}.@*
353 @noindent
354 El @emph{ideal} @math{I:J} es el ideal @math{@{h|para todo w en J: w*h pertence a I@}}.@*
355 @noindent
356 El ideal @math{I:p^inf} es el ideal @math{@{h| existe un n en N: p^n*h pertence a I@}}.@*
357 @noindent
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@}}.@*
359 @noindent
360 El @emph{ideal radical} @math{sqrt(I)} es el ideal @math{@{h| existe un n en N : h^n pertence a I @}}.
361 @end ifnottex
363 @noindent
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.
367 @end deffn
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.
375 @end deffn
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.
383 @end deffn
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.
388 @end deffn
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.
393 @end deffn
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}.
398 @end deffn
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).
405 @end deffn
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)}
412 @noindent
413 siendo @math{polylist1} y @math{polylist2} dos listas de polinomios.
414 @end deffn
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.
419 @end deffn
421 @deffn {Función} poly_lcm (@var{poly1}, @var{poly2}, @var{varlist})
422 Devuelve el MCM de @var{poly1} y @var{poly2}.
423 @end deffn
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
429 @code{gcdivide}.
431 Ejemplo:
433 @example
434 (%i1) p1:6*x^3+19*x^2+19*x+6; 
435                         3       2
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;
438                   5       4       3       2
439 (%o2)          6 x  + 13 x  + 12 x  + 13 x  + 6 x
440 (%i3) poly_gcd(p1, p2, [x]);
441                             2
442 (%o3)                    6 x  + 13 x + 6
443 @end example
444 @end deffn
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}.
454 @example
455 (%i1) poly_grobner_equal([y+x,x-y],[x,y],[x,y]);
456 (%o1)                         false
457 @end example
459 @end deffn
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.
465 @end deffn
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.
471 @end deffn
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
475 @iftex
476 @tex
477 $$I(polylist):poly^\infty$$
478 @end tex
479 @end iftex
481 @ifnottex
482 I(polylist):poly^inf
483 @end ifnottex
485 @noindent
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}.
489 @end deffn
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
493 @iftex
494 @tex
495 $$I(polylist1):I(polylist2)^\infty$$
496 @end tex
497 @end iftex
499 @ifnottex
500 I(polylist1):I(polylist2)^inf
501 @end ifnottex
503 @noindent
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}.
507 @end deffn
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
512 @iftex
513 @tex
514 $$I(polylist):poly1^\infty:...:polyn^\infty$$
515 @end tex
516 @end iftex
518 @ifnottex
519 I(polylist):poly1^inf:...:polyn^inf
520 @end ifnottex
522 @noindent
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}.
526 @end deffn
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
531 @iftex
532 @tex
533 $$I(polylist):I(polylist_1)^\infty:...:I(polylist_n)^\infty$$
534 @end tex
535 @end iftex
537 @ifnottex
538 I(polylist):I(polylist_1)^inf:...:I(polylist_n)^inf
539 @end ifnottex
540 @end deffn
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.
544 @end deffn
546 @deffn {Función} poly_polysaturation_extension (@var{poly}, @var{polylist}, @var{varlist1}, @var{varlist2})
547 @end deffn