# changeFlags -- continue solutions of a Schubert problem to another instance

## Synopsis

• Usage:
changeFlags(sols,CFG)
• Inputs:
• sols, a list, solutions of a Schubert problem written as $n\times k$ matrices
• CFG, , a triple (C,F,G) where C is a list of m Schubert conditions, F is a list of m flags defining an instance with solution set sols, G is a list of m flags defining the instance whose solutions we want.
• Optional inputs:
• OneHomotopy => ..., default value true, strategy for moving solutions to a Schubert problem
• Outputs:
• a list, solutions of the problem with respect to flags G.

## Description

If sols is a set of solutions to a Schubert problem $l_1,\ldots,l_m$ with respect to a set of flags $F_1,\ldots, F_m$, uses parameter homotopies to move $S$ to a solution set $S'$ for the same Schubert problem, but with respect to another set of flags $G_1,\ldots, G_m$.

For instance, consider the Schubert problem $(2,1)^3$ in $Gr(3,6)$.

 i1 : k=3; n=6; i3 : l1={2,1}; i4 : l2={2,1}; i5 : l3={2,1};

Generate flags $F$: standard flag, opposite flag, and one random.

 i6 : F = {(l1, id_(CC^n)), (l2, rsort id_(CC^n)), (l3,random(CC^n,CC^n))} o6 = {({2, 1}, | 1 0 0 0 0 0 |), ({2, 1}, | 0 0 0 0 0 1 |), ({2, 1}, | | 0 1 0 0 0 0 | | 0 0 0 0 1 0 | | | 0 0 1 0 0 0 | | 0 0 0 1 0 0 | | | 0 0 0 1 0 0 | | 0 0 1 0 0 0 | | | 0 0 0 0 1 0 | | 0 1 0 0 0 0 | | | 0 0 0 0 0 1 | | 1 0 0 0 0 0 | | ------------------------------------------------------------------------ .892712+.673395ii .0741835+.808694ii .830833+.538554ii .29398+.632944ii .362835+.706096ii .873665+.415912ii .0258884+.714827ii .127435+.254482ii .606588+.848005ii .89189+.231053ii .741046+.108386ii .191734+.403215ii .461944+.775187ii .348931+.562428ii .615911+.0147867ii .909047+.314897ii .246268+.153346ii .223028+.388829ii ------------------------------------------------------------------------ .557119+.873708ii .0647412+.877846ii .444183+.644366ii |)} .7037+.681869ii .0340514+.507989ii .194945+.518585ii | .276259+.605659ii .150294+.656391ii .987173+.568273ii | .96518+.681683ii .174853+.626892ii .184779+.370833ii | .914199+.887381ii .350611+.379495ii .339222+.062212ii | .169813+.965004ii .237252+.116721ii .465736+.40273ii | o6 : List

Generate a random set of flags $G$.

 i7 : G = randomSchubertProblemInstance({l1,l2,l3},k,n);

We solve with respect to $F$.

 i8 : S = solveSchubertProblem(F,k,n); i9 : FlagsF = F/last; i10 : FlagsG = G/last;

and we transform the solutions to get solutions with respect to $G$

 i11 : time S' = changeFlags(S,({l1,l2,l3},FlagsF,FlagsG)) -- used 2.61738 seconds o11 = {| .124063-.286284ii .167867-.0639299ii .295488-.366109ii |, | | -.25181-.0448108ii -.107521-.190275ii -.0896067-.483543ii | | | .219256+.214331ii .0873511+.372915ii -.213803+.410917ii | | | .24818-.0567624ii .138074+.069527ii -.446051+.0426311ii | | | -.122857+.030327ii -.0079778-.488031ii .214077+.374278ii | | | -.402855+.0597291ii -.43662-.200568ii -.254234+.748617ii | | ----------------------------------------------------------------------- -.00839714-.407126ii .205329-.387394ii .424542-.396438ii |} .192354-.0445916ii .719274+.437354ii .49019+.0178286ii | -.396883+.032256ii -.296361-.56774ii -.362153+.372505ii | .153499+.396506ii -.494939+.496139ii -.411614+.315486ii | -.282532+.248918ii -.874085+.276867ii -.807461+.498361ii | .0284784+.374339ii -.588673+.906394ii -.233277+.814607ii | o11 : List i12 : assert all(S', s-> checkIncidenceSolution(s,G))

We can also choose a different strategy

 i13 : time S' = changeFlags(S,({l1,l2,l3},FlagsF,FlagsG), OneHomotopy=>false) -- used 1.52701 seconds o13 = {| -.226702-.119043ii -.326452-.119841ii .0929953-.230085ii |, | | -.229738+.0833434ii -.445398+.0639826ii .150646-.436884ii | | | .279834-.0761677ii .402182-.016251ii -.178732+.299631ii | | | -.119002+.197573ii -.108802+.642985ii -.820159-.281606ii | | | -.134096+.0372165ii -.127528-.0349071ii .204901-.0516554ii | | | .499185+.465779ii 1.13857+.442385ii -.50217+1.18715ii | | ----------------------------------------------------------------------- .132399-.579396ii .78366-.359334ii -.647254+1.41489ii |} -.0614253+.257063ii -.356136+.210321ii .116836-.599086ii | .127487-.876713ii .739985-1.32758ii .872113+1.6876ii | -.103026+.750164ii -.798533+.84669ii -.0252049-1.72596ii | -.0428908-.187959ii .27551-.59017ii .739685+.785045ii | -.236198+.0362704ii -.341298-.374585ii .878579-.176735ii | o13 : List i14 : assert all(S', s-> checkIncidenceSolution(s,G))

## Caveat

There are two strategies: when OneHomotopy is set to true (default) it uses straight line homotopies to change flags, but assumes the initial flags are generic.

When OneHomotopy is set to false, it makes gradual changes in the flags by changing one column at a time, and using only linear homotopies, but in this setting, it generates polynomial equations using all minors of the incidence conditions (thus is not very effective).