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();
535 return (
unsigned long*)
omAlloc0(
maxnr*
sizeof(
unsigned long));
573 for (
j=0;
j<=strat->
tl;
j++)
577 if (strat->
T[
j].max_exp !=
NULL)
587 if (strat->
T[
j].t_p !=
NULL)
595 if (
currRing->isLPring && strat->
T[
j].shift > 0)
604 if (
p == strat->
S[
i])
606 if (strat->
T[
j].t_p !=
NULL)
608 if (p_shallow_copy_delete!=
NULL)
632 for (
j=0;
j<=strat->
tl;
j++)
636 if (strat->
T[
j].max_exp !=
NULL)
646 if (strat->
T[
j].t_p !=
NULL)
658 if (
p == strat->
S[
i])
660 if (strat->
T[
j].t_p !=
NULL)
707 if ((*
k) < 0)
return FALSE;
708 if (((p1 == (*p).p1) && (p2 == (*p).p2))
709 || ((p1 == (*p).p2) && (p2 == (*p).p1)))
722 if (
T[
i].
p ==
p)
return i;
733 if (
i >= 0)
return i;
736 while (strat !=
NULL);
761 if (
i >= 0)
return i;
764 while (strat !=
NULL);
778#define kFalseReturn(x) do { if (!x) return FALSE;} while (0)
784 for (
i=1;
i<=tailRing->N;
i++)
787 return "Lm[i] different";
790 return "Lm[0] different";
792 return "Lm.next different";
794 return "Lm.coeff different";
801 ring tailRing =
T->tailRing;
826 if (
T->t_p ==
NULL &&
i > 0)
843 if (
T->t_p !=
NULL &&
i >= 0 &&
TN ==
'T')
847 if (
T->max_exp !=
NULL)
848 return dReportError(
"%c[%d].max_exp is not NULL as it should be",
TN,
i);
852 if (
T->max_exp ==
NULL)
876 if (
T->p ==
NULL &&
i > 0)
892 if ((
i >= 0) && (
T->pLength != 0)
897 return dReportError(
"%c[%d] pLength error: has %d, specified to have %d",
902 if (
i >= 0 && (
TN ==
'T' ||
TN ==
'L'))
905 if (strat->
homog && (
T->FDeg !=
T->pFDeg()))
909 return dReportError(
"%c[%d] FDeg error: has %d, specified to have %d",
910 TN,
i ,
T->pFDeg(), d);
915 if (
i >= 0 &&
TN ==
'T')
952 if (L->bucket !=
NULL)
955 r_assume(L->bucket->bucket_ring == L->tailRing);
973 return dReportError(
"L[%d] wrong sev: has %lo, specified to have %lo",
1016 -1, strat->
T, strat->
tl));
1019 if (strat->
T !=
NULL)
1021 for (
i=0;
i<=strat->
tl;
i++)
1030 if (strat->
L !=
NULL)
1032 for (
i=0;
i<=strat->
Ll;
i++)
1035 strat->
L[
i].Next() != strat->
tail,
i,
1036 strat->
T, strat->
tl));
1047 if (strat->
S !=
NULL)
1057 for (
i=0;
i<=strat->
sl;
i++)
1059 if (strat->
S[
i] !=
NULL &&
1062 return dReportError(
"S[%d] wrong sev: has %o, specified to have %o",
1078 for (
i=0;
i<=strat->
tl;
i++)
1080 if (strat->
T[
i].i_r < 0 || strat->
T[
i].i_r > strat->
tl)
1081 return dReportError(
"strat->T[%d].i_r == %d out of bounds",
i,
1083 if (strat->
R[strat->
T[
i].i_r] != &(strat->
T[
i]))
1087 if ((strat->
S !=
NULL)&&(strat->
tl>=0))
1089 for (
i=0;
i<=strat->
sl;
i++)
1094 if (strat->
S_2_R[
i] != strat->
T[
j].i_r)
1100 #ifdef HAVE_SHIFTBBA
1105 for (
i=0;
i<=strat->
Ll;
i++)
1107 if (strat->
L[
i].p1 !=
NULL && strat->
L[
i].p2)
1109 if (strat->
L[
i].i_r1 < 0 ||
1110 strat->
L[
i].i_r1 > strat->
tl ||
1111 strat->
L[
i].T_1(strat)->p != strat->
L[
i].p1)
1113 if (strat->
L[
i].i_r2 < 0 ||
1114 strat->
L[
i].i_r2 > strat->
tl ||
1115 strat->
L[
i].T_2(strat)->p != strat->
L[
i].p2)
1120 if (strat->
L[
i].i_r1 != -1)
1122 if (strat->
L[
i].i_r2 != -1)
1125 if (strat->
L[
i].i_r != -1)
1139#ifdef ENTER_USE_MEMMOVE
1140 memmove(&(strat->
S[
i]), &(strat->
S[
i+1]), (strat->
sl -
i)*
sizeof(poly));
1146 for (
j=
i;
j<strat->
sl;
j++)
1148 strat->
S[
j] = strat->
S[
j+1];
1156#ifdef ENTER_USE_MEMMOVE
1164#ifdef ENTER_USE_MEMMOVE
1172#ifdef ENTER_USE_MEMMOVE
1175 for (
j=
i;
j<strat->
sl;
j++)
1189 && (strat->
P.p1!=
NULL))
1195 for (
int i=lv;
i>0;
i--)
1219 if (set[
j].sig!=
NULL)
1247 #ifdef HAVE_SHIFTBBA
1257#ifdef ENTER_USE_MEMMOVE
1261 for (
i=
j;
i < (*length);
i++)
1283#ifdef ENTER_USE_MEMMOVE
1300 h->FDeg =
h->pFDeg();
1301 h->ecart =
h->pLDeg() -
h->FDeg;
1308 h->FDeg =
h->pFDeg();
1315 Lp->FDeg =
Lp->pFDeg();
1322 Lp->FDeg =
Lp->pFDeg();
1368 h.ecart=0;
h.length=0;
1392 for(
j = strat->
Bl;
j>=0;
j--)
1513 h.i_r1 = -1;
h.i_r2 = -1;
1534 else strat->
P.sev=0L;
1548 poly m1, m2,
gcd,
si;
1577 for (
int j = 0;
j < strat->
sl;
j++)
1583 && !(strat->
sevS[
j] & ~sev)
1626 PrintS(
"\n--- create strong gcd poly: ");
1629 Print(
"\n strat->S[%d]: ",
i);
1652 h.i_r1 = -1;
h.i_r2 = -1;
1658 h.p1 =
p;
h.p2 = strat->
S[
i];
1678 if(
h.IsNull())
return FALSE;
1695 if(strat->
sl < 0)
return FALSE;
1697 for(
i=0;
i<strat->
sl;
i++)
1733 h->i_r1 = -1;
h->i_r2 = -1;
1755 poly m1, m2,
gcd,
si;
1803 PrintS(
"\n--- create strong gcd poly: ");
1806 Print(
"\n strat->S[%d]: ",
i);
1858 h.i_r1 = -1;
h.i_r2 = -1;
1876 strat->
enterS(strat->
P,strat->
sl+1,strat, strat->
tl+1);
1903 strat->
enterS(strat->
P,strat->
sl+1,strat, strat->
tl+1);
1916 strat->
enterS(strat->
P,strat->
sl+1,strat, strat->
tl+1);
1920 h.p1 =
p;
h.p2 = strat->
S[
i];
1958#ifndef HAVE_RATGRING
1960#elif defined(HAVE_RATGRING)
1977 if((!((strat->
ecartS[
i]>0)&&(ecart>0)))
2070 for(
j = strat->
Bl;
j>=0;
j--)
2169 Lp.p1 = strat->
S[
i];
2248 if((!((strat->
ecartS[
i]>0)&&(ecart>0)))
2344 for(
j = strat->
Bl;
j>=0;
j--)
2400 Lp.p1 = strat->
S[
i];
2458#ifndef HAVE_RATGRING
2460#elif defined(HAVE_RATGRING)
2490 PrintS(
"----------------\n");
2493 PrintS(
"----------------\n");
2499 Print(
"IN PAIR GENERATION - COMPARING SIGS: %d\n",
sigCmp);
2631 Lp.checked = strat->
sl+1;
2650 PrintS(
"SIGNATURE OF PAIR: ");
2654 Lp.p1 = strat->
S[
i];
2733#ifndef HAVE_RATGRING
2735#elif defined(HAVE_RATGRING)
2778 Print(
"----------------\n");
2781 Print(
"----------------\n");
2806 Print(
"IN PAIR GENERATION - COMPARING SIGS: %d\n",
sigCmp);
2838 strat->
enterS(strat->
P,strat->
sl+1,strat, strat->
tl+1);
3010 Lp.checked = strat->
sl+1;
3029 PrintS(
"SIGNATURE OF PAIR: ");
3033 Lp.p1 = strat->
S[
i];
3080 strat->
enterS(strat->
P,strat->
sl+1,strat, strat->
tl+1);
3135 Lp.p1 = strat->
S[
i];
3168 int j=strat->
Ll+strat->
Bl+1;
3176 for (
i=strat->
Bl;
i>=0;
i--)
3178 j = strat->
posInL(strat->
L,
j,&(strat->
B[
i]),strat);
3189 int j=strat->
Ll+strat->
Bl+1;
3197 for (
i=strat->
Bl;
i>=0;
i--)
3224 for (
j=0;
j<=strat->
sl;
j++)
3228 for (
i=strat->
Bl;
i>=0;
i--)
3243 for (
j=0;
j<=strat->
sl;
j++)
3247 for (
i=strat->
Bl;
i>=0;
i--)
3270 for (
j=strat->
Ll;
j>=0;
j--)
3276 if (strat->
L[
j].p == strat->
tail)
3322 for (
j=strat->
Ll;
j>=0;
j--)
3342 for(
i=
j-1;
i>=0;
i--)
3361 for (
j=strat->
Ll;
j>=0;
j--)
3363 #ifdef HAVE_SHIFTBBA
3364 if ((strat->
L[
j].p1!=
NULL) &&
3397 if (strat->
L[0].p2 == strat->
tail) strat->
L[0].p2 =
p;
3400 if (strat->
L[
j].p2 ==
p)
3406 if ((strat->
L[
i].p2 ==
p) &&
pLmEqual(strat->
L[
j].lcm,strat->
L[
i].lcm))
3420 strat->
L[
i].p2 = strat->
tail;
3437 else if (strat->
L[
j].p2 == strat->
tail)
3476 if (strat->
L[0].p2 == strat->
tail) strat->
L[0].p2 =
p;
3479 if (strat->
L[
j].p2 ==
p)
3485 if ((strat->
L[
i].p2 ==
p) &&
pLmEqual(strat->
L[
j].lcm,strat->
L[
i].lcm))
3499 strat->
L[
i].p2 = strat->
tail;
3516 else if (strat->
L[
j].p2 == strat->
tail)
3537 for (
j=0;
j<=strat->
sl;
j++)
3541 for (
i=strat->
Bl;
i>=0;
i--)
3549 Print(
"chain-crit-part: S[%d]=",
j);
3551 Print(
" divide B[%d].lcm=",
i);
3573 for (
j=strat->
Ll;
j>=0;
j--)
3579 if (strat->
L[
j].p == strat->
tail)
3583 PrintS(
"chain-crit-part: pCompareChainPart p=");
3585 Print(
" delete L[%d]",
j);
3614 Print(
"chain-crit-part: sugar B[%d].lcm=",
j);
3616 Print(
" delete B[%d]",
i);
3627 Print(
"chain-crit-part: sugar B[%d].lcm=",
i);
3629 Print(
" delete B[%d]",
j);
3649 for (
j=strat->
Ll;
j>=0;
j--)
3657 PrintS(
"chain-crit-part: sugar:pCompareChainPart p=");
3659 Print(
" delete L[%d]",
j);
3677 for(
i=
j-1;
i>=0;
i--)
3683 Print(
"chain-crit-part: equal lcm B[%d].lcm=",
j);
3685 Print(
" delete B[%d]\n",
i);
3702 for (
j=strat->
Ll;
j>=0;
j--)
3710 PrintS(
"chain-crit-part: pCompareChainPart p=");
3712 Print(
" delete L[%d]",
j);
3741 if (strat->
L[0].p2 == strat->
tail) strat->
L[0].p2 =
p;
3744 if (strat->
L[
j].p2 ==
p)
3750 if ((strat->
L[
i].p2 ==
p) &&
pLmEqual(strat->
L[
j].lcm,strat->
L[
i].lcm))
3767 strat->
L[
i].p2 = strat->
tail;
3774 PrintS(
"chain-crit-part: divisible_by p=");
3776 Print(
" delete L[%d]",
l);
3787 PrintS(
"chain-crit-part: divisible_by(2) p=");
3789 Print(
" delete L[%d]",
i);
3800 else if (strat->
L[
j].p2 == strat->
tail)
3828 for (
j=0;
j<=
k;
j++)
3841 for (
j=0;
j<=
k;
j++)
3850 for (
j=0;
j<=
k;
j++)
3863 #ifdef HAVE_RATGRING
3893 for (
j=0;
j<=
k;
j++)
3906 for (
j=0;
j<=
k;
j++)
3915 for (
j=0;
j<=
k;
j++)
4013 for (
j=0;
j<=strat->
sl;
j++)
4017 for (
i=strat->
Bl;
i>=0;
i--)
4024 PrintS(
"--- chain criterion func chainCritRing type 1\n");
4027 PrintS(
" strat->B[i].lcm:");
4032 wrp(strat->
B[
i].lcm);
4047 for (
j=strat->
Ll;
j>=0;
j--)
4060 PrintS(
"--- chain criterion func chainCritRing type 2\n");
4061 PrintS(
"strat->L[j].p:");
4092 if (strat->
L[0].p2 == strat->
tail) strat->
L[0].p2 =
p;
4095 if (strat->
L[
j].p2 ==
p)
4110 PrintS(
"--- chain criterion func chainCritRing type 3\n");
4111 PrintS(
"strat->L[j].lcm:");
4112 wrp(strat->
L[
j].lcm);
4113 PrintS(
" strat->L[i].lcm:");
4114 wrp(strat->
L[
i].lcm);
4128 strat->
L[
i].p2 = strat->
tail;
4145 else if (strat->
L[
j].p2 == strat->
tail)
4169 for (
j=0;
j<=
k;
j++)
4181 for (
j=0;
j<=
k;
j++)
4189 for (
j=0;
j<=
k;
j++)
4201 #ifdef HAVE_RATGRING
4271 PrintS(
"--- create zero spoly: ");
4355 PrintS(
"--- create zero spoly: ");
4392 strat->
enterS(strat->
P,strat->
sl+1,strat, strat->
tl+1);
4441 if ( (!strat->
fromT)
4498 if ( (!strat->
fromT)
4523 if ( (!strat->
fromT)
4548 for (
j=0;
j<=
k;
j++)
4562 for (
j=0;
j<=
k;
j++)
4625 for (;
i<=strat->
sl;
i++)
4633 sev = strat->
sevS[
i];
4638 strat->
S[
j] = strat->
S[
j-1];
4785 || ((op == o) && (
pLtCmp(set[mon],
p) == -1)))
4796 || ((op == o) && (
pLtCmp(set[
an],
p) == -1)))
4803 || ((op == o) && (
pLtCmp(set[
i],
p) == -1)))
4829 || ((op == o) && (
pLtCmp(set[
an],
p) == -1)))
4836 || ((op == o) && (
pLtCmp(set[
i],
p) == -1)))
4850 if (end<0)
return 0;
4857 for(
i=start;
i<end;
i++)
4871 || ((op == o) && (
pLtCmp(set[
an],
p) == -1)))
4878 || ((op == o) && (
pLtCmp(set[
i],
p) == -1)))
4903 if (
length==-1)
return 0;
4932 if (
length==-1)
return 0;
4960 if (
length==-1)
return 0;
4962 int o =
p.GetpFDeg();
4963 int op = set[
length].GetpFDeg();
4978 op= set[
an].GetpFDeg();
4985 op = set[
i].GetpFDeg();
4996 if (
length==-1)
return 0;
4998 int o =
p.GetpFDeg();
4999 int op = set[
length].GetpFDeg();
5013 op= set[
an].GetpFDeg();
5020 op = set[
i].GetpFDeg();
5036 if (
length==-1)
return 0;
5039 int o =
p.GetpFDeg();
5040 int op = set[
length].GetpFDeg();
5056 op = set[
an].GetpFDeg();
5059 || (( op == o) && (set[
an].length ==
p.
length)
5065 op = set[
i].GetpFDeg();
5068 || (( op == o) && (set[
i].length ==
p.
length)
5078 if (
length==-1)
return 0;
5081 int o =
p.GetpFDeg();
5082 int op = set[
length].GetpFDeg();
5097 op = set[
an].GetpFDeg();
5100 || (( op == o) && (set[
an].length ==
p.
length)
5106 op = set[
i].GetpFDeg();
5109 || (( op == o) && (set[
i].length ==
p.
length)
5124 if (
length==-1)
return 0;
5126 int o =
p.GetpFDeg();
5128 if (set[
length].GetpFDeg() <= o)
5138 if (set[
an].GetpFDeg() > o)
5143 if (set[
i].GetpFDeg() > o)
5153 if (
length==-1)
return 0;
5154 int ol =
p.GetpLength();
5168 int oo=set[
an].ecart;
5175 int oo=set[
i].ecart;
5209 if (
length==-1)
return 0;
5211 int o =
p.GetpFDeg() +
p.ecart;
5227 op = set[
an].GetpFDeg()+set[
an].ecart;
5234 op = set[
i].GetpFDeg()+set[
i].ecart;
5245 if (
length==-1)
return 0;
5247 int o =
p.GetpFDeg() +
p.ecart;
5262 op = set[
an].GetpFDeg()+set[
an].ecart;
5269 op = set[
i].GetpFDeg()+set[
i].ecart;
5305 if (
length==-1)
return 0;
5307 int o =
p.GetpFDeg() +
p.ecart;
5312 || (( op == o) && (set[
length].ecart >
p.ecart))
5313 || (( op == o) && (set[
length].ecart==
p.ecart)
5324 op = set[
an].GetpFDeg()+set[
an].ecart;
5326 || (( op == o) && (set[
an].ecart <
p.ecart))
5327 || (( op == o) && (set[
an].ecart==
p.ecart)
5333 op = set[
i].GetpFDeg()+set[
i].ecart;
5335 || (( op == o) && (set[
i].ecart <
p.ecart))
5336 || (( op == o) && (set[
i].ecart ==
p.ecart)
5346 if (
length==-1)
return 0;
5348 int o =
p.GetpFDeg() +
p.ecart;
5352 || (( op == o) && (set[
length].ecart >
p.ecart))
5353 || (( op == o) && (set[
length].ecart==
p.ecart)
5364 op = set[
an].GetpFDeg()+set[
an].ecart;
5366 || (( op == o) && (set[
an].ecart <
p.ecart))
5367 || (( op == o) && (set[
an].ecart==
p.ecart)
5373 op = set[
i].GetpFDeg()+set[
i].ecart;
5375 || (( op == o) && (set[
i].ecart <
p.ecart))
5376 || (( op == o) && (set[
i].ecart ==
p.ecart)
5391 if (
length==-1)
return 0;
5395 int o =
p.GetpFDeg() +
p.ecart;
5405 || ((op == o) && (set[
length].ecart >
p.ecart))
5406 || ((op == o) && (set[
length].ecart==
p.ecart)
5422 int op = set[
an].GetpFDeg()+set[
an].ecart;
5424 || ((op == o) && (set[
an].ecart <
p.ecart))
5425 || ((op == o) && (set[
an].ecart==
p.ecart)
5436 int op = set[
i].GetpFDeg()+set[
i].ecart;
5438 || ((op == o) && (set[
i].ecart <
p.ecart))
5439 || ((op == o) && (set[
i].ecart ==
p.ecart)
5452 if (
length==-1)
return 0;
5456 int o =
p.GetpFDeg() +
p.ecart;
5465 || ((op == o) && (set[
length].ecart >
p.ecart))
5466 || ((op == o) && (set[
length].ecart==
p.ecart)
5482 int op = set[
an].GetpFDeg()+set[
an].ecart;
5484 || ((op == o) && (set[
an].ecart <
p.ecart))
5485 || ((op == o) && (set[
an].ecart==
p.ecart)
5496 int op = set[
i].GetpFDeg()+set[
i].ecart;
5498 || ((op == o) && (set[
i].ecart <
p.ecart))
5499 || ((op == o) && (set[
i].ecart ==
p.ecart)
5518 if (
length==-1)
return 0;
5521 int op=
p.GetpFDeg();
5523 if (set[
length].ecart < o)
5525 if (set[
length].ecart == o)
5539 if (set[
an].ecart > o)
5541 if (set[
an].ecart == o)
5543 int oo=set[
an].GetpFDeg();
5551 if (set[
i].ecart > o)
5553 else if (set[
i].ecart == o)
5555 int oo=set[
i].GetpFDeg();
5577 int d=
p->GetpFDeg();
5578 int op=set[
length].GetpFDeg();
5593 op=set[
an].GetpFDeg();
5595 || ((op == d) && (
p->p1!=
NULL) && (set[
an].p1==
NULL))
5601 op=set[
i].GetpFDeg();
5603 || ((op==d) && (
p->p1!=
NULL) && (set[
i].p1==
NULL))
5724 if (set[
an].FDeg >
p->FDeg)
5728 if (set[
an].FDeg ==
p->FDeg)
5746 if (set[
i].FDeg >
p->FDeg)
5750 if (set[
i].FDeg ==
p->FDeg)
5765 if (strat->
syzl==0)
return 0;
5809 int o =
p->GetpFDeg();
5810 int op = set[
length].GetpFDeg();
5823 op = set[
an].GetpFDeg();
5830 op = set[
i].GetpFDeg();
5851 int o =
p->GetpFDeg();
5852 int op = set[
length].GetpFDeg();
5864 op = set[
an].GetpFDeg();
5871 op = set[
i].GetpFDeg();
5885 int o =
p->GetpFDeg();
5886 int op = set[
length].GetpFDeg();
5898 op = set[
an].GetpFDeg();
5905 op = set[
i].GetpFDeg();
5917 if (
length < 0)
return 0;
5927 if (set[
an].FDeg >
p->FDeg)
5931 if (set[
an].FDeg ==
p->FDeg)
5961 if (set[
i].FDeg >
p->FDeg)
5965 if (set[
i].FDeg ==
p->FDeg)
5973 if (set[
i].t_p!=
NULL)
6004 if (coeff == 0)
return -1;
6007 while (
tmp % 2 == 0)
6065 int o =
p->GetpFDeg();
6066 int op = set[
length].GetpFDeg();
6081 op = set[
an].GetpFDeg();
6084 || ((op == o) && (set[
an].length <=
p->
length)
6090 op = set[
i].GetpFDeg();
6093 || ((op == o) && (set[
i].length <=
p->
length)
6106 int o =
p->GetpFDeg();
6107 int op = set[
length].GetpFDeg();
6121 op = set[
an].GetpFDeg();
6124 || ((op == o) && (set[
an].length <=
p->
length)
6130 op = set[
i].GetpFDeg();
6133 || ((op == o) && (set[
i].length <=
p->
length)
6152 int o =
p->GetpFDeg();
6154 if (set[
length].GetpFDeg() > o)
6164 if (set[
an].GetpFDeg() >= o)
6169 if (set[
i].GetpFDeg() >= o)
6187 int o =
p->GetpFDeg() +
p->ecart;
6201 op = set[
an].GetpFDeg() + set[
an].ecart;
6208 op = set[
i].GetpFDeg() + set[
i].ecart;
6222 int o =
p->GetpFDeg() +
p->ecart;
6235 op = set[
an].GetpFDeg() + set[
an].ecart;
6242 op = set[
i].GetpFDeg() + set[
i].ecart;
6262 int o =
p->GetpFDeg() +
p->ecart;
6267 && (set[
length].ecart >
p->ecart))
6269 && (set[
length].ecart ==
p->ecart)
6279 if ((set[
an].GetpFDeg() + set[
an].ecart > o)
6280 || ((set[
an].GetpFDeg() + set[
an].ecart == o)
6281 && (set[
an].ecart >
p->ecart))
6282 || ((set[
an].GetpFDeg() + set[
an].ecart == o)
6283 && (set[
an].ecart ==
p->ecart)
6289 if ((set[
i].GetpFDeg() + set[
i].ecart > o)
6290 || ((set[
i].GetpFDeg() + set[
i].ecart == o)
6291 && (set[
i].ecart >
p->ecart))
6292 || ((set[
i].GetpFDeg() +set[
i].ecart == o)
6293 && (set[
i].ecart ==
p->ecart)
6306 int o =
p->GetpFDeg() +
p->ecart;
6310 && (set[
length].ecart >
p->ecart))
6312 && (set[
length].ecart ==
p->ecart)
6322 if ((set[
an].GetpFDeg() + set[
an].ecart > o)
6323 || ((set[
an].GetpFDeg() + set[
an].ecart == o)
6324 && (set[
an].ecart >
p->ecart))
6325 || ((set[
an].GetpFDeg() + set[
an].ecart == o)
6326 && (set[
an].ecart ==
p->ecart)
6332 if ((set[
i].GetpFDeg() + set[
i].ecart > o)
6333 || ((set[
i].GetpFDeg() + set[
i].ecart == o)
6334 && (set[
i].ecart >
p->ecart))
6335 || ((set[
i].GetpFDeg() +set[
i].ecart == o)
6336 && (set[
i].ecart ==
p->ecart)
6358 int o =
p->GetpFDeg() +
p->ecart;
6367 && (set[
length].ecart >
p->ecart))
6369 && (set[
length].ecart ==
p->ecart)
6384 if ((set[
an].GetpFDeg() + set[
an].ecart > o)
6385 || ((set[
an].GetpFDeg() + set[
an].ecart == o)
6386 && (set[
an].ecart >
p->ecart))
6387 || ((set[
an].GetpFDeg() + set[
an].ecart == o)
6388 && (set[
an].ecart ==
p->ecart)
6399 if ((set[
i].GetpFDeg() + set[
i].ecart > o)
6400 || ((set[
i].GetpFDeg() + set[
i].ecart == o)
6401 && (set[
i].ecart >
p->ecart))
6402 || ((set[
i].GetpFDeg() +set[
i].ecart == o)
6403 && (set[
i].ecart ==
p->ecart)
6422 int o =
p->GetpFDeg() +
p->ecart;
6430 && (set[
length].ecart >
p->ecart))
6432 && (set[
length].ecart ==
p->ecart)
6447 if ((set[
an].GetpFDeg() + set[
an].ecart > o)
6448 || ((set[
an].GetpFDeg() + set[
an].ecart == o)
6449 && (set[
an].ecart >
p->ecart))
6450 || ((set[
an].GetpFDeg() + set[
an].ecart == o)
6451 && (set[
an].ecart ==
p->ecart)
6462 if ((set[
i].GetpFDeg() + set[
i].ecart > o)
6463 || ((set[
i].GetpFDeg() + set[
i].ecart == o)
6464 && (set[
i].ecart >
p->ecart))
6465 || ((set[
i].GetpFDeg() +set[
i].ecart == o)
6466 && (set[
i].ecart ==
p->ecart)
6484 PrintS(
"syzygy criterion checks: ");
6487 for (
int k=0;
k<strat->
syzl;
k++)
6492 Print(
"checking with: %d / %d -- \n",
k,strat->
syzl);
6521 PrintS(
"--- syzygy criterion checks: ");
6546 Print(
"checking with: %d -- ",
k);
6571 PrintS(
"rewritten criterion checks: ");
6574 for(
int k = strat->
sl;
k>=start;
k--)
6578 PrintS(
"checking with: ");
6594 PrintS(
"ALL ELEMENTS OF S\n----------------------------------------\n");
6595 for(
int kk = 0;
kk<strat->
sl+1;
kk++)
6599 PrintS(
"------------------------------\n");
6629 for (
int ii=strat->
sl;
ii>start;
ii--)
6635 if (!(
pLmCmp(p1,p2) == 1))
6654 for (
int i=strat->
Bl;
i>-1;
i--)
6675 for (
int ii=strat->
sl;
ii>-1;
ii--)
6681 if (!(
pLmCmp(p1,p2) == 1))
6702 const unsigned long not_sev = ~L->sev;
6703 const unsigned long* sev = strat->
sevS;
6717 #if defined(PDEBUG) || defined(PDIV_DEBUG)
6736 #if defined(PDEBUG) || defined(PDIV_DEBUG)
6754 if (strat->
tl < 0 || strat->
S_2_R[
j] == -1)
6777 #if defined(PDEBUG) || defined(PDIV_DEBUG)
6791 assume(t !=
NULL && t->t_p !=
NULL && t->tailRing == r && t->p == strat->
S[
j]);
6808 #if defined(PDEBUG) || defined(PDIV_DEBUG)
6823 assume(t !=
NULL && t->t_p !=
NULL && t->tailRing == r && t->p == strat->
S[
j]);
6919 p =
h = L->GetLmTailRing();
6921 return L->GetLmCurrRing();
6956 Ln.SetShortExpVector();
6999 }
while (!
Ln.IsNull());
7024 return L->GetLmCurrRing();
7032 p =
h = L->GetLmTailRing();
7034 return L->GetLmCurrRing();
7041 Ln.pLength = L->GetpLength() - 1;
7065 Ln.SetShortExpVector();
7106 }
while (!
Ln.IsNull());
7139 return L->GetLmCurrRing();
7148 p =
h = L->GetLmTailRing();
7183 Ln.SetShortExpVector();
7217 }
while (!
Ln.IsNull());
7246 }
while (!
Ln.IsNull());
7277 p =
h = L->GetLmTailRing();
7279 return L->GetLmCurrRing();
7286 Ln.pLength = L->GetpLength() - 1;
7299 Ln.SetShortExpVector();
7311 poly
p_Ln=
Ln.GetLmCurrRing();
7325 }
while (!
Ln.IsNull());
7349 return L->GetLmCurrRing();
7383 p =
h = L->GetLmTailRing();
7385 return L->GetLmCurrRing();
7392 Ln.pLength = L->GetpLength() - 1;
7405 Ln.SetShortExpVector();
7417 poly
p_Ln=
Ln.GetLmCurrRing();
7434 }
while (!
Ln.IsNull());
7459 return L->GetLmCurrRing();
7494 if (strat->
Ll != *
reduc && strat->
Ll > 0)
7511 Print(
"product criterion:%d chain criterion:%d\n",strat->
cp,strat->
c3);
7513 #ifdef HAVE_SHIFTBBA
7515 if (strat->
cv!=0)
Print(
"shift V criterion:%d\n",strat->
cv);
7527 #ifdef HAVE_SHIFTBBA
7529 if (strat->
cv!=0)
Print(
"shift V criterion:%d\n",strat->
cv);
7544 for (
i=0;
i<=strat->
sl;
i++)
7556 for (
i=0;
i<=strat->
tl;
i++)
7561 Print(
" o:%ld e:%d l:%d",
7562 strat->
T[
i].pFDeg(),strat->
T[
i].ecart,strat->
T[
i].
length);
7567 for (
i=strat->
Ll;
i>=0;
i--)
7576 Print(
" o:%ld e:%d l:%d",
7577 strat->
L[
i].pFDeg(),strat->
L[
i].ecart,strat->
L[
i].
length);
7600 strat->
S=strat->
Shdl->m;
7634 strat->
enterS(
h,pos,strat,-1);
7635 strat->
fromQ[pos]=1;
7668 strat->
enterS(
h,pos,strat,-1);
7696 strat->
S=strat->
Shdl->m;
7730 strat->
enterS(
h,pos,strat,-1);
7731 strat->
fromQ[pos]=1;
7761 pos = strat->
posInL(strat->
L,strat->
Ll,&
h,strat);
7792 strat->
S = strat->
Shdl->m;
7834 strat->
enterS(
h,pos,strat,-1);
7835 strat->
fromQ[pos]=1;
7943 for(
i=1;
i<=strat->
sl;
i++)
7959#if defined(DEBUGF5) || defined(DEBUGF51)
7960 PrintS(
"------------- GENERATING SYZ RULES NEW ---------------\n");
7997 for (
k = 0;
k<
i;
k++)
8041 for (
k = 0;
k<strat->
sl+1;
k++)
8062 PrintS(
"Principal syzygies:\n");
8066 PrintS(
"--------------------------------\n");
8076 PrintS(
"--------------------------------\n");
8100 strat->
S=strat->
Shdl->m;
8135 strat->
enterS(
h,pos,strat, strat->
tl+1);
8137 strat->
fromQ[pos]=1;
8165 strat->
enterS(
h,pos,strat, strat->
tl+1);
8207 h.is_normalized = 0;
8214 strat->
enterS(
h,pos,strat, strat->
tl+1);
8248 strat->
S=strat->
Shdl->m;
8283 strat->
enterS(
h,pos,strat, strat->
tl+1);
8285 strat->
fromQ[pos]=1;
8313 strat->
enterS(
h,pos,strat, strat->
tl+1);
8355 h.is_normalized = 0;
8362 strat->
enterS(
h,pos,strat, strat->
tl+1);
8403 if (!
pIsVector((*p).p) && ((*p).ecart != 0))
8646 for (
i=0;
i<=strat->
sl;
i++)
8738 else {
suc=-1;
break; }
8749 for (
i=0;
i<=strat->
sl;
i++)
8797 *
sizeof(
unsigned long));
8824 strat->
Shdl->m=strat->
S;
8828#ifdef ENTER_USE_MEMMOVE
8830 (strat->
sl -
atS + 1)*
sizeof(poly));
8832 (strat->
sl -
atS + 1)*
sizeof(
int));
8834 (strat->
sl -
atS + 1)*
sizeof(
unsigned long));
8836 (strat->
sl -
atS + 1)*
sizeof(
int));
8839 (strat->
sl -
atS + 1)*
sizeof(
int));
8846 strat->
S[
i] = strat->
S[
i-1];
8861#ifdef ENTER_USE_MEMMOVE
8863 (strat->
sl -
atS + 1)*
sizeof(
int));
8920 *
sizeof(
unsigned long));
8924 *
sizeof(
unsigned long));
8952 strat->
Shdl->m=strat->
S;
8961#ifdef ENTER_USE_MEMMOVE
8963 (strat->
sl -
atS + 1)*
sizeof(poly));
8965 (strat->
sl -
atS + 1)*
sizeof(poly));
8967 (strat->
sl -
atS + 1)*
sizeof(
unsigned long));
8969 (strat->
sl -
atS + 1)*
sizeof(
int));
8971 (strat->
sl -
atS + 1)*
sizeof(
unsigned long));
8973 (strat->
sl -
atS + 1)*
sizeof(
int));
8976 (strat->
sl -
atS + 1)*
sizeof(
int));
8983 strat->
S[
i] = strat->
S[
i-1];
9000#ifdef ENTER_USE_MEMMOVE
9002 (strat->
sl -
atS + 1)*
sizeof(
int));
9013 strat->
S[
atS] =
p.p;
9037 Print(
"--- LIST S: %d ---\n",strat->
sl);
9038 for(
k=0;
k<=strat->
sl;
k++)
9042 PrintS(
"--- LIST S END ---\n");
9068 else strat->
P.sev=0;
9076 poly
tp = strat->
T[
tj].p;
9081 for (
j = 0;
j <= strat->
sl; ++
j)
9095 pos =
posInS(strat, strat->
sl,
p.p,
p.ecart);
9101 for (
i = 0;
i <= strat->
Ll; ++
i)
9125 strat->
enterS(
p, pos, strat, strat->
tl);
9164 for(
i=strat->
tl;
i>=0;
i--)
9166 if (
p.p==strat->
T[
i].p)
9168 printf(
"already in T at pos %d of %d, atT=%d\n",
i,strat->
tl,
atT);
9174#ifdef HAVE_TAIL_RING
9177 p.t_p=
p.GetLmTailRing();
9183 if (strat->
tl == strat->
tmax-1)
9187#ifdef ENTER_USE_MEMMOVE
9191 (strat->
tl-
atT+1)*
sizeof(
unsigned long));
9195#ifndef ENTER_USE_MEMMOVE
9196 strat->
T[
i] = strat->
T[
i-1];
9199 strat->
R[strat->
T[
i].i_r] = &(strat->
T[
i]);
9207 if (!(
currRing->isLPring &&
p.shift > 0))
9226 strat->
R[strat->
tl] = &(strat->
T[
atT]);
9227 strat->
T[
atT].i_r = strat->
tl;
9251 for(
i=strat->
tl;
i>=0;
i--)
9253 if (
p.p==strat->
T[
i].p)
9255 printf(
"already in T at pos %d of %d, atT=%d\n",
i,strat->
tl,
atT);
9261#ifdef HAVE_TAIL_RING
9264 p.t_p=
p.GetLmTailRing();
9270 if (strat->
tl == strat->
tmax-1)
9274#ifdef ENTER_USE_MEMMOVE
9278 (strat->
tl-
atT+1)*
sizeof(
unsigned long));
9282#ifndef ENTER_USE_MEMMOVE
9283 strat->
T[
i] = strat->
T[
i-1];
9286 strat->
R[strat->
T[
i].i_r] = &(strat->
T[
i]);
9307 strat->
R[strat->
tl] = &(strat->
T[
atT]);
9308 strat->
T[
atT].i_r = strat->
tl;
9315 for(
i=strat->
tl;
i>=0;
i--)
9347 *
sizeof(
unsigned long));
9352#ifdef ENTER_USE_MEMMOVE
9354 (strat->
syzl-
atT+1)*
sizeof(poly));
9356 (strat->
syzl-
atT+1)*
sizeof(
unsigned long));
9360#ifndef ENTER_USE_MEMMOVE
9397 PrintS(
"--- Syzygies ---\n");
9400 PrintS(
"--------------------------------\n");
9406 PrintS(
"--------------------------------\n");
9486 if (strat->
homog)
PrintS(
"ideal/module is homogeneous\n");
9487 else PrintS(
"ideal/module is not homogeneous\n");
9555 if (strat->
homog)
PrintS(
"ideal/module is homogeneous\n");
9556 else PrintS(
"ideal/module is not homogeneous\n");
10091 if ((r->m[
l]!=
NULL)
10098 if ((
Q->m[q]!=
NULL)
10121 if ((r->m[
l]!=
NULL)
10128 if ((
Q->m[q]!=
NULL)
10326 Print(
"to (tailR) S[%d]:",
i);
10341 T_j->pCleardenom();
10381 Print(
"to (-tailR) S[%d]:",
i);
10484 assume(L->i_r1 >= -1 && L->i_r1 <= strat->
tl);
10485 assume(L->i_r2 >= -1 && L->i_r2 <= strat->
tl);
10490 if ((L->i_r1 == -1) || (L->i_r2 == -1) )
10495 if ((L->i_r1>=0)&&(strat->
R[L->i_r1]!=
NULL))
p1_max = (strat->
R[L->i_r1])->max_exp;
10497 if ((L->i_r2>=0)&&(strat->
R[L->i_r2]!=
NULL))
p2_max = (strat->
R[L->i_r2])->max_exp;
10707 poly
pH =
h->GetP();
10711 for(
int i = 0;
i<=strat->
sl;
i++)
10774 h->SetLmCurrRing();
10783 poly
hSig =
h->sig;
10784 poly
pH =
h->GetP();
10788 for(
int i = 0;
i<=strat->
sl;
i++)
10857 h->SetLmCurrRing();
10997 for (
i=0;
i<=strat->
tl;
i++)
11000 p_shallow_copy_delete);
11002 for (
i=0;
i<=strat->
Ll;
i++)
11006 strat->
L[
i].ShallowCopyDelete(
new_tailRing, p_shallow_copy_delete);
11008 if ((strat->
P.t_p !=
NULL) ||
11010 strat->
P.ShallowCopyDelete(
new_tailRing, p_shallow_copy_delete);
11015 L->ShallowCopyDelete(
new_tailRing, p_shallow_copy_delete);
11024 L->max_exp =
t_l->max_exp;
11055 unsigned long l = 0;
11061 for (
i=0;
i<= strat->
Ll;
i++)
11065 for (
i=0;
i<=strat->
tl;
i++)
11095 int **wvhdl = (
int **)
omAlloc0((n+1)*
sizeof(
int*));
11096 res->wvhdl = wvhdl;
11097 for (
int i=1;
i<n;
i++)
11099 res->order[
i] = r->order[
i-1];
11100 res->block0[
i] = r->block0[
i-1];
11101 res->block1[
i] = r->block1[
i-1];
11102 res->wvhdl[
i] = r->wvhdl[
i-1];
11122 WarnS(
"error in nc_rComplete");
11143 int **wvhdl = (
int **)
omAlloc0((n+2)*
sizeof(
int*));
11144 res->wvhdl = wvhdl;
11145 for (
int i=2;
i<n+2;
i++)
11147 res->order[
i] = r->order[
i-2];
11148 res->block0[
i] = r->block0[
i-2];
11149 res->block1[
i] = r->block1[
i-2];
11150 res->wvhdl[
i] = r->wvhdl[
i-2];
11155 res->block0[0] = 1;
11157 for (
int i=0;
i<
res->N; ++
i)
11158 res->wvhdl[0][
i] = 1;
11178 WarnS(
"error in nc_rComplete");
11315#ifdef HAVE_TAIL_BIN
11343Gonnet 43.26 42.30 38.34 41.98 38.40 100.04
11345Twomat3 1.62 1.69 1.70 1.65 1.54 11.32
11346ahml 4.48 4.03 4.03 4.38 4.96 26.50
11347c7 15.02 13.98 15.16 13.24 17.31 47.89
11348c8 505.09 407.46 852.76 413.21 499.19 n/a
11349f855 12.65 9.27 14.97 8.78 14.23 33.12
11350gametwo6 11.47 11.35 14.57 11.20 12.02 35.07
11352ilias13 22.89 22.46 24.62 20.60 23.34 53.86
11353noon8 40.68 37.02 37.99 36.82 35.59 877.16
11354rcyclic_19 48.22 42.29 43.99 45.35 51.51 204.29
11355rkat9 82.37 79.46 77.20 77.63 82.54 267.92
11356schwarz_11 16.46 16.81 16.76 16.81 16.72 35.56
11357test016 16.39 14.17 14.40 13.50 14.26 34.07
11358test017 34.70 36.01 33.16 35.48 32.75 71.45
11359test042 10.76 10.99 10.27 11.57 10.45 23.04
11360test058 6.78 6.75 6.51 6.95 6.22 9.47
11361test066 10.71 10.94 10.76 10.61 10.56 19.06
11362test073 10.75 11.11 10.17 10.79 8.63 58.10
11363test086 12.23 11.81 12.88 12.24 13.37 66.68
11364test103 5.05 4.80 5.47 4.64 4.89 11.90
11365test154 12.96 11.64 13.51 12.46 14.61 36.35
11366test162 65.27 64.01 67.35 59.79 67.54 196.46
11367test164 7.50 6.50 7.68 6.70 7.96 17.13
11368virasoro 3.39 3.50 3.35 3.47 3.70 7.66
11378 if (
length==-1)
return 0;
11381 int op=
p.GetpFDeg();
11382 int ol =
p.GetpLength();
11384 if (set[
length].ecart < o)
11386 if (set[
length].ecart == o)
11400 if (set[
an].ecart > o)
11402 if (set[
an].ecart == o)
11404 int oo=set[
an].GetpFDeg();
11412 if (set[
i].ecart > o)
11414 else if (set[
i].ecart == o)
11416 int oo=set[
i].GetpFDeg();
11432 if (
length==-1)
return 0;
11434 int op=
p.GetpFDeg();
11435 int ol =
p.GetpLength();
11448 int oo=set[
an].GetpFDeg();
11455 int oo=set[
i].GetpFDeg();
11468 int ol =
p.GetpLength();
11526#ifdef HAVE_MORE_POS_IN_T
11560 printf(
"initEcartPair: ");
11564 printf(
"homog=%d, LazyDegree=%d, LazyPass=%d, ak=%d,\n",
11566 printf(
"honey=%d, sugarCrit=%d, Gebauer=%d, noTailReduction=%d, use_buckets=%d\n",
11572 printf(
"posInLDependsOnLength=%d\n",
11604 printf(
"currRing->pFDeg: ");
11619 printf(
"ecartWeights: ");
11641#ifdef HAVE_SHIFTBBA
11745 PrintS(
"\n--- create strong gcd poly: ");
11754 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);
11776 h.i_r1 = -1;
h.i_r2 = -1;
11810#ifdef HAVE_SHIFTBBA
11841 h.ecart=0;
h.length=0;
11873 for(
j = strat->
Bl;
j>=0;
j--)
12014 h.i_r1 = -1;
h.i_r2 = -1;
12053#ifdef HAVE_SHIFTBBA
12063#ifdef HAVE_SHIFTBBA
12123#ifdef HAVE_SHIFTBBA
12163#ifdef HAVE_SHIFTBBA
12166#ifdef CRITERION_DEBUG
12211#ifdef CRITERION_DEBUG
12219 if((!((
ecartq>0)&&(ecart>0)))
12238#ifdef CRITERION_DEBUG
12248#ifdef CRITERION_DEBUG
12273#ifdef CRITERION_DEBUG
12276 Print(
"--- chain crit using B[%d].lcm=%s\n",
j,
pString(strat->
B[
j].lcm));
12287#ifdef CRITERION_DEBUG
12290 Print(
"--- chain crit using pair to remove B[%d].lcm=%s\n",
j,
pString(strat->
B[
j].lcm));
12323#ifdef CRITERION_DEBUG
12331#ifdef CRITERION_DEBUG
12343 for(
j = strat->
Bl;
j>=0;
j--)
12352#ifdef CRITERION_DEBUG
12355 Print(
"--- chain crit using B[%d].lcm=%s\n",
j,
pString(strat->
B[
j].lcm));
12365#ifdef CRITERION_DEBUG
12368 Print(
"--- chain crit using pair to remove B[%d].lcm=%s\n",
j,
pString(strat->
B[
j].lcm));
12385#ifdef CRITERION_DEBUG
12393#ifdef CRITERION_DEBUG
12452#ifdef CRITERION_DEBUG
12492#ifdef CRITERION_DEBUG
12505#ifdef HAVE_SHIFTBBA
12535 for (
j=0;
j<=
k;
j++)
12540 poly
s = strat->
S[
j];
12551 for (
j=0;
j<=
k;
j++)
12553 poly
s = strat->
S[
j];
12571 for (
j=0;
j<=
k;
j++)
12576 poly
s = strat->
S[
j];
12587 for (
j=0;
j<=
k;
j++)
12591 poly
s = strat->
S[
j];
12619 for (
j=0;
j<=
k;
j++)
12621 poly
s = strat->
S[
j];
12629 for (
j=0;
j<=
k;
j++)
12631 poly
s = strat->
S[
j];
12672 for (
j=0;
j<=
k;
j++)
12677 poly
s = strat->
S[
j];
12694 for (
j=0;
j<=
k;
j++)
12699 poly
s = strat->
S[
j];
12707 for (
j=0;
j<=
k;
j++)
12712 poly
s = strat->
S[
j];
12763#ifdef HAVE_SHIFTBBA
12792 for (
j=0;
j<=
k;
j++)
12797 poly
s = strat->
S[
j];
12806 for (
j=0;
j<=
k;
j++)
12808 poly
s = strat->
S[
j];
12826 for (
j=0;
j<=
k;
j++)
12831 poly
s = strat->
S[
j];
12841 for (
j=0;
j<=
k;
j++)
12845 poly
s = strat->
S[
j];
12856 for (
j=0;
j<=
k;
j++)
12858 poly
s = strat->
S[
j];
12867 for (
j=0;
j<=
k;
j++)
12869 poly
s = strat->
S[
j];
12884 for (
j=0;
j<=
k;
j++)
12890 poly
s = strat->
S[
j];
12907 for (
j=0;
j<=
k;
j++)
12912 poly
s = strat->
S[
j];
12920 for (
j=0;
j<=
k;
j++)
12925 poly
s = strat->
S[
j];
12947#ifdef HAVE_SHIFTBBA
12956 if ( (!strat->
fromT)
12977#ifdef HAVE_SHIFTBBA
13000#ifdef HAVE_SHIFTBBA
13007 p =
h = L->GetLmTailRing();
13009 return L->GetLmCurrRing();
13016 Ln.pLength = L->GetpLength() - 1;
13024 while(!
Ln.IsNull())
13028 Ln.SetShortExpVector();
13058 }
while (!
Ln.IsNull());
13079 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 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 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)