4
#include "gfanapplication.h"
5
#include "minkowskisum.h"
6
#include "newtonpolytope.h"
7
#include "buchberger.h"
13
#include "tropical2.h"
14
#include "dimension.h"
17
class TropicalApplication : public GFanApplication
19
FieldOption theFieldOption;
20
SimpleOption optionMultipleSets;
21
SimpleOption optionRay;
22
SimpleOption optionTraverse;
23
SimpleOption optionPerformanceTimer;
24
SimpleOption optionSymmetry;
25
SimpleOption optionGuess;
26
SimpleOption optionIncidencePrinting;
27
SimpleOption optionInitialIdealPrinting;
29
bool includeInDefaultInstallation()
33
const char *helpText()
37
TropicalApplication():
38
optionPerformanceTimer("-T","Enable performance timer"),
39
optionMultipleSets("-m","undocumented"),
40
optionRay("--ray","undocumented"),
41
optionGuess("--guess","undocumented"),
42
optionTraverse("--traverse","undocumented"),
43
optionSymmetry("--symmetry","undocumented"),
44
optionIncidencePrinting("--incidence","Print incidence information. This will also extract the full fan from its orbits!"),
45
optionInitialIdealPrinting("--initialideals","Print the initial ideals during incidence printing ONLY with --incidence")
55
PolynomialSetList tropical;
57
lpSetSolver("cddgmp");
60
if(optionGuess.getValue())
62
PolynomialSet g=P.parsePolynomialSetWithRing();
63
buchberger(&g,StandardGradedLexicographicTermOrder());
66
PolynomialSet fullBasis(g.getRing());
67
PolynomialSet g2=guessInitialIdealWithoutMonomial(g,&fullBasis,false);
69
AsciiPrinter(Stdout).printPolynomialSet(g2);
70
AsciiPrinter(Stdout).printPolynomialSet(fullBasis);
74
fprintf(Stderr,"Input: Krull dimension %i Dimension of homogeneity space %i\n",krullDimension(g),dimensionOfHomogeneitySpace(g));
75
fprintf(Stderr,"Output: Krull dimension %i Dimension of homogeneity space %i\n",krullDimension(g2),dimensionOfHomogeneitySpace(g2));
82
if(optionRay.getValue())
84
AsciiPrinter p(Stdout);
85
bergmanRay(P.parsePolynomialSetWithRing()).print(p);
90
if(optionTraverse.getValue())
92
AsciiPrinter p(Stdout);
93
PolynomialSet coneGroebnerBasis=P.parsePolynomialSetWithRing();
94
PolynomialSet idealGroebnerBasis=P.parsePolynomialSet(coneGroebnerBasis.getRing());
95
coneGroebnerBasis.changeNumberOfVariables(idealGroebnerBasis.numberOfVariablesInRing());
97
SymmetryGroup s(idealGroebnerBasis.numberOfVariablesInRing());
98
if(optionSymmetry.getValue())
100
IntegerVectorList generators=P.parseIntegerVectorList();
101
for(IntegerVectorList::iterator i=generators.begin();i!=generators.end();i++)
103
assert(areIdealsEqual(idealGroebnerBasis,SymmetryGroup::permutePolynomialSet(idealGroebnerBasis,*i)));
106
s.computeClosure(generators);
110
BergmanFan f=bergman(coneGroebnerBasis,idealGroebnerBasis,&s);
113
if(optionIncidencePrinting.getValue())
115
PolyhedralFan p1=f.toPolyhedralFan();
117
p1.removeAllLowerDimensional();
119
AsciiPrinter Q(Stdout);
121
assert(0);// p1.printWithIndices(&Q,&s);
123
if(optionInitialIdealPrinting.getValue())
125
// AsciiPrinter p(Stderr);
126
PolyhedralFan p1=f.toPolyhedralFan();
127
int n=p1.getAmbientDimension();
128
IncidenceList a=p1.getIncidenceList(&s);
129
IntegerVectorList rays=p1.getRaysInPrintingOrder(&s);
130
p.printString("Rays:\n");
131
p.printVectorList(rays);
132
vector<IntegerVector> rays2(rays.size());
134
for(IntegerVectorList::const_iterator k=rays.begin();k!=rays.end();k++)
137
for(IncidenceList::const_iterator j=a.begin();j!=a.end();j++)
139
p.printInteger(j->first);
140
for(IntegerVectorList::const_iterator i=j->second.begin();i!=j->second.end();i++)
144
for(int t=0;t<i->size();t++)
149
PolynomialSet g2=idealGroebnerBasis;
150
buchberger(&g2,WeightReverseLexicographicTermOrder(v));
151
g2=initialFormsAssumeMarked(g2,v);
152
g2=saturatedIdeal(g2);
153
p.printPolynomialSet(g2);
161
if(optionPerformanceTimer.getValue())Timer::printList();
165
PolynomialSetList input;
167
if(optionMultipleSets.getValue())
168
input=P.parsePolynomialSetListWithRing();
170
input.push_back(P.parsePolynomialSetWithRing());
172
for(PolynomialSetList::const_iterator g=input.begin();g!=input.end();g++)
175
PolynomialSetList s=fullColoredIdeals(*g,false);
178
fprintf(Stderr,"Monomial Intial Ideal num: %i\n",num++);
180
// AsciiPrinter(Stdout).printPolynomialSetList(s);
182
// fprintf(Stdout,"contains no monomials:\n");
183
for(PolynomialSetList::const_iterator i=s.begin();i!=s.end();i++)
185
fprintf(Stderr,"Testing ideal:\n");
186
AsciiPrinter(Stderr).printPolynomialSet(*i);
187
if(!containsMonomial(*i))
189
// AsciiPrinter(Stdout).printPolynomialSet(*i);
193
buchberger(&g,StandardGradedLexicographicTermOrder());
196
for(PolynomialSetList::const_iterator j=tropical.begin();j!=tropical.end();j++)
198
if(areIdealsEqual(*j,g))
204
if(!inList)tropical.push_back(g);
208
fprintf(Stderr,"No duplicates:\n");
209
AsciiPrinter(Stdout).printPolynomialSetList(tropical);
212
for(PolynomialSetList::const_iterator i=tropical.begin();i!=tropical.end();i++)
214
int coDim=rankOfMatrix(wallInequalities(*i));
215
int d=i->numberOfVariablesInRing()-coDim;
218
fprintf(Stderr,"Error computing dimension of cone:");
219
AsciiPrinter(Stderr).printPolynomialSet(*i);
220
AsciiPrinter(Stderr).printVectorList(wallInequalities(*i));
221
fprintf(Stderr,"coDim= %i, numberOfVariables= %i\n",coDim,i->numberOfVariablesInRing());
223
fprintf(Stderr,"%i\n",d);
230
static TropicalApplication theApplication;