为什么用自然而不是整数?


28

我对自然数为何受到编程语言理论和类型理论书籍(例如J. Mitchell,编程语言基础和B. Pierce,类型与编程语言)的作者如此钟爱的原因感兴趣。简单类型的lambda微积分的描述,尤其是PCF编程语言,通常是基于Nat和Bool的。对于使用和教学通用工业PL的人来说,用整数代替自然数更自然。您能提及PL理论家偏爱nat的一些好理由吗?除此之外,它还不那么复杂。有任何根本原因还是仅仅是一种荣誉?

UPD对于所有关于自然的“基本性”的评论:我对所有这些很酷的东西都非常了解,但是我更希望看到一个示例,说明在PL理论的类型理论中拥有这些属性确实至关重要。例如,广泛提到的归纳法。当我们有任何一种逻辑(简单地键入LC就是这种逻辑)时,就像基本的一阶逻辑一样,我们确实使用归纳法,但是对派生树(在lambda中也有)进行归纳。

我的问题基本上来自行业人士,他们想要获得一些编程语言的基本理论。他们曾经在程序中使用整数,却没有具体的论据和对正在研究的理论(在本例中为类型论)的应用,为什么只用nat来学习语言,他们感到非常失望。


我想这不是一个研究水平的问题,尽管很有趣。
拉斐尔

4
不是,但这是一个大问题,我们确实接受。
Suresh Venkat 2010年

1
我想知道非负整数集是否可能由于自然值中不存在的0值的独特属性而比自然数甚至更基本。我也认为,这是基本的数字类型给出0的重要性选择数字计算机更有效
理查德·库克

我不理解您的UPD。自然比整数更基本,答案给出了为什么会这样的例子。
Radu GRIGore 2010年

回复:UPD。我不太确定为什么“行业人士”会“失望”。(我自己的职业生涯是在工业上度过的。)为什么有人会期望该理论应该是对他们已经熟悉的事物的明显扩展?业界很常见的某些事物,例如整数变量,是出于“历史原因”而不是深层次的理论原因,这是很常见的。
马克·哈曼

Answers:


24

简短的答案:自然是第一个极限序数。因此,它们在公理化集合论(例如,无穷公理是它们存在的断言)和逻辑中起着核心作用,并且PL理论家倾向于与逻辑学家分享基本的关注点。我们希望能够使用归纳原理来证明总体正确性,终止性和相似属性,并且自然是井然有序的(自然)选择。

不过,我不想暗示有限宽度的二进制整数不是那么酷的对象。它们是p-adics的表示,并允许我们在数论和组合论中使用幂级数方法。这意味着它们的重要性在算法学上比PL更加明显,因为这是我们开始更加关注复杂性而不是终止的时候。


20

自然是比整数更基本的概念。

归纳发生在自然数上,并且可以通过简单加一元逆算子从自然数导出整数。

我实际上会想问一个相反的问题:为什么早期的编程语言(和注册机)设计人员为什么在整数如此次要且很容易从自然派生时将整数作为基本数据类型呢?

我怀疑这仅仅是因为有一些很酷的二进制编码可以优雅地处理整数。;-)

想一想,您想多久忽略一次编程整数的负数范围,并考虑使脉冲具有无符号整数类型来恢复丢失的位。


5
另一个原因:如果您想要教堂数字之类的东西,则负整数将必须表示函数取反。因此,在这种情况下,整数在可计算双射函数的演算中更为自然。
Per Vognsen 2010年

@Per Vognsen:不知道您在那争论。但我认为可以肯定地说,大多数时候可计算双射函数的重要性不如任意可计算函数。;-)
Marc Hamann 2010年

毫无疑问,复数位于数字层次结构的顶部。自然数->整数->有理数->实数->复数比其他数更基本,因为它们具有“更精细”的代数性质。它们在科学中无处不在,但在数学的“基础”中却明显缺席。因此,对“基本”整数或自然数的答案实际上取决于您要求的人:算法学家或代数学家。
Tegiri Nenashi 2011年

由于这是一个TCS网站,我认为我们可以安全地对待计算机科学的观点。;-)通过计算,该层次结构是渐进式的:每个新条目实际上都是在前一个条目的基础上构建的。由于“基本”通常指的是基础内容,因此我认为自然归结是授予该头衔的正确方法。
马克·哈曼

17

Z之间存在可计算的双射。因此,仅使用自然数就足以推理出可计算性之类,而始终知道结果会泛化为整数(以及有理数和所有其他递归可枚举的集合)就足够了。NZ

仅凭自然推理是很方便的,因为您有归纳法,并且是一个自然顺序≤的有充分依据的集合。后者尤其重要,因为可以在终止证明中使用该工具。虽然您可以在Z上定义良好的顺序,但它却不方便,因为它与通常的顺序不匹配。NZ


11

另一个原因(与已经给出的原因有关,但是这个答案确实增加了新的信息)是自然的非常简单,无商的构造,并且伴随着很好的归纳原理(如前所述)。 。关于整数的无商构造很难解决

我在需要高度保证的地方进行的编程越多,就越需要自然,而我发现只有预定义的整数对我来说确实很痛苦。


您知道,有些语言具有自然的基本类型。
拉斐尔

@Raphael:我知道。但是我不喜欢的那些(即Haskell和OCaml)。我还没有准备好在Agda或Coq中开始“编程”。
雅克·卡莱特

商有什么坏处?
大卫·哈里斯

3
商在语义上很棒。在实际计算和具体表示中,它们要难得多。在Coq,Isabelle,Agda(一般是类型理论)等中,有无数关于如何处理它们的论文。我只是假设,所有社区中的民俗知识是商以“现实”来应对只是一种痛苦。
雅克·卡莱特

2
我觉得这是最强的答案:自然是最简单的非平凡的归纳数据类型。一旦给出定义并证明自然数的简单属性,就为更复杂的归纳数据类型(如列表或树)铺平了道路。
科迪2012年

7

有没有充分的理由为什么PL理论家更喜欢自然而不是整数?有一些,但是在一本关于编程语言语义的教科书中,我认为没有必要这样做的技术原因。除了依赖类型系统之外,我无法想到在PL理论中对数据进行归纳很重要的任何地方。Mike GordonDavid SchmidtBob TennentJohn Reynolds的其他教科书则没有这样做。(而且,这些书可能更适合教那些关心通用工业PL的人!)

所以,在那里,你有证据证明它是没有必要的。实际上,我认为一本好的PL理论教科书应该以编程语言的原始类型为参数,并且以其他方式提出建议是令人误解的。


6

自然和布尔和对它们的操作可以以简单的方式在纯lambda演算中进行编码,即所谓的教堂数字(我猜是教堂布尔)。虽然显然可以做到,但尚不清楚如何对整数进行很好的编码。


我的意思是首先键入lambda演算。我在最高职位中提到的书籍课程就是以此为基础的。我猜想,如今无类型lambda在类型理论和PL理论中并不那么重要(我可能是错的,但这就是我在那些书中看到的。)。反正谢谢你!
Artem Pelenitsyn
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.