52 if(modulweight==
NULL)
return 0;
54 for(i=modulweight->
rows()-1;i!=0;i--)
67 for (i = Nvar; i>0; i--)
70 for (j = 0; j < Nstc; j++)
82 WerrorS(
"internal arrays too big");
85 p = (
int *)
omAlloc((
unsigned long)z *
sizeof(int));
89 memcpy(p,
Qpol[j],
Ql[j] *
sizeof(
int));
94 for (x =
Ql[j]; x < z; x++)
109 memcpy(pon, pol, l *
sizeof(
int));
112 for (i = x; i <
l; i++)
113 pon[i] -= pol[i - x];
114 for (i = l; i < ln; i++)
115 pon[i] = -pol[i - x];
119 for (i = l; i <
x; i++)
121 for (i = x; i < ln; i++)
122 pon[i] = -pol[i - x];
132 for (i = Nv; i>0; i--)
134 x = pure[var[i + 1]];
140 for (i = 0; i <
l; i++)
146 for (i = 0; i <
l; i++)
155 int Nvar,
int *pol,
int Lpol)
157 int iv = Nvar -1, ln,
a, a0, a1,
b,
i;
170 hStepS(sn, Nstc, var, Nvar, &a, &x);
194 hStepS(sn, Nstc, var, Nvar, &a, &x);
195 hElimS(sn, &b, a0, a, var, iv);
197 hPure(sn, a0, &a1, var, iv, pn, &i);
203 pon =
hAddHilb(iv, x - x0, pol, &ln);
210 pon =
hAddHilb(iv, x - x0, pol, &ln);
254 WerrorS(
"Ideal is not deg sorted!!");
340 for(j =
IDELEMS(I)-1; j>=i+1;j--)
351 for(j =
IDELEMS(I)-1; j>=i+2;j--)
374 for(i = 0; i<=
IDELEMS(I)-1;i++)
434 for(i = 0; i<=
IDELEMS(res)-1; i++)
464 for(j=
IDELEMS(I)-1;(j>=0)&&(flag);j--)
492 for(i =
IDELEMS(I)-1; (i>=0) && (dummy == 0); i--)
494 for(j = 1; (j<=
currRing->N) && (dummy == 0); j++)
525 for(i =0 ; (i<=
IDELEMS(I)-1) && (dummy == 0); i++)
527 for(j = 1; (j<=
currRing->N) && (dummy == 0); j++)
588 for(i = 0 ;i<=
IDELEMS(I)-1;i++)
619 for(i =
IDELEMS(I)-1;(i>=0) && (flag);i--)
622 for(j=1;(j<=
currRing->N) && (flag);j++)
647 for(i = 0;(i<=
IDELEMS(I)-1) && (flag);i++)
650 for(j=1;(j<=
currRing->N) && (flag);j++)
675 for(i =
IDELEMS(I)-1;(i>=0) && (flag);i--)
678 for(j=1;(j<=
currRing->N) && (flag);j++)
703 for(i = 0;(i<=
IDELEMS(I)-1) && (flag);i++)
706 for(j=1;(j<=
currRing->N) && (flag);j++)
809 if((variables % 2) == 0)
810 {mpz_set_si(dummy, 1);}
812 {mpz_set_si(dummy, -1);}
813 mpz_add(ec, ec, dummy);
826 int i,howmanyvarinp = 0;
834 eulerchar(Ip, variables-howmanyvarinp, ec);
850 for(i=
IDELEMS(I)-1;(i>=0)&&(flag);i--)
852 for(j=1;(j<=
currRing->N)&&(flag);j++)
862 if(notsqrfree !=
NULL)
893 for(j = 1;(j<=
currRing->N) &&(flag);j++)
935 void rouneslice(ideal I, ideal S,
poly q,
poly x,
int &
prune,
int &moreprune,
int &steps,
int &NNN, mpz_ptr &hilbertcoef,
int* &hilbpower)
1030 mpz_ptr ec_ptr = ec;
1035 hilbertcoef = (mpz_ptr)
omAlloc((NNN+1)*
sizeof(mpz_t));
1036 hilbpower = (
int*)
omAlloc((NNN+1)*
sizeof(int));
1037 mpz_init( &hilbertcoef[NNN]);
1038 mpz_set( &hilbertcoef[NNN], ec);
1046 for(i = 0;(i<NNN)&&(flag == FALSE)&&(p_Totaldegree(q,currRing)>=hilbpower[
i]);i++)
1051 mpz_add(&hilbertcoef[i],&hilbertcoef[i],ec_ptr);
1056 hilbertcoef = (mpz_ptr)
omRealloc(hilbertcoef, (NNN+1)*
sizeof(mpz_t));
1057 hilbpower = (
int*)
omRealloc(hilbpower, (NNN+1)*
sizeof(int));
1058 mpz_init(&hilbertcoef[NNN]);
1059 for(j = NNN; j>
i; j--)
1061 mpz_set(&hilbertcoef[j],&hilbertcoef[j-1]);
1062 hilbpower[
j] = hilbpower[j-1];
1064 mpz_set( &hilbertcoef[i], ec);
1078 rouneslice(Ip, Sp, pq, x, prune, moreprune, steps, NNN, hilbertcoef,hilbpower);
1093 int steps = 0,
prune = 0, moreprune = 0;
1094 mpz_ptr hilbertcoef;
1108 rouneslice(I,S,q,X->m[0],
prune, moreprune, steps, NNN, hilbertcoef, hilbpower);
1116 printf(
"\n// %8d t^0",1);
1117 for(i = 0; i<NNN; i++)
1119 if(mpz_sgn(&hilbertcoef[i])!=0)
1121 gmp_printf(
"\n// %8Zd t^%d",&hilbertcoef[i],hilbpower[i]);
1124 omFreeSize(hilbertcoef, (NNN)*
sizeof(mpz_t));
1138 int i,
j,
k,
l, ii, mw;
1149 if (wdegree ==
NULL)
1184 if (modulweight !=
NULL)
1185 j = (*modulweight)[mc-1]-mw;
1190 for (i =
hNvar; i>=0; i--)
1220 while ((i > 0) && ((*Qpol)[i - 1] == 0))
1228 for (ii=0; ii<
k; ii++)
1229 (*work)[ii] = (*hseries1)[ii];
1230 if (hseries1 !=
NULL)
1237 (*hseries1)[i + j - 1] += (*Qpol)[i - 1];
1256 while ((*hseries1)[l-2]==0) l--;
1260 for (ii=l-2; ii>=0; ii--)
1261 (*work)[ii] = (*hseries1)[ii];
1265 (*hseries1)[l-1] = mw;
1267 for (i = 0; i <= (
currRing->N); i++)
1290 return hSeries(S, modulweight, 0, wdegree, Q, tailRing);
1298 return hSeries(S, modulweight, 1, wdegree, Q, tailRing);
1304 int i,
j,
k,
s, t,
l;
1305 if (hseries1 ==
NULL)
1307 work =
new intvec(hseries1);
1308 k = l = work->
length()-1;
1310 for (i = k-1; i >= 0; i--)
1314 if ((s != 0) || (k == 1))
1319 for (i = k-1; i >= 0; i--)
1327 hseries2 =
new intvec(k+1);
1328 for (i = k-1; i >= 0; i--)
1329 (*hseries2)[
i] = (*work)[
i];
1330 (*hseries2)[
k] = (*work)[
l];
1346 for(k=j-2; k>=0; k--)
1355 if (hseries ==
NULL)
1359 for (i = 0; i <
l; i++)
1364 Print(
"// %8d t^%d\n", j, i+k);
1380 const int l = hseries1->
length()-1;
1389 if ((l == 1) &&(mu == 0))
1417 while ((j >= 0) && (I->m[j] ==
NULL))
1446 if(JCount != ObCount)
1451 for(i = 0; i < JCount; i++)
1505 if(JCount != ObCount)
1510 for(i = 0; i< JCount; i++)
1535 int orbCount = idorb.size();
1561 for(i = 1;i < orbCount; i++)
1582 dtrp = trInd - degp;
1612 int OrbCount = idorb.size();
1619 for(i = 1; i < OrbCount; i++)
1667 for(k = ICount - 1; k >=1; k--)
1669 for(i = 0; i <
k; i++)
1695 int *e=(
int *)
omAlloc((r->N+1)*
sizeof(int));
1696 int *
s=(
int *)
omAlloc0((r->N+1)*
sizeof(int));
1699 for(j = 1; j <= cnt; j++)
1726 int *e = (
int *)
omAlloc((r->N+1)*
sizeof(int));
1727 int *
s=(
int *)
omAlloc0((r->N+1)*
sizeof(int));
1736 for(j = (cnt+1); j < (r->N+1); j++)
1767 for(i = 0;i <= d - 1; i++)
1832 for(i = 0; i < SCount; i++)
1834 TwordMap(S->m[i], w, lV, d, Jwi, flag);
1860 int (*POS)(ideal,
poly, std::vector<ideal>, std::vector<poly>, int);
1865 WerrorS(
"wrong input:not the infinitely gen. case");
1876 std::vector<ideal > idorb;
1877 std::vector< poly > polist;
1879 ideal orb_init =
idInit(1, 1);
1880 idorb.push_back(orb_init);
1884 std::vector< std::vector<int> > posMat;
1885 std::vector<int> posRow(lV,0);
1894 while(lpcnt < idorb.size())
1914 for(is = 1; is <= lV; is++)
1933 ps = (*POS)(Jwi, wi, idorb, polist, trInd);
1937 posRow[is-1] = idorb.size();
1939 idorb.push_back(Jwi);
1940 polist.push_back(wi);
1949 posMat.push_back(posRow);
1950 posRow.resize(lV,0);
1955 Print(
"\nOrbit length = %d\n", lO);
1960 Print(
"Words description of the Orbit: \n");
1961 for(is = 0; is < lO; is++)
1969 for(is = idorb.size()-1; is >= 0; is--)
1973 for(is = polist.size()-1; is >= 0; is--)
1981 int adjMatrix[lO][lO];
1982 memset(adjMatrix, 0, lO*lO*
sizeof(
int));
1983 int rowCount, colCount;
1987 for(rowCount = 0; rowCount < lO; rowCount++)
1989 for(colCount = 0; colCount < lV; colCount++)
1991 tm = posMat[rowCount][colCount];
1992 adjMatrix[rowCount][tm] = adjMatrix[rowCount][tm] + 1;
2003 tt=(
char**)
omalloc(
sizeof(
char*));
2009 tt=(
char**)
omalloc(lV*
sizeof(
char*));
2010 for(is = 0; is < lV; is++)
2012 tt[is] = (
char*)
omalloc(7*
sizeof(
char));
2013 sprintf (tt[is],
"t(%d)", is+1);
2020 char** xx = (
char**)
omalloc(
sizeof(
char*));
2033 for(rowCount = 0; rowCount < lO; rowCount++)
2035 for(colCount = 0; colCount < lO; colCount++)
2037 if(adjMatrix[rowCount][colCount] != 0)
2039 MATELEM(mR, rowCount + 1, colCount + 1) =
p_ISet(adjMatrix[rowCount][colCount], R);
2047 for(rowCount = 0; rowCount < lO; rowCount++)
2049 for(colCount = 0; colCount < lV; colCount++)
2054 MATELEM(mR, rowCount +1, posMat[rowCount][colCount]+1)=
p_Add_q(rc,
MATELEM(mR, rowCount +1, posMat[rowCount][colCount]+1), R);
2059 for(rowCount = 0; rowCount < lO; rowCount++)
2061 if(C[rowCount] != 0)
2073 PrintS(
"\nlinear system:\n");
2076 for(rowCount = 0; rowCount < lO; rowCount++)
2078 Print(
"H(%d) = ", rowCount+1);
2079 for(colCount = 0; colCount < lV; colCount++)
2084 Print(
"H(%d) + ", posMat[rowCount][colCount] + 1);
2086 Print(
" %d\n", C[rowCount] );
2088 PrintS(
"where H(1) represents the series corresp. to input ideal\n");
2089 PrintS(
"and i^th summand in the rhs of an eqn. is according\n");
2090 PrintS(
"to the right colon map corresp. to the i^th variable\n");
2094 for(rowCount = 0; rowCount < lO; rowCount++)
2096 Print(
"H(%d) = ", rowCount+1);
2097 for(colCount = 0; colCount < lV; colCount++)
2102 Print(
"H(%d) + ", posMat[rowCount][colCount] + 1);
2104 Print(
" %d\n", C[rowCount] );
2106 PrintS(
"where H(1) represents the series corresp. to input ideal\n");
2114 luDecomp(gMat, pMat, lMat, uMat, R);
2129 Print(
"Hilbert series:");
2139 for(is = lV-1; is >= 0; is--)
int status int void size_t count
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
bool luSolveViaLUDecomp(const matrix pMat, const matrix lMat, const matrix uMat, const matrix bVec, matrix &xVec, matrix &H)
Solves the linear system A * x = b, where A is an (m x n)-matrix which is given by its LU-decompositi...
static int positionInOrbit_FG_Case(ideal I, poly, std::vector< ideal > idorb, std::vector< poly >, int)
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)
#define idDelete(H)
delete an ideal
void scPrintDegree(int co, int mu)
static void hHilbStep(scmon pure, scfmon stc, int Nstc, varset var, int Nvar, int *pol, int Lpol)
static int isMonoIdBasesSame(ideal J, ideal Ob)
used for all transcendental extensions, i.e., the top-most extension in an extension tower is transce...
static unsigned long p_SetComp(poly p, unsigned long c, ring r)
static void hLastHilb(scmon pure, int Nv, varset var, int *pol, int lp)
BEGIN_NAMESPACE_SINGULARXX const ring const ring tailRing
static void p_GetExpV(poly p, int *ev, const ring r)
#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)
void HilbertSeries_OrbitData(ideal S, int lV, bool IG_CASE, bool mgrad, bool odp)
bool unitMatrix(const int n, matrix &unitMat, const ring R)
Creates a new matrix which is the (nxn) unit matrix, and returns true in case of success.
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)
static long p_Totaldegree(poly p, const ring r)
void hDegreeSeries(intvec *s1, intvec *s2, int *co, int *mu)
void WerrorS(const char *s)
static void TwordMap(poly p, poly w, int lV, int d, ideal Jwi, bool &flag)
#define pLmDivisibleBy(a, b)
like pDivisibleBy, except that it is assumed that a!=NULL, b!=NULL
static number & pGetCoeff(poly p)
return an alias to the leading coefficient of p assumes that p != NULL NOTE: not copy ...
static poly ChoosePVF(ideal I)
static number p_SetCoeff(poly p, number n, ring r)
static int positionInOrbit_IG_Case(ideal I, poly w, std::vector< ideal > idorb, std::vector< poly > polist, int trInd)
static poly LCMmon(ideal I)
intvec * hHstdSeries(ideal S, intvec *modulweight, intvec *wdegree, ideal Q, ring tailRing)
static void p_SetExpV(poly p, int *ev, const ring r)
static poly p_Copy(poly p, const ring r)
returns a copy of p
void prune(Variable &alpha)
static FORCE_INLINE number n_Param(const int iParameter, const coeffs r)
return the (iParameter^th) parameter as a NEW number NOTE: parameter numbering: 1..n_NumberOfParameters(...)
void hDelete(scfmon ev, int ev_length)
static FORCE_INLINE number n_Mult(number a, number b, const coeffs r)
return the product of 'a' and 'b', i.e., a*b
ring currRing
Widely used global variable which specifies the current polynomial ring for Singular interpreter and ...
void luDecomp(const matrix aMat, matrix &pMat, matrix &lMat, matrix &uMat, const ring R)
LU-decomposition of a given (m x n)-matrix.
Coefficient rings, fields and other domains suitable for Singular polynomials.
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)
The main handler for Singular numbers which are suitable for Singular polynomials.
static void hWDegree(intvec *wdegree)
void StringSetS(const char *st)
void hPure(scfmon stc, int a, int *Nstc, varset var, int Nvar, scmon pure, int *Npure)
static ideal minimalMonomialsGenSet(ideal I)
void hStaircase(scfmon stc, int *Nstc, varset var, int Nvar)
void sortMonoIdeal_pCompare(ideal I)
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)
struct for passing initialization parameters to naInitChar
int p_Compare(const poly a, const poly b, const ring R)
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)
void PrintS(const char *s)
poly p_Divide(poly a, poly b, const ring r)
static poly ChoosePVL(ideal I)
static int isMonoIdBasesSame_IG_Case(ideal J, int JCount, ideal Ob, int ObCount)
ring rDefault(const coeffs cf, int N, char **n, int ord_size, rRingOrder_t *ord, int *block0, int *block1, int **wvhdl)
static BOOLEAN p_LmDivisibleBy(poly a, poly b, const ring r)
void mp_Delete(matrix *a, const ring r)
void idSkipZeroes(ideal ide)
gives an ideal/module the minimal possible size
static int monCompare(const void *m, const void *n)
void rChangeCurrRing(ring r)
static poly ChoosePJF(ideal I)
matrix mpNew(int r, int c)
create a r x c zero-matrix
static int CountOnIdUptoTruncationIndex(ideal I, int tr)
static void p_Delete(poly *p, const ring r)
static ideal colonIdeal(ideal S, poly w, int lV, ideal Jwi)
static void idInsertMonomials(ideal I, poly p)
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
#define p_LmEqual(p1, p2, r)
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 pEnlargeSet(poly **p, int l, int increment)
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 poly shiftInMon(poly p, int i, int lV, const ring r)
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)
!!!!!!!!!!!!!!!!!!!! Just for Monomial Ideals !!!!!!!!!!!!!!!!!!!!!!!!!!!!
intvec * hFirstSeries(ideal S, intvec *modulweight, ideal Q, intvec *wdegree, ring tailRing)
matrix mp_Sub(matrix a, matrix b, const ring R)
void hLookSeries(ideal S, intvec *modulweight, ideal Q, intvec *wdegree, ring tailRing)
static poly p_Add_q(poly p, poly q, const ring r)
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 poly deleteInMon(poly w, int i, int lV, const ring r)
static void hHilbEst(scfmon stc, int Nstc, varset var, int Nvar)
#define pCopy(p)
return a copy of the poly
#define MATELEM(mat, i, j)
static void hPrintHilb(intvec *hseries)
coeffs nInitChar(n_coeffType t, void *parameter)
one-time initialisations for new coeffs in case of an error return NULL
void hSupp(scfmon stc, int Nstc, varset var, int *Nvar)
static void eulerchar(ideal I, int variables, mpz_ptr ec)