# Schur polynomials

Given a partition $\lambda$ with $n$ parts, the Schur polynomial is defined to be the polynomial

$$$s_\lambda := \sum x_1^{m_1}\dots x_n^{m_n}$$$

where the sum is taken over all semistandard tableaux $T$ of shape $\lambda$ and $m_i$ is the weight of $i$ in $T$.

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 $n\geq 10$, the combinatorial algorithm is used. This algorithm directly applies the above definition.

In the other cases, Cauchy's bialternant formula

$$$s_\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