128 void print(FILE* file)
const;
140 virtual bool baseCase(
bool simplified) = 0;
void clearIdealAndSubtract()
Clears getIdeal() and getSubtract() and does not change getMultiply().
const Ideal & getSubtract() const
Returns for a slice .
bool normalize()
Removes those generators of getIdeal() that are strictly divisible by some generator of getSubtract()...
virtual bool baseCase(bool simplified)=0
Returns true if this slice is a base case slice, and in that case produces output in a derivative-spe...
virtual bool simplify()
Simplifies this object such that it may become simpler without changing the content.
virtual Slice & operator=(const Slice &slice)=0
Performs a deep copy of slice into this object.
bool pruneSubtract()
Removes those generators of subtract that do not strictly divide the lcm of getIdeal(), or that belong to getIdeal().
size_t getVarCount() const
Returns the number of variables in the ambient ring.
virtual bool getLowerBound(Term &bound, size_t var) const =0
Calculates a lower bound that depends on var.
void resetAndSetVarCount(size_t varCount)
Resets this slice to in an ambient polynomial ring of varCount variables.
const Term & getLcm() const
Returns the least common multiple of the generators of getIdeal().
virtual void outerSlice(const Term &pivot)
Sets this object to the outer slice according to pivot.
virtual bool innerSlice(const Term &pivot)
Sets this object to the inner slice according to pivot.
This class represents a slice, which is the central data structure of the Slice Algorithm.
Term _lcm
The lcm of getIdeal() if _lcmUpdated is true, and otherwise the value is undefind.
const Term & getMultiply() const
Returns for a slice .
Term _multiply
The of a slice .
Represents a monomial ideal with int exponents.
bool applyLowerBound()
Calculates a lower bound on the content of the slice using getLowerBound() and calls innerSlice with ...
virtual void run(TaskEngine &tasks)
Does whatever work this task represents.
size_t _lowerBoundHint
A hint that starting simplification through a lower bound at the variable indicated by _lowerBoundHin...
virtual void dispose()
Called when the task is no longer used but run has not and will not be called.
Term & getMultiply()
Returns for a slice .
Ideal _ideal
The of a slice .
size_t _varCount
The number of variables in the ambient polynomial ring.
void swap(Slice &slice)
Simultaneously set the value of this object to that of slice and vice versa.
TaskEngine handles a list of tasks that are to be carried out.
void setToProjOf(const Slice &slice, const Projection &projection)
Set this object to be the projection of slice according to projection.
const Ideal & getIdeal() const
Returns for a slice .
This class describes the interface of a strategy object for the Slice Algorithm.
SliceStrategy & _strategy
void singleDegreeSortIdeal(size_t var)
Calls Ideal::singleDegreeSort on getIdeal().
Ideal & getSubtract()
Returns for a slice .
bool _lcmUpdated
Indicates whether _lcm is correct.
bool adjustMultiply()
Ensure that for each var, var appears to the first power in some generator of getIdeal().
Ideal _subtract
The of a slice .
A Task object represents a unit of work that is performed when the method run() is called...
Term represents a product of variables which does not include a coefficient.
void print(FILE *file) const
Write a text representation of this object to file in a format appropriate for debugging.
virtual bool simplifyStep()=0
Like simplify(), except that only one simplification step is performed.
Slice(SliceStrategy &strategy)
Construct the slice in a ring of zero variables.