41poly
leadmonom(
const poly
p,
const ring r,
const bool bSetZeroComp =
true);
59 typedef std::stack <sBucket_pt>
Base;
220 bool DivisibilityCheck(
const poly multiplier,
const poly t,
const unsigned long not_sev,
const ring r)
const;
227 inline unsigned long sev()
const {
return m_sev; };
314typedef std::map<TCacheKey, TCacheValue, CCacheCompare>
TP2PCache;
361 if (syzLeads !=
NULL)
415 poly
ReduceTerm(poly multiplier, poly term4reduction, poly syztermCheck)
const;
520static inline poly
ReduceTerm(poly multiplier, poly term4reduction, poly syztermCheck,
524 return syz.
ReduceTerm(multiplier, term4reduction, syztermCheck);
const unsigned int m_N
number of ring variables
bool Check(const poly m) const
CLCM(const ideal &L, const SchreyerSyzygyComputationFlags &flags)
bool DivisibilityCheck(const poly multiplier, const poly t, const unsigned long not_sev, const ring r) const
CLeadingTerm(const CLeadingTerm &)
bool CheckLT(const ideal &L) const
const poly m_lt
the leading term itself L[label-1]
const unsigned long m_sev
not short exp. vector
unsigned int label() const
const unsigned int m_label
index in the main L[] + 1
bool DivisibilityCheck(const poly product, const unsigned long not_sev, const ring r) const
void operator=(const CLeadingTerm &)
unsigned long sev() const
CLeadingTerm(unsigned int label, const poly lt, const ring)
poly FindReducer(const poly product, const poly syzterm, const CReducerFinder &checker) const
CReducerFinder(const CReducerFinder &)
CReducerFinder(const ideal L, const SchreyerSyzygyComputationFlags &flags)
goes over all leading terms
poly FindReducer(const poly multiplier, const poly monom, const poly syzterm, const CReducerFinder &checker) const
std::map< TComponentKey, TReducers > CReducersHash
friend class CDivisorEnumerator
friend class CDivisorEnumerator2
std::vector< const CLeadingTerm * > TReducers
void Initialize(const ideal L)
int PreProcessTerm(const poly t, CReducerFinder &syzChecker) const
is the term to be "preprocessed" as lower order term or lead to only reducible syzygies....
void operator=(const CReducerFinder &)
bool IsDivisible(const poly q) const
SBucketFactory(const ring r)
void operator=(const SBucketFactory &)
static Bucket _CreateBucket(const ring r)
inital allocation for new buckets
static void _DestroyBucket(Bucket &bt)
we only expect empty buckets to be left at the end for destructor bt will be set to NULL
std::stack< sBucket_pt > Base
SBucketFactory(const SBucketFactory &)
void putBucket(const Bucket &bt, const bool replace=false)
Bucket getBucket(const ring r, const bool remove=true)
Computing syzygies after Schreyer.
const CLCM m_lcm
Bitmask for variables occuring in leading terms.
poly ComputeImage(poly multiplier, const int tail) const
low level computation...
const ideal m_idLeads
input leading terms
kBucket_pt m_spoly_bucket
for S-Polynomial reductions
void ReadOffResult(ideal &syzL, ideal &syzT)
Read off the results while detaching them from this object NOTE: no copy!
poly _FindReducer(const poly product, const poly syzterm) const
just for testing via the wrapper below
poly TraverseTail(poly multiplier, poly tail) const
called only from above and from outside (for testing)
void SetUpTailTerms()
Convert the given ideal of tails into the internal representation (with reducers!) Preprocess m_idTai...
ideal Compute1LeadingSyzygyTerms()
just leading terms
poly TraverseNF(const poly syz_lead, const poly syz_2=NULL) const
unsigned long m_stat[9]
Statistics: 0..3: as in SetUpTailTerms()::PreProcessTerm() // TODO!!?? 4: number of terms discarded d...
ideal m_syzTails
output (syzygy) tails
void ComputeSyzygy()
The main driver function: computes.
void PrintStats() const
print statistics about the used heuristics
SchreyerSyzygyComputation(const ideal idLeads, const ideal idTails, const ideal syzLeads, const SchreyerSyzygyComputationFlags setting)
Construct a global object for given input data (separated into leads & tails)
poly TraverseTail(poly multiplier, const int tail) const
High level caching function!!!
const ideal m_idTails
input tails
ideal Compute2LeadingSyzygyTerms()
leading + second terms
void ComputeLeadingSyzygyTerms(bool bComputeSecondTerms=true)
Computes Syz(leads) or only LEAD of it. The result is stored into m_syzLeads.
poly SchreyerSyzygyNF(const poly syz_lead, poly syz_2=NULL) const
Main HybridNF == 1: poly reduce + LOT + LCM?
const CReducerFinder m_div
Divisor finder.
~SchreyerSyzygyComputation()
Destructor should not destruct the resulting m_syzLeads, m_syzTails.
SchreyerSyzygyComputation(const ideal idLeads, const ideal idTails, const SchreyerSyzygyComputationFlags setting)
Construct a global object for given input data (separated into leads & tails)
ideal m_syzLeads
output (syzygy) leading terms (+2nd terms?)
SBucketFactory m_sum_bucket_factory
used for simple summing up
poly ReduceTerm(poly multiplier, poly term4reduction, poly syztermCheck) const
TODO: save shortcut (syz: |-.->) LM(m) * "t" -> ? ???
ideal m_LS
leading syzygy terms used for reducing syzygy tails
CReducerFinder m_checker
for checking tail-terms and makeing them irreducible (wrt m_LS!)
ideal id_Copy(ideal h1, const ring r)
copy an ideal
int status int void size_t count int const void size_t count const char int flags
bool operator()(const TCacheKey &l, const TCacheKey &r) const
CCacheCompare(const CCacheCompare &lhs)
CCacheCompare & operator=(const CCacheCompare &lhs)
CCacheCompare(const ring &r)
Computation attribute storage.
SchreyerSyzygyComputationFlags(const SchreyerSyzygyComputationFlags &attr)
SchreyerSyzygyComputationFlags(idhdl rootRingHdl)
const int OPT__HYBRIDNF
Use the usual NF's S-poly reduction while dropping lower order terms 2 means - smart selection!
const ring m_rBaseRing
global base ring
const int OPT__TREEOUTPUT
output lifting tree
const int OPT__SYZCHECK
CheckSyzygyProperty: TODO.
void nextSyzygyLayer() const
const int OPT__NOCACHING
no caching/stores/lookups
int OPT__SYZNUMBER
Syzygy level (within a resolution)
const bool OPT__PROT
TEST_OPT_PROT.
const int OPT__DEBUG
output all the intermediate states
const int OPT__TAILREDSYZ
Reduce syzygy tails wrt the leading syzygy terms.
const int OPT__IGNORETAILS
ignore tails and compute the pure Schreyer frame