37 assume( idsize >= 0 && rank >= 0 );
47 hh->m = (poly *)
omAlloc0(idsize*
sizeof(poly));
57void idShow(
const ideal
id,
const ring lmRing,
const ring tailRing,
const int debugPrint)
65 Print(
"Module of rank %ld,real rank %ld and %d generators.\n",
68 int j = (
id->ncols*
id->nrows) - 1;
69 while ((
j > 0) && (id->m[
j]==
NULL))
j--;
70 for (
int i = 0;
i <=
j;
i++)
84 const poly *
m =
id->m +
N;
86 for (
int k =
N;
k >= 0; --
k, --
m)
90 if (p_LmIsConstantComp(
p, r) ==
TRUE)
111 ideal hh =
idInit(nvars, 1);
112 for (
int l=nvars-1;
l>=0;
l--)
115 p_SetExp(hh->m[
l],
l+1,1,r);
130 const long elems = (long)(*h)->nrows * (
long)(*h)->ncols;
142 poly
pp=((*h)->m[
j]);
164 poly
pp=((*h)->m[
j]);
185 elems=
j=(*h)->nrows*(*h)->ncols;
210 for (
k=0;
k<idelems;
k++)
212 if (ide->m[
k] !=
NULL)
217 ide->m[
j] = ide->m[
k];
246 while((
k<idelems)&&(ide->m[
k] !=
NULL))
k++;
247 if (
k==idelems)
return idelems;
250 for (;
k<idelems;
k++)
252 if (ide->m[
k] !=
NULL)
254 ide->m[
j] = ide->m[
k];
273 ideal newI =
idInit(
k, ide->rank);
275 for (
int i = 0;
i <
k;
i++)
276 newI->m[
i] = p_Copy(ide->m[
i],r);
287 if (id->m[
i] !=
NULL)
346 p_Delete(&id->m[
j],r);
362 if (id->m[
i] !=
NULL)
366 if ((id->m[
j] !=
NULL)
369 && n_IsUnit(pGetCoeff(id->m[
i]),r->cf) && n_IsUnit(pGetCoeff(id->m[
j]),r->cf)
373 p_Delete(&id->m[
j],r);
384 long *sev=(
long*)
omAlloc0(kk*
sizeof(
long));
385 while(id->m[
k]==
NULL)
k--;
386 BOOLEAN only_lm=r->cf->has_simple_Alloc;
389 for (
int i=
k;
i>=0;
i--)
398 for (
int i=
k;
i>=0;
i--)
407 for (
int i=0;
i<
k;
i++)
409 if (id->m[
i] !=
NULL)
413 for (
int j=
i+1;
j<=
k;
j++)
417 if (p_LmShortDivisibleBy(m_i, sev_i,id->m[
j],~sev[
j],r))
419 p_LmFree(&id->m[
j],r);
421 else if (p_LmShortDivisibleBy(id->m[
j],sev[
j], m_i,~sev_i,r))
423 p_LmFree(&id->m[
i],r);
433 for (
int i=0;
i<
k;
i++)
435 if (id->m[
i] !=
NULL)
439 for (
int j=
i+1;
j<=
k;
j++)
443 if (p_LmShortDivisibleBy(m_i, sev_i, id->m[
j],~sev[
j],r))
445 p_Delete(&id->m[
j],r);
447 else if (p_LmShortDivisibleBy(id->m[
j],sev[
j], m_i,~sev_i,r))
449 p_Delete(&id->m[
i],r);
472 for (
i=
k-1;
i>=0;
i--)
474 if (id->m[
i] !=
NULL)
482 p_Delete(&id->m[
j],r);
486 p_Delete(&id->m[
i],r);
503 for (
i=
k-1;
i>=0;
i--)
505 if (id->m[
i] !=
NULL)
511 if (p_LmDivisibleBy(id->m[
i], id->m[
j],r))
513 p_Delete(&id->m[
j],r);
515 else if (p_LmDivisibleBy(id->m[
j], id->m[
i],r))
517 p_Delete(&id->m[
i],r);
548 h2->m[
i] = p_Copy(h1->m[
i],r);
554void id_DBTest(ideal h1,
int level,
const char *
f,
const int l,
const ring r,
const ring tailRing)
566 const long n = ((long)h1->ncols * (long)h1->nrows);
570 if( h1->m !=
NULL && n > 0 )
576 for (
long i=n - 1;
i >= 0;
i--)
579 const long k = p_MaxComp(h1->m[
i], r, tailRing);
580 if (
k > new_rk) new_rk =
k;
585 assume( !( h1->nrows == h1->rank && h1->nrows > 1 && new_rk > 0 ) );
587 if(new_rk > h1->rank)
590 h1->rank, new_rk,
f,
l);
597 Print(
"error: ideal==NULL in %s:%d\n",
f,
l);
617 const long n = ((long)h1->ncols * (long)h1->nrows);
621 if( h1->m !=
NULL && n > 0 )
627 for (
long i=n - 1;
i >= 0;
i--)
633 if (
k > new_rk) new_rk =
k;
639 assume( !( h1->nrows == h1->rank && h1->nrows > 1 && new_rk > 0 ) );
641 if(new_rk > h1->rank)
644 h1->rank, new_rk,
f,
l);
651 Print(
"error: ideal==NULL in %s:%d\n",
f,
l);
660 if (
b==
NULL)
return 1;
661 if (a==
NULL)
return -1;
669 number
h=n_Sub(pGetCoeff(a),pGetCoeff(
b),
R->cf);
670 r = -1+n_IsZero(
h,
R->cf)+2*n_GreaterZero(
h,
R->cf);
676 while ((
l>0) && (p_GetExp(a,
l,
R)==p_GetExp(
b,
l,
R)))
l--;
681 number
h=n_Sub(pGetCoeff(a),pGetCoeff(
b),
R->cf);
682 int r = -1+n_IsZero(
h,
R->cf)+2*n_GreaterZero(
h,
R->cf);
688 else if (p_GetExp(a,
l,
R)>p_GetExp(
b,
l,
R))
700 int i,
j, actpos=0, newpos;
701 int diff, olddiff, lastcomp, newcomp;
710 diff = (actpos+1) / 2;
726 while (notFound && (newpos>=0) && (newpos<actpos))
736 && (newpos+
diff>=actpos))
738 diff = actpos-newpos-1;
740 else if ((newcomp==-1)
749 if ((olddiff==1) && (lastcomp>0))
756 if ((olddiff==1) && (lastcomp<0))
773 if (newpos<0) newpos = 0;
774 if (newpos>actpos) newpos = actpos;
777 for (
j=actpos;
j>newpos;
j--)
779 (*result)[
j] = (*result)[
j-1];
781 (*result)[newpos] =
i;
798 if (
res->rank<h1->rank)
res->rank=h1->rank;
804 if (
res->rank<h2->rank)
res->rank=h2->rank;
809 while ((
j >= 0) && (h1->m[
j] ==
NULL))
j--;
812 while ((
i >= 0) && (h2->m[
i] ==
NULL))
i--;
814 const int r = si_max(h1->rank, h2->rank);
824 for (
l=
i;
l>=0;
l--,
j--)
836 if (
res->rank<h1->rank)
res->rank=h1->rank;
843 if (
res->rank<h2->rank)
res->rank=h2->rank;
849 while ((
j >= 0) && (h1->m[
j] ==
NULL))
j--;
852 while ((
i >= 0) && (h2->m[
i] ==
NULL))
i--;
854 const int r = si_max(h1->rank, h2->rank);
867 for (
l=
i;
l>=0;
l--,
j--)
887 while ((
j >= 0) && (h1->m[
j] ==
NULL))
j--;
906 while ((
j >= 0) && (I->m[
j] ==
NULL))
j--;
927 const poly h2,
const bool zeroOk,
const bool duplicateOk,
const ring r)
932 if ((!zeroOk) && (h2 ==
NULL))
return FALSE;
935 bool h2FoundInH1 =
false;
937 while ((
i < validEntries) && (!h2FoundInH1))
942 if (h2FoundInH1)
return FALSE;
944 if (validEntries ==
IDELEMS(h1))
949 h1->m[validEntries] = h2;
954ideal
id_Add (ideal h1,ideal h2,
const ring r)
973 while ((
j > 0) && (h1->m[
j-1] ==
NULL))
j--;
976 while ((
i > 0) && (h2->m[
i-1] ==
NULL))
i--;
979 int r = si_max( h2->rank, h1->rank );
990 if (h1->m[
i] !=
NULL)
994 if (h2->m[
j] !=
NULL)
996 hh->m[
k] = pp_Mult_qq(h1->m[
i],h2->m[
j],
R);
1060 if (non_zero>1)
return FALSE;
1066 if (non_zero<=1)
return TRUE;
1067 if (triple>1)
return FALSE;
1068 if ((triple==1)&&(non_zero>1))
return FALSE;
1084 const long k = p_MaxComp(*
p, lmRing, tailRing);
1094 if ((src->VarOffset[0]== -1)
1095 || (src->pCompIndex<0))
1238 while ((
i >= 0) && (choise[
i] == end))
1248 for (
j=
i+1;
j<r;
j++)
1250 choise[
j] = choise[
i]+
j-
i;
1267 localchoise=(
int*)
omAlloc((d-1)*
sizeof(
int));
1273 while ((
i<t) && (localchoise[
i]==choise[
i]))
i++;
1277 while ((
i<d) && (localchoise[
i-1]==choise[
i]))
i++;
1299 if (n-r<r)
return binom(n,n-r);
1308 WarnS(
"overflow in binomials");
1321 PrintS(
"In order to address bimodules, the command freeAlgebra should be used.");
1325 for (
int j=0;
j<
i;
j++)
1328 p_SetComp(
h->m[
j],
j+1,r);
1347static void makemonoms(
int vars,
int actvar,
int deg,
int monomdeg,
const ring r)
1359 if (deg == monomdeg)
1397 assume(deg <= r->
N/r->isLPring);
1409 for (
int j = 2;
j <= vars;
j++)
1411 for (
int i = 0;
i <
size;
i++)
1417 for (
int j = 1;
j <= vars;
j++)
1419 for (
int i = 0;
i <
size;
i++)
1454 vars = r->isLPring - r->LPncGenCount;
1457 for (
int j = 0;
j < deg;
j++)
1466 i =
binom(vars+deg-1,deg);
1488 int begin,
int end,
int deg,
int restdeg, poly
ap,
const ring r)
1493 p =
p_Power(p_Copy(given->m[begin],r),restdeg,r);
1503 if (begin == end)
return;
1504 for (
i=restdeg-1;
i>0;
i--)
1506 p =
p_Power(p_Copy(given->m[begin],r),
i,r);
1507 p = p_Mult_q(p_Copy(
ap,r),
p,r);
1546 while ((!
b) && (
i>=0))
1548 b=p_IsUnit(id->m[
i],r);
1553 for(
i=
IDELEMS(
id)-1;
i>=0;
i--) p_Delete(&id->m[
i],r);
1568 if (r->cf->has_simple_Alloc)
1578 m->m[
i]=p_Head(
h->m[
i],r);
1624 for(
unsigned j=0;
j<n ;
j++)
1631 p_SetCompP(
h,
j+1,
R);
1659 p_SetCompP(
h,
i+1,
R);
1683 p=pReverse(
mod->m[
i]);
1697 Print(
"## inv. rank %ld -> %ld\n",
mod->rank,cp);
1698 int k,
l,o=
mod->rank;
1727 if (r>rows) r = rows;
1728 if (c>cols) c = cols;
1731 p=pReverse(
mod->m[
i]);
1770 mod->m[
i]=p_LmDeleteAndNext(
mod->m[
i],
R);
1795 res->rank =
id->rank;
1815 long cmax=1,order=0,ord,*
diff,diffmin=32000;
1826 poly* F=(poly*)
omAlloc(length*
sizeof(poly));
1827 for (
i=length-1;
i>=0;
i--)
1830 cmax=si_max(cmax,p_MaxComp(
p,
R));
1835 iscom = (
int *)
omAlloc0(cmax*
sizeof(
int));
1844 if ((
p==
NULL) && (
i<length))
1853 while ((
i<length) && (F[
i]==
NULL))
i++;
1854 if (
i>=length)
break;
1872 ord=p_Totaldegree(
p,
R);
1875 ord =
R->pFDeg(
p,
R);
1912 for (
i=1;
i<cmax;
i++) (**
w)[
i-1]=(int)(
diff[
i]);
1913 for (
i=1;
i<cmax;
i++)
1919 for (
i=1;
i<cmax;
i++)
1921 (**w)[
i-1]=(int)(
diff[
i]-diffmin);
1930 ideal r=
idInit((
i->nrows)*(
i->ncols),
i->rank);
1935 for(
long k=((
long)(
i->nrows))*((
long)(
i->ncols))-1;
k>=0;
k--)
1943 ideal r=
idInit((
i->nrows)*(
i->ncols),
i->rank);
1948 for(
long k=((
long)(
i->nrows))*((
long)(
i->ncols))-1;
k>=0;
k--)
1959 WerrorS(
"cannot compute weighted jets now");
1975static void idDeleteComp(ideal arg,
int red_comp)
2002 int in=
IDELEMS(
id)-1, ready=0, all=0,
2003 coldim=rVar(r), rowmax=2*coldim;
2004 if (in<0)
return NULL;
2016 for (
k=1;
k<=coldim;
k++)
2056 for(
i=rVar(r)-1;
i>=0;
i--)
2066 if (rField_has_simple_inverse(r))
return;
2068 for(
i=I->nrows*I->ncols-1;
i>=0;
i--)
2083 if(-1<d0&&((d0<d)||(d==-1)))
2097 int r = a->rank, c =
IDELEMS(a);
2106 poly
h=p_Head(
p, rRing);
2108 p_SetComp(
h,
i, rRing);
2120 b->m[
i]=p_SortMerge(
p,rRing,
TRUE);
2156 const int n = rRing->N;
2164 for(
int i = 0;
i <
k;
i++ )
2166 poly pTempSum =
NULL;
2172 poly
h = p_Head(
w, rRing);
2191 if( cc == 0) cc =
m;
2192 int vv = 1 + (gen - cc) /
m;
2204 assume( (cc + (vv-1)*
m) == gen );
2206 p_IncrExp(
h, vv, rRing);
2207 p_SetComp(
h, cc, rRing);
2211 pTempSum = p_Add_q(pTempSum,
h, rRing);
2216 idTemp->m[
i] = pTempSum;
2221 ideal idResult =
id_Transp(idTemp, rRing);
2230 int cnt=0;
int rw=0;
int cl=0;
2233 for(
j=rl-1;
j>=0;
j--)
2237 if (xx[
j]->
nrows >rw) rw=xx[
j]->nrows;
2242 WerrorS(
"format mismatch in CRT");
2248 number *
x=(number *)
omAlloc(rl*
sizeof(number));
2249 poly *
p=(poly *)
omAlloc(rl*
sizeof(poly));
2254 for(
i=cnt-1;
i>=0;
i--)
2256 for(
j=rl-1;
j>=0;
j--)
2264 for(
j=rl-1;
j>=0;
j--)
2295 for(
int i=0;
i<
p;
i++) ret->m[
i]=p_Copy(I->m[
i],r);
2296 for(
int i=
p+1;
i<
IDELEMS(I);
i++) ret->m[
i-1]=p_Copy(I->m[
i],r);
2300ideal
id_PermIdeal(ideal I,
int R,
int C,
const int *perm,
const ring src,
const ring dst,
2303 ideal II=(ideal)
mpNew(
R,C);
2305 for(
int i=
R*C-1;
i>=0;
i--)
2307 II->m[
i]=
p_PermPoly(I->m[
i],perm,src,dst,nMap,par_perm,P,use_mult);
const CanonicalForm CFMap CFMap & N
number(*) nMapFunc(number a, const coeffs src, const coeffs dst)
maps "a", which lives in src, into dst
const CanonicalForm int s
void WerrorS(const char *s)
void idGetNextChoise(int r, int end, BOOLEAN *endch, int *choise)
BOOLEAN idInsertPoly(ideal h1, poly h2)
insert h2 into h1 (if h2 is not the zero polynomial) return TRUE iff h2 was indeed inserted
ideal id_Copy(ideal h1, const ring r)
copy an ideal
BOOLEAN idIs0(ideal h)
returns true if h is the zero ideal
ideal id_TensorModuleMult(const int m, const ideal M, const ring rRing)
BOOLEAN idInsertPolyOnPos(ideal I, poly p, int pos)
insert p into I on position pos
int idGetNumberOfChoise(int t, int d, int begin, int end, int *choise)
void idInitChoise(int r, int beg, int end, BOOLEAN *endch, int *choise)
void ivTriangIntern(intvec *imat, int &ready, int &all)
intvec * ivSolveKern(intvec *imat, int dimtr)
#define IMATELEM(M, I, J)
poly p_ChineseRemainder(poly *xx, mpz_ptr *x, mpz_ptr *q, int rl, mpz_ptr *C, const ring R)
matrix mpNew(int r, int c)
create a r x c zero-matrix
#define MATELEM0(mat, i, j)
0-based access to matrix
int dReportError(const char *fmt,...)
#define __p_GetComp(p, r)
#define rRing_has_Comp(r)
gmp_float exp(const gmp_float &a)
STATIC_VAR gmp_float * diff
#define omFreeSize(addr, size)
#define omdebugAddrSize(addr, size)
#define omCheckAddrSize(addr, size)
#define omFreeBin(addr, bin)
#define omFreeBinAddr(addr)
#define omGetSpecBin(size)
int p_IsPurePower(const poly p, const ring r)
return i, if head depends only on var(i)
poly pp_Jet(poly p, int m, const ring R)
poly p_HomogenDP(poly p, int varnum, const ring r)
BOOLEAN p_ComparePolys(poly p1, poly p2, const ring r)
returns TRUE if p1 is a skalar multiple of p2 assume p1 != NULL and p2 != NULL
BOOLEAN p_DivisibleByRingCase(poly f, poly g, const ring r)
divisibility check over ground ring (which may contain zero divisors); TRUE iff LT(f) divides LT(g),...
poly p_Homogen(poly p, int varnum, const ring r)
poly p_Subst(poly p, int n, poly e, const ring r)
void p_Vec2Polys(poly v, poly **p, int *len, const ring r)
void p_Shift(poly *p, int i, const ring r)
shifts components of the vector p by i
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)
poly p_Power(poly p, int i, const ring r)
void p_Normalize(poly p, const ring r)
void p_Norm(poly p1, const ring r)
poly pp_Jet0(poly p, const ring R)
int p_MinDeg(poly p, intvec *w, const ring R)
unsigned long p_GetShortExpVector(const poly p, const ring r)
BOOLEAN p_IsHomogeneousW(poly p, const intvec *w, const ring r)
void pEnlargeSet(poly **p, int l, int increment)
BOOLEAN p_IsHomogeneous(poly p, const ring r)
poly pp_JetW(poly p, int m, int *w, const ring R)
poly p_CopyPowerProduct0(const poly p, number n, const ring r)
like p_Head, but with coefficient n
BOOLEAN p_IsHomogeneousDP(poly p, const ring r)
BOOLEAN p_EqualPolys(poly p1, poly p2, const ring r)
#define p_LmEqual(p1, p2, r)
BOOLEAN _p_LmTest(poly p, ring r, int level)
void p_ShallowDelete(poly *p, const ring r)
#define pp_Test(p, lmRing, tailRing)
static int p_LtCmp(poly p, poly q, const ring r)
BOOLEAN _pp_Test(poly p, ring lmRing, ring tailRing, int level)
static BOOLEAN p_IsConstantPoly(const poly p, const ring r)
void p_wrp(poly p, ring lmRing, ring tailRing)
#define pGetComp(p)
Component.
void PrintS(const char *s)
long(*) pFDegProc(poly p, ring r)
#define rField_is_Ring(R)
void sBucketClearMerge(sBucket_pt bucket, poly *p, int *length)
void sBucket_Merge_p(sBucket_pt bucket, poly p, int length)
Merges p into Spoly: assumes Bpoly and p have no common monoms destroys p!
void sBucketDestroy(sBucket_pt *bucket)
sBucket_pt sBucketCreate(const ring r)
void id_DBLmTest(ideal h1, int level, const char *f, const int l, const ring r)
Internal verification for ideals/modules and dense matrices!
ideal id_Add(ideal h1, ideal h2, const ring r)
h1 + h2
STATIC_VAR int idpowerpoint
ideal id_Vec2Ideal(poly vec, const ring R)
ideal idInit(int idsize, int rank)
initialise an ideal / module
int id_PosConstant(ideal id, const ring r)
index of generator with leading term in ground ring (if any); otherwise -1
void id_Delete(ideal *h, ring r)
deletes an ideal/module/matrix
BOOLEAN id_IsModule(ideal A, const ring src)
int idSkipZeroes0(ideal ide)
void id_DBTest(ideal h1, int level, const char *f, const int l, const ring r, const ring tailRing)
Internal verification for ideals/modules and dense matrices!
poly id_Array2Vector(poly *m, unsigned n, const ring R)
for julia: convert an array of poly to vector
static void id_NextPotence(ideal given, ideal result, int begin, int end, int deg, int restdeg, poly ap, const ring r)
intvec * id_Sort(const ideal id, const BOOLEAN nolex, const ring r)
sorts the ideal w.r.t. the actual ringordering uses lex-ordering when nolex = FALSE
intvec * id_QHomWeight(ideal id, const ring r)
void id_Norm(ideal id, const ring r)
ideal id = (id[i]), result is leadcoeff(id[i]) = 1
BOOLEAN id_HomIdeal(ideal id, ideal Q, const ring r)
STATIC_VAR poly * idpower
static void makemonoms(int vars, int actvar, int deg, int monomdeg, const ring r)
BOOLEAN id_HomModuleW(ideal id, ideal Q, const intvec *w, const intvec *module_w, const ring r)
void id_Normalize(ideal I, const ring r)
normialize all polys in id
ideal id_Transp(ideal a, const ring rRing)
transpose a module
void id_Delete0(ideal *h, ring r)
ideal id_FreeModule(int i, const ring r)
the free module of rank i
BOOLEAN id_IsZeroDim(ideal I, const ring r)
ideal id_Homogen(ideal h, int varnum, const ring r)
BOOLEAN idIsSimpleGB(ideal F, ideal Q)
returns true if F in R/Q has a "simple" GB
ideal id_Power(ideal given, int exp, const ring r)
BOOLEAN id_HomIdealDP(ideal id, ideal Q, const ring r)
matrix id_Module2Matrix(ideal mod, const ring R)
ideal id_Head(ideal h, const ring r)
returns the ideals of initial terms
BOOLEAN id_IsConstant(ideal id, const ring r)
test if the ideal has only constant polynomials NOTE: zero ideal/module is also constant
BOOLEAN id_HomIdealW(ideal id, ideal Q, const intvec *w, const ring r)
long id_RankFreeModule(ideal s, ring lmRing, ring tailRing)
return the maximal component number found in any polynomial in s
ideal id_Jet0(const ideal i, const ring R)
ideal id_MaxIdeal(const ring r)
initialise the maximal ideal (at 0)
void id_DelDiv(ideal id, const ring r)
delete id[j], if LT(j) == coeff*mon*LT(i) and vice versa, i.e., delete id[i], if LT(i) == coeff*mon*L...
int id_MinDegW(ideal M, intvec *w, const ring r)
void id_DelMultiples(ideal id, const ring r)
ideal id = (id[i]), c any unit if id[i] = c*id[j] then id[j] is deleted for j > i
void id_ShallowDelete(ideal *h, ring r)
Shallowdeletes an ideal/matrix.
BOOLEAN id_InsertPolyWithTests(ideal h1, const int validEntries, const poly h2, const bool zeroOk, const bool duplicateOk, const ring r)
insert h2 into h1 depending on the two boolean parameters:
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 id_CopyFirstK(const ideal ide, const int k, const ring r)
copies the first k (>= 1) entries of the given ideal/module and returns these as a new ideal/module (...
matrix id_Module2formatedMatrix(ideal mod, int rows, int cols, const ring R)
void idShow(const ideal id, const ring lmRing, const ring tailRing, const int debugPrint)
ideal id_Matrix2Module(matrix mat, const ring R)
converts mat to module, destroys mat
ideal id_ResizeModule(ideal mod, int rows, int cols, const ring R)
ideal id_Delete_Pos(const ideal I, const int p, const ring r)
static int p_Comp_RevLex(poly a, poly b, BOOLEAN nolex, const ring R)
for idSort: compare a and b revlex inclusive module comp.
void id_DelEquals(ideal id, const ring r)
ideal id = (id[i]) if id[i] = id[j] then id[j] is deleted for j > i
ideal id_Jet(const ideal i, int d, const ring R)
static void id_DelDiv_SEV(ideal id, int k, const ring r)
delete id[j], if LT(j) == coeff*mon*LT(i)
ideal id_SimpleAdd(ideal h1, ideal h2, const ring R)
concat the lists h1 and h2 without zeros
void id_DelLmEquals(ideal id, const ring r)
Delete id[j], if Lm(j) == Lm(i) and both LC(j), LC(i) are units and j > i.
ideal id_JetW(const ideal i, int d, intvec *iv, const ring R)
ideal id_HomogenDP(ideal h, int varnum, const ring r)
void idSkipZeroes(ideal ide)
gives an ideal/module the minimal possible size
void id_Shift(ideal M, int s, const ring r)
ideal id_PermIdeal(ideal I, int R, int C, const int *perm, const ring src, const ring dst, nMapFunc nMap, const int *par_perm, int P, BOOLEAN use_mult)
mapping ideals/matrices to other rings
ideal id_ChineseRemainder(ideal *xx, number *q, int rl, const ring r)
static void lpmakemonoms(int vars, int deg, const ring r)
ideal id_SimpleMove(ideal h1, ideal h2, const ring R)
concat the lists h1 and h2 without zeros, destroys h1,h2
void id_Compactify(ideal id, const ring r)
BOOLEAN idIsMonomial(ideal h)
returns true if h is generated by monomials
BOOLEAN id_HomModule(ideal m, ideal Q, intvec **w, const ring R)
ideal id_Subst(ideal id, int n, poly e, const ring r)
The following sip_sideal structure has many different uses throughout Singular. Basic use-cases for i...
int * iv2array(intvec *iv, const ring R)
EXTERN_VAR short * ecartWeights
#define omPrintAddrInfo(A, B, C)