Frobby  0.9.5
Public Member Functions | Private Member Functions | Private Attributes | List of all members
MsmSlice Class Reference

Invariant: either the slice is a trivial base case, or removeDoubleLcm returns false. More...

#include <MsmSlice.h>

Inheritance diagram for MsmSlice:
Slice Task

Public Member Functions

 MsmSlice (MsmStrategy &strategy)
 
 MsmSlice (MsmStrategy &strategy, const Ideal &ideal, const Ideal &subtract, const Term &multiply, TermConsumer *consumer)
 
TermConsumergetConsumer ()
 
virtual bool baseCase (bool simplified)
 Returns true if this slice is a base case slice, and in that case produces output in a derivative-specific way. More...
 
virtual Sliceoperator= (const Slice &slice)
 Performs a deep copy of slice into this object. More...
 
virtual bool simplifyStep ()
 Like simplify(), except that only one simplification step is performed. More...
 
void setToProjOf (const MsmSlice &slice, const Projection &projection, TermConsumer *consumer)
 
void swap (MsmSlice &slice)
 
virtual bool innerSlice (const Term &pivot)
 Sets this object to the inner slice according to pivot. More...
 
virtual void outerSlice (const Term &pivot)
 Sets this object to the outer slice according to pivot. More...
 
- Public Member Functions inherited from Slice
 Slice (SliceStrategy &strategy)
 Construct the slice $(\ideal 0, \ideal 0, 1)$ in a ring of zero variables. More...
 
 Slice (SliceStrategy &strategy, const Ideal &ideal, const Ideal &subtract, const Term &multiply)
 Construct the slice $(\codeVar{ideal}, \codeVar{subtract}, \codeVar{multiply})$. More...
 
virtual ~Slice ()
 
size_t getVarCount () const
 Returns the number of variables in the ambient ring. More...
 
const IdealgetIdeal () const
 Returns $I$ for a slice $(I,S,q)$. More...
 
IdealgetSubtract ()
 Returns $S$ for a slice $(I,S,q)$. More...
 
const IdealgetSubtract () const
 Returns $S$ for a slice $(I,S,q)$. More...
 
TermgetMultiply ()
 Returns $q$ for a slice $(I,S,q)$. More...
 
const TermgetMultiply () const
 Returns $q$ for a slice $(I,S,q)$. More...
 
const TermgetLcm () const
 Returns the least common multiple of the generators of getIdeal(). More...
 
void print (FILE *file) const
 Write a text representation of this object to file in a format appropriate for debugging. More...
 
void resetAndSetVarCount (size_t varCount)
 Resets this slice to $(\ideal 0, \ideal 0, 1)$ in an ambient polynomial ring of varCount variables. More...
 
void clearIdealAndSubtract ()
 Clears getIdeal() and getSubtract() and does not change getMultiply(). More...
 
void singleDegreeSortIdeal (size_t var)
 Calls Ideal::singleDegreeSort on getIdeal(). More...
 
bool normalize ()
 Removes those generators of getIdeal() that are strictly divisible by some generator of getSubtract(). More...
 
bool adjustMultiply ()
 Ensure that for each var, var appears to the first power in some generator of getIdeal(). More...
 
virtual bool simplify ()
 Simplifies this object such that it may become simpler without changing the content. More...
 
virtual void run (TaskEngine &tasks)
 Does whatever work this task represents. More...
 
virtual void dispose ()
 Called when the task is no longer used but run has not and will not be called. More...
 
- Public Member Functions inherited from Task
virtual ~Task ()
 

Private Member Functions

bool removeDoubleLcm ()
 
virtual bool getLowerBound (Term &bound, size_t var) const
 Calculates a lower bound that depends on var. More...
 
void twoVarBaseCase ()
 
void oneMoreGeneratorBaseCase ()
 
bool twoNonMaxBaseCase ()
 

Private Attributes

TermConsumer_consumer
 

Additional Inherited Members

- Protected Member Functions inherited from Slice
void setToProjOf (const Slice &slice, const Projection &projection)
 Set this object to be the projection of slice according to projection. More...
 
void swap (Slice &slice)
 Simultaneously set the value of this object to that of slice and vice versa. More...
 
bool pruneSubtract ()
 Removes those generators of subtract that do not strictly divide the lcm of getIdeal(), or that belong to getIdeal(). More...
 
bool applyLowerBound ()
 Calculates a lower bound on the content of the slice using getLowerBound() and calls innerSlice with that lower bound. More...
 
- Protected Attributes inherited from Slice
Ideal _ideal
 The $I$ of a slice $(I,S,q)$. More...
 
Ideal _subtract
 The $S$ of a slice $(I,S,q)$. More...
 
Term _multiply
 The $q$ of a slice $(I,S,q)$. More...
 
size_t _varCount
 The number of variables in the ambient polynomial ring. More...
 
Term _lcm
 The lcm of getIdeal() if _lcmUpdated is true, and otherwise the value is undefind. More...
 
