21 result->initialize_poly_ring(K, M);
22 if (!
result->initialize_skew(skewvars))
return nullptr;
29 o <<
"SkewPolynomialRing(";
35static int sign4[4] = {1, 1, -1, -1};
40 Nterm *inresult = &head;
46 M_->to_expvector(
s.monom, EXP);
47 int deg =
skew_.skew_degree(EXP);
55 int sign =
sign4[mod4];
58 t->
coeff = (sign == 1 ?
s.coeff :
K_->negate(
s.coeff));
61 inresult = inresult->
next;
63 inresult->
next =
nullptr;
73 Nterm *inresult = &head;
77 M_->to_expvector(m, EXP1);
81 M_->to_expvector(
s.monom, EXP2);
82 int sign =
skew_.mult_sign(EXP1, EXP2);
83 if (sign == 0)
continue;
88 if (sign < 0)
K_->negate_to(t->
coeff);
92 inresult = inresult->
next;
94 inresult->
next =
nullptr;
102 return power(f, n1.second);
exponents::Exponents exponents_t
static GBRing * create_SkewPolynomialRing(const Ring *K0, const Monoid *M0, SkewMultiplication skew0)
Engine-side commutative monomial monoid: variable names, ordering, multidegree machinery,...
virtual ring_elem power(const ring_elem f, mpz_srcptr n) const
Exponentiation. This is the default function, if a class doesn't define this.
static std::pair< bool, int > get_si(mpz_srcptr n)
Sign-rule helper used by every ring that has a skew-commutative subset of variables (exterior factor,...
virtual ring_elem power(const ring_elem f, mpz_srcptr n) const
Exponentiation. This is the default function, if a class doesn't define this.
bool initialize_skew(M2_arrayint skewvars)
void text_out(buffer &o) const
virtual ~SkewPolynomialRing()
static SkewPolynomialRing * create(const Ring *K, const Monoid *M, M2_arrayint skewvars)
ring_elem antipode(const ring_elem f) const
virtual ring_elem mult_by_term(const ring_elem f, const ring_elem c, const int *m) const
GBRing and gbvector — the GB-tuned polynomial-ring view used by classical Buchberger code.
VALGRIND_MAKE_MEM_DEFINED & result(result)
#define ALLOCATE_EXPONENTS(byte_len)
SkewMultiplication — configuration object naming the skew-commuting variables of a ring.
SkewPolynomialRing — polynomial ring with a designated set of anticommuting variables.
Singly linked-list node carrying one term of a polynomial-ring element.