Main Polynomial bases¶
Shortcuts for most used polynomial bases
-
multipolynomial_bases.bases.
DemazureHatPolynomials
(R, group_type='A', basis_name=None, basis_repr='^K', **keywords)¶ Creates the Demazure hat polynomials where demazure / key polynomials are indexed by vectors, as basis of multivariate polynomials on different bases,
seeMultivariatePolynomialAlgebra
Here is the definition we use for type A. For \(v = (v_1, \cdots, v_n) \in \mathbb{N}^n\), we define
- \(\hat{K}_v = x_1^{v_1}x_2^{v_2}\cdots x_n^{v_n}\) if \(v\) is a partition, i.e,
- if \(v_1 \geq v_2 \geq \cdots \geq v_n\).
Otherwise, we have for ` v_i > v_{i+1}`
- \(\hat{K}_{\cdots v_{i+1} v_i \cdots} = \hat{K}_v \hat{\pi}_i\) where
- \(\hat{\pi}_i\) is the ith isobar hat divided difference.
The vectors indexing the key polynomials can as well been seen as lehmer codes.
INPUT:
R
– a ringgroup_type
– (default:A
) the letter that represents the type of the weyl groupbasis_name
– (default: canonical name) the name of the basis (used in repr)basis_repr
– (default:^K
) the basis representation for elements**keywords
– other keywords to send t the abstract polynomial ring
OUTPUT:
- The Multivariate polynomial algebra on x over
R
on the Demazure basis of typegroup_type
EXAMPLES:
sage: from multipolynomial_bases import DemazureHatPolynomials sage: HatDem = DemazureHatPolynomials(QQ); HatDem The Multivariate polynomial algebra on x over Rational Field on the Demazure hat basis of type A sage: HatDem.an_element() 2*^K[1, 0, 0] + ^K[2, 2, 3] + ^K[0, 0, 0] + 3*^K[0, 1, 0] sage: HatDem[1,2,2] + HatDem[2,3,1] ^K[1, 2, 2] + ^K[2, 3, 1]
some operations:
sage: HatDem[2,2,3]^2 ^K[4, 4, 6] - ^K[5, 4, 5] - ^K[4, 5, 5] sage: HatDem[2,3] * HatDem[1,2] -^K[4, 4] + ^K[3, 5] sage: HatDem[2,3].expand() xA[2, 3] sage: HatDem[2,3].to_expr() x1^2*x2^3 sage: pol = HatDem[3,2,3] + HatDem[3,1,1] sage: pol.divided_difference(1) ^K[1, 2, 1] + ^K[2, 2, 3] + ^K[2, 1, 1] sage: pol.divided_difference(2) -^K[3, 2, 2] sage: pol.isobaric_divided_difference(1) ^K[3, 2, 3] + ^K[1, 3, 1] + ^K[2, 3, 3] + ^K[3, 1, 1] sage: pol.isobaric_divided_difference(2) ^K[3, 1, 1] sage: pol.hat_isobaric_divided_difference(1) ^K[2, 3, 3] + ^K[1, 3, 1] sage: pol.hat_isobaric_divided_difference(2) -^K[3, 2, 3]
some coercions:
sage: x = HatDem.monomial_basis_with_type() sage: pol = x[2,2,3] + x[3,1,2]; pol xA[2, 2, 3] + xA[3, 1, 2] sage: HatDem(pol) ^K[2, 2, 3] + ^K[3, 1, 2] sage: from multipolynomial_bases import SchubertPolynomials sage: Schub = SchubertPolynomials(QQ) sage: HatDem(Schub([1,0,2])) ^K[3, 0, 0] + ^K[1, 0, 2] + ^K[2, 1, 0] + ^K[1, 2, 0] + ^K[2, 0, 1]
-
multipolynomial_bases.bases.
DemazurePolynomials
(R, group_type='A', basis_name=None, basis_repr='K', **keywords)¶ Creates the Demazure polynomials where demazure / key polynomials are indexed by vectors, as basis of multivariate polynomials on different bases,
seeMultivariatePolynomialAlgebra
Here is the definition we use for type A. For \(v = (v_1, \cdots, v_n) \in \mathbb{N}^n\), we define
\(K_v = x_1^{v_1}x_2^{v_2}\cdots x_n^{v_n}\) if \(v\) is a partition, i.e, if \(v_1 \geq v_2 \geq \cdots \geq v_n\).
Otherwise, we have for ` v_i > v_{i+1}`
\(K_{\cdots v_{i+1} v_i \cdots} = K_v \pi_i\) where \(\pi_i\) is the ith isobar divided difference.
The vectors indexing the key polynomials can as well been seen as lehmer codes.
INPUT:
R
– a ringgroup_type
– (default:A
) the letter that represents the type of the weyl groupbasis_name
– (default: canonical name) the name of the basis (used in repr)basis_repr
– (default:K
) the basis representation for elements**keywords
– other keywords to send t the abstract polynomial ring
OUTPUT:
- The Multivariate polynomial algebra on x over
R
on the Demazure basis of typegroup_type
EXAMPLES:
sage: from multipolynomial_bases import DemazurePolynomials sage: Dem = DemazurePolynomials(QQ); Dem The Multivariate polynomial algebra on x over Rational Field on the Demazure basis of type A sage: Dem.an_element() 2*K[1, 0, 0] + K[2, 2, 3] + K[0, 0, 0] + 3*K[0, 1, 0] sage: Dem[1,2,2] + Dem[2,3,1] K[1, 2, 2] + K[2, 3, 1]
some operations:
sage: Dem[2,2,3]^2 K[4, 4, 6] + K[4, 5, 5] sage: Dem[2,3] * Dem[1,2] K[4, 4] + K[3, 5] sage: Dem[2,3].expand() xA[3, 2] + xA[2, 3] sage: Dem[2,3].to_expr() x1^3*x2^2 + x1^2*x2^3 sage: pol = Dem[3,2,3] + Dem[3,1,1] sage: pol.divided_difference(1) K[1, 2, 1] + K[2, 2, 3] - K[2, 3, 2] sage: pol.divided_difference(2) 0 sage: pol.isobaric_divided_difference(1) K[2, 3, 3] + K[1, 3, 1] sage: pol.isobaric_divided_difference(2) K[3, 2, 3] + K[3, 1, 1]
some coercions:
sage: x = Dem.monomial_basis_with_type(); x The Multivariate polynomial algebra on x over Rational Field on the Ambient space basis of type A sage: pol = x[2,2,3] + x[3,1,2]; pol xA[2, 2, 3] + xA[3, 1, 2] sage: Dem(pol) K[2, 2, 3] - K[2, 3, 2] + K[3, 1, 2] - K[3, 2, 1] sage: from multipolynomial_bases import SchubertPolynomials sage: Schub = SchubertPolynomials(QQ) sage: Dem(Schub[1,0,2]) K[1, 0, 2] + K[3, 0, 0]
-
multipolynomial_bases.bases.
GrothendieckPolynomials
(R, basis_name=None, basis_repr='G', **keywords)¶ The Grothendieck polynomial ring indexed by vectors as a basis of multivariate polynomials on different bases, see
MultivariatePolynomialAlgebra
For double Grothendieck polynomials, see
DoubleMultivariatePolynomialAlgebra
.Here is the definition we use. For \(v = (v_1, \cdots, v_n) \in \mathbb{N}^n\), we define
\(G_v = x_1^{v_1}x_2^{v_2}\cdots x_n^{v_n}\) if \(v\) is a partition, i.e, if \(v_1 \geq v_2 \geq \cdots \geq v_n\).
Otherwise, we have for ` v_i > v_{i+1}`
\(G_{\cdots v_{i+1} v_i-1 \cdots} = G_v \pi_i\) where \(\pi_i\) is the ith isobar divided difference.
The vectors indexing the Grothendieck polynomials can as well been seen as lehmer codes.
The vectors indexing the Grothendieck polynomials can as well been seen as lehmer codes.
INPUT:
R
– a ringbasis_name
– (default: canonical name) the name of the basis
(used in repr)basis_repr
– (default:G
) the basis representation for elements**keywords
– other keywords to send to the abstract polynomial ring
OUTPUT:
- The Multivariate polynomial algebra on x over
R
on the Grothendieck basis
EXAMPLES:
sage: from multipolynomial_bases import GrothendieckPolynomials sage: Groth = GrothendieckPolynomials(QQ) sage: Groth The Multivariate polynomial algebra on x over Rational Field on the Grothendieck basis of type A, with positive exposants sage: Groth.an_element() 2*G[1, 0, 0] + G[2, 2, 3] + G[0, 0, 0] + 3*G[0, 1, 0] sage: Groth[1,2,3] + Groth[2,2] G[2, 2, 0] + G[1, 2, 3] some operations:: sage: Groth[2,2,3]^2 G[4, 4, 6] - G[4, 5, 6] + G[4, 5, 5] sage: Groth[2,3] * Groth[1,2] -G[4, 5] + G[4, 4] + G[3, 5] sage: Groth[2,3].to_expr() -x1^3*x2^3 + x1^3*x2^2 + x1^2*x2^3 sage: pol = Groth[3,2,3] + Groth[3,1,1] sage: pol.divided_difference(1) G[2, 2, 1] + G[1, 2, 1] + G[2, 2, 3] sage: pol.divided_difference(2) 0 sage: pol.isobaric_divided_difference(1) G[3, 3, 3] - G[3, 4, 3] - G[2, 4, 3] + G[2, 3, 3] + G[1, 3, 1] + G[2, 4, 2] + G[3, 3, 1] + G[3, 4, 2] + G[2, 3, 1] sage: pol.isobaric_divided_difference(2) G[3, 2, 3] + G[3, 1, 1]
some coercions:
sage: x = Groth.monomial_basis_with_type() sage: pol = x[2,2,3] + x[3,1,2]; pol xA[2, 2, 3] + xA[3, 1, 2] sage: Groth(pol) G[3, 3, 3] + G[3, 2, 2] + G[2, 3, 3] - G[2, 3, 2] - G[3, 3, 2] + G[2, 2, 3] - G[3, 2, 1] + G[3, 1, 2] sage: from multipolynomial_bases import SchubertPolynomials sage: Schub = SchubertPolynomials(QQ) sage: Groth(Schub[1,0,2]) G[3, 0, 2] + G[2, 2, 2] + G[1, 2, 2] + G[2, 0, 2] + G[1, 1, 2] + G[1, 0, 2]
-
multipolynomial_bases.bases.
SchubertPolynomials
(R, basis_name=None, basis_repr='Y', **keywords)¶ The Schubert polynomial ring indexed by vectors as a basis of multivariate polynomials on different bases, see
MultivariatePolynomialAlgebra
For double Schubert polynomials, see
DoubleMultivariatePolynomialAlgebra
Here is the definition we use. For \(v = (v_1, \cdots, v_n) \in \mathbb{N}^n\), we define
\(Y_v = x_1^{v_1}x_2^{v_2}\cdots x_n^{v_n}\) if \(v\) is a partition, i.e, if \(v_1 \geq v_2 \geq \cdots \geq v_n\).
Otherwise, we have for ` v_i > v_{i+1}`
\(Y_{\cdots v_{i+1} v_i-1 \cdots} = Y_v \partial_i\) where \(\partial_i\) is the ith divided difference.
The vectors indexing the Schubert polynomials can as well been seen as lehmer codes.
INPUT:
R
– a ringbasis_name
– (default: canonical name) the name of the basis
(used in repr)basis_repr
– (default:Y
) the basis representation for elements**keywords
– other keywords to send t the abstract polynomial ring
OUTPUT:
- The Multivariate polynomial algebra on x over
R
on the Schubert basis
EXAMPLES:
sage: from multipolynomial_bases import SchubertPolynomials sage: Schub = SchubertPolynomials(QQ) sage: Schub The Multivariate polynomial algebra on x over Rational Field on the Schubert basis of type A sage: Schub.an_element() 2*Y[1, 0, 0] + Y[2, 2, 3] + Y[0, 0, 0] + 3*Y[0, 1, 0] sage: Schub[1,2,3] + Schub[2,2] Y[2, 2, 0] + Y[1, 2, 3] some operations:: sage: Schub[2,2,3]^2 Y[4, 4, 6] + Y[4, 5, 5] sage: Schub[2,3] * Schub[1,2] Y[4, 4] + Y[3, 5] sage: Schub[2,3].expand() xA[3, 2] + xA[2, 3] sage: Schub[2,3].to_expr() x1^3*x2^2 + x1^2*x2^3 sage: pol = Schub[3,2,3] + Schub[3,1,1] sage: pol.divided_difference(1) Y[1, 2, 1] + Y[2, 2, 3] sage: pol.divided_difference(2) 0 sage: pol.isobaric_divided_difference(1) Y[2, 3, 3] + Y[1, 3, 1] + Y[2, 4, 2] sage: pol.isobaric_divided_difference(2) Y[3, 2, 3] + Y[3, 1, 1]
some coercions:
sage: x = Schub.monomial_basis_with_type() sage: pol = x[2,2,3] + x[3,1,2]; pol xA[2, 2, 3] + xA[3, 1, 2] sage: Schub(pol) Y[2, 2, 3] - Y[2, 3, 2] + Y[3, 1, 2] - Y[3, 2, 1] sage: from multipolynomial_bases import DemazureHatPolynomials sage: Dem = DemazureHatPolynomials(QQ) sage: Schub(Dem[1,0,2]) -Y[3, 0, 0] + Y[1, 0, 2] + Y[2, 1, 0] - Y[1, 2, 0] - Y[2, 0, 1]