bool _lcmUpdated
 Indicates whether _lcm is correct. More...
 
size_t _lowerBoundHint
 A hint that starting simplification through a lower bound at the variable indicated by _lowerBoundHint is likely to yield a simplification, or at least more likely than a random other variable. More...
 
SliceStrategy_strategy
 

Detailed Description

Invariant: either the slice is a trivial base case, or removeDoubleLcm returns false.

Todo:
expand and check comments.

Definition at line 33 of file MsmSlice.h.

Constructor & Destructor Documentation

◆ MsmSlice() [1/2]

MsmSlice::MsmSlice ( MsmStrategy strategy)

Definition at line 23 of file MsmSlice.cpp.

◆ MsmSlice() [2/2]

MsmSlice::MsmSlice ( MsmStrategy strategy,
const Ideal ideal,
const Ideal subtract,
const Term multiply,
TermConsumer consumer 
)

Definition at line 28 of file MsmSlice.cpp.

Member Function Documentation

◆ baseCase()

bool MsmSlice::baseCase ( bool  simplified)
virtual

Returns true if this slice is a base case slice, and in that case produces output in a derivative-specific way.

If simplified is true, then the slice must be fully simplified when calling baseCase(), while otherwise there is no such requirement.

Implements Slice.

Definition at line 40 of file MsmSlice.cpp.

◆ getConsumer()

TermConsumer* MsmSlice::getConsumer ( )
inline

Definition at line 42 of file MsmSlice.h.

◆ getLowerBound()

bool MsmSlice::getLowerBound ( Term bound,
size_t  var 
) const
privatevirtual

Calculates a lower bound that depends on var.

To be precise, the lower bound that is calculated is

\[ \frac{1}{x_i}\gcd(\min(I)\cap\ideal{x_i}) \]

where $i$ is var. Note that the real functionality is slightly more sophisticated. Returns false and does not set bound if a base case is detected (a base case is not guaranteed to be detected).

Todo:

rename lower bound to divisor.

describe how the real functionality is slightly more sophisticated.

Implements Slice.

Definition at line 213 of file MsmSlice.cpp.

◆ innerSlice()

bool MsmSlice::innerSlice ( const Term pivot)
virtual

Sets this object to the inner slice according to pivot.

To be precise, the slice $(I,S,q)$ is replaced by $(I:p,S:p,qp)$ where $p$ is the pivot, and the slice is then normalized (see normalize).

Returns true if any of the colon operations $I:p$ and $S:p$ were non-trivial in the sense that it changed the support of any minimal generator.

Reimplemented from Slice.

Definition at line 143 of file MsmSlice.cpp.

◆ oneMoreGeneratorBaseCase()

void MsmSlice::oneMoreGeneratorBaseCase ( )
private

Definition at line 280 of file MsmSlice.cpp.

◆ operator=()

Slice & MsmSlice::operator= ( const Slice slice)
virtual

Performs a deep copy of slice into this object.

Implements Slice.

Definition at line 114 of file MsmSlice.cpp.

◆ outerSlice()

void MsmSlice::outerSlice ( const Term pivot)
virtual

Sets this object to the outer slice according to pivot.

To be precise, the slice $(I,S,q)$ is replaced by $(I,S+\ideal p,q)$ where $p$ is the pivot, and the slice is then normalized (see normalize).

Note that if pivot is a pure power, then pivot is not actually inserted into $S$ since doing so has no effect on the content after the normalization.

Reimplemented from Slice.

Definition at line 155 of file MsmSlice.cpp.

◆ removeDoubleLcm()

bool MsmSlice::removeDoubleLcm ( )
private

Definition at line 195 of file MsmSlice.cpp.

◆ setToProjOf()

void MsmSlice::setToProjOf ( const MsmSlice slice,
const Projection projection,
TermConsumer consumer 
)

Definition at line 134 of file MsmSlice.cpp.

◆ simplifyStep()

bool MsmSlice::simplifyStep ( )
virtual

Like simplify(), except that only one simplification step is performed.

If the return value is true, then the Slice may not be fully simplified yet. Iterating simplifyStep() has the same result as calling simplify(), though the performance characteristics can be worse.

Todo:
Is this method actually used, and does it return true iff this object changed?

Implements Slice.

Definition at line 122 of file MsmSlice.cpp.

◆ swap()

void MsmSlice::swap ( MsmSlice slice)

Definition at line 165 of file MsmSlice.cpp.

◆ twoNonMaxBaseCase()

bool MsmSlice::twoNonMaxBaseCase ( )
private

Definition at line 343 of file MsmSlice.cpp.

◆ twoVarBaseCase()

void MsmSlice::twoVarBaseCase ( )
private

Definition at line 244 of file MsmSlice.cpp.

Member Data Documentation

◆ _consumer

TermConsumer* MsmSlice::_consumer
private

Definition at line 98 of file MsmSlice.h.


The documentation for this class was generated from the following files: