偏序集上子类型可满足性的复杂度分析
1. 引言
在众多编程语言中,子类型化是一种常见的特性。在面向对象语言的子类化机制中,子类型化尤为常见。此外,“类型强制转换”的概念也很普遍,例如整数自动转换为浮点数。
自Mitchell的原始研究成果以来,子类型系统的类型检查和类型推断得到了广泛的研究。如今,研究这些系统的主要动机是为了设计更高级的类型化语言以及基于子类型的程序分析算法。
子类型系统通常涉及子类型约束,即形如 $t_1 \leq t_2$ 的不等式,用于表示类型 $t_1$ 是类型 $t_2$ 的子类型。例如,约束 $int \leq real$ 意味着在任何需要浮点数的地方,都可以使用整数。除了类型常量,子类型约束还可能包含类型变量和类型构造函数,如 $int \times x \leq x \times real$ 等价于 $int \leq x \leq real$。
类型变量通常被解释为由类型常量和类型构造函数构建的树。如果允许递归类型,这些树可以是无限的。子类型关系有两种选择:在结构子类型系统中,只有形状相同的类型才相关;在非结构子类型系统中,存在一个“最小”类型 $\bot$ 和一个“最大”类型 $\top$,它们可以与任意形状的类型相关。
文献中研究了子类型约束的三个逻辑问题:可满足性、蕴含性和一阶有效性。如果类型常量构成一个格,那么子类型可满足性问题已经得到很好的理解。然而,对于一般的偏序集(posets),目前只有部分答案。Tiuryn 和 Wand 证明了递归结构可满足性问题在 DEXPTIME 内,Tiuryn 证明了有限结构可满足性问题是 PSPACE 难的,随后 Frey 证明它在 PSPACE 内,因此是 P