101 if (
p->next==
NULL)
break;
169 if (strat->
tl<0)
return 1;
173 int i,
j,pass,ei, ii, h_d,ci;
174 unsigned long not_sev;
176 #define START_REDUCE 512
178 number *
A=(number*)
omAlloc0(red_size*
sizeof(number));
179 poly *C=(poly*)
omAlloc0(red_size*
sizeof(poly));
180 poly *
T=(poly*)
omAlloc0(red_size*
sizeof(poly));
181 const ring tailRing=strat->
tailRing;
184 d = reddeg =
h->GetpFDeg() +
h->ecart;
185 h->SetShortExpVector();
187 h_p =
h->GetLmTailRing();
216 ei = strat->
T[
j].ecart;
217 li = strat->
T[
j].pLength;
227 if (li<=0) li=strat->
T[
j].GetpLength();
237 if ((((strat->
T[
i].ecart < ei) && (ei>
h->ecart))
238 || ((strat->
T[
i].ecart <=
h->ecart)
239 && (strat->
T[
i].pLength <= li)
243 h_p, not_sev, tailRing))
248 ei = strat->
T[
i].ecart;
249 li = strat->
T[
i].pLength;
250 if (li<=0) li=strat->
T[
i].GetpLength();
265 Print(
"\nwith T[%d]:",ii);
274 int l_orig=strat->
T[ii].pLength;
281 strat->
T[ii].pLength=l_orig;
296 for(
int i=0;
i<=pass;
i++)
309 h->SetShortExpVector();
316 h->ecart = d-h_d+ei-
h->ecart;
328 if (pass>=red_size-1)
330 A=(number*)
omRealloc0Size(
A,red_size*
sizeof(number),2*red_size*
sizeof(number));
331 C=(poly*)
omRealloc0Size(C,red_size*
sizeof(poly),2*red_size*
sizeof(poly));
static FORCE_INLINE void n_Delete(number *p, const coeffs r)
delete 'p'
const CanonicalForm int s
KINLINE poly k_LmInit_currRing_2_tailRing(poly p, ring tailRing, omBin tailBin)
int redLiftstd(LObject *h, kStrategy strat)
static poly lazyComp(number *A, poly *M, poly *T, int index, poly s, int *l, const ring tailR)
static void kAppend(poly t, TObject *h)
static poly kSplitAt(int k, TObject *h, kStrategy strat)
void kBucketClear(kBucket_pt bucket, poly *p, int *length)
void kBucket_Minus_m_Mult_p(kBucket_pt bucket, poly m, poly p, int *l, poly spNoether)
Bpoly == Bpoly - m*p; where m is a monom Does not destroy p and m assume (*l <= 0 || pLength(p) == *l...
void kBucket_Mult_n(kBucket_pt bucket, number n)
Multiply Bucket by number ,i.e. Bpoly == n*Bpoly.
void kBucketDestroy(kBucket_pt *bucket_pt)
void kBucketInit(kBucket_pt bucket, poly lm, int length)
kBucket_pt kBucketCreate(const ring bucket_ring)
Creation/Destruction of buckets.
void kBucket_Add_q(kBucket_pt bucket, poly q, int *l)
Add to Bucket a poly ,i.e. Bpoly == q+Bpoly.
int kBucketCanonicalize(kBucket_pt bucket)
Canonicalizes Bpoly, i.e. converts polys of buckets into one poly in one bucket: Returns number of bu...
int ksReducePoly(LObject *PR, TObject *PW, poly spNoether, number *coef, poly *mon, kStrategy strat)
int kFindDivisibleByInT(const kStrategy strat, const LObject *L, const int start)
return -1 if no divisor is found number of first divisor in T, otherwise
static void kDeleteLcm(LObject *P)
static number & pGetCoeff(poly p)
return an alias to the leading coefficient of p assumes that p != NULL NOTE: not copy
#define omFreeSize(addr, size)
#define omRealloc0Size(addr, o_size, size)
static int index(p_Length length, p_Ord ord)
static BOOLEAN p_LmShortDivisibleBy(poly a, unsigned long sev_a, poly b, unsigned long not_sev_b, const ring r)
static void p_Delete(poly *p, const ring r)
static unsigned pLength(poly a)
VAR ring currRing
Widely used global variable which specifies the current polynomial ring for Singular interpreter and ...
Compatiblity layer for legacy polynomial operations (over currRing)
void PrintS(const char *s)