[定理] 算法可靠性

取 Rust 类型检查算法 type_of type_of ,类型关系采用 [定义] 类型与类型判断 。Rust 的 Bool Bool 、 Nat Nat 分别对应 Bool、Nat。对任意项 𝑡 和类型 𝑇:若 type_of(t) = Some(T) type_of(t) = Some(T) ,则 𝑡:𝑇。

证明

对 𝑡 结构归纳( [约定] 归纳证明的写法 )。 type_of type_of 本身就是按项的形状分支的,所以每个情形对应一个分支。

  • 常量: True True 、 False False 分支返回 Bool Bool , Zero Zero 分支返回 Nat Nat ,分别是 T-True、T-False、T-Zero 的结论。
  • succ 𝑡 1:返回 Some(Nat) Some(Nat) 只有一种可能, type_of(t1) = Some(Nat) type_of(t1) = Some(Nat) 。由 归纳假设 𝑡 1: Nat,用 T-Succ 得 succ 𝑡 1: Nat。pred、iszero 同理,分别用 T-Pred、T-IsZero。
  • if 𝑡 1 then 𝑡 2 else 𝑡 3:返回 Some(ta) Some(ta) 说明 type_of(c) = Some(Bool) type_of(c) = Some(Bool) 、 type_of(a) = Some(ta) type_of(a) = Some(ta) 、 type_of(b) = Some(ta) type_of(b) = Some(ta) 。三次使用 归纳假设 分别给出 𝑡 1: Bool、𝑡 2:𝑇、𝑡 3:𝑇(𝑇 即 ta ta ),正是 T-If 的三个前提。
∎

References

[] 规则与算法:可靠性与完备性 [rules-and-algorithms]

[定义] 类型与类型判断 [types-and-typing-judgments]

[约定] 归纳证明的写法 [writing-inductive-proofs]

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

Backlinks

Based on Typsite