Theorem. 算法可靠性

取 Rust 类型检查算法 type_of type_of , 类型关系采用 类型与类型判断 . 实现论证采用 算术语言形式化的未展开前提 的资源与基础操作假设; Rust 的 Bool Bool 、 Nat Nat 分别对应 Bool、Nat. 对任意项 𝑡 和类型 𝑇:若 type_of(t) = Some(T) type_of(t) = Some(T) ,则 𝑡:𝑇.

Proof.

对 𝑡 结构归纳( 归纳证明的写法 ). 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 的三个前提.

∎