一场别开生面的数学之旅!
从数字的基本概念到计算机程序设计的新发展
节选自《数学极客:探索数字、逻辑、计算之美》, 已获机械出版社授权许可, [遇见数学] 特此表示感谢!
第二章 整数
Integer
自然数是我们最先认识的数字,但是它们完全不够用。考虑到我们使用数字的方式,最后你不可避免地需要扩展,超出自然数的范围。
如果你去一家商店买东西,通过支付金钱来换取你想买的商品。可以用3美元买一些面包,如果你给店主5美元,店主需要找你2美元。
当你试图利用自然数去理解这个过程时,你会发现这个过程说不通。钱沿两个不同方向流动。第一个方向是从你流向商店——花掉你的钱;第二个方向是从商店流向你——得到找零的钱。正数和负数可以让我们区分这两个流动的方向。
2.1 什么是整数
如果你有自然数而想要整数,那么你不得不做的事是添加一个加法逆元。如果你理解自然数并且想进一步理解整数,那么你只需要添加一个方向。想象一个数轴,自然数从0开始向右延伸,和0的左边没有关系;整数在自然数的基础上,加上从0向左延伸的负数。
整数的含义遵从方向的概念。从基数和序数两个含义上来看,正整数和自然数一模一样。负整数可以让你往另一个方向移动。如果通过基数的方式来思考,整数可以描述在集合间移动元素。如果你有一个大小为27的集合和另一个大小为29的集合,那么为了让这两个集合的大小一样,你可以选择给第一个集合添加两个元素,或者从第二个集合中去除两个元素。如果你添加两个元素给第一个集合,那么你是在用正的基数做事情。如果你从第二个集合中去除两个元素,那么你是在用负的基数做事情。
从序数的角度讲就更容易理解了。如果你正在看一个集合里的第3个元素,然后想看第5个元素,那么就正向移动2步,这个动作是通过正的序数描述的。如果你正在看第5个元素,然后想看第3个,那么就往回移动2步,这个动作是通过负的序数描述的。
让我们转向公理化的定义。整数是通过给自然数添加一个逆规则延伸出来的数字。从自然数集合N开始,再加上皮亚诺规则,我们只需要额外添加一个加法逆元的定义。非零自然数的加法逆元就是负整数。为了得到整数,我们只需要添加下面两条新的规则。
加法逆元:对于任意一个非零的自然数n,总是存在一个不是自然数的数字-n,使得n+(-n)=0。我们称-n是n的加法逆元,称自然数集合和它们的加法逆元为整数。
逆元唯一性:对于任意的两个整数i和j,当且仅当i是j的加法逆元,j才是i的加法逆元。
通过这些规则,我们得到了新的事物。我们之前讨论的自然数不能满足这些规则。那么新事物(负整数)是从哪儿来的?
答案有点令人失望。它们并不是从哪儿来的,它们本来就存在。在数学里,我们不能创造物体,只能描述它们。这些数字(自然数、整数、实数)存在是因为我们定义了描述它们的规则,并且这些规则相互兼容地描述了一些事物。
对于所有这些,有一种时髦的说法:整数是包括零、正数和负数的所有数字。
类似地,如果你定义了自然数上的加法,加性逆元规则足够让加法同样适用于整数。并且,因为自然数的乘法只是重复的加法,所以乘法同样适用于整数。
2.2 自然地构造整数
我们可以自然地创建数学结构来表示整数。这些结构称为整数的模型。但是,为什么可以呢?另外,模型到底是什么呢?
在一个新事物(比如整数)的模型中,我们试图证明有某种方法可以让对象遵守我们定义的公理。出于这个目的,你可以选择已经知道的事物,把它们作为“建筑的积木”。使用这些积木,你构建一些新的事物,并且让它们遵守新系统的公理。例如,说到整数,我们将拿我们已经熟悉的自然数来当积木,然后用这些积木去构建能代表整数的事物。如果我们能证明这个模型里的事物遵守自然数的公理,那么就可以知道我们对整数的定义在数学上是相兼容的。
我们为什么要做这些呢?
有两个原因让我们去构建那样的模型:第一,一个模型能证明我们的公理是有意义的。当我们写一个公理集的时候,很容易搞砸,并且很意外地以不一致的方法写我们的模型。一个模型能证明我们没有搞砸。我们能写出一堆看起来合理的公理,但是它们可能存在一些细微的不兼容。如果真是如此,那么我们定义的事物就是不存在的,即使是在抽象的数学世界中。并且更糟糕的是,如果我们在这样的公理假设下工作,得到的每一个结论都是没有任何价值的。前面说过,整数存在的原因是我们定义了整数,并且这些定义在数学上是相兼容的。如果我们不能证明可以构建一个模型,那么就不能保证这些定义在数学上是相兼容的。
第二个原因没有第一个原因那么抽象:一个模型能让我们理解起来更简单,而且它可以描述我们构建的系统应该怎么运转。
在我们提及模型之前最后声明一次,理解这一点非常重要,我们正在做的是给出一个整数的模型,而不是这个整数的模型!我们现在做的是描述一种表示整数的可能方式,整数并不是下面即将展示的表示方式。因为整数可以有很多种表示方式,只要这些方式符合公理就可以使用。模型与它所建模事物之间的区别是微妙的,但它非常重要。整数是公理描述的事物,而不是我们的模型所构建的,模型只是其中的一种表示方式。
表示整数最简单的方式是用一对有序的自然数(a,b)来表示。一对自然数(a,b)代表整数(a-b)。显而易见,(2,3),(3,4),(18,19)和(23413,23414)都代表了同一个数。从数学的角度讲,整数是由这些自然数对的等价类组成的。
但是,什么是等价类?
当我们做构建一个整数模型这样的事情的时候,通常我们定义的方式不会针对每一个整数都创造出一个事物。我们所做的是定义了一个模型,针对这个模型里的每一个事物,该模型里有一个集合可以描述该事物,该集合里的值都是等价的。这一组等价的值叫作等价类。
我们定义的整数模型中,通过构造一对自然数来刻画一个整数。两对数(a,b)和(b,c)是等价的:如果它们的第一个元素和第二个元素的距离相等,并且方向相同。例如(4,7)和(6,9)。在一个数轴上,为了从4走到7,你不得不往右边走3步。为了从6走到9,你仍然不得不往右边走3步。所以,它们属于同一个等价类。但是,当你观察(4,7)和(9,6)时,为了从4走到7,你将不得不往右走3步;而从9到6,你将不得不往左走3步。所以它们不属于同一个等价类。
上面这种表示方式给了我们一个简单的方法,以便我们理解如何将自然数的各种数学运算应用到整数上。我们理解自然数加法的含义,因此就可以定义整数的加法。
如果你有这里的整数模型中的两个对象,把它们定义为一对自然数:M=(m1,m2)和N=(n1,n2)。它们的加法运算和减法运算的定义如下:
■ M+N =(m1+n1,m2+n2)。
■ M-N =(m1+n2,m2+n1)。
■ 一个数 N =(n1,n2) 的加法逆元记作-N,是将这对自然数颠倒顺序后的对:
-N =(n2,n1)。
减法的定义可以证明是非常漂亮的。3-5将等于(3,0)-(5,0),它与(3,0)+(0,5)=(3,5)是相等的,并且是-2这个等价类的一个成员。并且,加法逆元的定义也只是减法的一个自然延伸:-N=0-N。
从自然数到整数,我们只需要做的是:增加加法逆元。自然数的减法,通常也需要某种语义上的加法逆元,但是这通常会使事情变得复杂化。
问题是,如果只使用自然数,你没有办法定义两个自然数的减法操作。毕竟,如果你计算3-5,它的结果是没有办法使用一个自然数来表示的。但是使用整数,减法操作就实际可行了:对于任意的两个整数M和N,M-N还是一个整数。使用正式的术语,我们说减法对于整数来说是一个全函数,并且整数空间对于减法来说是封闭的。
但是这也将我们引向了另外一个问题。当我们观察整数的加法运算时,就会很自然地想到减法这个加法逆元操作,并且这个操作可以通过整数的加法逆元来定义。当我们转向另一个常用的运算——乘法时,可以在自然数和整数上定义乘法,但是不能定义它的逆运算——除法,因为我们根本没有可能在整数上定义乘法逆元操作。为了将除法描述成一个定义明确的运算,我们需要有另外一种类型的数——有理数,这将在下一章介绍。(未完待续)
☟ 点击【阅读原文】京东进一步查看或购买此书