Symmetric Polynomials  V3.1
A C++ library for generating symmetric polynomials with relations
The Math

Symmetric polynomials

Let \(R=\mathbf Z[x_1,...,x_n]\); there is an obvious action on \(R\) by the symmetric group \(\Sigma_n\) and the fixed points \(R^{\Sigma_n}\) i.e. the symmetric polynomials, form a polynomial algebra on the elementary symmetric polynomials:

\[R^{\Sigma_n}=\mathbf Z[\sigma_1,...,\sigma_n]\]

where

\[\sigma_k(x_1,...,x_n)=\sum_{1\le i_1< \cdots< i_k\le n}x_{i_1}....x_{i_k}\]

Furthermore, there is a simple algorithm for writing every symmetric polynomial on the \(x_i\) as a polynomial on the \(\sigma_i\). This library implements that algorithm.

Symmetric polynomials with 'half idempotent' relations

Let \(R=\mathbf Z[x_1,...,x_n,y_1,...,y_n]/(y_i^2=y_i)\); there is an obvious action on \(R\) by the symmetric group \(\Sigma_n\) permuting the \(x_i\) and \(y_i\) variables separately. A minimal description of the \(R^{\Sigma_n}\) is now more difficult:

\[R^{\Sigma_n}=\frac{\mathbf Z[\gamma_{s,i}]}{\gamma_{s,i}\gamma_{t,j}=r_{n,s,i,t,j}\gamma_{t,0}\gamma_{s,\min(i+j,n)}+\cdots}\]

where the "twisted Chern classes" are:

\[\gamma_{s,i}= \sum_{1\le j_1< \cdots< j_s\le n, 1\le k_1< \cdots< k_i\le n\\ j_u\neq k_v} x_{j_1}....x_{j_s}y_{k_1}\cdots y_{k_i}\]

for \(0\le s\le n\) and \(0\le i\le n-s\). The coefficient \(r_{n,s,i,t,j}\) in the relations is given by the binomial:

\[{\min(i+j+s,n)-t}\choose {j}\]

Moreover, the relations require the indices \(s,i,t,j\) to satisfy \(s\le t\le s+i\) and \(i,j>0\).

For convenience we set:

\[\alpha_i=\gamma_{0,i}=\sigma_i(y_1,...,y_n)\]

\[c_s=\gamma_{s,0}=\sigma_s(x_1,...,x_n)\]

Over \(\mathbf Q\), the \(\alpha_1^i\) can generate all \(\alpha_i\) via:

\[\alpha_i=\frac{\alpha(\alpha-1)\cdots(\alpha-i+1)}{i!}\]

however for speed+numerical stability we prefer to use all \(\alpha_i\) and have \(\mathbf Z\) coefficients in our relations.

This library implements an algorithm that can write every element in \(R^{\Sigma_n}\) as a polynomial on the generators \(\alpha_i,c_i,\gamma_{s,i}\) and further produce every relation explicitly.

The "twisted Pontryagin/symplectic classes" are defined as:

\[\kappa_{s,i}=\sum_{1\le j_1< \cdots< j_s\le n, 1\le k_1< \cdots< k_i\le n\\ j_u\neq k_v}x^2_{j_1}....x^2_{j_s}y_{k_1}\cdots y_{k_i}\]

This library also allows one to write the \(\kappa_{s,i}\) in terms of the \(\gamma_{s,i}\)