一直以来,可能我们绝大多数人都没有对自然数产生过疑问,自我们会说话起,长辈就教我们数数,1、2、3……直至上了小学,开始真正的学数学开始,也没有去思考与自然书有关的基础性质。在整个求学过程中,我们从自然数系N、整数系Z、有理数系Q以及实数系R,逐步去扩大认识。我们很容易根据自然数去推广整数,整数去推广有理数,但是这次应该要坐下来从源头开始认识一下自然数了。
我们是如何定义自然数的?其实这个问题并不好好回答,你回答1、2、3……这样的数就是自然数,其实是建立在根深蒂固的数学思维中,至少数字1、2、3只是一些定义好的阿拉伯数字,在阿拉伯数字之前,还有罗马数字,还有8进制等,你在学数学时,总是默认觉得a+b等于b+a,所以你的关于自然数写解释应该能让一个从未学过数学的人听懂。
首先,你要尝试吧你了解的所有与自然数相关的知识放在一边,同时忘记如何计数、求和、求乘积以及如何使用代数法则,我们不能使用那些更加高级的“技巧”(如代数法则),然后花费大量时间去证明那些“显然”的命题。也要避免循环论证(例如、用高等知识去证明比较初等的理论,然后又用处等理论去证明高等知识)。同时,你还要忘掉十进制,对于什么是自然数这个问题而言,十进制并不是必须的,自然数系同样可以用八进制甚至二进制来实现。
1.1 皮亚诺公里
皮亚诺公里给出了定义自然数的一种标准方法,其中皮亚诺是由朱塞佩皮亚诺(1858-1932)首次提出的。当然这并不是定义自然数的唯一方法,另一种方法是通过讨论有限集合的势给出的,比方说给定一个含有五个元素的集合,我们可以定义5来表示这个集合中含有的元素个数。通俗的来说,
定义1(非正式)自然数是集合
N
:
=
{
0
,
1
,
2
,
3
,
4
,
…
}
N:=\{0,1,2,3,4,\dots\}
N:={0,1,2,3,4,…}
的元素。其中,集合N是由从零开始无休止的往前进计数所得到的所有元素构成的集合。我们称N为自然数集。在有些教材中,自然数被定义为从一开始,而非从零开始,但这仅是一种符号约定而已我们定义集合
{
1
,
2
,
3
,
…
}
\{1,2,3,\dots\}
{1,2,3,…}为正整数集并记作
Z
+
Z^+
Z+,而不是自然数集。自然数有时也被称为完整数*。
从某种意义上来说,上述给定了什么是自然数这个问题的答案。自然数是集合 N N N中的元素,然而这个定义并非令我们满意,因为它带来了一个新的问题, N N N是什么?从零开始无休止的进行计数,看起来好像是对 N N N的一个足够直观的定义,但是这种叙述带来很多尚未回答的问题,因此它并不能被人们完全接受。
于是,为了定义自然数,我们将使用如下两个基本概念:数字0和增量运算。为了与现代计算机语言一致,我们用 N + + N++ N++来表示 N N N的增量或紧跟在 N N N之后的数字,例如 3 + + = 4 , ( 3 + + ) + + = 5 3++=4,(3++)++=5 3++=4,(3++)++=5等。这 n + + n++ n++,在计算机语言中的用法稍有不同,例如在C语言中, n + + n++ n++实际上是把 n n n重新复制为紧跟在 n n n之后的那个数字。但在数学中,我们在任何情况下对一个变量仅定义一次。这是因为如果对一个变量定义多次,经常会发生混淆的情况,很多命题可能对某变量原有的赋值为真,但对与该变量新的赋值而言就会变成假的。
于是,自然数
N
N
N应该由如下构成:
0
,
0
+
+
,
(
0
+
+
)
+
+
,
(
(
0
+
+
)
+
+
)
+
+
,
…
0,0++,(0++)++,((0++)++)++,\dots
0,0++,(0++)++,((0++)++)++,…
如果我们把自然数用上述对象表示,那么将得到关如下,关于0和增量运算
+
+
++
++的公理。
公理1 0是一个自然数。
公理2 如果
n
n
n是一个自然数,那么
n
+
+
n++
n++也是一个自然数。
于是我们就可以一直递推下去,我们能准确退出
(
0
+
+
)
+
+
(0++)++
(0++)++是一个自然数,但是这样一直用
+
+
++
++计数越来越不方便,所以我们引入我们更为熟悉的几号来表示这些数字。
定义2 我们定义1为数字
0
+
+
0++
0++,2为数字
(
0
+
+
)
+
+
(0++)++
(0++)++、3为数字
(
(
0
+
+
)
+
+
)
+
+
((0++)++)++
((0++)++)++等等。
于是,举例来说,我们 就有:
命题1 3是一个自然数
证明: 由公理1可知0是一个自然数,由公理2可知
0
+
+
=
1
0++=1
0++=1是一个自然数,再由公理2可知
1
+
+
=
2
1++=2
1++=2也是一个自然数,再次对2用公理2可知
2
+
+
=
3
2++=3
2++=3也是一个自然数。
目前似乎我们已经解决了自然数的定义问题,但并非如此。
考察一个由数字0、1、2、3所构成的数系。在这个数系中,增量运算将会从3绕回到0。用更准确的语言描述就是,
0
+
+
0++
0++等于1,
1
+
+
1++
1++等于2,
2
+
+
2++
2++等于3,但
3
+
+
3++
3++等于0。当人们尝试在计算机中存储一个自然数的时候,这种绕回的状况,在现实生活中也会发生。如果我们从零开始,反复运行增量运算,最终计算机将溢出其内存,并将数字归为零。
为了防止这种绕回情况,我们需要引入下面的公理:
公理3 0不紧跟在任何自然数之后。换言之,对任意一个自然数
n
,
n
+
+
≠
0
n,n++\neq0
n,n++=0均成立。
命题2 4不等于0
证明: 由定义知,
4
=
3
+
+
4=3++
4=3++,根据公理1和公理2可知,3是一个自然数,因此根据公理3可得,
3
+
+
≠
0
3++\neq0
3++=0,即
4
≠
0
4\neq0
4=0。
即便有了公理3解决了绕回问题,但是仍然有可能出现其它病态特性。考虑0、1、2、3、4这五个数构成的数系,增量运算在4处碰到了“天花板”。更准确的说 0 + + = 1 , 1 + + = 2 , 2 + + = 3 , 3 + + = 4 0++=1,1++=2,2++=3,3++=4 0++=1,1++=2,2++=3,3++=4,但令 4 + + = 4 4++=4 4++=4并不与前面3个公理矛盾,从而有可能能导致5=4,6=4等。为了阻止上述情况发生,我们假设下面的公理成立:
公理4 对于不同的自然数而言,紧跟他们之后的数字也一定是不同的。也就是,如果 m m m和 n n n都是自然数,且 m ≠ n m\neq n m=n,那么 n + + ≠ m + + n++\neq m++ n++=m++.等价说法为,如果 n + + = m + + n++=m++ n++=m++,那么一定有 m = n m=n m=n.
举例证明,我们得到
命题3 6不等于2.
证明: 为了推出矛盾,不妨假设6=2,成立,那么根据公理2有,
5
+
+
=
1
+
+
5++=1++
5++=1++,根据公理4,5=1,进而有
4
+
+
=
0
+
+
4++=0++
4++=0++,再次 根据公理4,4=0,这显然与之前的命题2矛盾。
从上面的命题上来说,似乎所有自然数都用该两两不相等,但是现在仍然存在这样一个问题:虽然根据公理1,公理2我们确定0,1,2,3,……是N中的不同元素,但是仍旧存在一个问题,可能还有不是上述形式的“流氓”元素存在于我们的数系当中。如:
N
:
=
{
0
,
0.5
,
1
,
1.5
,
2
,
2.5
,
…
}
N:=\{0,0.5,1,1.5,2,2.5,\dots\}
N:={0,0.5,1,1.5,2,2.5,…}
这个数系由整数和半整数共同构成,可以验证它能够满足我们前面给出的4条公理。
我们希望得到一个这样的公理,它告诉我们 N N N中所有的元素都可以通过对0进行增量运算得到,从而能够从 N N N中排除像0.5这样的元素。但是,若不利用我们正常式去定义的自然数,想要把我们所说的“通过……得到”这句话量化的解释清楚是有困难的。幸运的是存在一种巧妙的方案,试着去处理此事。
公理5(数学归纳法原理) 令 P ( n ) P(n) P(n)表示自然数n的任意一个性质,如果 P ( 0 ) P(0) P(0)为真且 P ( n ) P(n) P(n)为真时一定有 P ( n + + ) P(n++) P(n++)为真,那么对于任意自然数 n n n, P ( n ) P(n) P(n)一定为真。
数学归纳法大家都熟悉,这里就不过多的介绍了。
公理1-5被称为关于自然数的皮亚诺公理,这个公理看起来非常可信,于是我们给出下面这个假设:
假设1 存在一个数系
N
N
N,我们称
N
N
N中的元素为自然数,而且公理1-5对
N
N
N均成立。
对于这个假设,我们不作证明,并且它是我们做出的唯一一个关于数系的假设,现代分析论中非常引人注目的一个成就是,只从上述五个非常基本的公理和集合论中某些附加公理出发,就能构造出其他所有的数系、生产函数,并进行我们通常所做的全部代数和微积分研究。
自然数系有一个非常有趣的特点,尽管每一个自然数都是有穷的,但是由自然数所构成的集合,却是无穷大的。也就是说,虽然N是无穷大的,但N是由各个有穷的元素构成的,不存在无穷大的自然数。倘若比较熟悉有穷和无穷的概念,那么我们可以利用公理2.5证明这种说法,显然0是有穷的,另外,如果N是有穷的,那么
N
+
+
N++
N++自然也是有穷的,因此根据公理2.5可知,所有的自然数都是有穷的,这样看来,自然数系能够趋于无穷大,但是它不可能真的取到无穷大,无穷大,不是自然数。
从历史的角度来说,实现对数的公理化处理是近代才发生的事情,距今距今只有100多年。在那之前,数值一般被认为不可避免的与某些外部概念密切相关。例如,计算集合的式、测量线段的长度或者计算物体的质量等。在人们的认知不得不从一个数系转向另一个数系之前,上面这种对数的理解是合理且有效的。比如,通过数珠子的方式去理解数字,对数字的概念化是很有好处的,但对于 − 3 , 1 3 , 2 或 3 + 4 i -3,\frac{1}{3},\sqrt{2}或3+4i −3,31,2或3+4i这样的数来说,数珠子的方法就不怎么有用了。因此,数论中每一次伟大的进步,负数、无理数甚复数甚至数字0都会带来大量不必要的哲理烦恼。数字可以通过公理来抽象的理解,而不需要借助任何实物模型。这是19世纪后期的一个伟大发现。当然,在方便的情况下,数学家可以使用任何实物模型来帮助自己更好的展现直观认识并加深理解。但是,当这些模型开始对研究造成阻碍的时候,它们也会被轻易的抛弃。
根据前面这些公理可以得到一个结论,现在我们能够递归的定义序列假设,我们希望通过下列方式来构造一个数列 a 0 , a 1 , a 2 , … a_0,a_1,a_2,\dots a0,a1,a2,…,首先定义 a 0 a_0 a0的基值,例如 a 0 : = c a_0:=c a0:=c,其中 c c c是某个固定的数字,然后令 a 1 a_1 a1为关于 a 0 a_0 a0的某个函数, a 1 : = f ( a 0 ) a1:=f(a_0) a1:=f(a0)是关于a的某个函数,以此类推,一般的我们记作 a n + + = f n ( a n ) a_{n++}=f_n(a_n) an++=fn(an)。其中 f n f_n fn是某个从N到N的函数,利用前面所给的公里,能够推出对于任意给定的自然数 n n n,上述过程将对数列中的元素 a n a_n an给出一个单一的值。
递归定义是非常强大的,例如我们能够利用它去定义加法和乘法。我们在下一节学习加法。
(参考书籍:《陶哲轩实分析》)