Haskell中定义为data Peano = Zero | Succ Peano
的Peano自然数是非常奇怪的野兽:除了普通自然和底值之外,其中还有一个“无限整数”inf = Succ inf
。
还有Peano
类型的其他居民吗?这个无限号码有名字吗?
答案 0 :(得分:17)
他们并不奇怪,他们只是 coinductive 自然。撇开issue的问题,我们可以将此处的自然数类型定义为应用于自然数的Zero
或Succ
。归纳定义将假设一个明确定义的结束,即任何数字都从Zero
构造函数开始。共同定义仅表示给定任何自然数,它将为Zero
或我们可以移除外Succ
以获得另一个自然数。
看似微妙的区别在于,共同定义包括无穷无尽的Succ
构造函数,它们实际上是无穷大的真实表现。这是有意义的,因为虽然归纳定义是关于确保递归将达到明确定义的基本情况,但是共同定义是关于确保总是有一个明确定义的下一步可用。
由于数据构造函数是懒惰的,因此在Haskell中,coinductive解释很方便并且在某些方面是强制性的。
所以,这个无限数字实际上是无穷大,或ω,如果你需要指定哪个无穷大,正如Daniel Fischer所说。它只是一个共鸣无限,就像更常见的无限列表一样。
如果你通过他们的教会编码来考虑自然数,有限数字意味着“迭代这个函数N次”; ω表示“无限期地迭代此函数”。
答案 1 :(得分:10)
嗯,有Succ _|_
,Succ (Succ _|_)
等等。但是,您可能已将这些包含在“最低价值”中。 inf = Succ inf
通常称为infinity
或omega
(作为自然数的序数)。