Haskell中非整数的整数居民

时间:2011-12-12 12:44:38

标签: haskell types integer infinity

Haskell中定义为data Peano = Zero | Succ Peano的Peano自然数是非常奇怪的野兽:除了普通自然和底值之外,其中还有一个“无限整数”inf = Succ inf

还有Peano类型的其他居民吗?这个无限号码有名字吗?

2 个答案:

答案 0 :(得分:17)

他们并不奇怪,他们只是 coinductive 自然。撇开issue的问题,我们可以将此处的自然数类型定义为应用于自然数的ZeroSucc。归纳定义将假设一个明确定义的结束,即任何数字都从Zero构造函数开始。共同定义仅表示给定任何自然数,它将为Zero或我们可以移除外Succ以获得另一个自然数。

看似微妙的区别在于,共同定义包括无穷无尽的Succ构造函数,它们实际上是无穷大的真实表现。这是有意义的,因为虽然归纳定义是关于确保递归将达到明确定义的基本情况,但是共同定义是关于确保总是有一个明确定义的下一步可用。

由于数据构造函数是懒惰的,因此在Haskell中,coinductive解释很方便并且在某些方面是强制性的。

所以,这个无限数字实际上是无穷大,或ω,如果你需要指定哪个无穷大,正如Daniel Fischer所说。它只是一个共鸣无限,就像更常见的无限列表一样。

如果你通过他们的教会编码来考虑自然数,有限数字意味着“迭代这个函数N次”; ω表示“无限期地迭代此函数”。

答案 1 :(得分:10)

嗯,有Succ _|_Succ (Succ _|_)等等。但是,您可能已将这些包含在“最低价值”中。 inf = Succ inf通常称为infinityomega(作为自然数的序数)。