/* Returns TRUE if * LM(p) | LM(lcm) * LC(p) | LC(lcm) only if ring * Exists i, j: * LE(p, i) != LE(lcm, i) * LE(p1, i) != LE(lcm, i) ==> LCM(p1, p) != lcm * LE(p, j) != LE(lcm, j) * LE(p2, j) != LE(lcm, j) ==> LCM(p2, p) != lcm */ BOOLEAN pCompareChain (poly p,poly p1,poly p2,poly lcm) { int k, j; if (lcm==NULL) return FALSE; for (j=(currRing->N); j; j--) if ( pGetExp(p,j) > pGetExp(lcm,j)) return FALSE; if ( pGetComp(p) != pGetComp(lcm)) return FALSE; for (j=(currRing->N); j; j--) { if (pGetExp(p1,j)!=pGetExp(lcm,j)) { if (pGetExp(p,j)!=pGetExp(lcm,j)) { for (k=(currRing->N); k>j; k--) { if ((pGetExp(p,k)!=pGetExp(lcm,k)) && (pGetExp(p2,k)!=pGetExp(lcm,k))) return TRUE; } for (k=j-1; k; k--) { if ((pGetExp(p,k)!=pGetExp(lcm,k)) && (pGetExp(p2,k)!=pGetExp(lcm,k))) return TRUE; } return FALSE; } } else if (pGetExp(p2,j)!=pGetExp(lcm,j)) { if (pGetExp(p,j)!=pGetExp(lcm,j)) { for (k=(currRing->N); k>j; k--) { if ((pGetExp(p,k)!=pGetExp(lcm,k)) && (pGetExp(p1,k)!=pGetExp(lcm,k))) return TRUE; } for (k=j-1; k!=0 ; k--) { if ((pGetExp(p,k)!=pGetExp(lcm,k)) && (pGetExp(p1,k)!=pGetExp(lcm,k))) return TRUE; } return FALSE; } } } return FALSE; } #ifdef HAVE_RATGRING BOOLEAN pCompareChainPart (poly p,poly p1,poly p2,poly lcm) { int k, j; if (lcm==NULL) return FALSE; for (j=currRing->real_var_end; j>=currRing->real_var_start; j--) if ( pGetExp(p,j) > pGetExp(lcm,j)) return FALSE; if ( pGetComp(p) != pGetComp(lcm)) return FALSE; for (j=currRing->real_var_end; j>=currRing->real_var_start; j--) { if (pGetExp(p1,j)!=pGetExp(lcm,j)) { if (pGetExp(p,j)!=pGetExp(lcm,j)) { for (k=(currRing->N); k>j; k--) for (k=currRing->real_var_end; k>j; k--) { if ((pGetExp(p,k)!=pGetExp(lcm,k)) && (pGetExp(p2,k)!=pGetExp(lcm,k))) return TRUE; } for (k=j-1; k>=currRing->real_var_start; k--) { if ((pGetExp(p,k)!=pGetExp(lcm,k)) && (pGetExp(p2,k)!=pGetExp(lcm,k))) return TRUE; } return FALSE; } } else if (pGetExp(p2,j)!=pGetExp(lcm,j)) { if (pGetExp(p,j)!=pGetExp(lcm,j)) { for (k=currRing->real_var_end; k>j; k--) { if ((pGetExp(p,k)!=pGetExp(lcm,k)) && (pGetExp(p1,k)!=pGetExp(lcm,k))) return TRUE; } for (k=j-1; k>=currRing->real_var_start; k--) { if ((pGetExp(p,k)!=pGetExp(lcm,k)) && (pGetExp(p1,k)!=pGetExp(lcm,k))) return TRUE; } return FALSE; } } } return FALSE; } #endif /*2 * returns the length of a (numbers of monomials) * respect syzComp */ poly p_Last(poly a, int &l, const ring r) { if (a == NULL) { l = 0; return NULL; } l = 1; if (! rIsSyzIndexRing(r)) { while (pNext(a)!=NULL) { pIter(a); l++; } } else { int curr_limit = rGetCurrSyzLimit(r); poly pp = a; while ((a=pNext(a))!=NULL) { if (p_GetComp(a,r)<=curr_limit/*syzComp*/) l++; else break; pp = a; } a=pp; } return a; }