1 #include <gfanlib/gfanlib_matrix.h> 2 #include <gfanlib/gfanlib_zcone.h> 28 for (ZConesSortedByDimension::iterator coneOfA=setA.begin(); coneOfA!=setA.end(); coneOfA++)
30 for (ZConesSortedByDimension::iterator coneOfB=setB.begin(); coneOfB!=setB.end(); coneOfB++)
32 gfan::ZCone coneOfIntersection = gfan::intersection(*coneOfA,*coneOfB);
33 if (coneOfIntersection.dimension()>=d)
35 coneOfIntersection.canonicalize();
36 setAB.insert(coneOfIntersection);
54 int h = W.getHeight();
59 s->order = (
int*)
omAlloc0((h+4)*
sizeof(int));
61 s->block0 = (
int*)
omAlloc0((h+4)*
sizeof(int));
63 s->block1 = (
int*)
omAlloc0((h+4)*
sizeof(int));
64 for (
int j=0; s->wvhdl[
j];
j++)
omFree(s->wvhdl[
j]);
66 s->wvhdl = (
int**)
omAlloc0((h+4)*
sizeof(
int*));
69 bool overflow =
false;
80 for (
int j=0;
j<h-1;
j++)
97 WerrorS(
"genericlyWeightedOrdering: overflow in weight vector");
122 int PayneOsserman =
rVar(r)-1;
123 for (
int i=0;
i<
k;
i++)
142 for (std::set<gfan::ZCone>::iterator zc=C.begin(); zc!=C.end();)
144 gfan::ZVector
w = zc->getRelativeInteriorPoint();
145 gfan::ZMatrix W = zc->generatorsOfSpan();
151 for (
int j=0;
j<
k;
j++)
156 ideal ininIs =
initial(inIsSTD,s,w,W);
160 if (mons.first!=
NULL)
165 gs = inIsSTD->m[mons.second];
168 gs =
witness(mons.first,inIsSTD,ininIs,s);
196 if (zc->contains(wNeg))
201 for (
int j=0;
j<
k;
j++)
206 ininIs =
initial(inIsSTD,s,wNeg,W);
209 if (mons.first!=
NULL)
214 gs = inIsSTD->m[mons.second];
217 gs =
witness(mons.first,inIsSTD,ininIs,s);
255 gfan::ZMatrix raysOfC(0,u.size());
258 for (ZConesSortedByDimension::iterator zc=C.begin(); zc!=C.end(); zc++)
260 assume(zc->dimensionOfLinealitySpace()+1 >= zc->dimension());
261 if (zc->dimensionOfLinealitySpace()+1 >= zc->dimension())
262 raysOfC.appendRow(zc->getRelativeInteriorPoint());
265 gfan::ZVector interiorPoint = zc->getRelativeInteriorPoint();
268 raysOfC.appendRow(interiorPoint);
269 raysOfC.appendRow(currentStrategy->
negateWeight(interiorPoint));
273 gfan::ZMatrix zm = zc->generatorsOfLinealitySpace();
274 for (
int i=0;
i<zm.getHeight();
i++)
276 gfan::ZVector point = zm[
i];
279 raysOfC.appendRow(point);
280 raysOfC.appendRow(currentStrategy->
negateWeight(point));
290 for (ZConesSortedByDimension::iterator zc=C.begin(); zc!=C.end(); zc++)
292 assume(zc->dimensionOfLinealitySpace()+2 >= zc->dimension());
293 if (zc->dimensionOfLinealitySpace()+2 == zc->dimension())
294 raysOfC.appendRow(zc->getRelativeInteriorPoint());
297 gfan::ZVector interiorPoint = zc->getRelativeInteriorPoint();
300 raysOfC.appendRow(interiorPoint);
301 raysOfC.appendRow(currentStrategy->
negateWeight(interiorPoint));
305 gfan::ZMatrix zm = zc->generatorsOfLinealitySpace();
306 for (
int i=0;
i<zm.getHeight();
i++)
308 gfan::ZVector point = zm[
i];
311 raysOfC.appendRow(point);
312 raysOfC.appendRow(currentStrategy->
negateWeight(point));
implementation of the class tropicalStrategy
const CanonicalForm int s
static ring genericlyWeightedOrdering(const ring r, const gfan::ZVector &u, const gfan::ZVector &w, const gfan::ZMatrix &W, const tropicalStrategy *currentStrategy)
ZConesSortedByDimension tropicalVarietySortedByDimension(const poly g, const ring r, const tropicalStrategy *currentCase)
static short rVar(const ring r)
#define rVar(r) (r->N)
void id_Delete(ideal *h, ring r)
deletes an ideal/module/matrix
int * ZVectorToIntStar(const gfan::ZVector &v, bool &overflow)
void WerrorS(const char *s)
poly initial(const poly p, const ring r, const gfan::ZVector &w)
Returns the initial form of p with respect to w.
poly p_PermPoly(poly p, const int *perm, const ring oldRing, const ring dst, nMapFunc nMap, const int *par_perm, int OldPar, BOOLEAN use_mult)
std::set< gfan::ZCone, ZConeCompareDimensionFirst > ZConesSortedByDimension
BOOLEAN rComplete(ring r, int force)
this needs to be called whenever a new ring is created: new fields in ring are created (like VarOffse...
ideal gfanlib_kStd_wrapper(ideal I, ring r, tHomog h=testHomog)
ring rCopy0(const ring r, BOOLEAN copy_qideal, BOOLEAN copy_ordering)
number(* nMapFunc)(number a, const coeffs src, const coeffs dst)
maps "a", which lives in src, into dst
BOOLEAN idInsertPoly(ideal h1, poly h2)
insert h2 into h1 (if h2 is not the zero polynomial) return TRUE iff h2 was indeed inserted ...
static ZConesSortedByDimension intersect(const ZConesSortedByDimension &setA, const ZConesSortedByDimension &setB, int d=0)
static int si_max(const int a, const int b)
gfan::ZVector adjustWeightForHomogeneity(gfan::ZVector w) const
Given weight w, returns a strictly positive weight u such that an ideal satisfying the valuation-sepc...
bool restrictToLowerHalfSpace() const
returns true, if valuation non-trivial, false otherwise
static FORCE_INLINE nMapFunc n_SetMap(const coeffs src, const coeffs dst)
set the mapping function pointers for translating numbers from src to dst
ZConesSortedByDimension tropicalStar(ideal inI, const ring r, const gfan::ZVector &u, const tropicalStrategy *currentStrategy)
static void p_Delete(poly *p, const ring r)
ideal idInit(int idsize, int rank)
initialise an ideal / module
gfan::ZVector negateWeight(const gfan::ZVector &w) const
poly witness(const poly m, const ideal I, const ideal inI, const ring r)
Let w be the uppermost weight vector in the matrix defining the ordering on r.
void rDelete(ring r)
unconditionally deletes fields in r
int getExpectedDimension() const
returns the expected Dimension of the polyhedral output
bool homogeneitySpaceContains(const gfan::ZVector &v) const
returns true, if v is contained in the homogeneity space; false otherwise
std::pair< poly, int > checkInitialIdealForMonomial(const ideal I, const ring r, const gfan::ZVector &w=0) const
If given w, assuming w is in the Groebner cone of the ordering on r and I is a standard basis with re...
gfan::ZVector adjustWeightUnderHomogeneity(gfan::ZVector v, gfan::ZVector w) const
Given strictly positive weight w and weight v, returns a strictly positive weight u such that on an i...
gfan::ZMatrix raysOfTropicalStar(ideal I, const ring r, const gfan::ZVector &u, const tropicalStrategy *currentStrategy)