1 #ifndef _ZERODIMENSIONALREGULARCHAIN_H_ 2 #define _ZERODIMENSIONALREGULARCHAIN_H_ 5 #include "../polynomial.h" 6 #include "../Ring/BPASField.hpp" 7 #include "regularchain.hpp" 8 #include "chainstructures.hpp" 9 #include "../TriangularSet/triangularset.hpp" 10 #include "../SubResultantChain/subresultantchain.hpp" 12 extern long long unsigned int rcProfilingStart;
13 extern float primitivePartTime;
14 extern float squareFreePartTime;
15 extern float subresultantChainTime;
16 extern float zerodimensionalregularchainTime;
17 extern float pseudoDivideTime;
18 extern float normalFormTime;
24 template <
class Field,
class RecursivePoly>
77 void constructChain(
const RecursivePoly& p,
int options=ASSUME_REGULAR);
91 std::vector<ZeroDimensionalRegularChain<Field,RecursivePoly>> constructChains(
const RecursivePoly& p,
int options=ASSUME_REGULAR)
const;
109 std::vector<PolyChainPair<RecursivePoly,ZeroDimensionalRegularChain<Field,RecursivePoly>>> lastNonZeroSubResultant(
const RecursivePoly& f,
const RecursivePoly& g,
const Symbol& v,
bool isGCD)
const;
121 std::vector<PolyChainPair<RecursivePoly,ZeroDimensionalRegularChain<Field,RecursivePoly>>> lastNonZeroSubResultant_inner(
const RecursivePoly& f,
const RecursivePoly& g,
const Symbol& v,
const SubResultantChain<RecursivePoly,RecursivePoly>& src,
bool isGCD)
const;
439 std::vector<ZeroDimensionalRegularChain<Field,RecursivePoly>>
intersect(
const RecursivePoly& p)
const;
448 std::vector<PolyChainPair<RecursivePoly,ZeroDimensionalRegularChain<Field,RecursivePoly>>>
regularize(
const RecursivePoly& p)
const;
457 std::vector<PolyChainPair<RecursivePoly,ZeroDimensionalRegularChain<Field,RecursivePoly>>>
regularizeInitial(
const RecursivePoly& p)
const;
466 std::vector<BoolChainPair<ZeroDimensionalRegularChain<Field,RecursivePoly>>>
isInvertible(
const RecursivePoly& p)
const;
476 std::vector<PolyChainPair<RecursivePoly,ZeroDimensionalRegularChain<Field,RecursivePoly>>>
regularGCD(
const RecursivePoly& p,
const RecursivePoly& q,
const Symbol& v);
ZeroDimensionalRegularChain< Field, RecursivePoly > & operator+=(const RecursivePoly &p)
Add assignment operator +=: Adds a polynomial p to a zero-dimensional regular chain, assuming that the main variable of p is neither algebraic nor transcendental, p contains no other non-transcendental variables, and that init(p) is regular modulo the saturated ideal of the current object.
bool isEmpty() const
Copy an object derived from abstract BPASTriangularSet class to type of current object.
std::vector< RecursivePoly > polynomials() const
Get the vector of polynoials in the triangular set.
Definition: triangularset.hpp:369
bool operator!=(ZeroDimensionalRegularChain< Field, RecursivePoly > &a)
Negated identity operator !=.
std::vector< Symbol > mainVariables() const
Get algebraic variables in the current object.
Definition: zerodimensionalregularchain.hpp:358
An abstract class defining the interface of a zero-dimensional regular chain.
Definition: polynomial.h:233
void lower(const Symbol &s, BPASTriangularSet< Field, RecursivePoly > &ts) const
Returns the zero-dimensional regular chain consisting of polynomials with main variable strictly less...
bool isEmpty() const
Find out if the current object is the empty chain.
Definition: zerodimensionalregularchain.hpp:385
std::vector< Symbol > transcendentalVariables() const
Get transcendental variables in the current object.
Definition: zerodimensionalregularchain.hpp:367
ZeroDimensionalRegularChain< Field, RecursivePoly > & operator=(const ZeroDimensionalRegularChain< Field, RecursivePoly > &a)
Assignment operator =.
A class for handling regular chains in dimension zero.
Definition: regularchain.hpp:10
int numberOfTranscendentalVariables() const
Get the number of transcendental variables.
Definition: triangularset.hpp:302
std::vector< Symbol > variables() const
Get the (potentially algebraic) variable names for the current object in decreasing order...
Definition: zerodimensionalregularchain.hpp:349
int numberOfTranscendentalVariables() const
Get the number of transcendental variables in the current object.
Definition: zerodimensionalregularchain.hpp:338
RecursivePoly select(const Symbol &s) const
Select the polynomial in the current object with main variable s, if it exists.
Definition: regularchain.hpp:585
bool operator==(ZeroDimensionalRegularChain< Field, RecursivePoly > &a)
Identity operator ==.
int numberOfVariables() const
Get the number of (potentially algebraic) variables.
Definition: zerodimensionalregularchain.hpp:320
bool isAlgebraic(const Symbol &s) const
Determine if the input variable s is algebraic, i.e., if the triangular set contains a polynomial wit...
Definition: triangularset.hpp:347
bool isAlgebraic(const Symbol &s) const
Find out if the input symbol is an algebraic variable of the current object.
Definition: zerodimensionalregularchain.hpp:376
std::vector< PolyChainPair< RecursivePoly, ZeroDimensionalRegularChain< Field, RecursivePoly > > > regularize(const RecursivePoly &p) const
Compute a decomposition of the current object such that on each component the input polynomial is eit...
std::vector< RecursivePoly > polynomials() const
Get the list of polynomials in the current object.
Definition: zerodimensionalregularchain.hpp:394
void upper(const Symbol &s, BPASTriangularSet< Field, RecursivePoly > &ts) const
Returns the regular chain consisting of polynomials with main variable strictly greater than s...
std::vector< ZeroDimensionalRegularChain< Field, RecursivePoly > > intersect(const RecursivePoly &p) const
Compute the common solutions of the input polynomial and the current regular chain.
std::vector< Symbol > variables() const
Get the (potentially algebriac) variable names in decreasing order.
Definition: regularchain.hpp:576
std::vector< BoolChainPair< ZeroDimensionalRegularChain< Field, RecursivePoly > > > isInvertible(const RecursivePoly &p) const
Determine whether a recursively viewed polynomial is invertible with respect to the current regular c...
int numberOfAlgebraicVariables() const
Get the number of algebraic variables in the current object.
Definition: zerodimensionalregularchain.hpp:329
std::vector< PolyChainPair< RecursivePoly, ZeroDimensionalRegularChain< Field, RecursivePoly > > > regularGCD(const RecursivePoly &p, const RecursivePoly &q, const Symbol &v)
Compute the gcd of two input polynomials p and q modulo the saturated ideal of the current object...
int options() const
Get the encoded options of the regular chain, a bitwise or of RegularChainOption values.
int numberOfAlgebraicVariables() const
Get the number of algebraic variables.
Definition: triangularset.hpp:293
ZeroDimensionalRegularChain< Field, RecursivePoly > operator+(const RecursivePoly &p) const
Add operator +: Adds a polynomial p to a zero-dimensional regular chain and returns a new zero-dimens...
A class for handling regular chains of arbitrary dimension.
Definition: regularchain.hpp:33
int numberOfVariables() const
Get the number of (potentially algebraic) variables in the current object.
Definition: regularchain.hpp:491
An encapsulation of a mathematical symbol.
Definition: Symbol.hpp:23
void randomZeroDimensionalRegularChain(int nVars, int nTrcVars, int nTerms, unsigned long int coefBound, int pSparsity, bool includeNeg)
Generate a random zero-dimensional regular chain based on the number of terms of the polynomials of t...
std::vector< PolyChainPair< RecursivePoly, ZeroDimensionalRegularChain< Field, RecursivePoly > > > regularizeInitial(const RecursivePoly &p) const
Compute a decomposition of the current object such that on each component the initial of the input po...
std::vector< Symbol > transcendentalVariables() const
Get the transcendentalVariables variables.
Definition: triangularset.hpp:329
RecursivePoly select(const Symbol &s) const
Select the polynomial in the current object with main variable s, if it exists.
Definition: zerodimensionalregularchain.hpp:403
std::vector< Symbol > mainVariables() const
Get the algebraic variables.
Definition: triangularset.hpp:320