数的创生(二)赋值完备化
上篇请见《数的创生(一)方程的解》
这一节说说从有理数产生新数的另一个途径:从有限到无限。这个概念我们在小学就已经比较熟悉了,就是从有限小数或者循环小数到无限不循环小数的扩张。然而,要说清楚这个概念,我们最好还是从更基本的概念开始,即,什么是整数,什么是小数。
0. 人类发明数字之前,整数是通过物件来表示的。这种方法在表示前面一些整数的时候还算方便,但如果数太大了,就很不方便。这就是“进位制”起作用的地方。人类用自己的十个手指头计数,计到十以后,做下标记,表示所有指头都用过一遍了,然后就可以再使用它们继续计数。每用完一次,就做一个标记,而标记的个数同样可以用手指来计,如果超过十个标记,就做一个新类型的标记,这表明所计的数已经超过一百。这就是把一个整数写为十进制数字的过程。下面这个表是把第一行的黑桃代表的整数表示为 3-进制数。祖先一直使用十进制,以至于我们离开十进制就无法举出具体例子。现在我暂时采用一种非十进制的数字体系,即以下列方式写出前几百个自然数:
零、壹、贰、叁、肆、伍、陆、柒、捌、玖、拾、赵、钱、孙、李、周、吴、郑、王、…… 那么以下这个具体例子说的就是把整数 “吕” 表示为 “叁”-进制数,吕 = [壹零壹贰]叁
现在从抽象的角度解释一下把整数表示为拾-进制数字的过程。
1. 将一个正整数表示为拾-进制数:
做欧几里得除法: n = n1 × 拾 + b0, 要求 0 ≤ b0< 拾. 其中 n1 称为“商数”而b0称为“余数”。接着对商数应用欧几里得除法, n1 = n2 × 拾 + b1. 继续这么做下去,直到某一步 k, 商数满足 0< nk<10, 如果再做欧几里得除法, nk = 0 × 拾 + bk, 我们不再得到更多的商数. 现在我们把过程中所有的“余数” 收集起来,就得到了n的拾-进制展开 n=bk…b1b0 . 用一个复杂的公式来表示以上过程,就是
n = (…((bk×拾+bk-1)× 拾 +bk-2) × … ) × 拾 + b0 = bk × 拾k + bk-1 × 拾k-1 + … + b1×拾 + b0
2. 以上过程可以用来得到正整数的任何 m-进制展开, 只要在过程中把“拾”换成 m.
比如, 取拾-进制数112, 记为 [112]拾, 我们想把它展开为 6-进制数: 为方便起见,我们还是用熟悉的拾-进制数来记录运算过程, 112=18 × 6 + 4, 接着对商数做欧几里得除法 18=3×6 + 0, 再做除法 3=0 × 6 + 3. 现在商数为零,过程结束,收集过程中的余数我们得到 [112]拾=[304]6
3. 从用桃杏梅方表示的那个例子可以看到,石器时代的人类其实已经可以做欧几里得除法了。做欧几里得除法不需要把整数表示为任何进制的数字。现代澳门赌场里的庄家闲家仍然在用这种办法计算筹码个数。
但是为了叙述方便,在接下来的段落里我会尽量使用阿拉伯数字。如果进位单位小于或者等于拾,这就够用了。如果进位单位大于拾,就需要引进阿拉伯数字以外的数字了(本文中使用百家姓)。
分数的情况如何? 怎样把分数表示为 m-进制数字? 我们从小就做了很多这样的练习(当然,基本上都是表示为拾-进制)。考察分数 x/y. 首先做欧几里得除法 x=q × y + r, 其中 0 ≤ r < y. 这样就把 x/y 分成了整数部分 q 和小于 1 的分数 r/y. 将整数表示为 m-进制数字我们之前已经讨论过了。至于 r/y, 我们的做法是长除法,首先“移位”,即分子乘以 m, 然后做欧几里得除法 r × m = a1 × y +b1. 显然,为了此等式成立,商数必然满足 0 ≤ a1 < m. 如果余数 b1 ≠ 0, 那么将此余数移位,再做欧几里得除法 b1 × m = a2 × y + b2 . 一直这么做下去,有两种可能:(1)在某一步余数为0,过程结束;(2)余数永远不为0,长除法无限进行下去。把每一步的商数按顺序放在一起,就构成了 r/y 的 m-进制表示 0.a1a2a3… 这个小数必然是有限或者循环小数,因为每一步的余数都小于 y, 只有有限种可能,一定会重复出现,从而商数也会重复出现。举个例子: 将分数 2/5 表示为 8-进制小数。不断移位做除法, 2×8=16=3× 5+1, 接着 1 × 8 = 8 = 1 × 5 +3, 接着 3 × 8 = 24 = 4 × 5 + 4, 接着 4 × 8 = 32 = 6 × 5+2, 余数 2 重复出现, 从而欧几里得除法 2×8=16=3× 5+1 再次出现, … 这样,我们把商数按顺序放在一起,得到循环小数 2/5 = [0.314631463146...]8
从上述段落我们应该看到,整数和分数是抽象的概念,而小数则是它们在某进位制下的表现形式。同一个有理数,在不同的进制下表示为不同的小数。细心的读者可能注意到,在进位制下展开整数和展开小于1的分数的方法不同,一个是被进位单位除,然后收集“余数”,一个是被本身的分母除,然后收集“商数”。然而,一句耳熟能详的话说,“整数是特殊的分数”,为什么展开方法如此不同?(此处请读者自己思考 5 分钟。答案是,分数的展开方式同样适用于整数,读者应该不难发现怎么做。)
取一个进制,可以把有理数展开为有限或者循环的小数。那么在此进制中那些无限而不循环的小数对应什么抽象的对象呢?如果是拾-进制,我们都知道答案:无理数。那么其它进制下的无限不循环小数也是无理数吗?或者说,无理数的定义是否依赖于进制选择?同样请读者自己思考 5 分钟,答案下几段揭晓。
现在我们进入光怪陆离的世界,看看跟小数相反的对象:“大数”。要理解这个概念,先要理解长除法的本质是通过移位和做欧几里得除法将有理数表示为各个位上的数字所表示的有理数的和,
52/5 = 拾+2/5 = [12.314631463146...]8 = 1 × 81 + 2 × 80 + 3× 8-1 + 1× 8-2 +4× 8-3 + 6× 8-4 + …
这个例子中的小数是一个无穷和,在进位单位8的负幂次一端可能有无穷多项,而在正幂次这一端一定是有限项。19世纪数论的发展(特别是解不定方程方面的发展)促使人们去尝试另一种可能,即,在负幂次一端是有限项,而在正幂次这一端延伸到无穷。怎样实现有理数的这种 “大数” 展开?同样,应该通过长除法。但是具体做法有所不同。之前的长除法,是在每一步把余数向上移位,即,乘以进位单位 m. 移位后再做欧几里得除法,其商数虽然是整数,但考虑到移位,这商数应该往下移位。从公式上会看得更加明显:
r × m = a1 × y +b1
等价于
r = ( a1 m-1) × y + (b1 m-1 )
下一步
b1 × m = a2 × y + b2
等价于
b1 m-1 = (a2m-2) × y + (b2 m-2)
可见,在每一步把余数向上移位,然后做欧几里得除法,其效果是得到小数表示的更低位数字。现在我们要反其道而行,希望在每一步得到更高位的数字,就需要将余数向下移位,即,除以 m. 以公式表示,比如我们要将 x/y 展开为 m-进制的大数,第一步是
x = s × y + t, 要求其中 0≤ s < m 以及 t 被 m 整除
下一步,
t/m = c1 × y + d1 , 要求其中 0≤ c1 < m 以及 d1 被 m 整除
再下一步
d1 /m = c2 × y + d2 , 要求其中 0≤ c2 < m 以及 d2 被 m 整除
按此继续,可能到某一步 dk-1/m = ck × y + 0, 那么我们得到一个有限的大数表示;也可能这个长除法会无限进行下去。同样可以证明,可能出现的余数个数是有限的(虽然不像在传统长除法中那么明显),所以将有理数展开,一定是循环大数。 显然,这种新的长除法中每一步所做的事情跟欧几里得除法非常不同。欧几里得除法的原则是,余数一定比除数的绝对值小。而新的带余除法的原则是,余数一定要是进位单位的倍数。这种差别引起两个后果:(1)新的带余除法严重依赖于进位制,从而这种对有理数的扩展很可能依赖于进位制;(2)新的带余除法不是那么直接,不能像开头那个表展示的那样或者古人赌 “数四” 那样简单得到商数和余数。事实上,如果要保证这种新的带余除法对任何的分子分母 x,y 都一定能做,进位单位 m 必须满足比较严格的条件:m 一定要是素数。 接下来用一个例子来说明:把 7/6 展开为 3-进制大数,
第一步,先“移位”,即把分子分母里所有的因子 3 都提出来: 7/6 = 3-1 × (7/2)
第二步,对 7/2 做新的带余除法:找一个商数 s < 3,使得余数 (7 – s× 2) 是 3 的倍数。由于数字比较小,这个不难,一个一个试就行了,很快就试出 s=2, 余数为 7- 2×2 = 3.
第三步,将上一步的余数移位,即,除以 3,作为新的被除数:3/3 = 1. 再做带余除法,1-2× 2 = -3.
接着进行移位和带余除法,-3/3 = -1. 现在 (-1) – 1× 2= -3.
余数重复,所以商数将开始循环。因此我们得到
7/6 = 3-1 × ( 2×30 + 2 ×31+1×32+1×33+1×34+ …… ) = 2×3-1 + 2 ×30+1×31+1×32+1×33+ ……
按照小数的习惯,从左到右幂次递减,则此大数记为
7/6 = [ ......1112.2 ]3
再举一个例子,将 5/8 展开为 7-进制大数:
5-5×8= -35,接着 (-35/7) – 2 ×8 = -21, 接着 (-21/7) – 4×8 = -35, 余数重复,商数开始循环,我们得到
5/8 = [ ......424242425.]7
再看一个例子,将 -1 展开为 5-进制大数:-1-4 = -5, 接着 (-5/5) -4 = -5, ….. 所以 -1 = [......444.]5 这个例子显示负有理数可以展开为正的大数。
前面谈的都是展开算法和例子。现在我们需要理清一下思路。比如,怎样从循环小数展开或者大数展开得到原来的分数?对于小数,可以用等比数列求和公式,
[0.4232323......]拾 = 0.4 + 0.023×(1+0.01+0.001+……)
= 0.4+ 0.023× limk→∞(1-0.01k)/(1-0.01) = 2/5 + (23/1000) ×(100/99) = 2/5+230/99 = 1348/495,
为方便起见我在计算过程和结果中都不加说明地使用了拾-进制表示。对于大数,同样有等比数列求和公式,比如
[......444.]5 = 4×(1+5+52+53+……) =
= 4 × limk→ ∞(1-5k)/(1-5)
如果我们强令当 k趋近于无穷时 5k → 0,那我们正好得到有理数 -1. 在另一个稍微复杂一点的例子里, 7-进制大数可以用等比数列求和公式化为一个极限,
[ ......424242425.]7 = 5 + [420]7× (1+ [100]7+[10000]7+……)=
= 5 + [420]7× (1+72+74+……) = 5 + [420]7× limk→∞ (1- 72k)/(1-72)
同样,如果我们强令 7k→ 0, 则得到有理数
5+(4×72+2×7)× (1/1-72) = 5- ([210]拾/[48]拾)=5/8
(计算过程中我总用到拾进制数,因为我们人类的乘法口诀是基于拾进制表示的,我不必为了避开拾进制而去找一堆小木棍儿来摆弄,还把这种原始计算过程千辛万苦地画在这里 )
上面这些计算告诉我们,如果要在 p-进制循环大数(习惯上用字母 p 来代表任一素数) 和分数之间自由转换,我们需要接受一种奇怪的观念,就是在 p-进制下,当 k 越来越大时, pk 越来越接近于0. 一旦接受了这种观念,那个看起来怪怪的新式长除法就跟传统长除法类似了,都是坚持“余数比除数离0更近” 这个原则。这里应该注意的是,在大数的世界里,“哪个有理数离零更近”这件事,是跟进制单位 p 有莫大关联的。比如,在 3-进制大数体系里,[27]拾 比 [12]拾 离0更近,因为 [27]拾 含有更多的因子 3. 而在 2-进制大数体系里,[12]拾 比 [27]拾 离0更近,因为 [12]拾 含有更多的因子2. 这跟小数的世界太不一样了,不管用哪个进制的小数表示,1/5 都比 1/2 离0更近,这是因为在小数的世界里,衡量离0远近的是“绝对值”,它不依赖于进制的选取。
我们现在终于可以来解释这一篇的副标题:赋值完备化。所谓“赋值”,就是对每一个有理数规定离0有多远。当然,规定不是任意的,需要满足某些性质,比如,a+b 离0的距离不能大于 a 离0的距离同 b 离0的距离的和。一个这样的规定就叫一个赋值。“绝对值”就是一个赋值,它规定:正有理数离0的距离就等于这个数本身,负有理数离0的距离等于它的相反数。我们上面看到的跟素数 p 有关的是另一种赋值,称为 p-进制赋值,它规定:有理数离0的距离跟它含有的所有 p 因子成反比。就是说,如果 x/y 的分子分母都把 p 因子完全分解出来,x= pj w, 而 y= pk z, 其中 w, z 不再含有 p 因子,这样可以写 x/y = pn(w/z),其中 n=j-k. 则 x/y 离0的距离为 p-n = 1/ pn. 具体例子:有理数 -3/4, 它的 3-进制赋值为 1/3, 而 2-进制赋值为 4, 它的其它进制赋值均为 1,因为它不含有除2和3以外的其它素因子。 (有心的读者可能会观察到,这个数的绝对值为 3/4, 这样把它的绝对值和所有 p-进制赋值全部乘起来,
(3/4) × (1/3) × 4 × 1×1× 1× …… = 1.
很容易看到这个关系对所有的有理数都成立。这说明所有这些赋值之间是有关联的,一个有理数在各个素因子处的表现是互相牵扯在一起的。这个道理虽然看起来很简单,它却有着极其深刻,很可能是至今为止数学中最深刻的推广,就是所谓“朗兰兹纲领”。这些从最简单到最复杂的关于素数之间的关联的命题,都称为“互反律”。)
扯得太远,总结一下。有理数可以用小数展开,展开的结果总是有限或者循环小数,那么包括无限不循环小数在内的所有小数自然就构成有理数的一种推广,它们在“绝对值”这种赋值下有意义,因为越到后来加上来的尾数绝对值减小得越快,所以会“收敛”到某种东西,这种东西就是某个“实数”。所以,实数的定义是不依赖于进制的,因为“绝对值”是不依赖于进制的。有理数又可以用 p-进制大数展开,展开的结果总是有限或者循环大数,而包括无限不循环大数在内的所有 p-进制大数也是有理数的一种推广,它们在“进制赋值”下有意义,越到前面加上来的大整数的 p-进制赋值减小得越快,所以收敛到某种东西,这种东西依赖于进制选取。对每一个素数 p, 有 p-进制赋值,在这种赋值下的有理数扩张称为 “p-进制数”。p-进制数之间可以进行加减乘除,它们构成数域。这样,对每一个素数 p, 存在一个数域,记为 Qp, 它是实数域的类似物。以 p-进制数为自变量和取值的函数也可以做微分和积分。从而,这个世界上存在无数多种微积分,对每一个素数有一种,再加上我们已经熟悉的以绝对值为基础的微积分。最后回忆一下,之所以大数的进制单位必须是素数,是因为只有这样才能做除法。
下一篇将是关于伽罗瓦数。