【发布时间】:2017-10-17 11:47:02
【问题描述】:
在Haskell中有一个术语undefined :: a,据说是一个术语
表示错误的计算或无限循环。由于undefined 有
输入a,他们可以创建任何语法正确的类型
应用类型替换。所以undefined 有任何类型,反之亦然:任何类型都有undefined,这是存在于任何类型内部的底部值(包括Void 类型,对吧?)。
Curry-Howard 同构给出的不仅仅是作为类型的命题,它还给出了作为定理的惯用类型。
将所有命题作为定理的逻辑系统称为不一致。
那么,Haskell 的类型系统同构于一个不一致的逻辑系统?
如果是这样,后果是什么?
如果 Haskell 的类型系统是一个不一致的证明系统,我们就不能信任它吗?
如果没有undefined,是否可以表示无限循环?
【问题讨论】:
-
好吧
undefined有时被定义为undefined = undefined... 所以它一直在评估.. 所以如果你想表示一个无限循环,你可以用f = f做到这一点。 -
undefined的评估是一个例外。我不认为无限循环和异常意味着相同。但是有人可以证明我错了! :) -
@RafaelCastro:Haskell 语义通常定义为“从上到下”(或“到 ⊥”,带有符号)——所有的“底部”,也就是说非终止,值被认为是相同的. (我们让
IO以通常的不纯方式区分它们。) -
@AntalSpector-Zabusky 感谢您提供的信息!
-
出于务实的原因,Haskell 编译器可以检测 一些 无限循环/递归并将它们转化为异常。这不会以任何方式影响库里-霍华德或任何其他理论。
标签: haskell types logic undefined