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

◆ reduce_level_one()

res_pair * res_comp::reduce_level_one ( resterm *& f,
resterm *& fsyz,
resterm *& pivot )
private

Definition at line 795 of file res-a1.cpp.

798{
799 // 'lastterm' is used to append the next monomial to fsyz->syz
802
803 resterm *lastterm = (fsyz->next == nullptr ? fsyz : fsyz->next);
804
805 res_pair *q;
806 ring_elem rg;
807 Bag *b;
808
809 while (f != nullptr)
810 {
811 M->divide(f->monom, f->comp->base_monom, REDUCE_mon);
812 M->to_expvector(REDUCE_mon, REDUCE_exp);
813 if (find_ring_divisor(REDUCE_exp, rg))
814 {
815 // Subtract off f, leave fsyz alone
816 Nterm *r = rg;
817 M->divide(f->monom, r->monom, REDUCE_mon);
818 R->ring_subtract_multiple_to(f, f->coeff, REDUCE_mon, f->comp, rg);
819 }
820 else if (search_mi[f->comp->me]->search_expvector(REDUCE_exp, b))
821 {
822 q = reinterpret_cast<res_pair *>(b->basis_ptr());
823 lastterm->next = R->new_term(K->negate(f->coeff), f->monom, q);
824 lastterm = lastterm->next;
825 pivot = lastterm;
826 if (q->syz_type == SYZ_S_PAIR) return q; // i.e. not computed yet
827 M->divide(f->monom, q->syz->monom, REDUCE_mon);
828 R->subtract_multiple_to(f, f->coeff, REDUCE_mon, q->syz);
829 }
830 else
831 {
832 // level 1: monomial not seen yet
833 q = new_res_pair(SYZ_S_PAIR, f);
834 insert_res_pair(1, q);
835 lastterm->next = R->new_term(K->negate(f->coeff), f->monom, q);
836 lastterm = lastterm->next;
837 pivot = lastterm;
838 return q;
839 }
840 }
841 return nullptr;
842}
exponents::Exponents exponents_t
void * basis_ptr() const
Definition int-bag.hpp:67
size_t exp_size
Definition res-a1.hpp:114
const Monoid * M
Definition res-a1.hpp:80
res_poly * R
Definition res-a1.hpp:79
int find_ring_divisor(const_exponents exp, ring_elem &result) const
Definition res-a1.cpp:710
const Ring * K
Definition res-a1.hpp:81
res_pair * new_res_pair()
Definition res-a1.cpp:210
void insert_res_pair(int level, res_pair *p)
Definition res-a1.cpp:288
size_t monom_size
Definition res-a1.hpp:115
resterm * syz
int * base_monom
#define monomial
Definition gb-toric.cpp:11
int_bag Bag
Definition int-bag.hpp:70
#define ALLOCATE_EXPONENTS(byte_len)
Definition monoid.hpp:62
#define ALLOCATE_MONOMIAL(byte_len)
Definition monoid.hpp:65
@ SYZ_S_PAIR
int monom[1]
Definition ringelem.hpp:160
res_pair * comp
ring_elem coeff
int monom[1]
resterm * next

References ALLOCATE_EXPONENTS, ALLOCATE_MONOMIAL, res_pair::base_monom, int_bag::basis_ptr(), resterm::coeff, resterm::comp, exp_size, find_ring_divisor(), insert_res_pair(), K, M, res_pair::me, Nterm::monom, resterm::monom, monom_size, monomial, new_res_pair(), resterm::next, R, res_pair::syz, SYZ_S_PAIR, and res_pair::syz_type.

Referenced by handle_pair().