1 #define PLURAL_INTERNAL_DECLARATIONS 25 if(h.IsNull())
return;
31 int pos=
posInS(strat, strat->
sl, h.p, h.ecart);
63 if(h.IsNull())
return;
84 if (strat->
sl!=-1) pos =
posInS(strat, strat->
sl, h.p, h.ecart);
85 strat->
enterS(h, pos, strat, -1);
147 PrintS(
"ideal tempF: \n");
149 PrintS(
"ideal tempQ: \n");
176 for(; strat->
Ll >= 0;
202 strat->
P = strat->
L[strat->
Ll];
208 if(strat->
P.IsNull())
continue;
218 if(strat->
P.IsNull())
continue;
228 message((strat->
honey ? strat->
P.ecart : 0) + strat->
P.pFDeg(), &olddeg,&reduc,strat, red_result);
231 strat->red(&strat->P,strat);
233 if(strat->P.IsNull())
continue;
237 const poly save = strat->P.p;
247 const poly p_next =
pNext(save);
250 for(
unsigned int i = m_iFirstAltVar;
i <= m_iLastAltVar;
i++ )
261 if( tt ==
NULL)
continue;
274 strat->initEcart(&h);
298 pos = strat->posInL(strat->L,strat->Ll,&h,strat);
301 enterL(&strat->L,&strat->Ll,&strat->Lmax,h,pos);
344 ideal I = strat->
Shdl;
358 return (strat->
Shdl);
375 PrintS(
"\n\n<sca_bba>\n\n");
462 withT = ! strat->
homog;
467 #undef HAVE_TAIL_RING 469 #ifdef HAVE_TAIL_RING 491 for (
int iNewElement = strat->
newIdeal; iNewElement <
IDELEMS(tempF); iNewElement++)
493 const poly pSave = tempF->m[iNewElement];
499 const poly p_next =
pNext(pSave);
502 for(
unsigned int i = m_iFirstAltVar;
i <= m_iLastAltVar;
i++ )
513 if( p_new ==
NULL)
continue;
529 pos = strat->
posInL(strat->
L,strat->
Ll,&h,strat);
538 while (strat->
Ll >= 0)
558 while ((strat->
Ll >= 0)
570 if (strat->
Ll<0)
break;
575 strat->
P = strat->
L[strat->
Ll];
581 if(strat->
P.IsNull())
continue;
593 if(strat->
P.IsNull())
continue;
595 if (strat->
P.p1 ==
NULL)
607 &olddeg,&reduc,strat, red_result);
610 red_result = strat->red(&strat->P,strat);
620 strat->P.GetP(strat->lmBin);
622 int pos =
posInS(strat,strat->sl,strat->P.p,strat->P.ecart);
627 strat->P.pCleardenom();
630 strat->P.p =
redtailBba(&(strat->P),pos-1,strat, withT);
631 strat->P.pCleardenom();
638 strat->P.p =
redtailBba(&(strat->P),pos-1,strat, withT);
675 enterpairs(strat->P.p,strat->sl,strat->P.ecart,pos,strat, strat->tl);
678 strat->enterS(strat->P, pos, strat, strat->tl);
687 const poly pSave = strat->P.p;
688 const poly p_next =
pNext(pSave);
692 for(
unsigned int i = m_iFirstAltVar;
i <= m_iLastAltVar;
i++ )
702 if( p_new ==
NULL)
continue;
717 strat->initEcart(&h);
723 pos = strat->posInL(strat->L,strat->Ll,&h,strat);
725 enterL(&strat->L,&strat->Ll,&strat->Lmax,h,pos);
732 strat->initEcart(&h);
734 h.PrepareRed(strat->use_buckets);
737 red_result = strat->red(&h,strat);
740 if (red_result != 1)
continue;
743 int pos =
posInS(strat,strat->sl,h.p,h.ecart);
769 strat->initEcart(&h);
774 pos = strat->posInL(strat->L,strat->Ll,&h,strat);
776 enterL(&strat->L,&strat->Ll,&strat->Lmax,h,pos);
835 ideal I = strat->
Shdl;
843 PrintS(
"\n\n</sca_bba>\n\n");
848 return (strat->
Shdl);
855 #ifdef MORA_USE_BUCKETS 861 #ifdef MORA_USE_BUCKETS 958 #undef HAVE_TAIL_RING 960 #ifdef HAVE_TAIL_RING 972 for (
int iNewElement = strat->
newIdeal; iNewElement <
IDELEMS(tempF); iNewElement++)
975 const poly pSave = tempF->m[iNewElement];
981 const poly p_next =
pNext(pSave);
984 for(
unsigned int i = m_iFirstAltVar;
i <= m_iLastAltVar;
i++ )
996 if( p_new ==
NULL)
continue;
1010 if (strat->
Ll != -1)
1011 pos = strat->
posInL(strat->
L,strat->
Ll,&h,strat);
1020 while (strat->
Ll >= 0)
1027 && (strat->
L[strat->
Ll].ecart+strat->
L[strat->
Ll].GetpFDeg()>
Kstd1_deg))
1032 while ((strat->
Ll >= 0)
1033 && (strat->
L[strat->
Ll].p1!=
NULL) && (strat->
L[strat->
Ll].p2!=
NULL)
1034 && (strat->
L[strat->
Ll].ecart+strat->
L[strat->
Ll].GetpFDeg()>
Kstd1_deg)
1043 if (strat->
Ll<0)
break;
1046 strat->
P = strat->
L[strat->
Ll];
1053 if(strat->
P.IsNull())
continue;
1065 if (strat->
P.p1 ==
NULL)
1072 if (!strat->
P.IsNull())
1076 message(strat->
P.ecart+strat->
P.GetpFDeg(),&olddeg,&reduc,strat, red_result);
1078 red_result = strat->red(&strat->P,strat);
1081 if (! strat->
P.IsNull())
1090 strat->
P.p =
redtail(&(strat->
P),strat->
sl,strat);
1098 strat->
P.pCleardenom();
1106 posInS(strat,strat->
sl,strat->
P.p, strat->
P.ecart),
1115 const poly pSave = strat->
P.p;
1116 const poly p_next =
pNext(pSave);
1119 for(
unsigned int i = m_iFirstAltVar;
i <= m_iLastAltVar;
i++ )
1131 if( p_new ==
NULL)
continue;
1145 if (strat->
Ll != -1)
1146 pos = strat->
posInL(strat->
L,strat->
Ll,&h,strat);
1153 memset(&strat->
P,0,
sizeof(strat->
P));
1209 return (strat->
Shdl);
int(* posInL)(const LSet set, const int length, LObject *L, const kStrategy strat)
ideal SCAQuotient(const ring r)
void mu(int **points, int sizePoints)
int redEcart(LObject *h, kStrategy strat)
#define TEST_OPT_DEGBOUND
void initBuchMoraPos(kStrategy strat)
ideal k_sca_bba(const ideal F, const ideal Q, const intvec *, const intvec *, kStrategy strat, const ring _currRing)
Modified modern Sinuglar Buchberger's algorithm.
ideal k_sca_gr_bba(const ideal F, const ideal Q, const intvec *, const intvec *, kStrategy strat, const ring _currRing)
Modified Plural's Buchberger's algorithmus.
void message(int i, int *reduc, int *olddeg, kStrategy strat, int red_result)
void initMora(ideal F, kStrategy strat)
BOOLEAN p_ComparePolys(poly p1, poly p2, const ring r)
returns TRUE if p1 is a skalar multiple of p2 assume p1 != NULL and p2 != NULL
void messageStat(int hilbcount, kStrategy strat)
ideal k_sca_mora(const ideal F, const ideal Q, const intvec *, const intvec *, kStrategy strat, const ring _currRing)
Modified modern Sinuglar Mora's algorithm.
Compatiblity layer for legacy polynomial operations (over currRing)
void initBuchMora(ideal F, ideal Q, kStrategy strat)
std::vector< std::vector< int > > p_new(ideal Xo, ideal Sigma)
int redFirst(LObject *h, kStrategy strat)
void addLObject(LObject &h, kStrategy &strat)
#define omFreeSize(addr, size)
VAR int(* test_PosInT)(const TSet T, const int tl, LObject &h)
static bool id_IsSCAHomogeneous(const ideal id, const intvec *wCx, const intvec *wCy, const ring r)
static short rVar(const ring r)
#define rVar(r) (r->N)
void id_Delete(ideal *h, ring r)
deletes an ideal/module/matrix
void enterpairs(poly h, int k, int ecart, int pos, kStrategy strat, int atR)
#define TEST_OPT_MULTBOUND
static void kDeleteLcm(LObject *P)
void cancelunit(LObject *L, BOOLEAN inNF)
void initBba(kStrategy strat)
void enterL(LSet *set, int *length, int *LSetmax, LObject p, int at)
static number & pGetCoeff(poly p)
return an alias to the leading coefficient of p assumes that p != NULL NOTE: not copy ...
int(* red)(LObject *L, kStrategy strat)
KINLINE poly redtailBba(poly p, int pos, kStrategy strat, BOOLEAN normalize)
int(* posInT)(const TSet T, const int tl, LObject &h)
void updateL(kStrategy strat)
void kStratInitChangeTailRing(kStrategy strat)
#define TEST_OPT_NOT_BUCKETS
void enterT(LObject &p, kStrategy strat, int atT)
void deleteInL(LSet set, int *length, int j, kStrategy strat)
VAR ring currRing
Widely used global variable which specifies the current polynomial ring for Singular interpreter and ...
void(* initEcart)(TObject *L)
#define TEST_OPT_INTSTRATEGY
static long p_GetExp(const poly p, const unsigned long iBitmask, const int VarOffset)
get a single variable exponent : the integer VarOffset encodes:
poly redtail(LObject *L, int end_pos, kStrategy strat)
int scMult0Int(ideal S, ideal Q, const ring tailRing)
void updateLHC(kStrategy strat)
#define pGetShortExpVector(a)
returns the "Short Exponent Vector" – used to speed up divisibility tests (see polys-impl.cc )
void(* enterS)(LObject &h, int pos, kStrategy strat, int atR)
poly sca_pp_Mult_xi_pp(short i, const poly pPoly, const ring rRing)
void initBuchMoraCrit(kStrategy strat)
void reorderL(kStrategy strat)
void rDebugPrint(const ring r)
ideal kInterRedOld(ideal F, ideal Q)
void PrintS(const char *s)
int(* posInLOld)(const LSet Ls, const int Ll, LObject *Lo, const kStrategy strat)
void rWrite(ring r, BOOLEAN details)
static short scaFirstAltVar(ring r)
void rChangeCurrRing(ring r)
static BOOLEAN rField_is_Ring(const ring r)
ideal id_KillSquares(const ideal id, const short iFirstAltVar, const short iLastAltVar, const ring r, const bool bSkipZeroes)
void firstUpdate(kStrategy strat)
int posInT110(const TSet set, const int length, LObject &p)
void pNorm(poly p, const ring R=currRing)
static BOOLEAN kMoraUseBucket(kStrategy)
int posInS(const kStrategy strat, const int length, const poly p, const int ecart_p)
static short scaLastAltVar(ring r)
void nc_gr_initBba(ideal F, kStrategy strat)
nc_gr_initBba is needed for sca_gr_bba and gr_bba.
static bool rIsSCA(const ring r)
void completeReduce(kStrategy strat, BOOLEAN withT)
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 ...
static poly nc_CreateSpoly(const poly p1, const poly p2, const ring r)
void p_wrp(poly p, ring lmRing, ring tailRing)
BOOLEAN idIs0(ideal h)
returns true if h is the zero ideal
poly p_Cleardenom(poly p, const ring r)
void exitBuchMora(kStrategy strat)
int posInL10(const LSet set, const int length, LObject *p, const kStrategy strat)
void kDebugPrint(kStrategy strat)
VAR int(* test_PosInL)(const LSet set, const int length, LObject *L, const kStrategy strat)