类型推断与验证实验及弱穆勒树自动机接受条件研究
类型推断与验证
在类型系统中,类型验证可用于扩展类型推断算法,以处理用户定义的类型规范。为简化讨论,我们主要关注递归函数的构造,因为对于该构造,归纳验证并非简单的推断与比较的组合。
Damas - Milner类型系统中,递归的经典类型规则如下:
[
\frac{H[f \leftarrow \tau] \vdash \lambda x.e \Rightarrow \tau}{H \vdash \mu f.\lambda x.e \Rightarrow \tau}
]
其中,$H$ 是类型环境,$\tau$ 是带变量的单类型。此规则表明 $\tau$ 是与递归定义相关的函数的不动点。在进行类型推断时,需设计算法来计算 $\tau$;若用户提供了 $\tau$ 作为类型声明(规范),则该规则可直接用于类型检查,修改后的规则为:
[
\frac{H[f \leftarrow \tau] \vdash \lambda x.e \Rightarrow \tau}{H \vdash (\mu f.\lambda x.e : \tau) \Rightarrow \tau}
]
然而,在OCAML实现中,ML的类型检查算法并未实际使用该规则。例如:
# let rec (f: ('a -> 'a) -> ('a -> 'b) -> int -> 'a -> 'b) =
function f1 -> function g -> function n -&
超级会员免费看
订阅专栏 解锁全文
875

被折叠的 条评论
为什么被折叠?



