欧几里得算法中的归谬法和反证法 逻辑与算法之七

思索《几何原本》第七卷命题1的证明,是一件十分有趣的事情。

回忆我的小学和中学,好像没有学过反证法似的,归谬法更没有印象。不过,这也许是儿时的记忆有误。数学当中,如果一个命题直接不大好证,我们可以绕个弯,先证明它反面不成立,然后就可以推出,那个待证的原命题是成立的。老师说这样证明有效,你还能反驳什么呢?不过,我们的水平难以反驳,后来真有人反驳这一点。凭什么?一个和原命题相反的命题它不成立,就证明原命题成立了呢?

这一篇小文,先给出我对原本七卷那个命题1证明的理解。原本证明过程的叙述太为简洁,我加上了一些自己的理解,给出该命题1的证明。这个证明过程,几乎就是在使用归谬法(Reductio ad absurdum),也可以说使用了反证法(proof by contradiction)。读《几何原本》,可以让我们对这两个证明方法有更精准的认知。

第七卷命题1:(《几何原本》第215页,天津科技出版社2019年版)

设有两不等自然数,依次从较大数减去较小数,若所得余数总是无法量尽它前面一数,直至最后余数为1,则该两数为互质数。

证明:

设较大数为AB,较小数为CD,如果该两数满足命题1条件,结果却不是互质数。

1)若AB和CD不是互质数,则依据几何原本命题12互质数定义,至少存在一个数,可被这两个数整除,也就是这两个数一定至少有一个公约数,设这个数为E。

可以用3条线段分别表示AB,CD和E。

2)我们先用CD量尽AB,需要多少次,就量多少次,这相当于做除法。

3)因为AB大于CD,最后可得余数FA。而且,你已经量到了最后,剩下的FA自然是小于CD。

4)对FA重复以上步骤,用FA量尽CD,也是需要多少次,就量多少次,也是做除法。

5)因为CD大于FA,不断重复这一过程,最后可得余数HA=1,

1线段图表照

6)不断重复这个求余数的过程,最后的余数就是一个单位,即表示数字1的线条,如上图HA。

7)于是我们有:E除尽CD,CD除尽BF,所以,E也除尽BF。(1,传递)

8)我们还能有:E可以除尽AB,E可以除尽CD,则E也可以除尽AB-CD。(2,直观)

9)并且,因为E可以除尽AF,AF可以除尽DG,所以,E也可以除尽DG。(3,传递)

10)进一步,因为E可以除尽CD,E可以除尽DG,所以,E也可以除尽CD-DG=CG而获得的CG,(4,直观)

11)最后,因为E可以除尽CG,CG可以除尽FH,所以,E也可以除尽FH,(5,传递)

12)所以,E可以除尽AF,又可以除尽FH,留下AF-FH=HA=1,并没有除尽,这种情况是不可能的。

13)所以假设不成立,

14)由此而证明命题1。

但如文本注释所示,欧几里得获得的中间结论1到5,虽然直觉上似乎都没有问题,恐怕正如伊壁鸠鲁学派的嘲弄者所言,就连笨驴也可以懂这常识,哪里需要证明?但一个严格的演绎体系,凭直觉是不行的,每一步都得有体系内的依据。就此而言,欧几里得建立起这个智慧大厦,功盖万世,但在严格性和很多方面,还真是得有人去批评和完善。不然,这科学大业,何以进化?其实,岂非科学大业,各行各业都应该是这个道理。

好了,还是回到两种证明方法,归谬法和反证法上来。

也许不少人把反证法和归谬法看作是一个方法,非专业情况下,混为一谈可以谅解。但对讲究严格性和科学性的数学与逻辑学科而言,二者则是不应该混淆的。

如果我们意在反驳一个命题,用间接的方式来反驳,我们在这时候就常常使用归谬法。英文使用拉丁文reductio ad absurdum,来表达这个方法。命题1的证明中,将其中的1)-12)单独抽取,它就是一个对于命题“AB与CD不是互质数”的反驳,最后推出不可能,就反驳成功。

