Haskell中整数的非整数居民

Haskell中整数的非整数居民,haskell,types,integer,infinity,Haskell,Types,Integer,Infinity,Haskell中定义为data Peano=Zero | succpeano的Peano自然数是非常奇怪的野兽:除了普通的自然数和底值之外,还有一个“无限整数”inf=succinf 是否有Peano类型的其他居民?这个无穷大的数字有名字吗?好吧,有成功| | ,成功(成功| | |)等等。不过,你可能已经把它们包括在“底部值”中了inf=Succ-inf通常被称为infinity或omega(作为自然数的序数)。它们并不奇怪,它们只是自然的共导。撇开安全问题不谈⊥, 我们可以在这里将自然数类型

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


是否有
Peano
类型的其他居民?这个无穷大的数字有名字吗?

好吧,有
成功| | 
成功(成功| | |)
等等。不过,你可能已经把它们包括在“底部值”中了
inf=Succ-inf
通常被称为
infinity
omega
(作为自然数的序数)。

它们并不奇怪,它们只是自然的共导。撇开安全问题不谈⊥, 我们可以在这里将自然数类型定义为由应用于自然数的
Zero
Succ
组成。归纳定义将假定一个定义明确的端点,即任何数字都从
零开始。共导定义只是说,给定任何自然数,它要么是
0
,要么我们可以删除外部的
Succ
,以获得另一个自然数

表面上细微的区别在于,共导定义包含一系列无尽的
Succ
构造函数,这实际上是无限的真实表示。这是有意义的,因为归纳定义是关于确保递归将达到一个定义良好的基本情况,而共归纳定义是关于确保总是有一个定义良好的下一步可用

在Haskell中,由于数据构造函数的惰性,共导解释很方便,并且在某些方面是必须的

所以,这个无穷数实际上是无穷大,或者ω,如果你需要指定哪个无穷大,就像丹尼尔·菲舍尔说的。这只是一个共导无限,很像是更常见的无限列表


如果你认为自然数是通过church编码的,那么有限数意味着“将这个函数迭代N次”;ω的意思是“无限期地迭代这个函数”。

这通常被称为“扩展自然数”,它经常以一种非常简单的方式出现:,@sclv:作为Haskell程序员,我最喜欢的事情是人们说某些东西“简单”,然后用nLab的链接来说明它,哈哈。但是,是的,我以前读过这些,它们很有趣。哈哈,我想我有一个“直截了当”的移动目标,我用它来表示“我实际上可以挥手解释一下”,就像人们用“琐碎”来表示“如果有足够的时间,我肯定我可以证明这一点。”@sclv:我喜欢费曼对“琐碎”的定义基于对数学学生的观察,这大致是“任何已经被证明或显然可以通过一些努力被证明的东西”。“平凡”的反义词可能是“一个开放的问题”。但既然
inf=succinf
,它就不能是自然数的序号,对吗?它将同时是ω和ω+1。
inf
与aleph null不是更相似吗?N的基数取决于您是将
succn
解释为
N+1
还是
1+N
1+ω=ω/=ω+1