Expand description
cas 表达式层(P0-M1):arena + hash-consing、规范形构造、确定性全序。
§核心不变量
- 规范形即身份:构造经 intern 表去重,同一 Context 内结构相等 ⇔
索引相等(
Expr::raw_id相同),相等性 O(1)。 - 构造即规范:
Add/Mul在构造器内完成扁平化、全序排序、精确数值 折叠、同类项/同底幂合并;任何时刻取出的Expr都是规范形。 - 确定性:全序见 [
order] 模块文档(ORDER_VERSION = 1);全库哈希 用固定键(禁RandomState),哈希迭代不进入输出。 - 浮点边界:Float 仅作字面量(值恒非负,负号由系数 -1 携带),
不参与任何算术折叠;
-0.0归一为0.0;NaN 拒绝。
arena 只增不减(P0 不回收,P4 评估压缩);Context 按问题作用域创建。
详见 cas/DESIGN.md D1/D6。
Macros§
- sym
- 批量声明符号:
let (x, y, z) = sym!(&ctx, x, y, z);(单个名字直接返回 Expr)。
Structs§
- Assumptions
- 假设位集(u16;位序与
Predicate::bit一致)。恒存闭包后的形态。 - CasError
monomial_coeffs的错误。- Context
- 表达式构造与求值的宿主。按问题作用域创建;
Clone得到共享同一 arena 的另一个入口(不复制数据)。 - Expr
- 表达式句柄:arena 索引 + 共享上下文引用。
- Inner
- arena 与全部查表的宿主。类型名公开是为
IntoExpr等签名可提及; 字段全部 crate 私有,外部无法构造或窥视。 - Inspector
- 只读检视器:在
Context::inspect闭包内遍历表达式结构。 - Integer
- 任意精度整数,规范形见模块文档。
- Rational
- 任意精度有理数,规范形见模块文档。
Enums§
- CasError
Kind - 按幂次提取系数时的错误类别。
- Kind
- 节点的只读视图。复合节点给子节点索引,调用方继续经 Inspector 递归。
- Predicate
- 闭谓词集(D5:P0 固定 9 个)。
- Trinary
- 三值查询结果。