[定理]
算法可靠性
[定理] 算法可靠性
取
Rust 类型检查算法
type_of
type_of
,类型关系采用
[定义] 类型与类型判断
。Rust 的
Bool
Bool
、
Nat
Nat
分别对应 、。对任意项 和类型 :若
type_of(t) = Some(T)
type_of(t) = Some(T)
,则 。
证明
对 结构归纳(
[约定] 归纳证明的写法
)。
type_of
type_of
本身就是按项的形状分支的,所以每个情形对应一个分支。
- 常量:
TrueTrue、FalseFalse分支返回BoolBool,ZeroZero分支返回NatNat,分别是 T-True、T-False、T-Zero 的结论。 - :返回
Some(Nat)Some(Nat)只有一种可能,type_of(t1) = Some(Nat)type_of(t1) = Some(Nat)。由 归纳假设 ,用 T-Succ 得 。、 同理,分别用 T-Pred、T-IsZero。 - :返回
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)。三次使用 归纳假设 分别给出 、、( 即tata),正是 T-If 的三个前提。
∎