[引理]
归约使大小严格下降
[引理] 归约使大小严格下降
采用 [定义] 大小与深度 的大小函数与 [定义] 一步归约 的十条规则。若 ,则 。因此,从 出发的任何归约链至多有 步,不存在无限归约链。
证明
对 作规则归纳( [定理] 规则归纳法(rule induction) ),按最后一步的规则分情形。
- E-IfTrue、E-IfFalse:整项的大小是 ,结果只是被选中的一个分支,严格更小。
- E-PredZero、E-IsZeroZero:,结果 或 的大小为 。
- E-PredSucc: size(pred (succ nv)) = size(nv) + 2,结果是 nv。
- E-IsZeroSucc: size(iszero (succ nv)) = size(nv) + 2 ≥ 3,结果 的大小为 。
- E-Succ、E-Pred、E-IsZero:前提 ,由 归纳假设 。两边都只多包一层同一个一元节点,严格不等式仍成立。
- E-If:前提 ,由 归纳假设 条件部分变小,另两个分支与根节点不变,整项严格变小。
对步数:设 。每一步大小至少减 ,所以 。大小至少为 ,故 。
∎
这条引理说明归约链有限。结合
[定理] 求值器与一步归约一致
,在
[附注] 算术语言形式化的未展开前提
的资源与基础操作假设下,反复调用
Rust 求值器
step
step
会在有限次返回后得到
None
None
。测试实现时不能预先假定它恰好实现了规则,仍应检查每个返回后继是否更小。这条引理不说明链的终点是值还是受阻的项;那个问题由类型安全回答。