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
P1=x1 ,P2=12(x21+x2) ,P3=16(x31+3x1x2+2x3) ,and the productP=P3P2P1P1P1 ,
and then one substitutes for the
x1,x2,x3
x1=y1+y2+y3 ,x2=y21+y22+y23 ,x3=y31+y32+y33 ,
and in the resulted symmetric polynomial, we isolate the monomial in
y31y32y33.
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!)