[引理] 归约使大小严格下降

采用 [定义] 大小与深度 的大小函数与 [定义] 一步归约 的十条规则。若 𝑡⟶𝑡 ′,则 size( 𝑡 ′ )<size( 𝑡 )。因此,从 𝑡 出发的任何归约链至多有 size( 𝑡 )−1 步,不存在无限归约链。

证明

对 𝑡⟶𝑡 ′ 作规则归纳( [定理] 规则归纳法(rule induction) ),按最后一步的规则分情形。

  • E-IfTrue、E-IfFalse:整项的大小是 1+size( 𝑡 1 )+size( 𝑡 2 )+size( 𝑡 3 ),结果只是被选中的一个分支,严格更小。
  • E-PredZero、E-IsZeroZero:size( pred 0 )=size( iszero 0 )=2,结果 0 或 true 的大小为 1。
  • E-PredSucc: size(pred (succ nv)) = size(nv) + 2,结果是 nv。
  • E-IsZeroSucc: size(iszero (succ nv)) = size(nv) + 2 ≥ 3,结果 false 的大小为 1。
  • E-Succ、E-Pred、E-IsZero:前提 𝑡 1⟶𝑡 1 ′,由 归纳假设 size( 𝑡 1 ′ )<size( 𝑡 1 )。两边都只多包一层同一个一元节点,严格不等式仍成立。
  • E-If:前提 𝑡 1⟶𝑡 1 ′,由 归纳假设 条件部分变小,另两个分支与根节点不变,整项严格变小。

对步数:设 𝑡=𝑡 0⟶𝑡 1⟶⋯⟶𝑡 𝑛。每一步大小至少减 1,所以 size( 𝑡 𝑛 )≤size( 𝑡 )−𝑛。大小至少为 1,故 𝑛≤size( 𝑡 )−1。

∎

这条引理说明归约链有限。结合 [定理] 求值器与一步归约一致 ,在 [附注] 算术语言形式化的未展开前提 的资源与基础操作假设下,反复调用 Rust 求值器 step step 会在有限次返回后得到 None None 。测试实现时不能预先假定它恰好实现了规则,仍应检查每个返回后继是否更小。这条引理不说明链的终点是值还是受阻的项;那个问题由类型安全回答。

References

[附注] 算术语言形式化的未展开前提 [unexamined-assumptions]

[定义] 一步归约 [one-step-reduction]

[] 确定性:从规则归纳到求值器 [determinism]

[定义] 归纳假设 [induction-hypothesis]

[定理] 规则归纳法(rule induction) [induction-on-derivations]

[定理] 求值器与一步归约一致 [evaluator-faithfulness]

[定义] 大小与深度 [size-and-depth]

Backlinks

Based on Typsite