3
#include "polynomial.h"
5
#include "buchberger.h"
8
#include "reversesearch.h"
9
#include "polyhedralfan.h"
10
#include "breadthfirstsearch.h"
11
#include "termorder.h"
12
#include "ep_standard.h"
14
#include "gfanapplication.h"
16
#include "dimension.h"
18
#include "tropical2.h"
20
class FVectorApplication : public GFanApplication
22
IntegerOption debugOption;
23
SimpleOption listInitialIdealsOption;
24
SimpleOption checkBgOption;
26
bool includeInDefaultInstallation()
30
const char *helpText()
32
return "This program takes the complete list of reduced Groebner bases for a homogeneous ideal and outputs the f-vector for the Groebner fan.\n";
35
checkBgOption("--bg","Check BG theorem.\n"),
36
listInitialIdealsOption("-l","List all initial ideals.\n"),
37
debugOption("-d","Tell the program to print out the partial f-vector for every nth Groebner basis. Besides printing the partial f-vector on the stderr the program also tries to write it to the file gfan_fvector_temporary.",0)
49
// Field::printList(Stderr);
51
LpSolver::printList(Stderr);
52
lpSetSolver("cddgmp");
56
PolynomialRing r=p.parsePolynomialRing();
57
int c=p.nextNonBlank();
60
IntegerVector fTrop(0);
66
assert(p.isLeftBracket(c));
67
if(listInitialIdealsOption.getValue())fprintf(Stdout,"{");
70
PolynomialSet g=p.parsePolynomialSet(r);
73
n=g.numberOfVariablesInRing();
74
homog=dimensionOfHomogeneitySpace(g);
75
f=IntegerVector(n-homog+1);
76
fTrop=IntegerVector(n-homog+1);
77
// fprintf(Stderr,"Dimensions computed.\n");
79
PolyhedralCone c=groebnerCone(g,true);
82
for(int i=0;i<n-homog+1;i++)
84
F.removeAllLowerDimensional();
85
// IntegerVectorList l=F.getRelativeInteriorPoints();
88
// assert(l.size()==1);
93
// fprintf(Stderr,"checking cone\n");
94
PolyhedralCone K=F.highestDimensionalCone();
97
IntegerVector w=K.getRelativeInteriorPoint();
98
WeightTermOrder myOrder(w);
99
if(g.checkMarkings(myOrder))
103
if(checkBgOption.getValue())
105
if(!containsMonomial(initialFormsAssumeMarked(g,w)))
108
PolynomialSet g2=saturatedIdeal(initialFormsAssumeMarked(g,w));
109
fprintf(Stderr,"Checking BG theorem\n");
110
AsciiPrinter(Stderr).printPolynomialSet(g2);
111
assert(krullDimension(g2)==krullDimension(g));
114
if(listInitialIdealsOption.getValue())
116
if(!first)fprintf(Stdout,",\n");
118
AsciiPrinter(Stdout).printPolynomialSet(initialFormsAssumeMarked(g,w));
123
// fprintf(Stderr,"facetComplex computed\n");
126
if(debugOption.getValue())
128
if((counter%debugOption.getValue())==0)
130
AsciiPrinter(Stderr).printVector(f);
131
AsciiPrinter(Stderr).printNewLine();
133
FILE *p=fopen("gfan_fvector_temporary","w");
136
AsciiPrinter(p).printVector(f);
137
AsciiPrinter(p).printNewLine();
143
while((c=p.nextNonBlank())==',');
144
assert(p.isRightBracket(c));
145
if(listInitialIdealsOption.getValue())fprintf(Stdout,"}\n");
147
AsciiPrinter(Stdout).printVector(f);
148
if(checkBgOption.getValue())
150
fprintf(Stdout,"F-vector of tropical variety:\n");
151
AsciiPrinter(Stdout).printVector(fTrop);
157
static FVectorApplication theApplication;