Answers:
子类型和从属类型是正交的概念。
子类型化通常配备了包含的概念,因此一种类型的表达可以出现在期望超类型的地方。
子类型化更容易决定,在实现中更易于管理。
依赖类型更具表现力。但是,如果您想将一个组也视为一个monoid,那么您需要一个包含的概念来忘记额外的结构。通常,例如在使用Coq时,会产生琐碎的证明义务来应对这种强制性,因此在实践中,子类型化可能不会添加任何内容。更重要的是要有将各种理论打包在一起以使其可重用的方法,例如在谈论群体时重用monoid的理论。Coq中的类型类是执行此类操作的最新创新。模块是一种较旧的方法。
如果您快速浏览一下“对子类型进行子类型化”,您会发现很多工作都在为子类型添加子类型,主要是在2000年左右。我认为元理论确实具有挑战性,因此在子类型中不会出现子类型化证明助手。
但是,我对类型理论作为数学的基础比对编程语言的基础更感兴趣,我应该特别注意子类型化吗?
子类型化为您提供的另一件事情是,子类化意味着拥有许多一致性属性。从属类型理论还需要证明无关紧要的概念来对子类型可以做的所有事情建模。例如,在从属类型理论中,您可以近似形成具有从属记录的子集:
。
一旦有了这些,就可以系统地将子类型化为从属类型理论。有关在依赖类型理论中添加子类型的示例(在本例中为Twelf),请参见William Lovas的论文。