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

◆ gbvector_cancel_lead_terms()

void GBRing::gbvector_cancel_lead_terms ( const FreeModule * F,
const FreeModule * Fsyz,
const gbvector * f,
const gbvector * fsyz,
const gbvector * g,
const gbvector * gsyz,
gbvector *& result,
gbvector *& result_syz )

Definition at line 1056 of file gbring.cpp.

1071{
1072 int comp;
1073 const ring_elem a = f->coeff;
1074 const ring_elem b = g->coeff;
1075 ring_elem u, v;
1076
1081
1084
1085 K->syzygy(a, b, u, v); // If possible, u==1, anyway, u>0
1086 gbvector_get_lead_exponents(F, f, EXP1); // Removes the Schreyer part
1087 gbvector_get_lead_exponents(F, g, EXP2); // Removes the Schreyer part
1088 exponent_syzygy(EXP1, EXP2, EXP3, EXP4);
1089 if (g->comp == 0)
1090 comp = f->comp;
1091 else
1092 comp = 0;
1093 if (is_skew_commutative())
1094 {
1095 // Note that EXP3 * EXP1 = EXP4 * EXP2 up to sign
1096 if (_skew.mult_sign(EXP3, EXP1) != _skew.mult_sign(EXP4, EXP2))
1097 K->negate_to(v);
1098 }
1099 M->from_expvector(EXP3, MONOM1);
1100 M->from_expvector(EXP4, MONOM2);
1101 result = mult_by_term(F, f, u, MONOM1, 0);
1102 gbvector *result1 = mult_by_term(F, g, v, MONOM2, comp);
1103 gbvector_add_to(F, result, result1);
1104 if (fsyz == nullptr && gsyz == nullptr)
1105 result_syz = nullptr;
1106 else
1107 {
1108 result_syz = mult_by_term(Fsyz, fsyz, u, MONOM1, 0);
1109 gbvector *result_syz1 = mult_by_term(Fsyz, gsyz, v, MONOM2, comp);
1110 gbvector_add_to(Fsyz, result_syz, result_syz1);
1111 }
1112}
exponents::Exponents exponents_t
gbvector * mult_by_term(const FreeModule *F, const gbvector *f, ring_elem u, const int *monom, int comp)
Definition gbring.cpp:839
bool is_skew_commutative() const
Definition gbring.hpp:240
size_t monom_size
Definition gbring.hpp:170
size_t exp_size
Definition gbring.hpp:169
SkewMultiplication _skew
Definition gbring.hpp:151
const Monoid * M
Definition gbring.hpp:137
const Ring * K
Definition gbring.hpp:138
void gbvector_add_to(const FreeModule *F, gbvector *&f, gbvector *&g)
Definition gbring.cpp:668
void gbvector_get_lead_exponents(const FreeModule *F, const gbvector *f, int *result)
Definition gbring.cpp:541
void exponent_syzygy(const int *exp1, const int *exp2, int *exp3, int *exp4)
Definition gbring.cpp:814
int * monomial
Definition gbring.hpp:102
VALGRIND_MAKE_MEM_DEFINED & result(result)
#define ALLOCATE_EXPONENTS(byte_len)
Definition monoid.hpp:62
#define ALLOCATE_MONOMIAL(byte_len)
Definition monoid.hpp:65
ring_elem coeff
Definition gbring.hpp:81
int comp
Definition gbring.hpp:82

References _skew, ALLOCATE_EXPONENTS, ALLOCATE_MONOMIAL, gbvector::coeff, gbvector::comp, exp_size, exponent_syzygy(), gbvector_add_to(), gbvector_get_lead_exponents(), is_skew_commutative(), K, M, monom_size, mult_by_term(), and result().