41 if(modulweight==
NULL)
return 0;
43 for(i=modulweight->
rows()-1;i!=0;i--)
56 for (i = Nvar; i>0; i--)
59 for (j = 0; j < Nstc; j++)
71 WerrorS(
"interal arrays too big");
74 p = (
int *)
omAlloc((
unsigned long)z *
sizeof(int));
78 memcpy(p,
Qpol[j],
Ql[j] *
sizeof(
int));
83 for (x =
Ql[j]; x < z; x++)
92 static int *
hAddHilb(
int Nv,
int x,
int *pol,
int *lp)
98 memcpy(pon, pol, l *
sizeof(
int));
101 for (i = x; i <
l; i++)
102 pon[i] -= pol[i - x];
103 for (i = l; i < ln; i++)
104 pon[i] = -pol[i - x];
108 for (i = l; i <
x; i++)
110 for (i = x; i < ln; i++)
111 pon[i] = -pol[i - x];
121 for (i = Nv; i>0; i--)
123 x = pure[var[i + 1]];
129 for (i = 0; i <
l; i++)
135 for (i = 0; i <
l; i++)
144 int Nvar,
int *pol,
int Lpol)
146 int iv = Nvar -1, ln,
a, a0, a1,
b,
i;
159 hStepS(sn, Nstc, var, Nvar, &a, &x);
183 hStepS(sn, Nstc, var, Nvar, &a, &x);
184 hElimS(sn, &b, a0, a, var, iv);
186 hPure(sn, a0, &a1, var, iv, pn, &i);
192 pon =
hAddHilb(iv, x - x0, pol, &ln);
199 pon =
hAddHilb(iv, x - x0, pol, &ln);
259 WerrorS(
"Ideal is not deg sorted!!");
345 for(j =
IDELEMS(I)-1; j>=i+1;j--)
356 for(j =
IDELEMS(I)-1; j>=i+2;j--)
379 for(i = 0; i<=
IDELEMS(I)-1;i++)
439 for(i = 0; i<=
IDELEMS(res)-1; i++)
469 for(j=
IDELEMS(I)-1;(j>=0)&&(flag);j--)
497 for(i =
IDELEMS(I)-1; (i>=0) && (dummy == 0); i--)
499 for(j = 1; (j<=
currRing->N) && (dummy == 0); j++)
530 for(i =0 ; (i<=
IDELEMS(I)-1) && (dummy == 0); i++)
532 for(j = 1; (j<=
currRing->N) && (dummy == 0); j++)
593 for(i = 0 ;i<=
IDELEMS(I)-1;i++)
624 for(i =
IDELEMS(I)-1;(i>=0) && (flag);i--)
627 for(j=1;(j<=
currRing->N) && (flag);j++)
652 for(i = 0;(i<=
IDELEMS(I)-1) && (flag);i++)
655 for(j=1;(j<=
currRing->N) && (flag);j++)
680 for(i =
IDELEMS(I)-1;(i>=0) && (flag);i--)
683 for(j=1;(j<=
currRing->N) && (flag);j++)
708 for(i = 0;(i<=
IDELEMS(I)-1) && (flag);i++)
711 for(j=1;(j<=
currRing->N) && (flag);j++)
814 if((variables % 2) == 0)
815 {mpz_set_si(dummy, 1);}
817 {mpz_set_si(dummy, -1);}
818 mpz_add(ec, ec, dummy);
831 int i,howmanyvarinp = 0;
839 eulerchar(Ip, variables-howmanyvarinp, ec);
855 for(i=
IDELEMS(I)-1;(i>=0)&&(flag);i--)
857 for(j=1;(j<=
currRing->N)&&(flag);j++)
867 if(notsqrfree !=
NULL)
898 for(j = 1;(j<=
currRing->N) &&(flag);j++)
940 void rouneslice(ideal I, ideal S,
poly q,
poly x,
int &
prune,
int &moreprune,
int &steps,
int &NNN, mpz_ptr &hilbertcoef,
int* &hilbpower)
1035 mpz_ptr ec_ptr = ec;
1040 hilbertcoef = (mpz_ptr)
omAlloc((NNN+1)*
sizeof(mpz_t));
1041 hilbpower = (
int*)
omAlloc((NNN+1)*
sizeof(int));
1042 mpz_init( &hilbertcoef[NNN]);
1043 mpz_set( &hilbertcoef[NNN], ec);
1045 hilbpower[NNN] =
DegMon(q);
1051 for(i = 0;(i<NNN)&&(flag == FALSE)&&(DegMon(q)>=hilbpower[
i]);i++)
1053 if((hilbpower[i]) == (
DegMon(q)))
1056 mpz_add(&hilbertcoef[i],&hilbertcoef[i],ec_ptr);
1061 hilbertcoef = (mpz_ptr)
omRealloc(hilbertcoef, (NNN+1)*
sizeof(mpz_t));
1062 hilbpower = (
int*)
omRealloc(hilbpower, (NNN+1)*
sizeof(int));
1063 mpz_init(&hilbertcoef[NNN]);
1064 for(j = NNN; j>
i; j--)
1066 mpz_set(&hilbertcoef[j],&hilbertcoef[j-1]);
1067 hilbpower[
j] = hilbpower[j-1];
1069 mpz_set( &hilbertcoef[i], ec);
1083 rouneslice(Ip, Sp, pq, x, prune, moreprune, steps, NNN, hilbertcoef,hilbpower);
1098 int steps = 0,
prune = 0, moreprune = 0;
1099 mpz_ptr hilbertcoef;
1113 rouneslice(I,S,q,X->m[0],
prune, moreprune, steps, NNN, hilbertcoef, hilbpower);
1121 printf(
"\n// %8d t^0",1);
1122 for(i = 0; i<NNN; i++)
1124 if(mpz_sgn(&hilbertcoef[i])!=0)
1126 gmp_printf(
"\n// %8Zd t^%d",&hilbertcoef[i],hilbpower[i]);
1129 omFreeSize(hilbertcoef, (NNN)*
sizeof(mpz_t));
1143 int i,
j,
k,
l, ii, mw;
1154 if (wdegree ==
NULL)
1189 if (modulweight !=
NULL)
1190 j = (*modulweight)[mc-1]-mw;
1195 for (i =
hNvar; i>=0; i--)
1225 while ((i > 0) && ((*Qpol)[i - 1] == 0))
1233 for (ii=0; ii<
k; ii++)
1234 (*work)[ii] = (*hseries1)[ii];
1235 if (hseries1 !=
NULL)
1242 (*hseries1)[i + j - 1] += (*Qpol)[i - 1];
1261 while ((*hseries1)[l-2]==0) l--;
1265 for (ii=l-2; ii>=0; ii--)
1266 (*work)[ii] = (*hseries1)[ii];
1270 (*hseries1)[l-1] = mw;
1272 for (i = 0; i <= (
currRing->N); i++)
1295 return hSeries(S, modulweight, 0, wdegree, Q, tailRing);
1303 return hSeries(S, modulweight, 1, wdegree, Q, tailRing);
1309 int i,
j,
k,
s, t,
l;
1310 if (hseries1 ==
NULL)
1312 work =
new intvec(hseries1);
1313 k = l = work->
length()-1;
1315 for (i = k-1; i >= 0; i--)
1319 if ((s != 0) || (k == 1))
1324 for (i = k-1; i >= 0; i--)
1332 hseries2 =
new intvec(k+1);
1333 for (i = k-1; i >= 0; i--)
1334 (*hseries2)[
i] = (*work)[
i];
1335 (*hseries2)[
k] = (*work)[
l];
1351 for(k=j-2; k>=0; k--)
1360 if (hseries ==
NULL)
1364 for (i = 0; i <
l; i++)
1369 Print(
"// %8d t^%d\n", j, i+k);
1385 const int l = hseries1->
length()-1;
1394 if ((l == 1) &&(mu == 0))
ideal idQuotMon(ideal Iorig, ideal p)
void rouneslice(ideal I, ideal S, poly q, poly x, int &prune, int &moreprune, int &steps, int &NNN, mpz_ptr &hilbertcoef, int *&hilbpower)
#define id_TestTail(A, lR, tR)
const CanonicalForm int s
void hLexS(scfmon stc, int Nstc, varset var, int Nvar)
const CanonicalForm int const CFList const Variable & y
static poly ChoosePVar(ideal I)
void mu(int **points, int sizePoints)
scfmon hGetmem(int lm, scfmon old, monp monmem)
void hElimS(scfmon stc, int *e1, int a2, int e2, varset var, int Nvar)
void scPrintDegree(int co, int mu)
static void hHilbStep(scmon pure, scfmon stc, int Nstc, varset var, int Nvar, int *pol, int Lpol)
static void hLastHilb(scmon pure, int Nv, varset var, int *pol, int lp)
BEGIN_NAMESPACE_SINGULARXX const ring const ring tailRing
#define omFreeSize(addr, size)
static short rVar(const ring r)
#define rVar(r) (r->N)
void id_Delete(ideal *h, ring r)
deletes an ideal/module/matrix
static poly ChoosePXL(ideal I)
static poly ChoosePOF(ideal I)
static bool JustVar(ideal I)
static bool IsIn(poly p, ideal I)
static poly pp_Mult_mm(poly p, poly m, const ring r)
static ideal idAddMon(ideal I, ideal p)
void hDegreeSeries(intvec *s1, intvec *s2, int *co, int *mu)
void WerrorS(const char *s)
static poly ChoosePVF(ideal I)
static poly LCMmon(ideal I)
intvec * hHstdSeries(ideal S, intvec *modulweight, intvec *wdegree, ideal Q, ring tailRing)
static poly p_Copy(poly p, const ring r)
returns a copy of p
void prune(Variable &alpha)
void hDelete(scfmon ev, int ev_length)
ring currRing
Widely used global variable which specifies the current polynomial ring for Singular interpreter and ...
long p_Deg(poly a, const ring r)
void hOrdSupp(scfmon stc, int Nstc, varset var, int Nvar)
const CanonicalForm CFMap CFMap & N
void hKill(monf xmem, int Nvar)
static long p_GetExp(const poly p, const unsigned long iBitmask, const int VarOffset)
get a single variable exponent : the integer VarOffset encodes:
static poly ChoosePJL(ideal I)
static int * hAddHilb(int Nv, int x, int *pol, int *lp)
static poly ChoosePXF(ideal I)
static void hWDegree(intvec *wdegree)
void hPure(scfmon stc, int a, int *Nstc, varset var, int Nvar, scmon pure, int *Npure)
void hStaircase(scfmon stc, int *Nstc, varset var, int Nvar)
static BOOLEAN p_DivisibleBy(poly a, poly b, const ring r)
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 intvec * hSeries(ideal S, intvec *modulweight, int, intvec *wdegree, ideal Q, ring tailRing)
static BOOLEAN p_IsOne(const poly p, const ring R)
either poly(1) or gen(k)?!
void hLex2S(scfmon rad, int e1, int a2, int e2, varset var, int Nvar, scfmon w)
static poly ChoosePVL(ideal I)
void idSkipZeroes(ideal ide)
gives an ideal/module the minimal possible size
static poly ChoosePJF(ideal I)
static void p_Delete(poly *p, const ring r)
ideal id_Mult(ideal h1, ideal h2, const ring R)
h1 * h2 one h_i must be an ideal (with at least one column) the other h_i may be a module (with no co...
ideal idInit(int idsize, int rank)
initialise an ideal / module
static poly ChoosePOL(ideal I)
static unsigned long p_SetExp(poly p, const unsigned long e, const unsigned long iBitmask, const int VarOffset)
set a single variable exponent : VarOffset encodes the position in p->exp
static ideal SortByDeg(ideal I)
void hStepS(scfmon stc, int Nstc, varset var, int Nvar, int *a, int *x)
ideal id_Add(ideal h1, ideal h2, const ring r)
h1 + h2
intvec * hSecondSeries(intvec *hseries1)
static int DegMon(poly p)
!!!!!!!!!!!!!!!!!!!! Just for Monomial Ideals !!!!!!!!!!!!!!!!!!!!!!!!!!!!
static poly SearchP(ideal I)
searches for a monomial of degree d>=2 and divides it by a variable (result monomial of deg d-1) ...
static void p_Setm(poly p, const ring r)
static ideal SortByDeg_p(ideal I, poly p)
static poly ChooseP(ideal I)
static bool idDegSortTest(ideal I)
intvec * hFirstSeries(ideal S, intvec *modulweight, ideal Q, intvec *wdegree, ring tailRing)
void hLookSeries(ideal S, intvec *modulweight, ideal Q, intvec *wdegree, ring tailRing)
static int hMinModulweight(intvec *modulweight)
BOOLEAN idIs0(ideal h)
returns true if h is the zero ideal
#define omRealloc(addr, size)
void hComp(scfmon exist, int Nexist, int ak, scfmon stc, int *Nstc)
static poly SqFree(ideal I)
poly p_ISet(long i, const ring r)
returns the poly representing the integer i
scfmon hInit(ideal S, ideal Q, int *Nexist, ring tailRing)
static void hHilbEst(scfmon stc, int Nstc, varset var, int Nvar)
static void hPrintHilb(intvec *hseries)
void hSupp(scfmon stc, int Nstc, varset var, int *Nvar)
static void eulerchar(ideal I, int variables, mpz_ptr ec)