数学|0.999……真的等于1嘛?


数学|0.999……真的等于1嘛?
0.999…是否等于1?这个问题的背后是不同数学体系间的碰撞 。 我们将看到 , 在古典数学的框架内 , 0.999…=1得到了严格的证明 , 这也是该问题最为直接的解答方案 。
撰文 | 让-保罗 · 德拉艾(Jean-Paul Delahaye)
翻译 | 徐寒易
数学中的记数法能够帮助我们理解并证明数学思想 。 实用的数学符号以及特定运算法则的引入帮助数学家取得了众多进展 。 公元5至7世纪 , 印度数学家发明了十进制系统 。 得益于该系统 , 我们能够描述极大和极小的数字 , 并对其进行运算 。
如果没有这项非比寻常的发明 , 科学可能就无法生根发芽 , 更不用说贸易和现代工业的发展了 。 但是 , 一些记数法有时会让人困惑不解 。 这就是我们在这里要讨论的问题 。 至少第一眼看上去 , 这个问题简直让人摸不着头脑 。 这个问题就是:“0.999…=1正确吗?”或者反过来说 , “0.999…<1正确吗?”
0.999…这个表达式使用的是实数的小数记数法 。 这个表达式里的省略号意味着 , 最后一个9后面会跟着无穷多的9 。 只有在小数点后边的数字确定的情况下(如192.252525…) , 这种表达式才有意义 。 在这篇文章中 , 我们会探讨这个记数法现在被赋予的真正含义 。 但首先 , 看看数学老师如何运用一些基础计算法则 , 向学生证明0.999…=1 。
证明1
所有人都知道1/3=0.333… 。 如果我们用1除以3 , 首先我们发现个位数是0 , 接着出现了0.3、0.33、0.333 。 于是我们很确信 , 接下来的数是无穷的 , 因此1/3=0.333… 。
接着 , 我们在等号的两边分别乘以3 , 那么就得到了3×1/3=3×0.333… , 即1=0.999… 。
同理 , 我们通过计算得到1/9=0.111… 。 我们在等号两边同时乘以9 , 就可以得到1=0.999… 。
其他证明方法
证明2
令u=0.999… 。 在等号的两边分别乘以10 。 我们注意到一个数乘以10后 , 相当于将小数点向右移动一位:10u=9.999… 。
我们现在把新的等式两边同时减去u=0.999…:10u–u=9(因为9.999…–0.999…=9) 。 我们得到9u=9 , 因此u=1 。 我们又一次证明了1= 0.999… 。
证明3
假设0.999…<1 。 那么0.999…和1的平均值m就应当大于0.9而小于1 , 因为两个数的平均值总是位于这两个数之间 。 那么m的小数形式应该是以0.9开头的 。 又因为m大于0.99而小于1 , 则m的小数形式应该是以0.99开头的 。
通过这样一步步推演 , 我们证明m的小数形式必然是0.999… 。 因此 , m等于两个数中较小的那个 。 这是不合逻辑的 , 因为两个不相等的数的平均值不可能等于其中任何一个 。 因此 , 最初的假设0.999…<1是错的 。 同理可证 , 0.999…>1也是不可能的 , 因此只可能是1=0.999… 。
我们也可以通过另一种方式完成这个推导 。 令u=0.999… , 那么我们就得到了m=(u +1)/2=u , 因此u+1=2u , 所以u=1 。
但是 , 数学老师很清楚 , 即使演示了这些证明之后 , 如果让学生畅所欲言 , 他们依然会对等号的合理性心存怀疑 。 来自世界不同地区的多项研究发现 , 即使看过了多种正确的证明过程 , 仍有人不相信这个等式是正确的 。
图像证明法
有一种证明0.999?=1的方法采用了图像的手段 。 我们以二进制为例 。 在二进制中 , 上述问题可被转化为:二进制中的0.111?是否等于1?

