[定理]
算法完备性
[定理] 算法完备性
取
Rust 类型检查算法
type_of
type_of
,类型关系采用
[定义] 类型与类型判断
。Rust 的
Bool
Bool
、
Nat
Nat
分别对应 、。对任意项 和类型 :若 ,则
type_of(t) = Some(T)
type_of(t) = Some(T)
。
证明
对 的推导归纳,按最后一步的规则分情形。
- T-True、T-False、T-Zero:直接计算
type_oftype_of即得。 - T-Succ:前提 。由
归纳假设
type_of(t1) = Some(Nat)type_of(t1) = Some(Nat),于是SuccSucc分支返回Some(Nat)Some(Nat)。T-Pred、T-IsZero 同理。 - T-If:三个前提由
归纳假设
给出
type_oftype_of在三个子项上分别返回BoolBool、TT、TT。代入IfIf分支:ta = Tta = T,两个比较都成立,返回Some(T)Some(T)。
∎