# NumericalSchubertCalculus -- Numerical Algorithms for Schubert Calculus

## Description

Tools for solving Schubert problems on Grassmannians using numerical homotopy continuation.

The package NumericalSchubertCalculus implements the Littlewood-Richardson and Pieri homotopy algorithms.

### General functions include:

• randomSchubertProblemInstance -- Returns a random instance of a given Schubert problem by computing random matrices representing flags
• changeFlags -- Parameter homotopies to move solutions of a Schubert problem from one instance to another
• checkIncidenceSolution -- Check if a solution satisfies the incidence conditions of a Schubert problem

### Functions implementing homotopies specific to Schubert calculus:

• solveSchubertProblem -- uses Littlewood-Richardson homotopy to solve Schubert problems on Grassmannians
• solveSimpleSchubert -- uses Pieri homotopy algorithm to solve simple Schubert problems on Grassmannians

### Using PHCpack:

An alternative implementation using PHCpack (download from here) includes the following functions:
• LRrule -- uses the geometric Littlewood-Richardson rule to resolve a Schubert intersection problem.
• LRtriple -- runs the Littlewood-Richardson homotopy to solve a generic Schubert problem.
• parseTriplet -- Parses a flag, system, and solutions (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.16 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 -- Parameter homotopies to move solutions of a Schubert problem from one instance to another
• checkIncidenceSolution -- Check if a solution satisfies the incidence conditions of a Schubert problem
• findGaloisElement (missing documentation)
• isFullSymmetric (missing documentation)
• isGaloisFullSymmetric (missing documentation)
• LRcheater -- A cheater's homotopy to a real Schubert triple intersection problem
• LRrule -- uses the geometric Littlewood-Richardson rule to resolve a Schubert intersection problem.
• LRtriple -- runs the Littlewood-Richardson homotopy to solve a generic Schubert problem.
• parseTriplet -- Parses a flag, system, and solutions (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 (missing documentation)
• randomSchubertProblemInstance -- Returns a random instance of a given Schubert problem by computing random matrices representing flags
• setVerboseLevel -- Set different levels of information printed on screen
• solutionsToAffineCoords -- writes solutions in global coords to affine coordinates.
• solveSchubertProblem -- uses Littlewood-Richardson homotopy to solve Schubert problems on Grassmannians
• solveSimpleSchubert -- uses Pieri homotopy algorithm to solve simple Schubert problems on Grassmannians
• 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 -- Parameter homotopies to move solutions of a Schubert problem from one instance to another
• changeFlags(Matrix,List,Sequence) -- Recursive call of change flags
• "checkIncidenceSolution(Matrix,List)" -- see checkIncidenceSolution -- Check if a solution satisfies the incidence conditions of a Schubert problem
• "LRcheater(ZZ,Matrix,String)" -- see LRcheater -- A cheater's homotopy to a real Schubert triple intersection problem
• "LRrule(ZZ,Matrix)" -- see LRrule -- uses the geometric Littlewood-Richardson rule to resolve a Schubert intersection problem.
• "LRtriple(ZZ,Matrix)" -- see LRtriple -- runs the Littlewood-Richardson homotopy to solve a generic Schubert problem.
• "parseTriplet(String,String,String)" -- see parseTriplet -- Parses a flag, system, and solutions (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 by computing random matrices representing flags
• "solutionsToAffineCoords(List)" -- see solutionsToAffineCoords -- writes solutions in global coords to affine coordinates.
• "solveSchubertProblem(List,ZZ,ZZ)" -- see solveSchubertProblem -- uses Littlewood-Richardson homotopy to solve Schubert problems on Grassmannians
• "solveSimpleSchubert(List,ZZ,ZZ)" -- see solveSimpleSchubert -- uses Pieri homotopy algorithm to solve simple Schubert problems on Grassmannians
• "wrapTriplet(String,String,String)" -- see wrapTriplet -- Wraps a flag, system, and solutions into one string for phc -e.
• Symbols

## For the programmer

The object NumericalSchubertCalculus is .