4 @c OriginalRevision=1.5
5 @c TranslatedBy: (c) 2008-02 Vadim V. Zhytnikov <vvzhyt@gmail.com>
9 * Введение в пакет grobner::
10 * Функции и переменные пакета grobner::
13 @node Введение в пакет grobner, Функции и переменные пакета grobner, Top, Top
14 @section Введение в пакет grobner
16 Пакет @code{grobner} предназначен для работы с базисами Гребнера в Maxima.
19 Учебные материалы по @emph{базисам Гребнера} могут быть найдены по адресу
22 @url{http://www.geocities.com/CapeCanaveral/Hall/3131/}
25 Для использования, описанных ниже функций, необходимо загрузить пакет @file{grobner.lisp}.
32 Демонстрация может быть запущена так
44 Некоторые вычисления в данной демонстрации занимают длительное время,
45 поэтому вывод демонстрации, записанный в файл @file{grobner-demo.output},
46 может быть обнаружен в той же директории, где расположена демонстрация.
48 @subsection О пакете grobner
55 @url{http://alamos.math.arizona.edu}
58 и выпущен 2002-05-24 под лицензией General Public License (GPL) (см. файл @file{grobner.lisp}.
59 Эта документация извлечена из файлов
61 @file{README}, @file{grobner.lisp}, @file{grobner.demo}, @file{grobner-demo.output}
65 G@"unter Nowak. Предложения по усовершенствованию документации можно обсудить в списке
66 рассылки @emph{maxima}-mailing-list @email{maxima@@math.utexas.edu}.
67 Код несколько устарел. Современные реализации используют быстрый алгоритм @emph{F4}, описанный в
69 A new efficient algorithm for computing Gr@"obner bases (F4)
70 Jean-Charles Faug@`ere
71 LIP6/CNRS Universit@'e Paris VI
75 @opencatbox{Категории:}
76 @category{Базис Гребнера}
77 @category{Пакеты библиотеки share}
78 @category{Пакет grobner}
81 @subsection Реализации и допустимые способы упорядочивания одночленов в пакете grobner
86 чисто лексикографический,
87 используется по умолчанию для сравнения порядка одночленов
90 порядок общей степени, совпадения разрешаются лексикографическим упорядочиванием
94 общая степень, совпадения разрешаются обратным лексикографическим упорядочиванием
98 обратный лексикографический порядок
102 @node Функции и переменные пакета grobner, , Введение в пакет grobner, Top
103 @section Функции и переменные пакета grobner
105 @subsection Глобальные переключатели пакета grobner
107 @defvr {Управляющая переменная} poly_monomial_order
108 Значение по умолчанию: @code{lex}
110 Этот глобальный переключатель управляет тем, какой порядок одночленов
111 используется с многочленах и в вычислении базиса Гребнера.
112 Если значение не задано, то будет использовано @code{lex}.
114 @opencatbox{Категории:}
115 @category{Пакет grobner}
121 @defvr {Управляющая переменная} poly_coefficient_ring
122 Значение по умолчанию: @code{expression_ring}
124 Этот переключатель указывает кольцо коэффициентов многочленов, используемое
125 в вычислениях базиса Гребнера. Если значение не задано, то используется общее кольцо выражений @emph{maxima}.
126 Если необходимо, значение переключателя может быть установлено равным @code{ring_of_integers}.
128 @opencatbox{Категории:}
129 @category{Пакет grobner}
134 @defvr {Управляющая переменная} poly_primary_elimination_order
135 Значение по умолчанию: @code{false}
137 Определяет порядок исключения переменных в функциях, основанных на исключении переменных.
138 Если значение не задано, то будет использовано @code{lex}.
140 @opencatbox{Категории:}
141 @category{Пакет grobner}
146 @defvr {Управляющая переменная} poly_secondary_elimination_order
147 Значение по умолчанию: @code{false}
149 Определяет порядок сохраняемых переменных в функциях, основанных на исключении переменных.
150 Если значение не задано, то будет использовано @code{lex}.
152 @opencatbox{Категории:}
153 @category{Пакет grobner}
158 @defvr {Управляющая переменная} poly_elimination_order
159 Значение по умолчанию: @code{false}
161 Определяет порядок исключения в вычислениях, основанных на исключении переменных.
162 Если значение задано, то оно перекрывает значение переменных
163 @code{poly_primary_elimination_order} и @code{poly_secondary_elimination_order}.
164 Пользователь должен обеспечить, что заданный порядок исключения
165 применим для данного числа исключаемых переменных.
167 @opencatbox{Категории:}
168 @category{Пакет grobner}
173 @defvr {Управляющая переменная} poly_return_term_list
174 Значение по умолчанию: @code{false}
176 Если равно @code{true}, то все функции пакета возвращают многочлены в виде списков
177 членов с текущим порядком одночленов, а не в виде выражений @emph{maxima}.
179 @opencatbox{Категории:}
180 @category{Пакет grobner}
185 @defvr {Управляющая переменная} poly_grobner_debug
186 Значение по умолчанию: @code{false}
188 Если равно @code{true}, то выводится трассировка и отладочная информация.
190 @opencatbox{Категории:}
191 @category{Пакет grobner}
196 @defvr {Управляющая переменная} poly_grobner_algorithm
197 Значение по умолчанию: @code{buchberger}
201 @item @code{buchberger}
202 @item @code{parallel_buchberger}
203 @item @code{gebauer_moeller}
206 Определяет алгоритм, используемый для поиска базиса Гребнера.
208 @opencatbox{Категории:}
209 @category{Пакет grobner}
214 @defvr {Управляющая переменная} poly_top_reduction_only
215 Значение по умолчанию: @code{false}
217 Если не равно @code{false}, то когда возможно используется только приведение верхнего уровня.
218 Приведение верхнего уровня означает, что алгоритм деления останавливается после первого
221 @opencatbox{Категории:}
222 @category{Пакет grobner}
227 @subsection Простые операторы в пакете grobner
228 @code{poly_add}, @code{poly_subtract}, @code{poly_multiply} и @code{poly_expt}
229 являются арифметическими операциями над многочленами.
230 Они осуществляются над внутренним представлением, но результат
231 преобразуется обратно в выражение @emph{maxima}.
233 @deffn {Функция} poly_add (@var{poly1}, @var{poly2}, @var{varlist})
234 Складывает два многочлена @var{poly1} и @var{poly2}.
237 (%i1) poly_add(z+x^2*y,x-z,[x,y,z]);
242 @opencatbox{Категории:}
243 @category{Пакет grobner}
248 @deffn {Функция} poly_subtract (@var{poly1}, @var{poly2}, @var{varlist})
249 Вычитает многочлен @var{poly2} из @var{poly1}.
252 (%i1) poly_subtract(z+x^2*y,x-z,[x,y,z]);
257 @opencatbox{Категории:}
258 @category{Пакет grobner}
263 @deffn {Функция} poly_multiply (@var{poly1}, @var{poly2}, @var{varlist})
264 Возвращает произведение многочленов @var{poly1} и @var{poly2}.
267 (%i2) poly_multiply(z+x^2*y,x-z,[x,y,z])-(z+x^2*y)*(x-z),expand;
271 @opencatbox{Категории:}
272 @category{Пакет grobner}
277 @deffn {Функция} poly_s_polynomial (@var{poly1}, @var{poly2}, @var{varlist})
278 Возвращает S-многочлен (@emph{syzygy polynomial}) двух многочленов @var{poly1} и @var{poly2}.
280 @opencatbox{Категории:}
281 @category{Пакет grobner}
286 @deffn {Функция} poly_primitive_part (@var{poly1}, @var{varlist})
287 Возвращает многочлен @var{poly} деленный на НОД своих коэффициентов.
290 (%i1) poly_primitive_part(35*y+21*x,[x,y]);
294 @opencatbox{Категории:}
295 @category{Пакет grobner}
300 @deffn {Функция} poly_normalize (@var{poly}, @var{varlist})
301 Возвращает многочлен @var{poly} деленный на свой старший коэффициент.
302 Подразумевается, что деление возможно, что может быть не всегда верно в случае
303 колец не являющихся полями.
305 @opencatbox{Категории:}
306 @category{Пакет grobner}
311 @subsection Другие функции пакета grobner
313 @deffn {Функция} poly_expand (@var{poly}, @var{varlist})
314 Эта функция преобразует многочлен во внутреннее представление и обратно.
315 Она эквивалентна @code{expand(@var{poly})}, если @var{poly} корректно
316 преобразуется в многочлен. Если представление не совместимо
317 с многочленом от переменных @var{varlist}, то это приводит к ошибке.
318 Данная функция может быть использована для проверки, возможно ли
319 преобразование выражения во внутреннее представление.
320 Нижеследующие примеры демонстрируют, что допустимы переменные
321 с индексом или в виде трансцендентных функций.
324 (%i1) poly_expand((x-y)*(y+x),[x,y]);
327 (%i2) poly_expand((y+x)^2,[x,y]);
330 (%i3) poly_expand((y+x)^5,[x,y]);
332 (%o3) y + 5 x y + 10 x y + 10 x y + 5 x y + x
333 (%i4) poly_expand(-1-x*exp(y)+x^2/sqrt(y),[x]);
336 (%o4) - x %e + ------- - 1
339 (%i5) poly_expand(-1-sin(x)^2+sin(x),[sin(x)]);
341 (%o5) - sin (x) + sin(x) - 1
345 @opencatbox{Категории:}
346 @category{Пакет grobner}
351 @deffn {Функция} poly_expt (@var{poly}, @var{number}, @var{varlist})
352 возводит многочлен @var{poly} в положительную целую степень @var{number}.
353 Если @var{number} не есть целое положительное число, то сигнализируется ошибка.
356 (%i1) poly_expt(x-y,3,[x,y])-(x-y)^3,expand;
360 @opencatbox{Категории:}
361 @category{Пакет grobner}
366 @deffn {Функция} poly_content (@var{poly}. @var{varlist})
367 @code{poly_content} вычисляет НОД коэффициентов многочлена
370 (%i1) poly_content(35*y+21*x,[x,y]);
374 @opencatbox{Категории:}
375 @category{Пакет grobner}
380 @deffn {Функция} poly_pseudo_divide (@var{poly}, @var{polylist}, @var{varlist})
381 Псевдо-деление многочлена @var{poly} на список из @math{n} многочленов @var{polylist}.
382 Возвращает несколько значений. Первое значение -- список частных @math{a}.
383 Второе значение -- остаток @math{r}.
384 Третье значение -- скалярный коэффициент @math{c}, такой что @math{c*poly} делимо
385 на @var{polylist} в кольце коэффициентов, не обязательно являющимся полем.
386 И наконец, четвертое значение -- целое число, дающее число
387 выполненных приведение. Результирующие величины удовлетворяют выражению:
391 $$c*poly=\sum_{i=1}^{n}({a}_{i}*{polylist}_{i})+r$$
395 @math{c*poly=sum(a[i]*polylist[i],i=1...n)+r}.
398 @opencatbox{Категории:}
399 @category{Пакет grobner}
404 @deffn {Функция} poly_exact_divide (@var{poly1}, @var{poly2}, @var{varlist})
405 Делит многочлен @var{poly1} на многочлен @var{poly2}.
406 Предполагается, что деление без остатка возможно.
409 @opencatbox{Категории:}
410 @category{Пакет grobner}
415 @deffn {Функция} poly_normal_form (@var{poly}, @var{polylist}, @var{varlist})
416 Функция @code{poly_normal_form} вычисляет нормальную форму многочлена @var{poly}
417 по отношению к множеству многочленов @var{polylist}.
419 @opencatbox{Категории:}
420 @category{Пакет grobner}
425 @deffn {Функция} poly_buchberger_criterion (@var{polylist}, @var{varlist})
426 Возвращает @code{true} если @var{polylist} является базисом Гребнера с учетом текущего упорядочивания членов.
427 Использует критерий Бухбергера:
428 для любых двух многочленов @math{h1} и @math{h2} из @var{polylist} e
429 S-многочлен @math{S(h1,h2)} приводим к 0 по модулю @var{polylist}.
431 @opencatbox{Категории:}
432 @category{Пакет grobner}
437 @deffn {Функция} poly_buchberger (@var{polylist_fl} @var{varlist})
438 @code{poly_buchberger} применяет алгоритм Бухбергера к списку многочленов
439 и возвращает результирующий базис Гребнера.
441 @opencatbox{Категории:}
442 @category{Пакет grobner}
448 @subsection Стандартная пост-обработка для базиса Гребнера
452 \emph{Идеал k-го исключения} $I_k$ идеала $I$ над
453 $K [ x_1, ...,x_1 ]$ есть $I \cap K [ x_{k + 1}, ..., x_n ]$.
456 \emph{Частное идеалов} $I : J$ есть идеал $\{ h|\forall w \in J : wh \in
460 Идеал $I : p^{\infty}$ есть идеал $\{ h|\exists n \in N : p^n h \in I \}$.@*
463 Идеал $I : J^{\infty}$ есть идеал $\{ h|\exists n \in N, \exists p \in J: p^n h \in I \}$.@*
466 \emph{Радикал идеала} $\sqrt{I}$ есть идеал $\{ h| \exists n \in N :
473 @emph{Идеал k-го исключения} @math{I_k} идеала @math{I} над @math{K[ x[1],...,x[n] ]} есть идеал @math{intersect(I, K[ x[k+1],...,x[n] ])}.@*
475 @emph{Частное идеалов} @math{I:J} есть идеал @math{@{h| для всех w в J: w*h в I@}}.@*
477 Идеал @math{I:p^inf} есть идеал @math{@{h| существует n в N: p^n*h в I@}}.@*
479 Идеал @math{I:J^inf} есть идеал @math{@{h| существуют n в N и p в J: p^n*h в I@}}.@*
481 @emph{Радикал идеала} @math{sqrt(I)} есть идеал
482 @math{@{h| существует n в N : h^n в I @}}.
486 @deffn {Функция} poly_reduction (@var{polylist}, @var{varlist})
487 @code{poly_reduction} приводит список многочленов @var{polylist}, так что каждый
488 многочлен полностью приведен по отношению к другим.
490 @opencatbox{Категории:}
491 @category{Пакет grobner}
496 @deffn {Функция} poly_minimization (@var{polylist}, @var{varlist})
497 Возвращает подмножество списка многочленов @var{polylist}, порождающих
498 тот же мономиальный идеал, что и @var{polylist} но минимальный,
499 т.е. старшие одночлены многочленов из подмножества не делят ни один из
500 других старших одночленов других многочленов этого подмножества.
502 @opencatbox{Категории:}
503 @category{Пакет grobner}
509 @deffn {Функция} poly_normalize_list (@var{polylist}, @var{varlist})
510 @code{poly_normalize_list} применяет @code{poly_normalize} к каждому многочлену в списке.
511 Т.е. делит каждый из многочленов списка @var{polylist} на его старший коэффициент.
513 @opencatbox{Категории:}
514 @category{Пакет grobner}
519 @deffn {Функция} poly_grobner (@var{polylist}, @var{varlist})
520 Возвращает базис Гребнера идеала, порожденного многочленами @var{polylist}.
521 Зависит от глобальных флагов.
523 @opencatbox{Категории:}
524 @category{Пакет grobner}
529 @deffn {Функция} poly_reduced_grobner (@var{polylist}, @var{varlist})
530 Возвращает приведенный базис Гребнера идеала, порожденного многочленами @var{polylist}.
531 Зависит от глобальных флагов.
533 @opencatbox{Категории:}
534 @category{Пакет grobner}
540 @deffn {Функция} poly_depends_p (@var{poly}, @var{var}, @var{varlist})
541 @code{poly_depends} проверяет, зависит ли многочлен от переменной @var{var}.
543 @opencatbox{Категории:}
544 @category{Пакет grobner}
545 @category{Функции предикаты}
551 @deffn {Функция} poly_elimination_ideal (@var{polylist}, @var{number}, @var{varlist})
554 @code{poly_elimination_ideal} возвращает базис Гребнера идеала @math{number}-го исключения идеала,
555 порожденного списком многочленов (не обязательно образующих базис Гребнера).
557 @opencatbox{Категории:}
558 @category{Пакет grobner}
563 @deffn {Функция} poly_colon_ideal (@var{polylist1}, @var{polylist2}, @var{varlist})
565 Возвращает приведенный базис Гребнера частного идеала
567 @math{I(polylist1):I(polylist2)}
570 где @math{polylist1} и @math{polylist2} -- два списка многочленов.
572 @opencatbox{Категории:}
573 @category{Пакет grobner}
578 @deffn {Функция} poly_ideal_intersection (@var{polylist1}, @var{polylist2}, @var{varlist})
580 @code{poly_ideal_intersection} возвращает пересечение двух идеалов.
582 @opencatbox{Категории:}
583 @category{Пакет grobner}
589 @deffn {Функция} poly_lcm (@var{poly1}, @var{poly2}, @var{varlist})
590 Возвращает наименьший общий множитель многочленов @var{poly1} и @var{poly2}.
592 @opencatbox{Категории:}
593 @category{Пакет grobner}
599 @deffn {Функция} poly_gcd (@var{poly1}, @var{poly2}, @var{varlist})
600 Возвращает наибольший общий делитель многочленов @var{poly1} и @var{poly2}.
602 @opencatbox{Категории:}
603 @category{Пакет grobner}
608 @deffn {Функция} poly_grobner_equal (@var{polylist1}, @var{polylist2}, @var{varlist})
609 @code{poly_grobner_equal} проверяет порождают ли два базиса Гребнера один и тот же идеал.
610 Возвращает @code{true} если два списка многочленов @var{polylist1} и @var{polylist2},
611 предполагаемые базисами Гребнера, порождают один и тот же идеал, и @code{false} в противном случае.
612 Это эквивалентно проверке, что каждый многочлен первого базиса приводится к 0
613 по модулю второго и обратно. Заметим, что в примере ниже первый список не есть базис Гребнера,
614 и по этому результат есть @code{false}.
617 (%i1) poly_grobner_equal([y+x,x-y],[x,y],[x,y]);
621 @opencatbox{Категории:}
622 @category{Пакет grobner}
627 @deffn {Функция} poly_grobner_subsetp (@var{polylist1}, @var{polylist2}, @var{varlist})
629 @code{poly_grobner_subsetp} проверяет содержится ли идеал, порожденный @var{polylist1},
630 в идеале, порожденном @var{polylist2}.
631 Чтобы тест всегда выполнялся, нужно чтобы @var{polylist2} был бы базисом Гребнера.
633 @opencatbox{Категории:}
634 @category{Пакет grobner}
635 @category{Функции предикаты}
640 @deffn {Функция} poly_grobner_member (@var{poly}, @var{polylist}, @var{varlist})
642 Возвращает @code{true}, если многочлен @var{poly} принадлежит к идеалу, порожденному списком
643 многочленов @var{polylist}, который предполагается базисом Гребнера.
644 Иначе возвращает @code{false}.
646 @opencatbox{Категории:}
647 @category{Пакет grobner}
652 @deffn {Функция} poly_ideal_saturation1 (@var{polylist}, @var{poly}, @var{varlist})
653 Возвращает приведенный базис Гребнера насыщения идеала
656 $$I(polylist):poly^\infty$$
665 Геометрически, над алгебраически замкнутым полем, это есть
666 множество многочленов в идеале, порожденном @var{polylist},
667 которые не исчезают на многообразии @var{poly}.
669 @opencatbox{Категории:}
670 @category{Пакет grobner}
675 @deffn {Функция} poly_ideal_saturation (@var{polylist1}, @var{polylist2}, @var{varlist})
676 Возвращает приведенный базис Гребнера насыщения идеала
679 $$I(polylist1):I(polylist2)^\infty$$
684 I(polylist1):I(polylist2)^inf
688 Геометрически, над алгебраически замкнутым полем, это есть
689 множество многочленов в идеале, порожденном @var{polylist1},
690 которые не исчезают на многообразии @var{polylist2}.
692 @opencatbox{Категории:}
693 @category{Пакет grobner}
698 @deffn {Функция} poly_ideal_polysaturation1 (@var{polylist1}, @var{polylist2}, @var{varlist})
699 @var{polylist2} -- есть список n многочленов @code{[poly1,...,polyn]}.
700 Возвращает приведенный базис Гребнера идеала
703 $$I(polylist):poly1^\infty:...:polyn^\infty$$
708 I(polylist):poly1^inf:...:polyn^inf
712 полученного последовательным насыщением многочленами из списка
713 @var{polylist2} идеала, порожденного списком многочленов @var{polylist1}.
715 @opencatbox{Категории:}
716 @category{Пакет grobner}
721 @deffn {Функция} poly_ideal_polysaturation (@var{polylist}, @var{polylistlist}, @var{varlist})
722 @var{polylistlist} -- есть список n списков многочленов @code{[polylist1,...,polylistn]}.
723 Возвращает приведенный базис Гребнера насыщения идеала
726 $$I(polylist):I(polylist_1)^\infty:...:I(polylist_n)^\infty$$
731 I(polylist):I(polylist_1)^inf:...:I(polylist_n)^inf
734 @opencatbox{Категории:}
735 @category{Пакет grobner}
740 @deffn {Функция} poly_saturation_extension (@var{poly}, @var{polylist}, @var{varlist1}, @var{varlist2})
742 @code{poly_saturation_extension} реализует знаменитый трюк Рабиновича.
744 @opencatbox{Категории:}
745 @category{Пакет grobner}
750 @deffn {Функция} poly_polysaturation_extension (@var{poly}, @var{polylist}, @var{varlist1}, @var{varlist2})
752 @opencatbox{Категории:}
753 @category{Пакет grobner}