12 #define MORA_USE_BUCKETS 14 #define PRE_INTEGER_CHECK 0 139 h->length=h->pLength=
pLength(h->p);
143 if (ret < 0)
return ret;
145 h->ShallowCopyDelete(strat->
tailRing,
173 d = h->GetpFDeg()+ h->ecart;
175 h->SetShortExpVector();
185 ei = strat->
T[
j].ecart;
188 if (ei > h->ecart && ii < strat->tl)
190 li = strat->
T[
j].length;
200 if (i > strat->
tl)
break;
201 if ((strat->
T[i].ecart < ei || (strat->
T[i].ecart == ei &&
202 strat->
T[i].length < li))
209 if (strat->
T[i].ecart < ei || (strat->
T[i].ecart == ei &&
210 strat->
T[i].length < li))
215 ei = strat->
T[
i].ecart;
216 if (ei <= h->ecart)
break;
217 li = strat->
T[
i].length;
234 assume(h->FDeg == h->pFDeg());
235 at = strat->
posInL(strat->
L,strat->
Ll,h,strat);
264 h->SetShortExpVector();
269 h->ecart = d-h->GetpFDeg();
271 h->ecart = d-h->GetpFDeg()+ei-h->ecart;
275 h->ecart = h->pLDeg(strat->
LDegLast) - h->GetpFDeg();
282 if (strat->
honey) h->SetLength();
292 d = h->GetpFDeg()+h->ecart;
299 && ((d >= reddeg) || (pass > strat->
LazyPass)))
304 assume(h->FDeg == h->pFDeg());
305 at = strat->
posInL(strat->
L,strat->
Ll,h,strat);
327 if (h->pTotalDeg()+h->ecart >= (int)strat->
tailRing->bitmask)
332 at = strat->
posInL(strat->
L,strat->
Ll,h,strat);
349 d = h->GetpFDeg()+ h->ecart;
351 h->SetShortExpVector();
370 if (h->GetLmTailRing() ==
NULL)
379 ei = strat->
T[
j].ecart;
381 if (ei > h->ecart && ii < strat->tl)
383 li = strat->
T[
j].length;
393 if (i > strat->
tl)
break;
394 if ((strat->
T[i].ecart < ei || (strat->
T[i].ecart == ei &&
395 strat->
T[i].length < li))
404 if (strat->
T[i].ecart < ei || (strat->
T[i].ecart == ei &&
405 strat->
T[i].length < li))
410 ei = strat->
T[
i].ecart;
411 if (ei <= h->ecart)
break;
412 li = strat->
T[
i].length;
429 assume(h->FDeg == h->pFDeg());
430 at = strat->
posInL(strat->
L,strat->
Ll,h,strat);
431 if (at <= strat->Ll &&
pLmCmp(h->p, strat->
L[strat->
Ll].p) != 0 && !
nEqual(h->p->coef, strat->
L[strat->
Ll].p->coef))
460 h->SetShortExpVector();
465 h->ecart = d-h->GetpFDeg();
467 h->ecart = d-h->GetpFDeg()+ei-h->ecart;
471 h->ecart = h->pLDeg(strat->
LDegLast) - h->GetpFDeg();
474 d = h->GetpFDeg()+h->ecart;
481 && ((d >= reddeg) || (pass > strat->
LazyPass)))
486 assume(h->FDeg == h->pFDeg());
487 at = strat->
posInL(strat->
L,strat->
Ll,h,strat);
509 if (h->pTotalDeg()+h->ecart >= (int)strat->
tailRing->bitmask)
514 at = strat->
posInL(strat->
L,strat->
Ll,h,strat);
530 if (h->IsNull())
return 0;
539 d = h->GetpFDeg() + h->ecart;
542 h->SetShortExpVector();
548 h->SetDegStuffReturnLDeg(strat->
LDegLast);
579 h->SetShortExpVector();
592 h->SetDegStuffReturnLDeg(strat->
LDegLast);
602 if (strat->
T[j].ecart <= h->ecart)
603 h->ecart = d - h->GetpFDeg();
605 h->ecart = d - h->GetpFDeg() + strat->
T[
j].ecart - h->ecart;
607 d = h->GetpFDeg() + h->ecart;
610 d = h->SetDegStuffReturnLDeg(strat->
LDegLast);
619 && ((d >= reddeg) || (pass > strat->
LazyPass)))
624 at = strat->
posInL(strat->
L,strat->
Ll,h,strat);
642 if (h->pTotalDeg()+h->ecart >= (int)strat->
tailRing->bitmask)
647 at = strat->
posInL(strat->
L,strat->
Ll,h,strat);
668 int o = H.SetpFDeg();
672 unsigned long not_sev = ~
H.sev;
689 int ei = strat->
T[
j].ecart;
690 int li = strat->
T[
j].length;
701 if (j > strat->
tl)
break;
702 if (ei <= H.ecart)
break;
703 if (((strat->
T[j].ecart < ei)
704 || ((strat->
T[
j].ecart == ei)
705 && (strat->
T[j].length < li)))
713 ei = strat->
T[
j].ecart;
714 li = strat->
T[
j].length;
768 int o = H.SetpFDeg();
772 unsigned long not_sev = ~
H.sev;
790 int ei = strat->
T[
j].ecart;
791 int li = strat->
T[
j].length;
802 if (j > strat->
tl)
break;
803 if (ei <= H.ecart)
break;
804 if (((strat->
T[j].ecart < ei)
805 || ((strat->
T[
j].ecart == ei)
806 && (strat->
T[j].length < li)))
815 ei = strat->
T[
j].ecart;
816 li = strat->
T[
j].length;
872 for (i=1; i<=strat->
Ll; i++)
874 at = strat->
posInL(strat->
L,i-1,&(strat->
L[i]),strat);
878 for (j=i-1; j>=at; j--) strat->
L[j+1] = strat->
L[j];
894 for (i=1; i<=strat->
tl; i++)
896 if (strat->
T[i-1].length > strat->
T[i].length)
899 sev = strat->
sevT[
i];
905 if (strat->
T[i].length > strat->
T[at].length)
break;
907 for (j = i-1; j>at; j--)
909 strat->
T[j+1]=strat->
T[
j];
911 strat->
R[strat->
T[j+1].i_r] = &(strat->
T[j+1]);
914 strat->
sevT[at+1] = sev;
915 strat->
R[p.i_r] = &(strat->
T[at+1]);
981 if (i==last)
return TRUE;
991 if (L->bucket !=
NULL)
1010 if (length<0)
return 0;
1013 int op= p->GetpFDeg() +p->ecart;
1014 for (j=length; j>=0; j--)
1021 && (
set[j].GetpFDeg()+
set[j].ecart >= op))
1049 p=strat->
L[strat->
Ll];
1050 strat->
L[strat->
Ll]=strat->
L[
j];
1083 strat->
L[
j].SetLmCurrRing();
1095 p=strat->
L[strat->
Ll];
1096 strat->
L[strat->
Ll]=strat->
L[
j];
1115 while (i <= strat->Ll)
1148 if (! strat->
L[i].IsNull())
1150 strat->
L[
i].SetLmCurrRing();
1151 strat->
L[
i].SetpFDeg();
1153 = strat->
L[
i].pLDeg(strat->
LDegLast) - strat->
L[
i].GetpFDeg();
1160 if (strat->
L[i].IsNull())
1182 while (i <= strat->tl)
1190 if (p.p != strat->
T[i].p)
1218 for (i=strat->
Ll; i>=0; i--)
1220 strat->
L[
i].SetpFDeg();
1222 for (i=strat->
tl; i>=0; i--)
1224 strat->
T[
i].SetpFDeg();
1276 Print(
"new s%d:",atS);
1485 strat->
HCord = 32000;
1522 int hilbeledeg=1,hilbcount=0;
1565 #ifdef HAVE_TAIL_RING 1579 while (strat->
Ll >= 0)
1586 while (strat->
Ll >= 0)
1591 && (strat->
L[strat->
Ll].ecart+strat->
L[strat->
Ll].GetpFDeg()>
Kstd1_deg))
1598 while ((strat->
Ll >= 0)
1599 && (strat->
L[strat->
Ll].p1!=
NULL) && (strat->
L[strat->
Ll].p2!=
NULL)
1600 && (strat->
L[strat->
Ll].ecart+strat->
L[strat->
Ll].GetpFDeg()>
Kstd1_deg)
1609 if (strat->
Ll<0)
break;
1612 strat->
P = strat->
L[strat->
Ll];
1639 else if (strat->
P.p1 ==
NULL)
1647 if (!strat->
P.IsNull())
1651 message(strat->
P.ecart+strat->
P.GetpFDeg(),&olddeg,&reduc,strat, red_result);
1653 red_result = strat->red(&strat->P,strat);
1657 if (! strat->
P.IsNull())
1664 strat->
P.pCleardenom();
1668 strat->
P.p =
redtail(&(strat->
P),strat->
sl,strat);
1669 if (strat->
P.p==
NULL)
1671 WerrorS(
"expoent overflow - wrong ordering");
1680 if ((strat->
P.p->next==
NULL)
1682 strat->
P.pCleardenom();
1692 posInS(strat,strat->
sl,strat->
P.p, strat->
P.ecart),
1698 khCheck(Q,w,hilb,hilbeledeg,hilbcount,strat);
1708 memset(&strat->
P,0,
sizeof(strat->
P));
1763 return (strat->
Shdl);
1838 for (i=strat->
sl; i>=0; i--)
1842 for (i=0; i<=strat->
sl; i++)
1849 h.sev = strat->
sevS[
i];
1870 if ((p!=
NULL)&&((lazyReduce & KSTD_NF_LAZY)==0))
1982 for (i=strat->
sl; i>=0; i--)
1996 for (j=0; j<=strat->
sl; j++)
2000 h.pLength = h.length =
pLength(h.p);
2003 h.sev = strat->
sevS[
j];
2017 if ((p!=
NULL)&&((lazyReduce & KSTD_NF_LAZY)==0))
2072 return o+(*kModW)[i-1];
2080 for (i=r->N;i>0;i--)
2082 if (kModW ==
NULL)
return j;
2085 return j+(*kModW)[i-1];
2092 return idInit(1,F->rank);
2094 #ifdef HAVE_SHIFTBBA 2121 strat->
kHomW=kHomW=vw;
2145 if (strat->
ak > 0 && (w!=
NULL) && (*w!=
NULL))
2147 strat->
kModW = kModW = *
w;
2177 #if PRE_INTEGER_CHECK 2205 if (strat->
ak > 0 && (w!=
NULL) && (*w!=
NULL))
2207 strat->
kModW = kModW = *
w;
2227 r=
bba(FCopy,Q,
NULL,hilb,strat);
2232 r=
mora(FCopy,Q,*w,hilb,strat);
2234 r=
bba(FCopy,Q,*w,hilb,strat);
2251 r=
mora(F,Q,*w,hilb,strat);
2253 r=
bba(F,Q,*w,hilb,strat);
2269 if ((delete_w)&&(w!=
NULL)&&(*w!=
NULL))
delete *w;
2274 int newIdeal,
intvec *vw)
2277 return idInit(1,F->rank);
2317 strat->
kHomW=kHomW=vw;
2341 if (strat->
ak > 0 && (w!=
NULL) && (*w!=
NULL))
2343 strat->
kModW = kModW = *
w;
2377 r=
mora(F,Q,*w,hilb,strat);
2385 r=
sba(F,Q,*w,hilb,strat);
2402 if ((delete_w)&&(w!=
NULL)&&(*w!=
NULL))
delete *
w;
2413 bool sigdrop =
TRUE;
2415 int totalsbaruns = 1,blockedreductions = 20,blockred = 0,loops = 0;
2416 while(sigdrop && (loops < totalsbaruns || totalsbaruns == -1)
2417 && (blockred <= blockedreductions))
2468 strat->
kHomW=kHomW=vw;
2492 if (strat->
ak > 0 && (w!=
NULL) && (*w!=
NULL))
2494 strat->
kModW = kModW = *
w;
2528 r=
mora(F,Q,*w,hilb,strat);
2535 r=
sba(r,Q,*w,hilb,strat);
2557 if ((delete_w)&&(w!=
NULL)&&(*w!=
NULL))
delete *w;
2560 if(sigdrop || blockred > blockedreductions)
2562 r =
kStd(r, Q, h, w, hilb, syzComp, newIdeal, vw);
2568 #ifdef HAVE_SHIFTBBA 2570 int newIdeal,
intvec *vw)
2594 strat->
kHomW=kHomW=vw;
2618 if (strat->
ak > 0 && (w!=
NULL) && (*w!=
NULL))
2620 strat->
kModW = kModW = *
w;
2639 WerrorS(
"No local ordering possible for shift algebra");
2662 if ((delete_w)&&(w!=
NULL)&&(*w!=
NULL))
delete *w;
2674 int syzComp,
int reduced)
2679 return idInit(1,F->rank);
2684 sb =
kStd(F, Q, h, w, hilb);
2714 strat->
minim=(reduced % 2)+1;
2735 if (strat->
ak > 0 && (w!=
NULL) && (*w!=
NULL))
2763 r=
mora(F,Q,*w,hilb,strat);
2770 r=
bba(F,Q,*w,hilb,strat);
2788 if ((delete_w)&&(temp_w!=
NULL))
delete temp_w;
2796 else if (strat->
M==
NULL)
2799 WarnS(
"no minimal generating set computed");
2822 poly
kNF(ideal F, ideal
Q, poly
p,
int syzComp,
int lazyReduce)
2857 #ifdef HAVE_SHIFTBBA 2860 WerrorS(
"No local ordering possible for shift algebra");
2864 res=
kNF1(F,Q,pp,strat,lazyReduce);
2867 res=
kNF2(F,Q,pp,strat,lazyReduce);
2909 res=
kNF2Bound(F,Q,pp,bound,strat,lazyReduce);
2919 ideal
kNF(ideal F, ideal
Q, ideal
p,
int syzComp,
int lazyReduce)
2961 #ifdef HAVE_SHIFTBBA 2964 WerrorS(
"No local ordering possible for shift algebra");
2968 res=
kNF1(F,Q,pp,strat,lazyReduce);
2971 res=
kNF2(F,Q,pp,strat,lazyReduce);
3022 res=
kNF2Bound(F,Q,pp,bound,strat,lazyReduce);
3033 poly
k_NF (ideal F, ideal
Q, poly
p,
int syzComp,
int lazyReduce,
const ring _currRing)
3037 poly ret =
kNF(F, Q, p, syzComp, lazyReduce);
3091 initS(tempF, tempQ, strat);
3121 ideal shdl=strat->
Shdl;
3195 withT = ! strat->
homog;
3200 #ifdef HAVE_TAIL_RING 3205 while (strat->
Ll >= 0)
3212 strat->
P = strat->
L[strat->
Ll];
3215 if (strat->
P.p1 ==
NULL)
3221 if (strat->
P.p ==
NULL && strat->
P.t_p ==
NULL)
3229 &olddeg,&reduc,strat, red_result);
3232 red_result = strat->red(&strat->P,strat);
3236 if (red_result == 1)
3242 strat->
P.GetP(strat->
lmBin);
3244 int pos=
posInS(strat,strat->
sl,strat->
P.p,strat->
P.ecart);
3251 strat->
P.pCleardenom();
3255 strat->
P.p =
redtailBba(&(strat->
P),pos-1,strat, withT);
3256 strat->
P.pCleardenom();
3264 strat->
P.p =
redtailBba(&(strat->
P),pos-1,strat, withT);
3276 strat->
enterS(strat->
P, pos, strat, strat->
tl);
3284 for(;ii<=strat->
sl;ii++)
3287 memset(&h,0,
sizeof(h));
3289 h.p=strat->
S[ii]; strat->
S[ii]=
NULL;
3291 h.sev=strat->
sevS[ii];
3295 if (strat->
T[jj].p==h.p)
3297 strat->
T[jj].p=
NULL;
3300 memmove(&(strat->
T[jj]),&(strat->
T[jj+1]),
3301 (strat->
tl-jj)*
sizeof(strat->
T[jj]));
3302 memmove(&(strat->
sevT[jj]),&(strat->
sevT[jj+1]),
3303 (strat->
tl-jj)*
sizeof(strat->
sevT[jj]));
3310 int lpos=strat->
posInL(strat->
L,strat->
Ll,&h,strat);
3315 Print(
"move S[%d] -> L[%d]: ",ii,pos);
3323 for(ii=pos+1;ii<=strat->
sl;ii++) strat->
fromQ[ii]=0;
3340 memset(&(strat->
P), 0,
sizeof(strat->
P));
3361 #ifdef HAVE_TAIL_RING 3368 for(i=strat->
sl;i>=0;i--) strat->
S_2_R[
i]=-1;
3438 res1=
kNF(null,Q,res);
3443 if (
idElem(res)<=1) need_retry=0;
3444 while (need_retry && (counter>0))
3450 int new_elems=
idElem(res1);
3451 counter -= (new_elems >= elems);
3454 if (
idElem(res1)<=1) need_retry=0;
3460 res=
kNF(null,Q,res1);
3465 if (
idElem(res)<=1) need_retry=0;
3476 #ifdef MORA_USE_BUCKETS BOOLEAN rHasLocalOrMixedOrdering(const ring r)
#define __p_GetComp(p, r)
#define pSetmComp(p)
TODO:
void initEcartPairBba(LObject *Lp, poly, poly, int, int)
void updateT(kStrategy strat)
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(* posInL)(const LSet set, const int length, LObject *L, const kStrategy strat)
ideal SCAQuotient(const ring r)
KINLINE TObject ** initR()
void enterSSba(LObject &p, int atS, kStrategy strat, int atR)
poly kNF2Bound(ideal F, ideal Q, poly q, int bound, kStrategy strat, int lazyReduce)
poly kNF(ideal F, ideal Q, poly p, int syzComp, int lazyReduce)
int redRing(LObject *h, kStrategy strat)
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.
int redRing_Z(LObject *h, kStrategy strat)
static CanonicalForm bound(const CFMatrix &M)
int posInT2(const TSet set, const int length, LObject &p)
static poly redMoraNFRing(poly h, kStrategy strat, int flag)
int redEcart(LObject *h, kStrategy strat)
KINLINE unsigned long * initsevT()
#define TEST_OPT_DEGBOUND
void initBuchMoraPos(kStrategy strat)
BOOLEAN(* rewCrit1)(poly sig, unsigned long not_sevSig, poly lm, kStrategy strat, int start)
static BOOLEAN idHomIdeal(ideal id, ideal Q=NULL)
void message(int i, int *reduc, int *olddeg, kStrategy strat, int red_result)
pLDegProc pOrigLDeg_TailRing
void initMora(ideal F, kStrategy strat)
#define idDelete(H)
delete an ideal
void messageStat(int hilbcount, kStrategy strat)
void kEcartWeights(poly *s, int sl, short *eweight, const ring R)
BOOLEAN faugereRewCriterion(poly sig, unsigned long not_sevSig, poly, kStrategy strat, int start=0)
Compatiblity layer for legacy polynomial operations (over currRing)
ideal kSba(ideal F, ideal Q, tHomog h, intvec **w, int sbaOrder, int arri, intvec *hilb, int syzComp, int newIdeal, intvec *vw)
long totaldegreeWecart(poly p, ring r)
void chainCritNormal(poly p, int ecart, kStrategy strat)
void initBuchMora(ideal F, ideal Q, kStrategy strat)
#define pLmCmp(p, q)
returns 0|1|-1 if p=q|p>q|p<q w.r.t monomial ordering
int redFirst(LObject *h, kStrategy strat)
long p_WDegree(poly p, const ring r)
static int doRed(LObject *h, TObject *with, BOOLEAN intoT, kStrategy strat, bool redMoraNF)
#define omFreeSize(addr, size)
#define idSimpleAdd(A, B)
BOOLEAN(* rewCrit2)(poly sig, unsigned long not_sevSig, poly lm, kStrategy strat, int start)
void initSba(ideal F, kStrategy strat)
static short rVar(const ring r)
#define rVar(r) (r->N)
void id_Delete(ideal *h, ring r)
deletes an ideal/module/matrix
ideal kStdShift(ideal F, ideal Q, tHomog h, intvec **w, intvec *hilb, int syzComp, int newIdeal, intvec *vw)
long pLDeg0c(poly p, int *l, const ring r)
void enterpairs(poly h, int k, int ecart, int pos, kStrategy strat, int atR)
#define pLmDelete(p)
assume p != NULL, deletes Lm(p)->coef and Lm(p)
#define TEST_OPT_MULTBOUND
static void kDeleteLcm(LObject *P)
ideal kStd(ideal F, ideal Q, tHomog h, intvec **w, intvec *hilb, int syzComp, int newIdeal, intvec *vw, s_poly_proc_t sp)
int ksReducePoly(LObject *PR, TObject *PW, poly spNoether, number *coef, kStrategy strat)
BOOLEAN(* rewCrit3)(poly sig, unsigned long not_sevSig, poly lm, kStrategy strat, int start)
void(* initEcartPair)(LObject *h, poly f, poly g, int ecartF, int ecartG)
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 cancelunit(LObject *L, BOOLEAN inNF)
void WerrorS(const char *s)
void initBba(kStrategy strat)
void enterL(LSet *set, int *length, int *LSetmax, LObject p, int at)
static BOOLEAN rField_is_Z(const ring r)
int redSig(LObject *h, kStrategy strat)
ideal bba(ideal F, ideal Q, intvec *w, intvec *hilb, kStrategy strat)
static number & pGetCoeff(poly p)
return an alias to the leading coefficient of p assumes that p != NULL NOTE: not copy ...
ideal sba(ideal F0, ideal Q, intvec *w, intvec *hilb, kStrategy strat)
static BOOLEAN rIsLPRing(const ring r)
int(* red)(LObject *L, kStrategy strat)
void initBuchMoraPosRing(kStrategy strat)
int redHomog(LObject *h, kStrategy strat)
KINLINE poly redtailBba(poly p, int pos, kStrategy strat, BOOLEAN normalize)
poly p_KillSquares(const poly p, const short iFirstAltVar, const short iLastAltVar, const ring r)
int(* posInT)(const TSet T, const int tl, LObject &h)
void HEckeTest(poly pp, kStrategy strat)
static FORCE_INLINE BOOLEAN nCoeff_is_Z(const coeffs r)
long(* pLDegProc)(poly p, int *length, ring r)
#define pGetComp(p)
Component.
void updateL(kStrategy strat)
void enterOnePairNormal(int i, poly p, int ecart, int isFromQ, kStrategy strat, int atR=-1)
char completeReduce_retry
void kStratInitChangeTailRing(kStrategy strat)
#define TEST_OPT_NOT_BUCKETS
static BOOLEAN rField_has_simple_inverse(const ring r)
pShallowCopyDeleteProc pGetShallowCopyDeleteProc(ring, ring)
void enterT(LObject &p, kStrategy strat, int atT)
void missingAxis(int *last, kStrategy strat)
int redHoney(LObject *h, kStrategy strat)
void deleteInL(LSet set, int *length, int j, kStrategy strat)
static BOOLEAN idHomModule(ideal m, ideal Q, intvec **w)
int redRiloc(LObject *h, kStrategy strat)
void(* initEcart)(TObject *L)
int redLazy(LObject *h, kStrategy strat)
void(* enterOnePair)(int i, poly p, int ecart, int isFromQ, kStrategy strat, int atR)
void initS(ideal F, ideal Q, kStrategy strat)
poly kNF2(ideal F, ideal Q, poly q, kStrategy strat, int lazyReduce)
ideal kInterRedBba(ideal F, ideal Q, int &need_retry)
omError_t omTestMemory(int check_level)
void initEcartPairMora(LObject *Lp, poly, poly, int ecartF, int ecartG)
#define TEST_OPT_INTSTRATEGY
long id_RankFreeModule(ideal s, ring lmRing, ring tailRing)
return the maximal component number found in any polynomial in s
static long p_GetExp(const poly p, const unsigned long iBitmask, const int VarOffset)
get a single variable exponent : the integer VarOffset encodes:
#define TEST_OPT_STAIRCASEBOUND
poly redtail(LObject *L, int end_pos, kStrategy strat)
void pSetDegProcs(ring r, pFDegProc new_FDeg, pLDegProc new_lDeg)
void initHilbCrit(ideal, ideal, intvec **hilb, kStrategy strat)
void enterSMora(LObject &p, int atS, kStrategy strat, int atR=-1)
int scMult0Int(ideal S, ideal Q, const ring tailRing)
static BOOLEAN rIsPluralRing(const ring r)
we must always have this test!
poly kNF1(ideal F, ideal Q, poly q, kStrategy strat, int lazyReduce)
void initEcartBBA(TObject *h)
void updateLHC(kStrategy strat)
#define pGetShortExpVector(a)
returns the "Short Exponent Vector" – used to speed up divisibility tests (see polys-impl.cc )
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:...
long pLDeg0(poly p, int *l, const ring r)
#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 pp_Test(p, lmRing, tailRing)
void(* enterS)(LObject &h, int pos, kStrategy strat, int atR)
long kHomModDeg(poly p, ring r)
static BOOLEAN p_LmShortDivisibleBy(poly a, unsigned long sev_a, poly b, unsigned long not_sev_b, const ring r)
ideal kInterRed(ideal F, ideal Q)
void ksCreateSpoly(LObject *Pair, poly spNoether, int use_buckets, ring tailRing, poly m1, poly m2, TObject **R)
int kFindDivisibleByInS(const kStrategy strat, int *max_ind, LObject *L)
return -1 if no divisor is found number of first divisor in S, otherwise
ideal bbaShift(ideal F, ideal Q, intvec *w, intvec *hilb, kStrategy strat)
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 kStratChangeTailRing(kStrategy strat, LObject *L, TObject *T, unsigned long expbound)
int posInL0(const LSet set, const int length, LObject *p, const kStrategy)
#define pIsConstant(p)
like above, except that Comp must be 0
void initBuchMoraCrit(kStrategy strat)
static int si_max(const int a, const int b)
void reorderL(kStrategy strat)
ideal kInterRedOld(ideal F, ideal Q)
void PrintS(const char *s)
void deleteHC(LObject *L, kStrategy strat, BOOLEAN fromNext)
int redSigRing(LObject *h, kStrategy strat)
static long p_MinComp(poly p, ring lmRing, ring tailRing)
static void kOptimizeLDeg(pLDegProc ldeg, kStrategy strat)
int posInT17(const TSet set, const int length, LObject &p)
int(* posInLOld)(const LSet Ls, const int Ll, LObject *Lo, const kStrategy strat)
static unsigned pLength(poly a)
#define pHead(p)
returns newly allocated copy of Lm(p), coef is copied, next=NULL, p might be NULL ...
poly kNFBound(ideal F, ideal Q, poly p, int bound, int syzComp, int lazyReduce)
void idSkipZeroes(ideal ide)
gives an ideal/module the minimal possible size
static short scaFirstAltVar(ring r)
BOOLEAN rHasMixedOrdering(const ring r)
void enterT_strong(LObject &p, kStrategy strat, int atT)
void pRestoreDegProcs(ring r, pFDegProc old_FDeg, pLDegProc old_lDeg)
void rChangeCurrRing(ring r)
BOOLEAN kCheckSpolyCreation(LObject *L, kStrategy strat, poly &m1, poly &m2)
BOOLEAN arriRewCriterion(poly, unsigned long, poly, kStrategy strat, int start=0)
#define TEST_OPT_RETURN_SB
static void p_Delete(poly *p, const ring r)
void khCheck(ideal Q, intvec *w, intvec *hilb, int &eledeg, int &count, kStrategy strat)
ideal idInit(int idsize, int rank)
initialise an ideal / module
BOOLEAN arriRewCriterionPre(poly sig, unsigned long not_sevSig, poly lm, kStrategy strat, int)
int p_IsPurePower(const poly p, const ring r)
return i, if head depends only on var(i)
void(* chainCrit)(poly p, int ecart, kStrategy strat)
void postReduceByMon(LObject *h, kStrategy strat)
used for GB over ZZ: intermediate reduction by monomial elements background: any known constant eleme...
static BOOLEAN rField_is_Ring(const ring r)
void cleanT(kStrategy strat)
ideal id_KillSquares(const ideal id, const short iFirstAltVar, const short iLastAltVar, const ring r, const bool bSkipZeroes)
void superenterpairs(poly h, int k, int ecart, int pos, kStrategy strat, int atR)
void firstUpdate(kStrategy strat)
BOOLEAN rHasGlobalOrdering(const ring r)
void khCheckLocInhom(ideal Q, intvec *w, intvec *hilb, int &count, kStrategy strat)
ideal kMin_std(ideal F, ideal Q, tHomog h, intvec **w, ideal &M, intvec *hilb, int syzComp, int reduced)
void pNorm(poly p, const ring R=currRing)
BOOLEAN hasPurePower(const poly p, int last, int *length, kStrategy strat)
void reorderT(kStrategy strat)
static BOOLEAN length(leftv result, leftv arg)
BOOLEAN(* s_poly_proc_t)(kStrategy strat)
int posInS(const kStrategy strat, const int length, const poly p, const int ecart_p)
static short scaLastAltVar(ring r)
void updateS(BOOLEAN toT, kStrategy strat)
static bool rIsSCA(const ring r)
void completeReduce(kStrategy strat, BOOLEAN withT)
static poly redMoraNF(poly h, kStrategy strat, int flag)
ring currRing
Widely used global variable which specifies the current polynomial ring for Singular interpreter and ...
long kModDeg(poly p, ring r)
void chainCritOpt_1(poly, int, kStrategy strat)
long maxdegreeWecart(poly p, int *l, ring r)
void updateResult(ideal r, ideal Q, kStrategy strat)
static void pLmFree(poly p)
frees the space of the monomial m, assumes m != NULL coef is not freed, m is not advanced ...
int idElem(const ideal F)
count non-zero elements
char posInLDependsOnLength
static void p_LmDelete(poly p, const ring r)
static BOOLEAN kMoraUseBucket(kStrategy strat)
void p_wrp(poly p, ring lmRing, ring tailRing)
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
BOOLEAN newHEdge(kStrategy strat)
void enterSMoraNF(LObject &p, int atS, kStrategy strat, int atR=-1)
void initEcartNormal(TObject *h)
#define OPT_NOTREGULARITY
#define TEST_OPT_REDTHROUGH
void finalReduceByMon(kStrategy strat)
used for GB over ZZ: final reduction by constant elements background: any known constant element of i...
static ideal nc_GB(const ideal F, const ideal Q, const intvec *w, const intvec *hilb, kStrategy strat, const ring r)
int(* red2)(LObject *L, kStrategy strat)
BOOLEAN idIs0(ideal h)
returns true if h is the zero ideal
KINLINE poly kNoetherTail()
#define SI_RESTORE_OPT1(A)
KINLINE BOOLEAN arriRewDummy(poly, unsigned long, poly, kStrategy, int)
static BOOLEAN rField_is_numeric(const ring r)
void exitBuchMora(kStrategy strat)
void Werror(const char *fmt,...)
pFDegProc pOrigFDeg_TailRing
int posInL10(const LSet set, const int length, LObject *p, const kStrategy strat)
void kDebugPrint(kStrategy strat)
ideal mora(ideal F, ideal Q, intvec *w, intvec *hilb, kStrategy strat)
void enterSBba(LObject &p, int atS, kStrategy strat, int atR)
#define pCopy(p)
return a copy of the poly