12
$\begingroup$

I've had a python package out for multiplying Schubert polynomials, double Schubert polynomial, quantum Schubert polynomials, and double quantum Schubert polynomials for a little over a year. Recently I started integrating it into Sage (as an external package) and saw they already had a SchubertPolynomialRing implemented. Mine had far more features, so I proceeded with my integration, which is mostly done, but it made me wonder what else is out there.

I found one written for Julia (https://github.com/pseudoeffective/SchubertPolynomials.jl) when I started looking, but a web search is really bad for this kind of thing (surveying implementations of calculations for relatively obscure mathematical objects), so I figured I'd ask a question here: What implementations of Schubert polynomial/double Schubert polynomial/quantum Schubert polynomial etc. rings for computer algebra systems are available (not just multiplication, but objects that can be manipulated as in a Maple/Sage style computer algebra system)?

$\endgroup$
5
  • 2
    $\begingroup$ Magma has no such implementation, in case you were wondering. $\endgroup$ Commented Mar 20 at 23:23
  • 2
    $\begingroup$ Check out OSCAR, oscar-system.org , and ask its developers. $\endgroup$ Commented Mar 21 at 8:12
  • 1
    $\begingroup$ Nothing I can find in Maple $\endgroup$ Commented Mar 21 at 21:25
  • 1
    $\begingroup$ What about "SP, a Package for Schubert Polynomials Realized with the Computer Algebra System MAPLE" sciencedirect.com/science/article/pii/S0747717196900966 ? $\endgroup$ Commented Mar 23 at 12:33
  • $\begingroup$ @MarkL.Stone Thanks will take a look. Maybe you can make it an answer $\endgroup$ Commented Mar 24 at 13:16

2 Answers 2

5
$\begingroup$

schubmult 2.0.2 was recently released. Ongoing development on the repo below. This has integration with the CAS SageMath (sage).

https://github.com/matthematics/schubmult

Can run

pip install schubmult --upgrade 

or

sage -m pip install schubmult 

Basic sage example

sage: from schubmult.sage_integration import FastSchubertPolynomial, FastDoubleSchubertPolynomialRing, FastQuantumSchubertPolynomial, FastQuantumDoubleSchubertPolynomialRing sage: SingleRing = FastSchubertPolynomialRing(ZZ, 100, "x") sage: SingleRing([3,4,1,2]) Sx[3, 4, 1, 2] sage: SingleRing([3,4,1,2]) * SingleRing([5,1,4,2,3]) Sx[7, 3, 4, 1, 2, 5, 6] + Sx[7, 4, 2, 1, 3, 5, 6] + Sx[7, 5, 1, 2, 3, 4, 6] 

Mixed variable (Molev-Sagan) type products

sage: DoubleRing = FastDoubleSchubertPolynomialRing(ZZ, 100, "x", ("y", "z")) sage: DoubleRing([3,4,1,2])*DoubleRing([1,4,2,3]) (y1*y2-y1*y4-y2*y4+y4^2)*Sx([3, 4, 1, 2], 'y') + (-y1-y2+y4+y5)*Sx([3, 5, 1, 2, 4], 'y') + Sx([3, 6, 1, 2, 4, 5], 'y') sage: DoubleRing([3,4,1,2]) * DoubleRing([1,4,2,3],"z") (y3^2+y3*y4+y4^2-y3*z1-y4*z1-y3*z2-y4*z2+z1*z2-y3*z3-y4*z3+z1*z3+z2*z3)*Sx([3, 4, 1, 2], 'y') + (y3+y4+y5-z1-z2-z3)*Sx([3, 5, 1, 2, 4], 'y') + Sx([3, 6, 1, 2, 4, 5], 'y') 

expand()

sage: SingleRingQ = FastQuantumSchubertPolynomialRing(ZZ, 100, "x") sage: SingleRingQ([2,3,1,4]).expand() x1*x2 + q_1 

Coercion

Coercion was implemented as widely as possible.

sage: DoubleRing([1,4,2,3],"z") * SingleRing([3,4,1,2]) z1^2*z4^2*Sx([1, 4, 2, 3], 'z') + (z1^2*z4+z1^2*z5)*Sx([1, 5, 2, 3, 4], 'z') + z1^2*Sx([1, 6, 2, 3, 4, 5], 'z') + (z1*z4^2+z2*z4^2)*Sx([2, 4, 1, 3], 'z') + (z1*z4+z2*z4+z1*z5+z2*z5)*Sx([2, 5, 1, 3, 4], 'z') + (z1+z2)*Sx([2, 6, 1, 3, 4, 5], 'z') + z4^2*Sx([3, 4, 1, 2], 'z') + (z4+z5)*Sx([3, 5, 1, 2, 4], 'z') + Sx([3, 6, 1, 2, 4, 5], 'z') sage: SingleRingQ([2,3,1,4]) * SingleRing([4,1,3,2]) (-2*q_1^2*q_2+q_1*q_2*q_3)*QSx[1] + q_1*q_2*QSx[1, 3, 4, 2] + (-q_1^2)*QSx[2, 3, 1] + q_1*QSx[2, 4, 3, 1] + (-q_1*q_2)*QSx[3, 1, 2] + q_1*QSx[3, 2, 4, 1] + q_1*QSx[3, 4, 1, 2] + (-q_1)*QSx[4, 2, 1, 3] + QSx[5, 2, 3, 1, 4] + QSx[5, 3, 1, 2, 4] sage: R.<x1, x2> = PolynomialRing(ZZ, 2) sage: SingleRing([1,3,2]) - x1 - x2 == 0 True 

Coproducts

FastSchubertPolynomialRing and FastDoubleSchubertPolynomialRings are bialgebras and each element implements the coproduct() member function. set_coproduct_indices() on the base ring will determine the variables to partition on.

sage: DoubleRing.set_coproduct_indices((1,3)) sage: DoubleRing([4,1,5,2,3], "z").coproduct() (y1^2-y1*z2-y1*z3+z2*z3)*S([4, 1, 2, 3], 'z') # S([1], 'y') + (y1+y2-z2-z3)*S([4, 1, 2, 3], 'z') # S([2, 1], 'y') + S([4, 1, 2, 3], 'z') # S([3, 1, 2], 'y') + (y1-z3)*S([4, 2, 1, 3], 'z') # S([1], 'y') + S([4, 2, 1, 3], 'z') # S([2, 1], 'y') + S([4, 3, 1, 2], 'z') # S([1], 'y') 
$\endgroup$
3
  • 1
    $\begingroup$ There is some discussion on meta about the propriety of answering your own question. $\endgroup$ Commented Mar 21 at 3:40
  • 2
    $\begingroup$ I think compiling a list of interesting links for a topic should be acceptable for MO, though one might make it community wiki. (I also think that MO should move forward and allow what researchers in math feel to have a need for instead of carving rules in stone and then stick to those rules.) $\endgroup$ Commented Mar 21 at 8:29
  • 1
    $\begingroup$ @ChristianStump The purpose of meta is so that the community can continually revisit the "rules" and revise them as necessary. "Rules" that persist even after the discussion is revived, persist because the community judges that they still reflect current needs, not because the rules are "carved in stone." Anyway, this discussion is best carried out on meta rather than in these comments. $\endgroup$ Commented Mar 21 at 15:06
2
$\begingroup$

From 1997:

SP, a Package for Schubert Polynomials Realized with the Computer Algebra System MAPLE, Sébastien Veigneau,"Journal of Symbolic Computation", Volume 23, Issue 4, April 1997, Pages 413-425

Abstract:

We present the SP package devoted to the manipulation of Schubert polynomials. These polynomials contain as a subfamily the Schur symmetric functions and allow to extend to non symmetric polynomials the classical combinatorial techniques of the theory of symmetric functions. They have many applications, ranging from multivariate interpolation to intersection theory in algebraic geometry

$\endgroup$

You must log in to answer this question.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.