Rust API 参考

oCAS 的 Rust API 采用分层 crate 架构,顶层 ocas crate 通过 prelude 模块统一导出所有常用类型和函数。用户只需一行导入即可开始使用:

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

模块层级

graph TD
    OC["ocas<br/>顶层统一入口 + prelude"]
    CORE["ocas-core<br/>Arena、错误、燃料"]
    DOMAIN["ocas-domain<br/>系数域、数论、代数数域"]
    ATOM["ocas-atom<br/>表达式树、张量"]
    PARSE["ocas-parse<br/>字符串解析"]
    POLY["ocas-poly<br/>多项式、矩阵、Gröbner 基"]
    REWRITE["ocas-rewrite<br/>模式匹配、化简、重写"]
    CALC["ocas-calc<br/>微积分、ODE、求解器"]
    EVAL["ocas-eval<br/>求值器、JIT、数值积分"]

    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
Crate职责
ocas-coreArena bump 分配器、统一错误类型 OcasError、燃料计数 Fuel
ocas-domain系数域 trait(Domain、EuclideanDomain)及实现(整数、有理数、有限域、实数球、复数、双精度浮点、代数数域)、数论函数库、对偶数自动微分
ocas-atom表达式树(Atom、AtomNode、AtomArena)、hash-consing、张量系统
ocas-parse字符串 → Atom 解析器
ocas-poly多项式(稠密一元、稀疏多元、有理分式域)、矩阵、Gröbner 基算法(Buchberger/F4/F5)、理想运算、FGLM 换序
ocas-rewrite模式匹配(AC 匹配)、化简(不动点迭代)、自底向上变换、E-graph(可选)
ocas-calc符号微分、积分(Risch 管线)、Taylor 展开、ODE 求解、丢番图/线性/多项式系统求解器
ocas-eval栈 VM 解释器、JIT 编译(Cranelift)、SIMD 批量求值、Vegas 蒙特卡洛数值积分

prelude 导入内容清单

use ocas::prelude::* 导入以下所有项。同时也可通过 ocas::TypeName 直接访问最常用的类型。

表达式树

名称类型说明
AtomstructCopy 句柄,指向 arena 中的表达式节点
AtomArenastructhash-consing 构造器,从 Arena 创建表达式
AtomNodeenum节点变体:Num/Var/Fun/Add/Mul/Pow
Symbolstructinterned 字符串标识符,Copy
normalizefn规范化表达式(排序、合并同类项)
parsefn字符串解析为 Atom
ParseErrorenum解析错误

系数域

名称类型说明
Domaintrait系数域基本算术(zero/one/add/mul/sub/neg 等)
EuclideanDomaintrait欧几里得域(+ div_rem/gcd/lcm)
Integerstruct任意精度整数
IntegerDomainstruct整数域实现
Rationalstruct任意精度有理数
RationalDomainstruct有理数域实现
FiniteFieldstruct𝔽ₚ 有限域
FiniteFieldElementstruct有限域元素
RealBallstruct实数球算术(需 mpfr feature)
RealBallDomainstruct实数球域实现
Complexstruct复数
ComplexDomainstruct复数域实现
DoubleF64struct双精度浮点(~31 位有效数字)
DoubleF64Domainstruct双精度浮点域实现
AlgebraicExtensionstruct代数数域 ℚ(α) 或 GF(p^d)
AlgebraicElementstruct代数数域元素
AlgebraicNumberFieldstruct代数数域构造器
Assumptionenum假设变体(Positive/Negative/Integer/Real/Complex 等 13 种)
Assumptionsstruct假设集合
SymbolAssumptionsstruct符号级假设管理

多项式

名称类型说明
DenseUnivariatePolynomialstruct稠密一元多项式
SparseMultivariatePolynomialstruct稀疏多元多项式
RationalPolynomialstruct多项式分式域元素 p/q
RootIntervalstruct恰好包含一个实根的区间(low/high 边界)
MonomialOrdertrait单项式序 trait
Lexstruct字典序
Grlexstruct分次字典序
Grevlexstruct分次反字典序
WeightOrderstruct加权序
BlockOrderstruct分块消元序
SubOrderstruct子序
monomial_dividesfn单项式整除测试
monomial_lcmfn单项式最小公倍
monomial_are_coprimefn单项式互素测试

矩阵

名称类型说明
Matrixstruct域上矩阵(Bareiss 行列式、高斯消元求解)
MatrixErrorenum矩阵运算错误

Gröbner 基

名称类型说明
GroebnerBasisstructGröbner 基结果(含多项式列表与元数据)
buchbergerfnBuchberger 算法入口
f4fnF4 算法入口(矩阵行阶梯批处理)

微积分

名称类型说明
difffn符号微分
integratefn符号积分(分层管线)
integrate_outcomefn认证积分:三值输出 + 符号证书(0.28.0)
integrate_outcome_with_optionsfn带选项的认证积分(0.28.0)
integrate_heuristicfn启发式积分(不含 Risch)
integrate_with_fuelfn带燃料限制的积分
taylorfnTaylor 展开
substitutefn表达式替换
apartfn部分分式分解

求解器

名称类型说明
solve_linear_rationalfnℚ 上线性方程组 Ax=b
solve_linear_integerfnℤ 上线性方程组 Ax=b
solve_diophantinefn丢番图方程 ax+by=c
DiophantineSolutionstruct丢番图解(特解 + 步长)
SolveErrorenum求解错误
solve_polynomial_systemfn多项式系统求解(零维/正维/空解集)
classify_odefnODE 类型分类
dsolvefn符号 ODE 求解
dsolve_ivpfnODE 初值问题(Laplace)
dsolve_systemfn2×2 ODE 系统求解
ODEstructODE 描述
ODESolutionenumODE 解(显式/隐式/参数/级数/系统/未解)
ODETypeenumODE 类型枚举

重写与化简

名称类型说明
Patternenum匹配模式(Literal/Wildcard/Add/Mul/Pow/Fun)
Rulestruct重写规则
Bindingsstruct模式绑定结果
MatchErrorenum匹配错误(含 BudgetExhausted)
WildcardLevelenum通配符级别(Single/Sequence/NullSequence)
match_patternfnAC 模式匹配
simplifyfn不动点化简
simplify_with_fuelfn带燃料限制的化简
transformfn自底向上变换

求值与 JIT

名称类型说明
ExpressionEvaluatorstruct栈 VM 解释器
FunctionMapstruct自定义函数注册表
EvaluationDomaintrait求值域约束
EvaluationErrorenum求值错误
EvalTreestruct求值树
Instrenum指令枚举
Instructionstruct指令详情
Slotenum操作数槽(Param/Const/Temp)
PowfExtensiontrait浮点幂扩展
VectorEvaluatorstructSIMD 批量求值(需 simd feature)
JitEnginestructJIT 编译引擎(需 jit feature)
JitCompiledFunctionstructJIT 编译结果

数值积分

名称类型说明
VegasstructVegas 蒙特卡洛积分器
VegasOptionsstructVegas 选项(bin 数、样本数、迭代数等)
IntegrateResultstruct积分结果(值 + 误差)
Integratorstruct积分器接口
StatisticsAccumulatorstruct逆方差加权累加器
integrate_1dfn一维数值积分便捷函数

自动微分

名称类型说明
DualShapestruct导数布局描述
HyperDualstruct超对偶数
DualCoefftrait对偶数系数约束
new_first_orderfn一阶对偶便捷构造

张量

名称类型说明
Tensorstruct命名指标张量
IndexSlotstruct指标槽(标签 + 位置)
IndexPositionenumUpper(逆变)/ Lower(协变)
SymmetryenumNone/Symmetric/Antisymmetric
Contractedenum缩并结果(Scalar/Product)
TensorProductstruct张量积
contractfn指标缩并
symmetrise_signfn反对称化符号

