Ask Your Question

Revision history [back]

click to hide/show revision 1
initial version

Prelude / Digression:

These days i had to understand the PĆ³lya - de Brujin counting scheme, trying to implement some special counting in sage, i walked through this question.

The solution

is simple, if i correctly understand / digest the question, since the symmetric polynomials already come in the right basis:

S4 = SymmetricGroup(4)
P = S4.cycle_index()
# as posted so far
R.<x,y> = PolynomialRing(QQ)    # the two variables wanted in the post
P.expand(2)(x,y)

This piece of code gives:

x^4 + x^3*y + x^2*y^2 + x*y^3 + y^4

Comments:

(1)

Above, P is the symmetric polynomial:

sage: P
1/24*p[1, 1, 1, 1] + 1/4*p[2, 1, 1] + 1/8*p[2, 2] + 1/3*p[3, 1] + 1/4*p[4]

written in the p basis.

(2)

One can illustrate this basis as follows:

sage: Sym = SymmetricFunctions(QQ)
sage: p = Sym.powersum()
sage: var('x,y,z,t');
sage: p([1,1]).expand(4)(x,y,z,t).factor()
(t + x + y + z)^2
sage: p([2,1]).expand(4)(x,y,z,t).factor()
(t^2 + x^2 + y^2 + z^2)*(t + x + y + z)
sage: (1/24*p[1, 1, 1, 1] + 1/4*p[2, 1, 1] + 1/8*p[2, 2] + 1/3*p[3, 1] + 1/4*p[4]).expand(2)(x,y)
x^4 + x^3*y + x^2*y^2 + x*y^3 + y^4
sage:

(3)

An application, which shows how to use the cycle index polynomial in combinatorics. We have 8 balls, only the colors differ. The colors are red, blue, green, white, and yellow. There are respectively $$3,2,1,1,1$$ balls in these colors. How many possibilities exist to distribute them in three labeled recipients, I, II, III, containing respectively $3,3,2$ balls.

The sage solution to this problem is as follows:

P = product( [ SymmetricGroup(k).cycle_index() for k in [3, 2, 1, 1, 1] ] )
R.<y1,y2,y3> = PolynomialRing(QQ)
P.expand(3)(y1, y2, y3).coefficient( y1^3 * y2^3 * y3^2 )

which gives 108. The explicitly written, human solution goes as follows, and it is not at a glance transparent to translate from this solution to the sage solution. One builds the cycle index polynomials \begin{align} P_1 &= x_1\ ,\\ P_2 &= \frac 12(x_1^2+x_2)\ ,\\ P_3 &= \frac 16(x_1^3+3x_1x_2+2x_3)\ ,\\ &\text{and the product}\\ P &= P_3\;P_2\;P_1\;P_1\;P_1\ ,\\ \end{align} and then one substitutes for the $x_1, x_2, x_3$ \begin{align} x_1 = y_1+y_2+y_3\ ,\\ x_2 = y_1^2+y_2^2+y_3^2\ ,\\ x_3 = y_1^3+y_2^3+y_3^3\ ,\\ \end{align} and in the resulted symmetric polynomial, we isolate the monomial in $y_1^3y_2^3y_3^3$. The "other code" being:

RX.<x1,x2,x3> = QQ[]
RY.<y1,y2,y3> = QQ[]
P = (x1^3 + 3*x1*x2 + 2*x3)/6 * (x1^2 + x2)/2 * x1^3
P(y1+y2+y3, y1^2+y2^2+y3^2, y1^3+y2^3+y3^3 ).coefficient( y1^3 * y2^3 * y3^2 )

It can be that the post was written with such a situation (or a similar one) in mind. The polynomial P comes as a symmetric polynomial and the problem may have been to evaluate it explicitly as in the above example.

(4) The post is rather trying to understand the question, and give a sample for the related world. (A programming language becomes strong, when both documentation and examples cover as much as possible. So let us make sage strong!)