Rust API Reference

oCAS's Rust API uses a layered crate architecture. The top-level ocas crate re-exports all commonly used types and functions through its prelude module, so a single import is all you need:

#![allow(unused)]
fn main() {
use ocas::prelude::*;
}

Module Hierarchy

graph TD
    OC["ocas<br/>top-level entry point + prelude"]
    CORE["ocas-core<br/>Arena, errors, fuel"]
    DOMAIN["ocas-domain<br/>coefficient domains, number theory, algebraic number fields"]
    ATOM["ocas-atom<br/>expression trees, tensors"]
    PARSE["ocas-parse<br/>string parsing"]
    POLY["ocas-poly<br/>polynomials, matrices, Gröbner bases"]
    REWRITE["ocas-rewrite<br/>pattern matching, simplification, rewriting"]
    CALC["ocas-calc<br/>calculus, ODEs, solvers"]
    EVAL["ocas-eval<br/>evaluator, JIT, numeric integration"]

    OC --> CORE
    OC --> DOMAIN
    OC --> ATOM
    OC --> PARSE
    OC --> POLY
    OC --> REWRITE
    OC --> CALC
    OC --> EVAL

    ATOM --> CORE
    ATOM --> DOMAIN
    PARSE --> CORE
    PARSE --> ATOM
    POLY --> CORE
    POLY --> DOMAIN
    REWRITE --> CORE
    REWRITE --> ATOM
    REWRITE --> PARSE
    CALC --> CORE
    CALC --> DOMAIN
    CALC --> ATOM
    CALC --> POLY
    CALC --> REWRITE
    EVAL --> CORE
    EVAL --> ATOM
    EVAL --> DOMAIN

    style OC fill:#4a9eff,stroke:#2d7ad4,color:#fff
    style CORE fill:#6c757d,stroke:#545b62,color:#fff
    style DOMAIN fill:#28a745,stroke:#1e7e34,color:#fff
    style ATOM fill:#17a2b8,stroke:#117a8b,color:#fff
    style PARSE fill:#6f42c1,stroke:#59359a,color:#fff
    style POLY fill:#fd7e14,stroke:#ca6510,color:#fff
    style REWRITE fill:#e83e8c,stroke:#b82d6e,color:#fff
    style CALC fill:#20c997,stroke:#17a085,color:#fff
    style EVAL fill:#ffc107,stroke:#d39e00,color:#333
CrateResponsibility
ocas-coreArena bump allocator, unified error type OcasError, fuel counter Fuel
ocas-domainCoefficient-domain traits (Domain, EuclideanDomain) and implementations (integers, rationals, finite fields, real balls, complex numbers, double-precision floats, algebraic number fields), number-theory function library, hyper-dual automatic differentiation
ocas-atomExpression tree (Atom, AtomNode, AtomArena), hash-consing, tensor system
ocas-parseString → Atom parser
ocas-polyPolynomials (dense univariate, sparse multivariate, rational function fields), matrices, Gröbner-basis algorithms (Buchberger/F4/F5), ideal operations, FGLM order conversion
ocas-rewritePattern matching (AC matching), simplification (fixed-point iteration), bottom-up transformation, E-graph (optional)
ocas-calcSymbolic differentiation, integration (Risch pipeline), Taylor expansion, ODE solving, Diophantine/linear/polynomial-system solvers
ocas-evalStack-VM interpreter, JIT compilation (Cranelift), SIMD batch evaluation, Vegas Monte Carlo numeric integration

Prelude Contents

use ocas::prelude::* imports all of the following items. The most commonly used types can also be accessed directly as ocas::TypeName.

Expression Trees

NameKindDescription
AtomstructCopy handle pointing to an expression node in the arena
AtomArenastructHash-consing constructor that builds expressions from an Arena
AtomNodeenumNode variants: Num/Var/Fun/Add/Mul/Pow
SymbolstructInterned string identifier, Copy
normalizefnNormalizes an expression (sorting, merging like terms)
parsefnParses a string into an Atom
ParseErrorenumParse error

Coefficient Domains

NameKindDescription
DomaintraitBasic coefficient-domain arithmetic (zero/one/add/mul/sub/neg, etc.)
EuclideanDomaintraitEuclidean domain (+ div_rem/gcd/lcm)
IntegerstructArbitrary-precision integer
IntegerDomainstructInteger domain implementation
RationalstructArbitrary-precision rational number
RationalDomainstructRational number field implementation
FiniteFieldstruct𝔽ₚ finite field
FiniteFieldElementstructFinite-field element
RealBallstructReal ball arithmetic (requires the mpfr feature)
RealBallDomainstructReal ball domain implementation
ComplexstructComplex number
ComplexDomainstructComplex number field implementation
DoubleF64structDouble-precision float (~31 significant digits)
DoubleF64DomainstructDouble-precision float domain implementation
AlgebraicExtensionstructAlgebraic number field ℚ(α) or GF(p^d)
AlgebraicElementstructAlgebraic number field element
AlgebraicNumberFieldstructAlgebraic number field constructor
AssumptionenumAssumption variants (Positive/Negative/Integer/Real/Complex, and 8 more)
AssumptionsstructAssumption set
SymbolAssumptionsstructPer-symbol assumption management

Polynomials

NameKindDescription
DenseUnivariatePolynomialstructDense univariate polynomial
SparseMultivariatePolynomialstructSparse multivariate polynomial
RationalPolynomialstructElement p/q of a rational function field
RootIntervalstructAn interval containing exactly one real root (low/high bounds)
MonomialOrdertraitMonomial order trait
LexstructLexicographic order
GrlexstructGraded lexicographic order
GrevlexstructGraded reverse lexicographic order
WeightOrderstructWeighted order
BlockOrderstructBlock elimination order
SubOrderstructSub-order
monomial_dividesfnMonomial divisibility test
monomial_lcmfnMonomial least common multiple
monomial_are_coprimefnMonomial coprimality test

Matrices

NameKindDescription
MatrixstructMatrix over a domain (Bareiss determinant, Gaussian-elimination solving)
MatrixErrorenumMatrix operation error

Gröbner Bases

NameKindDescription
GroebnerBasisstructGröbner-basis result (polynomial list plus metadata)
buchbergerfnBuchberger algorithm entry point
f4fnF4 algorithm entry point (matrix row-echelon batching)

Calculus

NameKindDescription
difffnSymbolic differentiation
integratefnSymbolic integration (layered pipeline)
integrate_outcomefnCertified integration: three-valued outcome + symbolic certificate (0.28.0)
integrate_outcome_with_optionsfnCertified integration with options (0.28.0)
integrate_heuristicfnHeuristic integration (without Risch)
integrate_with_fuelfnIntegration with a fuel limit
taylorfnTaylor expansion
substitutefnExpression substitution
apartfnPartial-fraction decomposition

Solvers

NameKindDescription
solve_linear_rationalfnLinear system Ax=b over ℚ
solve_linear_integerfnLinear system Ax=b over ℤ
solve_diophantinefnDiophantine equation ax+by=c
DiophantineSolutionstructDiophantine solution (particular solution + steps)
SolveErrorenumSolve error
solve_polynomial_systemfnPolynomial system solving (zero-dimensional / positive-dimensional / empty)
classify_odefnODE type classification
dsolvefnSymbolic ODE solving
dsolve_ivpfnODE initial-value problem (Laplace)
dsolve_systemfn2×2 ODE system solving
ODEstructODE description
ODESolutionenumODE solution (explicit/implicit/parametric/series/system/unsolved)
ODETypeenumODE type enumeration

Rewriting & Simplification

NameKindDescription
PatternenumMatch pattern (Literal/Wildcard/Add/Mul/Pow/Fun)
RulestructRewrite rule
BindingsstructPattern binding results
MatchErrorenumMatch error (incl. BudgetExhausted)
WildcardLevelenumWildcard level (Single/Sequence/NullSequence)
match_patternfnAC pattern matching
simplifyfnFixed-point simplification
simplify_with_fuelfnSimplification with a fuel limit
transformfnBottom-up transformation

Evaluation & JIT

NameKindDescription
ExpressionEvaluatorstructStack-VM interpreter
FunctionMapstructCustom function registry
EvaluationDomaintraitEvaluation-domain constraint
EvaluationErrorenumEvaluation error
EvalTreestructEvaluation tree
InstrenumInstruction enum
InstructionstructInstruction details
SlotenumOperand slot (Param/Const/Temp)
PowfExtensiontraitFloating-point power extension
VectorEvaluatorstructSIMD batch evaluation (requires the simd feature)
JitEnginestructJIT compilation engine (requires the jit feature)
JitCompiledFunctionstructJIT compilation result

Numeric Integration

NameKindDescription
VegasstructVegas Monte Carlo integrator
VegasOptionsstructVegas options (bin count, sample count, iterations, etc.)
IntegrateResultstructIntegration result (value + error)
IntegratorstructIntegrator interface
StatisticsAccumulatorstructInverse-variance weighted accumulator
integrate_1dfn1-D numeric integration convenience function

Automatic Differentiation

NameKindDescription
DualShapestructDerivative layout description
HyperDualstructHyper-dual number
DualCoefftraitDual coefficient constraint
new_first_orderfnFirst-order dual convenience constructor

