Modified modern Sinuglar Buchberger's algorithm.
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);
int(* posInL)(const LSet set, const int length, LObject *L, const kStrategy strat)
ideal SCAQuotient(const ring r)
#define TEST_OPT_DEGBOUND
void initBuchMoraPos(kStrategy strat)
void message(int i, int *reduc, int *olddeg, kStrategy strat, int red_result)
void messageStat(int hilbcount, kStrategy strat)
void initBuchMora(ideal F, ideal Q, kStrategy strat)
static bool id_IsSCAHomogeneous(const ideal id, const intvec *wCx, const intvec *wCy, const ring r)
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)
static void kDeleteLcm(LObject *P)
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
KINLINE poly redtailBba(poly p, int pos, kStrategy strat, BOOLEAN normalize)
int(* posInT)(const TSet T, const int tl, LObject &h)
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 @Note: the integer VarOffset encodes:
#define pGetShortExpVector(a)
returns the "Short Exponent Vector" – used to speed up divisibility tests (see polys-impl....
poly sca_pp_Mult_xi_pp(short i, const poly pPoly, const ring rRing)
void initBuchMoraCrit(kStrategy strat)
ideal kInterRedOld(ideal F, ideal Q)
void PrintS(const char *s)
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)
int posInS(const kStrategy strat, const int length, const poly p, const int ecart_p)
static short scaLastAltVar(ring r)
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
void exitBuchMora(kStrategy strat)
void kDebugPrint(kStrategy strat)