数学|0.999……真的等于1嘛?
小数(0.111?)2实际上等于1/2+(1/2)+2 (1/2)3+?+(1/2)n+? 。 在这张图中 , 我们可以很清晰地看到边长为1的正方形被不断地对半切割开来 , 而它的面积为1 。
但是依然有人质疑这种方法 , 因为这种方法看起来并不完美 。 实际上大正方形的右上角是永远无法被填满的 。
有数十篇数学教育领域的论文讨论了这种现象 。 在我看来 , 这种现象有一个简单的解释:这是由于一些孩子从6~8岁起 , 就用下面的方法比较整数和有限小数 , 而且这个方法的效果往往不错 。
比较规则
当我们比较两个正数时 , 我们把两个数上下排列、小数点对齐 , 然后我们从左到右将上下两个数逐位进行比较 , 找到第一个不同的数字 。 如果存在这样的数字 , 那么我们就知道这两个正数是不相等的 , 且数字更小的那个正数本身也更小 。
比如 , 如果我们对0.28145和0.2813989进行比较 , 那么我们可以这样把它们排列在一起:
0.28145
0.2813989
运用上述规则 , 我们发现这两个数字中第一个不同的数字位于小数点后第4位 , 而由于4大于3 , 因此我们知道上面的数大于下面的数 。 如果我们用同样的规则对1(写作1.000…)和0.999…进行比较:
1.000…
0.999…
我们很快就发现1大于0.999… , 因为比较时第一个数字就不同:1大于0 。
根据这种比较规则 , 毫无疑问0.999…<1 。 而数学老师对这样想的学生的回应往往是这样的:“这种比较方法适用于有限小数 , 但有限小数的比较法则不适用于无限小数 。 ”简单地说 , 并不是所有运算法则都适用于无穷的情况 。分页标题
数学老师的权威可以叫停这场争论 。 但是执着的学生依然可以这样据理反驳:“为什么在证明1、2、3中 , 有限小数的运算法则可以延伸到无限小数 , 但是比较规则却不可以延伸到无限小数?”这么一问 , 我们又回到了原点 。 在这场争论中 , 到底是谁比较有道理?是能用3种方法证明0.999…=1的老师 , 还是那些坚持比较规则 , 一心和老师作对的学生?为了解决这个问题 , 我们需要回到无限小数的定义上去 。
目前 , 人们对无限小数的定义建立在“收敛数列”的概念之上 。 如果用以下形式表示数r:0.a1a2a3…an… , 这就意味着r等于a1/10+a2/100+a3/1000+…+an/10n+… 。 也就是说 , r是下面这个数列的极限:a1/10 , a1/10+a2/100 , a1/10+a2/100+a3/1000 , … 。
用极限证明0.999...=1
r是一个数列的极限 , 在这个数列中 , 每一项都是一个有限小数 。 比如0.333…就是数列0 , 3/10 , 33/100 , 333/1000 , …的极限 。 19世纪初 , 数学家伯纳德·博尔扎诺(Bernard Bolzano)、奥古斯丁·路易·柯西(Augustin Louis Cauchy)和卡尔· 魏尔施特拉斯(Karl Weierstrass)提出极限的概念后 , 这一定义成型 。 他们提出的极限概念有时也被称为极限的ε-δ定义 。

数学|0.999……真的等于1嘛?
后来 , 数学家提出了根据整数构建实数集的方法(用柯西数列或者戴德金分割法) , 进一步完善了上述定义 , 最终对实数以及无限小数的完整定义达成了一致 。
这些在19世纪打下的扎实基础以及数学家的一致意见 , 让我们对无限小数的定义有了十足的把握 。 这个定义被称为“实数和连续性的古典定义” 。 那么根据这个定义 , 如何解释“1=0.999…?”这个问题呢?不出所料 , 答案是站在上文的数学老师这一边的 。