而如果我们需要反证法来获得结果,常常需要在反驳基础上再使用两个重要的逻辑规律,一个是排中律,一个是矛盾律。反证法的英文表述正好说明了这一点,英文反证法的语词是(proof by contradiction),借助矛盾获得证明。矛盾律让我们需要确定,一对看来相反的命题是否具有矛盾关系。

这也是逻辑与数学的精微之处,两个看似相反的命题不仅可能是矛盾的,也可能不是矛盾的,而是反对的。所以得有了这个确认,我们才能使用排中律:两个互相矛盾的命题之间没有第三者。

既然已经证明一方的命题为假,和它矛盾的另一方就一定为真,这就是在使用排中律。就此而言,几何原本第七卷的命题1中所使用的反证法,也有确认一对命题是否是矛盾命题,再来确认原命题真,那才是严格的。就这一点,几何原本也有待完善之处。不过,人都天生有偷懒就便的习气,有时候也不是不严格,而是著者自身的毛病。这个世界大概多为俗人,就是智者也不能称为圣人,哪里免得了做人的俗气。

存在感是指的当下,但人都有历史感,总希图对过往的痕迹排个顺序。就历史感而言,给人的感觉是先有归谬法,然后才出现反证法。归谬法自然也是希腊人的功劳,一般认为,柏拉图在他的《巴门尼德》篇中首次记载了归谬法的出处。

埃利亚学派的芝诺(前490-430)在与苏格拉底的对话中提到:他说巴门尼德假定“世界是一”,要比“世界是多”更有道理。为什么呢?因为从“世界是多”,可以推出许多不可能的荒谬结论,这就是芝诺的反驳式论证方法:归于不可能的论证(reductio ad impossibile)。当这种归于不可能的论证用到肯定一个矛盾命题的真的时候,归谬法就成了反证法。(《柏拉图对话集》第402页)

2柏拉图对话集

3柏拉图(前428-348)和亚里士多德

4反证法和归谬法图表

这个论证方法,大概也是亚里士多德在他的《工具论》中发掘出逻辑三个基本规律的源头吧,这留待以后讨论。

篇末之时,得提提反证法后来受到的一个挑战。如本文开头所言,凭什么?一个和原命题相反的命题它不成立,就证明原命题成立了呢?

20世纪的数学学派出了个直觉主义,他否定逻辑规律中的排中律。认为排中律仅存在于有限集合之中,对于无限集合则无效。这个提法后来构成了构造性数学的群体,虽然并未影响反证法的继续使用,但无疑是我们今天使用反证法的一个提醒。

算法和逻辑的这几篇简单而粗糙小文,写到这里,算是对古代逻辑与算法思想的极简回顾。下一篇,该是跨越近乎千年的中世纪回顾了。2019/10/28

