44 if (!
f.inCoeffDomain())
49 while (
i.hasTerms() && !
result.isOne())
63 if (
fff.inCoeffDomain() ||
ggg.inCoeffDomain())
71 if (
g.lc().sign() < 0 )
return -
g;
74 else if (
g.isZero() )
76 if (
f.lc().sign() < 0 )
return -
f;
118 if (
g.inBaseDomain() ||
f.inBaseDomain())
260 if (
i.getItem().exp() > 1 &&
degree (
i.getItem().factor(),
R.mvar()) > 0)
370 for (;
j.hasItem();
j++)
372 j.getItem()=
j.getItem() (
rb,
i.getItem().mvar());
373 j.getItem()=
j.getItem() (
ra,
oldR.mvar());
398 for (;
j.hasItem();
j++)
401 i.getItem().mvar()));
456 h=
iter.getItem().factor();
457 if (!
h.inCoeffDomain())
512 f=
iter.getItem().factor();
552 if (
h.level() >
Rstar.level())
567 if (
g.level() <=
Rstar.level())
580 g.level() >
Rstar.level())
624 if (
i.getItem().deriv() == 0)
630 varsG /=
i.getItem().mvar();
634 while (!
varsG.isOne())
636 if (
i.getItem().deriv (
varsG.level()).isZero())
669 for (;
ii.hasItem();
ii++)
671 if (
ii.getItem() ==
i.getItem())
675 iter.getItem().factor().level());
682 for (;
ii.hasItem();
ii++)
687 iter.getItem().factor().level());
700 "wrong length of lists");
703 iter.getItem().exp() +
iter2.getItem().exp());
739 if (
iter.getItem().factor() ==
iter2.getItem().factor())
742 iter.getItem().exp() +
iter2.getItem().exp());
829 if (
iter.getItem().exp() > 0)
833 iter.getItem().factor().mvar();
867 if (
degree (
i.getItem(),
f.mvar()) > 0)
869 if (
i.getItem().level() >
f.level())
933 for (
i=
as;
i.hasItem();
i++)
1067 if (
i.getItem().factor().level() >
as.
getLast().level())
1072 j.getItem().exp()*
i.getItem().exp()));
Rational abs(const Rational &a)
CanonicalForm Prem(const CanonicalForm &F, const CanonicalForm &G)
pseudo remainder of F by G with certain factors of LC (g) cancelled
CFList charSetViaCharSetN(const CFList &PS)
compute a characteristic set via medial set
CFList charSetViaModCharSet(const CFList &PS, StoreFactors &StoredFactors, bool removeContents)
characteristic set via modified medial set
CFList modCharSet(const CFList &L, StoreFactors &StoredFactors, bool removeContents)
modified medial set
This file provides functions to compute characteristic sets.
CFArray evaluate(const CFArray &A, const CFList &evalPoints)
CanonicalForm cd(bCommonDen(FF))
CanonicalForm resultantZ(const CanonicalForm &A, const CanonicalForm &B, const Variable &x, bool prob)
modular resultant algorihtm over Z
modular resultant algorithm as described by G.
int ** merge(int **points1, int sizePoints1, int **points2, int sizePoints2, int &sizeResult)
CanonicalForm bCommonDen(const CanonicalForm &f)
CanonicalForm bCommonDen ( const CanonicalForm & f )
declarations of higher level algorithms.
CFFList FACTORY_PUBLIC sqrFree(const CanonicalForm &f, bool sort=false)
squarefree factorization
CFFList FACTORY_PUBLIC factorize(const CanonicalForm &f, bool issqrfree=false)
factorization over or
CanonicalForm FACTORY_PUBLIC resultant(const CanonicalForm &f, const CanonicalForm &g, const Variable &x)
CanonicalForm resultant ( const CanonicalForm & f, const CanonicalForm & g, const Variable & x )
#define ASSERT(expression, message)
static const int SW_RATIONAL
set to 1 for computations over Q
generate integers, elements of finite fields
Iterators for CanonicalForm's.
int ipower(int b, int m)
int ipower ( int b, int m )
generate all elements in F_p(alpha) starting from 0
CFGenerator * clone() const
static CFGenerator * generate()
virtual class for generators
class to iterate through CanonicalForm's
generate all elements in F_p starting from 0
generate integers starting from 0
factory's class for variables
functions to print debug output
const CanonicalForm int s
const CanonicalForm int const CFList const Variable & y
Varlist varsInAs(const Varlist &uord, const CFList &Astar)
void deflateDegree(const CanonicalForm &F, int &pExp, int n)
CanonicalForm alg_LC(const CanonicalForm &f, int lev)
CanonicalForm divide(const CanonicalForm &ff, const CanonicalForm &f, const CFList &as)
int hasVar(const CanonicalForm &f, const Variable &v)
CanonicalForm inflatePoly(const CanonicalForm &F, int exp)
int hasAlgVar(const CanonicalForm &f, const Variable &v)
int getDegOfExt(IntList °reelist, int n)
bool isInseparable(const CFList &Astar)
CFFList append(const CFFList &Inputlist, const CFFactor &TheFactor)
CanonicalForm backSubst(const CanonicalForm &F, const CFList &a, const CFList &b)
CanonicalForm QuasiInverse(const CanonicalForm &f, const CanonicalForm &g, const Variable &x)
CanonicalForm subst(const CanonicalForm &f, const CFList &a, const CFList &b, const CanonicalForm &Rstar, bool isFunctionField)
CanonicalForm generateMipo(int degOfExt)
CanonicalForm deflatePoly(const CanonicalForm &F, int exp)
Utility functions for factorization over algebraic function fields.
static CFFList sqrfNorm(const CanonicalForm &f, const CanonicalForm &PPalpha, const Variable &Extension, CanonicalForm &s, CanonicalForm &g, CanonicalForm &R)
see norm, R is guaranteed to be squarefree Based on Trager's sqrf_norm algorithm.
CanonicalForm alg_content(const CanonicalForm &f, const CFList &as)
CanonicalForm alg_gcd(const CanonicalForm &fff, const CanonicalForm &ggg, const CFList &as)
CFFList SteelTrager(const CanonicalForm &f, const CFList &AS)
algorithm of A. Steel described in "Conquering Inseparability: Primary decomposition and multivariate...
static CFFList Trager(const CanonicalForm &F, const CFList &Astar, const Variable &vminpoly, const CFList &as, bool isFunctionField)
Trager's algorithm, i.e. convert to one field extension and factorize over this field extension.
static CFList simpleExtension(CFList &backSubst, const CFList &Astar, const Variable &Extension, bool &isFunctionField, CanonicalForm &R)
CFList mapIntoPIE(CFFList &varsMapLevel, CanonicalForm &lcmVars, const CFList &AS)
map elements in AS into a PIE and record where the variables are mapped to in varsMapLevel,...
CFFList facAlgFunc(const CanonicalForm &f, const CFList &as)
factorize a polynomial modulo an extension given by an irreducible characteristic set
CFFList facAlgFunc2(const CanonicalForm &f, const CFList &as)
factorize a polynomial that is irreducible over the ground field modulo an extension given by an irre...
void out_cf(const char *s1, const CanonicalForm &f, const char *s2)
cf_algorithm.cc - simple mathematical algorithms.
static CanonicalForm resultante(const CanonicalForm &f, const CanonicalForm &g, const Variable &v)
Factorization over algebraic function fields.
const Variable & v
< [in] a sqrfree bivariate poly
Variable FACTORY_PUBLIC rootOf(const CanonicalForm &, char name='@')
returns a symbolic root of polynomial with name name Use it to define algebraic variables
void FACTORY_PUBLIC prune(Variable &alpha)
some useful template functions.
template CanonicalForm tmax(const CanonicalForm &, const CanonicalForm &)
template List< Variable > Union(const List< Variable > &, const List< Variable > &)
template List< Variable > Difference(const List< Variable > &, const List< Variable > &)
STATIC_VAR int * multiplicity
void mult(unsigned long *result, unsigned long *a, unsigned long *b, unsigned long p, int dega, int degb)
int lcm(unsigned long *l, unsigned long *a, unsigned long *b, unsigned long p, int dega, int degb)
gmp_float exp(const gmp_float &a)
int status int void size_t count