Macaulay2 Engine
Loading...
Searching...
No Matches

◆ remainder() [2/2]

void ReducedGB_Field::remainder ( POLY & f,
bool use_denom,
ring_elem & denom )
virtual

Implements ReducedGB.

Reimplemented in ReducedGB_Field_Local.

Definition at line 111 of file reducedgb-field.cpp.

112{
113 gbvector head;
114 gbvector *frem = &head;
115 frem->next = nullptr;
116 POLY h = f;
117 exponents_t EXP = ALLOCATE_EXPONENTS(R->exponent_byte_size());
118
119 while (!R->gbvector_is_zero(h.f))
120 {
121 R->gbvector_get_lead_exponents(F, h.f, EXP);
122 int x = h.f->comp;
123 Bag *b;
124 if (Rideal != nullptr && Rideal->search_expvector(EXP, b))
125 {
126 const gbvector *g = originalR->quotient_gbvector(b->basis_elem());
127 R->gbvector_reduce_lead_term(
128 F, Fsyz, head.next, h.f, h.fsyz, g, nullptr, use_denom, denom);
129 }
130 else
131 {
132 int w = T->find_divisor(EXP, x);
133 if (w >= 0)
134 {
135 POLY g = polys[w];
136 R->gbvector_reduce_lead_term(F,
137 Fsyz,
138 head.next,
139 h.f,
140 h.fsyz,
141 g.f,
142 g.fsyz,
143 use_denom,
144 denom);
145 }
146 else
147 {
148 frem->next = h.f;
149 frem = frem->next;
150 h.f = h.f->next;
151 frem->next = nullptr;
152 }
153 }
154 }
155
156 h.f = head.next;
157
158 ring_elem denom1;
159 ring_elem one_elem = R->get_flattened_coefficients()->one();
160 denom1 = R->get_flattened_coefficients()->one(); // is replaced on next line
161 originalR->get_quotient_info()->gbvector_normal_form(
162 Fsyz, h.fsyz, true, denom1);
163 if (EQ != R->get_flattened_coefficients()->compare_elems(denom1, one_elem))
164 {
165 // multiply h.f by denom1.
166 R->gbvector_mult_by_coeff_to(h.f, denom1);
167 }
168 if (use_denom)
169 {
170 R->get_flattened_coefficients()->mult_to(denom, denom1);
171 }
172
173 f.f = h.f;
174 f.fsyz = h.fsyz;
175}
exponents::Exponents exponents_t
const MonomialIdeal * Rideal
MonomialTable * T
const FreeModule * Fsyz
Definition reducedgb.hpp:67
GBRing * R
Definition reducedgb.hpp:64
const PolynomialRing * originalR
Definition reducedgb.hpp:65
const FreeModule * F
Definition reducedgb.hpp:66
int basis_elem() const
Definition int-bag.hpp:66
int_bag Bag
Definition int-bag.hpp:70
#define ALLOCATE_EXPONENTS(byte_len)
Definition monoid.hpp:62
volatile int x
#define POLY(q)
Definition poly.cpp:23
gbvector * fsyz
Definition gbring.hpp:99
gbvector * f
Definition gbring.hpp:98
gbvector * next
Definition gbring.hpp:80
int comp
Definition gbring.hpp:82
const int EQ
Definition style.hpp:40

References ALLOCATE_EXPONENTS, int_bag::basis_elem(), gbvector::comp, EQ, ReducedGB::F, POLY::f, ReducedGB::Fsyz, POLY::fsyz, gbvector::next, ReducedGB::originalR, POLY, ReducedGB::R, Rideal, T, and x.

Referenced by minimalize().