Basic Polynomial Algebra Subprograms (BPAS)  v. 1.791
BPASRecursivePolynomial.hpp
1 
2 #ifndef _BPAS_RECURSIVE_POLY_H_
3 #define _BPAS_RECURSIVE_POLY_H_
4 
5 #include "BPASMultivarPolynomial.hpp"
6 
7 /**
8  * An abstract class defining the interface of a multivariate polynomial that can be viewed recursively.
9  * That is, it can be viewed as a univariate polynomial with multivariate polynomial coefficients.
10  */
11 template <class Ring, class Derived>
12 class BPASRecursivelyViewedPolynomial : public virtual BPASMultivariatePolynomial<Ring,Derived>
13 {
14  public:
15 
16  /**
17  * Get the initial, or leading coefficient, with respect to the main variable of
18  * this polynomial.
19  *
20  * @return the initial of this polynomial.
21  */
22  virtual Derived initial() const = 0;
23 
24  /**
25  * Get the main variable of this polynomial, that is, the one
26  * which is most significant under its variable ordering.
27  *
28  * @return the main variable of the polynomial.
29  */
30  virtual Symbol mainVariable() const = 0;
31 
32  /**
33  * Get the main degree of this polynomial, that is, the
34  * partial degree of the main variable.
35  *
36  * @return the main degree of the polynomial.
37  */
38  virtual int mainDegree() const = 0;
39 
40  /**
41  * Get the rank of this polynomial, that is, the
42  * main variable of this polynomial raised to the main degree.
43  * This this returns a monomial.
44  *
45  * @return the rank of this polynomial.
46  */
47  virtual Derived rank() const = 0;
48 
49  /**
50  * Get the tail of this polynomial, that is,
51  * this polynomial after removing its leading term.
52  * It is equivalent to the reductum of this polynomial, viewing
53  * it as a univariate polynomial in its main variable.
54  *
55  * @return the tail of this polynomial.
56  */
57  virtual Derived tail() const = 0;
58 
59  /**
60  * Get the head of this polynomial, that is,
61  * the leading term of this polynomial.
62  * It is equivalent to the initial of this polynomial
63  * multiplied by its rank.
64  *
65  * @return the head of this polynomial.
66  */
67  virtual Derived head() const = 0;
68 
69  /**
70  * Get the separant of this polynomial, that is,
71  * its derivative with respect to the main variable.
72  *
73  * @return the separant of this polynomial.
74  */
75  virtual Derived separant() const = 0;
76 
77  // virtual SparseUnivariatePolynomial<Derived> convertToSUP() const = 0;
78 
79 };
80 
81 #endif
virtual Derived head() const =0
Get the head of this polynomial, that is, the leading term of this polynomial.
virtual Derived separant() const =0
Get the separant of this polynomial, that is, its derivative with respect to the main variable...
virtual Derived tail() const =0
Get the tail of this polynomial, that is, this polynomial after removing its leading term...
An abstract class defining the interface of a multivariate polynomial over an arbitrary BPASRing...
Definition: BPASMultivarPolynomial.hpp:17
virtual Derived initial() const =0
Get the initial, or leading coefficient, with respect to the main variable of this polynomial...
virtual Derived rank() const =0
Get the rank of this polynomial, that is, the main variable of this polynomial raised to the main deg...
An encapsulation of a mathematical symbol.
Definition: Symbol.hpp:23
virtual int mainDegree() const =0
Get the main degree of this polynomial, that is, the partial degree of the main variable.
virtual Symbol mainVariable() const =0
Get the main variable of this polynomial, that is, the one which is most significant under its variab...
An abstract class defining the interface of a multivariate polynomial that can be viewed recursively...
Definition: BPASRecursivePolynomial.hpp:12