【发布时间】:2011-10-05 22:51:41
【问题描述】:
This paper 确定 System F 中的类型推断(在论文中称为“可类型性”)是不可判定的。我从未听说过在其他地方提到的是该论文的第二个结果,即 F 中的“类型检查”也是不可判定的。这里“类型检查”问题的意思是:给定一个术语t,类型T 和类型环境A,判断A ⊢ t : T 是否可导出?这个问题是不可判定的(并且它等同于可打字性的问题)令我惊讶,因为直觉上它似乎应该是一个更容易回答的问题。
但无论如何,鉴于 Haskell 基于 System F(或 F-omega,甚至),关于类型检查的结果似乎表明有一个 Haskell 术语 t 和类型 T 这样编译器将无法确定t :: T 是否有效。如果是这样的话,我很好奇这样的术语和类型是什么......如果不是这样,我误解了什么?
大概理解这篇论文会导致一个建设性的答案,但我有点超出我的深度:)
【问题讨论】:
-
Haskell 使用名为 [Hindley Milner][en.wikipedia.org/wiki/Hindley–Milner] 的 System F resitricted 版本。 AFAIK 可以推断出任何具有类型的表达式的类型。让类型检查变得不可能是打开足够多奇怪的扩展的问题。
-
@FUZxxl:我相信通过仅启用
RankNTypes和ImpredicativeTypes将拥有System F 的全部功能(还有一些,因为Haskell 还支持对类型运算符的抽象)。跨度> -
这就是我试图说的“使类型检查成为不可能是打开足够多奇怪的扩展的问题。”
标签: haskell typechecking type-theory