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

◆ subduct() [2/2]

ring_elem sagbi::subduct ( int numslots,
const PolyRing * R,
ring_elem f,
const RingMap * phi,
GBComputation * J )
static

Definition at line 7 of file sagbi.cpp.

12{
13 Nterm *f = a;
14 Nterm head;
15 Nterm *result = &head;
16 MatrixConstructor mat(R->make_FreeModule(1), 1);
17
18 while (f != nullptr)
19 {
20 Nterm *g = f;
21 f = f->next;
22 g->next = nullptr;
23
24 mat.set_entry(0, 0, g);
25 Matrix *m = mat.to_matrix();
26 const Matrix *n = J->matrix_remainder(m);
27 ring_elem g1 = n->elem(0, 0);
28 delete m;
29 delete n;
30
31 // Is g1 a monomial in the new variables?
32 if (R->in_subring(numslots, g1))
33 {
34 g->next = f;
35 f = g;
36 ring_elem phi_g1 = R->eval(phi, g1, 0);
37 ring_elem fr = f;
38 R->internal_subtract_to(fr, phi_g1);
39 f = fr;
40 }
41 else
42 {
43 result->next = g;
44 result = g;
45 }
46 }
47
48 result->next = nullptr;
49 return head.next;
50}
virtual const Matrix * matrix_remainder(const Matrix *m)=0
ring_elem elem(int i, int j) const
Definition matrix.cpp:307
virtual ring_elem eval(const RingMap *map, const ring_elem f, int first_var) const
Definition poly.cpp:1346
virtual bool in_subring(int nslots, const ring_elem a) const
Definition poly.cpp:2108
void internal_subtract_to(ring_elem &f, ring_elem &g) const
Definition poly.cpp:744
virtual FreeModule * make_FreeModule() const
Definition ring.cpp:53
#define Matrix
Definition factory.cpp:14
VALGRIND_MAKE_MEM_DEFINED & result(result)
Nterm * next
Definition ringelem.hpp:157

References Matrix::elem(), PolyRing::eval(), PolyRing::in_subring(), PolyRing::internal_subtract_to(), Ring::make_FreeModule(), Matrix, GBComputation::matrix_remainder(), Nterm::next, result(), MatrixConstructor::set_entry(), and MatrixConstructor::to_matrix().

Referenced by rawSubduction(), and subduct().