欧几里得算法中的归谬法和反证法 逻辑与算法之七相关推荐

  1. 贫乏却最美好的三段论和神奇而不太严格的欧几里得算法-逻辑与算法之六

    贫乏却最美好的三段论和神奇而不太严格的欧几里得算法- 逻辑与算法之六 三段论是没有数字计算的推理,虽然如有些学者所言,这个来自希腊语的术语"三段论"本身就有计算的涵义.但希腊语的这 ...

  2. 算法初体验之欧几里得算法

    通过本文希望能给程序设计的初学者一些启发. 本文重点讲述欧几里得算法,引出算法的三大前提,大概阐明算法的一些特点. 欧几里得算法(或辗转相除法)用于计算两个正整数的最大公约数,基本算法如下: E:设两 ...

  3. C++ 二元一次不定方程巧妙求解——运用扩展欧几里得算法

    前言 在关于数论的学习中,求解二元一次不定方程是很重要的,在学习求解二元一次不定方程之前,要先了解欧几里得算法和扩展欧几里得算法. 关于数论的学习 欧几里得算法 欧几里得算法就是辗转相除法,欧几里得算 ...

  4. 『扩展欧几里得算法 Extended Euclid』

    Euclid算法(gcd) 在学习扩展欧几里得算法之前,当然要复习一下欧几里得算法啦. 众所周知,欧几里得算法又称gcd算法,辗转相除法,可以在\(O(log_2b)\)时间内求解\((a,b)\)( ...

  5. 【密码学|算法设计】拓展的欧几里得算法及理论证明 (Extended Euclidean Algorithm)

    文章目录 前言 一.算法理论 1.1 算法 1.2 理解 1.3 证明 二.示例 前言 写给马上要考密码学的小伙伴 一.算法理论 1.1 算法 对于给定两个整数 a a a和 b b b,求其最大公因 ...

  6. Python在GF(2⁸)有限域上求解多项式的乘法逆元——基于扩展欧几里得算法

    文章目录 一.前言 二.数学基础 1.GF(2⁸)有限域内的多项式 2.不可约多项式 3.多项式模运算 3.乘法逆元 三.算法步骤 1.扩展欧几里得算法 2.多项式除法 3.多项式乘法 四.代码实现 ...

  7. 密码学基础算法(一)基于整数的欧几里得算法和扩展欧几里得算法

    图片来源: 随便谷歌的一个图片 图片地址: https://jason-chen-1992.weebly.com/uploads/1/0/8/5/108557741/euclidean_3_orig. ...

  8. 【算法数据结构Java实现】欧几里得算法

    1.背景 欧几里得算法是一个求最大因子的快速算法.如果m,n存在最大因子k,假设m=x*n+r,那么m和n可以整出k的话,r也肯定可以整除k 因为定理:如果M>N,则M mod N<M/2 ...

  9. 欧几里得算法和扩展欧几里得算法的简单例子

    欧几里得算法: #include <cstdio> #include <cstdlib>/* * 挑战...p113 */struct point{ //格点int x;int ...

最新文章

  1. BNF范式(巴科斯范式)简介
  2. Zend Studio使用教程:使用PHPUnit检测代码(四)
  3. ftp 追加远程文件_远程办公彻底火了,高效办公,拒绝卡顿,远程利器你选对了么?...
  4. 免除抠图困扰,专供PNG图片素材网站你知道么?
  5. python怎么调用navicat_图中的这个功能应该怎么用Python实现啊?
  6. 真实的用户,真实的中国互联网
  7. 计算机二级考试改错题技巧
  8. The 15th UESTC Programming Contest Preliminary K - Kidd1ng Me? cdoj1565
  9. Django 前后端数据传输、ajax、分页器
  10. 图像转换 - base64
  11. 用grub4dos制作U盘启动盘winpe+红叶dos+maxdos+veket+linuxmint
  12. 【高德地图】H5 Web端定位当前位置,获取GPS和地址信息?
  13. 2017(第六届)国际智慧城市峰会暨智慧城市新科技博览会在沪召开
  14. Grown Up Digital: How the Net Generation is Changing Your World
  15. 第三天 引用类型选择结构循环结构【悟空教程】
  16. 最小二乘法拟合二次曲线 C语言
  17. jquery+ajax分页
  18. 【偶爱宋词】章良能·小重山
  19. pfx证书转pem、crt、key
  20. SIMD和SPMD的区别

热门文章

  1. 基于HTML+CSS+JavaScript (品优购)电商购物项目的设计与实现(计算机毕业设计)
  2. 干货 | MAC地址可能泄露设备信息?一招教你隐藏!
  3. 一、Redis入门之——介绍、安装,图形化界面(GUI)工具Redis Desktop Manager (RDM)安装
  4. 位置不可用 Desktop不可用
  5. 【操作系统】最全复习提纲及例题
  6. css中 盒模型的属性包括(),css的盒子模型属性有哪些?css盒子模型相关属性的介绍...
  7. 支付宝PC端二维码支付(沙箱环境)
  8. 时间管理_四象限法则
  9. 2020短信服务商价格对照(40余家短信商户对照)
  10. 宝鲲财经:炒外汇“三三仓位制”资金管理策略