# NumericalSchubertCalculus -- Numerical Algorithms for Schubert Calculus

## Description

This package provides implementations of both the Littlewood-Richardson and Pieri homotopy algorithms for solving (instances of) Schubert problems on Grassmannians using numerical homotopy continuation.

A Schubert problem on the Grassmannian $Gr(k,n)$ is a list of Schubert subvarieties (assumed general) of $Gr(k,n)$ whose codimensions add up to $k(n-k)$, the dimension of the Grassmannian. A Schubert variety is represented by a pair $(c,F)$, where $c$ is a Schubert condition (represented as a partition or a bracket) and $F$ is a flag, represented as an invertible $n\times n$-matrix. The Schubert variety for the pair $(c,F)$ consists of all $k$-planes that satisfy the incidence condition $c$ imposed by the flag $F$.

For a Schubert problem, we may fix one flag for each Schubert condition in the list --- i.e., describe an instance of a given Schubert problem --- and look for the solutions for this instance --- i.e., points in the intersection of the corresponding Schubert varieties. The methods of this package find approximations of these points.

### Service functions:

• setVerboseLevel -- set different levels of information printed on screen
• bracket2partition -- dictionary between different notations for Schubert conditions.
• partition2bracket -- dictionary between different notations for Schubert conditions.
• NSC2phc -- dictionary between different notations for Schubert problems.

### Using PHCpack:

An alternative implementation using PHCpack (download from here) includes the following functions:
• LRrule -- computes the product of Schubert classes using geometric Littlewood-Richardson rule
• LRtriple -- uses Littlewood-Richardson homotopy algorithm to solve a Schubert problem
• parseTriplet -- Parses the output from LRtriple into Macaulay2 objects.
• LRcheater -- A cheater's homotopy to a real Schubert triple intersection problem
• PieriRootCount -- the number of solutions to a generic Pieri problem
• PieriHomotopies -- runs the Pieri homotopies to solve a general hypersurface problem
Note that LRcheater is similar to changeFlags
For example, the Schubert problem {2,1}$^3$ in $Gr(3,6)$ with respect to random flags has 2 solutions
 i1 : k = 3; n = 6; i3 : SchPblm = { ({2,1}, random(CC^6,CC^6)), ({2,1}, random(CC^6,CC^6)), ({2,1}, random(CC^6,CC^6)) }; i4 : solveSchubertProblem(SchPblm, k,n) o4 = {| -.973546-.443329ii -.193482-.957391ii -.460977-.267623ii |, | | .153343-.291038ii .339479-1.30008ii -.577303-.171329ii | | | .326239-.770744ii .120186-1.46205ii -.0769985-.323186ii | | | -.451322-.514227ii -.144874-.987789ii -.589493-.209825ii | | | -.0525679-.692383ii .364061-.704785ii -.325325-.185011ii | | | -.942864-.594173ii -.826353-.203654ii -.236865+.691374ii | | ------------------------------------------------------------------------ -5.47422+1.18674ii -.912706-1.64344ii -.590144+.126046ii |} -2.80395-.714508ii -.793467-2.20255ii -.016225+.340982ii | -2.29873-2.34724ii -.905617-2.59114ii .0951404+.355536ii | -3.36313+2.14592ii -.703202-1.58202ii -.375349+.205204ii | -3.91243-.845457ii -.528411-.900447ii -.187047+.545512ii | -4.19554+1.93172ii -1.11528-.480829ii .19859+1.24706ii | o4 : List

## Version

This documentation describes version 1.17 of NumericalSchubertCalculus.

## Source code

The source code from which this documentation is derived is in the file NumericalSchubertCalculus.m2. The auxiliary files accompanying it are in the directory NumericalSchubertCalculus/.

## Exports