运行时

名称类型说明
Arenastructbump 分配器
OcasErrorenum统一错误类型
ResulttypeResult<T, OcasError>
Fuelstruct燃料计数(防无限循环)

Feature Flags 速查表

在 Cargo.toml 中通过 features 启用可选后端和加速功能:

[dependencies]
ocas = { version = "0.24", features = ["gmp", "jit"] }
Feature默认说明依赖的子 crate feature
gmp否使用 GMP 任意精度算术(显著加速大整数运算)ocas-domain/gmp, ocas-poly/gmp, ocas-core/gmp
mpfr否启用 MPFR 实数球算术(RealBall 类型)ocas-domain/mpfr
flint否使用 FLINT 数论库加速多项式运算ocas-poly/flint
python否启用 Python 绑定(PyO3)dep:ocas-py
gpl否启用 GPL 许可的功能模块dep:ocas-gpl
egg否启用 E-graph 化简(egg_simplify 函数)ocas-rewrite/egg
jit否启用 Cranelift JIT 编译(compile_jit 方法)ocas-eval/jit
simd否启用 SIMD 批量求值(VectorEvaluator)ocas-eval/simd
mimalloc否使用 mimalloc 全局分配器(加速大量小分配场景)dep:mimalloc
system-libs否链接系统预装的 GMP/MPFR/MPC(MinGW 必需)ocas-domain/system-libs
ntt否NTT 数论变换加速 𝔽ₚ 上多项式乘法ocas-poly/ntt
sprs否稀疏矩阵后端(用于 F4 准备阶段)ocas-poly/sprs
fast-poly否fast_polynomial Estrin 求值加速ocas-eval/fast-poly

提示:default = [],所有后端默认关闭以保持最大可移植性(包括 Windows MSVC)。推荐开发配置:features = ["gmp", "jit"]。

子页面索引

主题文件内容概述
表达式系统rust-expressionsArena、Atom、AtomArena、Symbol、模式匹配、解析
系数域rust-domainsDomain trait、整数/有理数/有限域/实数球/复数/双精度/代数数域、假设系统
多项式rust-polynomials稠密一元、稀疏多元、有理分式域、单项式序
矩阵rust-matrixMatrix(Bareiss 行列式、高斯消元)
微积分rust-calculusdiff、integrate、taylor、积分管线分层
求解器rust-solvers线性方程组、丢番图、多项式系统、ODE 求解
重写与化简rust-rewritePattern、Rule、simplify、transform、E-graph
求值与 JITrust-evaluationExpressionEvaluator、JIT、SIMD、FunctionMap
自动微分rust-autodiffDualShape、HyperDual、DualCoeff
张量rust-tensorsTensor、缩并、对称性、规范化、Young 投影
数论rust-ntheory素性、分解、离散对数、CRT、数论函数、二次剩余
Gröbner 基与理想rust-groebnerBuchberger/F4/F5、FGLM、理想运算、准素分解
因式分解rust-factoring一元/多元 ℤ[x]/𝔽ₚ[x] 因式分解、代数数域、有理函数
数值积分rust-numeric-integration.mdVegas 蒙特卡洛、integrate_1d

快速开始

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

fn main() {
    // 1. 创建 arena 和表达式上下文
    let arena = Arena::new();
    let ctx = AtomArena::new(&arena);

    // 2. 构造表达式 sin(x)
    let x = ctx.var("x");
    let expr = ctx.fun("sin", &[x]);

    // 3. 符号微分(diff 接受 Symbol 作为求导变量)
    let deriv = diff(&ctx, expr, Symbol::new("x"));
    assert_eq!(deriv.to_string(), "cos(x)");

    // 4. 化简(空规则集保持表达式不变)
    let simplified = simplify(&ctx, expr, &[], 100);
    assert_eq!(simplified.to_string(), "sin(x)");

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

参见