系统F无法计算哪些功能?


28

有关图灵完整性的维基百科文章中,它指出:

未类型化的lambda演算是图灵完备的,但包括系统F在内的许多类型的lambda演算不是。类型化系统的价值在于它们能够代表最典型的计算机程序并同时检测更多错误。

系统F无法计算的总可计算函数的示例是什么?

另外,由于hindley-milner是:

系统F的限制

由于以下事实:

类型检查对于System F的Curry样式变体是不确定的,也就是说,缺少显式的键入注释。

这是否意味着在Hindley-Milner类型系统下的lambda演算还没有完全完善?

如果是这样,由于haskell显然是图灵完成的,并且我们知道它是lambda演算和hindley-milner类型系统的基础,因此为了使haskell图灵完成,添加了lambda演算中不存在的哪些功能?



使Haskell完成访问的功能示例是本机代码接口。
Trismegistos 2015年

@cody感谢您的评论。我对系统T不熟悉。我是否假设这里提到的系统T对吗?系统T如何与系统F进行比较和对比?
Mike HR

注意,在进行谷歌搜索时,system T vs. system F我发现了一些可以回答我最终的子问题的内容,措辞如下:haskell如何为系统F添加图灵完备性
Mike HR

1
我认为@Trismegistos提出了一个有趣的哲学问题:Haskell到底是什么,边界在哪里?
马丁·伯杰

Answers:


45

系统表现力很强。由于证明了芝这里,的类型的功能ÑÑ(其中Ñ被定义为X X X X X)是完全相同的定义功能(ÑÑ)在二阶了Heyting算术ħ 2。请注意,这与在二阶Peano算法中定义的功能相同。FNNNX. X(XX)XNNHA2

您可能需要检查“ 证明和类型”作为更易读的参考。请注意,这意味着可以在系统F中编写许多程序,从Ackermann函数到Gödel系统解释器。对于任何总的编程语言(在某些较温和的条件下),系统F都无法实现自解释程序,即函数e v a lNN,它将系统Ft的代码作为输入并返回( a)t的范式TFeval:NNtFt。证明涉及对角线化技巧的一种变体,用于不确定停止问题。安德烈(Andrej)在这里对此进行了精美的解释。

要回答您的其他问题:Hindley-Milner(HM)语言所基于的微积分也不是图灵完整的。实际上,它比系统F弱得多,在表达上更接近简单类型的λ-演算。λF λ

Haskell确实是图灵完整的。启用此功能(尽管还有其他功能)的最独特功能是存在不受限制的递归:任何程序(功能)的定义都可以引用程序本身。这类似于添加组合器,例如在PCF的定义中完成的操作,该定义简单,但保留了使用Y组合器的图灵完备性。YY

请注意,还有其他功能可以使Haskell Turing变得完整,但是通常不将其视为核心语言的一部分,例如,对函数的引用,不受限制的数据类型等。


1
哇,这是一个了不起的答案,可以完美地回答所有问题。谢谢!
Mike HR

“至于所有编程语言……”这都不是正确的。根据我的理解,有些总语言的自解释器可以通过排除非终止类型错误的程序来工作。参见本文
jmite

如@jmite所述,我的主张是正确的。该文件在相关讨论中提到,Andrej在其博客上有一些后续评论:math.andrej.com/2016/01/04/…–
cody

11

说Haskell的打字系统是“ hinley-milner打字系统”有点误导。Haskell的类型更强大,其中包括种类更高级的类型。确实,打字系统非常强大,您可以在打字系统中嵌入图灵完整的编程语言,请参见此处。Cody提到了其他一些原因,这并不是Haskell拥有能力的唯一原因。


谢谢。我对印度教徒米尔纳的主要接触是通过haskell进行的,所以我想我可能已经假定较高种类的类型是其中的一部分。印度斯坦利·米尔纳是否只是在指类型推论(因此很可能是算法W)?还是更多?我知道在lambda演算中有其数学基础,我只是想了解haskell强大的类型系统与“ hindley-milner类型系统”的最小实现之间的逻辑边界在哪里。
Mike HR

注意:如果有人对haskell类型系统的功能感兴趣,我会推荐Edward Kmett的有关hask的视频,该视频使用haskell类型系统深入(深入)类别理论。
Mike HR

1
λW
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.