自然数是 0、1、2、3……这列数,整数在此基础上补上负数,构成 ……-2、-1、0、1、2……。本节回答两个问题:这列数凭什么可信(皮亚诺公理),以及负数是怎么被"2 减 3"逼出来的。位置上,本节是全册第一节,为后续一切运算提供原料。
羊圈里有 2 只羊,狼叼走了 3 只。"2 减 3"在自然数里没有答案——你无法在数羊的世界里表达"缺 1 只"。人类文明用了几千年才正式接受负数:中国古代用红黑算筹区分正负,欧洲数学家直到十七世纪还把负数讥为"荒谬的数"。今天的我们生下来就见过零下温度和银行透支,接受负数毫无障碍,但正因如此,反而容易忽略两个更根本的问题:自然数本身是怎么定义的?负数进入后,运算规则凭什么保持成立?
1889 年,意大利数学家皮亚诺用五条公理把自然数钉死在逻辑上:
前四条保证数轴无限延伸且不打结,第五条是数学归纳法的合法来源——它不是技巧,是公理。加法就是在它之上定义出来的:m + 0 = m,m + S(n) = S(m + n)。听起来绕,用起来很直白:加 3 就是"取三次后继"。
传说高斯小学时被罚把 1 加到 100,他发现首尾配对:1+100、2+99……共 50 对,每对 101,瞬间报出 5050。一般化就是 1+2+……+n = n(n+1)/2。归纳法证明分两步:n=1 时左边 1,右边 1×2÷2 = 1,成立;假设 n=k 时成立,则 n=k+1 时左边 = k(k+1)/2 + (k+1) = (k+1)(k/2 + 1) = (k+1)(k+2)/2,恰是公式在 k+1 处的值。两步齐了,归纳公理保证公式对一切自然数成立。
>>> from sympy import symbols, simplify >>> n = symbols('n', integer=True, positive=True) >>> # 归纳法第二步的代数变形,交给 SymPy 复核 >>> simplify(k_step := (n*(n+1))//2) # 手算公式本身 >>> k = symbols('k', integer=True, positive=True) >>> step = simplify(k*(k+1)/2 + (k+1) - (k+1)*(k+2)/2) >>> step 0
step 等于 0,说明"假设成立的式子加上 k+1 后恰好等于公式在 k+1 处的值",归纳第二步闭合。
>>> sum(range(1, 101)) 5050 >>> [n*(n+1)//2 for n in (10, 100, 1000)] [55, 5050, 500500]
直接枚举验证三个规模,与公式逐一吻合。
自然数对加法封闭(加完还是自然数),对减法不封闭。补法不是"发明一个符号"那么简单,而是构造:把整数定义为自然数的有序对 (a, b),含义是 a - b。于是 2 - 3 就是 (2, 3)。规定 (a, b) 与 (a+c, b+c) 是同一个整数(欠账再加家底,债不变),全体等价类就是整数。(3, 0) 就是正 3,(0, 3) 就是负 3,(2, 5) 与 (0, 3) 相同——都表示"缺 3"。在这个构造里,"负负得正"不再是需要背诵的怪规则,而是定义推论:
>>> from fractions import Fraction >>> # 整数对的减法规则:(a,b) - (c,d) = (a+d, b+c) >>> def sub(p, q): return (p[0]+q[1], p[1]+q[0]) >>> def norm(x): # 约到最简代表:让一侧为 0 ... d = min(x) ... return (x[0]-d, x[1]-d) >>> neg3, neg1 = (0, 3), (0, 1) >>> norm(sub(neg3, neg3)) # 负3 减 负3 (0, 0) >>> norm(sub(neg3, neg1)) # 负3 减 负1 (0, 2) >>> norm(sub(neg3, (2, 0))) # 负3 减 正2 (0, 5)
第一条:负 3 减负 3 得 0,正确。第二条:负 3 减负 1 得负 2——"减去一个负数等于加上它的相反数"在这里不是口诀,而是减法规则 (a+d, b+c) 的直接输出。第三条同理得负 5。符号法则从构造里自然流出,不需要死记。
整数集配上有理数世界最朴素的序关系(数轴上右大左小)和绝对值(到原点的距离),呈现两个关键性质:离散性——相邻整数之间没有别的整数;良序性——任何正整数的非空子集必有最小元(这就是归纳法与反证法联手的"最小反例法"的依据,下一节证根号 2 无理时就要用它)。
| 性质 | 加法 | 减法 | 乘法 |
|---|---|---|---|
| 自然数 | 封闭 | 不封闭 | 封闭 |
| 整数 | 封闭 | 封闭 | 封闭 |
💡 关键直觉:整数化的代价是除法破开了口子——3 除以 2 又算不下去。这个口子留给下一节的有理数去补。

归纳法有个孪生兄弟——最小反例法:要证所有自然数都有性质 P,假设存在反例,由良序性反例中有最小的一个 n;考察 n 的前驱(或更小的相关数)推出 n 其实满足 P,矛盾。用它重证"2 的 n 次方与 3 的 n 次方之和不整除"类命题时,往往比归纳法更顺手。两个方法共享同一条地基:自然数没有无穷递减链——你可以从任何自然数出发不断减一,但有限步必然踩到 0。
问:0 算不算自然数?
答:按皮亚诺公理的原始表述算(0 是起点);部分教材传统上从 1 数起。本册采用含 0 的口径,编程语言里 range 的习惯与此一致。
问:归纳法第二步"假设 n=k 成立"不是循环论证吗?
答:不是。归纳公理给出的是一条"传动链":起点真(第一步验证)加上"前一个真能带动后一个真"(第二步),链条从 0 一路传动到任意远。第二步证明的是传动装置,不是结论本身。
下一节面对那个除不开的口子:分数进场,然后立刻撞上一块更硬的骨头——根号 2。