14 template <
typename ValueSet>
16 typename ValueSet::value_t
18 const typename ValueSet::value_t& lhs,
19 const typename ValueSet::value_t& rhs)
21 return vs.ldiv(lhs, rhs);
30 template <
typename ExpressionSetLhs,
typename ExpressionSetRhs>
34 const auto& l = lhs->as<ExpressionSetLhs>();
35 const auto&
r = rhs->as<ExpressionSetRhs>();
36 auto rs =
join(l.expressionset(), r.expressionset());
37 auto lr = rs.conv(l.expressionset(), l.expression());
38 auto rr = rs.conv(r.expressionset(), r.expression());
43 template <
typename PolynomialSetLhs,
typename PolynomialSetRhs>
47 const auto& l = lhs->as<PolynomialSetLhs>();
48 const auto&
r = rhs->as<PolynomialSetRhs>();
49 auto rs =
join(l.polynomialset(), r.polynomialset());
50 auto lr = rs.conv(l.polynomialset(), l.polynomial());
51 auto rr = rs.conv(r.polynomialset(), r.polynomial());
62 template <
typename ValueSet>
64 typename ValueSet::value_t
66 const typename ValueSet::value_t& lhs,
67 const typename ValueSet::value_t& rhs)
69 return vs.lgcd(lhs, rhs);
78 template <
typename PolynomialSetLhs,
typename PolynomialSetRhs>
82 const auto& l = lhs->as<PolynomialSetLhs>();
83 const auto&
r = rhs->as<PolynomialSetRhs>();
84 auto rs =
join(l.polynomialset(), r.polynomialset());
85 auto lr = rs.conv(l.polynomialset(), l.polynomial());
86 auto rr = rs.conv(r.polynomialset(), r.polynomial());
97 template <
typename ValueSet>
99 typename ValueSet::value_t
101 const typename ValueSet::value_t& lhs,
102 const typename ValueSet::value_t& rhs)
104 return vs.rdiv(lhs, rhs);
112 template <
typename ExpressionSetLhs,
typename ExpressionSetRhs>
116 const auto& l = lhs->as<ExpressionSetLhs>();
117 const auto&
r = rhs->as<ExpressionSetRhs>();
118 auto rs =
join(l.expressionset(), r.expressionset());
119 auto lr = rs.conv(l.expressionset(), l.expression());
120 auto rr = rs.conv(r.expressionset(), r.expression());
ValueSet::value_t ldiv(const ValueSet &vs, const typename ValueSet::value_t &lhs, const typename ValueSet::value_t &rhs)
Left-division of values.
expression rdiv_expression(const expression &lhs, const expression &rhs)
Bridge (rdiv).
ValueSet::value_t rdiv(const ValueSet &vs, const typename ValueSet::value_t &lhs, const typename ValueSet::value_t &rhs)
Right-division of values.
expression ldiv_expression(const expression &lhs, const expression &rhs)
Bridge (ldiv).
polynomial make_polynomial(const PolynomialSet &ps, const typename PolynomialSet::value_t &p)
polynomial ldiv_polynomial(const polynomial &lhs, const polynomial &rhs)
Bridge (ldiv).
Provide a variadic mul on top of a binary mul(), and one().
expression rdiv(const expression &lhs, const expression &rhs)
Right-division of two expressions (lhs \ rhs).
std::shared_ptr< const detail::polynomial_base > polynomial
expression make_expression(const ExpSet &rs, const typename ExpSet::value_t &r)
polynomial lgcd_polynomial(const polynomial &lhs, const polynomial &rhs)
Bridge (lgcd).
polynomial lgcd(const polynomial &lhs, const polynomial &rhs)
Left greatest common divisor of two polynomials (lhs \ rhs).
std::shared_ptr< detail::expression_base > expression
context join(const context &c1, const context &c2)
Bridge.
ValueSet::value_t lgcd(const ValueSet &vs, const typename ValueSet::value_t &lhs, const typename ValueSet::value_t &rhs)
Left-division of values.