类型系统中的可见类型应用与高阶类型探索
1. 系统HMV基础概念
在类型检查的过程中,当涉及到 $\Gamma, a \vdash_{hmv} e : \tau$ 前提时,变量 $a$ 和 $b$ 可能会出现在 $\tau$ 中,这些变量被称为Skolem变量。Skolem化操作将 $\upsilon$ 转换为 $\tau$,实际上,在对表达式 $e$ 进行类型检查时,这些变量会形成新的类型常量。当表达式 $e$ 具有类型 $\tau$ 时,由于 $e$ 不能对Skolem变量 $a$、$b$ 做任何假设,所以可以为 $e$ 赋予类型 $\forall a, b. \tau$,这就是所谓的指定泛化。
系统HMV中的子类型关系 $\sigma_1 \leq_{hmv} \sigma_2$ 实现了子类型化。其直观含义是,如果 $\sigma_1 \leq_{hmv} \sigma_2$,那么类型为 $\sigma_1$ 的表达式可以在任何期望类型为 $\sigma_2$ 的地方使用。对于类型方案,$\sigma_1$ 比 $\sigma_2$ 更通用的标准概念就足够了,但对于指定多态类型,需要更加谨慎。
例如,假设表达式 $x @\tau_1 @\tau_2$ 类型检查通过,其中 $x$ 的类型为 $\forall a, b. \upsilon_1$。子类型规则允许将 $x$ 的类型任意更改为 $\upsilon$,只要 $\upsilon \leq_{hmv} \forall a, b. \upsilon_1$。因此,$\upsilon$ 必须具有 $\forall a, b. \upsilon_2$ 的形式,以确保 $x @\tau_1 @\tau_2$ 能继续用 $\tau_1
超级会员免费看
订阅专栏 解锁全文
715

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



