47#define ENTER_USE_MEMMOVE
82#ifdef ENTER_USE_MYMEMMOVE
83inline void _my_memmove_d_gt_s(
unsigned long* d,
unsigned long*
s,
long l)
85 REGISTER unsigned long* _dl = (
unsigned long*) d;
86 REGISTER unsigned long* _sl = (
unsigned long*)
s;
97inline void _my_memmove_d_lt_s(
unsigned long* d,
unsigned long*
s,
long l)
100 REGISTER unsigned long* _dl = (
unsigned long*) d;
101 REGISTER unsigned long* _sl = (
unsigned long*)
s;
112inline void _my_memmove(
void* d,
void*
s,
long l)
114 unsigned long _d = (
unsigned long) d;
115 unsigned long _s = (
unsigned long)
s;
116 unsigned long _l = ((
l) + SIZEOF_LONG - 1) >> LOG_SIZEOF_LONG;
118 if (_d > _s) _my_memmove_d_gt_s(_d, _s, _l);
119 else _my_memmove_d_lt_s(_d, _s, _l);
123#define memmove(d,s,l) _my_memmove(d, s, l)
129#define pDivComp_EQUAL 2
130#define pDivComp_LESS 1
131#define pDivComp_GREATER -1
132#define pDivComp_INCOMP 0
145 unsigned long la, lb;
146 unsigned long divmask =
currRing->divmask;
156 if (((la & divmask) ^ (lb & divmask)) != ((lb - la) & divmask))
163 if (((la & divmask) ^ (lb & divmask)) != ((la - lb) & divmask))
193 unsigned long la, lb;
194 unsigned long divmask =
currRing->divmask;
204 if (((la & divmask) ^ (lb & divmask)) != ((lb - la) & divmask))
211 if (((la & divmask) ^ (lb & divmask)) != ((la - lb) & divmask))
218 if (
b) {
return -1; }
246 && (L->bucket !=
NULL))
248 for (
int i=1;
i<= (int) L->bucket->buckets_used;
i++)
250 poly
p=L->bucket->buckets[
i];
255 L->bucket->buckets[
i]=
NULL;
256 L->bucket->buckets_length[
i]=0;
265 L->bucket->buckets_length[
i]=
pLength(L->bucket->buckets[
i]);
273 int i=L->bucket->buckets_used;
274 while ((
i>0)&&(L->bucket->buckets[
i]==
NULL))
277 L->bucket->buckets_used=
i;
292 poly
p = L->GetLmTailRing();
303 if (L->bucket !=
NULL)
335 L->ecart = L->pLDeg() - L->GetpFDeg();
342 if ((!fromNext) && cut)
345 L->ecart = L->pLDeg(strat->
LDegLast) - L->GetpFDeg();
370 ring r = L->tailRing;
371 poly
p = L->GetLmTailRing();
445 number eins=
nInit(1);
527inline static unsigned long*
initsevS (
const int maxnr)
529 return (
unsigned long*)
omAlloc0(maxnr*
sizeof(
unsigned long));
533 return (
int*)
omAlloc0(maxnr*
sizeof(
int));
537 int &
length,
const int incr)
549 (
length+incr)*
sizeof(
long*));
567 for (
j=0;
j<=strat->
tl;
j++)
571 if (strat->
T[
j].max_exp !=
NULL)
581 if (strat->
T[
j].t_p !=
NULL)
589 if (
currRing->isLPring && strat->
T[
j].shift > 0)
598 if (
p == strat->
S[
i])
600 if (strat->
T[
j].t_p !=
NULL)
602 if (p_shallow_copy_delete!=
NULL)
626 for (
j=0;
j<=strat->
tl;
j++)
630 if (strat->
T[
j].max_exp !=
NULL)
640 if (strat->
T[
j].t_p !=
NULL)
652 if (
p == strat->
S[
i])
654 if (strat->
T[
j].t_p !=
NULL)
694 if ((*
k) < 0)
return FALSE;
695 if (((p1 == (*p).p1) && (p2 == (*p).p2))
696 || ((p1 == (*p).p2) && (p2 == (*p).p1)))
707 for (
i=0;
i<=tlength;
i++)
709 if (
T[
i].
p ==
p)
return i;
720 if (
i >= 0)
return i;
723 while (strat !=
NULL);
732 for (
i=0;
i<=tlength;
i++)
748 if (
i >= 0)
return i;
751 while (strat !=
NULL);
765#define kFalseReturn(x) do { if (!x) return FALSE;} while (0)
772 for (
i=1;
i<=tailRing->N;
i++)
775 return "Lm[i] different";
778 return "Lm[0] different";
780 return "Lm.next different";
782 return "Lm.coeff different";
791 ring tailRing =
T->tailRing;
792 ring strat_tailRing = strat->
tailRing;
793 if (strat_tailRing ==
NULL) strat_tailRing = tailRing;
794 r_assume(strat_tailRing == tailRing);
816 if (
T->t_p ==
NULL &&
i > 0)
833 if (
T->t_p !=
NULL &&
i >= 0 && TN ==
'T')
837 if (
T->max_exp !=
NULL)
838 return dReportError(
"%c[%d].max_exp is not NULL as it should be", TN,
i);
842 if (
T->max_exp ==
NULL)
854 p_Setm(test_max, tailRing);
866 if (
T->p ==
NULL &&
i > 0)
882 if ((
i >= 0) && (
T->pLength != 0)
887 return dReportError(
"%c[%d] pLength error: has %d, specified to have %d",
892 if (
i >= 0 && (TN ==
'T' || TN ==
'L'))
895 if (strat->
homog && (
T->FDeg !=
T->pFDeg()))
899 return dReportError(
"%c[%d] FDeg error: has %d, specified to have %d",
900 TN,
i ,
T->pFDeg(), d);
905 if (
i >= 0 && TN ==
'T')
919 ring strat_tailRing=strat->
tailRing;
944 if (L->bucket !=
NULL)
947 r_assume(L->bucket->bucket_ring == L->tailRing);
965 return dReportError(
"L[%d] wrong sev: has %lo, specified to have %lo",
975 else if (tlength > 0 &&
T !=
NULL && (lpos >=0))
1010 -1, strat->
T, strat->
tl));
1013 if (strat->
T !=
NULL)
1015 for (
i=0;
i<=strat->
tl;
i++)
1024 if (strat->
L !=
NULL)
1026 for (
i=0;
i<=strat->
Ll;
i++)
1029 strat->
L[
i].Next() != strat->
tail,
i,
1030 strat->
T, strat->
tl));
1041 if (strat->
S !=
NULL)
1053 for (
i=0;
i<=strat->
sl;
i++)
1055 if (strat->
S[
i] !=
NULL &&
1058 return dReportError(
"S[%d] wrong sev: has %o, specified to have %o",
1074 for (
i=0;
i<=strat->
tl;
i++)
1076 if (strat->
T[
i].i_r < 0 || strat->
T[
i].i_r > strat->
tl)
1077 return dReportError(
"strat->T[%d].i_r == %d out of bounds",
i,
1079 if (strat->
R[strat->
T[
i].i_r] != &(strat->
T[
i]))
1083 if ((strat->
S !=
NULL)&&(strat->
tl>=0))
1085 for (
i=0;
i<=strat->
sl;
i++)
1090 if (strat->
S_2_R[
i] != strat->
T[
j].i_r)
1096 #ifdef HAVE_SHIFTBBA
1101 for (
i=0;
i<=strat->
Ll;
i++)
1103 if (strat->
L[
i].p1 !=
NULL && strat->
L[
i].p2)
1105 if (strat->
L[
i].i_r1 < 0 ||
1106 strat->
L[
i].i_r1 > strat->
tl ||
1107 strat->
L[
i].T_1(strat)->p != strat->
L[
i].p1)
1109 if (strat->
L[
i].i_r2 < 0 ||
1110 strat->
L[
i].i_r2 > strat->
tl ||
1111 strat->
L[
i].T_2(strat)->p != strat->
L[
i].p2)
1116 if (strat->
L[
i].i_r1 != -1)
1118 if (strat->
L[
i].i_r2 != -1)
1121 if (strat->
L[
i].i_r != -1)
1134#ifdef ENTER_USE_MEMMOVE
1135 memmove(&(strat->
S[
i]), &(strat->
S[
i+1]), (strat->
sl -
i)*
sizeof(poly));
1137 memmove(&(strat->
sevS[
i]),&(strat->
sevS[
i+1]),(strat->
sl -
i)*
sizeof(
unsigned long));
1138 memmove(&(strat->
S_2_R[
i]),&(strat->
S_2_R[
i+1]),(strat->
sl -
i)*
sizeof(
int));
1141 for (
j=
i;
j<strat->
sl;
j++)
1143 strat->
S[
j] = strat->
S[
j+1];
1151#ifdef ENTER_USE_MEMMOVE
1152 memmove(&(strat->
lenS[
i]),&(strat->
lenS[
i+1]),(strat->
sl -
i)*
sizeof(
int));
1159#ifdef ENTER_USE_MEMMOVE
1167#ifdef ENTER_USE_MEMMOVE
1168 memmove(&(strat->
fromQ[
i]),&(strat->
fromQ[
i+1]),(strat->
sl -
i)*
sizeof(
int));
1170 for (
j=
i;
j<strat->
sl;
j++)
1184 && (strat->
P.p1!=
NULL))
1190 for (
int i=lv;
i>0;
i--)
1214 if (set[
j].sig!=
NULL)
1242 #ifdef HAVE_SHIFTBBA
1252#ifdef ENTER_USE_MEMMOVE
1256 for (
i=
j;
i < (*length);
i++)
1278#ifdef ENTER_USE_MEMMOVE
1279 memmove(&((*set)[at+1]), &((*set)[at]), ((*
length)-at+1)*
sizeof(
LObject));
1281 for (
i=(*
length)+1;
i>=at+1;
i--) (*set)[
i] = (*set)[
i-1];
1295 h->FDeg =
h->pFDeg();
1296 h->ecart =
h->pLDeg() -
h->FDeg;
1303 h->FDeg =
h->pFDeg();
1310 Lp->FDeg = Lp->pFDeg();
1317 Lp->FDeg = Lp->pFDeg();
1318 (*Lp).ecart =
si_max(ecartF,ecartG);
1319 (*Lp).ecart = (*Lp).ecart- (Lp->FDeg -
p_FDeg((*Lp).lcm,
currRing));
1328 return (ecart1 <= ecart2);
1359 int j,compare,compareCoeff;
1363 h.ecart=0;
h.length=0;
1387 for(
j = strat->
Bl;
j>=0;
j--)
1508 h.i_r1 = -1;
h.i_r2 = -1;
1524 posx = strat->
posInL(strat->
B,strat->
Bl,&
h,strat);
1529 else strat->
P.sev=0L;
1543 poly m1, m2,
gcd,si;
1572 for (
int j = 0;
j < strat->
sl;
j++)
1578 && !(strat->
sevS[
j] & ~sev)
1621 PrintS(
"\n--- create strong gcd poly: ");
1624 Print(
"\n strat->S[%d]: ",
i);
1647 h.i_r1 = -1;
h.i_r2 = -1;
1653 h.p1 =
p;
h.p2 = strat->
S[
i];
1668 posx = strat->
posInL(strat->
L,strat->
Ll,&
h,strat);
1673 if(
h.IsNull())
return FALSE;
1690 if(strat->
sl < 0)
return FALSE;
1692 for(
i=0;
i<strat->
sl;
i++)
1728 h->i_r1 = -1;
h->i_r2 = -1;
1750 poly m1, m2,
gcd,si;
1798 PrintS(
"\n--- create strong gcd poly: ");
1801 Print(
"\n strat->S[%d]: ",
i);
1825 if(
pLmCmp(pSigMult,sSigMult) == 0)
1834 if(
pLtCmp(pSigMult,sSigMult)==1)
1853 h.i_r1 = -1;
h.i_r2 = -1;
1861 int red_result =
redRing(&
h,strat);
1871 strat->
enterS(&strat->
P,strat->
sl+1,strat, strat->
tl+1);
1888 int red_result =
redRing(&
h,strat);
1898 strat->
enterS(&strat->
P,strat->
sl+1,strat, strat->
tl+1);
1911 strat->
enterS(&strat->
P,strat->
sl+1,strat, strat->
tl+1);
1915 h.p1 =
p;
h.p2 = strat->
S[
i];
1930 posx = strat->
posInL(strat->
L,strat->
Ll,&
h,strat);
1948 Lp.ecart=0; Lp.length=0;
1953#ifndef HAVE_RATGRING
1955#elif defined(HAVE_RATGRING)
1972 if((!((strat->
ecartS[
i]>0)&&(ecart>0)))
2065 for(
j = strat->
Bl;
j>=0;
j--)
2164 Lp.p1 = strat->
S[
i];
2178 Lp.i_r1 = strat->
S_2_R[
i];
2192 && (Lp.p->coef!=
NULL))
2196 l = strat->
posInL(strat->
B,strat->
Bl,&Lp,strat);
2236 Lp.ecart=0; Lp.length=0;
2243 if((!((strat->
ecartS[
i]>0)&&(ecart>0)))
2339 for(
j = strat->
Bl;
j>=0;
j--)
2395 Lp.p1 = strat->
S[
i];
2402 Lp.i_r1 = strat->
S_2_R[
i];
2416 && (Lp.p->coef!=
NULL))
2420 l = strat->
posInL(strat->
B,strat->
Bl,&Lp,strat);
2444 unsigned long pSigMultNegSev,sSigMultNegSev;
2448 Lp.ecart=0; Lp.length=0;
2453#ifndef HAVE_RATGRING
2455#elif defined(HAVE_RATGRING)
2485 PrintS(
"----------------\n");
2488 PrintS(
"----------------\n");
2494 Print(
"IN PAIR GENERATION - COMPARING SIGS: %d\n",sigCmp);
2515 if ( strat->
syzCrit(pSigMult,pSigMultNegSev,strat) ||
2516 strat->
syzCrit(sSigMult,sSigMultNegSev,strat)
2517 || strat->
rewCrit1(sSigMult,sSigMultNegSev,Lp.lcm,strat,
i+1)
2594 Lp.sevSig = ~pSigMultNegSev;
2601 Lp.sevSig = ~sSigMultNegSev;
2612 if (strat->
rewCrit3(Lp.sig,~Lp.sevSig,Lp.p,strat,strat->
sl+1))
2626 Lp.checked = strat->
sl+1;
2633 Lp.prod_crit =
TRUE;
2645 PrintS(
"SIGNATURE OF PAIR: ");
2649 Lp.p1 = strat->
S[
i];
2663 Lp.i_r1 = strat->
S_2_R[
i];
2677 && (Lp.p->coef!=
NULL))
2681 l = strat->
posInL(strat->
B,strat->
Bl,&Lp,strat);
2719 unsigned long pSigMultNegSev,sSigMultNegSev;
2723 Lp.ecart=0; Lp.length=0;
2728#ifndef HAVE_RATGRING
2730#elif defined(HAVE_RATGRING)
2766 if(pSigMult !=
NULL)
2769 if(sSigMult !=
NULL)
2773 Print(
"----------------\n");
2776 Print(
"----------------\n");
2780 if(pSigMult !=
NULL && sSigMult !=
NULL)
2789 if(pSigMult ==
NULL)
2791 if(sSigMult ==
NULL)
2801 Print(
"IN PAIR GENERATION - COMPARING SIGS: %d\n",sigCmp);
2823 int red_result =
redRing(&Lp,strat);
2833 strat->
enterS(&strat->
P,strat->
sl+1,strat, strat->
tl+1);
2835 strat->
enterS(&Lp,0,strat,strat->
tl);
2849 Lp.sig =
pCopy(pSigMult);
2878 if ( strat->
syzCrit(pSigMult,pSigMultNegSev,strat) ||
2879 strat->
syzCrit(sSigMult,sSigMultNegSev,strat)
2961 Lp.sig =
pNeg(Lp.sig);
2972 Lp.sevSig = ~pSigMultNegSev;
2979 Lp.sevSig = ~sSigMultNegSev;
2991 if (strat->
rewCrit3(Lp.sig,~Lp.sevSig,Lp.p,strat,strat->
sl+1))
3005 Lp.checked = strat->
sl+1;
3012 Lp.prod_crit =
TRUE;
3024 PrintS(
"SIGNATURE OF PAIR: ");
3028 Lp.p1 = strat->
S[
i];
3043 Lp.i_r1 = strat->
S_2_R[
i];
3057 && (Lp.p->coef!=
NULL))
3065 int red_result =
redRing(&Lp,strat);
3075 strat->
enterS(&strat->
P,strat->
sl+1,strat, strat->
tl+1);
3078 strat->
enterS(&Lp,0,strat, strat->
tl+1);
3083 l = strat->
posInL(strat->
L,strat->
Ll,&Lp,strat);
3130 Lp.p1 = strat->
S[
i];
3134 Lp.i_r1 = strat->
S_2_R[
i];
3149 && (Lp.p->coef!=
NULL))
3152 l = strat->
posInL(strat->
L,strat->
Ll,&Lp,strat);
3163 int j=strat->
Ll+strat->
Bl+1;
3171 for (
i=strat->
Bl;
i>=0;
i--)
3173 j = strat->
posInL(strat->
L,
j,&(strat->
B[
i]),strat);
3184 int j=strat->
Ll+strat->
Bl+1;
3192 for (
i=strat->
Bl;
i>=0;
i--)
3194 j = strat->
posInL(strat->
L,
j,&(strat->
B[
i]),strat);
3219 for (
j=0;
j<=strat->
sl;
j++)
3223 for (
i=strat->
Bl;
i>=0;
i--)
3238 for (
j=0;
j<=strat->
sl;
j++)
3242 for (
i=strat->
Bl;
i>=0;
i--)
3265 for (
j=strat->
Ll;
j>=0;
j--)
3271 if (strat->
L[
j].p == strat->
tail)
3317 for (
j=strat->
Ll;
j>=0;
j--)
3337 for(
i=
j-1;
i>=0;
i--)
3356 for (
j=strat->
Ll;
j>=0;
j--)
3358 #ifdef HAVE_SHIFTBBA
3359 if ((strat->
L[
j].p1!=
NULL) &&
3392 if (strat->
L[0].p2 == strat->
tail) strat->
L[0].p2 =
p;
3395 if (strat->
L[
j].p2 ==
p)
3401 if ((strat->
L[
i].p2 ==
p) &&
pLmEqual(strat->
L[
j].lcm,strat->
L[
i].lcm))
3415 strat->
L[
i].p2 = strat->
tail;
3432 else if (strat->
L[
j].p2 == strat->
tail)
3471 if (strat->
L[0].p2 == strat->
tail) strat->
L[0].p2 =
p;
3474 if (strat->
L[
j].p2 ==
p)
3480 if ((strat->
L[
i].p2 ==
p) &&
pLmEqual(strat->
L[
j].lcm,strat->
L[
i].lcm))
3494 strat->
L[
i].p2 = strat->
tail;
3511 else if (strat->
L[
j].p2 == strat->
tail)
3532 for (
j=0;
j<=strat->
sl;
j++)
3536 for (
i=strat->
Bl;
i>=0;
i--)
3544 Print(
"chain-crit-part: S[%d]=",
j);
3546 Print(
" divide B[%d].lcm=",
i);
3568 for (
j=strat->
Ll;
j>=0;
j--)
3574 if (strat->
L[
j].p == strat->
tail)
3578 PrintS(
"chain-crit-part: pCompareChainPart p=");
3580 Print(
" delete L[%d]",
j);
3609 Print(
"chain-crit-part: sugar B[%d].lcm=",
j);
3611 Print(
" delete B[%d]",
i);
3622 Print(
"chain-crit-part: sugar B[%d].lcm=",
i);
3624 Print(
" delete B[%d]",
j);
3644 for (
j=strat->
Ll;
j>=0;
j--)
3652 PrintS(
"chain-crit-part: sugar:pCompareChainPart p=");
3654 Print(
" delete L[%d]",
j);
3672 for(
i=
j-1;
i>=0;
i--)
3678 Print(
"chain-crit-part: equal lcm B[%d].lcm=",
j);
3680 Print(
" delete B[%d]\n",
i);
3697 for (
j=strat->
Ll;
j>=0;
j--)
3705 PrintS(
"chain-crit-part: pCompareChainPart p=");
3707 Print(
" delete L[%d]",
j);
3736 if (strat->
L[0].p2 == strat->
tail) strat->
L[0].p2 =
p;
3739 if (strat->
L[
j].p2 ==
p)
3745 if ((strat->
L[
i].p2 ==
p) &&
pLmEqual(strat->
L[
j].lcm,strat->
L[
i].lcm))
3762 strat->
L[
i].p2 = strat->
tail;
3769 PrintS(
"chain-crit-part: divisible_by p=");
3771 Print(
" delete L[%d]",
l);
3782 PrintS(
"chain-crit-part: divisible_by(2) p=");
3784 Print(
" delete L[%d]",
i);
3795 else if (strat->
L[
j].p2 == strat->
tail)
3823 for (
j=0;
j<=
k;
j++)
3836 for (
j=0;
j<=
k;
j++)
3845 for (
j=0;
j<=
k;
j++)
3858 #ifdef HAVE_RATGRING
3888 for (
j=0;
j<=
k;
j++)
3901 for (
j=0;
j<=
k;
j++)
3910 for (
j=0;
j<=
k;
j++)
4008 for (
j=0;
j<=strat->
sl;
j++)
4012 for (
i=strat->
Bl;
i>=0;
i--)
4019 PrintS(
"--- chain criterion func chainCritRing type 1\n");
4022 PrintS(
" strat->B[i].lcm:");
4027 wrp(strat->
B[
i].lcm);
4042 for (
j=strat->
Ll;
j>=0;
j--)
4055 PrintS(
"--- chain criterion func chainCritRing type 2\n");
4056 PrintS(
"strat->L[j].p:");
4087 if (strat->
L[0].p2 == strat->
tail) strat->
L[0].p2 =
p;
4090 if (strat->
L[
j].p2 ==
p)
4105 PrintS(
"--- chain criterion func chainCritRing type 3\n");
4106 PrintS(
"strat->L[j].lcm:");
4107 wrp(strat->
L[
j].lcm);
4108 PrintS(
" strat->L[i].lcm:");
4109 wrp(strat->
L[
i].lcm);
4123 strat->
L[
i].p2 = strat->
tail;
4140 else if (strat->
L[
j].p2 == strat->
tail)
4164 for (
j=0;
j<=
k;
j++)
4176 for (
j=0;
j<=
k;
j++)
4184 for (
j=0;
j<=
k;
j++)
4196 #ifdef HAVE_RATGRING
4221 && ((iCompH<=strat->syzComp)||(strat->
syzComp==0)))
4266 PrintS(
"--- create zero spoly: ");
4295 posx = strat->
posInL(strat->
L,strat->
Ll,&Lp,strat);
4350 PrintS(
"--- create zero spoly: ");
4378 int red_result =
redRing(&Lp,strat);
4387 strat->
enterS(strat->
P,strat->
sl+1,strat, strat->
tl+1);
4389 strat->
enterS(Lp,0,strat,strat->
tl);
4411 posx = strat->
posInL(strat->
L,strat->
Ll,&Lp,strat);
4436 if ( (!strat->
fromT)
4493 if ( (!strat->
fromT)
4518 if ( (!strat->
fromT)
4543 for (
j=0;
j<=
k;
j++)
4546 if ((iCompH==iCompSj)
4557 for (
j=0;
j<=
k;
j++)
4560 if ((iCompH==iCompSj)
4612 int i,
j,at,ecart, s2r;
4616 int new_suc=strat->
sl+1;
4620 for (;
i<=strat->
sl;
i++)
4625 if (new_suc > at) new_suc = at;
4628 sev = strat->
sevS[
i];
4631 for (
j=
i;
j>=at+1;
j--)
4633 strat->
S[
j] = strat->
S[
j-1];
4639 strat->
ecartS[at] = ecart;
4640 strat->
sevS[at] = sev;
4641 strat->
S_2_R[at] = s2r;
4644 for (
j=
i;
j>=at+1;
j--)
4648 strat->
fromQ[at]=fq;
4652 if (new_suc <= strat->sl) *suc=new_suc;
4715 if (cmp == cmp_int)
return an;
4716 if (cmp == -cmp_int)
return en;
4722 if (cmp == cmp_int) en =
i;
4723 else if (cmp == -cmp_int) an =
i;
4739 if (
pLmCmp(set[an],
p) == cmp_int)
return an;
4740 if (
pLmCmp(set[an],
p) == -cmp_int)
return en;
4742 && ((strat->
ecartS[an])>ecart_p))
4748 else if (
pLmCmp(set[
i],
p) == -cmp_int) an=
i;
4752 &&((strat->
ecartS[
i])<ecart_p))
4780 || ((op == o) && (
pLtCmp(set[mon],
p) == -1)))
4791 || ((op == o) && (
pLtCmp(set[an],
p) == -1)))
4798 || ((op == o) && (
pLtCmp(set[
i],
p) == -1)))
4824 || ((op == o) && (
pLtCmp(set[an],
p) == -1)))
4831 || ((op == o) && (
pLtCmp(set[
i],
p) == -1)))
4843 if(end < 0 || end >=
IDELEMS(F))
4845 if (end<0)
return 0;
4852 for(
i=start;
i<end;
i++)
4866 || ((op == o) && (
pLtCmp(set[an],
p) == -1)))
4873 || ((op == o) && (
pLtCmp(set[
i],
p) == -1)))
4898 if (
length==-1)
return 0;
4911 if (
pLmCmp(set[an].
p,
p.p) == cmp_int)
return an;
4927 if (
length==-1)
return 0;
4939 if (set[an].
length>
p.length)
return an;
4955 if (
length==-1)
return 0;
4957 int o =
p.GetpFDeg();
4958 int op = set[
length].GetpFDeg();
4973 op= set[an].GetpFDeg();
4975 || (( op == o) && (
pLmCmp(set[an].
p,
p.p) == cmp_int)))
4980 op = set[
i].GetpFDeg();
4982 || (( op == o) && (
pLmCmp(set[
i].
p,
p.p) == cmp_int)))
4991 if (
length==-1)
return 0;
4993 int o =
p.GetpFDeg();
4994 int op = set[
length].GetpFDeg();
5008 op= set[an].GetpFDeg();
5015 op = set[
i].GetpFDeg();
5031 if (
length==-1)
return 0;
5034 int o =
p.GetpFDeg();
5035 int op = set[
length].GetpFDeg();
5040 || (( op == o) && (set[
length].length ==
p.length)
5051 op = set[an].GetpFDeg();
5053 || (( op == o) && (set[an].
length >
p.length))
5054 || (( op == o) && (set[an].length ==
p.length)
5055 && (
pLmCmp(set[an].
p,
p.p) == cmp_int)))
5060 op = set[
i].GetpFDeg();
5062 || (( op == o) && (set[
i].
length >
p.length))
5063 || (( op == o) && (set[
i].length ==
p.length)
5073 if (
length==-1)
return 0;
5076 int o =
p.GetpFDeg();
5077 int op = set[
length].GetpFDeg();
5081 || (( op == o) && (set[
length].length ==
p.length)
5092 op = set[an].GetpFDeg();
5094 || (( op == o) && (set[an].
length >
p.length))
5095 || (( op == o) && (set[an].length ==
p.length)
5101 op = set[
i].GetpFDeg();
5103 || (( op == o) && (set[
i].
length >
p.length))
5104 || (( op == o) && (set[
i].length ==
p.length)
5119 if (
length==-1)
return 0;
5121 int o =
p.GetpFDeg();
5123 if (set[
length].GetpFDeg() <= o)
5133 if (set[an].GetpFDeg() > o)
5138 if (set[
i].GetpFDeg() > o)
5148 if (
length==-1)
return 0;
5149 int ol =
p.GetpLength();
5151 int oo=set[
length].ecart;
5153 if ((oo < op) || ((oo==op) && (set[
length].
length <= ol)))
5163 int oo=set[an].ecart;
5165 || ((oo==op) && (set[an].
pLength > ol)))
5170 int oo=set[
i].ecart;
5172 || ((oo == op) && (set[
i].
pLength > ol)))
5204 if (
length==-1)
return 0;
5206 int o =
p.GetpFDeg() +
p.ecart;
5222 op = set[an].GetpFDeg()+set[an].ecart;
5224 || (( op == o) && (
pLmCmp(set[an].
p,
p.p) == cmp_int)))
5229 op = set[
i].GetpFDeg()+set[
i].ecart;
5231 || (( op == o) && (
pLmCmp(set[
i].
p,
p.p) == cmp_int)))
5240 if (
length==-1)
return 0;
5242 int o =
p.GetpFDeg() +
p.ecart;
5257 op = set[an].GetpFDeg()+set[an].ecart;
5264 op = set[
i].GetpFDeg()+set[
i].ecart;
5300 if (
length==-1)
return 0;
5302 int o =
p.GetpFDeg() +
p.ecart;
5307 || (( op == o) && (set[
length].ecart >
p.ecart))
5308 || (( op == o) && (set[
length].ecart==
p.ecart)
5319 op = set[an].GetpFDeg()+set[an].ecart;
5321 || (( op == o) && (set[an].ecart <
p.ecart))
5322 || (( op == o) && (set[an].ecart==
p.ecart)
5323 && (
pLmCmp(set[an].
p,
p.p) == cmp_int)))
5328 op = set[
i].GetpFDeg()+set[
i].ecart;
5330 || (( op == o) && (set[
i].ecart <
p.ecart))
5331 || (( op == o) && (set[
i].ecart ==
p.ecart)
5341 if (
length==-1)
return 0;
5343 int o =
p.GetpFDeg() +
p.ecart;
5347 || (( op == o) && (set[
length].ecart >
p.ecart))
5348 || (( op == o) && (set[
length].ecart==
p.ecart)
5359 op = set[an].GetpFDeg()+set[an].ecart;
5361 || (( op == o) && (set[an].ecart <
p.ecart))
5362 || (( op == o) && (set[an].ecart==
p.ecart)
5368 op = set[
i].GetpFDeg()+set[
i].ecart;
5370 || (( op == o) && (set[
i].ecart <
p.ecart))
5371 || (( op == o) && (set[
i].ecart ==
p.ecart)
5386 if (
length==-1)
return 0;
5390 int o =
p.GetpFDeg() +
p.ecart;
5400 || ((op == o) && (set[
length].ecart >
p.ecart))
5401 || ((op == o) && (set[
length].ecart==
p.ecart)
5417 int op = set[an].GetpFDeg()+set[an].ecart;
5419 || ((op == o) && (set[an].ecart <
p.ecart))
5420 || ((op == o) && (set[an].ecart==
p.ecart)
5421 && (
pLmCmp(set[an].
p,
p.p) == cmp_int)))
5431 int op = set[
i].GetpFDeg()+set[
i].ecart;
5433 || ((op == o) && (set[
i].ecart <
p.ecart))
5434 || ((op == o) && (set[
i].ecart ==
p.ecart)
5447 if (
length==-1)
return 0;
5451 int o =
p.GetpFDeg() +
p.ecart;
5460 || ((op == o) && (set[
length].ecart >
p.ecart))
5461 || ((op == o) && (set[
length].ecart==
p.ecart)
5477 int op = set[an].GetpFDeg()+set[an].ecart;
5479 || ((op == o) && (set[an].ecart <
p.ecart))
5480 || ((op == o) && (set[an].ecart==
p.ecart)
5491 int op = set[
i].GetpFDeg()+set[
i].ecart;
5493 || ((op == o) && (set[
i].ecart <
p.ecart))
5494 || ((op == o) && (set[
i].ecart ==
p.ecart)
5513 if (
length==-1)
return 0;
5516 int op=
p.GetpFDeg();
5518 if (set[
length].ecart < o)
5520 if (set[
length].ecart == o)
5522 int oo=set[
length].GetpFDeg();
5523 if ((oo < op) || ((oo==op) && (set[
length].
length <
p.length)))
5534 if (set[an].ecart > o)
5536 if (set[an].ecart == o)
5538 int oo=set[an].GetpFDeg();
5540 || ((oo==op) && (set[an].
length >
p.length)))
5546 if (set[
i].ecart > o)
5548 else if (set[
i].ecart == o)
5550 int oo=set[
i].GetpFDeg();
5552 || ((oo == op) && (set[
i].
length >
p.length)))
5572 int d=
p->GetpFDeg();
5573 int op=set[
length].GetpFDeg();
5588 op=set[an].GetpFDeg();
5590 || ((op == d) && (
p->p1!=
NULL) && (set[an].p1==
NULL))
5591 || ((op == d) && ((
p->p1==
NULL) == (set[an].p1==
NULL)) && (
pLmCmp(set[an].
p,
p->p) == cmp_int)))
5596 op=set[
i].GetpFDeg();
5598 || ((op==d) && (
p->p1!=
NULL) && (set[
i].p1==
NULL))
5599 || ((op==d) && ((
p->p1==
NULL) == (set[
i].p1==
NULL)) && (
pLmCmp(set[
i].
p,
p->p) == cmp_int)))
5628 if (
pLmCmp(set[an].
p,
p->p) == cmp_int)
return en;
5684 if (
pLtCmp(set[an].sig,
p->sig) == cmp_int)
return en;
5688 if (
pLtCmp(set[
i].sig,
p->sig) == cmp_int) an=
i;
5712 cmp =
pLtCmp(set[an].sig,
p->sig);
5719 if (set[an].FDeg >
p->FDeg)
5721 if (set[an].FDeg < p->FDeg)
5723 if (set[an].FDeg ==
p->FDeg)
5741 if (set[
i].FDeg >
p->FDeg)
5743 if (set[
i].FDeg < p->FDeg)
5745 if (set[
i].FDeg ==
p->FDeg)
5760 if (strat->
syzl==0)
return 0;
5766 int en= strat->
syzl-1;
5771 if (
pLtCmp(strat->
syz[an],sig) != cmp_int)
return en;
5789int posInLF5C (
const LSet ,
const int ,
5807 int o =
p->GetpFDeg();
5808 int op = set[
length].GetpFDeg();
5821 op = set[an].GetpFDeg();
5823 || ((op == o) && (
pLmCmp(set[an].
p,
p->p) != cmp_int)))
5828 op = set[
i].GetpFDeg();
5830 || ((op == o) && (
pLmCmp(set[
i].
p,
p->p) != cmp_int)))
5849 int o =
p->GetpFDeg();
5850 int op = set[
length].GetpFDeg();
5862 op = set[an].GetpFDeg();
5869 op = set[
i].GetpFDeg();
5883 int o =
p->GetpFDeg();
5884 int op = set[
length].GetpFDeg();
5896 op = set[an].GetpFDeg();
5903 op = set[
i].GetpFDeg();
5915 if (
length < 0)
return 0;
5925 if (set[an].FDeg >
p->FDeg)
5927 if (set[an].FDeg < p->FDeg)
5929 if (set[an].FDeg ==
p->FDeg)
5937 if (set[an].t_p!=
NULL)
5959 if (set[
i].FDeg >
p->FDeg)
5961 if (set[
i].FDeg < p->FDeg)
5963 if (set[
i].FDeg ==
p->FDeg)
5971 if (set[
i].t_p!=
NULL)
6002 if (coeff == 0)
return -1;
6005 while (tmp % 2 == 0)
6063 int o =
p->GetpFDeg();
6064 int op = set[
length].GetpFDeg();
6069 || ((op == o) && (set[
length].length ==
p->length)
6079 op = set[an].GetpFDeg();
6081 || ((op == o) && (set[an].
length >
p->length))
6082 || ((op == o) && (set[an].length ==
p->length)
6083 && (
pLmCmp(set[an].
p,
p->p) != cmp_int)))
6088 op = set[
i].GetpFDeg();
6090 || ((op == o) && (set[
i].
length >
p->length))
6091 || ((op == o) && (set[
i].length ==
p->length)
6104 int o =
p->GetpFDeg();
6105 int op = set[
length].GetpFDeg();
6109 || ((op == o) && (set[
length].length ==
p->length)
6119 op = set[an].GetpFDeg();
6121 || ((op == o) && (set[an].
length >
p->length))
6122 || ((op == o) && (set[an].length ==
p->length)
6128 op = set[
i].GetpFDeg();
6130 || ((op == o) && (set[
i].
length >
p->length))
6131 || ((op == o) && (set[
i].length ==
p->length)
6150 int o =
p->GetpFDeg();
6152 if (set[
length].GetpFDeg() > o)
6162 if (set[an].GetpFDeg() >= o)
6167 if (set[
i].GetpFDeg() >= o)
6185 int o =
p->GetpFDeg() +
p->ecart;
6199 op = set[an].GetpFDeg() + set[an].ecart;
6201 || ((op == o) && (
pLmCmp(set[an].
p,
p->p) != cmp_int)))
6206 op = set[
i].GetpFDeg() + set[
i].ecart;
6208 || ((op == o) && (
pLmCmp(set[
i].
p,
p->p) != cmp_int)))
6220 int o =
p->GetpFDeg() +
p->ecart;
6233 op = set[an].GetpFDeg() + set[an].ecart;
6240 op = set[
i].GetpFDeg() + set[
i].ecart;
6260 int o =
p->GetpFDeg() +
p->ecart;
6265 && (set[
length].ecart >
p->ecart))
6267 && (set[
length].ecart ==
p->ecart)
6277 if ((set[an].GetpFDeg() + set[an].ecart > o)
6278 || ((set[an].GetpFDeg() + set[an].ecart == o)
6279 && (set[an].ecart >
p->ecart))
6280 || ((set[an].GetpFDeg() + set[an].ecart == o)
6281 && (set[an].ecart ==
p->ecart)
6282 && (
pLmCmp(set[an].
p,
p->p) != cmp_int)))
6287 if ((set[
i].GetpFDeg() + set[
i].ecart > o)
6288 || ((set[
i].GetpFDeg() + set[
i].ecart == o)
6289 && (set[
i].ecart >
p->ecart))
6290 || ((set[
i].GetpFDeg() +set[
i].ecart == o)
6291 && (set[
i].ecart ==
p->ecart)
6304 int o =
p->GetpFDeg() +
p->ecart;
6308 && (set[
length].ecart >
p->ecart))
6310 && (set[
length].ecart ==
p->ecart)
6320 if ((set[an].GetpFDeg() + set[an].ecart > o)
6321 || ((set[an].GetpFDeg() + set[an].ecart == o)
6322 && (set[an].ecart >
p->ecart))
6323 || ((set[an].GetpFDeg() + set[an].ecart == o)
6324 && (set[an].ecart ==
p->ecart)
6330 if ((set[
i].GetpFDeg() + set[
i].ecart > o)
6331 || ((set[
i].GetpFDeg() + set[
i].ecart == o)
6332 && (set[
i].ecart >
p->ecart))
6333 || ((set[
i].GetpFDeg() +set[
i].ecart == o)
6334 && (set[
i].ecart ==
p->ecart)
6356 int o =
p->GetpFDeg() +
p->ecart;
6365 && (set[
length].ecart >
p->ecart))
6367 && (set[
length].ecart ==
p->ecart)
6382 if ((set[an].GetpFDeg() + set[an].ecart > o)
6383 || ((set[an].GetpFDeg() + set[an].ecart == o)
6384 && (set[an].ecart >
p->ecart))
6385 || ((set[an].GetpFDeg() + set[an].ecart == o)
6386 && (set[an].ecart ==
p->ecart)
6387 && (
pLmCmp(set[an].
p,
p->p) != cmp_int)))
6397 if ((set[
i].GetpFDeg() + set[
i].ecart > o)
6398 || ((set[
i].GetpFDeg() + set[
i].ecart == o)
6399 && (set[
i].ecart >
p->ecart))
6400 || ((set[
i].GetpFDeg() +set[
i].ecart == o)
6401 && (set[
i].ecart ==
p->ecart)
6420 int o =
p->GetpFDeg() +
p->ecart;
6428 && (set[
length].ecart >
p->ecart))
6430 && (set[
length].ecart ==
p->ecart)
6445 if ((set[an].GetpFDeg() + set[an].ecart > o)
6446 || ((set[an].GetpFDeg() + set[an].ecart == o)
6447 && (set[an].ecart >
p->ecart))
6448 || ((set[an].GetpFDeg() + set[an].ecart == o)
6449 && (set[an].ecart ==
p->ecart)
6460 if ((set[
i].GetpFDeg() + set[
i].ecart > o)
6461 || ((set[
i].GetpFDeg() + set[
i].ecart == o)
6462 && (set[
i].ecart >
p->ecart))
6463 || ((set[
i].GetpFDeg() +set[
i].ecart == o)
6464 && (set[
i].ecart ==
p->ecart)
6482 PrintS(
"syzygy criterion checks: ");
6485 for (
int k=0;
k<strat->
syzl;
k++)
6490 Print(
"checking with: %d / %d -- \n",
k,strat->
syzl);
6519 PrintS(
"--- syzygy criterion checks: ");
6544 Print(
"checking with: %d -- ",
k);
6569 PrintS(
"rewritten criterion checks: ");
6572 for(
int k = strat->
sl;
k>=start;
k--)
6576 PrintS(
"checking with: ");
6592 PrintS(
"ALL ELEMENTS OF S\n----------------------------------------\n");
6593 for(
int kk = 0; kk<strat->
sl+1; kk++)
6597 PrintS(
"------------------------------\n");
6627 for (
int ii=strat->
sl; ii>start; ii--)
6633 if (!(
pLmCmp(p1,p2) == 1))
6652 for (
int i=strat->
Bl;
i>-1;
i--)
6673 for (
int ii=strat->
sl; ii>-1; ii--)
6679 if (!(
pLmCmp(p1,p2) == 1))
6700 const unsigned long not_sev = ~L->sev;
6701 const unsigned long* sev = strat->
sevS;
6714 if (
j > end_pos)
return NULL;
6715 #if defined(PDEBUG) || defined(PDIV_DEBUG)
6717 (ecart== LONG_MAX || ecart>= strat->
ecartS[
j]))
6719 if (!(sev[
j] & not_sev) &&
6720 (ecart== LONG_MAX || ecart>= strat->
ecartS[
j]) &&
6733 if (
j > end_pos)
return NULL;
6734 #if defined(PDEBUG) || defined(PDIV_DEBUG)
6737 && (ecart== LONG_MAX || ecart>= strat->
ecartS[
j])
6740 if (!(sev[
j] & not_sev)
6741 && (ecart== LONG_MAX || ecart>= strat->
ecartS[
j])
6752 if (strat->
tl < 0 || strat->
S_2_R[
j] == -1)
6773 if (
j > end_pos)
return NULL;
6775 #if defined(PDEBUG) || defined(PDIV_DEBUG)
6779 && (ecart== LONG_MAX || ecart>= strat->
ecartS[
j]))
6785 if (! (sev[
j] & not_sev)
6786 && (ecart== LONG_MAX || ecart>= strat->
ecartS[
j]))
6789 assume(t !=
NULL && t->t_p !=
NULL && t->tailRing == r && t->p == strat->
S[
j]);
6804 if (
j > end_pos)
return NULL;
6806 #if defined(PDEBUG) || defined(PDIV_DEBUG)
6810 && (ecart== LONG_MAX || ecart>= strat->
ecartS[
j])
6817 if (! (sev[
j] & not_sev)
6818 && (ecart== LONG_MAX || ecart>= strat->
ecartS[
j]))
6821 assume(t !=
NULL && t->t_p !=
NULL && t->tailRing == r && t->p == strat->
S[
j]);
6872 if (With ==
NULL)
break;
6882 return redtail(L, end_pos, strat);
6888 if (hn ==
NULL)
goto all_done;
6909 return redtail(&L, end_pos, strat);
6917 p =
h = L->GetLmTailRing();
6919 return L->GetLmCurrRing();
6954 Ln.SetShortExpVector();
6960 With = &(strat->
T[
j]);
6961 assume(With->GetpLength()==
pLength(With->p != __null ? With->p : With->t_p));
6966 if (With ==
NULL)
break;
6967 assume(With->GetpLength()==
pLength(With->p != __null ? With->p : With->t_p));
6994 pNext(
h) = Ln.LmExtractAndIter();
6997 }
while (!Ln.IsNull());
7000 if (Ln.IsNull())
goto all_done;
7001 if (! withT) With_s.Init(
currRing);
7003 pNext(
h) = Ln.LmExtractAndIter();
7022 return L->GetLmCurrRing();
7030 p =
h = L->GetLmTailRing();
7032 return L->GetLmCurrRing();
7039 Ln.pLength = L->GetpLength() - 1;
7063 Ln.SetShortExpVector();
7069 With = &(strat->
T[
j]);
7074 if (With ==
NULL)
break;
7101 pNext(
h) = Ln.LmExtractAndIter();
7104 }
while (!Ln.IsNull());
7116 if (! withT) With_s.Init(
currRing);
7118 pNext(
h) = Ln.LmExtractAndIter();
7137 return L->GetLmCurrRing();
7146 p =
h = L->GetLmTailRing();
7181 Ln.SetShortExpVector();
7194 With = &(strat->
T[
j]);
7195 assume(With->GetpLength()==
pLength(With->p != __null ? With->p : With->t_p));
7212 pNext(
h) = Ln.LmExtractAndIter();
7215 }
while (!Ln.IsNull());
7223 With = &(strat->
T[
j]);
7224 assume(With->GetpLength()==
pLength(With->p != __null ? With->p : With->t_p));
7241 pNext(
h) = Ln.LmExtractAndIter();
7244 }
while (!Ln.IsNull());
7248 if (Ln.IsNull())
goto all_done;
7250 pNext(
h) = Ln.LmExtractAndIter();
7275 p =
h = L->GetLmTailRing();
7277 return L->GetLmCurrRing();
7284 Ln.pLength = L->GetpLength() - 1;
7297 Ln.SetShortExpVector();
7299 if (With ==
NULL)
break;
7310 With->GetLmCurrRing();
7320 pNext(
h) = Ln.LmExtractAndIter();
7323 }
while (!Ln.IsNull());
7326 if (Ln.IsNull())
goto all_done;
7329 pNext(
h) = Ln.LmExtractAndIter();
7347 return L->GetLmCurrRing();
7381 p =
h = L->GetLmTailRing();
7383 return L->GetLmCurrRing();
7390 Ln.pLength = L->GetpLength() - 1;
7403 Ln.SetShortExpVector();
7406 if (With ==
NULL)
break;
7415 poly p_Ln=Ln.GetLmCurrRing();
7416 poly p_With=With->GetLmCurrRing();
7429 pNext(
h) = Ln.LmExtractAndIter();
7432 }
while (!Ln.IsNull());
7437 if (Ln.IsNull())
goto all_done;
7439 pNext(
h) = Ln.LmExtractAndIter();
7457 return L->GetLmCurrRing();
7472 if (strat->
Ll != *reduc)
7474 if (strat->
Ll != *reduc-1)
7486 if (red_result == 0)
7488 else if (red_result < 0)
7490 if ((red_result > 0) || ((strat->
Ll % 100)==99))
7492 if (strat->
Ll != *reduc && strat->
Ll > 0)
7509 Print(
"product criterion:%d chain criterion:%d\n",strat->
cp,strat->
c3);
7510 if (hilbcount!=0)
Print(
"hilbert series criterion:%d\n",hilbcount);
7511 #ifdef HAVE_SHIFTBBA
7513 if (strat->
cv!=0)
Print(
"shift V criterion:%d\n",strat->
cv);
7524 if (hilbcount!=0)
Print(
"hilbert series criterion:%d\n",hilbcount);
7525 #ifdef HAVE_SHIFTBBA
7527 if (strat->
cv!=0)
Print(
"shift V criterion:%d\n",strat->
cv);
7542 for (
i=0;
i<=strat->
sl;
i++)
7554 for (
i=0;
i<=strat->
tl;
i++)
7558 if (strat->
T[
i].length==0) strat->
T[
i].length=
pLength(strat->
T[
i].p);
7559 Print(
" o:%ld e:%d l:%d",
7560 strat->
T[
i].pFDeg(),strat->
T[
i].ecart,strat->
T[
i].length);
7565 for (
i=strat->
Ll;
i>=0;
i--)
7574 Print(
" o:%ld e:%d l:%d",
7575 strat->
L[
i].pFDeg(),strat->
L[
i].ecart,strat->
L[
i].length);
7598 strat->
S=strat->
Shdl->m;
7603 memset(strat->
fromQ,0,
i*
sizeof(
int));
7632 strat->
enterS(&
h,pos,strat,-1);
7633 strat->
fromQ[pos]=1;
7666 strat->
enterS(&
h,pos,strat,-1);
7694 strat->
S=strat->
Shdl->m;
7699 memset(strat->
fromQ,0,
i*
sizeof(
int));
7729 strat->
enterS(&
h,pos,strat,-1);
7730 strat->
fromQ[pos]=1;
7764 pos = strat->
posInL(strat->
L,strat->
Ll,&
h,strat);
7796 strat->
S = strat->
Shdl->m;
7809 memset(strat->
fromQ,0,
i*
sizeof(
int));
7838 strat->
enterS(&
h,pos,strat,-1);
7839 strat->
fromQ[pos]=1;
7889 pos = strat->
posInL(strat->
L,strat->
Ll,&
h,strat);
7947 for(
i=1;
i<=strat->
sl;
i++)
7959 strat->
syz = (poly *)
omAlloc(ps*
sizeof(poly));
7963#if defined(DEBUGF5) || defined(DEBUGF51)
7964 PrintS(
"------------- GENERATING SYZ RULES NEW ---------------\n");
8001 for (
k = 0;
k<
i;
k++)
8045 for (
k = 0;
k<strat->
sl+1;
k++)
8066 PrintS(
"Principal syzygies:\n");
8069 Print(
"ps %d\n",ps);
8070 PrintS(
"--------------------------------\n");
8080 PrintS(
"--------------------------------\n");
8104 strat->
S=strat->
Shdl->m;
8110 memset(strat->
fromQ,0,
i*
sizeof(
int));
8139 strat->
enterS(&
h,pos,strat, strat->
tl+1);
8141 strat->
fromQ[pos]=1;
8169 strat->
enterS(&
h,pos,strat, strat->
tl+1);
8211 h.is_normalized = 0;
8218 strat->
enterS(&
h,pos,strat, strat->
tl+1);
8252 strat->
S=strat->
Shdl->m;
8258 memset(strat->
fromQ,0,
i*
sizeof(
int));
8287 strat->
enterS(&
h,pos,strat, strat->
tl+1);
8289 strat->
fromQ[pos]=1;
8317 strat->
enterS(&
h,pos,strat, strat->
tl+1);
8359 h.is_normalized = 0;
8366 strat->
enterS(&
h,pos,strat, strat->
tl+1);
8388 unsigned long not_sev = ~ pGetShortExpVector(
h);
8390 while (
j <= maxIndex)
8407 if (!
pIsVector((*p).p) && ((*p).ecart != 0))
8414 h1 = r =
pCopy((*p).p);
8466 unsigned long not_sev = ~ pGetShortExpVector(
h);
8476 not_sev = ~ pGetShortExpVector(
h);
8491 unsigned long not_sev = ~ pGetShortExpVector(
h);
8493 while (
j <= maxIndex)
8500 not_sev = ~ pGetShortExpVector(
h);
8516 unsigned long not_sev = ~ pGetShortExpVector(
h);
8543 not_sev = ~ pGetShortExpVector(
h);
8547 while (
j <= maxIndex);
8588 if (
pCmp(redSi,strat->
S[
i])!=0)
8645 if (any_change)
reorderS(&suc,strat);
8650 for (
i=0;
i<=strat->
sl;
i++)
8700 else if (
pCmp((strat->
S)[
i],redSi)!=0)
8741 if (any_change)
reorderS(&suc,strat);
8742 else { suc=-1;
break; }
8753 for (
i=0;
i<=strat->
sl;
i++)
8781 if (suc!= -1)
updateS(toT,strat);
8801 *
sizeof(
unsigned long));
8828 strat->
Shdl->m=strat->
S;
8830 if (atS <= strat->sl)
8832#ifdef ENTER_USE_MEMMOVE
8833 memmove(&(strat->
S[atS+1]), &(strat->
S[atS]),
8834 (strat->
sl - atS + 1)*
sizeof(poly));
8835 memmove(&(strat->
ecartS[atS+1]), &(strat->
ecartS[atS]),
8836 (strat->
sl - atS + 1)*
sizeof(
int));
8837 memmove(&(strat->
sevS[atS+1]), &(strat->
sevS[atS]),
8838 (strat->
sl - atS + 1)*
sizeof(
unsigned long));
8839 memmove(&(strat->
S_2_R[atS+1]), &(strat->
S_2_R[atS]),
8840 (strat->
sl - atS + 1)*
sizeof(
int));
8842 memmove(&(strat->
lenS[atS+1]), &(strat->
lenS[atS]),
8843 (strat->
sl - atS + 1)*
sizeof(
int));
8845 memmove(&(strat->
lenSw[atS+1]), &(strat->
lenSw[atS]),
8848 for (
i=strat->
sl+1;
i>=atS+1;
i--)
8850 strat->
S[
i] = strat->
S[
i-1];
8856 for (
i=strat->
sl+1;
i>=atS+1;
i--)
8859 for (
i=strat->
sl+1;
i>=atS+1;
i--)
8865#ifdef ENTER_USE_MEMMOVE
8866 memmove(&(strat->
fromQ[atS+1]), &(strat->
fromQ[atS]),
8867 (strat->
sl - atS + 1)*
sizeof(
int));
8869 for (
i=strat->
sl+1;
i>=atS+1;
i--)
8874 strat->
fromQ[atS]=0;
8885 strat->
sevS[atS] =
p->sev;
8886 strat->
ecartS[atS] =
p->ecart;
8887 strat->
S_2_R[atS] = atR;
8897 for (
int i = maxPossibleShift;
i > 0;
i--)
8905 int atS =
posInS(strat, strat->
sl, qq.p, qq.ecart);
8924 *
sizeof(
unsigned long));
8928 *
sizeof(
unsigned long));
8956 strat->
Shdl->m=strat->
S;
8963 if (atS <= strat->sl)
8965#ifdef ENTER_USE_MEMMOVE
8966 memmove(&(strat->
S[atS+1]), &(strat->
S[atS]),
8967 (strat->
sl - atS + 1)*
sizeof(poly));
8968 memmove(&(strat->
sig[atS+1]), &(strat->
sig[atS]),
8969 (strat->
sl - atS + 1)*
sizeof(poly));
8970 memmove(&(strat->
sevSig[atS+1]), &(strat->
sevSig[atS]),
8971 (strat->
sl - atS + 1)*
sizeof(
unsigned long));
8972 memmove(&(strat->
ecartS[atS+1]), &(strat->
ecartS[atS]),
8973 (strat->
sl - atS + 1)*
sizeof(
int));
8974 memmove(&(strat->
sevS[atS+1]), &(strat->
sevS[atS]),
8975 (strat->
sl - atS + 1)*
sizeof(
unsigned long));
8976 memmove(&(strat->
S_2_R[atS+1]), &(strat->
S_2_R[atS]),
8977 (strat->
sl - atS + 1)*
sizeof(
int));
8979 memmove(&(strat->
lenS[atS+1]), &(strat->
lenS[atS]),
8980 (strat->
sl - atS + 1)*
sizeof(
int));
8982 memmove(&(strat->
lenSw[atS+1]), &(strat->
lenSw[atS]),
8985 for (
i=strat->
sl+1;
i>=atS+1;
i--)
8987 strat->
S[
i] = strat->
S[
i-1];
8995 for (
i=strat->
sl+1;
i>=atS+1;
i--)
8998 for (
i=strat->
sl+1;
i>=atS+1;
i--)
9004#ifdef ENTER_USE_MEMMOVE
9005 memmove(&(strat->
fromQ[atS+1]), &(strat->
fromQ[atS]),
9006 (strat->
sl - atS + 1)*
sizeof(
int));
9008 for (
i=strat->
sl+1;
i>=atS+1;
i--)
9013 strat->
fromQ[atS]=0;
9017 strat->
S[atS] =
p->p;
9018 strat->
sig[atS] =
p->sig;
9024 strat->
sevS[atS] =
p->sev;
9034 strat->
sevSig[atS] =
p->sevSig;
9036 strat->
ecartS[atS] =
p->ecart;
9037 strat->
S_2_R[atS] = atR;
9041 Print(
"--- LIST S: %d ---\n",strat->
sl);
9042 for(
k=0;
k<=strat->
sl;
k++)
9046 PrintS(
"--- LIST S END ---\n");
9050#if STDZ_EXCHANGE_DURING_REDUCTION
9073 else strat->
P.sev=0;
9081 poly tp = strat->
T[tj].p;
9086 for (
j = 0;
j <= strat->
sl; ++
j)
9100 pos =
posInS(strat, strat->
sl,
p->p,
p->ecart);
9106 for (
i = 0;
i <= strat->
Ll; ++
i)
9130 strat->
enterS(
p, pos, strat, strat->
tl);
9170 for(
i=strat->
tl;
i>=0;
i--)
9172 if (
p->p==strat->
T[
i].p)
9174 printf(
"already in T at pos %d of %d, atT=%d\n",
i,strat->
tl,atT);
9180#ifdef HAVE_TAIL_RING
9183 p->t_p=
p->GetLmTailRing();
9188 atT = strat->
posInT(strat->
T, strat->
tl, *
p);
9189 if (strat->
tl == strat->
tmax-1)
9191 if (atT <= strat->tl)
9193#ifdef ENTER_USE_MEMMOVE
9194 memmove(&(strat->
T[atT+1]), &(strat->
T[atT]),
9196 memmove(&(strat->
sevT[atT+1]), &(strat->
sevT[atT]),
9197 (strat->
tl-atT+1)*
sizeof(
unsigned long));
9199 for (
i=strat->
tl+1;
i>=atT+1;
i--)
9201#ifndef ENTER_USE_MEMMOVE
9202 strat->
T[
i] = strat->
T[
i-1];
9205 strat->
R[strat->
T[
i].i_r] = &(strat->
T[
i]);
9213 if (!(
currRing->isLPring &&
p->shift > 0))
9229 strat->
T[atT].max_exp =
NULL;
9232 strat->
R[strat->
tl] = &(strat->
T[atT]);
9233 strat->
T[atT].i_r = strat->
tl;
9257 for(
i=strat->
tl;
i>=0;
i--)
9259 if (
p->p==strat->
T[
i].p)
9261 printf(
"already in T at pos %d of %d, atT=%d\n",
i,strat->
tl,atT);
9267#ifdef HAVE_TAIL_RING
9270 p->t_p=
p->GetLmTailRing();
9275 atT = strat->
posInT(strat->
T, strat->
tl, *
p);
9276 if (strat->
tl == strat->
tmax-1)
9278 if (atT <= strat->tl)
9280#ifdef ENTER_USE_MEMMOVE
9281 memmove(&(strat->
T[atT+1]), &(strat->
T[atT]),
9283 memmove(&(strat->
sevT[atT+1]), &(strat->
sevT[atT]),
9284 (strat->
tl-atT+1)*
sizeof(
unsigned long));
9286 for (
i=strat->
tl+1;
i>=atT+1;
i--)
9288#ifndef ENTER_USE_MEMMOVE
9289 strat->
T[
i] = strat->
T[
i-1];
9292 strat->
R[strat->
T[
i].i_r] = &(strat->
T[
i]);
9310 strat->
T[atT].max_exp =
NULL;
9313 strat->
R[strat->
tl] = &(strat->
T[atT]);
9314 strat->
T[atT].i_r = strat->
tl;
9321 for(
i=strat->
tl;
i>=0;
i--)
9351 (strat->
syzmax)*
sizeof(
unsigned long),
9353 *
sizeof(
unsigned long));
9356 if (atT < strat->syzl)
9358#ifdef ENTER_USE_MEMMOVE
9359 memmove(&(strat->
syz[atT+1]), &(strat->
syz[atT]),
9360 (strat->
syzl-atT+1)*
sizeof(poly));
9361 memmove(&(strat->
sevSyz[atT+1]), &(strat->
sevSyz[atT]),
9362 (strat->
syzl-atT+1)*
sizeof(
unsigned long));
9364 for (
i=strat->
syzl;
i>=atT+1;
i--)
9366#ifndef ENTER_USE_MEMMOVE
9377 strat->
syz[atT] =
p.sig;
9378 strat->
sevSyz[atT] =
p.sevSig;
9381 Print(
"element in strat->syz: %d--%d ",atT+1,strat->
syzmax);
9391 strat->
L[cc].sig, ~strat->
L[cc].sevSig,
currRing)
9403 PrintS(
"--- Syzygies ---\n");
9406 PrintS(
"--------------------------------\n");
9412 PrintS(
"--------------------------------\n");
9492 if (strat->
homog)
PrintS(
"ideal/module is homogeneous\n");
9493 else PrintS(
"ideal/module is not homogeneous\n");
9561 if (strat->
homog)
PrintS(
"ideal/module is homogeneous\n");
9562 else PrintS(
"ideal/module is not homogeneous\n");
10069 if ((r->m[
l]!=
NULL)
10076 if ((
Q->m[q]!=
NULL)
10099 if ((r->m[
l]!=
NULL)
10106 if ((
Q->m[q]!=
NULL)
10149 reduction_found=
TRUE;
10179 reduction_found=
TRUE;
10192 if ( reduction_found)
10280 for (
i=strat->
sl;
i>=low;
i--)
10282 int end_pos=strat->
sl;
10284 if (strat->
ak==0) end_pos=
i-1;
10286 if ((T_j !=
NULL)&&(T_j->p==strat->
S[
i]))
10304 Print(
"to (tailR) S[%d]:",
i);
10316 T_j->max_exp =
NULL;
10319 T_j->pCleardenom();
10359 Print(
"to (-tailR) S[%d]:",
i);
10412 if ((e=
pGetExp(newNoether,
i)) > 0)
10464 assume(L->i_r1 >= -1 && L->i_r1 <= strat->
tl);
10465 assume(L->i_r2 >= -1 && L->i_r2 <= strat->
tl);
10470 if ((L->i_r1 == -1) || (L->i_r2 == -1) )
10475 if ((L->i_r1>=0)&&(strat->
R[L->i_r1]!=
NULL)) p1_max = (strat->
R[L->i_r1])->max_exp;
10477 if ((L->i_r2>=0)&&(strat->
R[L->i_r2]!=
NULL)) p2_max = (strat->
R[L->i_r2])->max_exp;
10502 poly p1_max = (strat->
R[atR])->max_exp;
10503 poly p2_max = (strat->
R[strat->
S_2_R[atS]])->max_exp;
10521 ideal F =
idCopy(Forig);
10525 ideal monred =
idInit(1,1);
10532 if((posconst != -1) && (!
nIsZero(F->m[posconst]->coef)))
10542 for(
int i=0;
i<idelemQ;
i++)
10550 if((posconst != -1) && (!
nIsZero(monred->m[posconst]->coef)))
10552 pmon =
pCopy(monred->m[posconst]);
10567 II->m[
j++] =
prMapR(F->m[
i], nMap, origR, QQ_ring);
10569 II->m[
j++] =
prMapR(
Q->m[
i], nMap, origR, QQ_ring);
10576 if(II->m[
i] !=
NULL)
10577 II->m[
i+1] = II->m[
i];
10580 poly integer =
NULL;
10588 integer =
pHead(syz->m[
i]);
10595 pmon =
prMapR(integer, nMap2, QQ_ring, origR);
10609 poly mindegmon =
NULL;
10614 if(mindegmon ==
NULL)
10615 mindegmon =
pCopy(one->m[
i]);
10618 if(
p_Deg(one->m[
i], QQ_ring) <
p_Deg(mindegmon, QQ_ring))
10619 mindegmon =
pCopy(one->m[
i]);
10623 if(mindegmon !=
NULL)
10626 if(II->m[
i] !=
NULL)
10627 II->m[
i+1] = II->m[
i];
10628 II->m[0] =
pCopy(mindegmon);
10657 pmon =
prMapR(mindegmon, nMap2, QQ_ring, origR);
10686 poly pH =
h->GetP();
10690 for(
int i = 0;
i<=strat->
sl;
i++)
10700#ifdef HAVE_SHIFTBBA
10725#ifdef HAVE_SHIFTBBA
10753 h->SetLmCurrRing();
10754 if((deleted)&&(
h->p!=
NULL))
10762 poly hSig =
h->sig;
10763 poly pH =
h->GetP();
10767 for(
int i = 0;
i<=strat->
sl;
i++)
10778 if(sigMult!=
NULL &&
pLtCmp(hSig,sigMult) == 1)
10805 if(sigMult!=
NULL &&
pLtCmp(hSig,sigMult) == 1)
10836 h->SetLmCurrRing();
10945 if (expbound == 0) expbound = strat->
tailRing->bitmask << 1;
10962 new_tailRing->pFDeg =
currRing->pFDeg;
10963 new_tailRing->pLDeg =
currRing->pLDeg;
10967 Print(
"[%lu:%d", (
unsigned long) new_tailRing->bitmask, new_tailRing->ExpL_Size);
10978 for (
i=0;
i<=strat->
tl;
i++)
10980 strat->
T[
i].ShallowCopyDelete(new_tailRing, new_tailBin,
10981 p_shallow_copy_delete);
10983 for (
i=0;
i<=strat->
Ll;
i++)
10987 strat->
L[
i].ShallowCopyDelete(new_tailRing, p_shallow_copy_delete);
10989 if ((strat->
P.t_p !=
NULL) ||
10991 strat->
P.ShallowCopyDelete(new_tailRing, p_shallow_copy_delete);
10993 if ((L !=
NULL) && (L->tailRing != new_tailRing))
10996 L->ShallowCopyDelete(new_tailRing, p_shallow_copy_delete);
11002 L->tailRing = new_tailRing;
11005 L->max_exp = t_l->max_exp;
11009 if ((
T !=
NULL) && (
T->tailRing != new_tailRing &&
T->i_r < 0))
11010 T->ShallowCopyDelete(new_tailRing, new_tailBin, p_shallow_copy_delete);
11017 strat->
tailBin = new_tailBin;
11038 unsigned long l = 0;
11044 for (
i=0;
i<= strat->
Ll;
i++)
11048 for (
i=0;
i<=strat->
tl;
i++)
11076 res->block0 = (
int *)
omAlloc0((n+1)*
sizeof(
int));
11077 res->block1 = (
int *)
omAlloc0((n+1)*
sizeof(
int));
11078 int **wvhdl = (
int **)
omAlloc0((n+1)*
sizeof(
int*));
11079 res->wvhdl = wvhdl;
11080 for (
int i=1;
i<n;
i++)
11082 res->order[
i] = r->order[
i-1];
11083 res->block0[
i] = r->block0[
i-1];
11084 res->block1[
i] = r->block1[
i-1];
11085 res->wvhdl[
i] = r->wvhdl[
i-1];
11105 WarnS(
"error in nc_rComplete");
11124 res->block0 = (
int *)
omAlloc0((n+2)*
sizeof(
int));
11125 res->block1 = (
int *)
omAlloc0((n+2)*
sizeof(
int));
11126 int **wvhdl = (
int **)
omAlloc0((n+2)*
sizeof(
int*));
11127 res->wvhdl = wvhdl;
11128 for (
int i=2;
i<n+2;
i++)
11130 res->order[
i] = r->order[
i-2];
11131 res->block0[
i] = r->block0[
i-2];
11132 res->block1[
i] = r->block1[
i-2];
11133 res->wvhdl[
i] = r->wvhdl[
i-2];
11138 res->block0[0] = 1;
11140 for (
int i=0;
i<
res->N; ++
i)
11141 res->wvhdl[0][
i] = 1;
11161 WarnS(
"error in nc_rComplete");
11298#ifdef HAVE_TAIL_BIN
11324Timings
for the different possibilities of posInT:
11325 T15 EDL DL EL L 1-2-3
11326Gonnet 43.26 42.30 38.34 41.98 38.40 100.04
11327Hairer_2_1 1.11 1.15 1.04 1.22 1.08 4.7
11328Twomat3 1.62 1.69 1.70 1.65 1.54 11.32
11329ahml 4.48 4.03 4.03 4.38 4.96 26.50
11330c7 15.02 13.98 15.16 13.24 17.31 47.89
11331c8 505.09 407.46 852.76 413.21 499.19 n/a
11332f855 12.65 9.27 14.97 8.78 14.23 33.12
11333gametwo6 11.47 11.35 14.57 11.20 12.02 35.07
11334gerhard_3 2.73 2.83 2.93 2.64 3.12 6.24
11335ilias13 22.89 22.46 24.62 20.60 23.34 53.86
11336noon8 40.68 37.02 37.99 36.82 35.59 877.16
11337rcyclic_19 48.22 42.29 43.99 45.35 51.51 204.29
11338rkat9 82.37 79.46 77.20 77.63 82.54 267.92
11339schwarz_11 16.46 16.81 16.76 16.81 16.72 35.56
11340test016 16.39 14.17 14.40 13.50 14.26 34.07
11341test017 34.70 36.01 33.16 35.48 32.75 71.45
11342test042 10.76 10.99 10.27 11.57 10.45 23.04
11343test058 6.78 6.75 6.51 6.95 6.22 9.47
11344test066 10.71 10.94 10.76 10.61 10.56 19.06
11345test073 10.75 11.11 10.17 10.79 8.63 58.10
11346test086 12.23 11.81 12.88 12.24 13.37 66.68
11347test103 5.05 4.80 5.47 4.64 4.89 11.90
11348test154 12.96 11.64 13.51 12.46 14.61 36.35
11349test162 65.27 64.01 67.35 59.79 67.54 196.46
11350test164 7.50 6.50 7.68 6.70 7.96 17.13
11351virasoro 3.39 3.50 3.35 3.47 3.70 7.66
11361 if (
length==-1)
return 0;
11364 int op=
p.GetpFDeg();
11365 int ol =
p.GetpLength();
11367 if (set[
length].ecart < o)
11369 if (set[
length].ecart == o)
11371 int oo=set[
length].GetpFDeg();
11372 if ((oo < op) || ((oo==op) && (set[
length].
length < ol)))
11383 if (set[an].ecart > o)
11385 if (set[an].ecart == o)
11387 int oo=set[an].GetpFDeg();
11389 || ((oo==op) && (set[an].
pLength > ol)))
11395 if (set[
i].ecart > o)
11397 else if (set[
i].ecart == o)
11399 int oo=set[
i].GetpFDeg();
11401 || ((oo == op) && (set[
i].
pLength > ol)))
11415 if (
length==-1)
return 0;
11417 int op=
p.GetpFDeg();
11418 int ol =
p.GetpLength();
11420 int oo=set[
length].GetpFDeg();
11421 if ((oo < op) || ((oo==op) && (set[
length].
length < ol)))
11431 int oo=set[an].GetpFDeg();
11433 || ((oo==op) && (set[an].
pLength > ol)))
11438 int oo=set[
i].GetpFDeg();
11440 || ((oo == op) && (set[
i].
pLength > ol)))
11451 int ol =
p.GetpLength();
11465 if (set[an].
pLength>ol)
return an;
11482 else if (strat->
red==
redHoney) printf(
"redHoney\n");
11483 else if (strat->
red==
redEcart) printf(
"redEcart\n");
11484 else if (strat->
red==
redHomog) printf(
"redHomog\n");
11485 else if (strat->
red==
redLazy) printf(
"redLazy\n");
11487 else printf(
"%p\n",(
void*)strat->
red);
11488 printf(
"posInT: ");
11504#ifdef HAVE_MORE_POS_IN_T
11510 else printf(
"%p\n",(
void*)strat->
posInT);
11511 printf(
"posInL: ");
11528 else printf(
"%p\n",(
void*)strat->
posInL);
11529 printf(
"enterS: ");
11533 else printf(
"%p\n",(
void*)strat->
enterS);
11534 printf(
"initEcart: ");
11537 else printf(
"%p\n",(
void*)strat->
initEcart);
11538 printf(
"initEcartPair: ");
11542 printf(
"homog=%d, LazyDegree=%d, LazyPass=%d, ak=%d,\n",
11544 printf(
"honey=%d, sugarCrit=%d, Gebauer=%d, noTailReduction=%d, use_buckets=%d\n",
11546 printf(
"chainCrit: ");
11549 else printf(
"%p\n",(
void*)strat->
chainCrit);
11550 printf(
"posInLDependsOnLength=%d\n",
11566 else printf(
"? (%lx)", (
long)
currRing->pLDeg);
11580 else printf(
"? (%lx)", (
long)strat->
tailRing->pLDeg);
11582 printf(
"currRing->pFDeg: ");
11590 else printf(
"? (%lx)", (
long)
currRing->pFDeg);
11598 printf(
"ecartWeights: ");
11620#ifdef HAVE_SHIFTBBA
11625 assume(ifromS <= strat->sl);
11724 PrintS(
"\n--- create strong gcd poly: ");
11727 Print(
"\n q (strat->S[%d]): ", ifromS);
11733 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);
11755 h.i_r1 = -1;
h.i_r2 = -1;
11762 if (atR >= 0 && shiftcount == 0 && ifromS >= 0)
11775 posx = strat->
posInL(strat->
L,strat->
Ll,&
h,strat);
11789#ifdef HAVE_SHIFTBBA
11816 int j,compare,compareCoeff;
11820 h.ecart=0;
h.length=0;
11852 for(
j = strat->
Bl;
j>=0;
j--)
11861 if ((strat->
fromQ==
NULL) || (isFromQ==0) || (qisFromQ==0))
11876 if ((strat->
fromQ==
NULL) || (isFromQ==0) || (qisFromQ==0))
11889 if ((strat->
fromQ==
NULL) || (isFromQ==0) || (qisFromQ==0))
11993 h.i_r1 = -1;
h.i_r2 = -1;
12002 if (atR >= 0 && shiftcount == 0 && ifromS >= 0)
12017 posx = strat->
posInL(strat->
B,strat->
Bl,&
h,strat);
12032#ifdef HAVE_SHIFTBBA
12042#ifdef HAVE_SHIFTBBA
12047 assume(q_inS < 0 || strat->S[q_inS] == q);
12057 if (strat->
fromQ !=
NULL && q_inS >= 0)
12058 q_isFromQ = strat->
fromQ[q_inS];
12060 BOOLEAN (*enterPair)(poly, poly, int, int,
kStrategy, int, int, int, int, int);
12067 int neededShift = p_lastVblock - ((
pGetComp(
p) > 0 ||
pGetComp(q) > 0) ? 0 : 1);
12068 int maxPossibleShift =
degbound - q_lastVblock;
12069 int maxShift =
si_min(neededShift, maxPossibleShift);
12070 int firstShift = (q ==
p ? 1 : 0);
12072 for (
int j = firstShift;
j <= maxShift;
j++)
12075 if (enterPair(qq,
p, ecartp, p_isFromQ, strat, -1, ecartq, q_isFromQ,
j, q_inS))
12087 for (
int j = p_lastVblock;
j <= maxPossibleShift;
j++)
12093 enterPair(qq,
p, ecartp, p_isFromQ, strat, -1, ecartq, q_isFromQ, p_lastVblock, q_inS);
12098 return delete_pair;
12102#ifdef HAVE_SHIFTBBA
12108 assume(p_inS < 0 || strat->S[p_inS] ==
p);
12117 if (strat->
fromQ !=
NULL && p_inS >= 0)
12118 p_isFromQ = strat->
fromQ[p_inS];
12122 assume(q_shift <= p_lastVblock);
12128 return enterOnePairShift(q,
p, ecartp, p_isFromQ, strat, -1, ecartq, q_isFromQ, q_shift, -1);
12142#ifdef HAVE_SHIFTBBA
12145#ifdef CRITERION_DEBUG
12150 poly lmq =
pHead(q);
12171 int qfromQ = qisFromQ;
12180 Lp.ecart=0; Lp.length=0;
12190#ifdef CRITERION_DEBUG
12198 if((!((ecartq>0)&&(ecart>0)))
12217#ifdef CRITERION_DEBUG
12223 Lp.ecart =
si_max(ecart,ecartq);
12224 if (strat->
fromT && (ecartq>ecart))
12227#ifdef CRITERION_DEBUG
12249 if ((strat->
fromQ==
NULL) || (isFromQ==0) || (qfromQ==0))
12252#ifdef CRITERION_DEBUG
12255 Print(
"--- chain crit using B[%d].lcm=%s\n",
j,
pString(strat->
B[
j].lcm));
12266#ifdef CRITERION_DEBUG
12269 Print(
"--- chain crit using pair to remove B[%d].lcm=%s\n",
j,
pString(strat->
B[
j].lcm));
12302#ifdef CRITERION_DEBUG
12307 if (strat->
fromT && (ecartq>ecart))
12310#ifdef CRITERION_DEBUG
12322 for(
j = strat->
Bl;
j>=0;
j--)
12328 if ((strat->
fromQ==
NULL) || (isFromQ==0) || (qfromQ==0))
12331#ifdef CRITERION_DEBUG
12334 Print(
"--- chain crit using B[%d].lcm=%s\n",
j,
pString(strat->
B[
j].lcm));
12344#ifdef CRITERION_DEBUG
12347 Print(
"--- chain crit using pair to remove B[%d].lcm=%s\n",
j,
pString(strat->
B[
j].lcm));
12364#ifdef CRITERION_DEBUG
12369 if ((strat->
fromQ!=
NULL) && (isFromQ!=0) && (qfromQ!=0))
12372#ifdef CRITERION_DEBUG
12431#ifdef CRITERION_DEBUG
12448 if ( (atR >= 0) && (shiftcount==0) && (ifromS >=0) )
12465 && (Lp.p->coef!=
NULL))
12469 l = strat->
posInL(strat->
B,strat->
Bl,&Lp,strat);
12471#ifdef CRITERION_DEBUG
12484#ifdef HAVE_SHIFTBBA
12490 if (h_lastVblock == 0)
return;
12501 int maxShift =
degbound - h_lastVblock;
12510 for (
i=0;
i<=maxShift;
i++)
12514 for (
j=0;
j<=
k;
j++)
12519 poly
s = strat->
S[
j];
12530 for (
j=0;
j<=
k;
j++)
12532 poly
s = strat->
S[
j];
12547 else if ((isFromQ)&&(strat->
fromQ!=
NULL))
12550 for (
j=0;
j<=
k;
j++)
12555 poly
s = strat->
S[
j];
12562 for (
i=1;
i<=maxShift;
i++)
12566 for (
j=0;
j<=
k;
j++)
12570 poly
s = strat->
S[
j];
12572 if (
i < s_lastVblock || (
pGetComp(
s) > 0 &&
i == s_lastVblock))
12598 for (
j=0;
j<=
k;
j++)
12600 poly
s = strat->
S[
j];
12604 for (
i=1;
i<=maxShift;
i++)
12608 for (
j=0;
j<=
k;
j++)
12610 poly
s = strat->
S[
j];
12612 if (
i < s_lastVblock || (
pGetComp(
s) > 0 &&
i == s_lastVblock))
12627 if (
i < h_lastVblock)
12651 for (
j=0;
j<=
k;
j++)
12656 poly
s = strat->
S[
j];
12673 for (
j=0;
j<=
k;
j++)
12678 poly
s = strat->
S[
j];
12683 for (
i=1;
i<=maxShift;
i++)
12686 for (
j=0;
j<=
k;
j++)
12691 poly
s = strat->
S[
j];
12693 if (
i <= s_lastVblock)
12708 if (
i <= h_lastVblock)
12742#ifdef HAVE_SHIFTBBA
12748 if (h_lastVblock == 0)
return;
12759 int maxShift =
degbound - h_lastVblock;
12768 for (
i=0;
i<=maxShift;
i++)
12771 for (
j=0;
j<=
k;
j++)
12776 poly
s = strat->
S[
j];
12785 for (
j=0;
j<=
k;
j++)
12787 poly
s = strat->
S[
j];
12802 else if ((isFromQ)&&(strat->
fromQ!=
NULL))
12805 for (
j=0;
j<=
k;
j++)
12810 poly
s = strat->
S[
j];
12817 for (
i=1;
i<=maxShift;
i++)
12820 for (
j=0;
j<=
k;
j++)
12824 poly
s = strat->
S[
j];
12835 for (
j=0;
j<=
k;
j++)
12837 poly
s = strat->
S[
j];
12842 for (
i=1;
i<=maxShift;
i++)
12846 for (
j=0;
j<=
k;
j++)
12848 poly
s = strat->
S[
j];
12863 for (
j=0;
j<=
k;
j++)
12869 poly
s = strat->
S[
j];
12886 for (
j=0;
j<=
k;
j++)
12891 poly
s = strat->
S[
j];
12896 for (
i=1;
i<=maxShift;
i++)
12899 for (
j=0;
j<=
k;
j++)
12904 poly
s = strat->
S[
j];
12926#ifdef HAVE_SHIFTBBA
12935 if ( (!strat->
fromT)
12956#ifdef HAVE_SHIFTBBA
12967 for (
int i = 1;
i <= maxPossibleShift;
i++)
12974 enterT(&qq, strat, atT);
12979#ifdef HAVE_SHIFTBBA
12986 p =
h = L->GetLmTailRing();
12988 return L->GetLmCurrRing();
12995 Ln.pLength = L->GetpLength() - 1;
13003 while(!Ln.IsNull())
13007 Ln.SetShortExpVector();
13013 With = &(strat->
T[
j]);
13018 if (With ==
NULL)
break;
13034 pNext(
h) = Ln.LmExtractAndIter();
13037 }
while (!Ln.IsNull());
13040 if (Ln.IsNull())
goto all_done;
13041 if (! withT) With_s.Init(
currRing);
13043 pNext(
h) = Ln.LmExtractAndIter();
13058 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)
void(* enterS)(LObject *h, int pos, kStrategy strat, int atR)
pShallowCopyDeleteProc p_shallow_copy_delete
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
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 redFirst(LObject *h, kStrategy strat)
long kModDeg(poly p, const ring r)
int redEcart(LObject *h, kStrategy strat)
void enterSMora(LObject *p, int atS, kStrategy strat, int atR)
int posInL10(const LSet set, const int length, LObject *p, const kStrategy strat)
ideal kStd2(ideal F, ideal Q, tHomog h, intvec **w, bigintmat *hilb, int syzComp, int newIdeal, intvec *vw, s_poly_proc_t sp)
generic interface to GB/SB computations, large hilbert vectors
poly kNF(ideal F, ideal Q, poly p, int syzComp, int lazyReduce)
void enterSMoraNF(LObject *p, int atS, kStrategy strat, int atR)
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)
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)
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 posInT11(const TSet set, const int length, LObject &p)
int posInT1(const TSet set, const int length, LObject &p)
void enterSBba(LObject *p, int atS, kStrategy strat, int atR)
int posInT110Ring(const TSet set, const int length, LObject &p)
void message(int i, int *olddeg, int *reduc, kStrategy strat, int red_result)
BOOLEAN arriRewCriterion(poly, unsigned long, poly, kStrategy strat, int start=0)
BOOLEAN kTest(kStrategy strat)
void initenterpairsSigRing(poly h, poly hSig, int hFrom, int k, int ecart, int isFromQ, kStrategy strat, int atR=-1)
poly redtailBbaBound(LObject *L, int end_pos, kStrategy strat, int bound, BOOLEAN withT, BOOLEAN normalize)
void enterT_strong(LObject *p, kStrategy strat, int atT)
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)
void enterSBbaShift(LObject *p, int atS, kStrategy strat, int atR)
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)
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 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)
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 enterT(LObject *p, kStrategy strat, int atT)
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 reorderS(int *suc, kStrategy strat)
void enterTShift(LObject *p, kStrategy strat, int atT)
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 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)
void enterSSba(LObject *p, int atS, kStrategy strat, int atR)
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)
static BOOLEAN is_shifted_p1(const 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)
int posInL11(const LSet set, const int length, LObject *p, const kStrategy)
poly redtailBba_Ring(LObject *L, int end_pos, 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 initSbaCrit(kStrategy strat)
BOOLEAN newHEdge(kStrategy strat)
void cancelunit(LObject *L, BOOLEAN inNF)
void initHilbCrit(ideal, ideal, bigintmat **hilb, kStrategy strat)
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 rHasLocalOrMixedOrdering(const ring r)
static BOOLEAN rHasGlobalOrdering(const ring 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)
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)
static BOOLEAN rHasMixedOrdering(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)