47#define ENTER_USE_MEMMOVE
87#ifdef ENTER_USE_MYMEMMOVE
88inline void _my_memmove_d_gt_s(
unsigned long* d,
unsigned long*
s,
long l)
90 REGISTER unsigned long* _dl = (
unsigned long*) d;
91 REGISTER unsigned long* _sl = (
unsigned long*)
s;
102inline void _my_memmove_d_lt_s(
unsigned long* d,
unsigned long*
s,
long l)
105 REGISTER unsigned long* _dl = (
unsigned long*) d;
106 REGISTER unsigned long* _sl = (
unsigned long*)
s;
117inline void _my_memmove(
void* d,
void*
s,
long l)
119 unsigned long _d = (
unsigned long) d;
120 unsigned long _s = (
unsigned long)
s;
121 unsigned long _l = ((
l) + SIZEOF_LONG - 1) >> LOG_SIZEOF_LONG;
123 if (_d > _s) _my_memmove_d_gt_s(_d, _s, _l);
124 else _my_memmove_d_lt_s(_d, _s, _l);
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();
347 if ((!fromNext) && cut)
350 L->ecart = L->pLDeg(strat->
LDegLast) - L->GetpFDeg();
375 ring r = L->tailRing;
376 poly
p = L->GetLmTailRing();
450 number eins=
nInit(1);
533inline static unsigned long*
initsevS (
const int maxnr)
535 return (
unsigned long*)
omAlloc0(maxnr*
sizeof(
unsigned long));
539 return (
int*)
omAlloc0(maxnr*
sizeof(
int));
543 int &
length,
const int incr)
555 (
length+incr)*
sizeof(
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)))
720 for (
i=0;
i<=tlength;
i++)
722 if (
T[
i].
p ==
p)
return i;
733 if (
i >= 0)
return i;
736 while (strat !=
NULL);
745 for (
i=0;
i<=tlength;
i++)
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;
802 ring strat_tailRing = strat->
tailRing;
803 if (strat_tailRing ==
NULL) strat_tailRing = tailRing;
804 r_assume(strat_tailRing == 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)
864 p_Setm(test_max, tailRing);
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')
927 ring strat_tailRing=strat->
tailRing;
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",
983 else if (tlength > 0 &&
T !=
NULL && (lpos >=0))
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));
1142 memmove(&(strat->
sevS[
i]),&(strat->
sevS[
i+1]),(strat->
sl -
i)*
sizeof(
unsigned long));
1143 memmove(&(strat->
S_2_R[
i]),&(strat->
S_2_R[
i+1]),(strat->
sl -
i)*
sizeof(
int));
1146 for (
j=
i;
j<strat->
sl;
j++)
1148 strat->
S[
j] = strat->
S[
j+1];
1156#ifdef ENTER_USE_MEMMOVE
1157 memmove(&(strat->
lenS[
i]),&(strat->
lenS[
i+1]),(strat->
sl -
i)*
sizeof(
int));
1164#ifdef ENTER_USE_MEMMOVE
1172#ifdef ENTER_USE_MEMMOVE
1173 memmove(&(strat->
fromQ[
i]),&(strat->
fromQ[
i+1]),(strat->
sl -
i)*
sizeof(
int));
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
1284 memmove(&((*set)[at+1]), &((*set)[at]), ((*
length)-at+1)*
sizeof(
LObject));
1286 for (
i=(*
length)+1;
i>=at+1;
i--) (*set)[
i] = (*set)[
i-1];
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();
1323 (*Lp).ecart =
si_max(ecartF,ecartG);
1324 (*Lp).ecart = (*Lp).ecart- (Lp->FDeg -
p_FDeg((*Lp).lcm,
currRing));
1333 return (ecart1 <= ecart2);
1364 int j,compare,compareCoeff;
1368 h.ecart=0;
h.length=0;
1392 for(
j = strat->
Bl;
j>=0;
j--)
1513 h.i_r1 = -1;
h.i_r2 = -1;
1529 posx = strat->
posInL(strat->
B,strat->
Bl,&
h,strat);
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];
1673 posx = strat->
posInL(strat->
L,strat->
Ll,&
h,strat);
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);
1830 if(
pLmCmp(pSigMult,sSigMult) == 0)
1839 if(
pLtCmp(pSigMult,sSigMult)==1)
1858 h.i_r1 = -1;
h.i_r2 = -1;
1866 int red_result =
redRing(&
h,strat);
1876 strat->
enterS(strat->
P,strat->
sl+1,strat, strat->
tl+1);
1893 int red_result =
redRing(&
h,strat);
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];
1953 Lp.ecart=0; Lp.length=0;
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];
2183 Lp.i_r1 = strat->
S_2_R[
i];
2197 && (Lp.p->coef!=
NULL))
2201 l = strat->
posInL(strat->
B,strat->
Bl,&Lp,strat);
2241 Lp.ecart=0; Lp.length=0;
2248 if((!((strat->
ecartS[
i]>0)&&(ecart>0)))
2344 for(
j = strat->
Bl;
j>=0;
j--)
2400 Lp.p1 = strat->
S[
i];
2407 Lp.i_r1 = strat->
S_2_R[
i];
2421 && (Lp.p->coef!=
NULL))
2425 l = strat->
posInL(strat->
B,strat->
Bl,&Lp,strat);
2449 unsigned long pSigMultNegSev,sSigMultNegSev;
2453 Lp.ecart=0; Lp.length=0;
2458#ifndef HAVE_RATGRING
2460#elif defined(HAVE_RATGRING)
2484 pSigMultNegSev = ~p_GetShortExpVector(pSigMult,
currRing);
2486 sSigMultNegSev = ~p_GetShortExpVector(sSigMult,
currRing);
2490 PrintS(
"----------------\n");
2493 PrintS(
"----------------\n");
2499 Print(
"IN PAIR GENERATION - COMPARING SIGS: %d\n",sigCmp);
2520 if ( strat->
syzCrit(pSigMult,pSigMultNegSev,strat) ||
2521 strat->
syzCrit(sSigMult,sSigMultNegSev,strat)
2522 || strat->
rewCrit1(sSigMult,sSigMultNegSev,Lp.lcm,strat,
i+1)
2599 Lp.sevSig = ~pSigMultNegSev;
2606 Lp.sevSig = ~sSigMultNegSev;
2617 if (strat->
rewCrit3(Lp.sig,~Lp.sevSig,Lp.p,strat,strat->
sl+1))
2631 Lp.checked = strat->
sl+1;
2638 Lp.prod_crit =
TRUE;
2650 PrintS(
"SIGNATURE OF PAIR: ");
2654 Lp.p1 = strat->
S[
i];
2668 Lp.i_r1 = strat->
S_2_R[
i];
2682 && (Lp.p->coef!=
NULL))
2724 unsigned long pSigMultNegSev,sSigMultNegSev;
2728 Lp.ecart=0; Lp.length=0;
2733#ifndef HAVE_RATGRING
2735#elif defined(HAVE_RATGRING)
2771 if(pSigMult !=
NULL)
2772 pSigMultNegSev = ~p_GetShortExpVector(pSigMult,
currRing);
2774 if(sSigMult !=
NULL)
2775 sSigMultNegSev = ~p_GetShortExpVector(sSigMult,
currRing);
2778 Print(
"----------------\n");
2781 Print(
"----------------\n");
2785 if(pSigMult !=
NULL && sSigMult !=
NULL)
2794 if(pSigMult ==
NULL)
2796 if(sSigMult ==
NULL)
2806 Print(
"IN PAIR GENERATION - COMPARING SIGS: %d\n",sigCmp);
2828 int red_result =
redRing(&Lp,strat);
2838 strat->
enterS(strat->
P,strat->
sl+1,strat, strat->
tl+1);
2840 strat->
enterS(Lp,0,strat,strat->
tl);
2854 Lp.sig =
pCopy(pSigMult);
2883 if ( strat->
syzCrit(pSigMult,pSigMultNegSev,strat) ||
2884 strat->
syzCrit(sSigMult,sSigMultNegSev,strat)
2966 Lp.sig =
pNeg(Lp.sig);
2977 Lp.sevSig = ~pSigMultNegSev;
2984 Lp.sevSig = ~sSigMultNegSev;
2996 if (strat->
rewCrit3(Lp.sig,~Lp.sevSig,Lp.p,strat,strat->
sl+1))
3010 Lp.checked = strat->
sl+1;
3017 Lp.prod_crit =
TRUE;
3029 PrintS(
"SIGNATURE OF PAIR: ");
3033 Lp.p1 = strat->
S[
i];
3048 Lp.i_r1 = strat->
S_2_R[
i];
3062 && (Lp.p->coef!=
NULL))
3070 int red_result =
redRing(&Lp,strat);
3080 strat->
enterS(strat->
P,strat->
sl+1,strat, strat->
tl+1);
3083 strat->
enterS(Lp,0,strat, strat->
tl+1);
3135 Lp.p1 = strat->
S[
i];
3139 Lp.i_r1 = strat->
S_2_R[
i];
3154 && (Lp.p->coef!=
NULL))
3157 l = strat->
posInL(strat->
L,strat->
Ll,&Lp,strat);
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
4226 && ((iCompH<=strat->syzComp)||(strat->
syzComp==0)))
4271 PrintS(
"--- create zero spoly: ");
4300 posx = strat->
posInL(strat->
L,strat->
Ll,&Lp,strat);
4355 PrintS(
"--- create zero spoly: ");
4383 int red_result =
redRing(&Lp,strat);
4392 strat->
enterS(strat->
P,strat->
sl+1,strat, strat->
tl+1);
4394 strat->
enterS(Lp,0,strat,strat->
tl);
4441 if ( (!strat->
fromT)
4498 if ( (!strat->
fromT)
4523 if ( (!strat->
fromT)
4548 for (
j=0;
j<=
k;
j++)
4551 if ((iCompH==iCompSj)
4562 for (
j=0;
j<=
k;
j++)
4565 if ((iCompH==iCompSj)
4617 int i,
j,at,ecart, s2r;
4621 int new_suc=strat->
sl+1;
4625 for (;
i<=strat->
sl;
i++)
4630 if (new_suc > at) new_suc = at;
4633 sev = strat->
sevS[
i];
4636 for (
j=
i;
j>=at+1;
j--)
4638 strat->
S[
j] = strat->
S[
j-1];
4644 strat->
ecartS[at] = ecart;
4645 strat->
sevS[at] = sev;
4646 strat->
S_2_R[at] = s2r;
4649 for (
j=
i;
j>=at+1;
j--)
4653 strat->
fromQ[at]=fq;
4657 if (new_suc <= strat->sl) *suc=new_suc;
4720 if (cmp == cmp_int)
return an;
4721 if (cmp == -cmp_int)
return en;
4727 if (cmp == cmp_int) en =
i;
4728 else if (cmp == -cmp_int) an =
i;
4744 if (
pLmCmp(set[an],
p) == cmp_int)
return an;
4745 if (
pLmCmp(set[an],
p) == -cmp_int)
return en;
4747 && ((strat->
ecartS[an])>ecart_p))
4753 else if (
pLmCmp(set[
i],
p) == -cmp_int) an=
i;
4757 &&((strat->
ecartS[
i])<ecart_p))
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)))
4848 if(end < 0 || end >=
IDELEMS(F))
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;
4916 if (
pLmCmp(set[an].
p,
p.p) == cmp_int)
return an;
4932 if (
length==-1)
return 0;
4944 if (set[an].
length>
p.length)
return an;
4960 if (
length==-1)
return 0;
4962 int o =
p.GetpFDeg();
4963 int op = set[
length].GetpFDeg();
4978 op= set[an].GetpFDeg();
4980 || (( op == o) && (
pLmCmp(set[an].
p,
p.p) == cmp_int)))
4985 op = set[
i].GetpFDeg();
4987 || (( op == o) && (
pLmCmp(set[
i].
p,
p.p) == cmp_int)))
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();
5045 || (( op == o) && (set[
length].length ==
p.length)
5056 op = set[an].GetpFDeg();
5058 || (( op == o) && (set[an].
length >
p.length))
5059 || (( op == o) && (set[an].length ==
p.length)
5060 && (
pLmCmp(set[an].
p,
p.p) == cmp_int)))
5065 op = set[
i].GetpFDeg();
5067 || (( op == o) && (set[
i].
length >
p.length))
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();
5086 || (( op == o) && (set[
length].length ==
p.length)
5097 op = set[an].GetpFDeg();
5099 || (( op == o) && (set[an].
length >
p.length))
5100 || (( op == o) && (set[an].length ==
p.length)
5106 op = set[
i].GetpFDeg();
5108 || (( op == o) && (set[
i].
length >
p.length))
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();
5156 int oo=set[
length].ecart;
5158 if ((oo < op) || ((oo==op) && (set[
length].
length <= ol)))
5168 int oo=set[an].ecart;
5170 || ((oo==op) && (set[an].
pLength > ol)))
5175 int oo=set[
i].ecart;
5177 || ((oo == op) && (set[
i].
pLength > ol)))
5209 if (
length==-1)
return 0;
5211 int o =
p.GetpFDeg() +
p.ecart;
5227 op = set[an].GetpFDeg()+set[an].ecart;
5229 || (( op == o) && (
pLmCmp(set[an].
p,
p.p) == cmp_int)))
5234 op = set[
i].GetpFDeg()+set[
i].ecart;
5236 || (( op == o) && (
pLmCmp(set[
i].
p,
p.p) == cmp_int)))
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)
5328 && (
pLmCmp(set[an].
p,
p.p) == cmp_int)))
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)
5426 && (
pLmCmp(set[an].
p,
p.p) == cmp_int)))
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)
5527 int oo=set[
length].GetpFDeg();
5528 if ((oo < op) || ((oo==op) && (set[
length].
length <
p.length)))
5539 if (set[an].ecart > o)
5541 if (set[an].ecart == o)
5543 int oo=set[an].GetpFDeg();
5545 || ((oo==op) && (set[an].
length >
p.length)))
5551 if (set[
i].ecart > o)
5553 else if (set[
i].ecart == o)
5555 int oo=set[
i].GetpFDeg();
5557 || ((oo == op) && (set[
i].
length >
p.length)))
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))
5596 || (
pLmCmp(set[an].
p,
p->p)== cmp_int))
5601 op=set[
i].GetpFDeg();
5603 || ((op==d) && (
p->p1!=
NULL) && (set[
i].p1==
NULL))
5633 if (
pLmCmp(set[an].
p,
p->p) == cmp_int)
return en;
5689 if (
pLtCmp(set[an].sig,
p->sig) == cmp_int)
return en;
5693 if (
pLtCmp(set[
i].sig,
p->sig) == cmp_int) an=
i;
5717 cmp =
pLtCmp(set[an].sig,
p->sig);
5724 if (set[an].FDeg >
p->FDeg)
5726 if (set[an].FDeg < p->FDeg)
5728 if (set[an].FDeg ==
p->FDeg)
5746 if (set[
i].FDeg >
p->FDeg)
5748 if (set[
i].FDeg < p->FDeg)
5750 if (set[
i].FDeg ==
p->FDeg)
5765 if (strat->
syzl==0)
return 0;
5771 int en= strat->
syzl-1;
5776 if (
pLtCmp(strat->
syz[an],sig) != cmp_int)
return en;
5809 int o =
p->GetpFDeg();
5810 int op = set[
length].GetpFDeg();
5823 op = set[an].GetpFDeg();
5825 || ((op == o) && (
pLmCmp(set[an].
p,
p->p) != cmp_int)))
5830 op = set[
i].GetpFDeg();
5832 || ((op == o) && (
pLmCmp(set[
i].
p,
p->p) != cmp_int)))
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)
5929 if (set[an].FDeg < p->FDeg)
5931 if (set[an].FDeg ==
p->FDeg)
5939 if (set[an].t_p!=
NULL)
5961 if (set[
i].FDeg >
p->FDeg)
5963 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();
6071 || ((op == o) && (set[
length].length <=
p->length)
6081 op = set[an].GetpFDeg();
6083 || ((op == o) && (set[an].
length >
p->length))
6084 || ((op == o) && (set[an].length <=
p->length)
6085 && (
pLmCmp(set[an].
p,
p->p) != cmp_int)))
6090 op = set[
i].GetpFDeg();
6092 || ((op == o) && (set[
i].
length >
p->length))
6093 || ((op == o) && (set[
i].length <=
p->length)
6106 int o =
p->GetpFDeg();
6107 int op = set[
length].GetpFDeg();
6111 || ((op == o) && (set[
length].length <=
p->length)
6121 op = set[an].GetpFDeg();
6123 || ((op == o) && (set[an].
length >
p->length))
6124 || ((op == o) && (set[an].length <=
p->length)
6130 op = set[
i].GetpFDeg();
6132 || ((op == o) && (set[
i].
length >
p->length))
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;
6203 || ((op == o) && (
pLmCmp(set[an].
p,
p->p) != cmp_int)))
6208 op = set[
i].GetpFDeg() + set[
i].ecart;
6210 || ((op == o) && (
pLmCmp(set[
i].
p,
p->p) != cmp_int)))
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)
6284 && (
pLmCmp(set[an].
p,
p->p) != cmp_int)))
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)
6389 && (
pLmCmp(set[an].
p,
p->p) != cmp_int)))
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;
6716 if (
j > end_pos)
return NULL;
6717 #if defined(PDEBUG) || defined(PDIV_DEBUG)
6719 (ecart== LONG_MAX || ecart>= strat->
ecartS[
j]))
6721 if (!(sev[
j] & not_sev) &&
6722 (ecart== LONG_MAX || ecart>= strat->
ecartS[
j]) &&
6735 if (
j > end_pos)
return NULL;
6736 #if defined(PDEBUG) || defined(PDIV_DEBUG)
6739 && (ecart== LONG_MAX || ecart>= strat->
ecartS[
j])
6742 if (!(sev[
j] & not_sev)
6743 && (ecart== LONG_MAX || ecart>= strat->
ecartS[
j])
6754 if (strat->
tl < 0 || strat->
S_2_R[
j] == -1)
6775 if (
j > end_pos)
return NULL;
6777 #if defined(PDEBUG) || defined(PDIV_DEBUG)
6781 && (ecart== LONG_MAX || ecart>= strat->
ecartS[
j]))
6787 if (! (sev[
j] & not_sev)
6788 && (ecart== LONG_MAX || ecart>= strat->
ecartS[
j]))
6791 assume(t !=
NULL && t->t_p !=
NULL && t->tailRing == r && t->p == strat->
S[
j]);
6806 if (
j > end_pos)
return NULL;
6808 #if defined(PDEBUG) || defined(PDIV_DEBUG)
6812 && (ecart== LONG_MAX || ecart>= strat->
ecartS[
j])
6819 if (! (sev[
j] & not_sev)
6820 && (ecart== LONG_MAX || ecart>= strat->
ecartS[
j]))
6823 assume(t !=
NULL && t->t_p !=
NULL && t->tailRing == r && t->p == strat->
S[
j]);
6874 if (With ==
NULL)
break;
6884 return redtail(L, end_pos, strat);
6890 if (hn ==
NULL)
goto all_done;
6911 return redtail(&L, end_pos, strat);
6919 p =
h = L->GetLmTailRing();
6921 return L->GetLmCurrRing();
6956 Ln.SetShortExpVector();
6962 With = &(strat->
T[
j]);
6963 assume(With->GetpLength()==
pLength(With->p != __null ? With->p : With->t_p));
6968 if (With ==
NULL)
break;
6969 assume(With->GetpLength()==
pLength(With->p != __null ? With->p : With->t_p));
6996 pNext(
h) = Ln.LmExtractAndIter();
6999 }
while (!Ln.IsNull());
7002 if (Ln.IsNull())
goto all_done;
7003 if (! withT) With_s.Init(
currRing);
7005 pNext(
h) = Ln.LmExtractAndIter();
7024 return L->GetLmCurrRing();
7032 p =
h = L->GetLmTailRing();
7034 return L->GetLmCurrRing();
7041 Ln.pLength = L->GetpLength() - 1;
7065 Ln.SetShortExpVector();
7071 With = &(strat->
T[
j]);
7076 if (With ==
NULL)
break;
7103 pNext(
h) = Ln.LmExtractAndIter();
7106 }
while (!Ln.IsNull());
7118 if (! withT) With_s.Init(
currRing);
7120 pNext(
h) = Ln.LmExtractAndIter();
7139 return L->GetLmCurrRing();
7148 p =
h = L->GetLmTailRing();
7183 Ln.SetShortExpVector();
7196 With = &(strat->
T[
j]);
7197 assume(With->GetpLength()==
pLength(With->p != __null ? With->p : With->t_p));
7214 pNext(
h) = Ln.LmExtractAndIter();
7217 }
while (!Ln.IsNull());
7225 With = &(strat->
T[
j]);
7226 assume(With->GetpLength()==
pLength(With->p != __null ? With->p : With->t_p));
7243 pNext(
h) = Ln.LmExtractAndIter();
7246 }
while (!Ln.IsNull());
7250 if (Ln.IsNull())
goto all_done;
7252 pNext(
h) = Ln.LmExtractAndIter();
7277 p =
h = L->GetLmTailRing();
7279 return L->GetLmCurrRing();
7286 Ln.pLength = L->GetpLength() - 1;
7299 Ln.SetShortExpVector();
7301 if (With ==
NULL)
break;
7311 poly p_Ln=Ln.GetLmCurrRing();
7312 poly p_With=With->GetLmCurrRing();
7322 pNext(
h) = Ln.LmExtractAndIter();
7325 }
while (!Ln.IsNull());
7328 if (Ln.IsNull())
goto all_done;
7331 pNext(
h) = Ln.LmExtractAndIter();
7349 return L->GetLmCurrRing();
7383 p =
h = L->GetLmTailRing();
7385 return L->GetLmCurrRing();
7392 Ln.pLength = L->GetpLength() - 1;
7405 Ln.SetShortExpVector();
7408 if (With ==
NULL)
break;
7417 poly p_Ln=Ln.GetLmCurrRing();
7418 poly p_With=With->GetLmCurrRing();
7431 pNext(
h) = Ln.LmExtractAndIter();
7434 }
while (!Ln.IsNull());
7439 if (Ln.IsNull())
goto all_done;
7441 pNext(
h) = Ln.LmExtractAndIter();
7459 return L->GetLmCurrRing();
7474 if (strat->
Ll != *reduc)
7476 if (strat->
Ll != *reduc-1)
7488 if (red_result == 0)
7490 else if (red_result < 0)
7492 if ((red_result > 0) || ((strat->
Ll % 100)==99))
7494 if (strat->
Ll != *reduc && strat->
Ll > 0)
7511 Print(
"product criterion:%d chain criterion:%d\n",strat->
cp,strat->
c3);
7512 if (hilbcount!=0)
Print(
"hilbert series criterion:%d\n",hilbcount);
7513 #ifdef HAVE_SHIFTBBA
7515 if (strat->
cv!=0)
Print(
"shift V criterion:%d\n",strat->
cv);
7526 if (hilbcount!=0)
Print(
"hilbert series criterion:%d\n",hilbcount);
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++)
7560 if (strat->
T[
i].length==0) strat->
T[
i].length=
pLength(strat->
T[
i].p);
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;
7605 memset(strat->
fromQ,0,
i*
sizeof(
int));
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;
7701 memset(strat->
fromQ,0,
i*
sizeof(
int));
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;
7805 memset(strat->
fromQ,0,
i*
sizeof(
int));
7834 strat->
enterS(
h,pos,strat,-1);
7835 strat->
fromQ[pos]=1;
7943 for(
i=1;
i<=strat->
sl;
i++)
7955 strat->
syz = (poly *)
omAlloc(ps*
sizeof(poly));
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");
8065 Print(
"ps %d\n",ps);
8066 PrintS(
"--------------------------------\n");
8076 PrintS(
"--------------------------------\n");
8100 strat->
S=strat->
Shdl->m;
8106 memset(strat->
fromQ,0,
i*
sizeof(
int));
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;
8254 memset(strat->
fromQ,0,
i*
sizeof(
int));
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);
8384 unsigned long not_sev = ~ pGetShortExpVector(
h);
8386 while (
j <= maxIndex)
8403 if (!
pIsVector((*p).p) && ((*p).ecart != 0))
8410 h1 = r =
pCopy((*p).p);
8462 unsigned long not_sev = ~ pGetShortExpVector(
h);
8472 not_sev = ~ pGetShortExpVector(
h);
8487 unsigned long not_sev = ~ pGetShortExpVector(
h);
8489 while (
j <= maxIndex)
8496 not_sev = ~ pGetShortExpVector(
h);
8512 unsigned long not_sev = ~ pGetShortExpVector(
h);
8539 not_sev = ~ pGetShortExpVector(
h);
8543 while (
j <= maxIndex);
8584 if (
pCmp(redSi,strat->
S[
i])!=0)
8641 if (any_change)
reorderS(&suc,strat);
8646 for (
i=0;
i<=strat->
sl;
i++)
8696 else if (
pCmp((strat->
S)[
i],redSi)!=0)
8737 if (any_change)
reorderS(&suc,strat);
8738 else { suc=-1;
break; }
8749 for (
i=0;
i<=strat->
sl;
i++)
8777 if (suc!= -1)
updateS(toT,strat);
8797 *
sizeof(
unsigned long));
8824 strat->
Shdl->m=strat->
S;
8826 if (atS <= strat->sl)
8828#ifdef ENTER_USE_MEMMOVE
8829 memmove(&(strat->
S[atS+1]), &(strat->
S[atS]),
8830 (strat->
sl - atS + 1)*
sizeof(poly));
8831 memmove(&(strat->
ecartS[atS+1]), &(strat->
ecartS[atS]),
8832 (strat->
sl - atS + 1)*
sizeof(
int));
8833 memmove(&(strat->
sevS[atS+1]), &(strat->
sevS[atS]),
8834 (strat->
sl - atS + 1)*
sizeof(
unsigned long));
8835 memmove(&(strat->
S_2_R[atS+1]), &(strat->
S_2_R[atS]),
8836 (strat->
sl - atS + 1)*
sizeof(
int));
8838 memmove(&(strat->
lenS[atS+1]), &(strat->
lenS[atS]),
8839 (strat->
sl - atS + 1)*
sizeof(
int));
8841 memmove(&(strat->
lenSw[atS+1]), &(strat->
lenSw[atS]),
8844 for (
i=strat->
sl+1;
i>=atS+1;
i--)
8846 strat->
S[
i] = strat->
S[
i-1];
8852 for (
i=strat->
sl+1;
i>=atS+1;
i--)
8855 for (
i=strat->
sl+1;
i>=atS+1;
i--)
8861#ifdef ENTER_USE_MEMMOVE
8862 memmove(&(strat->
fromQ[atS+1]), &(strat->
fromQ[atS]),
8863 (strat->
sl - atS + 1)*
sizeof(
int));
8865 for (
i=strat->
sl+1;
i>=atS+1;
i--)
8870 strat->
fromQ[atS]=0;
8881 strat->
sevS[atS] =
p.sev;
8883 strat->
S_2_R[atS] = atR;
8893 for (
int i = maxPossibleShift;
i > 0;
i--)
8901 int atS =
posInS(strat, strat->
sl, qq.p, qq.ecart);
8920 *
sizeof(
unsigned long));
8924 *
sizeof(
unsigned long));
8952 strat->
Shdl->m=strat->
S;
8959 if (atS <= strat->sl)
8961#ifdef ENTER_USE_MEMMOVE
8962 memmove(&(strat->
S[atS+1]), &(strat->
S[atS]),
8963 (strat->
sl - atS + 1)*
sizeof(poly));
8964 memmove(&(strat->
sig[atS+1]), &(strat->
sig[atS]),
8965 (strat->
sl - atS + 1)*
sizeof(poly));
8966 memmove(&(strat->
sevSig[atS+1]), &(strat->
sevSig[atS]),
8967 (strat->
sl - atS + 1)*
sizeof(
unsigned long));
8968 memmove(&(strat->
ecartS[atS+1]), &(strat->
ecartS[atS]),
8969 (strat->
sl - atS + 1)*
sizeof(
int));
8970 memmove(&(strat->
sevS[atS+1]), &(strat->
sevS[atS]),
8971 (strat->
sl - atS + 1)*
sizeof(
unsigned long));
8972 memmove(&(strat->
S_2_R[atS+1]), &(strat->
S_2_R[atS]),
8973 (strat->
sl - atS + 1)*
sizeof(
int));
8975 memmove(&(strat->
lenS[atS+1]), &(strat->
lenS[atS]),
8976 (strat->
sl - atS + 1)*
sizeof(
int));
8978 memmove(&(strat->
lenSw[atS+1]), &(strat->
lenSw[atS]),
8981 for (
i=strat->
sl+1;
i>=atS+1;
i--)
8983 strat->
S[
i] = strat->
S[
i-1];
8991 for (
i=strat->
sl+1;
i>=atS+1;
i--)
8994 for (
i=strat->
sl+1;
i>=atS+1;
i--)
9000#ifdef ENTER_USE_MEMMOVE
9001 memmove(&(strat->
fromQ[atS+1]), &(strat->
fromQ[atS]),
9002 (strat->
sl - atS + 1)*
sizeof(
int));
9004 for (
i=strat->
sl+1;
i>=atS+1;
i--)
9009 strat->
fromQ[atS]=0;
9013 strat->
S[atS] =
p.p;
9014 strat->
sig[atS] =
p.sig;
9020 strat->
sevS[atS] =
p.sev;
9030 strat->
sevSig[atS] =
p.sevSig;
9033 strat->
S_2_R[atS] = atR;
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)
9185 if (atT <= strat->tl)
9187#ifdef ENTER_USE_MEMMOVE
9188 memmove(&(strat->
T[atT+1]), &(strat->
T[atT]),
9190 memmove(&(strat->
sevT[atT+1]), &(strat->
sevT[atT]),
9191 (strat->
tl-atT+1)*
sizeof(
unsigned long));
9193 for (
i=strat->
tl+1;
i>=atT+1;
i--)
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))
9223 strat->
T[atT].max_exp =
NULL;
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)
9272 if (atT <= strat->tl)
9274#ifdef ENTER_USE_MEMMOVE
9275 memmove(&(strat->
T[atT+1]), &(strat->
T[atT]),
9277 memmove(&(strat->
sevT[atT+1]), &(strat->
sevT[atT]),
9278 (strat->
tl-atT+1)*
sizeof(
unsigned long));
9280 for (
i=strat->
tl+1;
i>=atT+1;
i--)
9282#ifndef ENTER_USE_MEMMOVE
9283 strat->
T[
i] = strat->
T[
i-1];
9286 strat->
R[strat->
T[
i].i_r] = &(strat->
T[
i]);
9304 strat->
T[atT].max_exp =
NULL;
9307 strat->
R[strat->
tl] = &(strat->
T[atT]);
9308 strat->
T[atT].i_r = strat->
tl;
9315 for(
i=strat->
tl;
i>=0;
i--)
9345 (strat->
syzmax)*
sizeof(
unsigned long),
9347 *
sizeof(
unsigned long));
9350 if (atT < strat->syzl)
9352#ifdef ENTER_USE_MEMMOVE
9353 memmove(&(strat->
syz[atT+1]), &(strat->
syz[atT]),
9354 (strat->
syzl-atT+1)*
sizeof(poly));
9355 memmove(&(strat->
sevSyz[atT+1]), &(strat->
sevSyz[atT]),
9356 (strat->
syzl-atT+1)*
sizeof(
unsigned long));
9358 for (
i=strat->
syzl;
i>=atT+1;
i--)
9360#ifndef ENTER_USE_MEMMOVE
9371 strat->
syz[atT] =
p.sig;
9372 strat->
sevSyz[atT] =
p.sevSig;
9375 Print(
"element in strat->syz: %d--%d ",atT+1,strat->
syzmax);
9385 strat->
L[cc].sig, ~strat->
L[cc].sevSig,
currRing)
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)
10171 reduction_found=
TRUE;
10201 reduction_found=
TRUE;
10214 if ( reduction_found)
10302 for (
i=strat->
sl;
i>=low;
i--)
10304 int end_pos=strat->
sl;
10306 if (strat->
ak==0) end_pos=
i-1;
10308 if ((T_j !=
NULL)&&(T_j->p==strat->
S[
i]))
10326 Print(
"to (tailR) S[%d]:",
i);
10338 T_j->max_exp =
NULL;
10341 T_j->pCleardenom();
10381 Print(
"to (-tailR) S[%d]:",
i);
10443 if (newHCord <
HCord)
10447 Print(
"H(%d)",newHCord);
10454 Print(
"H(%d):",newHCord);
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;
10522 poly p1_max = (strat->
R[atR])->max_exp;
10523 poly p2_max = (strat->
R[strat->
S_2_R[atS]])->max_exp;
10542 ideal F =
idCopy(Forig);
10546 ideal monred =
idInit(1,1);
10553 if((posconst != -1) && (!
nIsZero(F->m[posconst]->coef)))
10563 for(
int i=0;
i<idelemQ;
i++)
10571 if((posconst != -1) && (!
nIsZero(monred->m[posconst]->coef)))
10573 pmon =
pCopy(monred->m[posconst]);
10588 II->m[
j++] =
prMapR(F->m[
i], nMap, origR, QQ_ring);
10590 II->m[
j++] =
prMapR(
Q->m[
i], nMap, origR, QQ_ring);
10597 if(II->m[
i] !=
NULL)
10598 II->m[
i+1] = II->m[
i];
10601 poly integer =
NULL;
10609 integer =
pHead(syz->m[
i]);
10616 pmon =
prMapR(integer, nMap2, QQ_ring, origR);
10630 poly mindegmon =
NULL;
10635 if(mindegmon ==
NULL)
10636 mindegmon =
pCopy(one->m[
i]);
10639 if(
p_Deg(one->m[
i], QQ_ring) <
p_Deg(mindegmon, QQ_ring))
10640 mindegmon =
pCopy(one->m[
i]);
10644 if(mindegmon !=
NULL)
10647 if(II->m[
i] !=
NULL)
10648 II->m[
i+1] = II->m[
i];
10649 II->m[0] =
pCopy(mindegmon);
10678 pmon =
prMapR(mindegmon, nMap2, QQ_ring, origR);
10707 poly pH =
h->GetP();
10711 for(
int i = 0;
i<=strat->
sl;
i++)
10721#ifdef HAVE_SHIFTBBA
10746#ifdef HAVE_SHIFTBBA
10774 h->SetLmCurrRing();
10775 if((deleted)&&(
h->p!=
NULL))
10783 poly hSig =
h->sig;
10784 poly pH =
h->GetP();
10788 for(
int i = 0;
i<=strat->
sl;
i++)
10799 if(sigMult!=
NULL &&
pLtCmp(hSig,sigMult) == 1)
10826 if(sigMult!=
NULL &&
pLtCmp(hSig,sigMult) == 1)
10857 h->SetLmCurrRing();
10966 if (expbound == 0) expbound = strat->
tailRing->bitmask << 1;
10983 new_tailRing->pFDeg =
currRing->pFDeg;
10984 new_tailRing->pLDeg =
currRing->pLDeg;
10988 Print(
"[%lu:%d", (
unsigned long) new_tailRing->bitmask, new_tailRing->ExpL_Size);
10997 for (
i=0;
i<=strat->
tl;
i++)
10999 strat->
T[
i].ShallowCopyDelete(new_tailRing, new_tailBin,
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);
11012 if ((L !=
NULL) && (L->tailRing != new_tailRing))
11015 L->ShallowCopyDelete(new_tailRing, p_shallow_copy_delete);
11021 L->tailRing = new_tailRing;
11024 L->max_exp = t_l->max_exp;
11028 if ((
T !=
NULL) && (
T->tailRing != new_tailRing &&
T->i_r < 0))
11029 T->ShallowCopyDelete(new_tailRing, new_tailBin, p_shallow_copy_delete);
11036 strat->
tailBin = new_tailBin;
11055 unsigned long l = 0;
11061 for (
i=0;
i<= strat->
Ll;
i++)
11065 for (
i=0;
i<=strat->
tl;
i++)
11093 res->block0 = (
int *)
omAlloc0((n+1)*
sizeof(
int));
11094 res->block1 = (
int *)
omAlloc0((n+1)*
sizeof(
int));
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");
11141 res->block0 = (
int *)
omAlloc0((n+2)*
sizeof(
int));
11142 res->block1 = (
int *)
omAlloc0((n+2)*
sizeof(
int));
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
11341Timings
for the different possibilities of posInT:
11342 T15 EDL DL EL L 1-2-3
11343Gonnet 43.26 42.30 38.34 41.98 38.40 100.04
11344Hairer_2_1 1.11 1.15 1.04 1.22 1.08 4.7
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
11351gerhard_3 2.73 2.83 2.93 2.64 3.12 6.24
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)
11388 int oo=set[
length].GetpFDeg();
11389 if ((oo < op) || ((oo==op) && (set[
length].
length < ol)))
11400 if (set[an].ecart > o)
11402 if (set[an].ecart == o)
11404 int oo=set[an].GetpFDeg();
11406 || ((oo==op) && (set[an].
pLength > ol)))
11412 if (set[
i].ecart > o)
11414 else if (set[
i].ecart == o)
11416 int oo=set[
i].GetpFDeg();
11418 || ((oo == op) && (set[
i].
pLength > ol)))
11432 if (
length==-1)
return 0;
11434 int op=
p.GetpFDeg();
11435 int ol =
p.GetpLength();
11437 int oo=set[
length].GetpFDeg();
11438 if ((oo < op) || ((oo==op) && (set[
length].
length < ol)))
11448 int oo=set[an].GetpFDeg();
11450 || ((oo==op) && (set[an].
pLength > ol)))
11455 int oo=set[
i].GetpFDeg();
11457 || ((oo == op) && (set[
i].
pLength > ol)))
11468 int ol =
p.GetpLength();
11482 if (set[an].
pLength>ol)
return an;
11504 else if (strat->
red==
redHoney) printf(
"redHoney\n");
11505 else if (strat->
red==
redEcart) printf(
"redEcart\n");
11506 else if (strat->
red==
redHomog) printf(
"redHomog\n");
11507 else if (strat->
red==
redLazy) printf(
"redLazy\n");
11509 else printf(
"%p\n",(
void*)strat->
red);
11510 printf(
"posInT: ");
11526#ifdef HAVE_MORE_POS_IN_T
11532 else printf(
"%p\n",(
void*)strat->
posInT);
11533 printf(
"posInL: ");
11550 else printf(
"%p\n",(
void*)strat->
posInL);
11551 printf(
"enterS: ");
11555 else printf(
"%p\n",(
void*)strat->
enterS);
11556 printf(
"initEcart: ");
11559 else printf(
"%p\n",(
void*)strat->
initEcart);
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",
11568 printf(
"chainCrit: ");
11571 else printf(
"%p\n",(
void*)strat->
chainCrit);
11572 printf(
"posInLDependsOnLength=%d\n",
11588 else printf(
"? (%lx)", (
long)
currRing->pLDeg);
11602 else printf(
"? (%lx)", (
long)strat->
tailRing->pLDeg);
11604 printf(
"currRing->pFDeg: ");
11611 else printf(
"? (%lx)", (
long)
currRing->pFDeg);
11619 printf(
"ecartWeights: ");
11641#ifdef HAVE_SHIFTBBA
11646 assume(ifromS <= strat->sl);
11745 PrintS(
"\n--- create strong gcd poly: ");
11748 Print(
"\n q (strat->S[%d]): ", ifromS);
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;
11783 if (atR >= 0 && shiftcount == 0 && ifromS >= 0)
11796 posx = strat->
posInL(strat->
L,strat->
Ll,&
h,strat);
11810#ifdef HAVE_SHIFTBBA
11837 int j,compare,compareCoeff;
11841 h.ecart=0;
h.length=0;
11873 for(
j = strat->
Bl;
j>=0;
j--)
11882 if ((strat->
fromQ==
NULL) || (isFromQ==0) || (qisFromQ==0))
11897 if ((strat->
fromQ==
NULL) || (isFromQ==0) || (qisFromQ==0))
11910 if ((strat->
fromQ==
NULL) || (isFromQ==0) || (qisFromQ==0))
12014 h.i_r1 = -1;
h.i_r2 = -1;
12023 if (atR >= 0 && shiftcount == 0 && ifromS >= 0)
12038 posx = strat->
posInL(strat->
B,strat->
Bl,&
h,strat);
12053#ifdef HAVE_SHIFTBBA
12063#ifdef HAVE_SHIFTBBA
12068 assume(q_inS < 0 || strat->S[q_inS] == q);
12078 if (strat->
fromQ !=
NULL && q_inS >= 0)
12079 q_isFromQ = strat->
fromQ[q_inS];
12081 BOOLEAN (*enterPair)(poly, poly, int, int,
kStrategy, int, int, int, int, int);
12088 int neededShift = p_lastVblock - ((
pGetComp(
p) > 0 ||
pGetComp(q) > 0) ? 0 : 1);
12089 int maxPossibleShift =
degbound - q_lastVblock;
12090 int maxShift =
si_min(neededShift, maxPossibleShift);
12091 int firstShift = (q ==
p ? 1 : 0);
12093 for (
int j = firstShift;
j <= maxShift;
j++)
12096 if (enterPair(qq,
p, ecartp, p_isFromQ, strat, -1, ecartq, q_isFromQ,
j, q_inS))
12108 for (
int j = p_lastVblock;
j <= maxPossibleShift;
j++)
12114 enterPair(qq,
p, ecartp, p_isFromQ, strat, -1, ecartq, q_isFromQ, p_lastVblock, q_inS);
12119 return delete_pair;
12123#ifdef HAVE_SHIFTBBA
12129 assume(p_inS < 0 || strat->S[p_inS] ==
p);
12138 if (strat->
fromQ !=
NULL && p_inS >= 0)
12139 p_isFromQ = strat->
fromQ[p_inS];
12143 assume(q_shift <= p_lastVblock);
12149 return enterOnePairShift(q,
p, ecartp, p_isFromQ, strat, -1, ecartq, q_isFromQ, q_shift, -1);
12163#ifdef HAVE_SHIFTBBA
12166#ifdef CRITERION_DEBUG
12171 poly lmq =
pHead(q);
12192 int qfromQ = qisFromQ;
12201 Lp.ecart=0; Lp.length=0;
12211#ifdef CRITERION_DEBUG
12219 if((!((ecartq>0)&&(ecart>0)))
12238#ifdef CRITERION_DEBUG
12244 Lp.ecart =
si_max(ecart,ecartq);
12245 if (strat->
fromT && (ecartq>ecart))
12248#ifdef CRITERION_DEBUG
12270 if ((strat->
fromQ==
NULL) || (isFromQ==0) || (qfromQ==0))
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
12328 if (strat->
fromT && (ecartq>ecart))
12331#ifdef CRITERION_DEBUG
12343 for(
j = strat->
Bl;
j>=0;
j--)
12349 if ((strat->
fromQ==
NULL) || (isFromQ==0) || (qfromQ==0))
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
12390 if ((strat->
fromQ!=
NULL) && (isFromQ!=0) && (qfromQ!=0))
12393#ifdef CRITERION_DEBUG
12452#ifdef CRITERION_DEBUG
12469 if ( (atR >= 0) && (shiftcount==0) && (ifromS >=0) )
12486 && (Lp.p->coef!=
NULL))
12490 l = strat->
posInL(strat->
B,strat->
Bl,&Lp,strat);
12492#ifdef CRITERION_DEBUG
12505#ifdef HAVE_SHIFTBBA
12511 if (h_lastVblock == 0)
return;
12522 int maxShift =
degbound - h_lastVblock;
12531 for (
i=0;
i<=maxShift;
i++)
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];
12568 else if ((isFromQ)&&(strat->
fromQ!=
NULL))
12571 for (
j=0;
j<=
k;
j++)
12576 poly
s = strat->
S[
j];
12583 for (
i=1;
i<=maxShift;
i++)
12587 for (
j=0;
j<=
k;
j++)
12591 poly
s = strat->
S[
j];
12593 if (
i < s_lastVblock || (
pGetComp(
s) > 0 &&
i == s_lastVblock))
12619 for (
j=0;
j<=
k;
j++)
12621 poly
s = strat->
S[
j];
12625 for (
i=1;
i<=maxShift;
i++)
12629 for (
j=0;
j<=
k;
j++)
12631 poly
s = strat->
S[
j];
12633 if (
i < s_lastVblock || (
pGetComp(
s) > 0 &&
i == s_lastVblock))
12648 if (
i < h_lastVblock)
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];
12704 for (
i=1;
i<=maxShift;
i++)
12707 for (
j=0;
j<=
k;
j++)
12712 poly
s = strat->
S[
j];
12714 if (
i <= s_lastVblock)
12729 if (
i <= h_lastVblock)
12763#ifdef HAVE_SHIFTBBA
12769 if (h_lastVblock == 0)
return;
12780 int maxShift =
degbound - h_lastVblock;
12789 for (
i=0;
i<=maxShift;
i++)
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];
12823 else if ((isFromQ)&&(strat->
fromQ!=
NULL))
12826 for (
j=0;
j<=
k;
j++)
12831 poly
s = strat->
S[
j];
12838 for (
i=1;
i<=maxShift;
i++)
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];
12863 for (
i=1;
i<=maxShift;
i++)
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];
12917 for (
i=1;
i<=maxShift;
i++)
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
12988 for (
int i = 1;
i <= maxPossibleShift;
i++)
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();
13034 With = &(strat->
T[
j]);
13039 if (With ==
NULL)
break;
13055 pNext(
h) = Ln.LmExtractAndIter();
13058 }
while (!Ln.IsNull());
13061 if (Ln.IsNull())
goto all_done;
13062 if (! withT) With_s.Init(
currRing);
13064 pNext(
h) = Ln.LmExtractAndIter();
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)
if(!FE_OPT_NO_SHELL_FLAG)
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)