26 #include "factory/factoryconf.h" 38 # define OSTREAM std::ostream 39 # define ISTREAM std::istream 40 # elif defined(HAVE_IOSTREAM_H) 41 # include <iostream.h> 42 # define OSTREAM ostream 43 # define ISTREAM istream 80 #define LEVELBASE -1000000 81 #define LEVELTRANS -500000 82 #define LEVELQUOT 1000000 83 #define LEVELEXPR 1000001 85 #define UndefinedDomain 32000 86 #define GaloisFieldDomain 4 87 #define FiniteFieldDomain 3 88 #define RationalDomain 2 89 #define IntegerDomain 1 209 return ( ((
int)((intptr_t)ptr)) & 3 );
233 CF_INLINE CanonicalForm(
const CanonicalForm& );
239 CanonicalForm(
const char *,
const int base=10 );
245 CanonicalForm deepCopy()
const;
247 void mpzval(mpz_t val)
const;
257 bool inBaseDomain()
const;
258 bool inExtension()
const;
259 bool inCoeffDomain()
const;
260 bool inPolyDomain()
const;
261 bool inQuotDomain()
const;
263 bool isFFinGF()
const;
264 bool isUnivariate()
const;
265 bool isHomogeneous()
const;
269 CanonicalForm
mapinto ()
const;
271 CanonicalForm
lc ()
const;
272 CanonicalForm
Lc ()
const;
273 CanonicalForm
LC ()
const;
286 CanonicalForm
num ()
const;
287 CanonicalForm
den ()
const;
293 CanonicalForm&
operator += (
const CanonicalForm& );
294 CanonicalForm&
operator -= (
const CanonicalForm& );
295 CanonicalForm&
operator *= (
const CanonicalForm& );
296 CanonicalForm&
operator /= (
const CanonicalForm& );
297 CanonicalForm& operator %= (
const CanonicalForm& );
298 CanonicalForm&
div (
const CanonicalForm& );
299 CanonicalForm& tryDiv (
const CanonicalForm&,
const CanonicalForm&,
bool& );
300 CanonicalForm&
mod (
const CanonicalForm& );
303 CanonicalForm operator () (
const CanonicalForm &
f )
const;
304 CanonicalForm operator () (
const CanonicalForm & f,
const Variable & v )
const;
306 CanonicalForm operator [] (
int i )
const;
308 CanonicalForm
deriv()
const;
312 CanonicalForm
sqrt()
const;
316 friend bool operator == (
const CanonicalForm&,
const CanonicalForm& );
317 friend bool operator != (
const CanonicalForm&,
const CanonicalForm& );
318 friend bool operator > (
const CanonicalForm&,
const CanonicalForm& );
319 friend bool operator < (
const CanonicalForm&,
const CanonicalForm& );
324 friend void divrem (
const CanonicalForm&,
const CanonicalForm&, CanonicalForm&, CanonicalForm& );
325 friend bool divremt (
const CanonicalForm&,
const CanonicalForm&, CanonicalForm&, CanonicalForm& );
326 friend bool tryDivremt (
const CanonicalForm&,
const CanonicalForm&, CanonicalForm&, CanonicalForm&,
const CanonicalForm&,
bool& );
328 friend CanonicalForm
bgcd (
const CanonicalForm &,
const CanonicalForm & );
329 friend CanonicalForm
bextgcd (
const CanonicalForm &,
const CanonicalForm &, CanonicalForm &, CanonicalForm & );
333 void print(
OSTREAM&,
char * )
const;
340 CanonicalForm genZero()
const;
341 CanonicalForm genOne()
const;
661 virtual void nextpoint();
696 bool hasItems()
const;
701 void operator++ (
int ) {
next(); }
715 bool hasItems()
const;
720 void operator++ (
int ) {
next(); }
734 bool hasItems()
const;
739 void operator++ (
int ) {
next(); }
766 void operator++ (
int ) {
next(); }
799 bool ispoly, hasterms;
1034 void nextpoint(
int n);
1116 int igcd (
int a,
int b);
1202 if (
this != &value )
1230 bool removeContents=
true);
1245 bool removeContents=
true);
CFList get_Terms(const CanonicalForm &f)
int cf_getBigPrime(int i)
IntList neworderint(const CFList &PolyList)
CanonicalForm compress(const CanonicalForm &f, CFMap &m)
CanonicalForm compress ( const CanonicalForm & f, CFMap & m )
int cf_getNumSmallPrimes()
int gf_value(const CanonicalForm &f)
ListIterator< CFList > ListCFListIterator
const CanonicalForm int s
friend bool operator==(const Variable &lhs, const Variable &rhs)
generate random elements in GF
generate all elements in F_p(alpha) starting from 0
static poly normalize(poly next_p, ideal add_generators, syStrategy syzstr, int *g_l, int *p_l, int crit_comp)
MapPair(const MapPair &p)
ListIterator< MapPair > MPListIterator
CanonicalForm lc(const CanonicalForm &f)
friend Variable rootOf(const CanonicalForm &, char name)
returns a symbolic root of polynomial with name name.
CFList FS1
factors that were removed
CFFList facAlgFunc2(const CanonicalForm &f, const CFList &as)
factorize a polynomial f that is irreducible over the ground field modulo an extension given by an ir...
int is_imm(const InternalCF *const ptr)
void getTerms(const CanonicalForm &f, const CanonicalForm &t, CFList &result)
get_Terms: Split the polynomial in the containing terms.
CanonicalForm operator[](const Variable &v) const
void prune1(const Variable &alpha)
friend bool operator<(const Variable &lhs, const Variable &rhs)
CFMap(const CanonicalForm &s)
const char factoryConfiguration[]
gmp_float exp(const gmp_float &a)
Array< CanonicalForm > CFArray
ListIterator< int > IntListIterator
int degree(const CanonicalForm &f)
friend bool operator<=(const Variable &lhs, const Variable &rhs)
ListCFList irrCharSeries(const CFList &PS)
irreducible characteristic series
factory's class for variables
class to store factors that get removed during char set computation
virtual class for generators
CFMatrix * cf_LLL(CFMatrix &A)
performs LLL reduction.
CFFList facAlgFunc(const CanonicalForm &f, const CFList &as)
factorize a polynomial f modulo an extension given by an irreducible characteristic set as...
void setMipo(const Variable &alpha, const CanonicalForm &mipo)
friend OSTREAM & operator<<(OSTREAM &os, const Variable &v)
CFFList factorize(const CanonicalForm &f, bool issqrfree=false)
factorization over or
CanonicalForm lcm(const CanonicalForm &, const CanonicalForm &)
CanonicalForm lcm ( const CanonicalForm & f, const CanonicalForm & g )
static const int SW_USE_EZGCD_P
set to 1 to use EZGCD over F_q
friend bool operator!=(const Variable &lhs, const Variable &rhs)
int taildegree(const CanonicalForm &f)
void error(const char *fmt,...)
static const int SW_SYMMETRIC_FF
set to 1 for symmetric representation over F_q
CanonicalForm determinant(const CFMatrix &M, int n)
generate all elements in F_p starting from 0
ListIterator< CanonicalForm > CFListIterator
CanonicalForm maxNorm(const CanonicalForm &f)
CanonicalForm maxNorm ( const CanonicalForm & f )
List< CFAFactor > CFAFList
CFMatrix * cf_HNF(CFMatrix &A)
The input matrix A is square matrix of integers output: the Hermite Normal Form of A; that is...
static const int SW_USE_FF_MOD_GCD
set to 1 to use modular GCD over F_q
MapPair(const Variable &v, const CanonicalForm &s)
static const int SW_USE_CHINREM_GCD
set to 1 to use modular gcd over Z
void factoryError_intern(const char *s)
Variable get_max_degree_Variable(const CanonicalForm &f)
get_max_degree_Variable returns Variable with highest degree.
CanonicalForm sqrt(const CanonicalForm &a)
CanonicalForm gcd(const CanonicalForm &, const CanonicalForm &)
virtual CFRandom * clone() const
class to generate random evaluation points
CanonicalForm abs(const CanonicalForm &f)
inline CanonicalForm abs ( const CanonicalForm & f )
CFList newordercf(const CFList &PolyList)
int sign(const CanonicalForm &a)
int ilog2(const CanonicalForm &a)
CanonicalForm homogenize(const CanonicalForm &f, const Variable &x)
homogenize homogenizes f with Variable x
generate integers starting from 0
CanonicalForm make_cf(const mpz_ptr n)
CFList charSetN(const CFList &PS)
medial set
CFFList sqrFree(const CanonicalForm &f, bool sort=false)
squarefree factorization
CanonicalForm replacevar(const CanonicalForm &, const Variable &, const Variable &)
CanonicalForm replacevar ( const CanonicalForm & f, const Variable & x1, const Variable & x2 ) ...
campf< Precision > & operator/=(campf< Precision > &lhs, const campf< Precision > &rhs)
CanonicalForm LC(const CanonicalForm &f)
CanonicalForm vcontent(const CanonicalForm &f, const Variable &x)
CanonicalForm vcontent ( const CanonicalForm & f, const Variable & x )
CFList charSetViaCharSetN(const CFList &PS)
compute a characteristic set via medial set
Evaluation(int min0, int max0)
bool hasFirstAlgVar(const CanonicalForm &f, Variable &a)
check if poly f contains an algebraic variable a
bool tryFdivides(const CanonicalForm &f, const CanonicalForm &g, const CanonicalForm &M, bool &fail)
same as fdivides but handles zero divisors in Z_p[t]/(f)[x1,...,xn] for reducible f ...
CanonicalForm getMipo(const Variable &alpha, const Variable &x)
CF_NO_INLINE CanonicalForm operator%(const CanonicalForm &, const CanonicalForm &)
bool linearSystemSolve(CFMatrix &M)
CanonicalForm power(const CanonicalForm &f, int n)
exponentiation
virtual class for internal CanonicalForm's
CanonicalForm apply(const CanonicalForm &f, void(*mf)(CanonicalForm &, int &))
CanonicalForm apply ( const CanonicalForm & f, void (*mf)( CanonicalForm &, int & ) ) ...
void prune(Variable &alpha)
CanonicalForm tailcoeff(const CanonicalForm &f)
int * degrees(const CanonicalForm &f, int *degs=0)
int * degrees ( const CanonicalForm & f, int * degs )
CanonicalForm pp(const CanonicalForm &)
CanonicalForm pp ( const CanonicalForm & f )
static const int SW_RATIONAL
set to 1 for computations over Q
CanonicalForm gcd_poly(const CanonicalForm &f, const CanonicalForm &g)
CanonicalForm gcd_poly ( const CanonicalForm & f, const CanonicalForm & g )
bool isPurePoly(const CanonicalForm &f)
static Variable highest()
CanonicalForm resultant(const CanonicalForm &f, const CanonicalForm &g, const Variable &x)
CanonicalForm resultant ( const CanonicalForm & f, const CanonicalForm & g, const Variable & x ) ...
int getNumVars(const CanonicalForm &f)
int getNumVars ( const CanonicalForm & f )
CanonicalForm make_cf_from_gf(const int z)
const CanonicalForm CFMap CFMap & N
void chineseRemainder(const CanonicalForm &x1, const CanonicalForm &q1, const CanonicalForm &x2, const CanonicalForm &q2, CanonicalForm &xnew, CanonicalForm &qnew)
void chineseRemainder ( const CanonicalForm & x1, const CanonicalForm & q1, const CanonicalForm & x2...
AFactor< CanonicalForm > CFAFactor
static int max(int a, int b)
virtual CanonicalForm generate() const
ListIterator< CFFactor > CFFListIterator
CanonicalForm getVars(const CanonicalForm &f)
CanonicalForm getVars ( const CanonicalForm & f )
CFList reorder(const Varlist &betterorder, const CFList &PS)
CFList basicSet(const CFList &PS)
basic set in the sense of Wang a.k.a. minimal ascending set in the sense of Greuel/Pfister ...
CanonicalForm replaceLc(const CanonicalForm &f, const CanonicalForm &c)
void factoryseed(int s)
random seed initializer
void setReduce(const Variable &alpha, bool reduce)
virtual bool hasItems() const
CFList FS2
candidate factors that might get removed
int probIrredTest(const CanonicalForm &F, double error)
given some error probIrredTest detects irreducibility or reducibility of F with confidence level 1-er...
Matrix< CanonicalForm > CFMatrix
CFList charSetViaModCharSet(const CFList &PS, StoreFactors &StoredFactors, bool removeContents=true)
modified characteristic set, i.e. a characteristic set with certain factors removed ...
CanonicalForm mapdomain(const CanonicalForm &f, CanonicalForm(*mf)(const CanonicalForm &))
CanonicalForm mapdomain ( const CanonicalForm & f, CanonicalForm (*mf)( const CanonicalForm & ) ) ...
campf< Precision > & operator+=(campf< Precision > &lhs, const campf< Precision > &rhs)
CFAFList absFactorize(const CanonicalForm &G)
absolute factorization of a multivariate poly over Q
void psqr(const CanonicalForm &f, const CanonicalForm &g, CanonicalForm &q, CanonicalForm &r, const Variable &x)
void psqr ( const CanonicalForm & f, const CanonicalForm & g, CanonicalForm & q, CanonicalForm & r...
static const int SW_USE_EZGCD
set to 1 to use EZGCD over Z
generate random elements in F_p
Variable(const Variable &v)
CanonicalForm euclideanNorm(const CanonicalForm &f)
CanonicalForm euclideanNorm ( const CanonicalForm & f )
void setCharacteristic(int c)
int cf_getSmallPrime(int i)
campf< Precision > & operator-=(campf< Precision > &lhs, const campf< Precision > &rhs)
Evaluation(const Evaluation &e)
CanonicalForm resultantZ(const CanonicalForm &A, const CanonicalForm &B, const Variable &x, bool prob=true)
modular resultant algorihtm over Z
CanonicalForm getGFGenerator()
ListIterator< Variable > VarlistIterator
CanonicalForm leftShift(const CanonicalForm &F, int n)
left shift the main variable of F by n
List< CanonicalForm > CFList
EXTERN_VAR void(* factoryError)(const char *s)
CanonicalForm reduce(const CanonicalForm &f, const CanonicalForm &M)
polynomials in M.mvar() are considered coefficients M univariate monic polynomial the coefficients of...
CanonicalForm num(const CanonicalForm &f)
CanonicalForm head(const CanonicalForm &f)
class to iterate through CanonicalForm's
campf< Precision > & operator*=(campf< Precision > &lhs, const campf< Precision > &rhs)
void gmp_numerator(const CanonicalForm &f, mpz_ptr result)
CanonicalForm icontent(const CanonicalForm &f)
CanonicalForm icontent ( const CanonicalForm & f )
const Variable & v
< [in] a sqrfree bivariate poly
friend bool operator>(const Variable &lhs, const Variable &rhs)
static const int SW_USE_QGCD
set to 1 to use Encarnacion GCD over Q(a)
generate random elements in F_p(alpha)
class to evaluate a polynomial at points
CanonicalForm subst() const
Variable mvar(const CanonicalForm &f)
Variable & operator=(const Variable &v)
void chineseRemainderCached(CFArray &a, CFArray &n, CanonicalForm &xnew, CanonicalForm &prod, CFArray &inv)
CanonicalForm Prem(const CanonicalForm &F, const CanonicalForm &G)
pseudo remainder of F by G with certain factors of LC (g) cancelled
virtual CFGenerator * clone() const
CanonicalForm getpk() const
CF_INLINE CanonicalForm operator*(const CanonicalForm &, const CanonicalForm &)
CanonicalForm Farey(const CanonicalForm &f, const CanonicalForm &q)
Farey rational reconstruction.
int ipower(int b, int n)
int ipower ( int b, int m )
int totaldegree(const CanonicalForm &f)
int totaldegree ( const CanonicalForm & f )
generate all elements in GF starting from 0
CFArray subResChain(const CanonicalForm &f, const CanonicalForm &g, const Variable &x)
CFArray subResChain ( const CanonicalForm & f, const CanonicalForm & g, const Variable & x ) ...
CanonicalForm psq(const CanonicalForm &f, const CanonicalForm &g, const Variable &x)
CanonicalForm psq ( const CanonicalForm & f, const CanonicalForm & g, const Variable & x ) ...
CFMap(const Variable &v, const CanonicalForm &s)
bool isZero(const CFArray &A)
checks if entries of A are zero
CanonicalForm swapvar(const CanonicalForm &, const Variable &, const Variable &)
swapvar() - swap variables x1 and x2 in f.
friend void swap_levels()
CF_INLINE CanonicalForm operator+(const CanonicalForm &, const CanonicalForm &)
CF_INLINE CanonicalForm operator +, -, *, /, % ( const CanonicalForm & lhs, const CanonicalForm & rhs...
CanonicalForm bCommonDen(const CanonicalForm &f)
CanonicalForm bCommonDen ( const CanonicalForm & f )
friend bool operator>=(const Variable &lhs, const Variable &rhs)
bool hasMipo(const Variable &alpha)
bool isPurePoly_m(const CanonicalForm &f)
virtual class for random element generation
void sort(CFArray &A, int l=0)
quick sort A
CF_NO_INLINE CanonicalForm div(const CanonicalForm &, const CanonicalForm &)
CF_INLINE CanonicalForm div, mod ( const CanonicalForm & lhs, const CanonicalForm & rhs ) ...
EXTERN_VAR int singular_homog_flag
CanonicalForm extgcd(const CanonicalForm &f, const CanonicalForm &g, CanonicalForm &a, CanonicalForm &b)
CanonicalForm extgcd ( const CanonicalForm & f, const CanonicalForm & g, CanonicalForm & a...
int factoryrandom(int n)
random integers with abs less than n
CanonicalForm mapinto(const CanonicalForm &f)
bool fdivides(const CanonicalForm &f, const CanonicalForm &g)
bool fdivides ( const CanonicalForm & f, const CanonicalForm & g )
int size(const CanonicalForm &f, const Variable &v)
int size ( const CanonicalForm & f, const Variable & v )
CanonicalForm Lc(const CanonicalForm &f)
CF_NO_INLINE CanonicalForm operator/(const CanonicalForm &, const CanonicalForm &)
CFList charSet(const CFList &PS)
characteristic set
ListIterator< CFAFactor > CFAFListIterator
class to do operations mod p^k for int's p and k
int headdegree(const CanonicalForm &f)
Factor< CanonicalForm > CFFactor
CF_NO_INLINE CanonicalForm mod(const CanonicalForm &, const CanonicalForm &)
CF_NO_INLINE CanonicalForm operator-(const CanonicalForm &, const CanonicalForm &)
static const int SW_USE_NTL_SORT
set to 1 to sort factors in a factorization
List< CFList > ListCFList
ListCFList charSeries(const CFList &L)
characteristic series
Varlist neworder(const CFList &PolyList)
virtual CanonicalForm item() const
CanonicalForm blcm(const CanonicalForm &f, const CanonicalForm &g)
CFList modCharSet(const CFList &PS, StoreFactors &StoredFactors, bool removeContents=true)
modified medial set
CanonicalForm den(const CanonicalForm &f)
CanonicalForm deriv(const CanonicalForm &f, const Variable &x)
void gmp_denominator(const CanonicalForm &f, mpz_ptr result)
REvaluation(int min0, int max0, const CFRandom &sample)
CanonicalForm content(const CanonicalForm &)
CanonicalForm content ( const CanonicalForm & f )
CanonicalForm psr(const CanonicalForm &f, const CanonicalForm &g, const Variable &x)
CanonicalForm psr ( const CanonicalForm & f, const CanonicalForm & g, const Variable & x ) ...