1 /grobner.texi/1.3/Sat Jun 2 00:13:21 2007//
2 @c Language: Brazilian Portuguese, Encoding: iso-8859-1
3 @c /grobner.texi/1.3/Sat Jun 2 00:13:21 2007//
5 * Introdução a grobner::
6 * Funções e Variáveis Definidas para grobner::
9 @node Introdução a grobner, Funções e Variáveis Definidas para grobner, Top, Top
10 @section Introdução a grobner
12 @code{grobner} é um pacote para trabalhos com bases de Groebner no Maxima.
15 Um tutorial sobre @emph{Bases de Groebner} pode ser encontrado em
18 @url{http://www.geocities.com/CapeCanaveral/Hall/3131/}
21 Para usar as seguintes funções você deve primeiramente tornar o pacote @file{grobner.lisp} disponível para uso:
28 Uma demonstração de uso pode ser iniciada com
40 Alguns dos cálculos no arquivo de demonstração irão tomar um pouco de tempo
41 portanto a saída @file{grobner-demo.output} do arquivo de demonstração pode
42 ser encontrada no mesmo diretório que o arquivo de demonstração.
44 @subsection Notas sobre o pacote grobner
45 O pacote foi escrito por
51 @url{http://alamos.math.arizona.edu}
54 e foi liberado em 24/05/2002 nos termos da Licença Pública Geral (GPL/GNU/FSF) (veja o arquivo @file{grobner.lisp}.
55 Essa documentação foi extraída dos arquivos
57 @file{README}, @file{grobner.lisp}, @file{grobner.demo}, @file{grobner-demo.output}
61 por G@"unter Nowak. Sugestões de melhorias da documentação podem
62 ser discutidas em @emph{maxima}-mailing-list @email{maxima@@math.utexas.edu}.
63 O código está um pouco desatualizado atualmente. Implementações modernas utilizam o algorítmo rápido @emph{F4} descrito em
65 A new efficient algorithm for computing Gr@"obner bases (F4)
66 Jean-Charles Faug@`ere
67 LIP6/CNRS Université Paris VI
71 @subsection Implementações de ordem monomial admissível em grobner
76 puramente lexicográfica,
77 ordenação padrão para comparações monomiais
80 ordenação total de grau, quando houver empate é quebrada pela ordem lexicográfica
84 grau total, quando houver empate é quebrada pela ordem lexicográfica reversa
88 ordenação lexicográfica reversa
92 @node Funções e Variáveis Definidas para grobner, , Introdução a grobner, Top
93 @section Funções e Variáveis Definidas para grobner
95 @subsection Comutadores globais para grobner
97 @defvr {Variável de opção} poly_monomial_order
98 Valor padrão: @code{lex}
100 Esse comutador globalcontrola qual a ordenação monomial é usada em polinomio e em cálculos com Bases de Groebner. Se não for escolhidat, @code{lex} será usada.
104 @defvr {Variável de opção} poly_coefficient_ring
105 Valor padrão: @code{expression_ring}
107 Esse comutador indica o anel de coeficiente dos polinômios que
108 irá ser usado em cálculos de grobner. Se não for escolhido, o anel de expressão
109 geral do @emph{maxima's} irá ser usado. Essa variável pode ser escolhida para
110 @code{ring_of_integers} se for desejado.
113 @defvr {Variável de opção} poly_primary_elimination_order
114 Valor padrão: @code{false}
116 Nome da ordem padrão de eliminação de variáveis em
117 funções de eliminação. Se não for escolhida, @code{lex} irá ser usada.
120 @defvr {Variável de opção} poly_secondary_elimination_order
121 Valor padrão: @code{false}
123 Nome da ordem padrão para manter variáveis em funções de eliminação. Se não for escolhida, @code{lex} irá ser usada.
126 @defvr {Variável de opção} poly_elimination_order
127 Valor padrão: @code{false}
129 Nome da ordem padrão de funções de
130 eliminação. Se escolhida, irá sobrescrever as escolhas nas variáveis
131 @code{poly_primary_elimination_order} e @code{poly_secondary_elimination_order}.
132 O usuário deve garantir que essa é uma ordem de eliminação verdadeira válida
133 para o número de variáveis eliminadas.
136 @defvr {Variável de opção} poly_return_term_list
137 Valor padrão: @code{false}
139 Se escolhida para @code{true}, todas as funções no pacote @code{grobner} irão retornar cada
140 polinômio como uma lista de termos na ordem monomial corrente em lugar de
141 retornar uma expressão geral do @emph{maxima}.
144 @defvr {Variável de opção} poly_grobner_debug
145 Valor padrão: @code{false}
147 Se escolhida para @code{true}, produz saída de depuração e rastros.
150 @defvr {Variável de opção} poly_grobner_algorithm
151 Valor padrão: @code{buchberger}
155 @item @code{buchberger}
156 @item @code{parallel_buchberger}
157 @item @code{gebauer_moeller}
160 O nome do algorítmo usado para encontrar as bases de Groebner.
163 @defvr {Variável de opção} poly_top_reduction_only
164 Valor padrão: @code{false}
166 Se não for @code{false}, usa redução de topo somente se for possível. Redução de
167 topo significa que o algorítmo de divisão para após a primeira
171 @subsection Operadores simples em grobner
172 @code{poly_add}, @code{poly_subtract}, @code{poly_multiply} e @code{poly_expt}
173 são as operações aritméticas sobre polinômios.
174 Elas são executadas usando representação interna, mas os resultados são convertidos de volta à
175 forma geral do @emph{maxima}.
177 @deffn {Função} poly_add (@var{poli1}, @var{poli2}, @var{varlist})
178 Adiciona dois polinômios @var{poli1} e @var{poli2}.
181 (%i1) poly_add(z+x^2*y,x-z,[x,y,z]);
188 @deffn {Função} poly_subtract (@var{poli1}, @var{poli2}, @var{varlist})
189 Subtrai o polinômio @var{poli2} do polinômio @var{poli1}.
192 (%i1) poly_subtract(z+x^2*y,x-z,[x,y,z]);
198 @deffn {Função} poly_multiply (@var{poli1}, @var{poli2}, @var{varlist})
199 Retorna o produto dos polinômios @var{poli1} e @var{poli2}.
202 (%i2) poly_multiply(z+x^2*y,x-z,[x,y,z])-(z+x^2*y)*(x-z),expand;
207 @deffn {Função} poly_s_polynomial (@var{poli1}, @var{poli2}, @var{varlist})
208 Retorna o @emph{polinômio syzygy} (@emph{S-polinomial}) de dois polinômios @var{poli1} e @var{poli2}.
211 @deffn {Função} poly_primitive_part (@var{poli1}, @var{varlist})
212 Retorna o polinômio @var{poli} dividido pelo MDC entre seus coeficientes.
215 (%i1) poly_primitive_part(35*y+21*x,[x,y]);
220 @deffn {Função} poly_normalize (@var{poli}, @var{varlist})
221 Retorna o polinômio @var{poli} dividido pelo coeficiente lider.
222 @code{poly_normalize} assume que a divisão é possível, o que nem sempre ocorre
223 em anéis que não são corpos (fields).
226 @subsection Outras funções em grobner
228 @deffn {Função} poly_expand (@var{poli}, @var{varlist})
229 Essa função transforma polinômios para a forma interna e da forma interna para a forma geral. @code{poly_expand}
230 é equivalente a @code{expand(poly)} se @var{poli} passa corretamente para
231 um polinômio. Se a representação não for compatível com um
232 polinômio nas variáveis @var{varlist}, o resultado é um erro.
233 Esse resultado em erro pode ser usado para testar se uma expressão transforma-se corretamente para a
234 representação interna. Os seguintes exemplos ilustra que
235 variáveis de funções indexadas e transcendentes são permitidas.
238 (%i1) poly_expand((x-y)*(y+x),[x,y]);
241 (%i2) poly_expand((y+x)^2,[x,y]);
244 (%i3) poly_expand((y+x)^5,[x,y]);
246 (%o3) y + 5 x y + 10 x y + 10 x y + 5 x y + x
247 (%i4) poly_expand(-1-x*exp(y)+x^2/sqrt(y),[x]);
250 (%o4) - x %e + ------- - 1
253 (%i5) poly_expand(-1-sin(x)^2+sin(x),[sin(x)]);
255 (%o5) - sin (x) + sin(x) - 1
260 @deffn {Função} poly_expt (@var{poli}, @var{número}, @var{varlist})
261 eleva @var{poli} a um inteiro positivo @var{número}. If @var{número} não for um inteiro positivo um erro irá ser mostrado.
264 (%i1) poly_expt(x-y,3,[x,y])-(x-y)^3,expand;
269 @deffn {Função} poly_content (@var{poli}. @var{varlist})
270 @code{poly_content} extrai o MDC entre seus coeficientes
273 (%i1) poly_content(35*y+21*x,[x,y]);
278 @deffn {Função} poly_pseudo_divide (@var{poli}, @var{polilist}, @var{varlist})
279 Realiza a divisão falsa do polinômio @var{poli} pela lista de @math{n} polinômios @var{polilist}. Retorna
280 multiplos valores. O primeiro valor é uma lista de quocientes @math{a}. O
281 segundo valor é o resto @math{r}. O terceiro argumento é um coeficiente
282 escalar @math{c}, tal que @math{c*poli} pode ser dividido por@var{polilist} dentro do anel
283 dos coeficientes, que não é necessáriamente corpo. Finalmente, o
284 quarto valor é um contador inteiro do número de reduções
285 realizadas. O objetos resultantes satisfazem à equação:
289 $$c*poly=\sum_{i=1}^{n}({a}_{i}*{polylist}_{i})+r$$
293 @math{c*poly=sum(a[i]*polylist[i],i=1...n)+r}.
297 @deffn {Função} poly_exact_divide (@var{poli1}, @var{poli2}, @var{varlist})
298 Divide um polinômio @var{poli1} por outro polinômio @var{poli2}. Assume que a divisão
299 exata (sem resto) é possível. Retorna o quociente.
302 @deffn {Função} poly_normal_form (@var{poli}, @var{polilist}, @var{varlist})
303 @code{poly_normal_form} encontra a forma normal de um polinômio @var{poli} com relação a
304 um conjunto de polinômios @var{polilist}.
307 @deffn {Função} poly_buchberger_criterion (@var{polilist}, @var{varlist})
308 Returns @code{true} if @var{polilist} is a Groebner basis with respect to the current term
309 order, by using the Buchberger
310 criterion: for every two polynomials @math{h1} and @math{h2} in @var{polilist} the
311 S-polynomial @math{S(h1,h2)} reduces to 0 @math{modulo} @var{polilist}.
315 @deffn {Função} poly_buchberger (@var{polilist_fl} @var{varlist})
316 @code{poly_buchberger} realiza o algorítmo de Buchberger sobre uma lista de
317 polinômios e retorna a base de Grobner resultante.
322 @subsection Pósprocessamento padão de bases de Groebner
326 O \emph{k-ésimo ideal de eliminação} $I_k$ de um ideal $I$ sobre
327 $K [ x_1, ...,x_1 ]$ é $I \cap K [ x_{k + 1}, ..., x_n ]$.
330 O \emph{ideal quociente} $I : J$ é o ideal $\{ h|\forall w in J : wh \in
334 O ideal $I : p^{\infty}$ é o ideal $\{ h|\exists n \in N : p^n h \in I \}$.@*
337 O ideal $I : J^{\infty}$ é o ideal $\{ h|\exists n \in N, \exists p \in J: p^n h \in I \}$.@*
340 O \emph{ideal radical} $\sqrt{I}$ é o ideal $\{ h| \exists n \in N :
347 O @emph{k-ésimo ideal de eliminação} @math{I_k} de uma Ideal @math{I} sobre @math{K[ x[1],...,x[n] ]} é o ideal @math{intersecção(I, K[ x[k+1],...,x[n] ])}.@*
349 O @emph{ideal quociente} @math{I:J} é o ideal @math{@{h|for all w em J: w*h em I@}}.@*
351 O ideal @math{I:p^inf} é o ideal @math{@{h| existe um n em N: p^n*h em I@}}.@*
353 O ideal @math{I:J^inf} é o ideal @math{@{h| existe um n em N \and a p em J: p^n*h em I@}}.@*
355 O @emph{ideal radical} @math{sqrt(I)} é o ideal
356 @math{@{h| existe um n em N : h^n em I @}}.
360 @deffn {Função} poly_reduction (@var{polilist}, @var{varlist})
361 @code{poly_reduction} reduz uma lista de polinômios @var{polilist}, de forma que
362 cada poinômio é completametne reduzido com relação a outros polinômios.
365 @deffn {Função} poly_minimization (@var{polilist}, @var{varlist})
366 Retorna uma sublista da lista de polinômios @var{polilist} gerando o mesmo
367 ideal de monômio que @var{polilist} mas minimo, i.e. nenhum monômio líder
368 de um polinômio na sublista divide o monômio líder
374 @deffn {Função} poly_normalize_list (@var{polilist}, @var{varlist})
375 @code{poly_normalize_list} aplica @code{poly_normalize} a cada polinômio na lista.
376 Que significa que @code{poly_normalize_list} divide todo polinômio em uma lista @var{polilist} por seu coeficiente líder.
380 @deffn {Função} poly_grobner (@var{polilist}, @var{varlist})
381 Retorna uma base de Groebner do ideal gerado pelos polinômios @var{polilist}. Afetado pelos sinalizadores globais.
384 @deffn {Função} poly_reduced_grobner (@var{polilist}, @var{varlist})
385 Retorna uma base de Groebner reduzida do ideal gerado pelos polinômios @var{polilist}. Afetado pelos sinalizadores globais.
389 @deffn {Função} poly_depends_p (@var{poli}, @var{var}, @var{varlist})
390 @code{poly_depends} testa se um polinômio depende da variável @var{var}.
394 @deffn {Função} poly_elimination_ideal (@var{polilist}, @var{num}, @var{varlist})
397 @code{poly_elimination_ideal} retorna a base de grobner do @math{num}-ésimo ideal de eliminação de um
398 ideal especificado como uma lista de polinômios geradores (não necessáriamente base de Groebner)
401 @deffn {Função} poly_colon_ideal (@var{polilist1}, @var{polilist2}, @var{varlist})
403 Retorna a base reduzida de Groebner do ideal quociente
405 @math{I(polilist1):I(polilist2)}
408 onde @math{polilist1} e @math{polilist2} são duas listas de polinômios.
411 @deffn {Função} poly_ideal_intersection (@var{polilist1}, @var{polilist2}, @var{varlist})
413 @code{poly_ideal_intersection} retorna a intersecção entre dois ideais.
417 @deffn {Função} poly_lcm (@var{poli1}, @var{poli2}, @var{varlist})
418 Retorna o mínimo múltiplo comum entre @var{poli1} e @var{poli2}.
421 @deffn {Função} poly_gcd (@var{poli1}, @var{poli2}, @var{varlist})
422 Retorna máximo divisor comum de @var{poli1} e @var{poli2}.
425 @deffn {Função} poly_grobner_equal (@var{polilist1}, @var{polilist2}, @var{varlist})
426 @code{poly_grobner_equal} testa se duas bases de Groebner geram o mesmo ideal.
427 Retorna @code{true} se as duas listas de polinômios @var{polilist1} e @var{polilist2}, assumidas serem bases de Groebner,
428 geram o mesmo ideal, e @code{false} de outra forma.
429 Isso é equivalente a verificar que todo polinômio da primeira base é reduzido a 0
430 módulo a segunda base e vice-versa. Note que no exemplo abaixo a
431 primeira lista não é uma base de Groebner, e dessa forma o resultado é @code{false}.
434 (%i1) poly_grobner_equal([y+x,x-y],[x,y],[x,y]);
440 @deffn {Função} poly_grobner_subsetp (@var{polilist1}, @var{polilist2}, @var{varlist})
442 @code{poly_grobner_subsetp} testa se um ideal gerado pela @var{polilist1}
443 está contido em um ideal gerado pela @var{polilist2}. Para esse teste sempre tenha sucesso,
444 @var{polilist2} deve ser uma base de Groebner.
447 @deffn {Função} poly_grobner_member (@var{poli}, @var{polilist}, @var{varlist})
449 Retorna @code{true} se um polinômio @var{poli} pertence ao ideal gerado pela
450 lista polinomial @var{polilist}, que é assumida como sendouma base de Groebner. Retorna @code{false} de outra forma.
452 @code{poly_grobner_member} testa se um polinômio pertence a um ideal gerado por uma lista de polinômios,
453 que é assumida ser uma base de Groebner. Equivale a @code{normal_form} sendo 0.
456 @deffn {Função} poly_ideal_saturation1 (@var{polilist}, @var{poli}, @var{varlist})
457 Retorna abase de Groebner reduzida da saturação do ideal
460 $$I(polylist):poly^\infty$$
469 Geometricamente, sobre um corpo algebricamente fechado, esse é um conjunto
470 de polinmios no ideal gerado por @var{polilist} que não tende identicamente a
471 zero sobre a variação de @var{poli}.
474 @deffn {Função} poly_ideal_saturation (@var{polilist1}, @var{polilist2}, @var{varlist})
475 Retorna a base de Groebner reduzida da saturação do ideal
478 $$I(polylist1):I(polylist2)^\infty$$
483 I(polylist1):I(polylist2)^inf
487 Geometricamente, sobre um corpo algebricamente fechado, esse é um conjunto
488 de polinmios no ideal gerado por @var{polilist1} que não tende identicamente a
489 zero sobre a variação de @var{polilist2}.
493 @deffn {Função} poly_ideal_polysaturation1 (@var{polilist1}, @var{polilist2}, @var{varlist})
494 @var{polilist2} ist a list of n polynomials @code{[poly1,...,polyn]}.
495 Retorna a base de Groebner reduzida do ideal
498 $$I(polylist):poly1^\infty:...:polyn^\infty$$
503 I(polylist):poly1^inf:...:polyn^inf
508 seq@"{u}ência de sucessivas saturações nos polinômios
509 da lista polinômial @var{polilist2} do ideal gerado pela
510 lista polinomial @var{polilist1}.
513 @deffn {Função} poly_ideal_polysaturation (@var{polilist}, @var{polilistlist}, @var{varlist})
514 @var{polilistlist} is a list of n list of polynomials @code{[polylist1,...,polylistn]}.
515 Retorna a base reduzida de Groebner da saturação do ideal
518 $$I(polylist):I(polylist_1)^\infty:...:I(polylist_n)^\infty$$
523 I(polylist):I(polylist_1)^inf:...:I(polylist_n)^inf
527 @deffn {Função} poly_saturation_extension (@var{poli}, @var{polilist}, @var{varlist1}, @var{varlist2})
529 @code{poly_saturation_extension} implementa o famoso artifício de Rabinowitz.