Schur polynomials

Given a partition λ\lambda with nn parts, the Schur polynomial is defined to be the polynomial

sλ:=x1m1xnmns_\lambda := \sum x_1^{m_1}\dots x_n^{m_n}

where the sum is taken over all semistandard tableaux TT of shape λ\lambda and mim_i is the weight of ii in TT.

There are two different algorithms for the computation of a Schur polynomial implemented which are automatically selected depending on the size of the input.

For small integers or if n10n\geq 10, the combinatorial algorithm is used. This algorithm directly applies the above definition.

In the other cases, Cauchy's bialternant formula

sλ(x1,,xn)=1i<jn(xixj)1x1λ1+n1x2λ1+n1xnλ1+n1x1λ2+n2x2λ2+n2xnλ2+n2x1λnx2λnxnλns_\lambda(x_1, \dots, x_n) = \prod_{1\leq i < j \leq n} (x_i - x_j)^{-1} \begin{vmatrix} x_1^{\lambda_1 + n - 1} & x_2^{\lambda_1 + n - 1} & \dots & x_n^{\lambda_1 + n - 1} \\ x_1^{\lambda_2 + n - 2} & x_2^{\lambda_2 + n - 2} & \dots & x_n^{\lambda_2 + n - 2} \\ \vdots & \vdots & \ddots & \vdots \\ x_1^{\lambda_n} & x_2^{\lambda_n} & \dots & x_n^{\lambda_n} \end{vmatrix}

is used.

schur_polynomialFunction
schur_polynomial([R::ZZMPolyRing], lambda::Partition, n::Int = length(lambda))

Return the Schur polynomial s of the partition lambda in n variables.

The ambient ring of s may optionally be supplied as a first argument.

Examples

julia> R, _ = ZZ[:a, :b, :c];

julia> schur_polynomial(R, partition([2, 1]))
a^2*b + a*b^2

julia> schur_polynomial(R, partition([2, 1]), 3)
a^2*b + a^2*c + a*b^2 + 2*a*b*c + a*c^2 + b^2*c + b*c^2

julia> schur_polynomial(partition([2]))
x1^2
source