# 架构与不变量

1. **模型边界**：Reaction 持有复制的整数输入/输出与非负常数；Network 复制物种和通道数组，约束维度、阶数和体积。公共结构字段私有，导出数组均复制。
2. **语义层**：rates/jacobian/stoichiometry 分开浓度、多项式导数和下降阶乘事件率。零因子预扫，正中间值下溢报错。conservation 是浮点左零空间及残差，不是整数不变量证明。
3. **轨迹层**：Trace 是连续分段线性样本，Path 是右连续分子事件路径；不能互换插值。SSA 保留 null 通道和 horizon，没有事件也有终点生存项。带通道路径导入必须按网络重放；似然也重放对比，不能仅靠维度。
4. **统计层**：Moments 用 Welford 与 parallel merge，所有检查后才提交状态；ensemble 复用事件引擎并在线聚合，不保存所有路径。seed mixer 不证明随机流独立。
5. **有限概率层**：用户枚举闭合状态；缺正率后继拒绝。行向量生成元保留平行边，消去 null 事件。uniformization 分段控制 Poisson 均值；尾项以几何上界和当前输入质量加权，累计报出，不重新归一化。
6. **交换与资源边界**：JSON 先做文本/深度预算和解码后重复 key 检测，再由标准解析器检查语法，再做精确 schema。Path JSON 重放；CSV 用数字索引，不带用户物种文本。所有资源策略公开在 README。

核心文件位于根目录，cmd 只用于可运行工作流与独立参考输出；scripts/reference.py 在算法表达和随机数计算上独立于核心实现，避免自证循环。
