poly_reduce_completely

Function poly_reduce_completely 

Source
pub fn poly_reduce_completely(
    poly: &Expression,
    basis: &[&Expression],
    variables: &[Symbol],
    order: &MonomialOrder,
) -> Expression
Expand description

Reduce a polynomial completely modulo a set of polynomials

Repeatedly applies reduction until no more reduction is possible. Returns the normal form (remainder) of the polynomial.

§Arguments

  • poly - Polynomial to reduce
  • basis - Set of polynomials to reduce against
  • variables - Ordered list of variables
  • order - Monomial ordering to use

§Returns

The fully reduced polynomial (normal form)

§Examples

use mathhook_core::{symbol, expr, Expression};
use mathhook_core::algebra::groebner::{poly_reduce_completely, MonomialOrder};

let x = symbol!(x);
let y = symbol!(y);
let poly = Expression::add(vec![expr!(x^2), expr!(x*y), expr!(1)]);
let basis = vec![Expression::add(vec![x.clone().into(), Expression::mul(vec![Expression::integer(-1), y.clone().into()])])];
let basis_refs: Vec<&Expression> = basis.iter().collect();
let reduced = poly_reduce_completely(
    &poly,
    &basis_refs,
    &vec![x, y],
    &MonomialOrder::Lex
);