Tensors

NameKindDescription
TensorstructNamed-index tensor
IndexSlotstructIndex slot (label + position)
IndexPositionenumUpper (contravariant) / Lower (covariant)
SymmetryenumNone/Symmetric/Antisymmetric
ContractedenumContraction result (Scalar/Product)
TensorProductstructTensor product
contractfnIndex contraction
symmetrise_signfnAntisymmetrization sign

Runtime

NameKindDescription
ArenastructBump allocator
OcasErrorenumUnified error type
ResulttypeResult<T, OcasError>
FuelstructFuel counter (prevents infinite loops)

Feature Flags Quick Reference

Enable optional backends and acceleration features via the features key in Cargo.toml:

[dependencies]
ocas = { version = "0.24", features = ["gmp", "jit"] }
FeatureDefaultDescriptionSub-crate features involved
gmpnoUse GMP arbitrary-precision arithmetic (significantly speeds up big-integer operations)ocas-domain/gmp, ocas-poly/gmp, ocas-core/gmp
mpfrnoEnable MPFR real ball arithmetic (the RealBall type)ocas-domain/mpfr
flintnoUse the FLINT number-theory library to accelerate polynomial operationsocas-poly/flint
pythonnoEnable Python bindings (PyO3)dep:ocas-py
gplnoEnable GPL-licensed feature modulesdep:ocas-gpl
eggnoEnable E-graph simplification (the egg_simplify function)ocas-rewrite/egg
jitnoEnable Cranelift JIT compilation (the compile_jit method)ocas-eval/jit
simdnoEnable SIMD batch evaluation (VectorEvaluator)ocas-eval/simd
mimallocnoUse the mimalloc global allocator (accelerates many-small-allocation workloads)dep:mimalloc
system-libsnoLink against preinstalled system GMP/MPFR/MPC (required on MinGW)ocas-domain/system-libs
nttnoNTT number-theoretic transform acceleration for polynomial multiplication over 𝔽ₚocas-poly/ntt
sprsnoSparse matrix backend (used for the F4 prep phase)ocas-poly/sprs
fast-polynofast_polynomial Estrin evaluation accelerationocas-eval/fast-poly

Tip: default = [] — all backends are off by default for maximum portability (including Windows MSVC). Recommended development configuration: features = ["gmp", "jit"].

Subpage Index

TopicFileContents
Expression systemrust-expressionsArena, Atom, AtomArena, Symbol, pattern matching, parsing
Coefficient domainsrust-domainsDomain trait, integers/rationals/finite fields/real balls/complex/doubles/algebraic number fields, assumption system
Polynomialsrust-polynomialsDense univariate, sparse multivariate, rational function fields, monomial orders
Matricesrust-matrixMatrix (Bareiss determinant, Gaussian elimination)
Calculusrust-calculusdiff, integrate, taylor, integration pipeline layers
Solversrust-solversLinear systems, Diophantine equations, polynomial systems, ODE solving
Rewriting & simplificationrust-rewritePattern, Rule, simplify, transform, E-graph
Evaluation & JITrust-evaluationExpressionEvaluator, JIT, SIMD, FunctionMap
Automatic differentiationrust-autodiffDualShape, HyperDual, DualCoeff
Tensorsrust-tensorsTensor, contraction, symmetry, canonicalization, Young projection
Number theoryrust-ntheoryPrimality, factorization, discrete logarithms, CRT, number-theoretic functions, quadratic residues
Gröbner bases & idealsrust-groebnerBuchberger/F4/F5, FGLM, ideal operations, primary decomposition
Factoringrust-factoringUnivariate/multivariate ℤ[x]/𝔽ₚ[x] factoring, algebraic number fields, rational functions
Numeric integrationrust-numeric-integration.mdVegas Monte Carlo, integrate_1d

Quick Start

use ocas::prelude::*;
use ocas_core::arena::Arena;

fn main() {
    // 1. Create the arena and expression context
    let arena = Arena::new();
    let ctx = AtomArena::new(&arena);

    // 2. Build the expression sin(x)
    let x = ctx.var("x");
    let expr = ctx.fun("sin", &[x]);

    // 3. Differentiate symbolically (diff takes a Symbol as the variable)
    let deriv = diff(&ctx, expr, Symbol::new("x"));
    assert_eq!(deriv.to_string(), "cos(x)");

    // 4. Simplify (an empty rule set keeps the expression unchanged)
    let simplified = simplify(&ctx, expr, &[], 100);
    assert_eq!(simplified.to_string(), "sin(x)");

    println!("d/dx sin(x) = {}", deriv);
}

See Also