• Functions and commands
• bracket2partition -- dictionary between different notations for Schubert conditions.
• changeFlags -- continue solutions of a Schubert problem to another instance
• checkIncidenceSolution -- check if a solution satisfies an instance of a Schubert problem
• LRcheater -- A cheater's homotopy to a real Schubert triple intersection problem
• LRnumber -- returns the number of solutions to the given Schubert problem
• LRrule -- computes the product of Schubert classes using geometric Littlewood-Richardson rule
• LRtriple -- uses Littlewood-Richardson homotopy algorithm to solve a Schubert problem
• NSC2phc -- dictionary between different notations for Schubert problems.
• parseTriplet -- Parses the output from LRtriple into Macaulay2 objects.
• partition2bracket -- dictionary between different notations for Schubert conditions.
• PieriHomotopies -- runs the Pieri homotopies to solve a general hypersurface problem
• PieriRootCount -- the number of solutions to a generic Pieri problem
• printStatistics -- summary statistics (used by developers)
• "resetStatistics" -- see printStatistics -- summary statistics (used by developers)
• randomSchubertProblemInstance -- returns a random instance of a given Schubert problem
• setVerboseLevel -- set different levels of information printed on screen
• solutionsToAffineCoords -- writes solutions in global coords to affine coordinates.
• solveSchubertProblem -- uses Littlewood-Richardson homotopy algorithm to solve a Schubert problem
• solveSimpleSchubert -- uses Pieri homotopy algorithm to solve a simple Schubert problem
• wrapTriplet -- Wraps a flag, system, and solutions into one string for phc -e.
• Methods
• "bracket2partition(List,ZZ)" -- see bracket2partition -- dictionary between different notations for Schubert conditions.
• "changeFlags(List,Sequence)" -- see changeFlags -- continue solutions of a Schubert problem to another instance
• changeFlags(Matrix,List,Sequence) -- recursive call of change flags
• "checkIncidenceSolution(Matrix,List)" -- see checkIncidenceSolution -- check if a solution satisfies an instance of a Schubert problem
• "LRcheater(ZZ,Matrix,String)" -- see LRcheater -- A cheater's homotopy to a real Schubert triple intersection problem
• "LRnumber(List,ZZ,ZZ)" -- see LRnumber -- returns the number of solutions to the given Schubert problem
• "LRrule(ZZ,Matrix)" -- see LRrule -- computes the product of Schubert classes using geometric Littlewood-Richardson rule
• "LRtriple(ZZ,Matrix)" -- see LRtriple -- uses Littlewood-Richardson homotopy algorithm to solve a Schubert problem
• "NSC2phc(List,ZZ,ZZ)" -- see NSC2phc -- dictionary between different notations for Schubert problems.
• "parseTriplet(String,String,String)" -- see parseTriplet -- Parses the output from LRtriple into Macaulay2 objects.
• "partition2bracket(List,ZZ,ZZ)" -- see partition2bracket -- dictionary between different notations for Schubert conditions.
• "PieriHomotopies(ZZ,ZZ)" -- see PieriHomotopies -- runs the Pieri homotopies to solve a general hypersurface problem
• "PieriRootCount(ZZ,ZZ,ZZ)" -- see PieriRootCount -- the number of solutions to a generic Pieri problem
• "randomSchubertProblemInstance(List,ZZ,ZZ)" -- see randomSchubertProblemInstance -- returns a random instance of a given Schubert problem
• "setVerboseLevel(ZZ)" -- see setVerboseLevel -- set different levels of information printed on screen
• "solutionsToAffineCoords(List)" -- see solutionsToAffineCoords -- writes solutions in global coords to affine coordinates.
• "solveSchubertProblem(List,ZZ,ZZ)" -- see solveSchubertProblem -- uses Littlewood-Richardson homotopy algorithm to solve a Schubert problem
• "solveSimpleSchubert(List,ZZ,ZZ)" -- see solveSimpleSchubert -- uses Pieri homotopy algorithm to solve a simple Schubert problem
• "wrapTriplet(String,String,String)" -- see wrapTriplet -- Wraps a flag, system, and solutions into one string for phc -e.
• Symbols
• OneHomotopy -- strategy for changing flags.
• RandomSeed -- seed for the random number generators.
• WorkingPrecision -- option to raise the working precision to double double or quad double.

## For the programmer

The object NumericalSchubertCalculus is .