47#define ENTER_USE_MEMMOVE
87#ifdef ENTER_USE_MYMEMMOVE
119 unsigned long _d = (
unsigned long) d;
120 unsigned long _s = (
unsigned long)
s;
128#define memmove(d,s,l) _my_memmove(d, s, l)
134#define pDivComp_EQUAL 2
135#define pDivComp_LESS 1
136#define pDivComp_GREATER -1
137#define pDivComp_INCOMP 0
150 unsigned long la,
lb;
151 unsigned long divmask =
currRing->divmask;
161 if (((
la & divmask) ^ (
lb & divmask)) != ((
lb -
la) & divmask))
168 if (((
la & divmask) ^ (
lb & divmask)) != ((
la -
lb) & divmask))
198 unsigned long la,
lb;
199 unsigned long divmask =
currRing->divmask;
209 if (((
la & divmask) ^ (
lb & divmask)) != ((
lb -
la) & divmask))
216 if (((
la & divmask) ^ (
lb & divmask)) != ((
la -
lb) & divmask))
223 if (
b) {
return -1; }
251 && (L->bucket !=
NULL))
253 for (
int i=1;
i<= (
int) L->bucket->buckets_used;
i++)
255 poly
p=L->bucket->buckets[
i];
260 L->bucket->buckets[
i]=
NULL;
261 L->bucket->buckets_length[
i]=0;
270 L->bucket->buckets_length[
i]=
pLength(L->bucket->buckets[
i]);
278 int i=L->bucket->buckets_used;
279 while ((
i>0)&&(L->bucket->buckets[
i]==
NULL))
282 L->bucket->buckets_used=
i;
297 poly
p = L->GetLmTailRing();
308 if (L->bucket !=
NULL)
340 L->ecart = L->pLDeg() - L->GetpFDeg();
350 L->ecart = L->pLDeg(strat->
LDegLast) - L->GetpFDeg();
375 ring r = L->tailRing;
376 poly
p = L->GetLmTailRing();
534 return (
unsigned long*)
omAlloc0(
maxnr*
sizeof(
unsigned long));
572 for (
j=0;
j<=strat->
tl;
j++)
576 if (strat->
T[
j].max_exp !=
NULL)
586 if (strat->
T[
j].t_p !=
NULL)
594 if (
currRing->isLPring && strat->
T[
j].shift > 0)
603 if (
p == strat->
S[
i])
605 if (strat->
T[
j].t_p !=
NULL)
607 if (p_shallow_copy_delete!=
NULL)
631 for (
j=0;
j<=strat->
tl;
j++)
635 if (strat->
T[
j].max_exp !=
NULL)
645 if (strat->
T[
j].t_p !=
NULL)
657 if (
p == strat->
S[
i])
659 if (strat->
T[
j].t_p !=
NULL)
706 if ((*
k) < 0)
return FALSE;
707 if (((p1 == (*p).p1) && (p2 == (*p).p2))
708 || ((p1 == (*p).p2) && (p2 == (*p).p1)))
721 if (
T[
i].
p ==
p)
return i;
732 if (
i >= 0)
return i;
735 while (strat !=
NULL);
760 if (
i >= 0)
return i;
763 while (strat !=
NULL);
777#define kFalseReturn(x) do { if (!x) return FALSE;} while (0)
783 for (
i=1;
i<=tailRing->N;
i++)
786 return "Lm[i] different";
789 return "Lm[0] different";
791 return "Lm.next different";
793 return "Lm.coeff different";
800 ring tailRing =
T->tailRing;
825 if (
T->t_p ==
NULL &&
i > 0)
842 if (
T->t_p !=
NULL &&
i >= 0 &&
TN ==
'T')
846 if (
T->max_exp !=
NULL)
847 return dReportError(
"%c[%d].max_exp is not NULL as it should be",
TN,
i);
851 if (
T->max_exp ==
NULL)
875 if (
T->p ==
NULL &&
i > 0)
891 if ((
i >= 0) && (
T->pLength != 0)
896 return dReportError(
"%c[%d] pLength error: has %d, specified to have %d",
901 if (
i >= 0 && (
TN ==
'T' ||
TN ==
'L'))
904 if (strat->
homog && (
T->FDeg !=
T->pFDeg()))
908 return dReportError(
"%c[%d] FDeg error: has %d, specified to have %d",
909 TN,
i ,
T->pFDeg(), d);
914 if (
i >= 0 &&
TN ==
'T')
951 if (L->bucket !=
NULL)
954 r_assume(L->bucket->bucket_ring == L->tailRing);
972 return dReportError(
"L[%d] wrong sev: has %lo, specified to have %lo",
1015 -1, strat->
T, strat->
tl));
1018 if (strat->
T !=
NULL)
1020 for (
i=0;
i<=strat->
tl;
i++)
1029 if (strat->
L !=
NULL)
1031 for (
i=0;
i<=strat->
Ll;
i++)
1034 strat->
L[
i].Next() != strat->
tail,
i,
1035 strat->
T, strat->
tl));
1046 if (strat->
S !=
NULL)
1056 for (
i=0;
i<=strat->
sl;
i++)
1058 if (strat->
S[
i] !=
NULL &&
1061 return dReportError(
"S[%d] wrong sev: has %o, specified to have %o",
1077 for (
i=0;
i<=strat->
tl;
i++)
1079 if (strat->
T[
i].i_r < 0 || strat->
T[
i].i_r > strat->
tl)
1080 return dReportError(
"strat->T[%d].i_r == %d out of bounds",
i,
1082 if (strat->
R[strat->
T[
i].i_r] != &(strat->
T[
i]))
1086 if ((strat->
S !=
NULL)&&(strat->
tl>=0))
1088 for (
i=0;
i<=strat->
sl;
i++)
1093 if (strat->
S_2_R[
i] != strat->
T[
j].i_r)
1099 #ifdef HAVE_SHIFTBBA
1104 for (
i=0;
i<=strat->
Ll;
i++)
1106 if (strat->
L[
i].p1 !=
NULL && strat->
L[
i].p2)
1108 if (strat->
L[
i].i_r1 < 0 ||
1109 strat->
L[
i].i_r1 > strat->
tl ||
1110 strat->
L[
i].T_1(strat)->p != strat->
L[
i].p1)
1112 if (strat->
L[
i].i_r2 < 0 ||
1113 strat->
L[
i].i_r2 > strat->
tl ||
1114 strat->
L[
i].T_2(strat)->p != strat->
L[
i].p2)
1119 if (strat->
L[
i].i_r1 != -1)
1121 if (strat->
L[
i].i_r2 != -1)
1124 if (strat->
L[
i].i_r != -1)
1138#ifdef ENTER_USE_MEMMOVE
1139 memmove(&(strat->
S[
i]), &(strat->
S[
i+1]), (strat->
sl -
i)*
sizeof(poly));
1145 for (
j=
i;
j<strat->
sl;
j++)
1147 strat->
S[
j] = strat->
S[
j+1];
1155#ifdef ENTER_USE_MEMMOVE
1163#ifdef ENTER_USE_MEMMOVE
1171#ifdef ENTER_USE_MEMMOVE
1174 for (
j=
i;
j<strat->
sl;
j++)
1188 && (strat->
P.p1!=
NULL))
1194 for (
int i=lv;
i>0;
i--)
1218 if (set[
j].sig!=
NULL)
1246 #ifdef HAVE_SHIFTBBA
1256#ifdef ENTER_USE_MEMMOVE
1260 for (
i=
j;
i < (*length);
i++)
1282#ifdef ENTER_USE_MEMMOVE
1299 h->FDeg =
h->pFDeg();
1300 h->ecart =
h->pLDeg() -
h->FDeg;
1307 h->FDeg =
h->pFDeg();
1314 Lp->FDeg =
Lp->pFDeg();
1321 Lp->FDeg =
Lp->pFDeg();
1367 h.ecart=0;
h.length=0;
1391 for(
j = strat->
Bl;
j>=0;
j--)
1512 h.i_r1 = -1;
h.i_r2 = -1;
1533 else strat->
P.sev=0L;
1547 poly m1, m2,
gcd,
si;
1576 for (
int j = 0;
j < strat->
sl;
j++)
1582 && !(strat->
sevS[
j] & ~sev)
1625 PrintS(
"\n--- create strong gcd poly: ");
1628 Print(
"\n strat->S[%d]: ",
i);
1651 h.i_r1 = -1;
h.i_r2 = -1;
1657 h.p1 =
p;
h.p2 = strat->
S[
i];
1677 if(
h.IsNull())
return FALSE;
1694 if(strat->
sl < 0)
return FALSE;
1696 for(
i=0;
i<strat->
sl;
i++)
1732 h->i_r1 = -1;
h->i_r2 = -1;
1754 poly m1, m2,
gcd,
si;
1802 PrintS(
"\n--- create strong gcd poly: ");
1805 Print(
"\n strat->S[%d]: ",
i);
1857 h.i_r1 = -1;
h.i_r2 = -1;
1875 strat->
enterS(strat->
P,strat->
sl+1,strat, strat->
tl+1);
1902 strat->
enterS(strat->
P,strat->
sl+1,strat, strat->
tl+1);
1915 strat->
enterS(strat->
P,strat->
sl+1,strat, strat->
tl+1);
1919 h.p1 =
p;
h.p2 = strat->
S[
i];
1957#ifndef HAVE_RATGRING
1959#elif defined(HAVE_RATGRING)
1976 if((!((strat->
ecartS[
i]>0)&&(ecart>0)))
2069 for(
j = strat->
Bl;
j>=0;
j--)
2168 Lp.p1 = strat->
S[
i];
2247 if((!((strat->
ecartS[
i]>0)&&(ecart>0)))
2343 for(
j = strat->
Bl;
j>=0;
j--)
2399 Lp.p1 = strat->
S[
i];
2457#ifndef HAVE_RATGRING
2459#elif defined(HAVE_RATGRING)
2489 PrintS(
"----------------\n");
2492 PrintS(
"----------------\n");
2498 Print(
"IN PAIR GENERATION - COMPARING SIGS: %d\n",
sigCmp);
2630 Lp.checked = strat->
sl+1;
2649 PrintS(
"SIGNATURE OF PAIR: ");
2653 Lp.p1 = strat->
S[
i];
2732#ifndef HAVE_RATGRING
2734#elif defined(HAVE_RATGRING)
2777 Print(
"----------------\n");
2780 Print(
"----------------\n");
2805 Print(
"IN PAIR GENERATION - COMPARING SIGS: %d\n",
sigCmp);
2837 strat->
enterS(strat->
P,strat->
sl+1,strat, strat->
tl+1);
3009 Lp.checked = strat->
sl+1;
3028 PrintS(
"SIGNATURE OF PAIR: ");
3032 Lp.p1 = strat->
S[
i];
3079 strat->
enterS(strat->
P,strat->
sl+1,strat, strat->
tl+1);
3134 Lp.p1 = strat->
S[
i];
3167 int j=strat->
Ll+strat->
Bl+1;
3175 for (
i=strat->
Bl;
i>=0;
i--)
3177 j = strat->
posInL(strat->
L,
j,&(strat->
B[
i]),strat);
3188 int j=strat->
Ll+strat->
Bl+1;
3196 for (
i=strat->
Bl;
i>=0;
i--)
3223 for (
j=0;
j<=strat->
sl;
j++)
3227 for (
i=strat->
Bl;
i>=0;
i--)
3242 for (
j=0;
j<=strat->
sl;
j++)
3246 for (
i=strat->
Bl;
i>=0;
i--)
3269 for (
j=strat->
Ll;
j>=0;
j--)
3275 if (strat->
L[
j].p == strat->
tail)
3321 for (
j=strat->
Ll;
j>=0;
j--)
3341 for(
i=
j-1;
i>=0;
i--)
3360 for (
j=strat->
Ll;
j>=0;
j--)
3362 #ifdef HAVE_SHIFTBBA
3363 if ((strat->
L[
j].p1!=
NULL) &&
3396 if (strat->
L[0].p2 == strat->
tail) strat->
L[0].p2 =
p;
3399 if (strat->
L[
j].p2 ==
p)
3405 if ((strat->
L[
i].p2 ==
p) &&
pLmEqual(strat->
L[
j].lcm,strat->
L[
i].lcm))
3419 strat->
L[
i].p2 = strat->
tail;
3436 else if (strat->
L[
j].p2 == strat->
tail)
3475 if (strat->
L[0].p2 == strat->
tail) strat->
L[0].p2 =
p;
3478 if (strat->
L[
j].p2 ==
p)
3484 if ((strat->
L[
i].p2 ==
p) &&
pLmEqual(strat->
L[
j].lcm,strat->
L[
i].lcm))
3498 strat->
L[
i].p2 = strat->
tail;
3515 else if (strat->
L[
j].p2 == strat->
tail)
3536 for (
j=0;
j<=strat->
sl;
j++)
3540 for (
i=strat->
Bl;
i>=0;
i--)
3548 Print(
"chain-crit-part: S[%d]=",
j);
3550 Print(
" divide B[%d].lcm=",
i);
3572 for (
j=strat->
Ll;
j>=0;
j--)
3578 if (strat->
L[
j].p == strat->
tail)
3582 PrintS(
"chain-crit-part: pCompareChainPart p=");
3584 Print(
" delete L[%d]",
j);
3613 Print(
"chain-crit-part: sugar B[%d].lcm=",
j);
3615 Print(
" delete B[%d]",
i);
3626 Print(
"chain-crit-part: sugar B[%d].lcm=",
i);
3628 Print(
" delete B[%d]",
j);
3648 for (
j=strat->
Ll;
j>=0;
j--)
3656 PrintS(
"chain-crit-part: sugar:pCompareChainPart p=");
3658 Print(
" delete L[%d]",
j);
3676 for(
i=
j-1;
i>=0;
i--)
3682 Print(
"chain-crit-part: equal lcm B[%d].lcm=",
j);
3684 Print(
" delete B[%d]\n",
i);
3701 for (
j=strat->
Ll;
j>=0;
j--)
3709 PrintS(
"chain-crit-part: pCompareChainPart p=");
3711 Print(
" delete L[%d]",
j);
3740 if (strat->
L[0].p2 == strat->
tail) strat->
L[0].p2 =
p;
3743 if (strat->
L[
j].p2 ==
p)
3749 if ((strat->
L[
i].p2 ==
p) &&
pLmEqual(strat->
L[
j].lcm,strat->
L[
i].lcm))
3766 strat->
L[
i].p2 = strat->
tail;
3773 PrintS(
"chain-crit-part: divisible_by p=");
3775 Print(
" delete L[%d]",
l);
3786 PrintS(
"chain-crit-part: divisible_by(2) p=");
3788 Print(
" delete L[%d]",
i);
3799 else if (strat->
L[
j].p2 == strat->
tail)
3827 for (
j=0;
j<=
k;
j++)
3840 for (
j=0;
j<=
k;
j++)
3849 for (
j=0;
j<=
k;
j++)
3862 #ifdef HAVE_RATGRING
3892 for (
j=0;
j<=
k;
j++)
3905 for (
j=0;
j<=
k;
j++)
3914 for (
j=0;
j<=
k;
j++)
4012 for (
j=0;
j<=strat->
sl;
j++)
4016 for (
i=strat->
Bl;
i>=0;
i--)
4023 PrintS(
"--- chain criterion func chainCritRing type 1\n");
4026 PrintS(
" strat->B[i].lcm:");
4031 wrp(strat->
B[
i].lcm);
4046 for (
j=strat->
Ll;
j>=0;
j--)
4059 PrintS(
"--- chain criterion func chainCritRing type 2\n");
4060 PrintS(
"strat->L[j].p:");
4091 if (strat->
L[0].p2 == strat->
tail) strat->
L[0].p2 =
p;
4094 if (strat->
L[
j].p2 ==
p)
4109 PrintS(
"--- chain criterion func chainCritRing type 3\n");
4110 PrintS(
"strat->L[j].lcm:");
4111 wrp(strat->
L[
j].lcm);
4112 PrintS(
" strat->L[i].lcm:");
4113 wrp(strat->
L[
i].lcm);
4127 strat->
L[
i].p2 = strat->
tail;
4144 else if (strat->
L[
j].p2 == strat->
tail)
4168 for (
j=0;
j<=
k;
j++)
4180 for (
j=0;
j<=
k;
j++)
4188 for (
j=0;
j<=
k;
j++)
4200 #ifdef HAVE_RATGRING
4270 PrintS(
"--- create zero spoly: ");
4354 PrintS(
"--- create zero spoly: ");
4391 strat->
enterS(strat->
P,strat->
sl+1,strat, strat->
tl+1);
4440 if ( (!strat->
fromT)
4497 if ( (!strat->
fromT)
4522 if ( (!strat->
fromT)
4547 for (
j=0;
j<=
k;
j++)
4561 for (
j=0;
j<=
k;
j++)
4624 for (;
i<=strat->
sl;
i++)
4632 sev = strat->
sevS[
i];
4637 strat->
S[
j] = strat->
S[
j-1];
4784 || ((op == o) && (
pLtCmp(set[mon],
p) == -1)))
4795 || ((op == o) && (
pLtCmp(set[
an],
p) == -1)))
4802 || ((op == o) && (
pLtCmp(set[
i],
p) == -1)))
4828 || ((op == o) && (
pLtCmp(set[
an],
p) == -1)))
4835 || ((op == o) && (
pLtCmp(set[
i],
p) == -1)))
4849 if (end<0)
return 0;
4856 for(
i=start;
i<end;
i++)
4870 || ((op == o) && (
pLtCmp(set[
an],
p) == -1)))
4877 || ((op == o) && (
pLtCmp(set[
i],
p) == -1)))
4902 if (
length==-1)
return 0;
4931 if (
length==-1)
return 0;
4959 if (
length==-1)
return 0;
4961 int o =
p.GetpFDeg();
4962 int op = set[
length].GetpFDeg();
4977 op= set[
an].GetpFDeg();
4984 op = set[
i].GetpFDeg();
4995 if (
length==-1)
return 0;
4997 int o =
p.GetpFDeg();
4998 int op = set[
length].GetpFDeg();
5012 op= set[
an].GetpFDeg();
5019 op = set[
i].GetpFDeg();
5035 if (
length==-1)
return 0;
5038 int o =
p.GetpFDeg();
5039 int op = set[
length].GetpFDeg();
5055 op = set[
an].GetpFDeg();
5058 || (( op == o) && (set[
an].length ==
p.
length)
5064 op = set[
i].GetpFDeg();
5067 || (( op == o) && (set[
i].length ==
p.
length)
5077 if (
length==-1)
return 0;
5080 int o =
p.GetpFDeg();
5081 int op = set[
length].GetpFDeg();
5096 op = set[
an].GetpFDeg();
5099 || (( op == o) && (set[
an].length ==
p.
length)
5105 op = set[
i].GetpFDeg();
5108 || (( op == o) && (set[
i].length ==
p.
length)
5123 if (
length==-1)
return 0;
5125 int o =
p.GetpFDeg();
5127 if (set[
length].GetpFDeg() <= o)
5137 if (set[
an].GetpFDeg() > o)
5142 if (set[
i].GetpFDeg() > o)
5152 if (
length==-1)
return 0;
5153 int ol =
p.GetpLength();
5167 int oo=set[
an].ecart;
5174 int oo=set[
i].ecart;
5208 if (
length==-1)
return 0;
5210 int o =
p.GetpFDeg() +
p.ecart;
5226 op = set[
an].GetpFDeg()+set[
an].ecart;
5233 op = set[
i].GetpFDeg()+set[
i].ecart;
5244 if (
length==-1)
return 0;
5246 int o =
p.GetpFDeg() +
p.ecart;
5261 op = set[
an].GetpFDeg()+set[
an].ecart;
5268 op = set[
i].GetpFDeg()+set[
i].ecart;
5304 if (
length==-1)
return 0;
5306 int o =
p.GetpFDeg() +
p.ecart;
5311 || (( op == o) && (set[
length].ecart >
p.ecart))
5312 || (( op == o) && (set[
length].ecart==
p.ecart)
5323 op = set[
an].GetpFDeg()+set[
an].ecart;
5325 || (( op == o) && (set[
an].ecart <
p.ecart))
5326 || (( op == o) && (set[
an].ecart==
p.ecart)
5332 op = set[
i].GetpFDeg()+set[
i].ecart;
5334 || (( op == o) && (set[
i].ecart <
p.ecart))
5335 || (( op == o) && (set[
i].ecart ==
p.ecart)
5345 if (
length==-1)
return 0;
5347 int o =
p.GetpFDeg() +
p.ecart;
5351 || (( op == o) && (set[
length].ecart >
p.ecart))
5352 || (( op == o) && (set[
length].ecart==
p.ecart)
5363 op = set[
an].GetpFDeg()+set[
an].ecart;
5365 || (( op == o) && (set[
an].ecart <
p.ecart))
5366 || (( op == o) && (set[
an].ecart==
p.ecart)
5372 op = set[
i].GetpFDeg()+set[
i].ecart;
5374 || (( op == o) && (set[
i].ecart <
p.ecart))
5375 || (( op == o) && (set[
i].ecart ==
p.ecart)
5390 if (
length==-1)
return 0;
5394 int o =
p.GetpFDeg() +
p.ecart;
5404 || ((op == o) && (set[
length].ecart >
p.ecart))
5405 || ((op == o) && (set[
length].ecart==
p.ecart)
5421 int op = set[
an].GetpFDeg()+set[
an].ecart;
5423 || ((op == o) && (set[
an].ecart <
p.ecart))
5424 || ((op == o) && (set[
an].ecart==
p.ecart)
5435 int op = set[
i].GetpFDeg()+set[
i].ecart;
5437 || ((op == o) && (set[
i].ecart <
p.ecart))
5438 || ((op == o) && (set[
i].ecart ==
p.ecart)
5451 if (
length==-1)
return 0;
5455 int o =
p.GetpFDeg() +
p.ecart;
5464 || ((op == o) && (set[
length].ecart >
p.ecart))
5465 || ((op == o) && (set[
length].ecart==
p.ecart)
5481 int op = set[
an].GetpFDeg()+set[
an].ecart;
5483 || ((op == o) && (set[
an].ecart <
p.ecart))
5484 || ((op == o) && (set[
an].ecart==
p.ecart)
5495 int op = set[
i].GetpFDeg()+set[
i].ecart;
5497 || ((op == o) && (set[
i].ecart <
p.ecart))
5498 || ((op == o) && (set[
i].ecart ==
p.ecart)
5517 if (
length==-1)
return 0;
5520 int op=
p.GetpFDeg();
5522 if (set[
length].ecart < o)
5524 if (set[
length].ecart == o)
5538 if (set[
an].ecart > o)
5540 if (set[
an].ecart == o)
5542 int oo=set[
an].GetpFDeg();
5550 if (set[
i].ecart > o)
5552 else if (set[
i].ecart == o)
5554 int oo=set[
i].GetpFDeg();
5576 int d=
p->GetpFDeg();
5577 int op=set[
length].GetpFDeg();
5592 op=set[
an].GetpFDeg();
5594 || ((op == d) && (
p->p1!=
NULL) && (set[
an].p1==
NULL))
5600 op=set[
i].GetpFDeg();
5602 || ((op==d) && (
p->p1!=
NULL) && (set[
i].p1==
NULL))
5723 if (set[
an].FDeg >
p->FDeg)
5727 if (set[
an].FDeg ==
p->FDeg)
5745 if (set[
i].FDeg >
p->FDeg)
5749 if (set[
i].FDeg ==
p->FDeg)
5764 if (strat->
syzl==0)
return 0;
5808 int o =
p->GetpFDeg();
5809 int op = set[
length].GetpFDeg();
5822 op = set[
an].GetpFDeg();
5829 op = set[
i].GetpFDeg();
5850 int o =
p->GetpFDeg();
5851 int op = set[
length].GetpFDeg();
5863 op = set[
an].GetpFDeg();
5870 op = set[
i].GetpFDeg();
5884 int o =
p->GetpFDeg();
5885 int op = set[
length].GetpFDeg();
5897 op = set[
an].GetpFDeg();
5904 op = set[
i].GetpFDeg();
5916 if (
length < 0)
return 0;
5926 if (set[
an].FDeg >
p->FDeg)
5930 if (set[
an].FDeg ==
p->FDeg)
5960 if (set[
i].FDeg >
p->FDeg)
5964 if (set[
i].FDeg ==
p->FDeg)
5972 if (set[
i].t_p!=
NULL)
6003 if (coeff == 0)
return -1;
6006 while (
tmp % 2 == 0)
6064 int o =
p->GetpFDeg();
6065 int op = set[
length].GetpFDeg();
6080 op = set[
an].GetpFDeg();
6083 || ((op == o) && (set[
an].length <=
p->
length)
6089 op = set[
i].GetpFDeg();
6092 || ((op == o) && (set[
i].length <=
p->
length)
6105 int o =
p->GetpFDeg();
6106 int op = set[
length].GetpFDeg();
6120 op = set[
an].GetpFDeg();
6123 || ((op == o) && (set[
an].length <=
p->
length)
6129 op = set[
i].GetpFDeg();
6132 || ((op == o) && (set[
i].length <=
p->
length)
6151 int o =
p->GetpFDeg();
6153 if (set[
length].GetpFDeg() > o)
6163 if (set[
an].GetpFDeg() >= o)
6168 if (set[
i].GetpFDeg() >= o)
6186 int o =
p->GetpFDeg() +
p->ecart;
6200 op = set[
an].GetpFDeg() + set[
an].ecart;
6207 op = set[
i].GetpFDeg() + set[
i].ecart;
6221 int o =
p->GetpFDeg() +
p->ecart;
6234 op = set[
an].GetpFDeg() + set[
an].ecart;
6241 op = set[
i].GetpFDeg() + set[
i].ecart;
6261 int o =
p->GetpFDeg() +
p->ecart;
6266 && (set[
length].ecart >
p->ecart))
6268 && (set[
length].ecart ==
p->ecart)
6278 if ((set[
an].GetpFDeg() + set[
an].ecart > o)
6279 || ((set[
an].GetpFDeg() + set[
an].ecart == o)
6280 && (set[
an].ecart >
p->ecart))
6281 || ((set[
an].GetpFDeg() + set[
an].ecart == o)
6282 && (set[
an].ecart ==
p->ecart)
6288 if ((set[
i].GetpFDeg() + set[
i].ecart > o)
6289 || ((set[
i].GetpFDeg() + set[
i].ecart == o)
6290 && (set[
i].ecart >
p->ecart))
6291 || ((set[
i].GetpFDeg() +set[
i].ecart == o)
6292 && (set[
i].ecart ==
p->ecart)
6305 int o =
p->GetpFDeg() +
p->ecart;
6309 && (set[
length].ecart >
p->ecart))
6311 && (set[
length].ecart ==
p->ecart)
6321 if ((set[
an].GetpFDeg() + set[
an].ecart > o)
6322 || ((set[
an].GetpFDeg() + set[
an].ecart == o)
6323 && (set[
an].ecart >
p->ecart))
6324 || ((set[
an].GetpFDeg() + set[
an].ecart == o)
6325 && (set[
an].ecart ==
p->ecart)
6331 if ((set[
i].GetpFDeg() + set[
i].ecart > o)
6332 || ((set[
i].GetpFDeg() + set[
i].ecart == o)
6333 && (set[
i].ecart >
p->ecart))
6334 || ((set[
i].GetpFDeg() +set[
i].ecart == o)
6335 && (set[
i].ecart ==
p->ecart)
6357 int o =
p->GetpFDeg() +
p->ecart;
6366 && (set[
length].ecart >
p->ecart))
6368 && (set[
length].ecart ==
p->ecart)
6383 if ((set[
an].GetpFDeg() + set[
an].ecart > o)
6384 || ((set[
an].GetpFDeg() + set[
an].ecart == o)
6385 && (set[
an].ecart >
p->ecart))
6386 || ((set[
an].GetpFDeg() + set[
an].ecart == o)
6387 && (set[
an].ecart ==
p->ecart)
6398 if ((set[
i].GetpFDeg() + set[
i].ecart > o)
6399 || ((set[
i].GetpFDeg() + set[
i].ecart == o)
6400 && (set[
i].ecart >
p->ecart))
6401 || ((set[
i].GetpFDeg() +set[
i].ecart == o)
6402 && (set[
i].ecart ==
p->ecart)
6421 int o =
p->GetpFDeg() +
p->ecart;
6429 && (set[
length].ecart >
p->ecart))
6431 && (set[
length].ecart ==
p->ecart)
6446 if ((set[
an].GetpFDeg() + set[
an].ecart > o)
6447 || ((set[
an].GetpFDeg() + set[
an].ecart == o)
6448 && (set[
an].ecart >
p->ecart))
6449 || ((set[
an].GetpFDeg() + set[
an].ecart == o)
6450 && (set[
an].ecart ==
p->ecart)
6461 if ((set[
i].GetpFDeg() + set[
i].ecart > o)
6462 || ((set[
i].GetpFDeg() + set[
i].ecart == o)
6463 && (set[
i].ecart >
p->ecart))
6464 || ((set[
i].GetpFDeg() +set[
i].ecart == o)
6465 && (set[
i].ecart ==
p->ecart)
6483 PrintS(
"syzygy criterion checks: ");
6486 for (
int k=0;
k<strat->
syzl;
k++)
6491 Print(
"checking with: %d / %d -- \n",
k,strat->
syzl);
6520 PrintS(
"--- syzygy criterion checks: ");
6545 Print(
"checking with: %d -- ",
k);
6570 PrintS(
"rewritten criterion checks: ");
6573 for(
int k = strat->
sl;
k>=start;
k--)
6577 PrintS(
"checking with: ");
6593 PrintS(
"ALL ELEMENTS OF S\n----------------------------------------\n");
6594 for(
int kk = 0;
kk<strat->
sl+1;
kk++)
6598 PrintS(
"------------------------------\n");
6628 for (
int ii=strat->
sl;
ii>start;
ii--)
6634 if (!(
pLmCmp(p1,p2) == 1))
6653 for (
int i=strat->
Bl;
i>-1;
i--)
6674 for (
int ii=strat->
sl;
ii>-1;
ii--)
6680 if (!(
pLmCmp(p1,p2) == 1))
6701 const unsigned long not_sev = ~L->sev;
6702 const unsigned long* sev = strat->
sevS;
6716 #if defined(PDEBUG) || defined(PDIV_DEBUG)
6735 #if defined(PDEBUG) || defined(PDIV_DEBUG)
6753 if (strat->
tl < 0 || strat->
S_2_R[
j] == -1)
6776 #if defined(PDEBUG) || defined(PDIV_DEBUG)
6790 assume(t !=
NULL && t->t_p !=
NULL && t->tailRing == r && t->p == strat->
S[
j]);
6807 #if defined(PDEBUG) || defined(PDIV_DEBUG)
6822 assume(t !=
NULL && t->t_p !=
NULL && t->tailRing == r && t->p == strat->
S[
j]);
6918 p =
h = L->GetLmTailRing();
6920 return L->GetLmCurrRing();
6955 Ln.SetShortExpVector();
6998 }
while (!
Ln.IsNull());
7023 return L->GetLmCurrRing();
7031 p =
h = L->GetLmTailRing();
7033 return L->GetLmCurrRing();
7040 Ln.pLength = L->GetpLength() - 1;
7064 Ln.SetShortExpVector();
7105 }
while (!
Ln.IsNull());
7138 return L->GetLmCurrRing();
7147 p =
h = L->GetLmTailRing();
7182 Ln.SetShortExpVector();
7216 }
while (!
Ln.IsNull());
7245 }
while (!
Ln.IsNull());
7276 p =
h = L->GetLmTailRing();
7278 return L->GetLmCurrRing();
7285 Ln.pLength = L->GetpLength() - 1;
7298 Ln.SetShortExpVector();
7310 poly
p_Ln=
Ln.GetLmCurrRing();
7324 }
while (!
Ln.IsNull());
7348 return L->GetLmCurrRing();
7382 p =
h = L->GetLmTailRing();
7384 return L->GetLmCurrRing();
7391 Ln.pLength = L->GetpLength() - 1;
7404 Ln.SetShortExpVector();
7416 poly
p_Ln=
Ln.GetLmCurrRing();
7433 }
while (!
Ln.IsNull());
7458 return L->GetLmCurrRing();
7493 if (strat->
Ll != *
reduc && strat->
Ll > 0)
7510 Print(
"product criterion:%d chain criterion:%d\n",strat->
cp,strat->
c3);
7512 #ifdef HAVE_SHIFTBBA
7514 if (strat->
cv!=0)
Print(
"shift V criterion:%d\n",strat->
cv);
7526 #ifdef HAVE_SHIFTBBA
7528 if (strat->
cv!=0)
Print(
"shift V criterion:%d\n",strat->
cv);
7543 for (
i=0;
i<=strat->
sl;
i++)
7555 for (
i=0;
i<=strat->
tl;
i++)
7560 Print(
" o:%ld e:%d l:%d",
7561 strat->
T[
i].pFDeg(),strat->
T[
i].ecart,strat->
T[
i].
length);
7566 for (
i=strat->
Ll;
i>=0;
i--)
7575 Print(
" o:%ld e:%d l:%d",
7576 strat->
L[
i].pFDeg(),strat->
L[
i].ecart,strat->
L[
i].
length);
7599 strat->
S=strat->
Shdl->m;
7633 strat->
enterS(
h,pos,strat,-1);
7634 strat->
fromQ[pos]=1;
7667 strat->
enterS(
h,pos,strat,-1);
7695 strat->
S=strat->
Shdl->m;
7730 strat->
enterS(
h,pos,strat,-1);
7731 strat->
fromQ[pos]=1;
7763 pos = strat->
posInL(strat->
L,strat->
Ll,&
h,strat);
7795 strat->
S = strat->
Shdl->m;
7837 strat->
enterS(
h,pos,strat,-1);
7838 strat->
fromQ[pos]=1;
7946 for(
i=1;
i<=strat->
sl;
i++)
7962#if defined(DEBUGF5) || defined(DEBUGF51)
7963 PrintS(
"------------- GENERATING SYZ RULES NEW ---------------\n");
8000 for (
k = 0;
k<
i;
k++)
8044 for (
k = 0;
k<strat->
sl+1;
k++)
8065 PrintS(
"Principal syzygies:\n");
8069 PrintS(
"--------------------------------\n");
8079 PrintS(
"--------------------------------\n");
8103 strat->
S=strat->
Shdl->m;
8138 strat->
enterS(
h,pos,strat, strat->
tl+1);
8140 strat->
fromQ[pos]=1;
8168 strat->
enterS(
h,pos,strat, strat->
tl+1);
8210 h.is_normalized = 0;
8217 strat->
enterS(
h,pos,strat, strat->
tl+1);
8251 strat->
S=strat->
Shdl->m;
8286 strat->
enterS(
h,pos,strat, strat->
tl+1);
8288 strat->
fromQ[pos]=1;
8316 strat->
enterS(
h,pos,strat, strat->
tl+1);
8358 h.is_normalized = 0;
8365 strat->
enterS(
h,pos,strat, strat->
tl+1);
8406 if (!
pIsVector((*p).p) && ((*p).ecart != 0))
8649 for (
i=0;
i<=strat->
sl;
i++)
8741 else {
suc=-1;
break; }
8752 for (
i=0;
i<=strat->
sl;
i++)
8800 *
sizeof(
unsigned long));
8827 strat->
Shdl->m=strat->
S;
8831#ifdef ENTER_USE_MEMMOVE
8833 (strat->
sl -
atS + 1)*
sizeof(poly));
8835 (strat->
sl -
atS + 1)*
sizeof(
int));
8837 (strat->
sl -
atS + 1)*
sizeof(
unsigned long));
8839 (strat->
sl -
atS + 1)*
sizeof(
int));
8842 (strat->
sl -
atS + 1)*
sizeof(
int));
8849 strat->
S[
i] = strat->
S[
i-1];
8864#ifdef ENTER_USE_MEMMOVE
8866 (strat->
sl -
atS + 1)*
sizeof(
int));
8923 *
sizeof(
unsigned long));
8927 *
sizeof(
unsigned long));
8955 strat->
Shdl->m=strat->
S;
8964#ifdef ENTER_USE_MEMMOVE
8966 (strat->
sl -
atS + 1)*
sizeof(poly));
8968 (strat->
sl -
atS + 1)*
sizeof(poly));
8970 (strat->
sl -
atS + 1)*
sizeof(
unsigned long));
8972 (strat->
sl -
atS + 1)*
sizeof(
int));
8974 (strat->
sl -
atS + 1)*
sizeof(
unsigned long));
8976 (strat->
sl -
atS + 1)*
sizeof(
int));
8979 (strat->
sl -
atS + 1)*
sizeof(
int));
8986 strat->
S[
i] = strat->
S[
i-1];
9003#ifdef ENTER_USE_MEMMOVE
9005 (strat->
sl -
atS + 1)*
sizeof(
int));
9016 strat->
S[
atS] =
p.p;
9040 Print(
"--- LIST S: %d ---\n",strat->
sl);
9041 for(
k=0;
k<=strat->
sl;
k++)
9045 PrintS(
"--- LIST S END ---\n");
9071 else strat->
P.sev=0;
9079 poly
tp = strat->
T[
tj].p;
9084 for (
j = 0;
j <= strat->
sl; ++
j)
9098 pos =
posInS(strat, strat->
sl,
p.p,
p.ecart);
9104 for (
i = 0;
i <= strat->
Ll; ++
i)
9128 strat->
enterS(
p, pos, strat, strat->
tl);
9167 for(
i=strat->
tl;
i>=0;
i--)
9169 if (
p.p==strat->
T[
i].p)
9171 printf(
"already in T at pos %d of %d, atT=%d\n",
i,strat->
tl,
atT);
9177#ifdef HAVE_TAIL_RING
9180 p.t_p=
p.GetLmTailRing();
9186 if (strat->
tl == strat->
tmax-1)
9190#ifdef ENTER_USE_MEMMOVE
9194 (strat->
tl-
atT+1)*
sizeof(
unsigned long));
9198#ifndef ENTER_USE_MEMMOVE
9199 strat->
T[
i] = strat->
T[
i-1];
9202 strat->
R[strat->
T[
i].i_r] = &(strat->
T[
i]);
9210 if (!(
currRing->isLPring &&
p.shift > 0))
9229 strat->
R[strat->
tl] = &(strat->
T[
atT]);
9230 strat->
T[
atT].i_r = strat->
tl;
9254 for(
i=strat->
tl;
i>=0;
i--)
9256 if (
p.p==strat->
T[
i].p)
9258 printf(
"already in T at pos %d of %d, atT=%d\n",
i,strat->
tl,
atT);
9264#ifdef HAVE_TAIL_RING
9267 p.t_p=
p.GetLmTailRing();
9273 if (strat->
tl == strat->
tmax-1)
9277#ifdef ENTER_USE_MEMMOVE
9281 (strat->
tl-
atT+1)*
sizeof(
unsigned long));
9285#ifndef ENTER_USE_MEMMOVE
9286 strat->
T[
i] = strat->
T[
i-1];
9289 strat->
R[strat->
T[
i].i_r] = &(strat->
T[
i]);
9310 strat->
R[strat->
tl] = &(strat->
T[
atT]);
9311 strat->
T[
atT].i_r = strat->
tl;
9318 for(
i=strat->
tl;
i>=0;
i--)
9350 *
sizeof(
unsigned long));
9355#ifdef ENTER_USE_MEMMOVE
9357 (strat->
syzl-
atT+1)*
sizeof(poly));
9359 (strat->
syzl-
atT+1)*
sizeof(
unsigned long));
9363#ifndef ENTER_USE_MEMMOVE
9400 PrintS(
"--- Syzygies ---\n");
9403 PrintS(
"--------------------------------\n");
9409 PrintS(
"--------------------------------\n");
9489 if (strat->
homog)
PrintS(
"ideal/module is homogeneous\n");
9490 else PrintS(
"ideal/module is not homogeneous\n");
9558 if (strat->
homog)
PrintS(
"ideal/module is homogeneous\n");
9559 else PrintS(
"ideal/module is not homogeneous\n");
10094 if ((r->m[
l]!=
NULL)
10101 if ((
Q->m[q]!=
NULL)
10124 if ((r->m[
l]!=
NULL)
10131 if ((
Q->m[q]!=
NULL)
10329 Print(
"to (tailR) S[%d]:",
i);
10344 T_j->pCleardenom();
10384 Print(
"to (-tailR) S[%d]:",
i);
10481 assume(L->i_r1 >= -1 && L->i_r1 <= strat->
tl);
10482 assume(L->i_r2 >= -1 && L->i_r2 <= strat->
tl);
10487 if ((L->i_r1 == -1) || (L->i_r2 == -1) )
10492 if ((L->i_r1>=0)&&(strat->
R[L->i_r1]!=
NULL))
p1_max = (strat->
R[L->i_r1])->max_exp;
10494 if ((L->i_r2>=0)&&(strat->
R[L->i_r2]!=
NULL))
p2_max = (strat->
R[L->i_r2])->max_exp;
10704 poly
pH =
h->GetP();
10708 for(
int i = 0;
i<=strat->
sl;
i++)
10771 h->SetLmCurrRing();
10780 poly
hSig =
h->sig;
10781 poly
pH =
h->GetP();
10785 for(
int i = 0;
i<=strat->
sl;
i++)
10854 h->SetLmCurrRing();
10994 for (
i=0;
i<=strat->
tl;
i++)
10997 p_shallow_copy_delete);
10999 for (
i=0;
i<=strat->
Ll;
i++)
11003 strat->
L[
i].ShallowCopyDelete(
new_tailRing, p_shallow_copy_delete);
11005 if ((strat->
P.t_p !=
NULL) ||
11007 strat->
P.ShallowCopyDelete(
new_tailRing, p_shallow_copy_delete);
11012 L->ShallowCopyDelete(
new_tailRing, p_shallow_copy_delete);
11021 L->max_exp =
t_l->max_exp;
11052 unsigned long l = 0;
11058 for (
i=0;
i<= strat->
Ll;
i++)
11062 for (
i=0;
i<=strat->
tl;
i++)
11092 int **wvhdl = (
int **)
omAlloc0((n+1)*
sizeof(
int*));
11093 res->wvhdl = wvhdl;
11094 for (
int i=1;
i<n;
i++)
11096 res->order[
i] = r->order[
i-1];
11097 res->block0[
i] = r->block0[
i-1];
11098 res->block1[
i] = r->block1[
i-1];
11099 res->wvhdl[
i] = r->wvhdl[
i-1];
11119 WarnS(
"error in nc_rComplete");
11140 int **wvhdl = (
int **)
omAlloc0((n+2)*
sizeof(
int*));
11141 res->wvhdl = wvhdl;
11142 for (
int i=2;
i<n+2;
i++)
11144 res->order[
i] = r->order[
i-2];
11145 res->block0[
i] = r->block0[
i-2];
11146 res->block1[
i] = r->block1[
i-2];
11147 res->wvhdl[
i] = r->wvhdl[
i-2];
11152 res->block0[0] = 1;
11154 for (
int i=0;
i<
res->N; ++
i)
11155 res->wvhdl[0][
i] = 1;
11175 WarnS(
"error in nc_rComplete");
11312#ifdef HAVE_TAIL_BIN
11340Gonnet 43.26 42.30 38.34 41.98 38.40 100.04
11342Twomat3 1.62 1.69 1.70 1.65 1.54 11.32
11343ahml 4.48 4.03 4.03 4.38 4.96 26.50
11344c7 15.02 13.98 15.16 13.24 17.31 47.89
11345c8 505.09 407.46 852.76 413.21 499.19 n/a
11346f855 12.65 9.27 14.97 8.78 14.23 33.12
11347gametwo6 11.47 11.35 14.57 11.20 12.02 35.07
11349ilias13 22.89 22.46 24.62 20.60 23.34 53.86
11350noon8 40.68 37.02 37.99 36.82 35.59 877.16
11351rcyclic_19 48.22 42.29 43.99 45.35 51.51 204.29
11352rkat9 82.37 79.46 77.20 77.63 82.54 267.92
11353schwarz_11 16.46 16.81 16.76 16.81 16.72 35.56
11354test016 16.39 14.17 14.40 13.50 14.26 34.07
11355test017 34.70 36.01 33.16 35.48 32.75 71.45
11356test042 10.76 10.99 10.27 11.57 10.45 23.04
11357test058 6.78 6.75 6.51 6.95 6.22 9.47
11358test066 10.71 10.94 10.76 10.61 10.56 19.06
11359test073 10.75 11.11 10.17 10.79 8.63 58.10
11360test086 12.23 11.81 12.88 12.24 13.37 66.68
11361test103 5.05 4.80 5.47 4.64 4.89 11.90
11362test154 12.96 11.64 13.51 12.46 14.61 36.35
11363test162 65.27 64.01 67.35 59.79 67.54 196.46
11364test164 7.50 6.50 7.68 6.70 7.96 17.13
11365virasoro 3.39 3.50 3.35 3.47 3.70 7.66
11375 if (
length==-1)
return 0;
11378 int op=
p.GetpFDeg();
11379 int ol =
p.GetpLength();
11381 if (set[
length].ecart < o)
11383 if (set[
length].ecart == o)
11397 if (set[
an].ecart > o)
11399 if (set[
an].ecart == o)
11401 int oo=set[
an].GetpFDeg();
11409 if (set[
i].ecart > o)
11411 else if (set[
i].ecart == o)
11413 int oo=set[
i].GetpFDeg();
11429 if (
length==-1)
return 0;
11431 int op=
p.GetpFDeg();
11432 int ol =
p.GetpLength();
11445 int oo=set[
an].GetpFDeg();
11452 int oo=set[
i].GetpFDeg();
11465 int ol =
p.GetpLength();
11523#ifdef HAVE_MORE_POS_IN_T
11557 printf(
"initEcartPair: ");
11561 printf(
"homog=%d, LazyDegree=%d, LazyPass=%d, ak=%d,\n",
11563 printf(
"honey=%d, sugarCrit=%d, Gebauer=%d, noTailReduction=%d, use_buckets=%d\n",
11569 printf(
"posInLDependsOnLength=%d\n",
11601 printf(
"currRing->pFDeg: ");
11616 printf(
"ecartWeights: ");
11638#ifdef HAVE_SHIFTBBA
11742 PrintS(
"\n--- create strong gcd poly: ");
11751 pNext(
gcd) =
p_Add_q(
pp_Mult_mm(
pp_mm_Mult(
pNext(
p), m1, strat->
tailRing),
m12, strat->
tailRing),
pp_Mult_mm(
pp_mm_Mult(
pNext(q), m2, strat->
tailRing),
m22, strat->
tailRing), strat->
tailRing);
11773 h.i_r1 = -1;
h.i_r2 = -1;
11807#ifdef HAVE_SHIFTBBA
11838 h.ecart=0;
h.length=0;
11870 for(
j = strat->
Bl;
j>=0;
j--)
12011 h.i_r1 = -1;
h.i_r2 = -1;
12050#ifdef HAVE_SHIFTBBA
12060#ifdef HAVE_SHIFTBBA
12120#ifdef HAVE_SHIFTBBA
12160#ifdef HAVE_SHIFTBBA
12163#ifdef CRITERION_DEBUG
12208#ifdef CRITERION_DEBUG
12216 if((!((
ecartq>0)&&(ecart>0)))
12235#ifdef CRITERION_DEBUG
12245#ifdef CRITERION_DEBUG
12270#ifdef CRITERION_DEBUG
12273 Print(
"--- chain crit using B[%d].lcm=%s\n",
j,
pString(strat->
B[
j].lcm));
12284#ifdef CRITERION_DEBUG
12287 Print(
"--- chain crit using pair to remove B[%d].lcm=%s\n",
j,
pString(strat->
B[
j].lcm));
12320#ifdef CRITERION_DEBUG
12328#ifdef CRITERION_DEBUG
12340 for(
j = strat->
Bl;
j>=0;
j--)
12349#ifdef CRITERION_DEBUG
12352 Print(
"--- chain crit using B[%d].lcm=%s\n",
j,
pString(strat->
B[
j].lcm));
12362#ifdef CRITERION_DEBUG
12365 Print(
"--- chain crit using pair to remove B[%d].lcm=%s\n",
j,
pString(strat->
B[
j].lcm));
12382#ifdef CRITERION_DEBUG
12390#ifdef CRITERION_DEBUG
12449#ifdef CRITERION_DEBUG
12489#ifdef CRITERION_DEBUG
12502#ifdef HAVE_SHIFTBBA
12532 for (
j=0;
j<=
k;
j++)
12537 poly
s = strat->
S[
j];
12548 for (
j=0;
j<=
k;
j++)
12550 poly
s = strat->
S[
j];
12568 for (
j=0;
j<=
k;
j++)
12573 poly
s = strat->
S[
j];
12584 for (
j=0;
j<=
k;
j++)
12588 poly
s = strat->
S[
j];
12616 for (
j=0;
j<=
k;
j++)
12618 poly
s = strat->
S[
j];
12626 for (
j=0;
j<=
k;
j++)
12628 poly
s = strat->
S[
j];
12669 for (
j=0;
j<=
k;
j++)
12674 poly
s = strat->
S[
j];
12691 for (
j=0;
j<=
k;
j++)
12696 poly
s = strat->
S[
j];
12704 for (
j=0;
j<=
k;
j++)
12709 poly
s = strat->
S[
j];
12760#ifdef HAVE_SHIFTBBA
12789 for (
j=0;
j<=
k;
j++)
12794 poly
s = strat->
S[
j];
12803 for (
j=0;
j<=
k;
j++)
12805 poly
s = strat->
S[
j];
12823 for (
j=0;
j<=
k;
j++)
12828 poly
s = strat->
S[
j];
12838 for (
j=0;
j<=
k;
j++)
12842 poly
s = strat->
S[
j];
12853 for (
j=0;
j<=
k;
j++)
12855 poly
s = strat->
S[
j];
12864 for (
j=0;
j<=
k;
j++)
12866 poly
s = strat->
S[
j];
12881 for (
j=0;
j<=
k;
j++)
12887 poly
s = strat->
S[
j];
12904 for (
j=0;
j<=
k;
j++)
12909 poly
s = strat->
S[
j];
12917 for (
j=0;
j<=
k;
j++)
12922 poly
s = strat->
S[
j];
12944#ifdef HAVE_SHIFTBBA
12953 if ( (!strat->
fromT)
12974#ifdef HAVE_SHIFTBBA
12997#ifdef HAVE_SHIFTBBA
13004 p =
h = L->GetLmTailRing();
13006 return L->GetLmCurrRing();
13013 Ln.pLength = L->GetpLength() - 1;
13021 while(!
Ln.IsNull())
13025 Ln.SetShortExpVector();
13055 }
while (!
Ln.IsNull());
13076 return L->GetLmCurrRing();
static int si_max(const int a, const int b)
static int si_min(const int a, const int b)
static CanonicalForm bound(const CFMatrix &M)
KINLINE poly kNoetherTail()
void(* chainCrit)(poly p, int ecart, kStrategy strat)
pFDegProc pOrigFDeg_TailRing
BOOLEAN(* rewCrit1)(poly sig, unsigned long not_sevSig, poly lm, kStrategy strat, int start)
BOOLEAN(* rewCrit3)(poly sig, unsigned long not_sevSig, poly lm, kStrategy strat, int start)
int(* posInL)(const LSet set, const int length, LObject *L, const kStrategy strat)
KINLINE TObject * s_2_t(int i)
void(* initEcartPair)(LObject *h, poly f, poly g, int ecartF, int ecartG)
BOOLEAN(* syzCrit)(poly sig, unsigned long not_sevSig, kStrategy strat)
pShallowCopyDeleteProc p_shallow_copy_delete
void(* enterS)(LObject &h, int pos, kStrategy strat, int atR)
char completeReduce_retry
void(* initEcart)(TObject *L)
KINLINE TObject * S_2_T(int i)
void(* enterOnePair)(int i, poly p, int ecart, int isFromQ, kStrategy strat, int atR)
int(* posInT)(const TSet T, const int tl, LObject &h)
int(* red)(LObject *L, kStrategy strat)
char posInLDependsOnLength
int(* posInLSba)(const LSet set, const int length, LObject *L, const kStrategy strat)
pLDegProc pOrigLDeg_TailRing
static FORCE_INLINE BOOLEAN nCoeff_is_Z(const coeffs r)
@ n_Q
rational (GMP) numbers
static FORCE_INLINE number n_Gcd(number a, number b, const coeffs r)
in Z: return the gcd of 'a' and 'b' in Z/nZ, Z/2^kZ: computed as in the case Z in Z/pZ,...
static FORCE_INLINE BOOLEAN n_IsUnit(number n, const coeffs r)
TRUE iff n has a multiplicative inverse in the given coeff field/ring r.
static FORCE_INLINE number n_Ann(number a, const coeffs r)
if r is a ring with zero divisors, return an annihilator!=0 of b otherwise return NULL
static FORCE_INLINE nMapFunc n_SetMap(const coeffs src, const coeffs dst)
set the mapping function pointers for translating numbers from src to dst
coeffs nInitChar(n_coeffType t, void *parameter)
one-time initialisations for new coeffs in case of an error return NULL
static FORCE_INLINE void n_Delete(number *p, const coeffs r)
delete 'p'
static FORCE_INLINE number n_Lcm(number a, number b, const coeffs r)
in Z: return the lcm of 'a' and 'b' in Z/nZ, Z/2^kZ: computed as in the case Z in Z/pZ,...
static FORCE_INLINE number n_ExtGcd(number a, number b, number *s, number *t, const coeffs r)
beware that ExtGCD is only relevant for a few chosen coeff. domains and may perform something unexpec...
static FORCE_INLINE number n_Init(long i, const coeffs r)
a number representing i in the given coeff field/ring r
static FORCE_INLINE number n_IntMod(number a, number b, const coeffs r)
for r a field, return n_Init(0,r) always: n_Div(a,b,r)*b+n_IntMod(a,b,r)==a n_IntMod(a,...
static FORCE_INLINE BOOLEAN n_DivBy(number a, number b, const coeffs r)
test whether 'a' is divisible 'b'; for r encoding a field: TRUE iff 'b' does not represent zero in Z:...
static FORCE_INLINE int n_DivComp(number a, number b, const coeffs r)
number(* nMapFunc)(number a, const coeffs src, const coeffs dst)
maps "a", which lives in src, into dst
void nKillChar(coeffs r)
undo all initialisations
const CanonicalForm int s
int comp(const CanonicalForm &A, const CanonicalForm &B)
compare polynomials
static int min(int a, int b)
static int max(int a, int b)
void scComputeHC(ideal S, ideal Q, int ak, poly &hEdge)
ideal idSyzygies(ideal h1, tHomog h, intvec **w, BOOLEAN setSyzComp, BOOLEAN setRegularity, int *deg, GbVariant alg)
#define idDelete(H)
delete an ideal
BOOLEAN idInsertPoly(ideal h1, poly h2)
insert h2 into h1 (if h2 is not the zero polynomial) return TRUE iff h2 was indeed inserted
BOOLEAN idIs0(ideal h)
returns true if h is the zero ideal
#define idPosConstant(I)
index of generator with leading term in ground ring (if any); otherwise -1
static BOOLEAN length(leftv result, leftv arg)
KINLINE poly k_LmInit_currRing_2_tailRing(poly p, ring tailRing, omBin tailBin)
KINLINE void k_GetStrongLeadTerms(const poly p1, const poly p2, const ring leadRing, poly &m1, poly &m2, poly &lcm, const ring tailRing)
KINLINE int ksReducePolyTailLC_Z(LObject *PR, TObject *PW, LObject *Red)
KINLINE poly ksOldSpolyRed(poly p1, poly p2, poly spNoether)
KINLINE TObject ** initR()
KINLINE int ksReducePolyTail(LObject *PR, TObject *PW, LObject *Red)
KINLINE poly ksOldSpolyRedNew(poly p1, poly p2, poly spNoether)
KINLINE void clearS(poly p, unsigned long p_sev, int *at, int *k, kStrategy strat)
KINLINE BOOLEAN k_GetLeadTerms(const poly p1, const poly p2, const ring p_r, poly &m1, poly &m2, const ring m_r)
KINLINE int ksReducePolyTail_Z(LObject *PR, TObject *PW, LObject *Red)
KINLINE unsigned long * initsevT()
int redLiftstd(LObject *h, kStrategy strat)
BOOLEAN kbTest(kBucket_pt bucket)
Tests.
void kBucketDestroy(kBucket_pt *bucket_pt)
int ksCheckCoeff(number *a, number *b, const coeffs r)
BOOLEAN pCompareChainPart(poly p, poly p1, poly p2, poly lcm, const ring R)
BOOLEAN pCompareChain(poly p, poly p1, poly p2, poly lcm, const ring R)
Returns TRUE if.
poly ksCreateShortSpoly(poly p1, poly p2, ring tailRing)
long kHomModDeg(poly p, const ring r)
int posInL10(const LSet set, const int length, LObject *p, const kStrategy strat)
poly kNF(ideal F, ideal Q, poly p, int syzComp, int lazyReduce)
ideal kStd(ideal F, ideal Q, tHomog h, intvec **w, intvec *hilb, int syzComp, int newIdeal, intvec *vw, s_poly_proc_t sp)
int kFindDivisibleByInT_Z(const kStrategy strat, const LObject *L, const int start)
int redHoney(LObject *h, kStrategy strat)
int redHomog(LObject *h, kStrategy strat)
int redLazy(LObject *h, kStrategy strat)
poly redNF(poly h, int &max_ind, int nonorm, kStrategy strat)
int redRing(LObject *h, kStrategy strat)
int kFindDivisibleByInT(const kStrategy strat, const LObject *L, const int start)
return -1 if no divisor is found number of first divisor in T, otherwise
void initSbaPos(kStrategy strat)
void message(int i, int *reduc, int *olddeg, kStrategy strat, int red_result)
poly redtail(LObject *L, int end_pos, kStrategy strat)
int posInL17Ring(const LSet set, const int length, LObject *p, const kStrategy)
int posInL17_cRing(const LSet set, const int length, LObject *p, const kStrategy)
int getIndexRng(long coeff)
int posInL110(const LSet set, const int length, LObject *p, const kStrategy)
int posInT17(const TSet set, const int length, LObject &p)
void initBuchMora(ideal F, ideal Q, kStrategy strat)
int redFirst(LObject *h, kStrategy strat)
void kMergeBintoL(kStrategy strat)
static void enlargeT(TSet &T, TObject **&R, unsigned long *&sevT, int &length, const int incr)
BOOLEAN arriRewCriterionPre(poly sig, unsigned long not_sevSig, poly lm, kStrategy strat, int)
void enterSyz(LObject &p, kStrategy strat, int atT)
int posInL11Ring(const LSet set, const int length, LObject *p, const kStrategy)
int redEcart(LObject *h, kStrategy strat)
int posInT11(const TSet set, const int length, LObject &p)
void enterT(LObject &p, kStrategy strat, int atT)
int posInT1(const TSet set, const int length, LObject &p)
void enterTShift(LObject p, kStrategy strat, int atT)
int posInT110Ring(const TSet set, const int length, LObject &p)
BOOLEAN arriRewCriterion(poly, unsigned long, poly, kStrategy strat, int start=0)
void enterSSba(LObject &p, int atS, kStrategy strat, int atR)
BOOLEAN kTest(kStrategy strat)
void initenterpairsSigRing(poly h, poly hSig, int hFrom, int k, int ecart, int isFromQ, kStrategy strat, int atR=-1)
void enterSMoraNF(LObject &p, int atS, kStrategy strat, int atR=-1)
poly redtailBbaBound(LObject *L, int end_pos, kStrategy strat, int bound, BOOLEAN withT, BOOLEAN normalize)
int posInT_EcartpLength(const TSet set, const int length, LObject &p)
TObject * kFindDivisibleByInS_T(kStrategy strat, int end_pos, LObject *L, TObject *T, long ecart)
int posInT0(const TSet, const int length, LObject &)
BOOLEAN kTest_TS(kStrategy strat)
void enterOnePairNormal(int i, poly p, int ecart, int isFromQ, kStrategy strat, int atR=-1)
int kFindInT(poly p, TSet T, int tlength)
returns index of p in TSet, or -1 if not found
BOOLEAN kCheckStrongCreation(int atR, poly m1, int atS, poly m2, kStrategy strat)
void initenterstrongPairsShift(poly h, int k, int ecart, int isFromQ, kStrategy strat, int atR)
void enterpairsSig(poly h, poly hSig, int hFrom, int k, int ecart, int pos, kStrategy strat, int atR)
static void enterOnePairRingShift(poly q, poly p, int, int isFromQ, kStrategy strat, int atR, int, int qisFromQ, int shiftcount, int ifromS)
static const char * kTest_LmEqual(poly p, poly t_p, ring tailRing)
void enterL(LSet *set, int *length, int *LSetmax, LObject p, int at)
BOOLEAN faugereRewCriterion(poly sig, unsigned long not_sevSig, poly, kStrategy strat, int start=0)
static BOOLEAN enterOneStrongPolyAndEnterOnePairRingShift(poly q, poly p, int ecart, int isFromQ, kStrategy strat, int atR, int ecartq, int qisFromQ, int shiftcount, int ifromS)
void clearSbatch(poly h, int k, int pos, kStrategy strat)
static int pLPDivComp(poly p, poly q)
int posInT2(const TSet set, const int length, LObject &p)
int posInL13(const LSet set, const int length, LObject *p, const kStrategy)
int posInL110Ring(const LSet set, const int length, LObject *p, const kStrategy)
static BOOLEAN enterOnePairWithShifts(int q_inS, poly q, poly p, int ecartp, int p_isFromQ, kStrategy strat, int, int p_lastVblock, int q_lastVblock)
int posInT_pLength(const TSet set, const int length, LObject &p)
static intset initec(const int maxnr)
BOOLEAN kPosInLDependsOnLength(int(*pos_in_l)(const LSet set, const int length, LObject *L, const kStrategy strat))
void enterpairs(poly h, int k, int ecart, int pos, kStrategy strat, int atR)
int posInT13(const TSet set, const int length, LObject &p)
void redtailBbaAlsoLC_Z(LObject *L, int end_pos, kStrategy strat)
BOOLEAN syzCriterionInc(poly sig, unsigned long not_sevSig, kStrategy strat)
static void deleteHCBucket(LObject *L, kStrategy strat)
void initHilbCrit(ideal, ideal, intvec **hilb, kStrategy strat)
static BOOLEAN enterOnePairWithoutShifts(int p_inS, poly q, poly p, int ecartq, int q_isFromQ, kStrategy strat, int, int p_lastVblock, int q_shift)
void chainCritSig(poly p, int, kStrategy strat)
int posInSMonFirst(const kStrategy strat, const int length, const poly p)
void initEcartPairMora(LObject *Lp, poly, poly, int ecartF, int ecartG)
void initenterstrongPairs(poly h, int k, int ecart, int isFromQ, kStrategy strat, int atR=-1)
void superenterpairsSig(poly h, poly hSig, int hFrom, int k, int ecart, int pos, kStrategy strat, int atR)
static poly redMora(poly h, int maxIndex, kStrategy strat)
int posInL0Ring(const LSet set, const int length, LObject *p, const kStrategy)
static int pDivCompRing(poly p, poly q)
void initBuchMoraPos(kStrategy strat)
void initenterpairs(poly h, int k, int ecart, int isFromQ, kStrategy strat, int atR)
void initS(ideal F, ideal Q, kStrategy strat)
BOOLEAN kStratChangeTailRing(kStrategy strat, LObject *L, TObject *T, unsigned long expbound)
poly redtailBba(LObject *L, int end_pos, kStrategy strat, BOOLEAN withT, BOOLEAN normalize)
poly redtailBba_Z(LObject *L, int end_pos, kStrategy strat)
ring sbaRing(kStrategy strat, const ring r, BOOLEAN, int)
void initPairtest(kStrategy strat)
static BOOLEAN p_HasNotCF_Lift(poly p1, poly p2, const ring r)
p_HasNotCF for the IDLIFT case and syzComp==1: ignore component
int posInL0(const LSet set, const int length, LObject *p, const kStrategy)
void initSSpecial(ideal F, ideal Q, ideal P, kStrategy strat)
void chainCritOpt_1(poly, int, kStrategy strat)
int posInT11Ring(const TSet set, const int length, LObject &p)
static void enterOnePairRing(int i, poly p, int, int isFromQ, kStrategy strat, int atR)
static poly redBba(poly h, int maxIndex, kStrategy strat)
void cancelunit1(LObject *p, int *suc, int index, kStrategy strat)
void initenterpairsShift(poly h, int k, int ecart, int isFromQ, kStrategy strat, int atR)
static void initenterstrongPairsSig(poly h, poly hSig, int k, int ecart, int isFromQ, kStrategy strat, int atR=-1)
void initenterpairsSig(poly h, poly hSig, int hFrom, int k, int ecart, int isFromQ, kStrategy strat, int atR=-1)
int posInL15(const LSet set, const int length, LObject *p, const kStrategy)
static void enlargeL(LSet *L, int *length, const int incr)
int posInT17_c(const TSet set, const int length, LObject &p)
poly redtailBbaShift(LObject *L, int pos, kStrategy strat, BOOLEAN withT, BOOLEAN normalize)
int posInT_EcartFDegpLength(const TSet set, const int length, LObject &p)
int posInT15(const TSet set, const int length, LObject &p)
void enterT_strong(LObject &p, kStrategy strat, int atT)
void postReduceByMon(LObject *h, kStrategy strat)
used for GB over ZZ: intermediate reduction by monomial elements background: any known constant eleme...
BOOLEAN syzCriterion(poly sig, unsigned long not_sevSig, kStrategy strat)
void HEckeTest(poly pp, kStrategy strat)
int posInLSpecial(const LSet set, const int length, LObject *p, const kStrategy)
STATIC_VAR BOOLEAN sloppy_max
void enterExtendedSpolySig(poly h, poly hSig, kStrategy strat)
void enterpairsShift(poly h, int k, int ecart, int pos, kStrategy strat, int atR)
static void enterOnePairSig(int i, poly p, poly pSig, int, int ecart, int isFromQ, kStrategy strat, int atR=-1)
BOOLEAN kTest_L(LObject *L, kStrategy strat, BOOLEAN testp, int lpos, TSet T, int tlength)
void exitBuchMora(kStrategy strat)
void messageStatSBA(int hilbcount, kStrategy strat)
void initEcartNormal(TObject *h)
int posInS(const kStrategy strat, const int length, const poly p, const int ecart_p)
void updateS(BOOLEAN toT, kStrategy strat)
static BOOLEAN is_shifted_p1(const poly p, const kStrategy strat)
void initSLSba(ideal F, ideal Q, kStrategy strat)
int posInL11Ringls(const LSet set, const int length, LObject *p, const kStrategy)
void enterOnePairSpecial(int i, poly p, int ecart, kStrategy strat, int atR=-1)
static int * initS_2_R(const int maxnr)
int posInL17(const LSet set, const int length, LObject *p, const kStrategy)
void initSyzRules(kStrategy strat)
int posInLSig(const LSet set, const int length, LObject *p, const kStrategy)
void initSbaBuchMora(ideal F, ideal Q, kStrategy strat)
BOOLEAN kCheckSpolyCreation(LObject *L, kStrategy strat, poly &m1, poly &m2)
void cleanT(kStrategy strat)
static void enterOnePairLift(int i, poly p, int ecart, int isFromQ, kStrategy strat, int atR=-1)
int posInT110(const TSet set, const int length, LObject &p)
BOOLEAN kTest_S(kStrategy strat)
int posInSyz(const kStrategy strat, poly sig)
void replaceInLAndSAndT(LObject &p, int tj, kStrategy strat)
void reorderS(int *suc, kStrategy strat)
void enterExtendedSpoly(poly h, kStrategy strat)
int posInL15Ring(const LSet set, const int length, LObject *p, const kStrategy)
BOOLEAN kTest_T(TObject *T, kStrategy strat, int i, char TN)
void kMergeBintoLSba(kStrategy strat)
void deleteHC(LObject *L, kStrategy strat, BOOLEAN fromNext)
void updateResult(ideal r, ideal Q, kStrategy strat)
void superenterpairs(poly h, int k, int ecart, int pos, kStrategy strat, int atR)
static BOOLEAN sugarDivisibleBy(int ecart1, int ecart2)
int posInT19(const TSet set, const int length, LObject &p)
poly redtailBba_NF(poly p, kStrategy strat)
void exitSba(kStrategy strat)
int posInT15Ring(const TSet set, const int length, LObject &p)
int posInT17Ring(const TSet set, const int length, LObject &p)
static BOOLEAN enterOneStrongPoly(int i, poly p, int, int, kStrategy strat, int atR, bool enterTstrong)
BOOLEAN enterOnePairShift(poly q, poly p, int ecart, int isFromQ, kStrategy strat, int atR, int ecartq, int qisFromQ, int shiftcount, int ifromS)
void kDebugPrint(kStrategy strat)
Output some debug info about a given strategy.
void deleteInL(LSet set, int *length, int j, kStrategy strat)
void kStratInitChangeTailRing(kStrategy strat)
void chainCritPart(poly p, int ecart, kStrategy strat)
void enterSMora(LObject &p, int atS, kStrategy strat, int atR=-1)
void initBuchMoraCrit(kStrategy strat)
void cleanTSbaRing(kStrategy strat)
int posInT17_cRing(const TSet set, const int length, LObject &p)
static int pDivComp(poly p, poly q)
void completeReduce(kStrategy strat, BOOLEAN withT)
int posInL17_c(const LSet set, const int length, LObject *p, const kStrategy)
void initBuchMoraPosRing(kStrategy strat)
int kFindInTShift(poly p, TSet T, int tlength)
void postReduceByMonSig(LObject *h, kStrategy strat)
static BOOLEAN enterOneStrongPolyShift(poly q, poly p, int, int, kStrategy strat, int atR, int, int, int shiftcount, int ifromS)
void messageSets(kStrategy strat)
void deleteInS(int i, kStrategy strat)
static poly redBba1(poly h, int maxIndex, kStrategy strat)
int posInT_FDegpLength(const TSet set, const int length, LObject &p)
int posInLSigRing(const LSet set, const int length, LObject *p, const kStrategy)
BOOLEAN isInPairsetL(int length, poly p1, poly p2, int *k, kStrategy strat)
BOOLEAN sbaCheckGcdPair(LObject *h, kStrategy strat)
int posInLF5CRing(const LSet set, int start, const int length, LObject *p, const kStrategy)
poly preIntegerCheck(const ideal Forig, const ideal Q)
used for GB over ZZ: look for constant and monomial elements in the ideal background: any known const...
static unsigned long * initsevS(const int maxnr)
void enterpairsSpecial(poly h, int k, int ecart, int pos, kStrategy strat, int atR=-1)
void chainCritNormal(poly p, int ecart, kStrategy strat)
void initEcartBBA(TObject *h)
VAR denominator_list DENOMINATOR_LIST
static void enterOnePairSigRing(int i, poly p, poly pSig, int, int ecart, int isFromQ, kStrategy strat, int atR=-1)
void enterSBbaShift(LObject &p, int atS, kStrategy strat, int atR)
int posInL11(const LSet set, const int length, LObject *p, const kStrategy)
poly redtailBba_Ring(LObject *L, int end_pos, kStrategy strat)
int posInLF5C(const LSet, const int, LObject *, const kStrategy strat)
void initEcartPairBba(LObject *Lp, poly, poly, int, int)
void messageStat(int hilbcount, kStrategy strat)
static BOOLEAN enterOneStrongPolySig(int i, poly p, poly sig, int, int, kStrategy strat, int atR)
void chainCritRing(poly p, int, kStrategy strat)
void initSSpecialSba(ideal F, ideal Q, ideal P, kStrategy strat)
void initSL(ideal F, ideal Q, kStrategy strat)
int posInIdealMonFirst(const ideal F, const poly p, int start, int end)
void finalReduceByMon(kStrategy strat)
used for GB over ZZ: final reduction by constant elements background: any known constant element of i...
void enterSBba(LObject &p, int atS, kStrategy strat, int atR)
void initSbaCrit(kStrategy strat)
BOOLEAN newHEdge(kStrategy strat)
void cancelunit(LObject *L, BOOLEAN inNF)
denominator_list_s * denominator_list
static int kFindInL1(const poly p, const kStrategy strat)
static LSet initL(int nr=setmaxL)
static void kDeleteLcm(LObject *P)
#define ALLOW_PROD_CRIT(A)
#define REDTAIL_CANONICALIZE
static bool rIsSCA(const ring r)
poly nc_CreateShortSpoly(poly p1, poly p2, const ring r)
static nc_type & ncRingType(nc_struct *p)
poly nc_p_Bracket_qq(poly p, const poly q, const ring r)
returns [p,q], destroys p
int lcm(unsigned long *l, unsigned long *a, unsigned long *b, unsigned long p, int dega, int degb)
int dReportError(const char *fmt,...)
#define pFalseReturn(cond)
static number & pGetCoeff(poly p)
return an alias to the leading coefficient of p assumes that p != NULL NOTE: not copy
#define __p_GetComp(p, r)
#define rRing_has_Comp(r)
STATIC_VAR gmp_float * diff
#define omFreeSize(addr, size)
#define omCheckBinAddrSize(addr, size)
#define omReallocSize(addr, o_size, size)
#define omRealloc0Size(addr, o_size, size)
#define omSizeWOfBin(bin_ptr)
#define TEST_OPT_INTSTRATEGY
#define TEST_OPT_INFREDTAIL
#define TEST_OPT_SUGARCRIT
#define TEST_OPT_DEGBOUND
#define TEST_OPT_NOT_SUGAR
#define TEST_OPT_CANCELUNIT
#define TEST_OPT_CONTENTSB
pShallowCopyDeleteProc pGetShallowCopyDeleteProc(ring, ring)
static int index(p_Length length, p_Ord ord)
poly p_GetMaxExpP(poly p, const ring r)
return monomial r such that GetExp(r,i) is maximum of all monomials in p; coeff == 0,...
void p_Cleardenom_n(poly ph, const ring r, number &c)
long pLDegb(poly p, int *l, const ring r)
long pLDeg1_Totaldegree(poly p, int *l, const ring r)
long p_WFirstTotalDegree(poly p, const ring r)
long pLDeg1_WFirstTotalDegree(poly p, int *l, const ring r)
void pRestoreDegProcs(ring r, pFDegProc old_FDeg, pLDegProc old_lDeg)
long pLDeg1c_WFirstTotalDegree(poly p, int *l, const ring r)
static BOOLEAN p_ExpVectorEqual(poly p1, poly p2, const ring r1, const ring r2)
long pLDeg1c_Deg(poly p, int *l, const ring r)
long pLDeg1(poly p, int *l, const ring r)
unsigned long p_GetShortExpVector(const poly p, const ring r)
long pLDeg1_Deg(poly p, int *l, const ring r)
long p_WTotaldegree(poly p, const ring r)
BOOLEAN p_OneComp(poly p, const ring r)
return TRUE if all monoms have the same component
poly p_Cleardenom(poly p, const ring r)
long pLDeg1c(poly p, int *l, const ring r)
long pLDeg1c_Totaldegree(poly p, int *l, const ring r)
long pLDeg0c(poly p, int *l, const ring r)
unsigned long p_GetMaxExpL(poly p, const ring r, unsigned long l_max)
return the maximal exponent of p in form of the maximal long var
long pLDeg0(poly p, int *l, const ring r)
poly p_Sub(poly p1, poly p2, const ring r)
void pEnlargeSet(poly **p, int l, int increment)
long p_Deg(poly a, const ring r)
void p_Lcm(const poly a, const poly b, poly m, const ring r)
static poly p_Neg(poly p, const ring r)
static int pLength(poly a)
static void p_ExpVectorSum(poly pr, poly p1, poly p2, const ring r)
static poly p_Add_q(poly p, poly q, const ring r)
static void p_LmDelete(poly p, const ring r)
static void p_ExpVectorAdd(poly p1, poly p2, const ring r)
BOOLEAN p_CheckIsFromRing(poly p, ring r)
static BOOLEAN _p_LmDivisibleByPart(poly a, const ring r_a, poly b, const ring r_b, const int start, const int end)
static long p_FDeg(const poly p, const ring r)
static unsigned long p_GetMaxExp(const unsigned long l, const ring r)
static void p_ExpVectorCopy(poly d_p, poly s_p, const ring r)
static void p_LmDelete0(poly p, const ring r)
static int p_Cmp(poly p1, poly p2, ring r)
#define __pp_Mult_nn(p, n, r)
static poly pp_mm_Mult(poly p, poly m, const ring r)
static poly pp_Mult_mm(poly p, poly m, const ring r)
static int p_LtCmpNoAbs(poly p, poly q, const ring r)
static void p_SetCompP(poly p, int i, ring r)
#define pp_Test(p, lmRing, tailRing)
static unsigned long p_SetComp(poly p, unsigned long c, ring r)
static void p_Setm(poly p, const ring r)
static number p_SetCoeff(poly p, number n, ring r)
static int p_LmCmp(poly p, poly q, const ring r)
static BOOLEAN p_LmShortDivisibleBy(poly a, unsigned long sev_a, poly b, unsigned long not_sev_b, const ring r)
static long p_GetExp(const poly p, const unsigned long iBitmask, const int VarOffset)
get a single variable exponent @Note: the integer VarOffset encodes:
BOOLEAN p_LmCheckIsFromRing(poly p, ring r)
static BOOLEAN p_LmDivisibleBy(poly a, poly b, const ring r)
static poly p_ShallowCopyDelete(poly p, const ring r, omBin bin)
static void p_Delete(poly *p, const ring r)
BOOLEAN p_CheckPolyRing(poly p, ring r)
static poly p_LmFreeAndNext(poly p, ring)
static poly p_Mult_mm(poly p, poly m, const ring r)
static void p_LmFree(poly p, ring)
static poly p_Copy(poly p, const ring r)
returns a copy of p
static long p_Totaldegree(poly p, const ring r)
static BOOLEAN p_LmExpVectorAddIsOk(const poly p1, const poly p2, const ring r)
void p_wrp(poly p, ring lmRing, ring tailRing)
void rChangeCurrRing(ring r)
VAR ring currRing
Widely used global variable which specifies the current polynomial ring for Singular interpreter and ...
Compatibility layer for legacy polynomial operations (over currRing)
#define pLtCmpOrdSgnDiffM(p, q)
#define pHead(p)
returns newly allocated copy of Lm(p), coef is copied, next=NULL, p might be NULL
#define pLmIsConstantComp(p)
like above, except that p must be != NULL
#define pIsConstant(p)
like above, except that Comp must be 0
#define pHasNotCF(p1, p2)
#define pLtCmpOrdSgnDiffP(p, q)
#define pGetComp(p)
Component.
#define pSetCoeff(p, n)
deletes old coeff before setting the new one
#define pLmShortDivisibleBy(a, sev_a, b, not_sev_b)
Divisibility tests based on Short Exponent vectors sev_a == pGetShortExpVector(a) not_sev_b == ~ pGet...
#define pCmp(p1, p2)
pCmp: args may be NULL returns: (p2==NULL ? 1 : (p1 == NULL ? -1 : p_LmCmp(p1, p2)))
#define pLmInit(p)
like pInit, except that expvector is initialized to that of p, p must be != NULL
#define pLmDelete(p)
assume p != NULL, deletes Lm(p)->coef and Lm(p)
#define pGetShortExpVector(a)
returns the "Short Exponent Vector" – used to speed up divisibility tests (see polys-impl....
#define pLmDivisibleBy(a, b)
like pDivisibleBy, except that it is assumed that a!=NULL, b!=NULL
static void pLmFree(poly p)
frees the space of the monomial m, assumes m != NULL coef is not freed, m is not advanced
#define pGetExp(p, i)
Exponent.
#define pSetmComp(p)
TODO:
#define pHasNotCFRing(p1, p2)
#define pInit()
allocates a new monomial and initializes everything to 0
#define pEqualPolys(p1, p2)
#define pDivisibleBy(a, b)
returns TRUE, if leading monom of a divides leading monom of b i.e., if there exists a expvector c > ...
#define pLmCmp(p, q)
returns 0|1|-1 if p=q|p>q|p<q w.r.t monomial ordering
#define pLtCmpOrdSgnEqP(p, q)
#define pCopy(p)
return a copy of the poly
poly prMapR(poly src, nMapFunc nMap, ring src_r, ring dest_r)
void pLcmRat(poly a, poly b, poly m, int rat_shift)
void PrintS(const char *s)
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...
BOOLEAN nc_rComplete(const ring src, ring dest, bool bSetupQuotient)
void rKillModifiedRing(ring r)
ring rAssure_c_dp(const ring r)
ring rModifyRing(ring r, BOOLEAN omit_degree, BOOLEAN try_omit_comp, unsigned long exp_limit)
ring rCopy0(const ring r, BOOLEAN copy_qideal, BOOLEAN copy_ordering)
void rDebugPrint(const ring r)
void rDelete(ring r)
unconditionally deletes fields in r
static BOOLEAN rIsPluralRing(const ring r)
we must always have this test!
static int rBlocks(const ring r)
static int rGetCurrSyzLimit(const ring r)
static BOOLEAN rField_is_Domain(const ring r)
static BOOLEAN rIsRatGRing(const ring r)
static BOOLEAN rIsLPRing(const ring r)
BOOLEAN rHasMixedOrdering(const ring r)
static BOOLEAN rIsSyzIndexRing(const ring r)
poly(* pShallowCopyDeleteProc)(poly s_p, ring source_r, ring dest_r, omBin dest_bin)
returns a poly from dest_r which is a ShallowCopy of s_p from source_r assumes that source_r->N == de...
static short rVar(const ring r)
#define rVar(r) (r->N)
BOOLEAN rHasGlobalOrdering(const ring r)
BOOLEAN rHasLocalOrMixedOrdering(const ring r)
#define rField_is_Ring(R)
int p_mLPmaxPossibleShift(poly p, const ring r)
#define pLPCopyAndShiftLM(p, sh)
BOOLEAN _p_LPLmDivisibleByNoComp(poly a, poly b, const ring r)
int p_mFirstVblock(poly p, const ring ri)
void k_SplitFrame(poly &m1, poly &m2, int at, const ring r)
void p_mLPshift(poly m, int sh, const ring ri)
#define pLPDivisibleBy(a, b)
#define pLPLmDivisibleBy(a, b)
ideal idInit(int idsize, int rank)
initialise an ideal / module
void id_Delete(ideal *h, ring r)
deletes an ideal/module/matrix
long id_RankFreeModule(ideal s, ring lmRing, ring tailRing)
return the maximal component number found in any polynomial in s
ideal id_MaxIdeal(const ring r)
initialise the maximal ideal (at 0)
void idSkipZeroes(ideal ide)
gives an ideal/module the minimal possible size
static int idElem(const ideal F)
number of non-zero polys in F
static poly normalize(poly next_p, ideal add_generators, syStrategy syzstr, int *g_l, int *p_l, int crit_comp)
long totaldegreeWecart(poly p, ring r)
long maxdegreeWecart(poly p, int *l, ring r)
EXTERN_VAR short * ecartWeights
#define omGetStickyBinOfBin(B)
#define omMergeStickyBinIntoBin(A, B)