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 Expressionsvariables- Variables in the polynomial ringorder- 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());