1 #include "polyhedralcone.h" 2 #include "termorder.h" 3 #include "buchberger.h" 4 #include "wallideal.h" 5 #include "tropical2.h" 6 7 class RestrictedGFanEnumeration{ RestrictedGFanEnumeration(PolynomialSet const & I,PolyhedralCone const & c)8 RestrictedGFanEnumeration(PolynomialSet const &I, PolyhedralCone const &c) 9 { 10 int n=c.ambientDimension(); 11 IntegerVectorList inequalities=c.getHalfSpaces(); 12 IntegerVectorList equations=c.getEquations(); 13 IntegerVector v=c.getRelativeInteriorPoint(); //positive orthant 14 15 WeightReverseLexicographicTermOrder myOrder(v); 16 17 PolynomialSet g=I; 18 buchberger(&g,myOrder); 19 // minimize(&g); 20 // autoReduce(&g,myOrder); 21 22 IntegerVectorList facets=wallInequalities(g); 23 facets=algebraicTest(facets,g); 24 25 inequalities.splice(inequalities.end(),facets); 26 27 PolyhedralCone c2(inequalities,equations,n); 28 29 c2.findFacets(); 30 31 IntegerVectorList facets2=c2.getHalfSpaces(); 32 for(IntegerVectorList::const_iterator i=facets2.begin();i!=facets2.end();i++) 33 { 34 IntegerVectorList equations2=equations; 35 equations2.push_back(*i); 36 PolyhedralCone c3(inequalities,equations2,n); 37 IntegerVector v3=c3.getRelativeInteriorPoint(); 38 PolynomialSet g3=initialFormsAssumeMarked(g,v3); 39 40 IntegerVectorList inequalities2=inequalities; 41 inequalities.push_back(-(*i)); 42 IntegerVectorList empty; 43 PolyhedralCone c4(inequalities2,empty,n); 44 IntegerVector v4=c4.getRelativeInteriorPoint(); 45 WeightReverseLexicographicTermOrder myOrder4(v4); 46 PolynomialSet g4=g3; 47 buchberger(&g4); 48 49 50 51 //Lift g to a basis compatible with termorder of g4 52 PolynomialSet g5(theRing); 53 for(PolynomialSet::const_iterator j=g4.begin();j!=g4.end();j++) 54 g5.push_back(divisionLift(*j, g3, g, LexicographicTermOrder())); 55 autoreduce(g5); 56 57 PolynomialSet g6=initialFormsAssumeMarked(g4,v4); 58 //We now have a pair g5 and g6 59 //We don't really need g6, do we? 60 } 61 } 62 }; 63