7#define PLURAL_INTERNAL_DECLARATIONS
43 return(nc_ReduceSPoly(p1,
p_Copy(p2,r),r));
112 (*h).ecart = d-(*h).FDeg;
131 && ((d >= reddeg) || (pass > strat->
LazyPass))
134 at = strat->
posInL(strat->
L,strat->
Ll,
h,strat);
180 for (
i=
currRing->real_var_start;i<=currRing->real_var_end;
i++)
256 Print(
" with S[%d]= ",c_j);
292 (*h).ecart = d-(*h).FDeg;
296 c_j=-1; c_e=-2; c_p=
NULL;
313 if ((c_j<0)||(c_e>=0))
330 if ((c_j<0)||(c_e>a_e))
575 if ((strat->
Ll >= 0) && ((d > reddeg) || (pass > strat->
LazyPass)))
636 int i,
j,at,reddeg,d,pass,ei;
652 ei = strat->
T[
j].ecart;
664 if ((!
BTEST1(20)) && (ei <= (*h).ecart))
674 ei = strat->
T[
i].ecart;
691 at = strat->
posInL(strat->
L,strat->
Ll,
h,strat);
730 if (ei <= (*h).ecart)
754 if ((strat->
Ll >= 0) && ((d > reddeg) || (pass > strat->
LazyPass)))
756 at = strat->
posInL(strat->
L,strat->
Ll,
h,strat);
772 Print(
" degree jumped: -> L%d\n",at);
814 int j,jbest,at,reddeg,d,pass;
832 p=spSpolyCreate(strat->
T[
j].p,(*h).p,strat->
kNoether);
856 ph=spSpolyCreate(strat->
T[
j].p,(*h).p,strat->
kNoether);
912 if ((strat->
Ll >= 0) && ((pass > strat->
LazyPass) || (d > reddeg)))
914 at = strat->
posInL(strat->
L,strat->
Ll,
h,strat);
985 for(jj=
currRing->real_var_start;jj<=currRing->real_var_end;jj++)
987 if(
pGetExp(F->m[ii],jj)>0) { is_rat_id=
TRUE;
break; }
989 if (is_rat_id)
break;
1035 PrintS(
"<gnc_gr_bba>\n");
1076 while (strat->
Ll >= 0)
1095 strat->
P = strat->
L[strat->
Ll];
1099 if (strat->
P.p !=
NULL)
1141 if (strat->
P.p !=
NULL)
1145 &olddeg,&reduc,strat, red_result);
1157 strat->
red(&strat->
P,strat);
1166 if (strat->
P.p !=
NULL)
1181 PrintS(
"unit element detected:");
1185 strat->
P.p =
pOne();
1190 int pos=
posInS(strat,strat->
sl,strat->
P.p, strat->
P.ecart);
1196 #ifdef HAVE_RATGRING
1225 if (strat->
sl==-1) pos=0;
1226 else pos=
posInS(strat,strat->
sl,strat->
P.p,strat->
P.ecart);
1228 strat->
enterS(strat->
P,pos,strat,-1);
1275 PrintS(
"</gnc_gr_bba>\n");
1280 return (strat->
Shdl);
1290 WerrorS(
"not implemented: std for inhomogeneous ideasl in local orderings");
static int si_min(const int a, const int b)
int(* posInL)(const LSet set, const int length, LObject *L, const kStrategy strat)
void(* initEcartPair)(LObject *h, poly f, poly g, int ecartF, int ecartG)
void(* enterS)(LObject &h, int pos, kStrategy strat, int atR)
void(* initEcart)(TObject *L)
int(* posInT)(const TSet T, const int tl, LObject &h)
int(* red)(LObject *L, kStrategy strat)
void WerrorS(const char *s)
EXTERN_VAR BBA_Proc gnc_gr_bba
int redGrRatGB(LObject *h, kStrategy strat)
ideal k_gnc_gr_mora(const ideal F, const ideal Q, const intvec *, const intvec *, kStrategy strat, const ring _currRing)
int redGrFirst(LObject *h, kStrategy strat)
void nc_gr_initBba(ideal F, kStrategy strat)
nc_gr_initBba is needed for sca_gr_bba and gr_bba.
void ratGB_divide_out(poly p)
ideal k_gnc_gr_bba(const ideal F, const ideal Q, const intvec *, const intvec *, kStrategy strat, const ring _currRing)
KINLINE poly redtailBba(poly p, int pos, kStrategy strat, BOOLEAN normalize)
KINLINE void clearS(poly p, unsigned long p_sev, int *at, int *k, kStrategy strat)
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)
void enterL(LSet *set, int *length, int *LSetmax, LObject p, int at)
void enterpairs(poly h, int k, int ecart, int pos, kStrategy strat, int atR)
void initEcartPairMora(LObject *Lp, poly, poly, int ecartF, int ecartG)
void initBuchMoraPos(kStrategy strat)
int posInL0(const LSet set, const int length, LObject *p, const kStrategy)
void exitBuchMora(kStrategy strat)
void initEcartNormal(TObject *h)
int posInS(const kStrategy strat, const int length, const poly p, const int ecart_p)
int posInT110(const TSet set, const int length, LObject &p)
void updateResult(ideal r, ideal Q, kStrategy strat)
void deleteInL(LSet set, int *length, int j, kStrategy strat)
void initBuchMoraCrit(kStrategy strat)
void completeReduce(kStrategy strat, BOOLEAN withT)
void messageSets(kStrategy strat)
void initEcartBBA(TObject *h)
int posInL11(const LSet set, const int length, LObject *p, const kStrategy)
void initEcartPairBba(LObject *Lp, poly, poly, int, int)
void messageStat(int hilbcount, kStrategy strat)
void enterSBba(LObject &p, int atS, kStrategy strat, int atR)
static void kDeleteLcm(LObject *P)
static poly nc_CreateSpoly(const poly p1, const poly p2, const ring r)
poly nc_CreateShortSpoly(poly p1, poly p2, const ring r)
static nc_type & ncRingType(nc_struct *p)
static poly nc_ReduceSpoly(const poly p1, poly p2, const ring r)
poly gnc_ReduceSpolyNew(const poly p1, poly p2, const ring r)
#define TEST_OPT_INTSTRATEGY
#define TEST_OPT_DEGBOUND
poly p_Cleardenom(poly p, const ring r)
static BOOLEAN p_LmDivisibleBy(poly a, poly b, const ring r)
static void p_Delete(poly *p, const ring r)
static BOOLEAN p_LmDivisibleByPart(poly a, poly b, const ring r, const int start, const int end)
static poly p_Copy(poly p, const ring r)
returns a copy of p
static long p_Totaldegree(poly p, const ring r)
void p_wrp(poly p, ring lmRing, ring tailRing)
void rChangeCurrRing(ring r)
VAR ring currRing
Widely used global variable which specifies the current polynomial ring for Singular interpreter and ...
Compatibility layer for legacy polynomial operations (over currRing)
#define pHead(p)
returns newly allocated copy of Lm(p), coef is copied, next=NULL, p might be NULL
#define pIsConstant(p)
like above, except that Comp must be 0
static void pLmFree(poly p)
frees the space of the monomial m, assumes m != NULL coef is not freed, m is not advanced
#define pGetExp(p, i)
Exponent.
#define pDivisibleBy(a, b)
returns TRUE, if leading monom of a divides leading monom of b i.e., if there exists a expvector c > ...
#define pLmCmp(p, q)
returns 0|1|-1 if p=q|p>q|p<q w.r.t monomial ordering
poly nc_rat_CreateSpoly(poly pp1, poly pp2, int ishift, const ring r)
BOOLEAN p_LmIsConstantRat(const poly p, const ring r)
poly nc_rat_ReduceSpolyNew(const poly p1, poly p2, int ishift, const ring r)
void PrintS(const char *s)
void rWrite(ring r, BOOLEAN details)
void rDebugPrint(const ring r)
static BOOLEAN rIsPluralRing(const ring r)
we must always have this test!
static BOOLEAN rIsRatGRing(const ring r)
static short rVar(const ring r)
#define rVar(r) (r->N)
BOOLEAN id_HomIdeal(ideal id, ideal Q, const ring r)