# 跨账本时间关联与条件覆盖

## 跨账本时间关联

`Ledger::join_timeline(other, left_key, right_key, bounds, left_known,
right_known, mode~, max_segments~)` 使用两个独立的知识时间截点，对有效时间
求交。`BothAssigned` 要求两侧均有值，`LeftAssigned` 保留左侧有值的区间，
`AllStates` 保留全部状态。`JoinedSegment` 保留双方原始 `Revision`；未声明空隙
与显式撤回仍可区分。该接口不比较业务值、不合并两份账本的修订编号。

用途包括跨部门价格与授权核对、合同与资产归属关联、配置与发布记录对账。
与逐时刻采样相比，结果基于真实边界，不遗漏短区间，也不需要对最大时间加一。
在双方已有时间线长度为 L、R 时，关联增加 O(L+R) 时间与 O(L+R) 输出空间；
生成时间线的原有开销另计。默认每侧及输出最多 4096 段，超限明确失败。

## 值敏感的多条件覆盖

`Ledger::matching_conditions(conditions, bounds, known_at, max_conditions~,
max_segments~, max_input_segments~)` 返回满足所有 `(key, SpanFilter)` 条件的
最大连续有效时间段。支持 `Assigned`、`Equals`、`Withdrawn`、`Unclaimed`；
同键的多个条件取 AND。空条件集返回整个查询区间；即使条件矛盾，也检查非法键。
相邻匹配片段会合并，所以返回覆盖范围而非逐修订的证明；需要来源时使用时间关联。

用途包括多资质同时有效、价格与供应状态共同满足、历史访问资格计算。
默认条件数 64（最大 1024）、输入片段 16384、对齐事实单元最多 1048576。
在已有对齐行数 S、条件数 C 时，过滤增加 O(S*C) 时间、O(S) 输出空间；
对齐的时间线生成与边界排序开销另计。预算防止多键边界扩张耗尽内存。

## 验证范围

`relational_time_wbtest.mbt` 检查独立截点、撤回与空隙、开放上界与最大时间、
重复/矛盾条件、非法参数，并以逐点查询作为生成数据的交叉验证。

## 本地复现

要求 moonc >= 0.10.16。在本地源码目录执行：

```sh
moon update
python tools/verify_toolchain.py
moon check --target all --deny-warn
moon build --target all --deny-warn
moon test --target all --deny-warn
moon run examples/relational_time --target wasm-gc --deny-warn
moon run examples/relational_time --target native --deny-warn
```

Windows 如遇 OCaml 扩展路径问题，使用仓库提供的 `tools/windows/moon.ps1`
代替 `moon`；没有该脚本的仓库建议在 Linux/WSL 环境运行上述命令。
这些 API 已纳入 0.3.0，可通过 `moon add yyyt0807/moonbitemporal@0.3.0`
安装取得。全部示例为可运行断言，不代表已有生产部署。
