efficient_buchberger_algorithm

Function efficient_buchberger_algorithm 

Source
pub fn efficient_buchberger_algorithm(
    generators: &[Expression],
    variables: &[Symbol],
    order: &MonomialOrder,
) -> MathResult<Vec<Expression>>
Expand description

Compute Gröbner basis using efficient sparse polynomial representation

This implementation uses SparsePolynomial for O(n) addition and O(n²) multiplication, achieving SymPy-level performance.

§Arguments

  • generators - Initial polynomial generators as Expressions
  • variables - Variables in the polynomial ring
  • order - Monomial ordering

§Returns

Returns the Gröbner basis as Expressions

§Examples

use mathhook_core::{symbol, Expression};
use mathhook_core::algebra::groebner::efficient_buchberger::efficient_buchberger_algorithm;
use mathhook_core::algebra::groebner::MonomialOrder;

let x = symbol!(x);
let y = symbol!(y);
// Circle-line system: x² + y² = 1, x - y = 0
let f1 = Expression::add(vec![
    Expression::pow(x.clone().into(), Expression::integer(2)),
    Expression::pow(y.clone().into(), Expression::integer(2)),
    Expression::integer(-1),
]);
let f2 = Expression::add(vec![
    x.clone().into(),
    Expression::mul(vec![Expression::integer(-1), y.clone().into()]),
]);

let result = efficient_buchberger_algorithm(
    &[f1, f2],
    &[x, y],
    &MonomialOrder::Lex
);
assert!(result.is_ok());