自然数的构建过程——从最基本的现实世界开始理解自然数
什么是自然数?
你可能会被小孩问:姐姐,什么是自然数?
妳告诉他,自然数就是0,1,2,3,4,5.... 不断地数下去,数到无穷大。
小孩说:哦,是这样。
这种不严格化的定义,已经可以让我们大概地辨认以下的数系,它看起来像自然数,但又好像不是:
- 例子1: 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5.... 想象一个神经病饭后一直在数自己左手的手指,每当数完一次他会激动地拍一下手,代表他又归于零,重头开始数。
- 例子2: 0, 1, 2, 3,4, 5,6,7,8,9.... 65531,65532,65533,65534, 65535, 0, 1,2...
- 例子3: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10,1,2,3 另一个神经病数脚指头,但他数到头之后他从1继续。
- 例子4:0, 0.5, 1, 1.5, 2, 2.5, 3, 3.5, 4, 4.5, 5, 5.5, 6, 6.5, 7, 7.5, 8, 8.5, 9, 9.5, 10, ....
我们看见例子1,例子3,我们说这只是自然数的一部分,它不是自然数,毕竟,少量的东西你可以拿手指比,要说清楚脚毛有多少的话,手指明显是不够的;
例子2 是一个计算机内存字长表示的非负整数的范围,如果规定槽位就是16字长,你说这也不能算是自然数系,还有比65535更大的数。
对于例4,这个太奇怪了,我们忽略 x.5的所有数,这个数系也能一直数下去,但是,那些 x.5 好像对于我们数数没有任何帮助,似乎是多余的东西。
自然数在数学领域内有严格的公理化定义。
以下两条公理符合人类最直观的观念(虽然符号0的出现经历了漫长的历史进程,但我们的语言里很早就有类似”无“,”空“之类的概念)
公理1. 0是自然数 ——首先,自然数里面得有一个 0 ,现实世界充满了很多从无到有的模型,况且在我们有限的视界里,好像万物总得有个起始点;
公理2. 如果n是自然数,那么n++(n的后继) 也是自然数
运用这两条公理,我们可以将数字不断地数下去,欠缺的是一个数字表示法,中国人用 “一”表示0的后继(0++), 罗马人的0++是“I”(这只是一个符号),然后用 ‘2’表示 1++,‘3’表示 (1++)++。当然我们最熟悉的记号是阿拉伯数字 ‘1’ 。从符号的角度,争论 0 是不是自然数意义不大,在公理化的体系中, 0 代表的只是自然数的“起点”,用 1 来表示也不影响其基本的性质。
![](https://img.haomeiwen.com/i4722219/00334eb142f54f8f.png)
经过一些初等数学训练的人会知道,阿拉伯数字可以表示非常大的数字,对于量级的增加只要不断在原有的数字后面加 0 就可以。
100000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000
这是一个天文数字,1后面有99个0,现在我们有更简便的记号,其意思颇有人类语言的意思(对这么多0的数字,我们不会傻呵呵地念yi ling ling ... 念99遍,我们会说,1后面跟着有99个0)——1×10e99
例子 2 可以看到,计算机体系里的整数和自然数不是对应的,我们知道 C++ 的整型,无论是短整型,还是 32 位整型,还是 64 位长整型,不断地自增,计算其后继,它终究总是会溢出,然后可能就要回到起点,设想一个 32 槽的位置上填满了 1,这个数的后继应该如何表示——你想让它继续保持自然数可以不断数下去的特征,必须要加一个槽,33 位,但是无论多少位,我们总是会填满,填满之后又要加槽,否则数字就会回归。
历史上确实也有过 15 位,24 位,48 位这种计算机(2 的幂次位的优势在于寻址可以快速进行移位运算, 所以基本上现在的计算机体系结构机器字长都是被设计成了 2 的幂次家族了),这个位数代表你打算放多少个槽来装数,槽位有限,表示的数的范围就必定有限。就像十进制,一旦规定了位数,它的最大数我们就知道了。
工程实践中,我们不能一直把槽位扩充下去,但是谁也无法预料人类到底会用多大槽,总是对应一个具体的现实模型,而理论不能允许任何模型产生不自恰,计算机系统采用 2 的幂次来界限整数,它在内存中对整数的表示总是有限的。如果只有上面的两条公理,我们会特别地得到一个跟计算机类似的自然数模型:数着数着会数回 0,16 位内存整型数 65535 的后继是 0,这个 0 到 65535 的数字系统完全符合这两条公理——可见这个定义还是不够严格的。
所以为了让自然数能有更加抽象、通用、严格的定义,必须补充一个特性,不能让它数着数着就数回起点——这该怎么说?
第三条公理:
3. 0 不是任何自然数的后继。
这样的话。保证了数字不会数回 0 ,但是还是不够,它还能数到一个非0的自然数起点。
设想一个单链表,一个节点代表一个自然数,如果只有公理1-3,可以构造一种可能的奇怪数系是这样的:
0->1->2->3->4->5->6->7->8->9->1
所以为了避免这种不好的情况,于是有第四条公理:
4. 不同的自然数的后继不相同。
上面的数系不满足第四条公理,因为 0 和 9 的后继都是 1。
看上去公理 1 到公理 4大致上可以描述我们脑海中自然数的样子,只是对于例子 4,这组奇怪的数字,竟然也满足四条公理——我们还需要一条规则将这种“病态”的例子排除在外
我们不能这样说:自然数不含小数,或者不含有理数,实数,其他数。
为什么?
虽然公理化定义数系是最近一百多年的事情,1889 年,皮亚诺在《用一种新方法陈述的算术原理》 Arithmetices principia: nova methodo expostita 对自然数进行公理化定义时,自然数的模糊概念已经在人们的脑海中存在了几千年,这个时间点虽然有理数,实数,复数也已经出现,但它们上没有类似的公理化定义,因此在这个算数系统中,实数,整数,有理数,复数都是属于尚未定义的对象。
也许小孩会问,姐姐,既然不能用尚未定义的东西做定义,那么可以用尚未定义的东西构造反例吗?
例子 4 使用了实数。对于这一点,确实是这样,这些“杂质”元素必须先定义,例子 4 才是完整正式的。然而非正式的例子已经足以启示我们,公理1-公理4不能保证自然数的“纯净”, 一旦将来其它杂质数系被构建,例子4的存在终将使这个不完善的系统遭遇打击。
第五条公理的提炼是很困难的。
我们还是直接介绍它:
公理5 . (数学归纳原理)
有一个关于自然数的性质 P,如果 P(0) 成立,如果能够从 P(n) 成立推导出 P(n++) 成立,那么性质 P对所有的自然数 n 都成立。
这个原理能够保证自然数的纯净度。为什么呢?
利用这个公理,我们可以罗列出 P(0), P(1), P(2), P(3),...,都是成立的,但是无法断定 P(0.5) 成立,我们说性质 P(0), P(1),..., P(n),... 这堆不断生成的性质成立即是对所有自然数成立,意味着在这个陈述里我们排除了一些杂质元素。说起来好像有点语言学和逻辑学学的味道。
有限和无限
什么是有限,什么是无限
我写下有限和无限的时候,它们首先是一组语言词汇,语言是人类头脑中某种“概念”的表达,同样地,在英文里也有 infinite 和 finite 对应的词汇。
让我们设想一下,有一个流氓的独裁者规定,从今往后,中文的有字要改成无字,违抗者斩,这就导致我们的教科书里不得不说 1 是无限的。 碰巧一个颇通圣意的翻译官,他把 finite 翻译成了无限,infinite 翻译成有限,这样一来,外国人和中国人沟通起来好像没什么不对劲。
英国小学生:1 是 finite 的, 不断数下去会趋向 infinite...
翻译: 1 是无限的,不断数下去会趋向有限
中国小学生: 废话,不仅是 1 是无限的,2 也是无限的,3 也是无限的,虽然自然数有有限个,但是每个自然数都是无限的
英国小学点头称是。
日常生活中,我们会把 1 这样的数叫做“有限”的,“2”也是有限的,“0”也是有限的,我们也会说自然数是数不完的,总是有更大的数。
这样想象一下,无限与有限的称谓只是用于刻画某种现实对象的词汇。我们说 1 是有限的,是在描述 1 的固有的特征,而它在词语里到底是被称作无限还是infinite,并无关系。独裁者的妄为即使得逞,他对数学大厦的基石也不会有丝毫动摇。
抛弃语言之义,我们回到自然数本身,用我们通常理解的有限的意义去理解自然数的有限,有限实际上刻画的是数本身的存在,只要我们能实际表出一个自然数,它就是存在的。有人学过微积分,可能会说无限也可以用符号 ∞ 表示出来,它难道不是自然数? —— 你无法在上文中定义的自然数体系里说清楚,这个美丽的 ∞ 符号到底是谁的后继,∞ -- ? 假设你定义的减减号是指自然数的前继,经过一番推理论证,你会发现,如果硬要说 ∞ 这个符号代表一个自然数的话,它还是和某个阿拉伯数字表示的自然数等价—— 我们姑且把这种"存在"就称作有限。
所有自然数都是有限的。
对于这一点,可以用数学归纳原理来推理。
我们知道 0 是有限的,如果自然数 n 也是有限的, n + 1可被表示出来,它也是有限的,根据公理5,所有自然数都是有限的。
与有限对应的是无限。无限不是自然数,因为每个自然数都是有限的。
理解无限,我们或许要说一说集合的基数才行。不正式的说,集合是一些不同的个体凑在一起组成的对象,比如自然数 1 和 2 凑在一起,组成集合 {1, 2} , 集合包含 ∅, 集合里的元素个数就是集合的大小,称为集合的基数。
如果一个集合的基数可以用自然数表示,那么它是有限大的。
自然数到底有多大?
自然数集合 的大小不能用自然数本身来表示,否则的话,假设存在自然数 m ,它表示自然数集合的个数,那么,0,1, 2, 3, ... , m 肯定会有一个成员不在自然数集合里。
那么应该怎么表示自然数集合的基数。是的,就是无限。通常语义上的无限,可以对应自然数的基数,在集合论理论中,康托用 一个符号表示自然数的基数,他念做 阿列夫零——当我们头脑中有了一个概念的时候,我们就可以创造符号来表示它——从这个意义来说,数学本身也是一种语言。
![](https://img.haomeiwen.com/i4722219/31a9e3fdaad8f8e1.png)
如果继续扩充数系,我们会得到一些看起来比自然数“大”得多的数系,比如整数,有理数,实数,它们的基数看起来至少比自然数“大”,我们是否又要另创符号来表示这些集合的基数?
自然数的运算: 加法
自然数的公理定义中,天然包含了一种运算:自增。每次自增得到自然数的后继,下一个自然数。
根据自增可以定义加法。
定义加法的几个步骤:
- 从具体到抽象的思考。 1 加 2 等于 3 , 在自然数的定义里, 自增我们还是使用 "++" 表示, 1 加 2 看成是 2 自增了 1次,即 2++,我们可以定义 1 加 2 是 2++;同样的 如果是 3 + 2,则可以看成 2 自增 3次,定义为 (((2++)++)++) = 5
- 从具体到一般,现在我们要定义任意两个自然数: m 加 n是什么?
首先我们从起始开始,定义, 0 加 m := m, 1 加 m = (0++) + m = m++
如果已经定义好, n 加 m ,那么归纳原因运用一下,
那么 (n++) 加 m = (n 加 m)++
以上,把中文“加”字换成一个数学符号,就把自然数的加法,用归纳原理做了一个定义:
m 是自然数, 定义 0 + m = m, 如果已定义 n + m, 那么 (n++)+m 定义成 (n + m) ++ ,即:
(n++)+m = (n + m)++
也可以这样归纳地定义 m + 0 = m, 如果 m + n已定义, 那么定义m + (n++) = (m + n)++。最终自然数加法最终构建成的形态没有什么不同
加法已具,看看这个规则能不能套上大部分人小学就已经熟悉的加法交换律。
首先,看看 这个事实是不是真的?
对于任意的自然数 n , n + 0 = 0?
千真万确,但是为什么? 不能这样说,显然 n + 0 = 0 + n(根据定义) = n,因为交换律在目前的上下文中尚未验证过。
还是想到归纳大法:
- P(0): 0 + 0 = 0,这是真的,由定义可知,
- 归纳假设 P(n) 成立,假设 n + 0 = n 是真的,
- 考察 n + 1 , 根据定义的加法规则,(n++) + 0 = (n + 0)++ = n++, 所以一切自然数,这条规则成立。
0 + n = n + 0 = 0, 看起来交换律的雏形已经有了。
那么到一般的情形: 对于任意的自然数 m,n,在以上定义的加法规则下,是否满足 m + n = n + m ?
还是使用归纳大法: 对于n = 0 的情形,上面的例子,已经说明 m + 0 = 0 + m, 假设 n + m = m + n成立,
那么对于 n++, (n++) + m = (n + m)++ [加法规则之定义] = (m + n)++ = (m++) + n = (m + n)++,
嗯,(n++) + m = (m+n)++ 距离我们想要的 m + (n++)还有一点差别。
这个 (m + n)++ 和 m + (n++) 是不是对任何的自然数 m, n是相等的?
如果 m = 0,
由加法的定义,n + 0 = n, 左边 = n++; 右边 = n + (0++) = (n + 0)++ (加法的定义) = n++, 所以两头都是n++ 是相等的。
如果 ,对任何自然数 m, (m + n)++ = m + (n++), 那么对于 m++,
((m++) + n)++ = ((m + n)++))++ 这是根据加法定义 , 再根据归纳假设,((m + n)++))++ = (m + (n++))++ = (m++) + (n++), 对一切的 自然数m成立。
既然 m + (n++) = (m + n)++是成立的,那么 ,把上面的式子,串起来就有 (n++) + m = m + (n++) 从而证实了交换律。这个过程中,反复使用了加法的定义规则和归纳原理。
结合律
对任何的自然数 a, b, c, a + (b + c) = (a + b) + c,
对 a 进行归纳:
如果 a = 0, a + (b + c) = 0 + (b + c) = b + c = (0 + b) + c = (a + b) + c, 结合律成立
设 a + (b + c) = (a + b) + c
那么 ((a++) + b) + c = ((a + b)++) + c = ((a + b) + c)++ = (a + (b + c))++ = (a++) + (b + c) 对 a++也是成立
消去律
对任何的自然数 如果 a + b = a + c, 那么 b = c, 因为交换律的成立,又可以写成 如果 b + a = c + a , 那么 b = c
说清楚这个事实,仍然是归纳大法:
设 a = 0, 那么 0 + b = b, 0 + c = c, 因此 0 + b = 0 + c ,蕴含了 b = c
如果 对于a 消去律成立,来看 a++的情形。换言之,要证明:
(a++) + b = (a++) + c 蕴含着 b = c;
因为,根据加法的定义, (a++) + b = (a + b)++, (a++) + c = (a + c)++,
(a++) + b = (a++) + c, 即 (a + b)++ = (a + c)++,由第四条公理,不同自然数的后继不相等,这个等式蕴含了 a + b = a + c, 由归纳假设,即知, b = c。
以上一些草草的推理,也许不太严格,大概绘制了一个从无到有构建自然数及其自然数的加法运算的过程。类似于造建一个房屋,从地基开始,逐渐往上堆积,由我们的生活直观,提炼出公理化定义,然后依照公理系统定义了加法运算,并陈述了它的一些典型性质。
这是现代数学的基本方式,我们可以继续根据已有的东西,构建自然数的乘法。最后完整得到一个基于公理系统的逻辑严密的理论系统,它就可以应用于计算机的正整数,数组下标,一些序场景,以及计数等具体的现实模型中。
![](https://img.haomeiwen.com/i4722219/4fbb8afca047911b.png)
问题:
- 自然数的公理化定义有没有别的方式?不同方式构建的自然数系会不会有本质的不同?
- 怎么定义自然数的乘法?