数学科普
负负为何得正
作者:安迁
“负负本得正,此理无须论。” ——威斯坦·休·奥登
一、司汤达的疑惑
对乘法“负负得正”这条规则,多数人都是一开始觉得这规则有点奇特,日久天长便觉得理所当然,再也不去追究其中的原因。但也有人一直对此耿耿于怀,总想要个说法。其中最著名的,大概要算法国著名作家司汤达。
司汤达算得上是一位数学爱好者,至少在他的青少年时代如此。他在格勒诺布尔中学学习时就非常喜欢数学,并在最后的毕业考试中得了数学第一名,压过后来进了巴黎综合理工学院,号称“八学霸”的那些同学们一头。他也因此能够逃离令他厌恶的家乡,来到巴黎。在他的自传《亨利·勃吕拉传》中,他用不少篇幅描述了自己十四岁时对“负负得正”规则的疑惑:
“在我的少年时代,我认为在数学中不可能有虚伪,而且所有那些据知应用了数学的学科也同样如此。于是当我发现没有人能跟我解释负负为何得正 (- × - = +)时,我无所适从了。(这是称为代数的学科的基本规则之一。)比解释不了这个难点(我想它大概还是应该可以被解释的,毕竟它引出正确结果)还糟的是,更有人拿他们自己都搞不清楚的理由来向我解释。”
他的老师Chabert先生要么重复课上的话,而司汤达恰恰是对那些话有疑问,要么搬出权威欧拉和拉格朗日来——“他们应该不比你差吧,也接受这规则的……”;另一位老师Dupuy先生则从不回答问题,只报以莫测高深的微笑;当司汤达向学霸之一提出这个疑问,得到的则是当面的嘲笑。无可奈何,司汤达只好安慰自己:
“我于是得出结论,而且如今还这样认为:负负必须得正,因为显而易见,每次运用这个计算规则,我们总能得到真确无可质疑的结果。”
两百多年后的今天,我们能不能回应一下司汤达的疑惑?
二、作为规定的乘法
从现在起我们考虑整数乘法的“负负得正”,对于有理数或实数乘法的“负负得正”的解释是类似的。本文中所说的自然数包括零。
首先我们要澄清“-”号的几种用法:
- 它被用于表示减法,此时它被称作“减号”。
- 在“-5”这样场合中,它被称作“负号”,负号和后面的(正)数形成一个整体,是表示负数的方式,比如“-5”表示的是负五这个数字。
- 负五,或者说“-5”,是怎么定义的?它被定义为“0减去5的结果”,或者说是“那个和5相加等于0的数”;当我们允许把“那个和a相加等于0的数”中的a取作负数时,“-”就成为了整数集上的一个一元运算(减法是两元运算),它被称作“负运算”。
当我们从负运算的角度去看问题时,考虑一下比如-(-5)是什么。根据上面负运算的定义,-(-5)是“那个和-5相加等于0的数”。而和-5相加等于0的数不是别的,正是5。所以-(-5)=5。更一般地,对任意自然数a,我们都有-(-a)=a。这也可以看作是某种意义下的“负负得正”,而且和整数乘法的“负负得正”有联系。但我们必需认识到,这两种“负负得正”不是同一件事:前者是无需定义整数乘法就成立的,后者则是整数乘法的一个性质。本文讨论的是整数乘法的“负负得正”。
必须说明的是,整数乘法的“负负得正”首先是一种规定。从自然数乘法出发,规定“负正得负,正负得负,负负得正”,就得到了整数的普通乘法。对“负负为何得正”的直接回答,可以是:“就是这么规定的”,但这显然不是问这问题的人想得到的答案。我们得分析一下这个问题其实是在问什么。
纯粹从数学上来说,我们也可以规定比如“负正得正,正负得负,负负得负”,来得到另一种“乘法”。我们甚至可以规定“负正正负或负负都得零”,或是其他结果都和整数的普通乘法一样,只是“-4乘以5等于45”的“乘法”。整数集Z上的一个二元运算是一个函数f:Z×Z→Z。如果f在自然数集合N上的限制f:N×N→Z的值都落在N内,而且和自然数乘法的结果一致,它就可以被看作是自然数乘法运算在整数上的推广,可以被叫做整数“乘法”。
理论上说,上面这个“和自然数乘法的结果一致”的条件甚至也可以不要。毕竟“乘法”只是一个名字,就算规定“乘法”的结果是任何整数和任何整数相乘都等于0也是可以的,只要在一开始说清楚。当然实际上没有人这样做,也不应该这样做——因为已经有自然数乘法了,新定义出一种运算,又在自然数上和自然数乘法不一样,那你大可取另一个名字。故意也叫“乘法”,就算开始就说清楚,也只有混淆的害处而没有任何好处。
既然整数的普通乘法从定义上来说,和其他可能的对自然数乘法的推广一样,只是一种规定,我们要问的问题其实是:为什么在把自然数乘法推广成整数的乘法时,要这样推广?为什么在学校里我们学的都是这种负负得正的乘法,而不是某种其他的对自然数乘法的推广呢?
显然是因为,负负得正的整数普通乘法比起其他的对自然数乘法的推广来说,有它的好处,而且是大好处。
三、实用方面的考虑
从实际应用的角度来说,司汤达对自己的安慰的确从某种程度上回答了他自己的疑问:正因为负负得正的规则能够被应用到许多场合中而得到正确的结果,所以它是一种好的运算,所以负负得正。
拿自然数的加法来说,我们在计算比方说2个苹果和3个苹果放在一起会有几个苹果时会用到它:2+3=5,所以一共会有5个苹果。大家恐怕也碰到过抬杠的说,加法不对,1+1不等于2的,比方说1滴水和1滴水放在一起不是2滴水,而是1滴(比较大的)水。
事实上,“因为2+3=5,所以2个苹果和3个苹果放在一起共会有5个苹果”的推理少了一个步骤,当中应该有“自然数的普通加法适用于苹果放在一起的情形”这个条件。当然,这个条件是如此地显而易见,以至于大家一般不会把它明确地说出来。但它的确是必要的。它不是数学的一部分,而是实际经验。自然数的普通加法就不适合用在水滴放在一起的情况。
如果说水滴放在一起的例子象抬杠,那么速度合成的计算就是一个严肃的例子。曾几何时,人们一直认为实数的加法可以应用在速度合成的计算上:如果在地面上看,一列火车以速度v向右行驶,而火车上又有人以速度w向右奔跑,那么从地面上看来,人向右运动的速度就是实数v和w的和v+w。但是狭义相对论却说这是不准确的,如果v和w都大于0,那么实际上从地面上看来人向右运动的速度要比v+w小一点,等于(v+w)/(1+vw/c2),其中c是真空中的光速。难道我们能依此说,实数的加法错了?不能。只是它不适用于速度合成,尤其是在高速的情况下。
在自然数上也可以定义出和普通加法不同的“加法”来。比如两个自然数的尼姆加法,就是把两数分别写成二进制形式,然后每一位分别做异或运算,得到结果。我们用⊕来表示尼姆加法,在这个运算中,1⊕1=0,7⊕8=15,14⊕3=13,8⊕9=1。尼姆加法在组合游戏论中有非常重要的地位,但这和本文主旨无关,所以不具体介绍了。这里想说的是,尼姆加法自有它的用途,可要是用在计算苹果数目上就不是好主意;自然数普通加法更有用处,不过用在需要尼姆加法的地方也是不行的;但这都不是自然数普通加法或尼姆加法的错。
反过来说,如果一种运算在某种具体的应用中总能够得到被经验上证实的正确的结果,那么定义和研究这样一种运算就是有价值的。规定负负得正的乘法正是这样。比如有条东西向的铁轨上行驶着一列以速度20米/秒向东开的火车,那么10秒以后它就会在现在位置的东边20×10=200米处。如果它其实是以20米/秒向西开的,而我们想计算它在10秒以前是在哪里,我们当然可以同样用自然数乘法来计算20×10=200,然后推理说火车向西开,10秒以前必定处于离现在位置的东边,所以它是在现在位置的东边200米处。但如果我们把向东作为正的方向,朝未来作为时间流逝的正方向,那么后面一个例子我们可以认为火车是在以-20米/秒向东开的,而我们想知道它在-10秒以后的位置。按负负得正的规则,(-20)×(-10)=200,得到一个正数,所以-10秒后(也就是10秒前)它是在现在位置的东200米处。我们仍得到了正确的结论。这样做的好处在于,我们不需要再按照火车行驶方向和时间在当下的前后分成四种情况来考虑,所有情况都被统一成“向东行驶若干秒以后”,负负得正的乘法总能告诉我们正确的结果。
象上面这样负负得正得到正确结果的例子数不胜数,司汤达也承认“它引出正确结果”。从这点来说,我们目前的乘法是很有它存在的价值的,是好的。
但这种“实际中很有用”的解释显然不能说服司汤达,至少不能完全说服,否则他也就不会继续困惑了。司汤达期待的另一部分的解释,是一个和实际应用无关的,纯粹的数学上的解释:为什么从数学的角度看,负负得正的乘法是好的,好过以其他方式定义的运算。
四、负负得正的“证明”
先让我们来看下面这个“负正得负,正负得负,负负得正”的“证明”,为了方便起见我在每一步推导后给出了标号和理由,同一个理由使用相同的标号:
设a,b为自然数,欲证(-a)×b = -(a×b),a×(-b) = -(a×b)及(-a)×(-b) = a×b。
首先我们有结论A:
a×b+(-(a×b)) = 0 (①一数与其负数相加为零)然后有结论B:
a×b+(-a)×b
= (a+(-a))×b (②整数乘法对加法的右分配律)
= 0×b (①一数与其负数相加为零)
= 0 (③自然数乘零为零)
于是
a×b+(-a)×b = a×b+(-(a×b)) (结论A和B)
所以有结论C也即负正得负:
(-a)×b = -(a×b) (④两数加上同一数后相等,原两数也相等)类似地我们有结论D
a×b+a×(-b)
= a×(b+(-b)) (⑤整数乘法对加法的左分配律)
= a×0 (①一数与其负数相加为零)
= 0 (③自然数乘零为零)
于是
a×b+a×(-b) = a×b+(-(a×b)) (结论A和D)
所以有结论E也即正负得负:
a×(-b) = -(a×b) (④两数加上同一数后相等,原两数也相等)接下去我们有结论F
(-a)×(-b)+(-a)×b
= (-a)×((-b)+b) (⑤整数乘法对加法的左分配律)
= (-a)×0 (①一数与其负数相加为零)
= (-a)×0+0 (⑥加零结果不变)
= (-a)×0+a×0 (③自然数乘零为零)
= (a+(-a))×0 (②整数乘法对加法的右分配律)
= 0×0 (①一数与其负数相加为零)
= 0 (③自然数乘零为零)
于是
(-a)×(-b)+(-a)×b = a×b+(-a)×b (结论B和F)
最终得到结论G也即负负得正
(-a)×(-b) = a×b (④两数加上同一数后相等,原两数也相等)
上面的“证明”是否有足够的说服力来说明负负得正?也许。但从数学上来说,这个“证明”把定义和性质颠倒过来了。正如第二节开始说的,是先有“负正得负,正负得负,负负得正”这样的规定,然后才以此证明整数乘法具有交换律及对加法的(左/右)分配律等性质。用后者去证明前者,就有点循环论证的味道了。
但前面这个“证明”并不是没有价值的。让我们来分析一下这个推理过程中用到的6条理由:
- ①一数与其负数相加为零
- ②整数乘法对加法的右分配律
- ③自然数乘零为零
- ④两数加上同一数后相等,原两数也相等
- ⑤整数乘法对加法的左分配律
- ⑥加零结果不变
其中①④⑥只涉及到整数的加法性质,③只涉及到自然数的乘法,这几个性质都是在将自然数乘法推广成整数上的乘法前就确定下来了。无论怎样对自然数乘法作推广,这几条总是成立的。而理由②和⑤,也即整数乘法对加法的左右分配律,则并非所有在整数上对自然数乘法作推广都能满足。
上面的“证明”其实是说,如果有一个整数上的运算(记作⊗),它是自然数乘法在整数上的推广(也就是说,它作为在自然数上的运算和自然数的普通乘法相同,即对任意自然数a和b,有a⊗b=a×b),而且它还满足对整数加法的左分配律和右分配律,也即对任意整数a,b和c,有a⊗(b+c) = a⊗b+a⊗c(左分配律),以及(a+b)⊗c = a⊗c+b⊗c(右分配律),那么把上面的“证明”中的×改成⊗,就证明了运算⊗必然满足“负正得负,正负得负,负负得正”,也即⊗运算不是别的,正是普通乘法。
如果我们把上面的满足“左右分配律”中的左分配律去掉,代之以交换律,也即对任意整数a和b我们都有 a⊗b = b⊗a,那么通过剩下的右分配律,加上交换律,我们仍能推出左分配律,于是仍能推出⊗就是普通乘法的结论。类似地,如果改为⊗满足左分配律和交换律也一样。
这就是说,如果⊗是一种对自然数乘法在整数上的推广,在乘法对加法的左分配律、右分配律和乘法的交换律三个性质里,只要⊗满足其中的两个,那么它就一定是整数的普通乘法。
通过上面的说明,现在我们大概可以说服司汤达了:在乘法对加法的左分配律、右分配律和乘法的交换律三个性质里,只要觉得其中有两个是必需的,那么负负就必须得正。
五、分配律的重要性
也许我们还应该补充说明一下为什么我们希望被推广后的乘法有左右分配律,为什么它们是重要的。
首先,自然数乘法具有左右分配律和交换律。我们当然希望推广到整数的乘法能够保持尽量多的原运算所具有的性质。其次,左右分配律是联系加法和乘法的纽带。在整数上有加法和乘法,我们希望它们能够“合作得好”,而不是各自管各自,没有什么联系。
从代数学的角度来看,左右交换律是比“负数”概念更基本的性质,它可以推广到更为抽象的数学结构上去。
整数之所以能够被分为“正数”和“负数”以及“零”三个部分,是因为在整数集上有一个序结构,也就是各整数之间可以比大小,于是我们就把大于零的那些叫“正数”,把小于零的那些叫“负数”。但是在更为一般的数学对象中,比如复数集,比如系数为整数(或有理数、实数、复数等)的一元多项式集合,或是元素为整数(或有理数、实数、复数等)的n×n矩阵的集合中,尽管还能够定义加法和乘法,但象整数中的这种序结构却不存在,无法将其中元素分成正负两大类。但因为乘法的左右分配律,这些集合上的乘法还是满足“负负得正”的性质,只是此时的“负负得正”应该理解成“a的加法逆元乘以b的加法逆元等于a乘以b”。
事实上,上面我们举的具有加法和乘法的复数集、一元多项式集合和n阶矩阵集合,都是一种叫做环的数学结构,在某种程度上可以看作是对具有加法和乘法的整数集(叫整数环)的推广。环的定义分为三部分,一部分是加法的性质,一部分是乘法的性质,最后一部分是加法和乘法的联系——不出所料,这第三部分不多不少,就是由乘法对加法的左右分配律组成。
六、最后的抬杠
当然,我们也可以想象司汤达还继续问下去:“我并不觉得那三个性质是必需的,我只觉得交换律是必需的,而无所谓左右分配律是否成立,那么负负得正吗?”
那么,这时就可以找出整数的并不是负负得正的“乘法”来了。如果这样定义运算⊗:对任意两个整数a和b,如果a和b都是自然数,则a⊗b=a×b;如果a和b中有一个是负数,那么a⊗b=-(a×b)。我们就得到了一个满足交换律却负负得负的“乘法”:如果a和b都是负数,那么a×b是正数,而a⊗b=-(a×b)则是负数。当然,这样的“乘法”再也不可能满足对整数加法的左分配律和右分配律,比如:
(-2)⊗(1+(-1)) = (-2)⊗0 = -(2×0) = 0
而
(-2)⊗1+(-2)⊗(-1) = (-(2×1))+(-(2×1) ) = (-2)+(-2) = -4
所以
(-2)⊗(1+(-1)) ≠ (-2)⊗1+(-2)⊗(-1)
如果不选交换律,选只有左分配律成立呢?我们也同样可以定义出一个运算⊗来:对任意两个整数a和b,如果a是自然数,则a⊗b=a×b;如果a是负数,那么a⊗b=-(a×b)。它满足对加法的左分配律,因为对任意整数a,b和c,如果a是自然数,那么
a⊗(b+c) = a×(b+c) = a×b+a×c = a⊗b+a⊗c
而如果a是负数,那么
a⊗(b+c) = -(a×(b+c)) = -(a×b+a×c) = (-(a×b))+(-(a×c)) = a⊗b+a⊗c
当然,它不会再满足交换律和右分配律了,例子大家可以自己举。它是负负得负的:如果a和b都是负数,那么a×b是正数,而a⊗b=-(a×b)则是负数。
只选右分配律成立当然也可以类似论证。
七、结论
于是对“负负为何得正”的问题,我们可以首先回答说,因为负负得正的乘法在实际中非常有用。
而对于象司汤达这样从数学方面对负负为何得正有疑问的人,我们可以回答:整数乘法对加法的左分配律、右分配律和乘法的交换律这三个性质里,如果觉得至少应有两样成立,那么这样的乘法,只有唯一一种,就是我们平时用的负负得正的普通乘法。而对这三个性质,尤其是左右分配律,我们有很好的理由希望它们继续成立。
而如果提问者有相当个人的看法,表示并不在乎这些性质是否成立,或只在乎其中之一成立,那么我们的回答是:是的,在这种情况下,你完全可以定义出负负未必得正的“乘法”来——但这也只能算是相当个人的“乘法”了。
参考文献
[1] Stendhal, Vie de Henri Brulard (Nouvelle édition augmentée), Arvensa Editions (2015).