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)
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)
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)
ring currRing
Widely used global variable which specifies the current polynomial ring for Singular interpreter and ...
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(* test_PosInT)(const TSet T, const int tl, LObject &h)
static poly nc_CreateSpoly(const poly p1, const poly p2, const ring r)
void p_wrp(poly p, ring lmRing, ring tailRing)
int(* test_PosInL)(const LSet set, const int length, LObject *L, const kStrategy strat)
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)