是什么使得从属类型的类型推断无法确定?


42

我已经看到它提到依赖类型系统不是可推断的,而是可检查的。我想知道为什么有一个简单的解释,以及是否存在“依赖”的限制,即可以用值对类型进行索引,低于该类型可以进行推断,高于该类型则不能?


不确定,但是我的猜测是您可以使用推理来确定计算是否停止。
jmite 2013年

这与编程语言中的类型转换有关吗?这是一个开放的问题
-vzn

另一个原因是从属类型不接受主体类型。是什么类型?λa.a
jmite

Answers:


36

对于依赖类型理论的一个相当简单的版本,Gilles Dowek给出了在非空上下文中无法确定可键入性的证明:

吉尔斯Dowek,typability在不可判定演算λΠ

可以在这里找到。

首先,让我澄清一下该论文中证明的内容:他表明,在没有对抽象进行注释的从属演算中,无法确定在非空上下文中显示术语的可键入性。这两个假设都是必要的:在空的上下文中,可键入性降低为简单类型的演算(由Hindley-Milner决定),并且在抽象上带有注释时,通常的类型导向算法适用。λ

这个想法是将Post对应问题编码为类型转换问题,然后仔细构造一个可输入的术语,前提是这两个特定类型是可转换的。这利用了常态形式的形状的知识,该形式始终存在于该演算中。这篇文章简短且写得很好,因此在这里我将不做更多详细介绍。

现在,在像system-F这样的多态计算中,能够推断类型抽象和应用程序,并如上所述省略上的注释,将是一个不错的选择。这也是无法确定的,但是证明要困难得多,而且这个问题已经存在了很长时间。韦尔斯已解决此事:λ

系统F中的 JB Wells,可键入性和类型检查等效且不确定

可以在这里找到。我所知道的是,它减少了系统F中类型检查的半统一问题(这是通用量词的统一取模实例化,并且不确定)。

最后,很容易证明依赖家庭的居住状况是无法确定的:只需将Post问题编码为构造函数索引。是尼古拉斯·欧瑞(Nicolas Oury)制作的一些幻灯片,概述了这一论点。

至于是否存在“限制”,很大程度上取决于您要对依赖类型进行的处理,并且有许多近似值可以决定,或者至少足够接近才能使用。这些问题仍然是积极研究的一部分。

一种可能的途径是“优化类型”领域,其中类型相关性的表达语言被限制为允许可确定的检查,例如参见“ 液体类型”。即使在这些系统中,全类型推断也是可以决定的。


液体类型链接断开
michaelsnowden

@michaelsnowden固定!
科迪
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.