数学|0.999……真的等于1嘛?
证明4
当n逼近无穷大时 , u=0.999…就成为了以下数列通项公式的极限:xn=0.9+0.09+…+0.0…09(在小数点和最后一个9之间有n个零) 。 因式分解后 , 该公式可写为:xn=0.9(1+1/10+… +1/10n) 。
我们知道0.9=1–1/10 。 我们把a=1/10代入恒等式(1–a)(1 +a+a2+a3+…+an)=1–an+1(如果你想证明的话可以把恒等式展开) , 就可以推导出
xn=1–1/10n+1 。 当n逼近无穷大时 , 数列10n+1也逼近无穷大 , 而1/10n+1则会逼近0 , xn逼近1 , 因此我们得知1=0.999… 。
我们没有列出详细的证明步骤(按照ε-δ定义) , 但是上面的简单证明对于那些理解了实数古典定义精髓的人来说应该不是难事 。
借助极限的概念 , 实数的古典定义表明 , 证明1、2和3是正确的 。 古典定义还能证明 , 在这些证明中把计算法则应用于无穷的情况是合理的 , 而学生采用的比较规则是不正确的 , 因为严格不等式不适用于数列的极限 。
不过高中生不必进行如此深入的讨论 。 我们可以利用这个机会 , 向他们列举基于极限的实数定义能够导出哪些结论 。
将某些不等式随意推广到极限的情况是不正确的 。 如 , 假设对于任意整数n来说 , yn<a且yn收敛 , 但这并不意味着n→∞时yn<a , 而是仅意味着n→∞时yn≤a 。
某些实数 , 比如n/10k(n 和 k 是整数)有两种小数形式 , 一种是以无穷多的0结尾的(因此我们就不写出来了) , 另一种以无穷多的9结尾 。 比如 , 0.15=0.14999… , 12.8=12.7999… , 1=0.999… 。
上述情况适用于所有进制的记数法 。 如在2进制中 , 1.000…=(0.111…)2=1/2+(1/2)+2 (1/2)3+?+(1/2)n+? , 0.101=(0.000111…)2=(1/2)4+(1/2)5+(1/2)6+… 。
人们很难相信1=0.999…的原因在于 , 他们常常不能理解“无限小数记数法”和“实数”之间的关系 。 在整数和有限小数的范畴内 , 识别一个数及其小数形式是轻而易举的事 , 因为小数的表达方式具有单一性 。 但是到了无限小数的领域 , 想要识别一个数就不再那么容易了 , 必须要借助实数更为抽象的概念 。 千万别把实数和它们的小数形式混淆 。 如果每个实数都有唯一的小数形式 , 那么世界将是多么简单明了啊 。 但现实却不是这样的!
现在我们还有一个问题没有解决:在数学意义上 , 0.999…<1成立的场景是否会出现?实际上 , 答案是肯定的 , 有两种方法可以使这个基于直觉的不等式严格成立 。 我们将会看到 , 用其中任意一种方法构造的数集都无法与19世纪定义的实数系相媲美 。 为了简化讨论 , 我们将只讨论正数 , 以及经过一些调整后适用于负数的情形 。
定义0.999...<1的缺陷
第一种方法非常简单直接:直接将有限小数和无限小数看作不相等的数 。 这是一种非常经济的方法:不用改变任何事 , 只需认定0.999…<1以及类似的不等式成立即可 。 我们把这种假设称为“冥顽不灵学生的实数” 。
用这种方法 , 我们将带有小数点的数字序列(如315.212121…)看成实数 , 并认为 , 当且仅当两个数的数字完全相同时才相等 。 然后我们用学生提出的方法来比较这两个数的大小:将这两个数上下排列 , 使小数点对齐 , 然后从左到右将两个数的每一位进行比较 , 直到找到差别 。 这种排序法叫做带小数点的无穷序列的字典序(从左到右) 。 比如 , 7345.222222…比7345.221222…要大 。分页标题
这样一来 , 在“冥顽不灵学生的实数”的范畴内 , 0.999…< 1 。
古典实数对两个数的大小顺序是这样定义的:在两个不同的数之间 , 总是存在无穷多的其他实数 。 对于“冥顽不灵学生的实数”来说 , 这一点在多数情况下也成立 , 除了0.999…和1这种情况 。 在“冥顽不灵学生的实数”的体系中 , 2.19999…和2.20000…虽然不相等 , 但它们之间不存在任何实数 。 也就是说 , 这些数之间存在着一个“空洞” 。
实际上 , 这些数之间存在无数个“空洞”:在每个以无穷多的9结尾的数后面 , 都有这样的一个“空洞” 。 这与连续性的概念相违背 。 连续性指的是平直、光滑、无穷的几何结构 。 从这个观点出发 , “冥顽不灵学生的实数”并不令人满意 。
为了定义“冥顽不灵学生的实数”间的运算 , 人们设想了一些新方法 。 我们可以从中挑出一种 , 看看它有什么缺陷 。 当然 , 其他方法也未必比这个好 。
我们规定 , r和r'的和为f(r + r') , 积为f(r×r') , 其中“+” 和“×”是一般意义下的运算符号 , 而 f 是进位转换操作 。 在必要的情况下 , f 会将9的无穷序列转变为0 , 同时在9的无穷序列前自动加1 。
对于冥顽不灵的学生来说 , 根据一般的计算规则 , 0.666…+0.333…首先会得出0.999… , 然后通过f的转化 , 会算出答案为1 。 因此他会得出 , 0.666…+0.333…=1 。 如果仍让0.666…+0.333…=0.999…(虽然这看上去更合理) , 就会得到1/3+2/3=0.333…+0.666…=0.999… , 但我们期望得到的是1/3+2/3=1 。 而通过这种运算方法 , 就不会有这样的问题了 。
上述运算法则避免了在计算中出现999…的问题 , 因此也避免了1/3+2/3=0.999…以及其他类似问题的出现 。 最重要的是 , 在上述运算中 , 加法和乘法是符合交换律和结合律的;此外 , 乘法对加法也满足分配律 。 因此 , “冥顽不灵学生的实数”乍看之下非常符合逻辑 。
但是 , 这种算法并非处处适用 。 因为在这种算法中 , 乘以1有时会改变一个数 。 比如 , 0.999…×1=1 。
更糟糕的是 , 消去律(若a≠0 , 则由ab=ac我们可以推导出 b=c)在这种体系中不再适用:从0.999…×1=1=1×1我们无法推导出0.999…=1 , 因为对冥顽不灵的学生来说 , 0.999…一定不等于1 。 要想使用该算法 , 就必须重新审视我们常用的代数运算法则在冥顽不灵的学生的体系中是否依然有效 。
在“冥顽不灵学生的实数”世界中 , 极限的概念也不尽如人意 。 数列1– (1/10)n并不收敛于1 , 而是收敛于0.999…(而0.999…却不等于1) 。 但是 , 1/10n却收敛于0 , 这就意味着1/10n–1收敛于–1 。 换句话说 , 一个收敛于L的数列 , 其加法逆元的极限却不一定等于–L 。
这实在是令人扫兴!冥顽不灵的学生或许有一套实数能够让不等式0.999…<1成立 , 但是这背后却要付出巨大的代价!我们还是另寻高明吧 。
非标准分析法
19世纪定义的极限概念为现代意义上的连续性打下了基础 。 极限的概念排除了无穷小 , 即那些比任意非0整数的倒数都要小的数 。 这种无穷小的数在实数的古典概念中不存在 。 但是 , 17至18世纪的数学家 , 尤其是莱布尼茨(Leibniz)曾采用了无穷小的概念 。 当代物理学家也喜欢使用无穷小 , 因为它能简化一些计算 。 在1966年 , 美国数学家亚伯拉罕·鲁滨逊(Abraham Robinson)证明 , 实数可以包含无穷小 , 并且这样的设定不会产生矛盾 。

数学|0.999……真的等于1嘛?
他的理论——非标准分析理论(non-standard analysis)十分优美且强大 。 它为蒙受不白之冤的无穷小正名 。 他的理论建立在模型论(一门数理逻辑 , 发展于20世纪)的基础上 , 成为另一种可能替代古典实数概念的理论 。
类似于古典实数概念中基于收敛数列的小数 , 我们也可以利用该理论构建小数概念 。 在这个理论中 , 0.999…有特殊含义 , 其中的省略号意味着小数点后有无穷多的9 , 而这里的“无穷多”可以有多种理解 , 因为在这个理论中有几种不同的无限大整数 H , 它们在古典理论中是不存在的 。 根据对无穷多的不同理解 , 0.999…在这个理论中可以是大小不同的实数 , 它们或等于1 , 或严格小于1 。 这是因为 , 如果0.999…中有H个9 , 那么0.999…=1–1/10H , 而等号右边并不等于1(而是差了无穷小) 。
这种小数的理论由数学家阿尔伯特·莱特斯顿(Albert Lightstone)提出 。 如果冥顽不灵的学生放弃了前面提到的方法 , 还可以尝试这种非标准分析法 , 这样他仍能坚称0.999…<1并不是无稽之谈 。 因为在鲁滨逊的非标准分析中 , 实数组成了一个域(一种集合 , 其中定义了加法和乘法) , 因此我们不会遇到前一种方法中无限小数与有限小数间出现“空洞”的情况 。
接受0.999...=1吧!
那么 , 怎样利用非标准分析来看待本文中的问题呢?我们是该采用它的实数(有时也被称作超实数) , 还是19世纪古典理论中被广泛接受的实数呢?分页标题
这个问题不好回答 。 简单地说 , 有大量的研究支持采用非标准分析 。 该理论的支持者宣称 , 用这种理论得出的证明过程比古典理论更加简单直接 , 而且结果是一样的 。 有些人甚至认为应该在数学分析的一般教学中教授非标准分析 。
虽然反对者以及怀疑者并不质疑该理论的严密性(因为有人已经证明该理论和古典实数理论一样可信) , 但是他们却认为该理论不够简洁 。 下面这位数学家对此的评论颇具代表性:
“我同意非标准分析是一个非常有意思的领域 , 它能够解释为什么使用了无穷小的不严谨论证 , 也能够得到和方法严密的ε-δ极限一样的结果 。 话虽如此 , 我却不能认同非标准分析的证明比标准分析更加简单清晰 。 当你深入非标准分析的核心后 , 你会发现它一点也不简单 , 需要具备深厚的数学功底才能理解 。 当然了 , 教师可以这样告诉学生:‘相信我 , 如果你们愿意的话我可以严格地进行证明’ , 但是实际上 , 教师一般都会采用并不严密的论证 。 ”
虽然非标准分析已经存在半个世纪了 , 但它依然不能取代古典分析 , 更毋需说它还有好几个竞争对手存在 。 和其他几种方法相比 , 它并不能以更简单的方式证明0.999…<1 。 总而言之 , 我们要接受0.999…=1 。 并且我们应当认识到 , 之所以在直觉上认为0.999…和1严格不等 , 实际上是因为我们掉入了一种记数法的陷阱 。 这种记数法让我们错误地认为 , 实数不恒等于带小数点的数字序列 。 记数法是帮助我们理解数学概念、使数学进步的好帮手 , 但有时它们也会把我们弄糊涂了 。
本文由微信公众号“环球科学”(ID:huanqiukexue)授权转载
转载请先联系newmedia@huanqiukexue.com
【数学|0.999……真的等于1嘛?】编辑:Kun