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++ )
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);
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++ )
723 pos = strat->
posInL(strat->
L,strat->
Ll,&
h,strat);
737 red_result = strat->
red(&
h,strat);
740 if (red_result != 1)
continue;
743 int pos =
posInS(strat,strat->
sl,
h.p,
h.ecart);
774 pos = strat->
posInL(strat->
L,strat->
Ll,&
h,strat);
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)
int(* posInT)(const TSet T, const int tl, LObject &h)
int(* red)(LObject *L, kStrategy strat)
std::vector< std::vector< int > > p_new(ideal Xo, ideal Sigma)
BOOLEAN idIs0(ideal h)
returns true if h is the zero ideal
ideal kInterRedOld(ideal F, ideal Q)
void initBba(kStrategy strat)
void kDebugPrint(kStrategy strat)
VAR int(* test_PosInL)(const LSet set, const int length, LObject *L, const kStrategy strat)
VAR int(* test_PosInT)(const TSet T, const int tl, LObject &h)
void message(int i, int *reduc, int *olddeg, kStrategy strat, int red_result)
void initBuchMora(ideal F, ideal Q, kStrategy strat)
void enterT(LObject &p, kStrategy strat, int atT)
BOOLEAN kTest_TS(kStrategy strat)
void enterL(LSet *set, int *length, int *LSetmax, LObject p, int at)
void initBuchMoraPos(kStrategy strat)
void exitBuchMora(kStrategy strat)
void updateResult(ideal r, ideal Q, kStrategy strat)
void deleteInL(LSet set, int *length, int j, kStrategy strat)
void kStratInitChangeTailRing(kStrategy strat)
void initBuchMoraCrit(kStrategy strat)
void completeReduce(kStrategy strat, BOOLEAN withT)
void messageSets(kStrategy strat)
void messageStat(int hilbcount, kStrategy strat)
static bool rIsSCA(const ring r)
static poly nc_CreateSpoly(const poly p1, const poly p2, const ring r)
ideal id_KillSquares(const ideal id, const short iFirstAltVar, const short iLastAltVar, const ring r, const bool bSkipZeroes)
poly sca_pp_Mult_xi_pp(short i, const poly pPoly, const ring rRing)
static number & pGetCoeff(poly p)
return an alias to the leading coefficient of p assumes that p != NULL NOTE: not copy
#define TEST_OPT_DEGBOUND
#define TEST_OPT_NOT_BUCKETS
static long p_GetExp(const poly p, const unsigned long iBitmask, const int VarOffset)
get a single variable exponent @Note: the integer VarOffset encodes:
void p_wrp(poly p, ring lmRing, ring tailRing)
void rChangeCurrRing(ring r)
#define pGetShortExpVector(a)
returns the "Short Exponent Vector" – used to speed up divisibility tests (see polys-impl....
static void pLmFree(poly p)
frees the space of the monomial m, assumes m != NULL coef is not freed, m is not advanced
void rWrite(ring r, BOOLEAN details)
static BOOLEAN rField_is_Ring(const ring r)
ideal SCAQuotient(const ring r)
static short scaLastAltVar(ring r)
static short scaFirstAltVar(ring r)
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