Macaulay2 Engine
Loading...
Searching...
No Matches
qring.hpp
Go to the documentation of this file.
1// Copyright 2005, Michael E. Stillman
2
3#ifndef _qring_hpp_
4#define _qring_hpp_
5
46
47#include "style.hpp"
48#include "ringelem.hpp"
49#include <vector>
50
51class PolyRing;
52class FreeModule;
53class MonomialIdeal;
54class MonomialTable;
55class MonomialTableZZ;
56class gbvector;
57class GBRing;
58
78{
79 VECTOR(Nterm *) quotient_ideal;
80 VECTOR(gbvector *) quotient_gbvectors;
81
82 protected:
83 const PolyRing *R;
84 bool overZZ_; // really: base is basic, ZZ, or frac ring
85
86 size_t exp_size; // byte size of temp exponents_t
87 size_t monom_size; // and monomials, to be allocated on stack
88
90 QRingInfo(const PolyRing *R);
91
92 public:
93 QRingInfo() : R(nullptr), overZZ_(false), exp_size(0), monom_size(0) {}
94 virtual void destroy(GBRing *GR);
95 virtual ~QRingInfo();
96
97 int n_quotients() const { return INTSIZE(quotient_ideal); }
98 Nterm *quotient_element(int i) const { return quotient_ideal[i]; }
99 const gbvector *quotient_gbvector(int i) const
100 {
101 return quotient_gbvectors[i];
102 }
103
104 virtual void normal_form(ring_elem &f) const
105 {
106 (void) f;
107 }
108 virtual void gbvector_normal_form(const FreeModule *F, gbvector *&f) const
109 {
110 (void) F;
111 (void) f;
112 }
113 virtual void gbvector_normal_form(const FreeModule *F,
114 gbvector *&f,
115 bool use_denom,
116 ring_elem &denom) const
117 {
118 (void) use_denom;
119 (void) denom;
121 }
122
123 virtual const MonomialIdeal *get_quotient_monomials() const { return nullptr; }
124 // Each bag value is an "Nterm *".
125
126 virtual MonomialTable *get_quotient_MonomialTable() const { return nullptr; }
127 // Each id is an index into quotient_ideal_
128
130 {
131 return nullptr;
132 }
133 // Each id is an index into quotient_ideal_
134};
135
151{
152 protected:
155
156 public:
157 QRingInfo_field(const PolyRing *ambientR, const VECTOR(Nterm *) & quotients);
158 void destroy(GBRing *GR);
160
161 virtual const MonomialIdeal *get_quotient_monomials() const { return Rideal; }
162 // Each bag value is an "Nterm *".
163
165 {
166 return ringtable;
167 }
168 // Each id is an index into quotient_ideal_
169};
170
184{
185 void reduce_lead_term_basic_field(Nterm *&f, const Nterm *g) const;
186
187 public:
188 QRingInfo_field_basic(const PolyRing *ambientR,
189 const VECTOR(Nterm *) & quotients);
191
192 void normal_form(ring_elem &f) const;
193
194 void gbvector_normal_form(const FreeModule *F, gbvector *&f) const;
195};
196
211{
212 void reduce_lead_term_QQ(Nterm *&f, const Nterm *g) const;
213
214 public:
215 QRingInfo_field_QQ(const PolyRing *ambientR,
216 const VECTOR(Nterm *) & quotients);
218
219 void normal_form(ring_elem &f) const;
220
221 void gbvector_normal_form(const FreeModule *F, gbvector *&f) const;
222
223 void gbvector_normal_form(const FreeModule *F,
224 gbvector *&f,
225 bool use_denom,
226 ring_elem &denom) const;
227};
228
244{
246 bool is_ZZ_quotient_; // true if this is a quotient of a polynomial ring over
247 // ZZ, AND
248 // there is an integer in the factored ideal.
249 ring_elem ZZ_quotient_value_; // This is the integer in the factor ideal, if
250 // is_ZZ_quotient is set.
251
252 bool reduce_lead_term_ZZ(Nterm *&f, const Nterm *g) const;
253
254 public:
255 QRingInfo_ZZ(const PolyRing *ambientR, const VECTOR(Nterm *) & quotients);
256 void destroy(GBRing *GR);
258
259 bool is_ZZ_quotient() const { return is_ZZ_quotient_; }
261 void normal_form(ring_elem &f) const;
262
263 void gbvector_normal_form(const FreeModule *F, gbvector *&f) const;
264
266 {
267 return ringtableZZ;
268 }
269 // Each id is an index into quotient_ideal_
270};
271
272#endif
273
274// Local Variables:
275// compile-command: "make -C $M2BUILDDIR/Macaulay2/e "
276// indent-tabs-mode: nil
277// End:
Engine-side free module R^n over a Ring.
Definition freemod.hpp:66
Polynomial-ring view tuned for the inner loop of classical Buchberger Groebner-basis computations.
Definition gbring.hpp:120
Engine-side monomial ideal: a decision tree of Nmi_nodes storing the (typically minimal) generators b...
Definition monideal.hpp:136
Indexed table of monomials with fast "find a divisor" lookup, keyed by a free integer val per entry.
Definition montable.hpp:81
MonomialTable analogue for monomials carrying a ZZ coefficient.
Concrete PolyRingFlat subclass implementing ordinary commutative polynomial rings K[x_1,...
Definition poly.hpp:64
void normal_form(ring_elem &f) const
Definition qring.cpp:384
void gbvector_normal_form(const FreeModule *F, gbvector *&f) const
Definition qring.cpp:414
virtual const MonomialTableZZ * get_quotient_MonomialTableZZ() const
Definition qring.hpp:265
bool is_ZZ_quotient() const
Definition qring.hpp:259
bool reduce_lead_term_ZZ(Nterm *&f, const Nterm *g) const
Definition qring.cpp:350
ring_elem ZZ_quotient_value_
Definition qring.hpp:249
bool is_ZZ_quotient_
Definition qring.hpp:246
ring_elem ZZ_quotient_value() const
Definition qring.hpp:260
QRingInfo_ZZ(const PolyRing *ambientR, const VECTOR(Nterm *) &quotients)
Definition qring.cpp:316
MonomialTableZZ * ringtableZZ
Definition qring.hpp:245
void destroy(GBRing *GR)
Definition qring.cpp:309
QRingInfo_field_QQ(const PolyRing *ambientR, const VECTOR(Nterm *) &quotients)
Definition qring.cpp:181
void gbvector_normal_form(const FreeModule *F, gbvector *&f) const
Definition qring.cpp:244
void normal_form(ring_elem &f) const
Definition qring.cpp:212
void reduce_lead_term_QQ(Nterm *&f, const Nterm *g) const
Definition qring.cpp:188
void gbvector_normal_form(const FreeModule *F, gbvector *&f) const
Definition qring.cpp:151
QRingInfo_field_basic(const PolyRing *ambientR, const VECTOR(Nterm *) &quotients)
Definition qring.cpp:88
void normal_form(ring_elem &f) const
Definition qring.cpp:119
void reduce_lead_term_basic_field(Nterm *&f, const Nterm *g) const
Definition qring.cpp:95
void destroy(GBRing *GR)
Definition qring.cpp:35
virtual MonomialTable * get_quotient_MonomialTable() const
Definition qring.hpp:164
MonomialTable * ringtable
Definition qring.hpp:154
virtual const MonomialIdeal * get_quotient_monomials() const
Definition qring.hpp:161
MonomialIdeal * Rideal
Definition qring.hpp:153
QRingInfo_field(const PolyRing *ambientR, const VECTOR(Nterm *) &quotients)
Definition qring.cpp:43
Nterm * quotient_element(int i) const
Definition qring.hpp:98
VECTOR(gbvector *) quotient_gbvectors
VECTOR(Nterm *) quotient_ideal
int n_quotients() const
Definition qring.hpp:97
QRingInfo()
Definition qring.hpp:93
virtual ~QRingInfo()
Definition qring.cpp:34
const PolyRing * R
Definition qring.hpp:83
virtual void gbvector_normal_form(const FreeModule *F, gbvector *&f, bool use_denom, ring_elem &denom) const
Definition qring.hpp:113
virtual void destroy(GBRing *GR)
Definition qring.cpp:24
size_t exp_size
Definition qring.hpp:86
virtual void normal_form(ring_elem &f) const
Definition qring.hpp:104
const gbvector * quotient_gbvector(int i) const
Definition qring.hpp:99
size_t monom_size
Definition qring.hpp:87
virtual void gbvector_normal_form(const FreeModule *F, gbvector *&f) const
Definition qring.hpp:108
virtual const MonomialIdeal * get_quotient_monomials() const
Definition qring.hpp:123
QRingInfo(const PolyRing *R)
Definition qring.cpp:18
void appendQuotientElement(Nterm *f, gbvector *g)
Definition qring.cpp:12
virtual const MonomialTableZZ * get_quotient_MonomialTableZZ() const
Definition qring.hpp:129
bool overZZ_
Definition qring.hpp:84
virtual MonomialTable * get_quotient_MonomialTable() const
Definition qring.hpp:126
#define VECTOR(T)
Definition newdelete.hpp:78
ring_elem — the universal value type carried by every Ring* in the engine.
Singly linked-list node carrying one term of a polynomial-ring element.
Definition ringelem.hpp:156
#define INTSIZE(a)
Definition style.hpp:37
Engine-wide stylistic constants: LT / EQ / GT codes, INTSIZE, GEOHEAP_SIZE.