12#define MORA_USE_BUCKETS
14#define PRE_INTEGER_CHECK 0
141 h->length=
h->pLength=pLength(
h->p);
145 if (ret < 0)
return ret;
175 d =
h->GetpFDeg()+
h->ecart;
177 h->SetShortExpVector();
187 ei = strat->
T[
j].ecart;
192 unsigned long not_sev=
~h->sev;
193 poly h_t=
h->GetLmTailRing();
194 li = strat->
T[
j].length;
195 if (li<=0) li=strat->
T[
j].GetpLength();
204 if (
i > strat->
tl)
break;
206 if (strat->
T[
i].length<=0) strat->
T[
i].GetpLength();
207 if ((strat->
T[
i].ecart < ei || (strat->
T[
i].ecart == ei &&
208 strat->
T[
i].length < li))
210 p_LmShortDivisibleBy(strat->
T[
i].GetLmTailRing(), strat->
sevT[
i], h_t, not_sev, strat->
tailRing))
215 if (strat->
T[
i].ecart < ei || (strat->
T[
i].ecart == ei &&
216 strat->
T[
i].length < li))
221 ei = strat->
T[
i].ecart;
222 if (ei <= h->ecart)
break;
223 li = strat->
T[
i].length;
241 at = strat->
posInL(strat->
L,strat->
Ll,
h,strat);
308 h->SetShortExpVector();
313 h->ecart = d-
h->GetpFDeg();
315 h->ecart = d-
h->GetpFDeg()+ei-
h->ecart;
319 h->ecart =
h->pLDeg(strat->
LDegLast) -
h->GetpFDeg();
326 if (strat->
honey)
h->SetLength();
336 d =
h->GetpFDeg()+
h->ecart;
343 && ((d >= reddeg) || (pass > strat->
LazyPass)))
349 at = strat->
posInL(strat->
L,strat->
Ll,
h,strat);
371 if (
h->pTotalDeg()+
h->ecart >= (
int)strat->
tailRing->bitmask)
376 at = strat->
posInL(strat->
L,strat->
Ll,
h,strat);
392 d =
h->GetpFDeg()+
h->ecart;
394 h->SetShortExpVector();
413 if (
h->GetLmTailRing() ==
NULL)
422 ei = strat->
T[
j].ecart;
424 if (ei >
h->ecart && ii < strat->tl)
426 li = strat->
T[
j].length;
436 if (
i > strat->
tl)
break;
437 if ((strat->
T[
i].ecart < ei || (strat->
T[
i].ecart == ei &&
438 strat->
T[
i].length < li))
440 p_LmShortDivisibleBy(strat->
T[
i].GetLmTailRing(), strat->
sevT[
i],
h->GetLmTailRing(), ~
h->sev, strat->
tailRing)
442 n_DivBy(
h->p->coef,strat->
T[
i].p->coef,strat->
tailRing->cf))
447 if (strat->
T[
i].ecart < ei || (strat->
T[
i].ecart == ei &&
448 strat->
T[
i].length < li))
453 ei = strat->
T[
i].ecart;
454 if (ei <= h->ecart)
break;
455 li = strat->
T[
i].length;
473 at = strat->
posInL(strat->
L,strat->
Ll,
h,strat);
474 if (at <= strat->Ll &&
pLmCmp(
h->p, strat->
L[strat->
Ll].p) != 0 && !
nEqual(
h->p->coef, strat->
L[strat->
Ll].p->coef))
503 h->SetShortExpVector();
508 h->ecart = d-
h->GetpFDeg();
510 h->ecart = d-
h->GetpFDeg()+ei-
h->ecart;
514 h->ecart =
h->pLDeg(strat->
LDegLast) -
h->GetpFDeg();
517 d =
h->GetpFDeg()+
h->ecart;
524 && ((d >= reddeg) || (pass > strat->
LazyPass)))
530 at = strat->
posInL(strat->
L,strat->
Ll,
h,strat);
552 if (
h->pTotalDeg()+
h->ecart >= (
int)strat->
tailRing->bitmask)
557 at = strat->
posInL(strat->
L,strat->
Ll,
h,strat);
573 poly T0p = strat->
T[0].p;
574 int T0ecart = strat->
T[0].ecart;
577 d =
h->GetpFDeg()+
h->ecart;
579 h->SetShortExpVector();
581 &&strat->
T[0].GetpFDeg() == 0
582 && strat->
T[0].length <= 2)
594 if (
j == 0 && n_DivBy(pGetCoeff(
h->p), pGetCoeff(T0p),
currRing->cf) ==
FALSE
595 && T0ecart <= h->ecart)
604 mult = n_QuotRem(pGetCoeff(
h->p), pGetCoeff(T0p),
613 if (n_IsZero(pGetCoeff(
h->GetP()),
currRing->cf))
615 h->LmDeleteAndIter();
635 if (
h->GetLmTailRing() ==
NULL)
644 ei = strat->
T[
j].ecart;
647 if (ei >
h->ecart && ii < strat->tl)
649 li = strat->
T[
j].length;
659 if (
i > strat->
tl)
break;
660 if ((strat->
T[
i].ecart < ei || (strat->
T[
i].ecart == ei &&
661 strat->
T[
i].length < li))
663 p_LmShortDivisibleBy(strat->
T[
i].GetLmTailRing(), strat->
sevT[
i],
h->GetLmTailRing(), ~
h->sev, strat->
tailRing)
665 n_DivBy(
h->p->coef,strat->
T[
i].p->coef,strat->
tailRing->cf))
670 if (strat->
T[
i].ecart < ei || (strat->
T[
i].ecart == ei &&
671 strat->
T[
i].length < li))
676 ei = strat->
T[
i].ecart;
677 if (ei <= h->ecart)
break;
678 li = strat->
T[
i].length;
697 at = strat->
posInL(strat->
L,strat->
Ll,
h,strat);
698 if (at <= strat->Ll &&
pLmCmp(
h->p, strat->
L[strat->
Ll].p) != 0 && !
nEqual(
h->p->coef, strat->
L[strat->
Ll].p->coef))
727 h->SetShortExpVector();
732 h->ecart = d-
h->GetpFDeg();
734 h->ecart = d-
h->GetpFDeg()+ei-
h->ecart;
738 h->ecart =
h->pLDeg(strat->
LDegLast) -
h->GetpFDeg();
741 d =
h->GetpFDeg()+
h->ecart;
748 && ((d >= reddeg) || (pass > strat->
LazyPass)))
754 at = strat->
posInL(strat->
L,strat->
Ll,
h,strat);
776 if (
h->pTotalDeg()+
h->ecart >= (
int)strat->
tailRing->bitmask)
781 at = strat->
posInL(strat->
L,strat->
Ll,
h,strat);
796 if (strat->
tl<0)
return 1;
797 if (
h->IsNull())
return 0;
805 reddeg = d =
h->GetpFDeg();
811 h->SetShortExpVector();
817 h->SetDegStuffReturnLDeg(strat->
LDegLast);
886 h->SetShortExpVector();
899 h->SetDegStuffReturnLDeg(strat->
LDegLast);
909 if (strat->
T[
j].ecart <=
h->ecart)
910 h->ecart = d -
h->GetpFDeg();
912 h->ecart = d -
h->GetpFDeg() + strat->
T[
j].ecart -
h->ecart;
914 d =
h->GetpFDeg() +
h->ecart;
917 d =
h->SetDegStuffReturnLDeg(strat->
LDegLast);
927 && ((d >= reddeg) || (pass > strat->
LazyPass)))
932 at = strat->
posInL(strat->
L,strat->
Ll,
h,strat);
956 if (
h->pTotalDeg()+
h->ecart >= (
int)strat->
tailRing->bitmask)
961 at = strat->
posInL(strat->
L,strat->
Ll,
h,strat);
982 int o =
H.SetpFDeg();
997 unsigned long not_sev = ~ H.sev;
998 if (p_LmShortDivisibleBy(strat->
T[
j].GetLmTailRing(), strat->
sevT[
j],
H.GetLmTailRing(), not_sev, strat->
tailRing)
1003 int ei = strat->
T[
j].ecart;
1004 int li = strat->
T[
j].length;
1015 if (
j > strat->
tl)
break;
1016 if (ei <=
H.ecart)
break;
1017 if (((strat->
T[
j].ecart < ei)
1018 || ((strat->
T[
j].ecart == ei)
1019 && (strat->
T[
j].length < li)))
1027 ei = strat->
T[
j].ecart;
1028 li = strat->
T[
j].length;
1050 H.length=
H.pLength=pLength(
H.p);
1086 poly T0p = strat->
T[0].p;
1087 int T0ecart = strat->
T[0].ecart;
1088 int o =
H.SetpFDeg();
1092 unsigned long not_sev = ~ H.sev;
1093 if (strat->
T[0].GetpFDeg() == 0 && strat->
T[0].length <= 2)
1110 && (n_DivBy(pGetCoeff(
H.p), pGetCoeff(T0p),
currRing->cf) ==
FALSE)
1111 && (T0ecart <=
H.ecart))
1120 mult = n_QuotRem(pGetCoeff(
H.p), pGetCoeff(T0p),
1140 if (p_LmShortDivisibleBy(strat->
T[
j].GetLmTailRing(), strat->
sevT[
j],
H.GetLmTailRing(), not_sev, strat->
tailRing)
1141 && (n_DivBy(
H.p->coef, strat->
T[
j].p->coef,strat->
tailRing->cf))
1146 int ei = strat->
T[
j].ecart;
1147 int li = strat->
T[
j].length;
1158 if (
j > strat->
tl)
break;
1159 if (ei <=
H.ecart)
break;
1160 if (((strat->
T[
j].ecart < ei)
1161 || ((strat->
T[
j].ecart == ei)
1162 && (strat->
T[
j].length < li)))
1164 && (n_DivBy(
H.p->coef, strat->
T[
j].p->coef,strat->
tailRing->cf))
1171 ei = strat->
T[
j].ecart;
1172 li = strat->
T[
j].length;
1188 H.length=
H.pLength=pLength(
H.p);
1226 for (
i=1;
i<=strat->
Ll;
i++)
1228 at = strat->
posInL(strat->
L,
i-1,&(strat->
L[
i]),strat);
1232 for (
j=
i-1;
j>=at;
j--) strat->
L[
j+1] = strat->
L[
j];
1248 for (
i=1;
i<=strat->
tl;
i++)
1250 if (strat->
T[
i-1].length > strat->
T[
i].length)
1253 sev = strat->
sevT[
i];
1259 if (strat->
T[
i].length > strat->
T[at].length)
break;
1261 for (
j =
i-1;
j>at;
j--)
1263 strat->
T[
j+1]=strat->
T[
j];
1265 strat->
R[strat->
T[
j+1].i_r] = &(strat->
T[
j+1]);
1268 strat->
sevT[at+1] = sev;
1269 strat->
R[
p.i_r] = &(strat->
T[at+1]);
1345 if (L->bucket !=
NULL)
1364 if (length<0)
return 0;
1367 int op=
p->GetpFDeg() +
p->ecart;
1368 for (
j=length;
j>=0;
j--)
1375 && (set[
j].GetpFDeg()+set[
j].ecart >= op))
1409 p=strat->
L[strat->
Ll];
1410 strat->
L[strat->
Ll]=strat->
L[
j];
1427 pLmFree(strat->
L[
j].p);
1443 strat->
L[
j].SetLmCurrRing();
1460 p=strat->
L[strat->
Ll];
1461 strat->
L[strat->
Ll]=strat->
L[
j];
1489 pLmFree(strat->
L[
i].p);
1497 pLmFree(strat->
L[
i].p);
1512 if (! strat->
L[
i].IsNull())
1514 strat->
L[
i].SetLmCurrRing();
1515 strat->
L[
i].SetpFDeg();
1517 = strat->
L[
i].pLDeg(strat->
LDegLast) - strat->
L[
i].GetpFDeg();
1523 if (strat->
L[
i].IsNull())
1553 if (
p.p != strat->
T[
i].p)
1581 for (
i=strat->
Ll;
i>=0;
i--)
1583 strat->
L[
i].SetpFDeg();
1585 for (
i=strat->
tl;
i>=0;
i--)
1587 strat->
T[
i].SetpFDeg();
1635 Print(
"new s%d:",atS);
1768 if(rHasLocalOrMixedOrdering(
currRing))
1892 int hilbeledeg=1,hilbcount=0;
1925#ifdef HAVE_TAIL_RING
1934 while (strat->
Ll >= 0)
1941 while (strat->
Ll >= 0)
1946 && (strat->
L[strat->
Ll].ecart+strat->
L[strat->
Ll].GetpFDeg()>
Kstd1_deg))
1953 while ((strat->
Ll >= 0)
1954 && (strat->
L[strat->
Ll].p1!=
NULL) && (strat->
L[strat->
Ll].p2!=
NULL)
1955 && (strat->
L[strat->
Ll].ecart+strat->
L[strat->
Ll].GetpFDeg()>
Kstd1_deg)
1964 if (strat->
Ll<0)
break;
1967 strat->
P = strat->
L[strat->
Ll];
1977 pLmFree(strat->
P.p);
1995 else if (strat->
P.p1 ==
NULL)
2003 if (!strat->
P.IsNull())
2007 message(strat->
P.ecart+strat->
P.GetpFDeg(),&olddeg,&reduc,strat, red_result);
2009 red_result = strat->
red(&strat->
P,strat);
2013 if (! strat->
P.IsNull())
2020 strat->
P.pCleardenom();
2024 strat->
P.p =
redtail(&(strat->
P),strat->
sl,strat);
2025 if (strat->
P.p==
NULL)
2027 WerrorS(
"exponent overflow - wrong ordering");
2036 if ((strat->
P.p->next==
NULL)
2038 strat->
P.pCleardenom();
2040 strat->
P.SetShortExpVector();
2049 posInS(strat,strat->
sl,strat->
P.p, strat->
P.ecart),
2055 khCheck(
Q,
w,hilb,hilbeledeg,hilbcount,strat);
2061 kDeleteLcm(&strat->
P);
2116 return (strat->
Shdl);
2193 for (
i=strat->
sl;
i>=0;
i--)
2197 for (
i=0;
i<=strat->
sl;
i++)
2203 h.length = pLength(
h.p);
2333 for (
i=strat->
sl;
i>=0;
i--)
2347 for (
j=0;
j<=strat->
sl;
j++)
2351 h.pLength =
h.length = pLength(
h.p);
2418 return o+(*kModW)[
i-1];
2426 for (
i=r->N;
i>0;
i--)
2427 j+=p_GetExp(
p,
i,r)*(*kHomW)[
i-1];
2431 return j+(*kModW)[
i-1];
2453 if (rField_has_simple_inverse(
currRing))
2521 #if PRE_INTEGER_CHECK
2523 if(nCoeff_is_Z(
currRing->cf) && strat->
ak <= 0)
2558 if(rHasLocalOrMixedOrdering(
currRing))
2565 if(rHasLocalOrMixedOrdering(
currRing))
2566 r=
mora(FCopy,
Q,*
w,hilb,strat);
2568 r=
bba(FCopy,
Q,*
w,hilb,strat);
2577 if(rHasLocalOrMixedOrdering(
currRing))
2584 if(rHasLocalOrMixedOrdering(
currRing))
2585 r=
mora(F,
Q,*
w,hilb,strat);
2587 r=
bba(F,
Q,*
w,hilb,strat);
2611 return idInit(1,F->rank);
2664 ideal
res=
kStd2(F,
Q,
h,
w,hh,syzComp,newIdeal,vw,sp);
2665 if (hh!=
NULL)
delete hh;
2670 int newIdeal,
intvec *vw)
2673 return idInit(1,F->rank);
2699 if (rField_has_simple_inverse(
currRing))
2771 if (rHasLocalOrMixedOrdering(
currRing))
2774 r=
mora(F,
Q,*
w,hilb,strat);
2782 r=
sba(F,
Q,*
w,hilb,strat);
2809 bool sigdrop =
TRUE;
2811 int totalsbaruns = 1,blockedreductions = 20,blockred = 0,loops = 0;
2812 while(sigdrop && (loops < totalsbaruns || totalsbaruns == -1)
2813 && (blockred <= blockedreductions))
2850 if (rField_has_simple_inverse(
currRing))
2922 if (rHasLocalOrMixedOrdering(
currRing))
2925 r=
mora(F,
Q,*
w,hilb,strat);
2932 r=
sba(r,
Q,*
w,hilb,strat);
2956 if(sigdrop || blockred > blockedreductions)
2958 r =
kStd2(r,
Q,
h,
w, hilb, syzComp, newIdeal, vw);
2970 if (rHasLocalOrMixedOrdering(
currRing))
2973 WerrorS(
"No local ordering possible for shift algebra");
2988 if (rField_has_simple_inverse(
currRing))
3071 int syzComp,
int reduced)
3076 return idInit(1,F->rank);
3106 if (rField_has_simple_inverse(
currRing))
3111 strat->
minim=(reduced % 2)+1;
3159 if (rHasLocalOrMixedOrdering(
currRing))
3168 r=
bba(F,
Q,*
w,hilb,strat);
3185 if ((delete_w)&&(temp_w!=
NULL))
delete temp_w;
3193 else if (strat->
M==
NULL)
3196 WarnS(
"no minimal generating set computed");
3223 int syzComp,
int reduced)
3227 if (hh!=
NULL)
delete hh;
3230poly
kNF(ideal F, ideal
Q, poly
p,
int syzComp,
int lazyReduce)
3240 const unsigned int m_iFirstAltVar = scaFirstAltVar(
currRing);
3241 const unsigned int m_iLastAltVar = scaLastAltVar(
currRing);
3264 if (rHasLocalOrMixedOrdering(
currRing))
3269 WerrorS(
"No local ordering possible for shift algebra");
3286poly
kNFBound(ideal F, ideal
Q, poly
p,
int bound,
int syzComp,
int lazyReduce)
3296 const unsigned int m_iFirstAltVar = scaFirstAltVar(
currRing);
3297 const unsigned int m_iLastAltVar = scaLastAltVar(
currRing);
3328ideal
kNF(ideal F, ideal
Q, ideal
p,
int syzComp,
int lazyReduce)
3342 const unsigned int m_iFirstAltVar = scaFirstAltVar(
currRing);
3343 const unsigned int m_iLastAltVar = scaLastAltVar(
currRing);
3367 strat->
ak = si_max(strat->
ak,(
int)F->rank);
3370 if (rHasLocalOrMixedOrdering(
currRing))
3375 WerrorS(
"No local ordering possible for shift algebra");
3393ideal
kNFBound(ideal F, ideal
Q, ideal
p,
int bound,
int syzComp,
int lazyReduce)
3407 const unsigned int m_iFirstAltVar = scaFirstAltVar(
currRing);
3408 const unsigned int m_iLastAltVar = scaLastAltVar(
currRing);
3430 strat->
ak = si_max(strat->
ak,(
int)F->rank);
3444poly
k_NF (ideal F, ideal
Q, poly
p,
int syzComp,
int lazyReduce,
const ring _currRing)
3448 poly ret =
kNF(F,
Q,
p, syzComp, lazyReduce);
3468 const unsigned int m_iFirstAltVar = scaFirstAltVar(
currRing);
3469 const unsigned int m_iLastAltVar = scaLastAltVar(
currRing);
3503 initS(tempF, tempQ, strat);
3534 ideal shdl=strat->
Shdl;
3562 if (rField_has_simple_inverse(
currRing))
3614#ifdef HAVE_TAIL_RING
3619 while (strat->
Ll >= 0)
3626 strat->
P = strat->
L[strat->
Ll];
3629 if (strat->
P.p1 ==
NULL)
3635 if (strat->
P.p ==
NULL && strat->
P.t_p ==
NULL)
3643 &olddeg,&reduc,strat, red_result);
3646 red_result = strat->
red(&strat->
P,strat);
3650 if (red_result == 1)
3656 strat->
P.GetP(strat->
lmBin);
3658 int pos=
posInS(strat,strat->
sl,strat->
P.p,strat->
P.ecart);
3665 strat->
P.pCleardenom();
3681 strat->
enterS(&strat->
P, pos, strat, strat->
tl);
3689 for(;ii<=strat->
sl;ii++)
3694 h.p=strat->
S[ii]; strat->
S[ii]=
NULL;
3696 h.sev=strat->
sevS[ii];
3700 if (strat->
T[jj].p==
h.p)
3702 strat->
T[jj].p=
NULL;
3705 memmove(&(strat->
T[jj]),&(strat->
T[jj+1]),
3706 (strat->
tl-jj)*
sizeof(strat->
T[jj]));
3707 memmove(&(strat->
sevT[jj]),&(strat->
sevT[jj+1]),
3708 (strat->
tl-jj)*
sizeof(strat->
sevT[jj]));
3715 int lpos=strat->
posInL(strat->
L,strat->
Ll,&
h,strat);
3720 Print(
"move S[%d] -> L[%d]: ",ii,pos);
3728 for(ii=pos+1;ii<=strat->
sl;ii++) strat->
fromQ[ii]=0;
3737 kDeleteLcm(&strat->
P);
3766#ifdef HAVE_TAIL_RING
3848 if (idElem(
res)<=1) need_retry=0;
3849 while (need_retry && (counter>0))
3855 int new_elems=idElem(res1);
3856 counter -= (new_elems >= elems);
3859 if (idElem(res1)<=1) need_retry=0;
3870 if (idElem(
res)<=1) need_retry=0;
3881#ifdef MORA_USE_BUCKETS
KINLINE poly kNoetherTail()
void(*) chainCrit(poly p, int ecart, kStrategy strat)
int(*) posInL(const LSet set, const int length, LObject *L, const kStrategy strat)
void(*) initEcart(TObject *L)
pFDegProc pOrigFDeg_TailRing
BOOLEAN(*) rewCrit3(poly sig, unsigned long not_sevSig, poly lm, kStrategy strat, int start)
void(*) enterOnePair(int i, poly p, int ecart, int isFromQ, kStrategy strat, int atR)
BOOLEAN(*) rewCrit2(poly sig, unsigned long not_sevSig, poly lm, kStrategy strat, int start)
int(*) red2(LObject *L, kStrategy strat)
BOOLEAN(*) rewCrit1(poly sig, unsigned long not_sevSig, poly lm, kStrategy strat, int start)
int(*) posInT(const TSet T, const int tl, LObject &h)
void(*) enterS(LObject *h, int pos, kStrategy strat, int atR)
int(*) red(LObject *L, kStrategy strat)
int(*) posInLOld(const LSet Ls, const int Ll, LObject *Lo, const kStrategy strat)
char completeReduce_retry
char posInLDependsOnLength
void(*) initEcartPair(LObject *h, poly f, poly g, int ecartF, int ecartG)
pLDegProc pOrigLDeg_TailRing
void WerrorS(const char *s)
long scMult0Int(ideal S, ideal Q)
ideal idMinBase(ideal h1, ideal *SB)
#define idDelete(H)
delete an ideal
#define idSimpleAdd(A, B)
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
bigintmat * iv2biv(intvec *hilb, const coeffs cf)
KINLINE TObject ** initR()
KINLINE BOOLEAN arriRewDummy(poly, unsigned long, poly, kStrategy, int)
KINLINE unsigned long * initsevT()
int redLiftstd(LObject *h, kStrategy strat)
void khCheck(ideal Q, intvec *w, bigintmat *hilb, int &eledeg, int &count, kStrategy strat)
void khCheckLocInhom(ideal Q, intvec *w, bigintmat *hilb, int &count, kStrategy strat)
int ksReducePolyLC(LObject *PR, TObject *PW, poly spNoether, number *coef, kStrategy strat)
void ksCreateSpoly(LObject *Pair, poly spNoether, int use_buckets, ring tailRing, poly m1, poly m2, TObject **R)
int ksReducePoly(LObject *PR, TObject *PW, poly spNoether, number *coef, poly *mon, kStrategy strat, BOOLEAN reduce)
long kHomModDeg(poly p, const ring r)
poly kNFBound(ideal F, ideal Q, poly p, int bound, int syzComp, int lazyReduce)
void initMora(ideal F, kStrategy strat)
int redFirst(LObject *h, kStrategy strat)
long kModDeg(poly p, const ring r)
poly k_NF(ideal F, ideal Q, poly p, int syzComp, int lazyReduce, const ring _currRing)
NOTE: this is just a wrapper which sets currRing for the actual kNF call.
int redEcart(LObject *h, kStrategy strat)
void enterSMora(LObject *p, int atS, kStrategy strat, int atR)
ideal kStd_internal(ideal F, ideal Q, tHomog h, intvec **w, bigintmat *hilb, int syzComp, int newIdeal, intvec *vw, s_poly_proc_t sp)
pure GB/SB computations
static BOOLEAN hasPurePower(const poly p, int last, int *length, kStrategy strat)
static int doRed(LObject *h, TObject *with, BOOLEAN intoT, kStrategy strat, bool redMoraNF)
static void firstUpdate(kStrategy strat)
ideal kMin_std(ideal F, ideal Q, tHomog h, intvec **w, ideal &M, intvec *hilb, int syzComp, int reduced)
static void updateL(BOOLEAN searchPP, kStrategy strat)
ideal kStdShift(ideal F, ideal Q, tHomog h, intvec **w, bigintmat *hilb, int syzComp, int newIdeal, intvec *vw, BOOLEAN rightGB)
static void updateT(kStrategy strat)
static void missingAxis(int *last, kStrategy strat)
static void updateLHC(kStrategy strat)
int posInL10(const LSet set, const int length, LObject *p, const kStrategy strat)
ideal kInterRedBba(ideal F, ideal Q, int &need_retry)
ideal kMin_std2(ideal F, ideal Q, tHomog h, intvec **w, ideal &M, bigintmat *hilb, int syzComp, int reduced)
static BOOLEAN kMoraUseBucket(kStrategy strat)
poly kNF1(ideal F, ideal Q, poly q, kStrategy strat, int lazyReduce)
ideal kInterRed(ideal F, const ideal Q)
static void kOptimizeLDeg(pLDegProc ldeg, kStrategy strat)
void initBba(kStrategy strat)
ideal mora(ideal F, ideal Q, intvec *w, bigintmat *hilb, kStrategy strat)
int redRiloc(LObject *h, 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
void initSba(ideal F, kStrategy strat)
static poly redMoraNFRing(poly h, kStrategy strat, int flag)
static void reorderL(kStrategy strat)
ideal kSba(ideal F, ideal Q, tHomog h, intvec **w, int sbaOrder, int arri, bigintmat *hilb, int syzComp, int newIdeal, intvec *vw)
void kDebugPrint(kStrategy strat)
ideal kInterRedOld(ideal F, const ideal Q)
static void reorderT(kStrategy strat)
poly kNF(ideal F, ideal Q, poly p, int syzComp, int lazyReduce)
static poly redMoraNF(poly h, kStrategy strat, int flag)
int redRiloc_Z(LObject *h, kStrategy strat)
void enterSMoraNF(LObject *p, int atS, kStrategy strat, int atR)
ideal kStd(ideal F, ideal Q, tHomog h, intvec **w, intvec *hilb, int syzComp, int newIdeal, intvec *vw, s_poly_proc_t sp)
generic interface to GB/SB computations
#define KSTD_NF_CANCELUNIT
BOOLEAN(*) s_poly_proc_t(kStrategy strat)
poly kTryHC(ideal F, ideal Q)
ideal kTryHilbstd(ideal F, ideal Q)
int redRing_Z(LObject *h, kStrategy strat)
ideal sba(ideal F0, ideal Q, intvec *w, bigintmat *hilb, kStrategy strat)
int kFindDivisibleByInS(const kStrategy strat, int *max_ind, LObject *L)
return -1 if no divisor is found number of first divisor in S, otherwise
int kTestDivisibleByT0_Z(const kStrategy strat, const LObject *L)
tests if T[0] divides the leading monomial of L, returns -1 if not
poly kNF2(ideal F, ideal Q, poly q, kStrategy strat, int lazyReduce)
int redHoney(LObject *h, kStrategy strat)
int redHomog(LObject *h, kStrategy strat)
int redLazy(LObject *h, kStrategy strat)
int redSigRing(LObject *h, kStrategy strat)
ideal bbaShift(ideal F, ideal Q, intvec *w, bigintmat *hilb, kStrategy strat)
int redSig(LObject *h, kStrategy strat)
poly kNF2Bound(ideal F, ideal Q, poly q, int bound, kStrategy strat, int lazyReduce)
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
ideal bba(ideal F, ideal Q, intvec *w, bigintmat *hilb, kStrategy strat)
poly redtail(LObject *L, int end_pos, kStrategy strat)
int posInT17(const TSet set, const int length, LObject &p)
void initBuchMora(ideal F, ideal Q, kStrategy strat)
BOOLEAN arriRewCriterionPre(poly sig, unsigned long not_sevSig, poly lm, kStrategy strat, int)
void enterSBba(LObject *p, int atS, kStrategy strat, int atR)
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 enterT_strong(LObject *p, kStrategy strat, int atT)
BOOLEAN kTest_TS(kStrategy strat)
void enterOnePairNormal(int i, poly p, int ecart, int isFromQ, kStrategy strat, int atR=-1)
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)
int posInT2(const TSet set, const int length, LObject &p)
void enterpairs(poly h, int k, int ecart, int pos, kStrategy strat, int atR)
void initEcartPairMora(LObject *Lp, poly, poly, int ecartF, int ecartG)
void initBuchMoraPos(kStrategy strat)
void initS(ideal F, ideal Q, kStrategy strat)
BOOLEAN kStratChangeTailRing(kStrategy strat, LObject *L, TObject *T, unsigned long expbound)
int posInL0(const LSet set, const int length, LObject *p, const kStrategy)
void chainCritOpt_1(poly, int, kStrategy strat)
void postReduceByMon(LObject *h, kStrategy strat)
used for GB over ZZ: intermediate reduction by monomial elements background: any known constant eleme...
void HEckeTest(poly pp, kStrategy strat)
BOOLEAN kTest_L(LObject *L, kStrategy strat, BOOLEAN testp, int lpos, TSet T, int tlength)
void exitBuchMora(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)
BOOLEAN kCheckSpolyCreation(LObject *L, kStrategy strat, poly &m1, poly &m2)
void enterT(LObject *p, kStrategy strat, int atT)
void cleanT(kStrategy strat)
BOOLEAN kTest_T(TObject *T, kStrategy strat, int i, char TN)
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)
void deleteInL(LSet set, int *length, int j, kStrategy strat)
void kStratInitChangeTailRing(kStrategy strat)
void initBuchMoraCrit(kStrategy strat)
void completeReduce(kStrategy strat, BOOLEAN withT)
void initBuchMoraPosRing(kStrategy strat)
void enterSSba(LObject *p, int atS, kStrategy strat, int atR)
void messageSets(kStrategy strat)
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...
void chainCritNormal(poly p, int ecart, kStrategy strat)
void initEcartBBA(TObject *h)
void initEcartPairBba(LObject *Lp, poly, poly, int, int)
void messageStat(int hilbcount, kStrategy strat)
void finalReduceByMon(kStrategy strat)
used for GB over ZZ: final reduction by constant elements background: any known constant element of i...
BOOLEAN newHEdge(kStrategy strat)
void cancelunit(LObject *L, BOOLEAN inNF)
void initHilbCrit(ideal, ideal, bigintmat **hilb, kStrategy strat)
ideal id_KillSquares(const ideal id, const short iFirstAltVar, const short iLastAltVar, const ring r, const bool bSkipZeroes)
poly p_KillSquares(const poly p, const short iFirstAltVar, const short iLastAltVar, const ring r)
void mult(unsigned long *result, unsigned long *a, unsigned long *b, unsigned long p, int dega, int degb)
#define __p_GetComp(p, r)
number ndQuotRem(number a, number b, number *r, const coeffs R)
#define omFreeSize(addr, size)
omError_t omTestMemory(int check_level)
#define TEST_OPT_INTSTRATEGY
#define SI_RESTORE_OPT1(A)
#define OPT_NOTREGULARITY
#define TEST_OPT_DEGBOUND
#define TEST_OPT_RETURN_SB
#define TEST_OPT_MULTBOUND
#define TEST_OPT_REDTHROUGH
#define TEST_OPT_REDTAIL_SYZ
#define TEST_OPT_STAIRCASEBOUND
#define TEST_OPT_NOT_BUCKETS
pShallowCopyDeleteProc pGetShallowCopyDeleteProc(ring, ring)
int p_IsPurePower(const poly p, const ring r)
return i, if head depends only on var(i)
void pRestoreDegProcs(ring r, pFDegProc old_FDeg, pLDegProc old_lDeg)
long pLDeg0c(poly p, int *l, const ring r)
long pLDeg0(poly p, int *l, const ring r)
void pSetDegProcs(ring r, pFDegProc new_FDeg, pLDegProc new_lDeg)
long p_WDegree(poly p, const ring r)
#define pp_Test(p, lmRing, tailRing)
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 pHead(p)
returns newly allocated copy of Lm(p), coef is copied, next=NULL, p might be NULL
#define pIsConstant(p)
like above, except that Comp must be 0
#define pGetComp(p)
Component.
#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 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 pSetmComp(p)
TODO:
#define pLmCmp(p, q)
returns 0|1|-1 if p=q|p>q|p<q w.r.t monomial ordering
#define pCopy(p)
return a copy of the poly
void PrintS(const char *s)
void Werror(const char *fmt,...)
BOOLEAN rHasBlockOrder(const ring r)
BOOLEAN rOrd_is_Ds(const ring r)
BOOLEAN rOrd_is_ds(const ring r)
long(*) pLDegProc(poly p, int *length, ring r)
#define rField_is_Ring(R)
ideal SCAQuotient(const ring r)
ideal idInit(int idsize, int rank)
initialise an ideal / module
void id_Delete(ideal *h, ring r)
deletes an ideal/module/matrix
BOOLEAN id_IsModule(ideal A, const ring src)
BOOLEAN idIsSimpleGB(ideal F, ideal Q)
returns true if F in R/Q has a "simple" GB
long id_RankFreeModule(ideal s, ring lmRing, ring tailRing)
return the maximal component number found in any polynomial in s
void idSkipZeroes(ideal ide)
gives an ideal/module the minimal possible size
long totaldegreeWecart(poly p, ring r)
long maxdegreeWecart(poly p, int *l, ring r)
void kEcartWeights(poly *s, int sl, short *eweight, const ring R)
EXTERN_VAR short * ecartWeights