Module groebner

Module groebner 

Source
Expand description

Groebner Basis Computation

Provides Groebner basis algorithms for polynomial ideals. This module re-exports from algebra::groebner while providing a unified interface through the polynomial module.

§Overview

Groebner bases are a fundamental tool in computational algebraic geometry and polynomial system solving. They provide canonical generators for polynomial ideals, enabling:

  • Ideal membership testing
  • Polynomial system solving
  • Elimination of variables
  • Geometric theorem proving

§Algorithms

  • Buchberger’s Algorithm: Classic algorithm for Groebner basis computation
  • Efficient Buchberger: Optimized variant with pair selection strategies

§Example

use mathhook_core::core::polynomial::groebner::{GroebnerBasis, MonomialOrder};
use mathhook_core::core::Expression;
use mathhook_core::symbol;

let x = symbol!(x);
let y = symbol!(y);

// f1 = x - y
let f1 = Expression::add(vec![
    Expression::symbol(x.clone()),
    Expression::mul(vec![Expression::integer(-1), Expression::symbol(y.clone())]),
]);
// f2 = y^2 - 1
let f2 = Expression::add(vec![
    Expression::pow(Expression::symbol(y.clone()), Expression::integer(2)),
    Expression::integer(-1),
]);

let mut gb = GroebnerBasis::new(
    vec![f1, f2],
    vec![x.clone(), y.clone()],
    MonomialOrder::Lex
);
gb.compute();

// The basis should have at least 2 polynomials
assert!(gb.basis.len() >= 2);

Re-exports§

pub use crate::algebra::groebner::buchberger_algorithm;
pub use crate::algebra::groebner::efficient_buchberger_algorithm;
pub use crate::algebra::groebner::expression_to_sparse_polynomial;
pub use crate::algebra::groebner::poly_reduce;
pub use crate::algebra::groebner::poly_reduce_completely;
pub use crate::algebra::groebner::s_polynomial;
pub use crate::algebra::groebner::sparse_polynomial_to_expression;
pub use crate::algebra::groebner::GroebnerBasis;
pub use crate::algebra::groebner::Monomial;
pub use crate::algebra::groebner::MonomialOrder;
pub use crate::algebra::groebner::MonomialOrdering;
pub use crate::algebra::groebner::SparsePolynomial;