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;
7763 pos = strat->
posInL(strat->
L,strat->
Ll,&
h,strat);
7795 strat->
S = strat->
Shdl->m;
7808 memset(strat->
fromQ,0,
i*
sizeof(
int));
7837 strat->
enterS(
h,pos,strat,-1);
7838 strat->
fromQ[pos]=1;
7946 for(
i=1;
i<=strat->
sl;
i++)
7958 strat->
syz = (poly *)
omAlloc(ps*
sizeof(poly));
7962#if defined(DEBUGF5) || defined(DEBUGF51)
7963 PrintS(
"------------- GENERATING SYZ RULES NEW ---------------\n");
8000 for (
k = 0;
k<
i;
k++)
8044 for (
k = 0;
k<strat->
sl+1;
k++)
8065 PrintS(
"Principal syzygies:\n");
8068 Print(
"ps %d\n",ps);
8069 PrintS(
"--------------------------------\n");
8079 PrintS(
"--------------------------------\n");
8103 strat->
S=strat->
Shdl->m;
8109 memset(strat->
fromQ,0,
i*
sizeof(
int));
8138 strat->
enterS(
h,pos,strat, strat->
tl+1);
8140 strat->
fromQ[pos]=1;
8168 strat->
enterS(
h,pos,strat, strat->
tl+1);
8210 h.is_normalized = 0;
8217 strat->
enterS(
h,pos,strat, strat->
tl+1);
8251 strat->
S=strat->
Shdl->m;
8257 memset(strat->
fromQ,0,
i*
sizeof(
int));
8286 strat->
enterS(
h,pos,strat, strat->
tl+1);
8288 strat->
fromQ[pos]=1;
8316 strat->
enterS(
h,pos,strat, strat->
tl+1);
8358 h.is_normalized = 0;
8365 strat->
enterS(
h,pos,strat, strat->
tl+1);
8387 unsigned long not_sev = ~ pGetShortExpVector(
h);
8389 while (
j <= maxIndex)
8406 if (!
pIsVector((*p).p) && ((*p).ecart != 0))
8413 h1 = r =
pCopy((*p).p);
8465 unsigned long not_sev = ~ pGetShortExpVector(
h);
8475 not_sev = ~ pGetShortExpVector(
h);
8490 unsigned long not_sev = ~ pGetShortExpVector(
h);
8492 while (
j <= maxIndex)
8499 not_sev = ~ pGetShortExpVector(
h);
8515 unsigned long not_sev = ~ pGetShortExpVector(
h);
8542 not_sev = ~ pGetShortExpVector(
h);
8546 while (
j <= maxIndex);
8587 if (
pCmp(redSi,strat->
S[
i])!=0)
8644 if (any_change)
reorderS(&suc,strat);
8649 for (
i=0;
i<=strat->
sl;
i++)
8699 else if (
pCmp((strat->
S)[
i],redSi)!=0)
8740 if (any_change)
reorderS(&suc,strat);
8741 else { suc=-1;
break; }
8752 for (
i=0;
i<=strat->
sl;
i++)
8780 if (suc!= -1)
updateS(toT,strat);
8800 *
sizeof(
unsigned long));
8827 strat->
Shdl->m=strat->
S;
8829 if (atS <= strat->sl)
8831#ifdef ENTER_USE_MEMMOVE
8832 memmove(&(strat->
S[atS+1]), &(strat->
S[atS]),
8833 (strat->
sl - atS + 1)*
sizeof(poly));
8834 memmove(&(strat->
ecartS[atS+1]), &(strat->
ecartS[atS]),
8835 (strat->
sl - atS + 1)*
sizeof(
int));
8836 memmove(&(strat->
sevS[atS+1]), &(strat->
sevS[atS]),
8837 (strat->
sl - atS + 1)*
sizeof(
unsigned long));
8838 memmove(&(strat->
S_2_R[atS+1]), &(strat->
S_2_R[atS]),
8839 (strat->
sl - atS + 1)*
sizeof(
int));
8841 memmove(&(strat->
lenS[atS+1]), &(strat->
lenS[atS]),
8842 (strat->
sl - atS + 1)*
sizeof(
int));
8844 memmove(&(strat->
lenSw[atS+1]), &(strat->
lenSw[atS]),
8847 for (
i=strat->
sl+1;
i>=atS+1;
i--)
8849 strat->
S[
i] = strat->
S[
i-1];
8855 for (
i=strat->
sl+1;
i>=atS+1;
i--)
8858 for (
i=strat->
sl+1;
i>=atS+1;
i--)
8864#ifdef ENTER_USE_MEMMOVE
8865 memmove(&(strat->
fromQ[atS+1]), &(strat->
fromQ[atS]),
8866 (strat->
sl - atS + 1)*
sizeof(
int));
8868 for (
i=strat->
sl+1;
i>=atS+1;
i--)
8873 strat->
fromQ[atS]=0;
8884 strat->
sevS[atS] =
p.sev;
8886 strat->
S_2_R[atS] = atR;
8896 for (
int i = maxPossibleShift;
i > 0;
i--)
8904 int atS =
posInS(strat, strat->
sl, qq.p, qq.ecart);
8923 *
sizeof(
unsigned long));
8927 *
sizeof(
unsigned long));
8955 strat->
Shdl->m=strat->
S;
8962 if (atS <= strat->sl)
8964#ifdef ENTER_USE_MEMMOVE
8965 memmove(&(strat->
S[atS+1]), &(strat->
S[atS]),
8966 (strat->
sl - atS + 1)*
sizeof(poly));
8967 memmove(&(strat->
sig[atS+1]), &(strat->
sig[atS]),
8968 (strat->
sl - atS + 1)*
sizeof(poly));
8969 memmove(&(strat->
sevSig[atS+1]), &(strat->
sevSig[atS]),
8970 (strat->
sl - atS + 1)*
sizeof(
unsigned long));
8971 memmove(&(strat->
ecartS[atS+1]), &(strat->
ecartS[atS]),
8972 (strat->
sl - atS + 1)*
sizeof(
int));
8973 memmove(&(strat->
sevS[atS+1]), &(strat->
sevS[atS]),
8974 (strat->
sl - atS + 1)*
sizeof(
unsigned long));
8975 memmove(&(strat->
S_2_R[atS+1]), &(strat->
S_2_R[atS]),
8976 (strat->
sl - atS + 1)*
sizeof(
int));
8978 memmove(&(strat->
lenS[atS+1]), &(strat->
lenS[atS]),
8979 (strat->
sl - atS + 1)*
sizeof(
int));
8981 memmove(&(strat->
lenSw[atS+1]), &(strat->
lenSw[atS]),
8984 for (
i=strat->
sl+1;
i>=atS+1;
i--)
8986 strat->
S[
i] = strat->
S[
i-1];
8994 for (
i=strat->
sl+1;
i>=atS+1;
i--)
8997 for (
i=strat->
sl+1;
i>=atS+1;
i--)
9003#ifdef ENTER_USE_MEMMOVE
9004 memmove(&(strat->
fromQ[atS+1]), &(strat->
fromQ[atS]),
9005 (strat->
sl - atS + 1)*
sizeof(
int));
9007 for (
i=strat->
sl+1;
i>=atS+1;
i--)
9012 strat->
fromQ[atS]=0;
9016 strat->
S[atS] =
p.p;
9017 strat->
sig[atS] =
p.sig;
9023 strat->
sevS[atS] =
p.sev;
9033 strat->
sevSig[atS] =
p.sevSig;
9036 strat->
S_2_R[atS] = atR;
9040 Print(
"--- LIST S: %d ---\n",strat->
sl);
9041 for(
k=0;
k<=strat->
sl;
k++)
9045 PrintS(
"--- LIST S END ---\n");
9071 else strat->
P.sev=0;
9079 poly tp = strat->
T[tj].p;
9084 for (
j = 0;
j <= strat->
sl; ++
j)
9098 pos =
posInS(strat, strat->
sl,
p.p,
p.ecart);
9104 for (
i = 0;
i <= strat->
Ll; ++
i)
9128 strat->
enterS(
p, pos, strat, strat->
tl);
9167 for(
i=strat->
tl;
i>=0;
i--)
9169 if (
p.p==strat->
T[
i].p)
9171 printf(
"already in T at pos %d of %d, atT=%d\n",
i,strat->
tl,atT);
9177#ifdef HAVE_TAIL_RING
9180 p.t_p=
p.GetLmTailRing();
9186 if (strat->
tl == strat->
tmax-1)
9188 if (atT <= strat->tl)
9190#ifdef ENTER_USE_MEMMOVE
9191 memmove(&(strat->
T[atT+1]), &(strat->
T[atT]),
9193 memmove(&(strat->
sevT[atT+1]), &(strat->
sevT[atT]),
9194 (strat->
tl-atT+1)*
sizeof(
unsigned long));
9196 for (
i=strat->
tl+1;
i>=atT+1;
i--)
9198#ifndef ENTER_USE_MEMMOVE
9199 strat->
T[
i] = strat->
T[
i-1];
9202 strat->
R[strat->
T[
i].i_r] = &(strat->
T[
i]);
9210 if (!(
currRing->isLPring &&
p.shift > 0))
9226 strat->
T[atT].max_exp =
NULL;
9229 strat->
R[strat->
tl] = &(strat->
T[atT]);
9230 strat->
T[atT].i_r = strat->
tl;
9254 for(
i=strat->
tl;
i>=0;
i--)
9256 if (
p.p==strat->
T[
i].p)
9258 printf(
"already in T at pos %d of %d, atT=%d\n",
i,strat->
tl,atT);
9264#ifdef HAVE_TAIL_RING
9267 p.t_p=
p.GetLmTailRing();
9273 if (strat->
tl == strat->
tmax-1)
9275 if (atT <= strat->tl)
9277#ifdef ENTER_USE_MEMMOVE
9278 memmove(&(strat->
T[atT+1]), &(strat->
T[atT]),
9280 memmove(&(strat->
sevT[atT+1]), &(strat->
sevT[atT]),
9281 (strat->
tl-atT+1)*
sizeof(
unsigned long));
9283 for (
i=strat->
tl+1;
i>=atT+1;
i--)
9285#ifndef ENTER_USE_MEMMOVE
9286 strat->
T[
i] = strat->
T[
i-1];
9289 strat->
R[strat->
T[
i].i_r] = &(strat->
T[
i]);
9307 strat->
T[atT].max_exp =
NULL;
9310 strat->
R[strat->
tl] = &(strat->
T[atT]);
9311 strat->
T[atT].i_r = strat->
tl;
9318 for(
i=strat->
tl;
i>=0;
i--)
9348 (strat->
syzmax)*
sizeof(
unsigned long),
9350 *
sizeof(
unsigned long));
9353 if (atT < strat->syzl)
9355#ifdef ENTER_USE_MEMMOVE
9356 memmove(&(strat->
syz[atT+1]), &(strat->
syz[atT]),
9357 (strat->
syzl-atT+1)*
sizeof(poly));
9358 memmove(&(strat->
sevSyz[atT+1]), &(strat->
sevSyz[atT]),
9359 (strat->
syzl-atT+1)*
sizeof(
unsigned long));
9361 for (
i=strat->
syzl;
i>=atT+1;
i--)
9363#ifndef ENTER_USE_MEMMOVE
9374 strat->
syz[atT] =
p.sig;
9375 strat->
sevSyz[atT] =
p.sevSig;
9378 Print(
"element in strat->syz: %d--%d ",atT+1,strat->
syzmax);
9388 strat->
L[cc].sig, ~strat->
L[cc].sevSig,
currRing)
9400 PrintS(
"--- Syzygies ---\n");
9403 PrintS(
"--------------------------------\n");
9409 PrintS(
"--------------------------------\n");
9489 if (strat->
homog)
PrintS(
"ideal/module is homogeneous\n");
9490 else PrintS(
"ideal/module is not homogeneous\n");
9558 if (strat->
homog)
PrintS(
"ideal/module is homogeneous\n");
9559 else PrintS(
"ideal/module is not homogeneous\n");
10094 if ((r->m[
l]!=
NULL)
10101 if ((
Q->m[q]!=
NULL)
10124 if ((r->m[
l]!=
NULL)
10131 if ((
Q->m[q]!=
NULL)
10174 reduction_found=
TRUE;
10204 reduction_found=
TRUE;
10217 if ( reduction_found)
10305 for (
i=strat->
sl;
i>=low;
i--)
10307 int end_pos=strat->
sl;
10309 if (strat->
ak==0) end_pos=
i-1;
10311 if ((T_j !=
NULL)&&(T_j->p==strat->
S[
i]))
10329 Print(
"to (tailR) S[%d]:",
i);
10341 T_j->max_exp =
NULL;
10344 T_j->pCleardenom();
10384 Print(
"to (-tailR) S[%d]:",
i);
10481 assume(L->i_r1 >= -1 && L->i_r1 <= strat->
tl);
10482 assume(L->i_r2 >= -1 && L->i_r2 <= strat->
tl);
10487 if ((L->i_r1 == -1) || (L->i_r2 == -1) )
10492 if ((L->i_r1>=0)&&(strat->
R[L->i_r1]!=
NULL)) p1_max = (strat->
R[L->i_r1])->max_exp;
10494 if ((L->i_r2>=0)&&(strat->
R[L->i_r2]!=
NULL)) p2_max = (strat->
R[L->i_r2])->max_exp;
10519 poly p1_max = (strat->
R[atR])->max_exp;
10520 poly p2_max = (strat->
R[strat->
S_2_R[atS]])->max_exp;
10539 ideal F =
idCopy(Forig);
10543 ideal monred =
idInit(1,1);
10550 if((posconst != -1) && (!
nIsZero(F->m[posconst]->coef)))
10560 for(
int i=0;
i<idelemQ;
i++)
10568 if((posconst != -1) && (!
nIsZero(monred->m[posconst]->coef)))
10570 pmon =
pCopy(monred->m[posconst]);
10585 II->m[
j++] =
prMapR(F->m[
i], nMap, origR, QQ_ring);
10587 II->m[
j++] =
prMapR(
Q->m[
i], nMap, origR, QQ_ring);
10594 if(II->m[
i] !=
NULL)
10595 II->m[
i+1] = II->m[
i];
10598 poly integer =
NULL;
10606 integer =
pHead(syz->m[
i]);
10613 pmon =
prMapR(integer, nMap2, QQ_ring, origR);
10627 poly mindegmon =
NULL;
10632 if(mindegmon ==
NULL)
10633 mindegmon =
pCopy(one->m[
i]);
10636 if(
p_Deg(one->m[
i], QQ_ring) <
p_Deg(mindegmon, QQ_ring))
10637 mindegmon =
pCopy(one->m[
i]);
10641 if(mindegmon !=
NULL)
10644 if(II->m[
i] !=
NULL)
10645 II->m[
i+1] = II->m[
i];
10646 II->m[0] =
pCopy(mindegmon);
10675 pmon =
prMapR(mindegmon, nMap2, QQ_ring, origR);
10704 poly pH =
h->GetP();
10708 for(
int i = 0;
i<=strat->
sl;
i++)
10718#ifdef HAVE_SHIFTBBA
10743#ifdef HAVE_SHIFTBBA
10771 h->SetLmCurrRing();
10772 if((deleted)&&(
h->p!=
NULL))
10780 poly hSig =
h->sig;
10781 poly pH =
h->GetP();
10785 for(
int i = 0;
i<=strat->
sl;
i++)
10796 if(sigMult!=
NULL &&
pLtCmp(hSig,sigMult) == 1)
10823 if(sigMult!=
NULL &&
pLtCmp(hSig,sigMult) == 1)
10854 h->SetLmCurrRing();
10963 if (expbound == 0) expbound = strat->
tailRing->bitmask << 1;
10980 new_tailRing->pFDeg =
currRing->pFDeg;
10981 new_tailRing->pLDeg =
currRing->pLDeg;
10985 Print(
"[%lu:%d", (
unsigned long) new_tailRing->bitmask, new_tailRing->ExpL_Size);
10994 for (
i=0;
i<=strat->
tl;
i++)
10996 strat->
T[
i].ShallowCopyDelete(new_tailRing, new_tailBin,
10997 p_shallow_copy_delete);
10999 for (
i=0;
i<=strat->
Ll;
i++)
11003 strat->
L[
i].ShallowCopyDelete(new_tailRing, p_shallow_copy_delete);
11005 if ((strat->
P.t_p !=
NULL) ||
11007 strat->
P.ShallowCopyDelete(new_tailRing, p_shallow_copy_delete);
11009 if ((L !=
NULL) && (L->tailRing != new_tailRing))
11012 L->ShallowCopyDelete(new_tailRing, p_shallow_copy_delete);
11018 L->tailRing = new_tailRing;
11021 L->max_exp = t_l->max_exp;
11025 if ((
T !=
NULL) && (
T->tailRing != new_tailRing &&
T->i_r < 0))
11026 T->ShallowCopyDelete(new_tailRing, new_tailBin, p_shallow_copy_delete);
11033 strat->
tailBin = new_tailBin;
11052 unsigned long l = 0;
11058 for (
i=0;
i<= strat->
Ll;
i++)
11062 for (
i=0;
i<=strat->
tl;
i++)
11090 res->block0 = (
int *)
omAlloc0((n+1)*
sizeof(int));
11091 res->block1 = (
int *)
omAlloc0((n+1)*
sizeof(int));
11092 int **wvhdl = (
int **)
omAlloc0((n+1)*
sizeof(
int*));
11093 res->wvhdl = wvhdl;
11094 for (
int i=1;
i<n;
i++)
11096 res->order[
i] = r->order[
i-1];
11097 res->block0[
i] = r->block0[
i-1];
11098 res->block1[
i] = r->block1[
i-1];
11099 res->wvhdl[
i] = r->wvhdl[
i-1];
11119 WarnS(
"error in nc_rComplete");
11138 res->block0 = (
int *)
omAlloc0((n+2)*
sizeof(int));
11139 res->block1 = (
int *)
omAlloc0((n+2)*
sizeof(int));
11140 int **wvhdl = (
int **)
omAlloc0((n+2)*
sizeof(
int*));
11141 res->wvhdl = wvhdl;
11142 for (
int i=2;
i<n+2;
i++)
11144 res->order[
i] = r->order[
i-2];
11145 res->block0[
i] = r->block0[
i-2];
11146 res->block1[
i] = r->block1[
i-2];
11147 res->wvhdl[
i] = r->wvhdl[
i-2];
11152 res->block0[0] = 1;
11154 for (
int i=0;
i<
res->N; ++
i)
11155 res->wvhdl[0][
i] = 1;
11175 WarnS(
"error in nc_rComplete");
11312#ifdef HAVE_TAIL_BIN
11337Timings
for the different possibilities of posInT:
11338 T15 EDL DL EL L 1-2-3
11339Gonnet 43.26 42.30 38.34 41.98 38.40 100.04
11340Hairer_2_1 1.11 1.15 1.04 1.22 1.08 4.7
11341Twomat3 1.62 1.69 1.70 1.65 1.54 11.32
11342ahml 4.48 4.03 4.03 4.38 4.96 26.50
11343c7 15.02 13.98 15.16 13.24 17.31 47.89
11344c8 505.09 407.46 852.76 413.21 499.19 n/a
11345f855 12.65 9.27 14.97 8.78 14.23 33.12
11346gametwo6 11.47 11.35 14.57 11.20 12.02 35.07
11347gerhard_3 2.73 2.83 2.93 2.64 3.12 6.24
11348ilias13 22.89 22.46 24.62 20.60 23.34 53.86
11349noon8 40.68 37.02 37.99 36.82 35.59 877.16
11350rcyclic_19 48.22 42.29 43.99 45.35 51.51 204.29
11351rkat9 82.37 79.46 77.20 77.63 82.54 267.92
11352schwarz_11 16.46 16.81 16.76 16.81 16.72 35.56
11353test016 16.39 14.17 14.40 13.50 14.26 34.07
11354test017 34.70 36.01 33.16 35.48 32.75 71.45
11355test042 10.76 10.99 10.27 11.57 10.45 23.04
11356test058 6.78 6.75 6.51 6.95 6.22 9.47
11357test066 10.71 10.94 10.76 10.61 10.56 19.06
11358test073 10.75 11.11 10.17 10.79 8.63 58.10
11359test086 12.23 11.81 12.88 12.24 13.37 66.68
11360test103 5.05 4.80 5.47 4.64 4.89 11.90
11361test154 12.96 11.64 13.51 12.46 14.61 36.35
11362test162 65.27 64.01 67.35 59.79 67.54 196.46
11363test164 7.50 6.50 7.68 6.70 7.96 17.13
11364virasoro 3.39 3.50 3.35 3.47 3.70 7.66
11374 if (
length==-1)
return 0;
11377 int op=
p.GetpFDeg();
11378 int ol =
p.GetpLength();
11380 if (set[
length].ecart < o)
11382 if (set[
length].ecart == o)
11384 int oo=set[
length].GetpFDeg();
11385 if ((oo < op) || ((oo==op) && (set[
length].
length < ol)))
11396 if (set[an].ecart > o)
11398 if (set[an].ecart == o)
11400 int oo=set[an].GetpFDeg();
11402 || ((oo==op) && (set[an].
pLength > ol)))
11408 if (set[
i].ecart > o)
11410 else if (set[
i].ecart == o)
11412 int oo=set[
i].GetpFDeg();
11414 || ((oo == op) && (set[
i].
pLength > ol)))
11428 if (
length==-1)
return 0;
11430 int op=
p.GetpFDeg();
11431 int ol =
p.GetpLength();
11433 int oo=set[
length].GetpFDeg();
11434 if ((oo < op) || ((oo==op) && (set[
length].
length < ol)))
11444 int oo=set[an].GetpFDeg();
11446 || ((oo==op) && (set[an].
pLength > ol)))
11451 int oo=set[
i].GetpFDeg();
11453 || ((oo == op) && (set[
i].
pLength > ol)))
11464 int ol =
p.GetpLength();
11478 if (set[an].
pLength>ol)
return an;
11500 else if (strat->
red==
redHoney) printf(
"redHoney\n");
11501 else if (strat->
red==
redEcart) printf(
"redEcart\n");
11502 else if (strat->
red==
redHomog) printf(
"redHomog\n");
11503 else if (strat->
red==
redLazy) printf(
"redLazy\n");
11505 else printf(
"%p\n",(
void*)strat->
red);
11506 printf(
"posInT: ");
11522#ifdef HAVE_MORE_POS_IN_T
11528 else printf(
"%p\n",(
void*)strat->
posInT);
11529 printf(
"posInL: ");
11546 else printf(
"%p\n",(
void*)strat->
posInL);
11547 printf(
"enterS: ");
11551 else printf(
"%p\n",(
void*)strat->
enterS);
11552 printf(
"initEcart: ");
11555 else printf(
"%p\n",(
void*)strat->
initEcart);
11556 printf(
"initEcartPair: ");
11560 printf(
"homog=%d, LazyDegree=%d, LazyPass=%d, ak=%d,\n",
11562 printf(
"honey=%d, sugarCrit=%d, Gebauer=%d, noTailReduction=%d, use_buckets=%d\n",
11564 printf(
"chainCrit: ");
11567 else printf(
"%p\n",(
void*)strat->
chainCrit);
11568 printf(
"posInLDependsOnLength=%d\n",
11584 else printf(
"? (%lx)", (
long)
currRing->pLDeg);
11598 else printf(
"? (%lx)", (
long)strat->
tailRing->pLDeg);
11600 printf(
"currRing->pFDeg: ");
11607 else printf(
"? (%lx)", (
long)
currRing->pFDeg);
11615 printf(
"ecartWeights: ");
11637#ifdef HAVE_SHIFTBBA
11642 assume(ifromS <= strat->sl);
11741 PrintS(
"\n--- create strong gcd poly: ");
11744 Print(
"\n q (strat->S[%d]): ", ifromS);
11750 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);
11772 h.i_r1 = -1;
h.i_r2 = -1;
11779 if (atR >= 0 && shiftcount == 0 && ifromS >= 0)
11792 posx = strat->
posInL(strat->
L,strat->
Ll,&
h,strat);
11806#ifdef HAVE_SHIFTBBA
11833 int j,compare,compareCoeff;
11837 h.ecart=0;
h.length=0;
11869 for(
j = strat->
Bl;
j>=0;
j--)
11878 if ((strat->
fromQ==
NULL) || (isFromQ==0) || (qisFromQ==0))
11893 if ((strat->
fromQ==
NULL) || (isFromQ==0) || (qisFromQ==0))
11906 if ((strat->
fromQ==
NULL) || (isFromQ==0) || (qisFromQ==0))
12010 h.i_r1 = -1;
h.i_r2 = -1;
12019 if (atR >= 0 && shiftcount == 0 && ifromS >= 0)
12034 posx = strat->
posInL(strat->
B,strat->
Bl,&
h,strat);
12049#ifdef HAVE_SHIFTBBA
12059#ifdef HAVE_SHIFTBBA
12064 assume(q_inS < 0 || strat->S[q_inS] == q);
12074 if (strat->
fromQ !=
NULL && q_inS >= 0)
12075 q_isFromQ = strat->
fromQ[q_inS];
12077 BOOLEAN (*enterPair)(poly, poly, int, int,
kStrategy, int, int, int, int, int);
12084 int neededShift = p_lastVblock - ((
pGetComp(
p) > 0 ||
pGetComp(q) > 0) ? 0 : 1);
12085 int maxPossibleShift =
degbound - q_lastVblock;
12086 int maxShift =
si_min(neededShift, maxPossibleShift);
12087 int firstShift = (q ==
p ? 1 : 0);
12089 for (
int j = firstShift;
j <= maxShift;
j++)
12092 if (enterPair(qq,
p, ecartp, p_isFromQ, strat, -1, ecartq, q_isFromQ,
j, q_inS))
12104 for (
int j = p_lastVblock;
j <= maxPossibleShift;
j++)
12110 enterPair(qq,
p, ecartp, p_isFromQ, strat, -1, ecartq, q_isFromQ, p_lastVblock, q_inS);
12115 return delete_pair;
12119#ifdef HAVE_SHIFTBBA
12125 assume(p_inS < 0 || strat->S[p_inS] ==
p);
12134 if (strat->
fromQ !=
NULL && p_inS >= 0)
12135 p_isFromQ = strat->
fromQ[p_inS];
12139 assume(q_shift <= p_lastVblock);
12145 return enterOnePairShift(q,
p, ecartp, p_isFromQ, strat, -1, ecartq, q_isFromQ, q_shift, -1);
12159#ifdef HAVE_SHIFTBBA
12162#ifdef CRITERION_DEBUG
12167 poly lmq =
pHead(q);
12188 int qfromQ = qisFromQ;
12197 Lp.ecart=0; Lp.length=0;
12207#ifdef CRITERION_DEBUG
12215 if((!((ecartq>0)&&(ecart>0)))
12234#ifdef CRITERION_DEBUG
12240 Lp.ecart =
si_max(ecart,ecartq);
12241 if (strat->
fromT && (ecartq>ecart))
12244#ifdef CRITERION_DEBUG
12266 if ((strat->
fromQ==
NULL) || (isFromQ==0) || (qfromQ==0))
12269#ifdef CRITERION_DEBUG
12272 Print(
"--- chain crit using B[%d].lcm=%s\n",
j,
pString(strat->
B[
j].lcm));
12283#ifdef CRITERION_DEBUG
12286 Print(
"--- chain crit using pair to remove B[%d].lcm=%s\n",
j,
pString(strat->
B[
j].lcm));
12319#ifdef CRITERION_DEBUG
12324 if (strat->
fromT && (ecartq>ecart))
12327#ifdef CRITERION_DEBUG
12339 for(
j = strat->
Bl;
j>=0;
j--)
12345 if ((strat->
fromQ==
NULL) || (isFromQ==0) || (qfromQ==0))
12348#ifdef CRITERION_DEBUG
12351 Print(
"--- chain crit using B[%d].lcm=%s\n",
j,
pString(strat->
B[
j].lcm));
12361#ifdef CRITERION_DEBUG
12364 Print(
"--- chain crit using pair to remove B[%d].lcm=%s\n",
j,
pString(strat->
B[
j].lcm));
12381#ifdef CRITERION_DEBUG
12386 if ((strat->
fromQ!=
NULL) && (isFromQ!=0) && (qfromQ!=0))
12389#ifdef CRITERION_DEBUG
12448#ifdef CRITERION_DEBUG
12465 if ( (atR >= 0) && (shiftcount==0) && (ifromS >=0) )
12482 && (Lp.p->coef!=
NULL))
12486 l = strat->
posInL(strat->
B,strat->
Bl,&Lp,strat);
12488#ifdef CRITERION_DEBUG
12501#ifdef HAVE_SHIFTBBA
12507 if (h_lastVblock == 0)
return;
12518 int maxShift =
degbound - h_lastVblock;
12527 for (
i=0;
i<=maxShift;
i++)
12531 for (
j=0;
j<=
k;
j++)
12536 poly
s = strat->
S[
j];
12547 for (
j=0;
j<=
k;
j++)
12549 poly
s = strat->
S[
j];
12564 else if ((isFromQ)&&(strat->
fromQ!=
NULL))
12567 for (
j=0;
j<=
k;
j++)
12572 poly
s = strat->
S[
j];
12579 for (
i=1;
i<=maxShift;
i++)
12583 for (
j=0;
j<=
k;
j++)
12587 poly
s = strat->
S[
j];
12589 if (
i < s_lastVblock || (
pGetComp(
s) > 0 &&
i == s_lastVblock))
12615 for (
j=0;
j<=
k;
j++)
12617 poly
s = strat->
S[
j];
12621 for (
i=1;
i<=maxShift;
i++)
12625 for (
j=0;
j<=
k;
j++)
12627 poly
s = strat->
S[
j];
12629 if (
i < s_lastVblock || (
pGetComp(
s) > 0 &&
i == s_lastVblock))
12644 if (
i < h_lastVblock)
12668 for (
j=0;
j<=
k;
j++)
12673 poly
s = strat->
S[
j];
12690 for (
j=0;
j<=
k;
j++)
12695 poly
s = strat->
S[
j];
12700 for (
i=1;
i<=maxShift;
i++)
12703 for (
j=0;
j<=
k;
j++)
12708 poly
s = strat->
S[
j];
12710 if (
i <= s_lastVblock)
12725 if (
i <= h_lastVblock)
12759#ifdef HAVE_SHIFTBBA
12765 if (h_lastVblock == 0)
return;
12776 int maxShift =
degbound - h_lastVblock;
12785 for (
i=0;
i<=maxShift;
i++)
12788 for (
j=0;
j<=
k;
j++)
12793 poly
s = strat->
S[
j];
12802 for (
j=0;
j<=
k;
j++)
12804 poly
s = strat->
S[
j];
12819 else if ((isFromQ)&&(strat->
fromQ!=
NULL))
12822 for (
j=0;
j<=
k;
j++)
12827 poly
s = strat->
S[
j];
12834 for (
i=1;
i<=maxShift;
i++)
12837 for (
j=0;
j<=
k;
j++)
12841 poly
s = strat->
S[
j];
12852 for (
j=0;
j<=
k;
j++)
12854 poly
s = strat->
S[
j];
12859 for (
i=1;
i<=maxShift;
i++)
12863 for (
j=0;
j<=
k;
j++)
12865 poly
s = strat->
S[
j];
12880 for (
j=0;
j<=
k;
j++)
12886 poly
s = strat->
S[
j];
12903 for (
j=0;
j<=
k;
j++)
12908 poly
s = strat->
S[
j];
12913 for (
i=1;
i<=maxShift;
i++)
12916 for (
j=0;
j<=
k;
j++)
12921 poly
s = strat->
S[
j];
12943#ifdef HAVE_SHIFTBBA
12952 if ( (!strat->
fromT)
12973#ifdef HAVE_SHIFTBBA
12984 for (
int i = 1;
i <= maxPossibleShift;
i++)
12996#ifdef HAVE_SHIFTBBA
13003 p =
h = L->GetLmTailRing();
13005 return L->GetLmCurrRing();
13012 Ln.pLength = L->GetpLength() - 1;
13020 while(!Ln.IsNull())
13024 Ln.SetShortExpVector();
13030 With = &(strat->
T[
j]);
13035 if (With ==
NULL)
break;
13051 pNext(
h) = Ln.LmExtractAndIter();
13054 }
while (!Ln.IsNull());
13057 if (Ln.IsNull())
goto all_done;
13058 if (! withT) With_s.Init(
currRing);
13060 pNext(
h) = Ln.LmExtractAndIter();
13075 return L->GetLmCurrRing();
static int si_max(const int a, const int b)
static int si_min(const int a, const int b)
static CanonicalForm bound(const CFMatrix &M)
KINLINE poly kNoetherTail()
void(* chainCrit)(poly p, int ecart, kStrategy strat)
pFDegProc pOrigFDeg_TailRing
BOOLEAN(* rewCrit1)(poly sig, unsigned long not_sevSig, poly lm, kStrategy strat, int start)
BOOLEAN(* rewCrit3)(poly sig, unsigned long not_sevSig, poly lm, kStrategy strat, int start)
int(* posInL)(const LSet set, const int length, LObject *L, const kStrategy strat)
KINLINE TObject * s_2_t(int i)
void(* initEcartPair)(LObject *h, poly f, poly g, int ecartF, int ecartG)
BOOLEAN(* syzCrit)(poly sig, unsigned long not_sevSig, kStrategy strat)
pShallowCopyDeleteProc p_shallow_copy_delete
void(* enterS)(LObject &h, int pos, kStrategy strat, int atR)
char completeReduce_retry
void(* initEcart)(TObject *L)
KINLINE TObject * S_2_T(int i)
void(* enterOnePair)(int i, poly p, int ecart, int isFromQ, kStrategy strat, int atR)
int(* posInT)(const TSet T, const int tl, LObject &h)
int(* red)(LObject *L, kStrategy strat)
char posInLDependsOnLength
int(* posInLSba)(const LSet set, const int length, LObject *L, const kStrategy strat)
pLDegProc pOrigLDeg_TailRing
static FORCE_INLINE BOOLEAN nCoeff_is_Z(const coeffs r)
@ n_Q
rational (GMP) numbers
static FORCE_INLINE number n_Gcd(number a, number b, const coeffs r)
in Z: return the gcd of 'a' and 'b' in Z/nZ, Z/2^kZ: computed as in the case Z in Z/pZ,...
static FORCE_INLINE BOOLEAN n_IsUnit(number n, const coeffs r)
TRUE iff n has a multiplicative inverse in the given coeff field/ring r.
static FORCE_INLINE number n_Ann(number a, const coeffs r)
if r is a ring with zero divisors, return an annihilator!=0 of b otherwise return NULL
static FORCE_INLINE nMapFunc n_SetMap(const coeffs src, const coeffs dst)
set the mapping function pointers for translating numbers from src to dst
coeffs nInitChar(n_coeffType t, void *parameter)
one-time initialisations for new coeffs in case of an error return NULL
static FORCE_INLINE void n_Delete(number *p, const coeffs r)
delete 'p'
static FORCE_INLINE number n_Lcm(number a, number b, const coeffs r)
in Z: return the lcm of 'a' and 'b' in Z/nZ, Z/2^kZ: computed as in the case Z in Z/pZ,...
static FORCE_INLINE number n_ExtGcd(number a, number b, number *s, number *t, const coeffs r)
beware that ExtGCD is only relevant for a few chosen coeff. domains and may perform something unexpec...
static FORCE_INLINE number n_Init(long i, const coeffs r)
a number representing i in the given coeff field/ring r
static FORCE_INLINE number n_IntMod(number a, number b, const coeffs r)
for r a field, return n_Init(0,r) always: n_Div(a,b,r)*b+n_IntMod(a,b,r)==a n_IntMod(a,...
static FORCE_INLINE BOOLEAN n_DivBy(number a, number b, const coeffs r)
test whether 'a' is divisible 'b'; for r encoding a field: TRUE iff 'b' does not represent zero in Z:...
static FORCE_INLINE int n_DivComp(number a, number b, const coeffs r)
number(* nMapFunc)(number a, const coeffs src, const coeffs dst)
maps "a", which lives in src, into dst
void nKillChar(coeffs r)
undo all initialisations
const CanonicalForm int s
int comp(const CanonicalForm &A, const CanonicalForm &B)
compare polynomials
static int min(int a, int b)
static int max(int a, int b)
void scComputeHC(ideal S, ideal Q, int ak, poly &hEdge)
ideal idSyzygies(ideal h1, tHomog h, intvec **w, BOOLEAN setSyzComp, BOOLEAN setRegularity, int *deg, GbVariant alg)
#define idDelete(H)
delete an ideal
BOOLEAN idInsertPoly(ideal h1, poly h2)
insert h2 into h1 (if h2 is not the zero polynomial) return TRUE iff h2 was indeed inserted
BOOLEAN idIs0(ideal h)
returns true if h is the zero ideal
#define idPosConstant(I)
index of generator with leading term in ground ring (if any); otherwise -1
static BOOLEAN length(leftv result, leftv arg)
KINLINE poly k_LmInit_currRing_2_tailRing(poly p, ring tailRing, omBin tailBin)
KINLINE void k_GetStrongLeadTerms(const poly p1, const poly p2, const ring leadRing, poly &m1, poly &m2, poly &lcm, const ring tailRing)
KINLINE int ksReducePolyTailLC_Z(LObject *PR, TObject *PW, LObject *Red)
KINLINE poly ksOldSpolyRed(poly p1, poly p2, poly spNoether)
KINLINE TObject ** initR()
KINLINE int ksReducePolyTail(LObject *PR, TObject *PW, LObject *Red)
KINLINE poly ksOldSpolyRedNew(poly p1, poly p2, poly spNoether)
KINLINE void clearS(poly p, unsigned long p_sev, int *at, int *k, kStrategy strat)
KINLINE BOOLEAN k_GetLeadTerms(const poly p1, const poly p2, const ring p_r, poly &m1, poly &m2, const ring m_r)
KINLINE int ksReducePolyTail_Z(LObject *PR, TObject *PW, LObject *Red)
KINLINE unsigned long * initsevT()
int redLiftstd(LObject *h, kStrategy strat)
BOOLEAN kbTest(kBucket_pt bucket)
Tests.
void kBucketDestroy(kBucket_pt *bucket_pt)
int ksCheckCoeff(number *a, number *b, const coeffs r)
BOOLEAN pCompareChainPart(poly p, poly p1, poly p2, poly lcm, const ring R)
BOOLEAN pCompareChain(poly p, poly p1, poly p2, poly lcm, const ring R)
Returns TRUE if.
poly ksCreateShortSpoly(poly p1, poly p2, ring tailRing)
long kHomModDeg(poly p, const ring r)
int posInL10(const LSet set, const int length, LObject *p, const kStrategy strat)
poly kNF(ideal F, ideal Q, poly p, int syzComp, int lazyReduce)
ideal kStd(ideal F, ideal Q, tHomog h, intvec **w, intvec *hilb, int syzComp, int newIdeal, intvec *vw, s_poly_proc_t sp)
int kFindDivisibleByInT_Z(const kStrategy strat, const LObject *L, const int start)
int redHoney(LObject *h, kStrategy strat)
int redHomog(LObject *h, kStrategy strat)
int redLazy(LObject *h, kStrategy strat)
poly redNF(poly h, int &max_ind, int nonorm, kStrategy strat)
int redRing(LObject *h, kStrategy strat)
int kFindDivisibleByInT(const kStrategy strat, const LObject *L, const int start)
return -1 if no divisor is found number of first divisor in T, otherwise
void initSbaPos(kStrategy strat)
void message(int i, int *reduc, int *olddeg, kStrategy strat, int red_result)
poly redtail(LObject *L, int end_pos, kStrategy strat)
int posInL17Ring(const LSet set, const int length, LObject *p, const kStrategy)
int posInL17_cRing(const LSet set, const int length, LObject *p, const kStrategy)
int getIndexRng(long coeff)
int posInL110(const LSet set, const int length, LObject *p, const kStrategy)
int posInT17(const TSet set, const int length, LObject &p)
void initBuchMora(ideal F, ideal Q, kStrategy strat)
int redFirst(LObject *h, kStrategy strat)
void kMergeBintoL(kStrategy strat)
static void enlargeT(TSet &T, TObject **&R, unsigned long *&sevT, int &length, const int incr)
BOOLEAN arriRewCriterionPre(poly sig, unsigned long not_sevSig, poly lm, kStrategy strat, int)
void enterSyz(LObject &p, kStrategy strat, int atT)
int posInL11Ring(const LSet set, const int length, LObject *p, const kStrategy)
int redEcart(LObject *h, kStrategy strat)
int posInT11(const TSet set, const int length, LObject &p)
void enterT(LObject &p, kStrategy strat, int atT)
int posInT1(const TSet set, const int length, LObject &p)
void enterTShift(LObject p, kStrategy strat, int atT)
int posInT110Ring(const TSet set, const int length, LObject &p)
BOOLEAN arriRewCriterion(poly, unsigned long, poly, kStrategy strat, int start=0)
void enterSSba(LObject &p, int atS, kStrategy strat, int atR)
BOOLEAN kTest(kStrategy strat)
void initenterpairsSigRing(poly h, poly hSig, int hFrom, int k, int ecart, int isFromQ, kStrategy strat, int atR=-1)
void enterSMoraNF(LObject &p, int atS, kStrategy strat, int atR=-1)
poly redtailBbaBound(LObject *L, int end_pos, kStrategy strat, int bound, BOOLEAN withT, BOOLEAN normalize)
int posInT_EcartpLength(const TSet set, const int length, LObject &p)
TObject * kFindDivisibleByInS_T(kStrategy strat, int end_pos, LObject *L, TObject *T, long ecart)
int posInT0(const TSet, const int length, LObject &)
BOOLEAN kTest_TS(kStrategy strat)
void enterOnePairNormal(int i, poly p, int ecart, int isFromQ, kStrategy strat, int atR=-1)
int kFindInT(poly p, TSet T, int tlength)
returns index of p in TSet, or -1 if not found
BOOLEAN kCheckStrongCreation(int atR, poly m1, int atS, poly m2, kStrategy strat)
void initenterstrongPairsShift(poly h, int k, int ecart, int isFromQ, kStrategy strat, int atR)
void enterpairsSig(poly h, poly hSig, int hFrom, int k, int ecart, int pos, kStrategy strat, int atR)
static void enterOnePairRingShift(poly q, poly p, int, int isFromQ, kStrategy strat, int atR, int, int qisFromQ, int shiftcount, int ifromS)
static const char * kTest_LmEqual(poly p, poly t_p, ring tailRing)
void enterL(LSet *set, int *length, int *LSetmax, LObject p, int at)
BOOLEAN faugereRewCriterion(poly sig, unsigned long not_sevSig, poly, kStrategy strat, int start=0)
static BOOLEAN enterOneStrongPolyAndEnterOnePairRingShift(poly q, poly p, int ecart, int isFromQ, kStrategy strat, int atR, int ecartq, int qisFromQ, int shiftcount, int ifromS)
void clearSbatch(poly h, int k, int pos, kStrategy strat)
static int pLPDivComp(poly p, poly q)
int posInT2(const TSet set, const int length, LObject &p)
int posInL13(const LSet set, const int length, LObject *p, const kStrategy)
int posInL110Ring(const LSet set, const int length, LObject *p, const kStrategy)
static BOOLEAN enterOnePairWithShifts(int q_inS, poly q, poly p, int ecartp, int p_isFromQ, kStrategy strat, int, int p_lastVblock, int q_lastVblock)
int posInT_pLength(const TSet set, const int length, LObject &p)
static intset initec(const int maxnr)
BOOLEAN kPosInLDependsOnLength(int(*pos_in_l)(const LSet set, const int length, LObject *L, const kStrategy strat))
void enterpairs(poly h, int k, int ecart, int pos, kStrategy strat, int atR)
int posInT13(const TSet set, const int length, LObject &p)
void redtailBbaAlsoLC_Z(LObject *L, int end_pos, kStrategy strat)
BOOLEAN syzCriterionInc(poly sig, unsigned long not_sevSig, kStrategy strat)
static void deleteHCBucket(LObject *L, kStrategy strat)
void initHilbCrit(ideal, ideal, intvec **hilb, kStrategy strat)
static BOOLEAN enterOnePairWithoutShifts(int p_inS, poly q, poly p, int ecartq, int q_isFromQ, kStrategy strat, int, int p_lastVblock, int q_shift)
void chainCritSig(poly p, int, kStrategy strat)
int posInSMonFirst(const kStrategy strat, const int length, const poly p)
void initEcartPairMora(LObject *Lp, poly, poly, int ecartF, int ecartG)
void initenterstrongPairs(poly h, int k, int ecart, int isFromQ, kStrategy strat, int atR=-1)
void superenterpairsSig(poly h, poly hSig, int hFrom, int k, int ecart, int pos, kStrategy strat, int atR)
static poly redMora(poly h, int maxIndex, kStrategy strat)
int posInL0Ring(const LSet set, const int length, LObject *p, const kStrategy)
static int pDivCompRing(poly p, poly q)
void initBuchMoraPos(kStrategy strat)
void initenterpairs(poly h, int k, int ecart, int isFromQ, kStrategy strat, int atR)
void initS(ideal F, ideal Q, kStrategy strat)
BOOLEAN kStratChangeTailRing(kStrategy strat, LObject *L, TObject *T, unsigned long expbound)
poly redtailBba(LObject *L, int end_pos, kStrategy strat, BOOLEAN withT, BOOLEAN normalize)
poly redtailBba_Z(LObject *L, int end_pos, kStrategy strat)
ring sbaRing(kStrategy strat, const ring r, BOOLEAN, int)
void initPairtest(kStrategy strat)
static BOOLEAN p_HasNotCF_Lift(poly p1, poly p2, const ring r)
p_HasNotCF for the IDLIFT case and syzComp==1: ignore component
int posInL0(const LSet set, const int length, LObject *p, const kStrategy)
void initSSpecial(ideal F, ideal Q, ideal P, kStrategy strat)
void chainCritOpt_1(poly, int, kStrategy strat)
int posInT11Ring(const TSet set, const int length, LObject &p)
static void enterOnePairRing(int i, poly p, int, int isFromQ, kStrategy strat, int atR)
static poly redBba(poly h, int maxIndex, kStrategy strat)
void cancelunit1(LObject *p, int *suc, int index, kStrategy strat)
void initenterpairsShift(poly h, int k, int ecart, int isFromQ, kStrategy strat, int atR)
static void initenterstrongPairsSig(poly h, poly hSig, int k, int ecart, int isFromQ, kStrategy strat, int atR=-1)
void initenterpairsSig(poly h, poly hSig, int hFrom, int k, int ecart, int isFromQ, kStrategy strat, int atR=-1)
int posInL15(const LSet set, const int length, LObject *p, const kStrategy)
static void enlargeL(LSet *L, int *length, const int incr)
int posInT17_c(const TSet set, const int length, LObject &p)
poly redtailBbaShift(LObject *L, int pos, kStrategy strat, BOOLEAN withT, BOOLEAN normalize)
int posInT_EcartFDegpLength(const TSet set, const int length, LObject &p)
int posInT15(const TSet set, const int length, LObject &p)
void enterT_strong(LObject &p, kStrategy strat, int atT)
void postReduceByMon(LObject *h, kStrategy strat)
used for GB over ZZ: intermediate reduction by monomial elements background: any known constant eleme...
BOOLEAN syzCriterion(poly sig, unsigned long not_sevSig, kStrategy strat)
void HEckeTest(poly pp, kStrategy strat)
int posInLSpecial(const LSet set, const int length, LObject *p, const kStrategy)
STATIC_VAR BOOLEAN sloppy_max
void enterExtendedSpolySig(poly h, poly hSig, kStrategy strat)
void enterpairsShift(poly h, int k, int ecart, int pos, kStrategy strat, int atR)
static void enterOnePairSig(int i, poly p, poly pSig, int, int ecart, int isFromQ, kStrategy strat, int atR=-1)
BOOLEAN kTest_L(LObject *L, kStrategy strat, BOOLEAN testp, int lpos, TSet T, int tlength)
void exitBuchMora(kStrategy strat)
void messageStatSBA(int hilbcount, kStrategy strat)
void initEcartNormal(TObject *h)
int posInS(const kStrategy strat, const int length, const poly p, const int ecart_p)
void updateS(BOOLEAN toT, kStrategy strat)
static BOOLEAN is_shifted_p1(const poly p, const kStrategy strat)
void initSLSba(ideal F, ideal Q, kStrategy strat)
int posInL11Ringls(const LSet set, const int length, LObject *p, const kStrategy)
void enterOnePairSpecial(int i, poly p, int ecart, kStrategy strat, int atR=-1)
static int * initS_2_R(const int maxnr)
int posInL17(const LSet set, const int length, LObject *p, const kStrategy)
void initSyzRules(kStrategy strat)
int posInLSig(const LSet set, const int length, LObject *p, const kStrategy)
void initSbaBuchMora(ideal F, ideal Q, kStrategy strat)
BOOLEAN kCheckSpolyCreation(LObject *L, kStrategy strat, poly &m1, poly &m2)
void cleanT(kStrategy strat)
static void enterOnePairLift(int i, poly p, int ecart, int isFromQ, kStrategy strat, int atR=-1)
int posInT110(const TSet set, const int length, LObject &p)
BOOLEAN kTest_S(kStrategy strat)
int posInSyz(const kStrategy strat, poly sig)
void replaceInLAndSAndT(LObject &p, int tj, kStrategy strat)
void reorderS(int *suc, kStrategy strat)
void enterExtendedSpoly(poly h, kStrategy strat)
int posInL15Ring(const LSet set, const int length, LObject *p, const kStrategy)
BOOLEAN kTest_T(TObject *T, kStrategy strat, int i, char TN)
void kMergeBintoLSba(kStrategy strat)
void deleteHC(LObject *L, kStrategy strat, BOOLEAN fromNext)
void updateResult(ideal r, ideal Q, kStrategy strat)
void superenterpairs(poly h, int k, int ecart, int pos, kStrategy strat, int atR)
static BOOLEAN sugarDivisibleBy(int ecart1, int ecart2)
int posInT19(const TSet set, const int length, LObject &p)
poly redtailBba_NF(poly p, kStrategy strat)
void exitSba(kStrategy strat)
int posInT15Ring(const TSet set, const int length, LObject &p)
int posInT17Ring(const TSet set, const int length, LObject &p)
static BOOLEAN enterOneStrongPoly(int i, poly p, int, int, kStrategy strat, int atR, bool enterTstrong)
BOOLEAN enterOnePairShift(poly q, poly p, int ecart, int isFromQ, kStrategy strat, int atR, int ecartq, int qisFromQ, int shiftcount, int ifromS)
void kDebugPrint(kStrategy strat)
Output some debug info about a given strategy.
void deleteInL(LSet set, int *length, int j, kStrategy strat)
void kStratInitChangeTailRing(kStrategy strat)
void chainCritPart(poly p, int ecart, kStrategy strat)
void enterSMora(LObject &p, int atS, kStrategy strat, int atR=-1)
void initBuchMoraCrit(kStrategy strat)
void cleanTSbaRing(kStrategy strat)
int posInT17_cRing(const TSet set, const int length, LObject &p)
static int pDivComp(poly p, poly q)
void completeReduce(kStrategy strat, BOOLEAN withT)
int posInL17_c(const LSet set, const int length, LObject *p, const kStrategy)
void initBuchMoraPosRing(kStrategy strat)
int kFindInTShift(poly p, TSet T, int tlength)
void postReduceByMonSig(LObject *h, kStrategy strat)
static BOOLEAN enterOneStrongPolyShift(poly q, poly p, int, int, kStrategy strat, int atR, int, int, int shiftcount, int ifromS)
void messageSets(kStrategy strat)
void deleteInS(int i, kStrategy strat)
static poly redBba1(poly h, int maxIndex, kStrategy strat)
int posInT_FDegpLength(const TSet set, const int length, LObject &p)
int posInLSigRing(const LSet set, const int length, LObject *p, const kStrategy)
BOOLEAN isInPairsetL(int length, poly p1, poly p2, int *k, kStrategy strat)
BOOLEAN sbaCheckGcdPair(LObject *h, kStrategy strat)
int posInLF5CRing(const LSet set, int start, const int length, LObject *p, const kStrategy)
poly preIntegerCheck(const ideal Forig, const ideal Q)
used for GB over ZZ: look for constant and monomial elements in the ideal background: any known const...
static unsigned long * initsevS(const int maxnr)
void enterpairsSpecial(poly h, int k, int ecart, int pos, kStrategy strat, int atR=-1)
void chainCritNormal(poly p, int ecart, kStrategy strat)
void initEcartBBA(TObject *h)
VAR denominator_list DENOMINATOR_LIST
static void enterOnePairSigRing(int i, poly p, poly pSig, int, int ecart, int isFromQ, kStrategy strat, int atR=-1)
void enterSBbaShift(LObject &p, int atS, kStrategy strat, int atR)
int posInL11(const LSet set, const int length, LObject *p, const kStrategy)
poly redtailBba_Ring(LObject *L, int end_pos, kStrategy strat)
int posInLF5C(const LSet, const int, LObject *, const kStrategy strat)
void initEcartPairBba(LObject *Lp, poly, poly, int, int)
void messageStat(int hilbcount, kStrategy strat)
static BOOLEAN enterOneStrongPolySig(int i, poly p, poly sig, int, int, kStrategy strat, int atR)
void chainCritRing(poly p, int, kStrategy strat)
void initSSpecialSba(ideal F, ideal Q, ideal P, kStrategy strat)
void initSL(ideal F, ideal Q, kStrategy strat)
int posInIdealMonFirst(const ideal F, const poly p, int start, int end)
void finalReduceByMon(kStrategy strat)
used for GB over ZZ: final reduction by constant elements background: any known constant element of i...
void enterSBba(LObject &p, int atS, kStrategy strat, int atR)
void initSbaCrit(kStrategy strat)
BOOLEAN newHEdge(kStrategy strat)
void cancelunit(LObject *L, BOOLEAN inNF)
denominator_list_s * denominator_list
static int kFindInL1(const poly p, const kStrategy strat)
static LSet initL(int nr=setmaxL)
static void kDeleteLcm(LObject *P)
#define ALLOW_PROD_CRIT(A)
#define REDTAIL_CANONICALIZE
static bool rIsSCA(const ring r)
poly nc_CreateShortSpoly(poly p1, poly p2, const ring r)
static nc_type & ncRingType(nc_struct *p)
poly nc_p_Bracket_qq(poly p, const poly q, const ring r)
returns [p,q], destroys p
int lcm(unsigned long *l, unsigned long *a, unsigned long *b, unsigned long p, int dega, int degb)
int dReportError(const char *fmt,...)
#define pFalseReturn(cond)
static number & pGetCoeff(poly p)
return an alias to the leading coefficient of p assumes that p != NULL NOTE: not copy
#define __p_GetComp(p, r)
#define rRing_has_Comp(r)
STATIC_VAR gmp_float * diff
#define omFreeSize(addr, size)
#define omCheckBinAddrSize(addr, size)
#define omReallocSize(addr, o_size, size)
#define omRealloc0Size(addr, o_size, size)
#define omSizeWOfBin(bin_ptr)
#define TEST_OPT_INTSTRATEGY
#define TEST_OPT_INFREDTAIL
#define TEST_OPT_SUGARCRIT
#define TEST_OPT_DEGBOUND
#define TEST_OPT_NOT_SUGAR
#define TEST_OPT_CANCELUNIT
#define TEST_OPT_CONTENTSB
pShallowCopyDeleteProc pGetShallowCopyDeleteProc(ring, ring)
static int index(p_Length length, p_Ord ord)
poly p_GetMaxExpP(poly p, const ring r)
return monomial r such that GetExp(r,i) is maximum of all monomials in p; coeff == 0,...
void p_Cleardenom_n(poly ph, const ring r, number &c)
long pLDegb(poly p, int *l, const ring r)
long pLDeg1_Totaldegree(poly p, int *l, const ring r)
long p_WFirstTotalDegree(poly p, const ring r)
long pLDeg1_WFirstTotalDegree(poly p, int *l, const ring r)
void pRestoreDegProcs(ring r, pFDegProc old_FDeg, pLDegProc old_lDeg)
long pLDeg1c_WFirstTotalDegree(poly p, int *l, const ring r)
static BOOLEAN p_ExpVectorEqual(poly p1, poly p2, const ring r1, const ring r2)
long pLDeg1c_Deg(poly p, int *l, const ring r)
long pLDeg1(poly p, int *l, const ring r)
unsigned long p_GetShortExpVector(const poly p, const ring r)
long pLDeg1_Deg(poly p, int *l, const ring r)
long p_WTotaldegree(poly p, const ring r)
BOOLEAN p_OneComp(poly p, const ring r)
return TRUE if all monoms have the same component
poly p_Cleardenom(poly p, const ring r)
long pLDeg1c(poly p, int *l, const ring r)
long pLDeg1c_Totaldegree(poly p, int *l, const ring r)
long pLDeg0c(poly p, int *l, const ring r)
unsigned long p_GetMaxExpL(poly p, const ring r, unsigned long l_max)
return the maximal exponent of p in form of the maximal long var
long pLDeg0(poly p, int *l, const ring r)
poly p_Sub(poly p1, poly p2, const ring r)
void pEnlargeSet(poly **p, int l, int increment)
long p_Deg(poly a, const ring r)
void p_Lcm(const poly a, const poly b, poly m, const ring r)
static poly p_Neg(poly p, const ring r)
static int pLength(poly a)
static void p_ExpVectorSum(poly pr, poly p1, poly p2, const ring r)
static poly p_Add_q(poly p, poly q, const ring r)
static void p_LmDelete(poly p, const ring r)
static void p_ExpVectorAdd(poly p1, poly p2, const ring r)
BOOLEAN p_CheckIsFromRing(poly p, ring r)
static BOOLEAN _p_LmDivisibleByPart(poly a, const ring r_a, poly b, const ring r_b, const int start, const int end)
static long p_FDeg(const poly p, const ring r)
static unsigned long p_GetMaxExp(const unsigned long l, const ring r)
static void p_ExpVectorCopy(poly d_p, poly s_p, const ring r)
static void p_LmDelete0(poly p, const ring r)
static int p_Cmp(poly p1, poly p2, ring r)
#define __pp_Mult_nn(p, n, r)
static poly pp_mm_Mult(poly p, poly m, const ring r)
static poly pp_Mult_mm(poly p, poly m, const ring r)
static int p_LtCmpNoAbs(poly p, poly q, const ring r)
static void p_SetCompP(poly p, int i, ring r)
#define pp_Test(p, lmRing, tailRing)
static unsigned long p_SetComp(poly p, unsigned long c, ring r)
static void p_Setm(poly p, const ring r)
static number p_SetCoeff(poly p, number n, ring r)
static int p_LmCmp(poly p, poly q, const ring r)
static BOOLEAN p_LmShortDivisibleBy(poly a, unsigned long sev_a, poly b, unsigned long not_sev_b, const ring r)
static long p_GetExp(const poly p, const unsigned long iBitmask, const int VarOffset)
get a single variable exponent @Note: the integer VarOffset encodes:
BOOLEAN p_LmCheckIsFromRing(poly p, ring r)
static BOOLEAN p_LmDivisibleBy(poly a, poly b, const ring r)
static poly p_ShallowCopyDelete(poly p, const ring r, omBin bin)
static void p_Delete(poly *p, const ring r)
BOOLEAN p_CheckPolyRing(poly p, ring r)
static poly p_LmFreeAndNext(poly p, ring)
static poly p_Mult_mm(poly p, poly m, const ring r)
static void p_LmFree(poly p, ring)
static poly p_Copy(poly p, const ring r)
returns a copy of p
static long p_Totaldegree(poly p, const ring r)
static BOOLEAN p_LmExpVectorAddIsOk(const poly p1, const poly p2, const ring r)
void p_wrp(poly p, ring lmRing, ring tailRing)
void rChangeCurrRing(ring r)
VAR ring currRing
Widely used global variable which specifies the current polynomial ring for Singular interpreter and ...
Compatibility layer for legacy polynomial operations (over currRing)
#define pLtCmpOrdSgnDiffM(p, q)
#define pHead(p)
returns newly allocated copy of Lm(p), coef is copied, next=NULL, p might be NULL
#define pLmIsConstantComp(p)
like above, except that p must be != NULL
#define pIsConstant(p)
like above, except that Comp must be 0
#define pHasNotCF(p1, p2)
#define pLtCmpOrdSgnDiffP(p, q)
#define pGetComp(p)
Component.
#define pSetCoeff(p, n)
deletes old coeff before setting the new one
#define pLmShortDivisibleBy(a, sev_a, b, not_sev_b)
Divisibility tests based on Short Exponent vectors sev_a == pGetShortExpVector(a) not_sev_b == ~ pGet...
#define pCmp(p1, p2)
pCmp: args may be NULL returns: (p2==NULL ? 1 : (p1 == NULL ? -1 : p_LmCmp(p1, p2)))
#define pLmInit(p)
like pInit, except that expvector is initialized to that of p, p must be != NULL
#define pLmDelete(p)
assume p != NULL, deletes Lm(p)->coef and Lm(p)
#define pGetShortExpVector(a)
returns the "Short Exponent Vector" – used to speed up divisibility tests (see polys-impl....
#define pLmDivisibleBy(a, b)
like pDivisibleBy, except that it is assumed that a!=NULL, b!=NULL
static void pLmFree(poly p)
frees the space of the monomial m, assumes m != NULL coef is not freed, m is not advanced
#define pGetExp(p, i)
Exponent.
#define pSetmComp(p)
TODO:
#define pHasNotCFRing(p1, p2)
#define pInit()
allocates a new monomial and initializes everything to 0
#define pEqualPolys(p1, p2)
#define pDivisibleBy(a, b)
returns TRUE, if leading monom of a divides leading monom of b i.e., if there exists a expvector c > ...
#define pLmCmp(p, q)
returns 0|1|-1 if p=q|p>q|p<q w.r.t monomial ordering
#define pLtCmpOrdSgnEqP(p, q)
#define pCopy(p)
return a copy of the poly
poly prMapR(poly src, nMapFunc nMap, ring src_r, ring dest_r)
void pLcmRat(poly a, poly b, poly m, int rat_shift)
void PrintS(const char *s)
BOOLEAN rComplete(ring r, int force)
this needs to be called whenever a new ring is created: new fields in ring are created (like VarOffse...
BOOLEAN nc_rComplete(const ring src, ring dest, bool bSetupQuotient)
void rKillModifiedRing(ring r)
ring rAssure_c_dp(const ring r)
ring rModifyRing(ring r, BOOLEAN omit_degree, BOOLEAN try_omit_comp, unsigned long exp_limit)
ring rCopy0(const ring r, BOOLEAN copy_qideal, BOOLEAN copy_ordering)
void rDebugPrint(const ring r)
void rDelete(ring r)
unconditionally deletes fields in r
static BOOLEAN rIsPluralRing(const ring r)
we must always have this test!
static int rBlocks(const ring r)
static int rGetCurrSyzLimit(const ring r)
static BOOLEAN rField_is_Domain(const ring r)
static BOOLEAN rIsRatGRing(const ring r)
static BOOLEAN rIsLPRing(const ring r)
BOOLEAN rHasMixedOrdering(const ring r)
static BOOLEAN rIsSyzIndexRing(const ring r)
poly(* pShallowCopyDeleteProc)(poly s_p, ring source_r, ring dest_r, omBin dest_bin)
returns a poly from dest_r which is a ShallowCopy of s_p from source_r assumes that source_r->N == de...
static short rVar(const ring r)
#define rVar(r) (r->N)
BOOLEAN rHasGlobalOrdering(const ring r)
BOOLEAN rHasLocalOrMixedOrdering(const ring r)
#define rField_is_Ring(R)
int p_mLPmaxPossibleShift(poly p, const ring r)
#define pLPCopyAndShiftLM(p, sh)
BOOLEAN _p_LPLmDivisibleByNoComp(poly a, poly b, const ring r)
int p_mFirstVblock(poly p, const ring ri)
void k_SplitFrame(poly &m1, poly &m2, int at, const ring r)
void p_mLPshift(poly m, int sh, const ring ri)
#define pLPDivisibleBy(a, b)
#define pLPLmDivisibleBy(a, b)
ideal idInit(int idsize, int rank)
initialise an ideal / module
void id_Delete(ideal *h, ring r)
deletes an ideal/module/matrix
long id_RankFreeModule(ideal s, ring lmRing, ring tailRing)
return the maximal component number found in any polynomial in s
ideal id_MaxIdeal(const ring r)
initialise the maximal ideal (at 0)
void idSkipZeroes(ideal ide)
gives an ideal/module the minimal possible size
static int idElem(const ideal F)
number of non-zero polys in F
static poly normalize(poly next_p, ideal add_generators, syStrategy syzstr, int *g_l, int *p_l, int crit_comp)
long totaldegreeWecart(poly p, ring r)
long maxdegreeWecart(poly p, int *l, ring r)
EXTERN_VAR short * ecartWeights
#define omGetStickyBinOfBin(B)
#define omMergeStickyBinIntoBin(A, B)