Rename specvar integer-info to *integer-info*
[maxima.git] / doc / info / Symmetries.texi
blobbe0c790441a052f215503bcfc16f67c6f0a54561
1 @c end concepts Symmetries
3 @menu
4 * Introduction to Symmetries::
5 * Functions and Variables for Symmetries::
6 @end menu
8 @node Introduction to Symmetries, Functions and Variables for Symmetries, Package sym, Package sym
9 @section Introduction to Symmetries
11 @code{sym} is a package for working with symmetric groups of polynomials.
13 @ifnottex
14 It was written for Macsyma-Symbolics by Annick Valibouze (@url{https://web.archive.org/web/20061125035035/http://www-calfor.lip6.fr/~avb/}).
15 The algorithms are described in the following papers:
16 @end ifnottex
17 @iftex
18 It was written for Macsyma-Symbolics by Annick Valibouze@footnote{@url{https://web.archive.org/web/20061125035035/http://www-calfor.lip6.fr/~avb/}}.
19 The algorithms are described in the following papers:
20 @end iftex
22 @ifnottex
23 @enumerate
24 @item
25 Fonctions sym@'etriques et changements de bases. Annick Valibouze.
26 EUROCAL'87 (Leipzig, 1987), 323--332, Lecture Notes in Comput. Sci 378.
27 Springer, Berlin, 1989.@*
28 @url{http://www.stix.polytechnique.fr/publications/1984-1994.html}
30 @item R@'esolvantes et fonctions sym@'etriques. Annick Valibouze.
31 Proceedings of the ACM-SIGSAM 1989 International Symposium on Symbolic
32 and Algebraic Computation, ISSAC'89 (Portland, Oregon).
33 ACM Press, 390-399, 1989.@*
34 @url{https://web.archive.org/web/20061125035035/http://www-calfor.lip6.fr/~avb/DonneesTelechargeables/MesArticles/issac89ACMValibouze.pdf}
36 @item Symbolic computation with symmetric polynomials, an extension to Macsyma.
37 Annick Valibouze. Computers and Mathematics (MIT, USA, June 13-17, 1989),
38 Springer-Verlag, New York Berlin, 308-320, 1989.@*
39 @url{http://www.stix.polytechnique.fr/publications/1984-1994.html}
41 @item Th@'eorie de Galois Constructive. Annick Valibouze. M@'emoire d'habilitation
42 @`a diriger les recherches (HDR), Universit@'e P. et M. Curie (Paris VI), 1994.
43 @end enumerate
44 @end ifnottex
46 @iftex
47 @enumerate
48 @item
49 Fonctions sym@'etriques et changements de bases
50 @footnote{@url{www.stix.polytechnique.fr/publications/1984-1994.html}}.
51 Annick Valibouze. EUROCAL'87 (Leipzig, 1987), 323--332, Lecture Notes in Comput. Sci 378.
52 Springer, Berlin, 1989.
54 @item R@'esolvantes et fonctions sym@'etriques
55 @footnote{@url{https://web.archive.org/web/20061125035035/http://www-calfor.lip6.fr/~avb/DonneesTelechargeables/MesArticles/issac89ACMValibouze.pdf}}.
56 Annick Valibouze. Proceedings of the ACM-SIGSAM 1989 International Symposium on Symbolic
57 and Algebraic Computation, ISSAC'89 (Portland, Oregon). ACM Press, 390-399, 1989.
59 @item Symbolic computation with symmetric polynomials, an extension to Macsyma
60 @footnote{@url{www.stix.polytechnique.fr/publications/1984-1994.html}}.
61 Annick Valibouze. Computers and Mathematics (MIT, USA, June 13-17, 1989),
62 Springer-Verlag, New York Berlin, 308-320, 1989.
64 @item Th@'eorie de Galois Constructive. Annick Valibouze. M@'emoire d'habilitation
65 @`a diriger les recherches (HDR), Universit@'e P. et M. Curie (Paris VI), 1994.
66 @end enumerate
67 @end iftex
69 @opencatbox{Categories:}
70 @category{Group theory}
71 @category{Polynomials}
72 @category{Share packages}
73 @category{Package sym}
74 @closecatbox
77 @node Functions and Variables for Symmetries,  , Introduction to Symmetries, Package sym
78 @section Functions and Variables for Symmetries
81 @subsection Changing bases
83 @anchor{comp2pui}
84 @deffn {Function} comp2pui (@var{n}, @var{L})
85 implements passing from the complete symmetric functions given in the list
86 @var{L} to the elementary symmetric functions from 0 to @var{n}. If the
87 list @var{L} contains fewer than @var{n+1} elements, it will be completed with
88 formal values of the type @var{h1}, @var{h2}, etc. If the first element
89 of the list @var{L} exists, it specifies the size of the alphabet,
90 otherwise the size is set to @var{n}.
92 @c GENERATED FROM THE FOLLOWING
93 @c comp2pui (3, [4, g]);
94 @example
95 @group
96 (%i1) comp2pui (3, [4, g]);
97                         2                    2
98 (%o1)    [4, g, 2 h2 - g , 3 h3 - g h2 + g (g  - 2 h2)]
99 @end group
100 @end example
102 @opencatbox{Categories:}
103 @category{Package sym}
104 @closecatbox
105 @end deffn
107 @anchor{ele2pui}
108 @deffn {Function} ele2pui (@var{m}, @var{L})
109 goes from the elementary symmetric functions to the complete functions.
110 Similar to @code{comp2ele} and @code{comp2pui}.
112 Other functions for changing bases: @code{comp2ele}.
114 @opencatbox{Categories:}
115 @category{Package sym}
116 @closecatbox
117 @end deffn
119 @anchor{ele2comp}
120 @deffn {Function} ele2comp (@var{m}, @var{L})
121 Goes from the elementary symmetric functions to the compete functions.
122 Similar to @code{comp2ele} and @code{comp2pui}.
124 Other functions for changing bases: @code{comp2ele}.
126 @opencatbox{Categories:}
127 @category{Package sym}
128 @closecatbox
129 @end deffn
131 @anchor{elem}
132 @deffn {Function} elem (@var{ele}, @var{sym}, @var{lvar})
133 decomposes the symmetric polynomial @var{sym}, in the variables
134 contained in the list @var{lvar}, in terms of the elementary symmetric
135 functions given in the list @var{ele}.  If the first element of
136 @var{ele} is given, it will be the size of the alphabet, otherwise the
137 size will be the degree of the polynomial @var{sym}.  If values are
138 missing in the list @var{ele}, formal values of the type @var{e1},
139 @var{e2}, etc. will be added.  The polynomial @var{sym} may be given in
140 three different forms: contracted (@code{elem} should then be 1, its
141 default value), partitioned (@code{elem} should be 3), or extended
142 (i.e. the entire polynomial, and @code{elem} should then be 2).  The
143 function @code{pui} is used in the same way.
145 On an alphabet of size 3 with @var{e1}, the first elementary symmetric
146 function, with value 7, the symmetric polynomial in 3 variables whose
147 contracted form (which here depends on only two of its variables) is
148 @var{x^4-2*x*y} decomposes as follows in elementary symmetric functions:
150 @c GENERATED FROM THE FOLLOWING
151 @c elem ([3, 7], x^4 - 2*x*y, [x, y]);
152 @c ratsimp (%);
153 @example
154 @group
155 (%i1) elem ([3, 7], x^4 - 2*x*y, [x, y]);
156 (%o1) 7 (e3 - 7 e2 + 7 (49 - e2)) + 21 e3
158                                          + (- 2 (49 - e2) - 2) e2
159 @end group
160 @group
161 (%i2) ratsimp (%);
162                               2
163 (%o2)             28 e3 + 2 e2  - 198 e2 + 2401
164 @end group
165 @end example
167 @noindent
168 Other functions for changing bases: @code{comp2ele}.
170 @opencatbox{Categories:}
171 @category{Package sym}
172 @closecatbox
173 @end deffn
175 @anchor{mon2schur}
176 @deffn {Function} mon2schur (@var{L})
177 The list @var{L} represents the Schur function @math{S_L}: we have
178 @iftex
179 @math{L = [i_1,i_2, \ldots, i_q]}, with @math{i_1 \le i_2 \le \ldots \le i_q}.
180 The Schur function @math{S_{i_1,i_2, \ldots, i_q}} is the minor
181 of the infinite matrix @math{h_{i-j}}, @math{i \ge 1, j \ge 1},
182 consisting of the @math{q} first rows and the columns @math{i_1+1,
183 i_2+2, \ldots, i_q+q}.
184 @end iftex
185 @ifnottex
186 @math{L = [i_1, i_2, ..., i_q]}, with @math{i_1 <= i_2 <= ... <= i_q}.
187 The Schur function @math{S_[i_1, i_2, ..., i_q]} is the minor
188 of the infinite matrix @math{h_[i-j]}, @math{i <= 1, j <= 1},
189 consisting of the @math{q} first rows and the columns @math{1 + i_1,
190 2 + i_2, ..., q + i_q}.
191 @end ifnottex
193 This Schur function can be written in terms of monomials by using
194 @mref{treinat} and @mrefdot{kostka}  The form returned is a symmetric
195 polynomial in a contracted representation in the variables
196 @tex
197 $x_1,x_2,\ldots$
198 @end tex
199 @ifnottex
200 @math{x_1,x_2,...}
201 @end ifnottex
203 @c GENERATED FROM THE FOLLOWING
204 @c mon2schur ([1, 1, 1]);
205 @c mon2schur ([3]);
206 @c mon2schur ([1, 2]);
207 @example
208 @group
209 (%i1) mon2schur ([1, 1, 1]);
210 (%o1)                       x1 x2 x3
211 @end group
212 @group
213 (%i2) mon2schur ([3]);
214                                   2        3
215 (%o2)                x1 x2 x3 + x1  x2 + x1
216 @end group
217 @group
218 (%i3) mon2schur ([1, 2]);
219                                       2
220 (%o3)                  2 x1 x2 x3 + x1  x2
221 @end group
222 @end example
224 @noindent
225 which means that for 3 variables this gives:
227 @c UM, FROM WHAT ARGUMENTS WAS THE FOLLOWING GENERATED ?? (original comment)
228 @example
229 @group
230    2 x1 x2 x3 + x1^2 x2 + x2^2 x1 + x1^2 x3 + x3^2 x1
231     + x2^2 x3 + x3^2 x2
232 @end group
233 @end example
234 @noindent
235 Other functions for changing bases: @code{comp2ele}.
237 @opencatbox{Categories:}
238 @category{Package sym}
239 @closecatbox
240 @end deffn
242 @anchor{multi}
243 @deffn {Function} multi_elem (@var{l_elem}, @var{multi_pc}, @var{l_var})
244 decomposes a multi-symmetric polynomial in the multi-contracted form
245 @var{multi_pc} in the groups of variables contained in the list of lists
246 @var{l_var} in terms of the elementary symmetric functions contained in
247 @var{l_elem}.
249 @c GENERATED FROM THE FOLLOWING
250 @c multi_elem ([[2, e1, e2], [2, f1, f2]], a*x + a^2 + x^3, [[x, y], [a, b]]);
251 @c ratsimp (%);
252 @example
253 @group
254 (%i1) multi_elem ([[2, e1, e2], [2, f1, f2]], a*x + a^2 + x^3,
255       [[x, y], [a, b]]);
256                                                   3
257 (%o1)         - 2 f2 + f1 (f1 + e1) - 3 e1 e2 + e1
258 @end group
259 @group
260 (%i2) ratsimp (%);
261                          2                       3
262 (%o2)         - 2 f2 + f1  + e1 f1 - 3 e1 e2 + e1
263 @end group
264 @end example
266 Other functions for changing bases: @code{comp2ele}.
268 @opencatbox{Categories:}
269 @category{Package sym}
270 @closecatbox
271 @end deffn
274 @c WHAT ARE THE ARGUMENTS FOR THIS FUNCTION ?? (original comment)
275 @anchor{multi_pui}
276 @deffn {Function} multi_pui
277 is to the function @code{pui} what the function @code{multi_elem} is to
278 the function @code{elem}.
280 @c GENERATED FROM THE FOLLOWING
281 @c multi_pui ([[2, p1, p2], [2, t1, t2]], a*x + a^2 + x^3, [[x, y], [a, b]]);
282 @example
283 @group
284 (%i1) multi_pui ([[2, p1, p2], [2, t1, t2]], a*x + a^2 + x^3,
285       [[x, y], [a, b]]);
286                                             3
287                                 3 p1 p2   p1
288 (%o1)              t2 + p1 t1 + ------- - ---
289                                    2       2
290 @end group
291 @end example
293 @opencatbox{Categories:}
294 @category{Package sym}
295 @closecatbox
296 @end deffn
299 @c HMM, pui IS A VARIABLE AS WELL.  It's a function, for sure.
300 @anchor{pui}
301 @deffn {Function} pui (@var{L}, @var{sym}, @var{lvar})
302 decomposes the symmetric polynomial @var{sym}, in the variables in the
303 list @var{lvar}, in terms of the power functions in the list @var{L}.
304 If the first element of @var{L} is given, it will be the size of the
305 alphabet, otherwise the size will be the degree of the polynomial
306 @var{sym}.  If values are missing in the list @var{L}, formal values of
307 the type @var{p1}, @var{p2} , etc. will be added. The polynomial
308 @var{sym} may be given in three different forms: contracted (@code{elem}
309 should then be 1, its default value), partitioned (@code{elem} should be
310 3), or extended (i.e. the entire polynomial, and @code{elem} should then
311 be 2). The function @code{pui} is used in the same way.
313 @c GENERATED FROM THE FOLLOWING
314 @c pui;
315 @c pui ([3, a, b], u*x*y*z, [x, y, z]);
316 @c ratsimp (%);
317 @example
318 @group
319 (%i1) pui;
320 (%o1)                           1
321 @end group
322 @group
323 (%i2) pui ([3, a, b], u*x*y*z, [x, y, z]);
324                        2
325                    a (a  - b) u   (a b - p3) u
326 (%o2)              ------------ - ------------
327                         6              3
328 @end group
329 @group
330 (%i3) ratsimp (%);
331                                        3
332                       (2 p3 - 3 a b + a ) u
333 (%o3)                 ---------------------
334                                 6
335 @end group
336 @end example
337 @noindent
338 Other functions for changing bases: @code{comp2ele}.
340 @opencatbox{Categories:}
341 @category{Package sym}
342 @closecatbox
343 @end deffn
346 @anchor{pui2comp}
347 @deffn {Function} pui2comp (@var{n}, @var{lpui})
348 renders the list of the first @var{n} complete functions (with the
349 length first) in terms of the power functions given in the list
350 @var{lpui}. If the list @var{lpui} is empty, the cardinal is @var{n},
351 otherwise it is its first element (as in @code{comp2ele} and
352 @code{comp2pui}).
354 @c GENERATED FROM THE FOLLOWING
355 @c pui2comp (2, []);
356 @c pui2comp (3, [2, a1]);
357 @c ratsimp (%);
358 @example
359 @group
360 (%i1) pui2comp (2, []);
361                                        2
362                                 p2 + p1
363 (%o1)                   [2, p1, --------]
364                                    2
365 @end group
366 @group
367 (%i2) pui2comp (3, [2, a1]);
368                                             2
369                                  a1 (p2 + a1 )
370                          2  p3 + ------------- + a1 p2
371                   p2 + a1              2
372 (%o2)     [2, a1, --------, --------------------------]
373                      2                  3
374 @end group
375 @group
376 (%i3) ratsimp (%);
377                             2                     3
378                      p2 + a1   2 p3 + 3 a1 p2 + a1
379 (%o3)        [2, a1, --------, --------------------]
380                         2               6
381 @end group
382 @end example
383 @noindent
384 Other functions for changing bases: @code{comp2ele}.
386 @opencatbox{Categories:}
387 @category{Package sym}
388 @closecatbox
389 @end deffn
392 @anchor{pui2ele}
393 @deffn {Function} pui2ele (@var{n}, @var{lpui})
394 effects the passage from power functions to the elementary symmetric functions.
395 If the flag @code{pui2ele} is @code{girard}, it will return the list of
396 elementary symmetric functions from 1 to @var{n}, and if the flag is
397 @code{close}, it will return the @var{n}-th elementary symmetric function.
399 Other functions for changing bases: @code{comp2ele}.
401 @opencatbox{Categories:}
402 @category{Package sym}
403 @closecatbox
404 @end deffn
406 @anchor{puireduc}
407 @deffn {Function} puireduc (@var{n}, @var{lpui})
408 @var{lpui} is a list whose first element is an integer @var{m}.
409 @code{puireduc} gives the first @var{n} power functions in terms of the
410 first @var{m}.
412 @c GENERATED FROM THE FOLLOWING
413 @c puireduc (3, [2]);
414 @example
415 @group
416 (%i1) puireduc (3, [2]);
417                                          2
418                                    p1 (p1  - p2)
419 (%o1)          [2, p1, p2, p1 p2 - -------------]
420                                          2
421 @end group
422 @group
423 (%i2) ratsimp (%);
424                                            3
425                                3 p1 p2 - p1
426 (%o2)              [2, p1, p2, -------------]
427                                      2
428 @end group
429 @end example
431 @opencatbox{Categories:}
432 @category{Package sym}
433 @closecatbox
434 @end deffn
436 @anchor{schur2comp}
437 @deffn {Function} schur2comp (@var{P}, @var{l_var})
438 @var{P} is a polynomial in the variables of the list @var{l_var}.  Each
439 of these variables represents a complete symmetric function.  In
440 @var{l_var} the @var{i}-th complete symmetric function is represented by
441 the concatenation of the letter @code{h} and the integer @var{i}:
442 @code{h@var{i}}.  This function expresses @var{P} in terms of Schur
443 functions.
446 @c GENERATED FROM THE FOLLOWING
447 @c schur2comp (h1*h2 - h3, [h1, h2, h3]);
448 @c schur2comp (a*h3, [h3]);
449 @example
450 @group
451 (%i1) schur2comp (h1*h2 - h3, [h1, h2, h3]);
452 (%o1)                         s
453                                1, 2
454 @end group
455 @group
456 (%i2) schur2comp (a*h3, [h3]);
457 (%o2)                         s  a
458                                3
459 @end group
460 @end example
462 @opencatbox{Categories:}
463 @category{Package sym}
464 @closecatbox
465 @end deffn
471 @subsection Changing representations
472 @anchor{cont2part}
473 @deffn {Function} cont2part (@var{pc}, @var{lvar})
474 returns the partitioned polynomial associated to the contracted form
475 @var{pc} whose variables are in @var{lvar}.
477 @c GENERATED FROM THE FOLLOWING
478 @c pc: 2*a^3*b*x^4*y + x^5;
479 @c cont2part (pc, [x, y]);
480 @example
481 @group
482 (%i1) pc: 2*a^3*b*x^4*y + x^5;
483                            3    4      5
484 (%o1)                   2 a  b x  y + x
485 @end group
486 @group
487 (%i2) cont2part (pc, [x, y]);
488                                    3
489 (%o2)              [[1, 5, 0], [2 a  b, 4, 1]]
490 @end group
491 @end example
493 @opencatbox{Categories:}
494 @category{Package sym}
495 @closecatbox
496 @end deffn
499 @anchor{contract}
500 @deffn {Function} contract (@var{psym}, @var{lvar})
501 returns a contracted form (i.e. a monomial orbit under the action of the
502 @c CHECK ME!!
503 symmetric group) of the polynomial @var{psym} in the variables contained
504 in the list @var{lvar}.  The function @code{explose} performs the
505 inverse operation.  The function @code{tcontract} tests the symmetry of
506 the polynomial.
508 @c GENERATED FROM THE FOLLOWING
509 @c psym: explose (2*a^3*b*x^4*y, [x, y, z]);
510 @c contract (psym, [x, y, z]);
511 @example
512 @group
513 (%i1) psym: explose (2*a^3*b*x^4*y, [x, y, z]);
514          3      4      3      4      3    4        3    4
515 (%o1) 2 a  b y z  + 2 a  b x z  + 2 a  b y  z + 2 a  b x  z
517                                            3      4      3    4
518                                       + 2 a  b x y  + 2 a  b x  y
519 @end group
520 @group
521 (%i2) contract (psym, [x, y, z]);
522                               3    4
523 (%o2)                      2 a  b x  y
524 @end group
525 @end example
527 @opencatbox{Categories:}
528 @category{Package sym}
529 @closecatbox
530 @end deffn
532 @anchor{explose}
533 @deffn {Function} explose (@var{pc}, @var{lvar})
534 returns the symmetric polynomial associated with the contracted form
535 @var{pc}. The list @var{lvar} contains the variables.
537 @c GENERATED FROM THE FOLLOWING
538 @c explose (a*x + 1, [x, y, z]);
539 @example
540 @group
541 (%i1) explose (a*x + 1, [x, y, z]);
542 (%o1)                  a z + a y + a x + 1
543 @end group
544 @end example
546 @opencatbox{Categories:}
547 @category{Package sym}
548 @closecatbox
549 @end deffn
551 @anchor{part2cont}
552 @deffn {Function} part2cont (@var{ppart}, @var{lvar})
553 goes from the partitioned form to the contracted form of a symmetric polynomial.
554 The contracted form is rendered with the variables in @var{lvar}.
556 @c GENERATED FROM THE FOLLOWING
557 @c part2cont ([[2*a^3*b, 4, 1]], [x, y]);
558 @example
559 @group
560 (%i1) part2cont ([[2*a^3*b, 4, 1]], [x, y]);
561                               3    4
562 (%o1)                      2 a  b x  y
563 @end group
564 @end example
566 @opencatbox{Categories:}
567 @category{Package sym}
568 @closecatbox
569 @end deffn
572 @anchor{partpol}
573 @deffn {Function} partpol (@var{psym}, @var{lvar})
574 @var{psym} is a symmetric polynomial in the variables of the list
575 @var{lvar}. This function returns its partitioned representation.
577 @c GENERATED FROM THE FOLLOWING
578 @c partpol (-a*(x + y) + 3*x*y, [x, y]);
579 @example
580 @group
581 (%i1) partpol (-a*(x + y) + 3*x*y, [x, y]);
582 (%o1)               [[3, 1, 1], [- a, 1, 0]]
583 @end group
584 @end example
586 @opencatbox{Categories:}
587 @category{Package sym}
588 @closecatbox
589 @end deffn
591 @anchor{tcontract}
592 @deffn {Function} tcontract (@var{pol}, @var{lvar})
593 tests if the polynomial @var{pol} is symmetric in the variables of the
594 list @var{lvar}.  If so, it returns a contracted representation like the
595 function @code{contract}.
597 @opencatbox{Categories:}
598 @category{Package sym}
599 @closecatbox
600 @end deffn
603 @anchor{tpartpol}
604 @deffn {Function} tpartpol (@var{pol}, @var{lvar})
605 tests if the polynomial @var{pol} is symmetric in the variables of the
606 list @var{lvar}.  If so, it returns its partitioned representation like
607 the function @code{partpol}.
609 @opencatbox{Categories:}
610 @category{Package sym}
611 @closecatbox
612 @end deffn
617 @subsection Groups and orbits
619 @anchor{direct}
620 @deffn {Function} direct ([@var{p_1}, ..., @var{p_n}], @var{y}, @var{f}, [@var{lvar_1}, ..., @var{lvar_n}])
621 calculates the direct image (see M. Giusti, D. Lazard et A. Valibouze,
622 ISSAC 1988, Rome) associated to the function @var{f}, in the lists of
623 variables @var{lvar_1}, ..., @var{lvar_n}, and in the polynomials
624 @var{p_1}, ..., @var{p_n} in a variable @var{y}.  The arity of the
625 function @var{f} is important for the calculation.  Thus, if the
626 expression for @var{f} does not depend on some variable, it is useless
627 to include this variable, and not including it will also considerably
628 reduce the amount of computation.
630 @c GENERATED FROM THE FOLLOWING
631 @c direct ([z^2  - e1* z + e2, z^2  - f1* z + f2],
632 @c               z, b*v + a*u, [[u, v], [a, b]]);
633 @c ratsimp (%);
634 @c ratsimp (direct ([z^3-e1*z^2+e2*z-e3,z^2  - f1* z + f2],
635 @c               z, b*v + a*u, [[u, v], [a, b]]));
636 @example
637 @group
638 (%i1) direct ([z^2  - e1* z + e2, z^2  - f1* z + f2],
639               z, b*v + a*u, [[u, v], [a, b]]);
640        2
641 (%o1) y  - e1 f1 y
643                                  2            2             2   2
644                   - 4 e2 f2 - (e1  - 2 e2) (f1  - 2 f2) + e1  f1
645                 + -----------------------------------------------
646                                          2
647 @end group
648 @group
649 (%i2) ratsimp (%);
650               2                2                   2
651 (%o2)        y  - e1 f1 y + (e1  - 4 e2) f2 + e2 f1
652 @end group
653 @group
654 (%i3) ratsimp (direct ([z^3-e1*z^2+e2*z-e3,z^2  - f1* z + f2],
655               z, b*v + a*u, [[u, v], [a, b]]));
656        6            5         2                        2    2   4
657 (%o3) y  - 2 e1 f1 y  + ((2 e1  - 6 e2) f2 + (2 e2 + e1 ) f1 ) y
659                           3                               3   3
660  + ((9 e3 + 5 e1 e2 - 2 e1 ) f1 f2 + (- 2 e3 - 2 e1 e2) f1 ) y
662          2       2        4    2
663  + ((9 e2  - 6 e1  e2 + e1 ) f2
665                     2       2       2                   2    4
666  + (- 9 e1 e3 - 6 e2  + 3 e1  e2) f1  f2 + (2 e1 e3 + e2 ) f1 )
668   2          2                      2     3          2
669  y  + (((9 e1  - 27 e2) e3 + 3 e1 e2  - e1  e2) f1 f2
671                  2            2    3                5
672  + ((15 e2 - 2 e1 ) e3 - e1 e2 ) f1  f2 - 2 e2 e3 f1 ) y
674            2                   3           3     2   2    3
675  + (- 27 e3  + (18 e1 e2 - 4 e1 ) e3 - 4 e2  + e1  e2 ) f2
677          2      3                   3    2   2
678  + (27 e3  + (e1  - 9 e1 e2) e3 + e2 ) f1  f2
680                    2    4        2   6
681  + (e1 e2 e3 - 9 e3 ) f1  f2 + e3  f1
682 @end group
683 @end example
685 Finding the polynomial whose roots are the sums @math{a+u} where @math{a}
686 is a root of @math{z^2 - e_1 z + e_2} and @math{u} is a root of @math{z^2 -
687 f_1 z + f_2}.
689 @c GENERATED FROM THE FOLLOWING
690 @c ratsimp (direct ([z^2 - e1* z + e2, z^2 - f1* z + f2],
691 @c                           z, a + u, [[u], [a]]));
692 @example
693 @group
694 (%i1) ratsimp (direct ([z^2 - e1* z + e2, z^2 - f1* z + f2],
695                           z, a + u, [[u], [a]]));
696        4                    3             2
697 (%o1) y  + (- 2 f1 - 2 e1) y  + (2 f2 + f1  + 3 e1 f1 + 2 e2
699      2   2                              2               2
700  + e1 ) y  + ((- 2 f1 - 2 e1) f2 - e1 f1  + (- 2 e2 - e1 ) f1
702                   2                     2            2
703  - 2 e1 e2) y + f2  + (e1 f1 - 2 e2 + e1 ) f2 + e2 f1  + e1 e2 f1
705      2
706  + e2
707 @end group
708 @end example
710 @code{direct} accepts two flags: @code{elementaires} and
711 @code{puissances} (default) which allow decomposing the symmetric
712 polynomials appearing in the calculation into elementary symmetric
713 functions, or power functions, respectively.
715 Functions of @code{sym} used in this function:
717 @code{multi_orbit} (so @code{orbit}), @code{pui_direct}, @code{multi_elem}
718 (so @code{elem}), @code{multi_pui} (so @code{pui}), @code{pui2ele}, @code{ele2pui}
719 (if the flag @code{direct} is in @code{puissances}).
721 @opencatbox{Categories:}
722 @category{Package sym}
723 @closecatbox
724 @end deffn
728 @anchor{multi_orbit}
729 @deffn {Function} multi_orbit (@var{P}, [@var{lvar_1}, @var{lvar_2},..., @var{lvar_p}])
731 @var{P} is a polynomial in the set of variables contained in the lists
732 @var{lvar_1}, @var{lvar_2}, ..., @var{lvar_p}. This function returns the
733 orbit of the polynomial @var{P} under the action of the product of the
734 symmetric groups of the sets of variables represented in these @var{p}
735 lists.
737 @c GENERATED FROM THE FOLLOWING
738 @c multi_orbit (a*x + b*y, [[x, y], [a, b]]);
739 @c multi_orbit (x + y + 2*a, [[x, y], [a, b, c]]);
740 @example
741 @group
742 (%i1) multi_orbit (a*x + b*y, [[x, y], [a, b]]);
743 (%o1)                [b y + a x, a y + b x]
744 @end group
745 @group
746 (%i2) multi_orbit (x + y + 2*a, [[x, y], [a, b, c]]);
747 (%o2)        [y + x + 2 c, y + x + 2 b, y + x + 2 a]
748 @end group
749 @end example
750 @noindent
751 Also see: @code{orbit} for the action of a single symmetric group.
753 @opencatbox{Categories:}
754 @category{Package sym}
755 @closecatbox
756 @end deffn
760 @anchor{multsym}
761 @deffn {Function} multsym (@var{ppart_1}, @var{ppart_2}, @var{n})
762 returns the product of the two symmetric polynomials in @var{n}
763 variables by working only modulo the action of the symmetric group of
764 order @var{n}. The polynomials are in their partitioned form.
766 Given the 2 symmetric polynomials in @var{x}, @var{y}:  @code{3*(x + y)
767 + 2*x*y} and @code{5*(x^2 + y^2)} whose partitioned forms are @code{[[3,
768 1], [2, 1, 1]]} and @code{[[5, 2]]}, their product will be
770 @c GENERATED FROM THE FOLLOWING
771 @c multsym ([[3, 1], [2, 1, 1]], [[5, 2]], 2);
772 @example
773 @group
774 (%i1) multsym ([[3, 1], [2, 1, 1]], [[5, 2]], 2);
775 (%o1)         [[10, 3, 1], [15, 3, 0], [15, 2, 1]]
776 @end group
777 @end example
778 @noindent
779 that is @code{10*(x^3*y + y^3*x) + 15*(x^2*y + y^2*x) + 15*(x^3 + y^3)}.
781 Functions for changing the representations of a symmetric polynomial:
783 @code{contract}, @code{cont2part}, @code{explose}, @code{part2cont},
784 @code{partpol}, @code{tcontract}, @code{tpartpol}.
786 @opencatbox{Categories:}
787 @category{Package sym}
788 @closecatbox
789 @end deffn
792 @anchor{orbit}
793 @deffn {Function} orbit (@var{P}, @var{lvar})
794 computes the orbit of the polynomial @var{P} in the variables in the list
795 @var{lvar} under the action of the symmetric group of the set of
796 variables in the list @var{lvar}.
798 @c GENERATED FROM THE FOLLOWING
799 @c orbit (a*x + b*y, [x, y]);
800 @c orbit (2*x + x^2, [x, y]);
801 @example
802 @group
803 (%i1) orbit (a*x + b*y, [x, y]);
804 (%o1)                [a y + b x, b y + a x]
805 @end group
806 @group
807 (%i2) orbit (2*x + x^2, [x, y]);
808                         2         2
809 (%o2)                 [y  + 2 y, x  + 2 x]
810 @end group
811 @end example
812 @noindent
813 See also @mref{multi_orbit} for the action of a product of symmetric
814 groups on a polynomial.
816 @opencatbox{Categories:}
817 @category{Package sym}
818 @closecatbox
819 @end deffn
822 @anchor{pui_direct}
823 @deffn {Function} pui_direct (@var{orbite}, [@var{lvar_1}, ..., @var{lvar_n}], [@var{d_1}, @var{d_2}, ..., @var{d_n}])
825 Let @var{f} be a polynomial in @var{n} blocks of variables @var{lvar_1},
826 ..., @var{lvar_n}.  Let @var{c_i} be the number of variables in
827 @var{lvar_i}, and @var{SC} be the product of @var{n} symmetric groups of
828 degree @var{c_1}, ..., @var{c_n}. This group acts naturally on @var{f}.
829 The list @var{orbite} is the orbit, denoted @code{@var{SC}(@var{f})}, of
830 the function @var{f} under the action of @var{SC}. (This list may be
831 obtained by the function @code{multi_orbit}.)  The @var{di} are integers
832 s.t.
833 @iftex
834 $c_1 \le d_1, c_2 \le d_2, \ldots, c_n \le d_n$.
835 @end iftex
836 @ifnottex
837 @math{c_1 <= d_1, c_2 <= d_2, ..., c_n <= d_n}.
838 @end ifnottex
840 @iftex
841 Let @var{SD} be the product of the symmetric groups @math{S_{d_1} \times
842 S_{d_2} \times \cdots \times S_{d_n}}.
843 @end iftex
844 @ifnottex
845 Let @var{SD} be the product of the symmetric groups @math{S_[d_1] x
846 S_[d_2] x ... x S_[d_n]}.
847 @end ifnottex
848 The function @code{pui_direct} returns
849 the first @var{n} power functions of @code{@var{SD}(@var{f})} deduced
850 from the power functions of @code{@var{SC}(@var{f})}, where @var{n} is
851 the size of @code{@var{SD}(@var{f})}.
853 The result is in multi-contracted form w.r.t. @var{SD}, i.e. only one
854 element is kept per orbit, under the action of @var{SD}.
856 @c GENERATED FROM THE FOLLOWING
857 @c l: [[x, y], [a, b]];
858 @c pui_direct (multi_orbit (a*x + b*y, l), l, [2, 2]);
859 @c pui_direct (multi_orbit (a*x + b*y, l), l, [3, 2]);
860 @c pui_direct ([y + x + 2*c, y + x + 2*b, y + x + 2*a], [[x, y], [a, b, c]], [2, 3]);
861 @example
862 @group
863 (%i1) l: [[x, y], [a, b]];
864 (%o1)                   [[x, y], [a, b]]
865 @end group
866 @group
867 (%i2) pui_direct (multi_orbit (a*x + b*y, l), l, [2, 2]);
868                                        2  2
869 (%o2)               [a x, 4 a b x y + a  x ]
870 @end group
871 @group
872 (%i3) pui_direct (multi_orbit (a*x + b*y, l), l, [3, 2]);
873                              2  2     2    2        3  3
874 (%o3) [2 a x, 4 a b x y + 2 a  x , 3 a  b x  y + 2 a  x , 
876     2  2  2  2      3    3        4  4
877 12 a  b  x  y  + 4 a  b x  y + 2 a  x , 
879     3  2  3  2      4    4        5  5
880 10 a  b  x  y  + 5 a  b x  y + 2 a  x , 
882     3  3  3  3       4  2  4  2      5    5        6  6
883 40 a  b  x  y  + 15 a  b  x  y  + 6 a  b x  y + 2 a  x ]
884 @end group
885 @group
886 (%i4) pui_direct ([y + x + 2*c, y + x + 2*b, y + x + 2*a],
887       [[x, y], [a, b, c]], [2, 3]);
888                              2              2
889 (%o4) [3 x + 2 a, 6 x y + 3 x  + 4 a x + 4 a , 
891                  2                   3        2       2        3
892               9 x  y + 12 a x y + 3 x  + 6 a x  + 12 a  x + 8 a ]
893 @end group
894 @end example
895 @c THIS NEXT FUNCTION CALL TAKES A VERY LONG TIME (SEVERAL MINUTES)
896 @c SO LEAVE IT OUT TIL PROCESSORS GET A LITTLE FASTER ...
897 @c pui_direct ([y + x + 2*c, y + x + 2*b, y + x + 2*a], [[x, y], [a, b, c]], [3, 4]);
899 @opencatbox{Categories:}
900 @category{Package sym}
901 @closecatbox
902 @end deffn
909 @subsection Partitions
910 @anchor{kostka}
911 @deffn {Function} kostka (@var{part_1}, @var{part_2})
912 written by P. Esperet, calculates the Kostka number of the partition
913 @var{part_1} and @var{part_2}.
915 @c GENERATED FROM THE FOLLOWING
916 @c kostka ([3, 3, 3], [2, 2, 2, 1, 1, 1]);
917 @example
918 @group
919 (%i1) kostka ([3, 3, 3], [2, 2, 2, 1, 1, 1]);
920 (%o1)                           6
921 @end group
922 @end example
924 @opencatbox{Categories:}
925 @category{Package sym}
926 @closecatbox
927 @end deffn
930 @anchor{lgtreillis}
931 @deffn {Function} lgtreillis (@var{n}, @var{m})
932 returns the list of partitions of weight @var{n} and length @var{m}.
934 @c GENERATED FROM THE FOLLOWING
935 @c lgtreillis (4, 2);
936 @example
937 @group
938 (%i1) lgtreillis (4, 2);
939 (%o1)                   [[3, 1], [2, 2]]
940 @end group
941 @end example
942 @noindent
943 Also see: @mrefcomma{ltreillis} @mref{treillis} and @mrefdot{treinat}
945 @opencatbox{Categories:}
946 @category{Package sym}
947 @closecatbox
948 @end deffn
951 @anchor{ltreillis}
952 @deffn {Function} ltreillis (@var{n}, @var{m})
953 returns the list of partitions of weight @var{n} and length less than or
954 equal to @var{m}.
956 @c GENERATED FROM THE FOLLOWING
957 @c ltreillis (4, 2);
958 @example
959 @group
960 (%i1) ltreillis (4, 2);
961 (%o1)               [[4, 0], [3, 1], [2, 2]]
962 @end group
963 @end example
964 @noindent
965 Also see: @mrefcomma{lgtreillis} @mref{treillis} and @mrefdot{treinat}
967 @opencatbox{Categories:}
968 @category{Package sym}
969 @closecatbox
970 @end deffn
973 @anchor{treillis}
974 @deffn {Function} treillis (@var{n})
975 returns all partitions of weight @var{n}.
977 @c GENERATED FROM THE FOLLOWING
978 @c treillis (4);
979 @example
980 @group
981 (%i1) treillis (4);
982 (%o1)    [[4], [3, 1], [2, 2], [2, 1, 1], [1, 1, 1, 1]]
983 @end group
984 @end example
986 See also: @mrefcomma{lgtreillis} @mref{ltreillis} and @mrefdot{treinat}
988 @opencatbox{Categories:}
989 @category{Package sym}
990 @closecatbox
991 @end deffn
994 @anchor{treinat}
995 @deffn {Function} treinat (@var{part})
996 returns the list of partitions inferior to the partition @var{part} w.r.t.
997 the natural order.
999 @c GENERATED FROM THE FOLLOWING
1000 @c treinat ([5]);
1001 @c treinat ([1, 1, 1, 1, 1]);
1002 @c treinat ([3, 2]);
1003 @example
1004 @group
1005 (%i1) treinat ([5]);
1006 (%o1)                         [[5]]
1007 @end group
1008 @group
1009 (%i2) treinat ([1, 1, 1, 1, 1]);
1010 (%o2) [[5], [4, 1], [3, 2], [3, 1, 1], [2, 2, 1], [2, 1, 1, 1], 
1012                                                  [1, 1, 1, 1, 1]]
1013 @end group
1014 @group
1015 (%i3) treinat ([3, 2]);
1016 (%o3)                 [[5], [4, 1], [3, 2]]
1017 @end group
1018 @end example
1020 See also: @mrefcomma{lgtreillis} @mref{ltreillis} and @mrefdot{treillis}
1022 @opencatbox{Categories:}
1023 @category{Package sym}
1024 @closecatbox
1025 @end deffn
1031 @subsection Polynomials and their roots
1033 @anchor{ele2polynome}
1034 @deffn {Function} ele2polynome (@var{L}, @var{z})
1035 returns the polynomial in @var{z} s.t. the elementary symmetric
1036 functions of its roots are in the list @code{@var{L} = [@var{n},
1037 @var{e_1}, ..., @var{e_n}]}, where @var{n} is the degree of the
1038 polynomial and @var{e_i} the @var{i}-th elementary symmetric function.
1040 @c GENERATED FROM THE FOLLOWING
1041 @c ele2polynome ([2, e1, e2], z);
1042 @c polynome2ele (x^7 - 14*x^5 + 56*x^3  - 56*x + 22, x);
1043 @c ele2polynome ([7, 0, -14, 0, 56, 0, -56, -22], x);
1044 @example
1045 @group
1046 (%i1) ele2polynome ([2, e1, e2], z);
1047                           2
1048 (%o1)                    z  - e1 z + e2
1049 @end group
1050 @group
1051 (%i2) polynome2ele (x^7 - 14*x^5 + 56*x^3  - 56*x + 22, x);
1052 (%o2)          [7, 0, - 14, 0, 56, 0, - 56, - 22]
1053 @end group
1054 @group
1055 (%i3) ele2polynome ([7, 0, -14, 0, 56, 0, -56, -22], x);
1056                   7       5       3
1057 (%o3)            x  - 14 x  + 56 x  - 56 x + 22
1058 @end group
1059 @end example
1060 @noindent
1061 The inverse: @code{polynome2ele (@var{P}, @var{z})}.
1063 Also see:
1064 @code{polynome2ele}, @code{pui2polynome}.
1066 @opencatbox{Categories:}
1067 @category{Package sym}
1068 @closecatbox
1069 @end deffn
1072 @anchor{polynome2ele}
1073 @deffn {Function} polynome2ele (@var{P}, @var{x})
1074 gives the list @code{@var{l} = [@var{n}, @var{e_1}, ..., @var{e_n}]}
1075 where @var{n} is the degree of the polynomial @var{P} in the variable
1076 @var{x} and @var{e_i} is the @var{i}-the elementary symmetric function
1077 of the roots of @var{P}.
1079 @c GENERATED FROM THE FOLLOWING
1080 @c polynome2ele (x^7 - 14*x^5 + 56*x^3 - 56*x + 22, x);
1081 @c ele2polynome ([7, 0, -14, 0, 56, 0, -56, -22], x);
1082 @example
1083 @group
1084 (%i1) polynome2ele (x^7 - 14*x^5 + 56*x^3 - 56*x + 22, x);
1085 (%o1)          [7, 0, - 14, 0, 56, 0, - 56, - 22]
1086 @end group
1087 @group
1088 (%i2) ele2polynome ([7, 0, -14, 0, 56, 0, -56, -22], x);
1089                   7       5       3
1090 (%o2)            x  - 14 x  + 56 x  - 56 x + 22
1091 @end group
1092 @end example
1093 @noindent
1094 The inverse: @code{ele2polynome (@var{l}, @var{x})}
1096 @opencatbox{Categories:}
1097 @category{Package sym}
1098 @closecatbox
1099 @end deffn
1102 @anchor{prodrac}
1103 @deffn {Function} prodrac (@var{L}, @var{k})
1104 @var{L} is a list containing the elementary symmetric functions 
1105 on a set @var{A}. @code{prodrac} returns the polynomial whose roots
1106 are the @var{k} by @var{k} products of the elements of @var{A}.
1108 Also see @code{somrac}.
1110 @opencatbox{Categories:}
1111 @category{Package sym}
1112 @closecatbox
1113 @end deffn
1115 @anchor{pui2polynome}
1116 @deffn {Function} pui2polynome (@var{x}, @var{lpui})
1117 calculates the polynomial in @var{x} whose power functions of the roots
1118 are given in the list @var{lpui}.
1120 @c GENERATED FROM THE FOLLOWING
1121 @c polynome2ele (x^3 - 4*x^2 + 5*x - 1, x);
1122 @c ele2pui (3, %);
1123 @c pui2polynome (x, %);
1124 @example
1125 @group
1126 (%i1) pui;
1127 (%o1)                           1
1128 @end group
1129 @group
1130 (%i2) kill(labels);
1131 (%o0)                         done
1132 @end group
1133 @group
1134 (%i1) polynome2ele (x^3 - 4*x^2 + 5*x - 1, x);
1135 (%o1)                     [3, 4, 5, 1]
1136 @end group
1137 @group
1138 (%i2) ele2pui (3, %);
1139 (%o2)                     [3, 4, 6, 7]
1140 @end group
1141 @group
1142 (%i3) pui2polynome (x, %);
1143                         3      2
1144 (%o3)                  x  - 4 x  + 5 x - 1
1145 @end group
1146 @end example
1147 @noindent
1148 See also:
1149 @mrefcomma{polynome2ele} @mrefdot{ele2polynome}
1151 @opencatbox{Categories:}
1152 @category{Package sym}
1153 @closecatbox
1154 @end deffn
1157 @anchor{somrac}
1158 @deffn {Function} somrac (@var{L}, @var{k})
1159 The list @var{L} contains elementary symmetric functions of a polynomial
1160 @var{P} . The function computes the polynomial whose roots are the 
1161 @var{k} by @var{k} distinct sums of the roots of @var{P}. 
1163 Also see @code{prodrac}.
1165 @opencatbox{Categories:}
1166 @category{Package sym}
1167 @closecatbox
1168 @end deffn
1174 @subsection Resolvents
1176 @anchor{resolvante}
1177 @deffn {Function} resolvante (@var{P}, @var{x}, @var{f}, [@var{x_1},..., @var{x_d}]) 
1178 calculates the resolvent of the polynomial @var{P} in @var{x} of degree
1179 @code{n >= d} by the function @var{f} expressed in the variables
1180 @var{x_1}, ..., @var{x_d}.  For efficiency of computation it is
1181 important to not include in the list @code{[@var{x_1}, ..., @var{x_d}]}
1182 variables which do not appear in the transformation function @var{f}.
1184 To increase the efficiency of the computation one may set flags in
1185 @code{resolvante} so as to use appropriate algorithms:
1187 If the function @var{f} is unitary:
1188 @itemize @bullet
1189 @item
1190 A polynomial in a single variable,
1191 @item
1192   linear,
1193 @item
1194   alternating,
1195 @item
1196   a sum,
1197 @item
1198   symmetric,
1199 @item
1200   a product,
1201 @item
1202 the function of the Cayley resolvent (usable up to degree 5)
1204 @c WHAT IS THIS ILLUSTRATING EXACTLY ??
1205 @example
1206 @group
1207 (x1*x2 + x2*x3 + x3*x4 + x4*x5 + x5*x1 -
1208      (x1*x3 + x3*x5 + x5*x2 + x2*x4 + x4*x1))^2
1209 @end group
1210 @end example
1212 general,
1213 @end itemize
1214 the flag of @code{resolvante} may be, respectively:
1215 @itemize @bullet
1216 @item
1217   unitaire,
1218 @item
1219   lineaire,
1220 @item
1221   alternee,
1222 @item
1223   somme,
1224 @item
1225   produit,
1226 @item
1227   cayley,
1228 @item
1229   generale.
1230 @end itemize
1232 @c GENERATED FROM THE FOLLOWING
1233 @c resolvante: unitaire$
1234 @c resolvante (x^7 - 14*x^5 + 56*x^3 - 56*x + 22, x, x^3 - 1, [x]);
1235 @c resolvante: lineaire$
1236 @c resolvante (x^4 - 1, x, x1 + 2*x2 + 3*x3, [x1, x2, x3]);
1237 @c resolvante: general$
1238 @c resolvante (x^4 - 1, x, x1 + 2*x2 + 3*x3, [x1, x2, x3]);
1239 @c resolvante (x^4 - 1, x, x1 + 2*x2 + 3*x3, [x1, x2, x3, x4]);
1240 @c direct ([x^4 - 1], x, x1 + 2*x2 + 3*x3, [[x1, x2, x3]]);
1241 @c resolvante :lineaire$
1242 @c resolvante (x^4 - 1, x, x1 + x2 + x3, [x1, x2, x3]);
1243 @c resolvante: symetrique$
1244 @c resolvante (x^4 - 1, x, x1 + x2 + x3, [x1, x2, x3]);
1245 @c resolvante (x^4 + x + 1, x, x1 - x2, [x1, x2]);
1246 @c resolvante: alternee$
1247 @c resolvante (x^4 + x + 1, x, x1 - x2, [x1, x2]);
1248 @c resolvante: produit$
1249 @c resolvante (x^7 - 7*x + 3, x, x1*x2*x3, [x1, x2, x3]);
1250 @c resolvante: symetrique$
1251 @c resolvante (x^7 - 7*x + 3, x, x1*x2*x3, [x1, x2, x3]);
1252 @c resolvante: cayley$
1253 @c resolvante (x^5 - 4*x^2 + x + 1, x, a, []);
1254 @example
1255 (%i1) resolvante: unitaire$
1256 @group
1257 (%i2) resolvante (x^7 - 14*x^5 + 56*x^3 - 56*x + 22, x, x^3 - 1,
1258       [x]);
1260 " resolvante unitaire " [7, 0, 28, 0, 168, 0, 1120, - 154, 7840,
1261                          - 2772, 56448, - 33880, 
1263 413952, - 352352, 3076668, - 3363360, 23114112, - 30494464, 
1265 175230832, - 267412992, 1338886528, - 2292126760] 
1266   3       6      3       9      6      3
1267 [x  - 1, x  - 2 x  + 1, x  - 3 x  + 3 x  - 1, 
1269  12      9      6      3       15      12       9       6      3
1270 x   - 4 x  + 6 x  - 4 x  + 1, x   - 5 x   + 10 x  - 10 x  + 5 x
1272        18      15       12       9       6      3
1273  - 1, x   - 6 x   + 15 x   - 20 x  + 15 x  - 6 x  + 1, 
1275  21      18       15       12       9       6      3
1276 x   - 7 x   + 21 x   - 35 x   + 35 x  - 21 x  + 7 x  - 1] 
1277 [- 7, 1127, - 6139, 431767, - 5472047, 201692519, - 3603982011] 
1278        7      6        5         4          3           2
1279 (%o2) y  + 7 y  - 539 y  - 1841 y  + 51443 y  + 315133 y
1281                                               + 376999 y + 125253
1282 @end group
1283 (%i3) resolvante: lineaire$
1284 @group
1285 (%i4) resolvante (x^4 - 1, x, x1 + 2*x2 + 3*x3, [x1, x2, x3]);
1287 " resolvante lineaire " 
1288        24       20         16            12             8
1289 (%o4) y   + 80 y   + 7520 y   + 1107200 y   + 49475840 y
1291                                                     4
1292                                        + 344489984 y  + 655360000
1293 @end group
1294 (%i5) resolvante: general$
1295 @group
1296 (%i6) resolvante (x^4 - 1, x, x1 + 2*x2 + 3*x3, [x1, x2, x3]);
1298 " resolvante generale " 
1299        24       20         16            12             8
1300 (%o6) y   + 80 y   + 7520 y   + 1107200 y   + 49475840 y
1302                                                     4
1303                                        + 344489984 y  + 655360000
1304 @end group
1305 @group
1306 (%i7) resolvante (x^4 - 1, x, x1 + 2*x2 + 3*x3, [x1, x2, x3, x4]);
1308 " resolvante generale " 
1309        24       20         16            12             8
1310 (%o7) y   + 80 y   + 7520 y   + 1107200 y   + 49475840 y
1312                                                     4
1313                                        + 344489984 y  + 655360000
1314 @end group
1315 @group
1316 (%i8) direct ([x^4 - 1], x, x1 + 2*x2 + 3*x3, [[x1, x2, x3]]);
1317        24       20         16            12             8
1318 (%o8) y   + 80 y   + 7520 y   + 1107200 y   + 49475840 y
1320                                                     4
1321                                        + 344489984 y  + 655360000
1322 @end group
1323 (%i9) resolvante :lineaire$
1324 @group
1325 (%i10) resolvante (x^4 - 1, x, x1 + x2 + x3, [x1, x2, x3]);
1327 " resolvante lineaire " 
1328                               4
1329 (%o10)                       y  - 1
1330 @end group
1331 (%i11) resolvante: symetrique$
1332 @group
1333 (%i12) resolvante (x^4 - 1, x, x1 + x2 + x3, [x1, x2, x3]);
1335 " resolvante symetrique " 
1336                               4
1337 (%o12)                       y  - 1
1338 @end group
1339 @group
1340 (%i13) resolvante (x^4 + x + 1, x, x1 - x2, [x1, x2]);
1342 " resolvante symetrique " 
1343                            6      2
1344 (%o13)                    y  - 4 y  - 1
1345 @end group
1346 (%i14) resolvante: alternee$
1347 @group
1348 (%i15) resolvante (x^4 + x + 1, x, x1 - x2, [x1, x2]);
1350 " resolvante alternee " 
1351             12      8       6        4        2
1352 (%o15)     y   + 8 y  + 26 y  - 112 y  + 216 y  + 229
1353 @end group
1354 (%i16) resolvante: produit$
1355 @group
1356 (%i17) resolvante (x^7 - 7*x + 3, x, x1*x2*x3, [x1, x2, x3]);
1358 " resolvante produit "
1359         35      33         29        28         27        26
1360 (%o17) y   - 7 y   - 1029 y   + 135 y   + 7203 y   - 756 y
1362          24           23          22            21           20
1363  + 1323 y   + 352947 y   - 46305 y   - 2463339 y   + 324135 y
1365           19           18             17              15
1366  - 30618 y   - 453789 y   - 40246444 y   + 282225202 y
1368              14              12             11            10
1369  - 44274492 y   + 155098503 y   + 12252303 y   + 2893401 y
1371               9            8            7             6
1372  - 171532242 y  + 6751269 y  + 2657205 y  - 94517766 y
1374             5             3
1375  - 3720087 y  + 26040609 y  + 14348907
1376 @end group
1377 (%i18) resolvante: symetrique$
1378 @group
1379 (%i19) resolvante (x^7 - 7*x + 3, x, x1*x2*x3, [x1, x2, x3]);
1381 " resolvante symetrique " 
1382         35      33         29        28         27        26
1383 (%o19) y   - 7 y   - 1029 y   + 135 y   + 7203 y   - 756 y
1385          24           23          22            21           20
1386  + 1323 y   + 352947 y   - 46305 y   - 2463339 y   + 324135 y
1388           19           18             17              15
1389  - 30618 y   - 453789 y   - 40246444 y   + 282225202 y
1391              14              12             11            10
1392  - 44274492 y   + 155098503 y   + 12252303 y   + 2893401 y
1394               9            8            7             6
1395  - 171532242 y  + 6751269 y  + 2657205 y  - 94517766 y
1397             5             3
1398  - 3720087 y  + 26040609 y  + 14348907
1399 @end group
1400 (%i20) resolvante: cayley$
1401 @group
1402 (%i21) resolvante (x^5 - 4*x^2 + x + 1, x, a, []);
1404 " resolvante de Cayley "
1405         6       5         4          3            2
1406 (%o21) x  - 40 x  + 4080 x  - 92928 x  + 3772160 x  + 37880832 x
1408                                                        + 93392896
1409 @end group
1410 @end example
1412 For the Cayley resolvent, the 2 last arguments are neutral and the input
1413 polynomial must necessarily be of degree 5.
1415 See also:
1416 @flushleft
1417 @mrefcomma{resolvante_bipartite} @mrefcomma{resolvante_produit_sym}
1418 @mrefcomma{resolvante_unitaire} @mrefcomma{resolvante_alternee1} @mrefcomma{resolvante_klein} 
1419 @mrefcomma{resolvante_klein3} @mrefcomma{resolvante_vierer} @mrefdot{resolvante_diedrale}
1420 @end flushleft
1422 @opencatbox{Categories:}
1423 @category{Package sym}
1424 @closecatbox
1425 @end deffn
1428 @anchor{resolvante_alternee1}
1429 @deffn {Function} resolvante_alternee1 (@var{P}, @var{x})
1430 calculates the transformation
1431 @code{@var{P}(@var{x})} of degree @var{n} by the function
1432 @iftex
1433 @math{\prod_{1\leq i<j\leq n-1} (x_i-x_j)}.
1434 @end iftex
1435 @ifnottex
1436 @math{product(x_i - x_j, 1 <= i < j <= n - 1)}.
1437 @end ifnottex
1439 See also:
1440 @flushleft
1441 @mrefcomma{resolvante_produit_sym} @mrefcomma{resolvante_unitaire}
1442 @mrefcomma{resolvante}  @mrefcomma{resolvante_klein} @mrefcomma{resolvante_klein3}
1443 @mrefcomma{resolvante_vierer} @mrefcomma{resolvante_diedrale} @mrefdot{resolvante_bipartite}
1444 @end flushleft
1446 @opencatbox{Categories:}
1447 @category{Package sym}
1448 @closecatbox
1449 @end deffn
1452 @anchor{resolvante_bipartite}
1453 @deffn {Function} resolvante_bipartite (@var{P}, @var{x})
1454 calculates the transformation of
1455 @code{@var{P}(@var{x})} of even degree @var{n} by the function 
1456 @iftex
1457 @math{x_1 x_2 \cdots x_{n/2} + x_{n/2+1}\cdots x_n}.
1458 @end iftex
1459 @c UNFORTUNATELY TEXINFO DOES NOT HAVE A NOTION OF "@ELSE"
1460 @c SO IT IS NECESSARY TO REPEAT THE FOLLOWING NON-TEX STUFF FOR INFO AND FOR HTML ... SIGH
1461 @ifnottex
1462 @math{x_1 x_2 ... x_[n/2] + x_[n/2 + 1] ... x_n}.
1463 @end ifnottex
1465 @c GENERATED FROM THE FOLLOWING
1466 @c resolvante_bipartite (x^6 + 108, x);
1467 @example
1468 @group
1469 (%i1) resolvante_bipartite (x^6 + 108, x);
1470               10        8           6             4
1471 (%o1)        y   - 972 y  + 314928 y  - 34012224 y
1472 @end group
1473 @end example
1475 See also:
1476 @flushleft
1477 @mrefcomma{resolvante_produit_sym} @mrefcomma{resolvante_unitaire}
1478 @mrefcomma{resolvante} @mrefcomma{resolvante_klein} @mrefcomma{resolvante_klein3}
1479 @mrefcomma{resolvante_vierer} @mrefcomma{resolvante_diedrale} @mrefdot{resolvante_alternee1}
1480 @end flushleft
1482 @opencatbox{Categories:}
1483 @category{Package sym}
1484 @closecatbox
1485 @end deffn
1488 @anchor{resolvante_diedrale}
1489 @deffn {Function} resolvante_diedrale (@var{P}, @var{x})
1490 calculates the transformation of @code{@var{P}(@var{x})} by the function
1491 @code{@var{x_1} @var{x_2} + @var{x_3} @var{x_4}}.
1493 @c GENERATED FROM THE FOLLOWING
1494 @c resolvante_diedrale (x^5 - 3*x^4 + 1, x);
1495 @example
1496 @group
1497 (%i1) resolvante_diedrale (x^5 - 3*x^4 + 1, x);
1498        15       12       11       10        9         8         7
1499 (%o1) x   - 21 x   - 81 x   - 21 x   + 207 x  + 1134 x  + 2331 x
1501         6         5          4          3          2
1502  - 945 x  - 4970 x  - 18333 x  - 29079 x  - 20745 x  - 25326 x
1504  - 697
1505 @end group
1506 @end example
1508 See also:
1509 @flushleft
1510 @mrefcomma{resolvante_produit_sym} @mrefcomma{resolvante_unitaire}
1511 @mrefcomma{resolvante_alternee1} @mrefcomma{resolvante_klein} @mrefcomma{resolvante_klein3}
1512 @mrefcomma{resolvante_vierer} @mrefdot{resolvante}
1513 @end flushleft
1515 @opencatbox{Categories:}
1516 @category{Package sym}
1517 @closecatbox
1518 @end deffn
1521 @anchor{resolvante_klein}
1522 @deffn {Function} resolvante_klein (@var{P}, @var{x})
1523 calculates the transformation of @code{@var{P}(@var{x})} by the function
1524 @code{@var{x_1} @var{x_2} @var{x_4} + @var{x_4}}.
1526 See also:
1527 @flushleft
1528 @mrefcomma{resolvante_produit_sym} @mrefcomma{resolvante_unitaire}
1529 @mrefcomma{resolvante_alternee1} @mrefcomma{resolvante} @mrefcomma{resolvante_klein3}
1530 @mrefcomma{resolvante_vierer} @mrefdot{resolvante_diedrale}
1531 @end flushleft
1533 @opencatbox{Categories:}
1534 @category{Package sym}
1535 @closecatbox
1536 @end deffn
1538 @anchor{resolvante_klein3}
1539 @deffn {Function} resolvante_klein3 (@var{P}, @var{x})
1540 calculates the transformation of @code{@var{P}(@var{x})} by the function
1541 @code{@var{x_1} @var{x_2} @var{x_4} + @var{x_4}}.
1543 See also:
1544 @flushleft
1545 @mrefcomma{resolvante_produit_sym} @mrefcomma{resolvante_unitaire}
1546 @mrefcomma{resolvante_alternee1} @mrefcomma{resolvante_klein} @mrefcomma{resolvante}
1547 @mrefcomma{resolvante_vierer} @mrefdot{resolvante_diedrale}
1548 @end flushleft
1550 @opencatbox{Categories:}
1551 @category{Package sym}
1552 @closecatbox
1553 @end deffn
1556 @anchor{resolvante_produit_sym}
1557 @deffn {Function} resolvante_produit_sym (@var{P}, @var{x})
1558 calculates the list of all product resolvents of the polynomial
1559 @code{@var{P}(@var{x})}.
1561 @c GENERATED FROM THE FOLLOWING
1562 @c resolvante_produit_sym (x^5 + 3*x^4 + 2*x - 1, x);
1563 @c resolvante: produit$
1564 @c resolvante (x^5 + 3*x^4 + 2*x - 1, x, a*b*c, [a, b, c]);
1565 @example
1566 @group
1567 (%i1) resolvante_produit_sym (x^5 + 3*x^4 + 2*x - 1, x);
1568         5      4             10      8       7       6       5
1569 (%o1) [y  + 3 y  + 2 y - 1, y   - 2 y  - 21 y  - 31 y  - 14 y
1571     4       3      2       10      8       7    6       5       4
1572  - y  + 14 y  + 3 y  + 1, y   + 3 y  + 14 y  - y  - 14 y  - 31 y
1574        3      2       5      4
1575  - 21 y  - 2 y  + 1, y  - 2 y  - 3 y - 1, y - 1]
1576 @end group
1577 (%i2) resolvante: produit$
1578 @group
1579 (%i3) resolvante (x^5 + 3*x^4 + 2*x - 1, x, a*b*c, [a, b, c]);
1581 " resolvante produit "
1582        10      8       7    6        5       4       3     2
1583 (%o3) y   + 3 y  + 14 y  - y  - 14 y  - 31 y  - 21 y  - 2 y  + 1
1584 @end group
1585 @end example
1586 @c INPUT %i3 TICKLES A MINOR BUG IN resolvante: 
1587 @c " resolvante produit " IS PRINTED FROM SOMEWHERE IN THE BOWELS OF resolvante
1588 @c AND IT GOOFS UP THE DISPLAY OF THE EXPONENTS OF %o3 -- I THREW IN A LINE BREAK TO ADJUST
1590 See also:
1591 @flushleft
1592 @mrefcomma{resolvante} @mrefcomma{resolvante_unitaire}
1593 @mrefcomma{resolvante_alternee1} @mrefcomma{resolvante_klein}
1594 @mrefcomma{resolvante_klein3} @mrefcomma{resolvante_vierer}
1595 @mrefdot{resolvante_diedrale}
1596 @end flushleft
1598 @opencatbox{Categories:}
1599 @category{Package sym}
1600 @closecatbox
1601 @end deffn
1604 @anchor{resolvante_unitaire}
1605 @deffn {Function} resolvante_unitaire (@var{P}, @var{Q}, @var{x})
1606 computes the resolvent of the polynomial @code{@var{P}(@var{x})} by the
1607 polynomial @code{@var{Q}(@var{x})}. 
1609 See also:
1610 @flushleft
1611 @mrefcomma{resolvante_produit_sym} @mrefcomma{resolvante}
1612 @mrefcomma{resolvante_alternee1} @mrefcomma{resolvante_klein} @mrefcomma{resolvante_klein3}
1613 @mrefcomma{resolvante_vierer} @mrefdot{resolvante_diedrale}
1614 @end flushleft
1616 @opencatbox{Categories:}
1617 @category{Package sym}
1618 @closecatbox
1619 @end deffn
1621 @anchor{resolvante_vierer}
1622 @deffn {Function} resolvante_vierer (@var{P}, @var{x})
1623 computes the transformation of
1624 @code{@var{P}(@var{x})} by the function @code{@var{x_1} @var{x_2} -
1625 @var{x_3} @var{x_4}}.
1627 See also:
1628 @flushleft
1629 @mrefcomma{resolvante_produit_sym} @mrefcomma{resolvante_unitaire}
1630 @mrefcomma{resolvante_alternee1} @mrefcomma{resolvante_klein} @mrefcomma{resolvante_klein3}
1631 @mrefcomma{resolvante} @mrefdot{resolvante_diedrale}
1632 @end flushleft
1634 @opencatbox{Categories:}
1635 @category{Package sym}
1636 @closecatbox
1637 @end deffn
1642 @subsection Miscellaneous
1644 @anchor{multinomial}
1645 @deffn {Function} multinomial (@var{r}, @var{part})
1646 where @var{r} is the weight of the partition @var{part}.  This function
1647 returns the associate multinomial coefficient: if the parts of
1648 @var{part} are @var{i_1}, @var{i_2}, ..., @var{i_k}, the result is
1649 @code{@var{r}!/(@var{i_1}! @var{i_2}! ... @var{i_k}!)}.
1651 @opencatbox{Categories:}
1652 @category{Package sym}
1653 @closecatbox
1654 @end deffn
1656 @anchor{permut}
1657 @deffn {Function} permut (@var{L})
1658 returns the list of permutations of the list @var{L}.
1660 @opencatbox{Categories:}
1661 @category{Package sym}
1662 @category{Lists}
1663 @closecatbox
1664 @end deffn