Modified modern Sinuglar Buchberger's algorithm.
381 PrintS(
"\n\n<sca_bba>\n\n");
468 withT = ! strat->
homog;
473 #undef HAVE_TAIL_RING 475 #ifdef HAVE_TAIL_RING 497 for (
int iNewElement = strat->
newIdeal; iNewElement <
IDELEMS(tempF); iNewElement++)
499 const poly pSave = tempF->m[iNewElement];
508 for(
unsigned int i = m_iFirstAltVar;
i <= m_iLastAltVar;
i++ )
519 if( p_new ==
NULL)
continue;
535 pos = strat->
posInL(strat->
L,strat->
Ll,&
h,strat);
544 while (strat->
Ll >= 0)
564 while ((strat->
Ll >= 0)
576 if (strat->
Ll<0)
break;
581 strat->
P = strat->
L[strat->
Ll];
587 if(strat->
P.IsNull())
continue;
599 if(strat->
P.IsNull())
continue;
601 if (strat->
P.p1 ==
NULL)
613 &olddeg,&reduc,
strat, red_result);
616 red_result = strat->red(&strat->P,strat);
626 strat->P.GetP(strat->lmBin);
628 int pos =
posInS(strat,strat->sl,strat->P.p,strat->P.ecart);
633 strat->P.pCleardenom();
636 strat->P.p =
redtailBba(&(strat->P),pos-1,strat, withT);
637 strat->P.pCleardenom();
644 strat->P.p =
redtailBba(&(strat->P),pos-1,strat, withT);
681 enterpairs(strat->P.p,strat->sl,strat->P.ecart,pos,strat, strat->tl);
684 strat->enterS(strat->P, pos, strat, strat->tl);
693 const poly pSave = strat->P.p;
698 for(
unsigned int i = m_iFirstAltVar;
i <= m_iLastAltVar;
i++ )
708 if( p_new ==
NULL)
continue;
724 strat->initEcart(&
h);
730 pos = strat->posInL(strat->L,strat->Ll,&
h,strat);
732 enterL(&strat->L,&strat->Ll,&strat->Lmax,
h,pos);
739 strat->initEcart(&
h);
741 h.PrepareRed(strat->use_buckets);
744 red_result = strat->red(&
h,strat);
747 if (red_result != 1)
continue;
750 int pos =
posInS(strat,strat->sl,
h.p,
h.ecart);
776 strat->initEcart(&
h);
781 pos = strat->posInL(strat->L,strat->Ll,&
h,strat);
783 enterL(&strat->L,&strat->Ll,&strat->Lmax,
h,pos);
842 ideal I = strat->Shdl;
850 PrintS(
"\n\n</sca_bba>\n\n");
855 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)
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)
ring currRing
Widely used global variable which specifies the current polynomial ring for Singular interpreter and ...
#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:
#define pGetShortExpVector(a)
returns the "Short Exponent Vector" – used to speed up divisibility tests (see polys-impl.cc )
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)
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)