17#ifndef MSM_SLICE_GUARD
18#define MSM_SLICE_GUARD
void swap(MsmSlice &a, MsmSlice &b)
void nameFactoryRegister(NameFactory< AbstractProduct > &factory)
Registers the string returned by ConcreteProduct::getStaticName() to a function that default-construc...
Represents a monomial ideal with int exponents.
Invariant: either the slice is a trivial base case, or removeDoubleLcm returns false.
virtual bool getLowerBound(Term &bound, size_t var) const
Calculates a lower bound that depends on var.
virtual bool baseCase(bool simplified)
Returns true if this slice is a base case slice, and in that case produces output in a derivative-spe...
void setToProjOf(const MsmSlice &slice, const Projection &projection, TermConsumer *consumer)
virtual Slice & operator=(const Slice &slice)
Performs a deep copy of slice into this object.
virtual void outerSlice(const Term &pivot)
Sets this object to the outer slice according to pivot.
void oneMoreGeneratorBaseCase()
virtual bool simplifyStep()
Like simplify(), except that only one simplification step is performed.
void swap(MsmSlice &slice)
TermConsumer * getConsumer()
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.
This class is used to transfer terms one at a time from one part of the program to another,...
Term represents a product of variables which does not include a coefficient.