3.4 作者为什么用魔方的例子来说明技能的反面?

GreyZeng 2022-06-23 19:21:33

在“技能的反面——魔方与模仿”章节中,作者以这样的话做结语:

那怎么才能考察出一个人“精通”魔方呢? 我想了这样一个办法:

a) 给面试者一个各面打乱颜色的魔方

b) 要求他把六面还原

c) 如果还原了, 要求他把魔方恢复成我最初给他那个混乱的局面, 必须一模一样。

我没有完全理解作者以这段话做结的意图。作者是想告诉我们必须有逆向思维吗?但是程序的逆向思维是什么呢?是编写完一个项目之后可以给别人讲出从最后一句到第一句是什么意思吗?但是这样做的意义似乎是不明确的。我不了解魔方,我认为将还原的魔方返回到最初的混乱状态是一个比较不可回溯的过程,然而程序的每一行都是清晰且可以回看的。这样的结语似乎第一无法说明任何问题,第二和前文重笔墨探讨的项目抄袭几乎没有关系,在我看来比较莫名其妙。不知道作者的真正意图是?
————————————————
版权声明:本文为CSDN博主「刘兆薰_19373345」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_45873510/article/details/125413594

...全文
15 2 打赏 收藏 举报
写回复
2 条回复
切换为时间正序
请发表友善的回复…
发表回复

其实是一个所有软件工程师都应该具备的一种复盘能力。


复盘能力是非常重要的。

  • 打赏
  • 举报
回复
GreyZeng 06-23

我在这次的开发过程中我体会到作者说魔方这个例子的用意其实没有那么晦涩深奥,其实是一个所有软件工程师都应该具备的一种复盘能力。我们在两次阶段开发项目展示时,都会遇到老师或者同学对我们进行提问,而为了回答好这种问题,我们往往需要回到程序开发的最起点,从架构设计开始说起一直到成品实现,这样才能让提问者对我们的产品有一个更加完整的认知。而这个在开发结束后回过头去说架构设计的行为其实就是“魔方”例子中说的还原成六个面之后再恢复到最初的混乱局面。
————————————————
版权声明:本文为CSDN博主「刘兆薰_19373345」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_45873510/article/details/125413594

  • 打赏
  • 举报
回复
相关推荐
Reversing--逆向工程揭密/安全技术大系 本书描述的是在逆向与反逆向之间展开的一场旷日持久的拉锯战。作者Eldad Eilam以一个解说人的身份为我们详尽地评述了双方使的每一招每一式的优点与不足。   书中包含的主要内容有:操作系统的逆向工程;.NET平台上的逆向工程;逆向未公开的文件格式和网络协议;逆向工程的合法性问题;拷贝保护和数字版权管理技术的逆向工程;防止别人对你的代码实施逆向工程的各种技术;恶意程序的逆向工程;反编译器的基本原理以及它对逆向过程的影响。   本书适合软件逆向工程的从业人员以及软件开发者们阅读。 译者序回到顶部↑  记得第一次做与逆向有关的工作是2000年,当时由于项目的需要,做过一个钩子(hook)程序,于截获一个第三方控件发出的消息,但是当时还不知道什么是逆向工程。第一次看到“逆向工程”这个词是在2001年的《机械工程学报》上的一篇文章中,主要是讲三坐标测量仪测量产品中各个部件的三维尺寸并在计算机中快速建模、进而反推其设计思想和基本设计原则。第一次使逆向工程工具也是在2001年,当时从网上下载了Numega SoftICE,具体哪个版本已经记不清了,在家里的旧电脑上折腾了好几天,直到系统崩溃才罢手。.   之后呢,只是零零星星地看过一些相关的资料。因此,当初电子工业出版社和我联系此书的翻译时,我有些犹豫——近600页的逆向工程“巨”著,而且该书无论从深度还是广度上都较其他有关逆向工程的书更胜一筹。但褚华博士和王玉英博士的“加盟”,让我心里踏实了许多,她俩做过系统的逆向工程和程序理解的研究工作,也发表过不少相关的研究论文。   逆向工程这一术语最早源于机械工程领域(我的老本行)。随着软件业的发展,逆向工程被引入软件工程领域。对于软件逆向工程,IEEE软件工程技术委员会行政秘书E. J. Chikofsky和J. H. Cross在他们的文章中给出了如下定义:软件逆向工程是分析目标系统,认定系统的组件及其交互关系,并且通过高层抽象或其他的形式展现目标系统的过程。..   经过十几年的发展,软件逆向工程领域已有不少研究成果和商业化的产品;但是软件逆向工程仍然算不上成熟,这主要表现在对理论和实践的研究都还处于早期的探究阶段,并未形成统一的、系统的、科学的软件逆向工程的理论和方法。从工程实际的角度看,大体上可以将软件逆向工程分为两大类:   第一类是从已知软件系统的完整代码出发,生成对应系统的结构以及相关设计原理和算法思想的文档。实际上,学习和研究别人的源代码就属于此类。Chikofsky在本书的序中特别指出:阅读别人写的代码或者自己以前写的代码实际上也是逆向工程在起作。   第二类是从没有源代码的程序出发,生成对应的源程序、系统结构以及相关设计原理和算法思想的文档等,亦即本书重点讨论的二进制逆向工程。   本书共有13章和三个附录,涵盖了逆向工程的基础知识、应、开发和拓展的方方面面问题。其中第5章、第9章和附录A、B、C由韩琪翻译,第3章、第11章和第13章由杨艳翻译,第7章、第8章和第10章由王玉英翻译,第4章和第6章由李娜翻译,第1章由褚华翻译,第2章由陈贵敏翻译,第12章由辛健斌翻译;全部译稿的校对由陈贵敏和褚华完成。所有的翻译和校对工作历时半年多,在此,我要感谢为本书的出版付出辛勤汗水的电子工业出版社博文视点的工作人员,特别要感谢本书的策划编辑朱沭红老师和责任编辑顾慧芳老师,她们的严谨认真工作使该译本可读性更高,她们的鼓励更使我信心百倍。   由于译者水平所限,加之时间仓促,译文中肯定存在错误和疏漏,敬请读者批评指正。我的E-mail:efoxxx@126.com。   陈贵敏   2007年5月于西安电子科技大学...             前言回到顶部↑  欢迎你阅读《逆向:逆向工程揭密》一书。本书是在我参与了多年的软件开发项目之后写的,这些项目由于各种各样的原因需要反复地对第三方代码进行逆向工程。起初,我觉得这是一个非常单调乏味的过程,只是在没有替代方法获取信息的情况下才不得已使它。后,一霎那间我破除了某个思维障碍,我发现自己迅速地“驰骋”于无正式文献记录的机器码中,快速地破译了代码的涵义并得到我想要的有关代码功能和途的答案。这时候,我逐渐明白这是一种威力强大的技术,因为这意味着不管我有什么样的有关要处理软件的问题,我都可以非常容易地找到答案,即使我没有看过任何相关的文献资料或者正在处理的程序的源代码。本书就是要为每一个对软件有深刻理解的读者能够这样做提供相关的知识和技术。.   其思想很简单:我们应当对底层软件有深入的理解,还要学习那些能够让我们轻松进入任何程序的二进制码并获取信息的技术。不知道系统为什么会以它那样的工作方式运转而且其他人也不知道答案的话,怎么办?没问题——你完全可以自己深入研究并找到答案。这听起有点恐怖和不现实,是吗?一点儿也不,我写这本书的目的就是向你讲解并示范平常就可以于解决各种各样问题的逆向工程技术。   不过我总是急于求成。也许你以前没有接触过软件逆向工程的概念,我在这里先简要介绍一下。   逆向工程和底层软件   在开始进入本书所讨论的各部分内容之前,我们应当正式地介绍一下该书的主题:逆向工程。逆向工程是指将工程制品(比如汽车、喷气发动机或者软件程序)以揭示其最底层的细节(如其设计和架构)的方式进行解构的过程。这与研究自然现象的科学研究有些类似,区别就在于一般没有人会把科学研究看做逆向工程,这仅仅是因为没有人确切地知道自然算不算是工程制品。   对软件而言,逆向工程归结起就是拿一个既没有源代码又没有准确文献资料的现成程序,尝试恢复出它的设计和实现细节。在某些情况下,可以找到程序的源代码,但是找不到最初的开发人员了。本书所讨论的就是通常所说的二进制逆向工程。二进制逆向工程技术的目标是从没有源代码的程序中提取有价值的信息。在有些情况下可以从程序的二进制代码中恢复出准确的源代码(或者接近高级表示的代码),这会大大简化逆向工作,因为阅读高级语言写的代码要比阅读低级汇编语言代码容易得多。在其他情况下,我们最终得到的只是晦涩难懂的汇编语言程序清单。本书将讲述这一过程以及程序为什么这样运行,同时还将详细描述如何在各种不同的环境中破解程序代码。   我决定将这本书取名为“逆向(Reversing)”,这一叫法被许多在线社区描述逆向工程。因为你可以把逆向看做是逆向工程的别名,故我将在本书中交换使这两种叫法。   大多数人在尝试想像从可执行二进制程序中提取有意义的信息的时候会变得有些焦虑,因此,我把这本书的首要任务定为证明这种害怕是没有必要的。二进制逆向工程如果行得通的话,它通常能解决其他方法解决起极其困难的问题,而且如果方法得当的话它也没有你想像的那么复杂。   本书主要讨论逆向工程,但事实上书中所讲述的内容要比逆向工程多得多。在软件行业内,逆向工程被频繁地应于各种场合,本书的主要目标之一就是在讲授逆向工程的同时研究这些领域。   下面简要地列出了本书要讨论的一些主题:   IA-32兼容处理器的汇编语言以及如何阅读编译器生成的汇编语言代码;   操作系统内幕以及如何对操作系统实施逆向工程;   .NET平台上的逆向工程,包括.NET开发平台的简介及.NET平台汇编语言:MSIL(Microsoft中间语言);   数据逆向工程:如何破译未公开的文件格式或者网络协议;   逆向工程的合法性问题:什么情况下是合法的,什么情况下是非法的?   拷贝保护和数字版权管理技术;   破解人员是如何应逆向工程使拷贝保护技术失效的;   防止人们对代码实施逆向工程的技术并认真尝试评价这些技术的有效性;..   目前恶意程序的基本原理以及如何应逆向工程研究并清除这样的程序;   一个真实恶意程序的现场剖析和展示,以及揭示了攻击者是怎样通过程序通信获得被感染系统的控制权的; .  反编译器背后的理论和原则,以及它们对各种低级语言代码进行反编译的有效性。   本书的组织   本书共分四部分。第1部分提供了学习后边部分所需的基础知识,其他三个部分分别讲述了不同的逆向工程情景,并展示了真实的案例研究。每一部分的详细描述如下。   第1部分—逆向101:本书是从讨论理解底层软件所需的所有基础知识开始的。你必定能想像到,这几章不可能包含所有相关的知识,你只需将这些内容看作是对以前学过的材料重新整理。如果本书前三章讲述的所有内容或者大部分内容对你说都是全新的,那么这本书不适合你。这几章的主要内容有:介绍了逆向工程及其各种应(第1章),底层软件的概念(第2章),并以Microsoft Windows为重点介绍了操作系统内部结构(第3章)。总的说,如果你精通这些内容以及底层软件,你基本上可以跳过这几章。第4章讨论了各种类型的常逆向工程工具,并为各种情况推荐了适合的专工具。这些工具的大部分都在本书展示的逆向工程实例过程中使过。   第2部分——应逆向:本书的第2部分演示了在真正的软件上实施的逆向工程项目。这部分的每一章分别讨论一种不同类型的逆向工程应。第5章讨论了最常见的情境——对操作系统或第三方代码库进行逆向工程,以便更好地利它的内部服务和API。第6章展示了如何应数据逆向工程技术破解无正式文档记录的专文件格式。第7章展示了漏洞研究人员如何使逆向工程技术在二进制代码可执行程序中寻找漏洞。这部分的最后一章,第8章讨论了恶意软件,如病毒和蠕虫,并简要介绍了这一内容。这一章还展示了对真正的恶意程序进行逆向工程的实例过程,这实际上就是恶意软件研究人员为了研究恶意程序、估计它们带的危险、并研究如何清除它们所必须经历的过程。   第3部分——盗版和拷贝保护:这一部分主要讨论与安全相关的代码的逆向工程,如拷贝保护和数字版权管理(Digital Rights Management,DRM)技术。第9章简要介绍了盗版和拷贝保护并讨论了拷贝保护技术的基本原则。第10章讲述了反逆向工程技术,如在拷贝保护和DRM技术中常常采的技术,并评价它们的有效性。第11章讨论了“破解者”是怎样使逆向工程破解拷贝保护机制并窃取拷贝保护内容的。   第4部分——反汇编之外:本书的最后部分所讲述的内容已经超出了可执行程序的简单反汇编。第12章讨论了在Microsoft .NET开发平台上开发的虚拟机程序的逆向工程过程。这一章简单介绍了.NET平台及其低级的汇编语言MSIL(Microsoft 中间语言,Microsoft Intermediate Language)。第13章论讨论了有关反编译的更理论化的主题,并说明了反编译器是怎样工作的以及反编译本地汇编语言代码为什么那么具有挑战性。   附录:本书共包含三个附录,可以作为破解Intel IA-32汇编语言程序的有价值的参考资料。这几个附录远远超出了简单的汇编语言参考向导,讲述了公共代码段(common code fragments)和常编译器对几种典型的代码序列表现出的编译器习性(complier idioms),并介绍了识别和破解它们的方法。   谁应当阅读此书   本书所揭示的技术能够让各行各业的人受益。软件开发人员想要提高他们对软件底层知识的理解:如操作系统、汇编语言、编译,等等,这本书无疑会让他们受益匪浅。更重要的是,该书能够让所有对开发技术感兴趣的人们快速而高效地研究和考察现有代码,不管是操作系统代码、软件库代码还是软件组件代码。除了这些技术以外,本书还提供了诸如安全、版权控制等许多主题的精彩讲述。即使对逆向工程不是很感兴趣,只是在书中找到一处或多处感兴趣的内容,你就可能从中获益。   就预修知识而言,本书涉及到一些相当高级的技术材料,我已经试着尽可能让它们在内容上保持独立。所需的大多数基础知识都包含在本书的第1部分中。当然,要想真正从本书中获益,你还得有一定的软件开发知识和经验,这也是很重要的。如果你一点专业的软件开发经验都没有,但是现在正在学习这方面的知识,那也为时不晚。相反地,如果你没有正规地学习过计算机,只做过几年的程序设计,那你也可能从本书中获益。   最后,对于那些已经具有底层软件和逆向工程经验的高级读者而言,他们希望学习一些有趣的高级技术和如何从现有代码中提取非常详细的信息,本书也会对他们有所帮助。   工具和平台   实施逆向工程需要各种各样的工具。本书通篇介绍和讨论了大量这样的工具,而且我有意地在大部分范例中使免费工具,这样读者就可以照着范例实践而不需要在工具上花费数千美元了。需要指出的是,在某些情况下,大型的逆向工程项目会从这些昂贵的工具中受益匪浅。我试着为每个相关的工具提供尽量多的信息,并展示每个工具对逆向过程的影响。项目是否值得花钱去买工具,最终的决定权还在读者手里。   逆向工程通常是平台相关的,它会受到具体的操作系统和所的硬件平台的影响。本书中使的主要操作系统是Microsoft Windows,而且我有很好的理由说明为什么选择Microsoft Windows。Windows是最流行的逆向工程环境,这不仅仅是因为它是最流行的操作系统。例如,受人欢迎的Windows替代品——开放源码的Linux,准确地讲它与逆向的立场相去甚远,因为整个操作系统以及在其上运行的大部分软件的源代码都是开放的。逆向开发源码的产品是没有意义的——直接读源代码就好了,或者还有更好的办法——咨询原开发者,没有什么秘密可言。   本书网站上有什么   你可以访问本书的网站http://www.wiley.com/go/eeilam,上面有书中所有的示例程序。在网站上我还增加了链向本书讨论过的各种文章、产品以及在线资源的链接。   从哪里开始学习?   本书是按照从开始到结尾顺序阅读的方式写作的。当然,有些人可能更愿意挑选感兴趣的章节阅读,对他们说这样获益更多。就从哪里开始而言,不考虑你的背景,我建议你先读一下第1章,以确保你了解本书所涉及的所有基本的与逆向工程相关的资料。如果你没有很好的逆向工程和底层软件经验的话,我强烈建议你按照本书的“自然”顺序阅读,最起码前两部分要这样做。   如果你经验丰富,并觉得自己精通软件开发和操作系统的话,或许你可以直接跳到第4章开始学习逆向工程工具。...
本书描述的是在逆向与反逆向之间展开的一场旷日持久的拉锯战。作者Eldad Eilam以一个解说人的身份为我们详尽地评述了双方使的每一招每一式的优点与不足。 书中包含的主要内容有:操作系统的逆向工程;.NET平台上的逆向工程;逆向未公开的文件格式和网络协议;逆向工程的合法性问题;拷贝保护和数字版权管理技术的逆向工程;防止别人对你的代码实施逆向工程的各种技术;恶意程序的逆向工程;反编译器的基本原理以及它对逆向过程的影响。 本书适合软件逆向工程的从业人员以及软件开发者们阅读 第1部分 逆向101 第1章 基础 3 1.1 什么是逆向工程 3 1.2 软件逆向工程:逆向 4 1.3 逆向应 4 1.3.1 与安全相关的逆向 5 1.3.2 软件开发中的逆向 8 1.4 底层软件 9 1.4.1 汇编语言 10 1.4.2 编译器 11 1.4.3 虚拟机和字节码 12 1.4.4 操作系统 13 1.5 逆向过程 13 1.5.1 系统级逆向 14 1.5.2 代码级逆向 14 1.6 工具 14 1.6.1 系统监控工具 15 1.6.2 反汇编器 15 1.6.3 调试器 15 1.6.4 反编译器 16 1.7 逆向合法吗? 17 1.7.1 互操作性 17 1.7.2 竞争 18 1.7.3 版权法 19 1.7.4 商业机密和专利权 20 1.7.5 美国数字千禧版权法 20 1.7.6 DMCA案例 22 1.7.7 许可证协议 23 1.8 代码范例与工具 23 1.9 结论 23 第2章 底层软件 25 2.1 高阶视角 26 2.1.1 程序结构 26 2.1.2 数据管理 29 2.1.3 控制流 32 2.1.4 高级语言 33 2.2 低阶视角 37 2.2.1 底层数据管理 37 2.2.2 控制流 43 2.3 汇编语言101 44 2.3.1 寄存器 44 2.3.2 标志位 46 2.3.3 指令格式 47 2.3.4 基本指令 48 2.3.5 范例 52 2.4 编译器和编译入门 53 2.4.1 定义编译器 54 2.4.2 编译器架构 55 2.4.3 列表文件 58 2.4.4 专编译器 59 2.5 执行环境 60 2.5.1 软件执行环境(虚拟机) 60 2.5.2 现代处理器的硬件执行环境 63 2.6 结论 68 第3章 Windows基础知识 69 3.1 组件及基本架构 70 3.1.1 简要回顾 70 3.1.2 特征 70 3.1.3 支持的硬件 71 3.2 内存管理 71 3.2.1 虚拟内存和分页 72 3.2.2 工作集 74 3.2.3 内核内存和户内存 74 3.2.4 内核内存空间 75 3.2.5 区段对象 77 3.2.6 VAD树 78 3.2.7 户模式的内存分配 78 3.2.8 内存管理API 79 3.3 对象与句柄 80 命名对象 81 3.4 进程与线程 83 3.4.1 进程 84 3.4.2 线程 84 3.4.3 运行状态切换 85 3.4.4 同步对象 86 3.4.5 进程初始化顺序 87 3.5 应程序编程接口 88 3.5.1 Win32 API 88 3.5.2 本地API 90 3.5.3 系统调机制 91 3.6 可执行文件格式 93 3.6.1 基本概念 93 3.6.2 映像区段(Image Sections) 95 3.6.3 区段对齐(Section Alignment) 95 3.6.4 动态链接库 96 3.6.5 头部 97 3.6.6 导入与导出 99 3.6.7 目录 99 3.7 输入与输出 103 3.7.1 I/O系统 103 3.7.2 Win32子系统 104 3.8 结构化异常处理 105 3.9 结论 107 第4章 逆向工具 109 4.1 不同的逆向方法 110 4.1.1 离线代码分析 110 4.1.2 现场代码分析 110 4.2 反汇编器——ILDasm 110 4.3 调试器 116 4.3.1 户模式调试器 118 4.3.2 内核模式调试器 122 4.4 反编译器 129 4.5 系统监控工具 129 4.6 修补工具 131 Hex Workshop 131 4.7 其他类型的逆向工具 133 可执行程序转储工具 133 4.8 结论 138 第2部分 应逆向 第5章 未公开的技术 141 5.1 逆向和互操作性 142 5.2 基本原则 142 5.3 定位未公开的API函数 143 我们要找什么? 144 5.4 案例研究:NTDLL.DLL中的 5.4 Generic Table API 145 5.4.1 RtlInitializeGenericTable 146 5.4.2 RtlNumberGenericTableElements 151 5.4.3 RtlIsGenericTableEmpty 152 5.4.4 RtlGetElementGenericTable 153 5.4.5 RtlInsertElementGenericTable 168 5.4.6 RtlLookupElementGenericTable 188 5.4.7 RtlDeleteElementGenericTable 193 5.4.8 思路整理 194 5.5 结论 196 第6章 破译文件格式 199 6.1 Cryptex 200 6.2 使Cryptex 201 6.3 逆向Cryptex 202 6.4 口令校验过程 207 6.4.1 捕获“Bad Password”消息 207 6.4.2 口令变换算法 210 6.4.3 对口令作hash处理 213 6.5 目录结构 218 6.5.1 分析目录处理代码 218 6.5.2 分析文件项 223 6.6 转储目录结构 227 6.7 文件提取过程 228 6.7.1 扫描文件列表 234 6.7.2 解密文件 235 6.7.3 浮点运算代码 236 6.7.4 解密循环 238 6.7.5 验证Hash值 239 6.8 要点总结 239 6.9 进一步讨论 241 6.10 结论 242 第7章 审查程序的二进制码 243 7.1 定义问题 243 7.2 漏洞 245 7.2.1 堆栈溢出 245 7.2.2 堆溢出 255 7.2.3 字符串过滤程序 256 7.2.4 整数溢出 256 7.2.5 类型转换错误 260 7.3 案例研究:IIS索引服务漏洞 262 7.3.1 CVariableSet:: 7.3.1 AddExtensionControlBlock 263 7.3.2 DecodeURLEscapes 267 7.4 结论 271 第8章 逆向恶意软件 273 8.1 恶意软件的分类 274 8.1.1 病毒 274 8.1.2 蠕虫 274 8.1.3 特洛伊木马 275 8.1.4 后门 276 8.1.5 移动代码 276 8.1.6 广告软件和间谍软件 276 8.2 粘人的软件(Sticky 8.2 Software) 277 8.3 未的恶意软件 278 8.3.1 盗取信息的蠕虫 278 8.3.2 BIOS/固件恶意软件 279 8.4 恶意软件的使 280 8.5 恶意软件的弱点 281 8.6 多态 282 8.7 变形 283 8.8 建立安全的环境 285 8.9 Backdoor.Hacarmy.D 285 8.9.1 脱壳可执行文件 286 8.9.2 初次印象 290 8.9.3 初次安装 291 8.9.4 初始化通信设置 294 8.9.5 连接到服务器 296 8.9.6 连接信道 298 8.9.7 与后门进行通信 299 8.9.8 运行SOCK4服务器 303 8.9.9 清理犯罪现场 303 8.10 The Backdoor.Hacarmy.D: 8.10 命令参考 304 8.11 结论 306 第3部分 破解 第9章 盗版与拷贝保护 309 9.1 世界中的版权 309 9.2 社会方面 310 9.3 软件盗版 310 9.3.1 明确问题 311 9.3.2 群破解 312 9.3.3 需求 313 9.3.4 理论上不可破解的模型 314 9.4 各种类型的保护 314 9.4.1 基于介质的保护 314 9.4.2 序列号 315 9.4.3 质询响应和在线激活 315 9.4.4 基于硬件的保护 316 9.4.5 软件即服务 317 9.5 高级保护的概念 318 加密处理器 318 9.6 数字版权管理 319 数字版权管理模型 320 9.7 加水印 321 9.8 可信计算 322 9.9 破解拷贝保护技术 324 9.10 结论 324 第10章 反逆向技术 327 10.1 为什么要反逆向? 327 10.2 反逆向的基本方法 328 10.3 消除符号信息 329 10.4 代码加密 330 10.5 活跃的反调试器技术 331 10.5.1 调试器基础 331 10.5.2 API函数IsDebuggerPresent 332 10.5.3 SystemKernelDebugger 10.5.3 Information 333 10.5.4 单步中断检测SoftICE 334 10.5.5 陷阱标志 335 10.5.6 代码校验和 335 10.6 迷惑反汇编器 336 10.6.1 线性扫描反汇编器 337 10.6.2 递归遍历反汇编器 338 10.6.3 应 343 10.7 代码混淆 344 10.8 控制流变换 346 10.8.1 暗晦谓词 346 10.8.2 迷惑反编译器 348 10.8.3 表译码 348 10.8.4 内联和外联 353 10.8.5 交叉代码 354 10.8.6 次序变换 355 10.9 数据变换 355 10.9.1 修改变量编码 355 10.9.2 重构数组 356 10.10 结论 356 第11章 突破保护 357 11.1 修补程序(Patching) 358 11.2 生成密钥 364 11.3 取密钥生成算法 365 11.4 高级破解:Defender 370 11.4.1 逆向Defender的初始化程序 377 11.4.2 分析解密后的代码 387 11.4.3 SoftICE的消失 396 11.4.4 逆向分析第二个线程 396 11.4.5 击败“杀手(Killer)”线程 399 11.4.6 加载KERNEL32.DLL 400 11.4.7 再加密函数 401 11.4.8 回到入口点 402 11.4.9 解析程序的参数 404 11.4.10 处理户名 406 11.4.11 验证户信息 407 11.4.12 解密代码 409 11.4.13 暴力破解Defender 409 11.5 Defender中的保护技术 415 11.5.1 局部化的函数级加密 415 11.5.2 混淆应程序与操作系统 11.5.2 之间的接口 416 11.5.3 处理器时间戳验证线程 417 11.5.4 在运行时生成解密密钥 418 11.5.5 重度内联 419 11.6 结论 419 第4部分 反汇编之外 第12章 逆向.NET 423 12.1 基本原则 424 12.2 .NET基础 426 12.2.1 托管代码 426 12.2.2 .NET程序设计语言 428 12.2.3 通类型系统 428 12.3 中间语言 429 12.3.1 求值堆栈 430 12.3.2 活动记录 430 12.3.3 IL指令 430 12.3.4 代码实例 433 12.4 反编译器 443 12.5 混淆器 444 12.5.1 重命名符号 444 12.5.2 控制流混淆 444 12.5.3 中断反编译与中断反汇编 444 12.6 逆向混淆代码 445 12.6.1 XenoCode混淆器 446 12.6.2 DotFuscator by Preemptive 12.6.2 Solutions 448 12.6.3 Remotesoft 混淆器与连接器 451 12.6.4 Remotesoft Protector 452 12.6.5 预编译的汇编程序 453 12.6.6 加密的汇编程序 453 12.7 结论 455 第13章 反编译 457 13.1 本地代码的反编译:是一个 13.1 解决不了的问题吗? 457 13.2 典型的反编译器架构 459 13.3 中间表示 459 13.3.1 表达式和表达式树 461 13.3.2 控制流图 462 13.4 前端 463 13.4.1 语义分析 463 13.4.2 生成控制流图 464 13.5 代码分析 466 13.5.1 数据流分析 466 13.5.2 类型分析 472 13.5.3 控制流分析 475 13.5.4 查找库函数 475 13.6 反编译器后端 476 13.7 Real-World IA-32反编译 477 13.8 结论 477 附录A 揭密代码结构 479 附录B 理解编译后的算术运算 519 附录C 破译程序数据 537 索引 561 译 者 序 记得第一次做与逆向有关的工作是2000年,当时由于项目的需要,做过一个钩子(hook)程序,于截获一个第三方控件发出的消息,但是当时还不知道什么是逆向工程。第一次看到“逆向工程”这个词是在2001年的《机械工程学报》上的一篇文章中,主要是讲三坐标测量仪测量产品中各个部件的三维尺寸并在计算机中快速建模、进而反推其设计思想和基本设计原则。第一次使逆向工程工具也是在2001年,当时从网上下载了Numega SoftICE,具体哪个版本已经记不清了,在家里的旧电脑上折腾了好几天,直到系统崩溃才罢手。 之后呢,只是零零星星地看过一些相关的资料。因此,当初电子工业出版社和我联系此书的翻译时,我有些犹豫——近600页的逆向工程“巨”著,而且该书无论从深度还是广度上都较其他有关逆向工程的书更胜一筹。但褚华博士和王玉英博士的“加盟”,让我心里踏实了许多,她俩做过系统的逆向工程和程序理解的研究工作,也发表过不少相关的研究论文。 逆向工程这一术语最早源于机械工程领域(我的老本行)。随着软件业的发展,逆向工程被引入软件工程领域。对于软件逆向工程,IEEE软件工程技术委员会行政秘书E. J. Chikofsky和J. H. Cross在他们的文章中给出了如下定义:软件逆向工程是分析目标系统,认定系统的组件及其交互关系,并且通过高层抽象或其他的形式展现目标系统的过程。 经过十几年的发展,软件逆向工程领域已有不少研究成果和商业化的产品;但是软件逆向工程仍然算不上成熟,这主要表现在对理论和实践的研究都还处于早期的探究阶段,并未形成统一的、系统的、科学的软件逆向工程的理论和方法。从工程实际的角度看,大体上可以将软件逆向工程分为两大类: 第一类是从已知软件系统的完整代码出发,生成对应系统的结构以及相关设计原理和算法思想的文档。实际上,学习和研究别人的源代码就属于此类。Chikofsky在本书的序中特别指出:阅读别人写的代码或者自己以前写的代码实际上也是逆向工程在起作。 第二类是从没有源代码的程序出发,生成对应的源程序、系统结构以及相关设计原理和算法思想的文档等,亦即本书重点讨论的二进制逆向工程。 本书共有13章和三个附录,涵盖了逆向工程的基础知识、应、开发和拓展的方方面面问题。其中第5章、第9章和附录A、B、C由韩琪翻译,第3章、第11章和第13章由杨艳翻译,第7章、第8章和第10章由王玉英翻译,第4章和第6章由李娜翻译,第1章由褚华翻译,第2章由陈贵敏翻译,第12章由辛健斌翻译;全部译稿的校对由陈贵敏和褚华完成。所有的翻译和校对工作历时半年多,在此,我要感谢为本书的出版付出辛勤汗水的电子工业出版社博文视点的工作人员,特别要感谢本书的策划编辑朱沭红老师和责任编辑顾慧芳老师,她们的严谨认真工作使该译本可读性更高,她们的鼓励更使我信心百倍。 由于译者水平所限,加之时间仓促,译文中肯定存在错误和疏漏,敬请读者批评指正。我的E-mail:efoxxx@126.com。 陈贵敏 2007年5月于西安电子科技大学 简 介 欢迎你阅读《逆向:逆向工程揭密》一书。本书是在我参与了多年的软件开发项目之后写的,这些项目由于各种各样的原因需要反复地对第三方代码进行逆向工程。起初,我觉得这是一个非常单调乏味的过程,只是在没有替代方法获取信息的情况下才不得已使它。后,一霎那间我破除了某个思维障碍,我发现自己迅速地“驰骋”于无正式文献记录的机器码中,快速地破译了代码的涵义并得到我想要的有关代码功能和途的答案。这时候,我逐渐明白这是一种威力强大的技术,因为这意味着不管我有什么样的有关要处理软件的问题,我都可以非常容易地找到答案,即使我没有看过任何相关的文献资料或者正在处理的程序的源代码。本书就是要为每一个对软件有深刻理解的读者能够这样做提供相关的知识和技术。 其思想很简单:我们应当对底层软件有深入的理解,还要学习那些能够让我们轻松进入任何程序的二进制码并获取信息的技术。不知道系统为什么会以它那样的工作方式运转而且其他人也不知道答案的话,怎么办?没问题——你完全可以自己深入研究并找到答案。这听起有点恐怖和不现实,是吗?一点儿也不,我写这本书的目的就是向你讲解并示范平常就可以于解决各种各样问题的逆向工程技术。 不过我总是急于求成。也许你以前没有接触过软件逆向工程的概念,我在这里先简要介绍一下。 逆向工程和底层软件 在开始进入本书所讨论的各部分内容之前,我们应当正式地介绍一下该书的主题:逆向工程。逆向工程是指将工程制品(比如汽车、喷气发动机或者软件程序)以揭示其最底层的细节(如其设计和架构)的方式进行解构的过程。这与研究自然现象的科学研究有些类似,区别就在于一般没有人会把科学研究看做逆向工程,这仅仅是因为没有人确切地知道自然算不算是工程制品。 对软件而言,逆向工程归结起就是拿一个既没有源代码又没有准确文献资料的现成程序,尝试恢复出它的设计和实现细节。在某些情况下,可以找到程序的源代码,但是找不到最初的开发人员了。本书所讨论的就是通常所说的二进制逆向工程。二进制逆向工程技术的目标是从没有源代码的程序中提取有价值的信息。在有些情况下可以从程序的二进制代码中恢复出准确的源代码(或者接近高级表示的代码),这会大大简化逆向工作,因为阅读高级语言写的代码要比阅读低级汇编语言代码容易得多。在其他情况下,我们最终得到的只是晦涩难懂的汇编语言程序清单。本书将讲述这一过程以及程序为什么这样运行,同时还将详细描述如何在各种不同的环境中破解程序代码。 我决定将这本书取名为“逆向(Reversing)”,这一叫法被许多在线社区描述逆向工程。因为你可以把逆向看做是逆向工程的别名,故我将在本书中交换使这两种叫法。 大多数人在尝试想像从可执行二进制程序中提取有意义的信息的时候会变得有些焦虑,因此,我把这本书的首要任务定为证明这种害怕是没有必要的。二进制逆向工程如果行得通的话,它通常能解决其他方法解决起极其困难的问题,而且如果方法得当的话它也没有你想像的那么复杂。 本书主要讨论逆向工程,但事实上书中所讲述的内容要比逆向工程多得多。在软件行业内,逆向工程被频繁地应于各种场合,本书的主要目标之一就是在讲授逆向工程的同时研究这些领域。 下面简要地列出了本书要讨论的一些主题: , IA-32兼容处理器的汇编语言以及如何阅读编译器生成的汇编语言代码; , 操作系统内幕以及如何对操作系统实施逆向工程; , .NET平台上的逆向工程,包括.NET开发平台的简介及.NET平台汇编语言:MSIL(Microsoft中间语言); , 数据逆向工程:如何破译未公开的文件格式或者网络协议; , 逆向工程的合法性问题:什么情况下是合法的,什么情况下是非法的? , 拷贝保护和数字版权管理技术; , 破解人员是如何应逆向工程使拷贝保护技术失效的; , 防止人们对代码实施逆向工程的技术并认真尝试评价这些技术的有效性; , 目前恶意程序的基本原理以及如何应逆向工程研究并清除这样的程序; , 一个真实恶意程序的现场剖析和展示,以及揭示了攻击者是怎样通过程序通信获得被感染系统的控制权的; , 反编译器背后的理论和原则,以及它们对各种低级语言代码进行反编译的有效性。 本书的组织 本书共分四部分。第1部分提供了学习后边部分所需的基础知识,其他三个部分分别讲述了不同的逆向工程情景,并展示了真实的案例研究。每一部分的详细描述如下。 , 第1部分—逆向101:本书是从讨论理解底层软件所需的所有基础知识开始的。你必定能想像到,这几章不可能包含所有相关的知识,你只需将这些内容看作是对以前学过的材料重新整理。如果本书前三章讲述的所有内容或者大部分内容对你说都是全新的,那么这本书不适合你。这几章的主要内容有:介绍了逆向工程及其各种应(第1章),底层软件的概念(第2章),并以Microsoft Windows为重点介绍了操作系统内部结构(第3章)。总的说,如果你精通这些内容以及底层软件,你基本上可以跳过这几章。第4章讨论了各种类型的常逆向工程工具,并为各种情况推荐了适合的专工具。这些工具的大部分都在本书展示的逆向工程实例过程中使过。 , 第2部分——应逆向:本书的第2部分演示了在真正的软件上实施的逆向工程项目。这部分的每一章分别讨论一种不同类型的逆向工程应。第5章讨论了最常见的情境——对操作系统或第三方代码库进行逆向工程,以便更好地利它的内部服务和API。第6章展示了如何应数据逆向工程技术破解无正式文档记录的专文件格式。第7章展示了漏洞研究人员如何使逆向工程技术在二进制代码可执行程序中寻找漏洞。这部分的最后一章,第8章讨论了恶意软件,如病毒和蠕虫,并简要介绍了这一内容。这一章还展示了对真正的恶意程序进行逆向工程的实例过程,这实际上就是恶意软件研究人员为了研究恶意程序、估计它们带的危险、并研究如何清除它们所必须经历的过程。 , 第3部分——盗版和拷贝保护:这一部分主要讨论与安全相关的代码的逆向工程,如拷贝保护和数字版权管理(Digital Rights Management,DRM)技术。第9章简要介绍了盗版和拷贝保护并讨论了拷贝保护技术的基本原则。第10章讲述了反逆向工程技术,如在拷贝保护和DRM技术中常常采的技术,并评价它们的有效性。第11章讨论了“破解者”是怎样使逆向工程破解拷贝保护机制并窃取拷贝保护内容的。 , 第4部分——反汇编之外:本书的最后部分所讲述的内容已经超出了可执行程序的简单反汇编。第12章讨论了在Microsoft .NET开发平台上开发的虚拟机程序的逆向工程过程。这一章简单介绍了.NET平台及其低级的汇编语言MSIL(Microsoft 中间语言,Microsoft Intermediate Language)。第13章论讨论了有关反编译的更理论化的主题,并说明了反编译器是怎样工作的以及反编译本地汇编语言代码为什么那么具有挑战性。 , 附录:本书共包含三个附录,可以作为破解Intel IA-32汇编语言程序的有价值的参考资料。这几个附录远远超出了简单的汇编语言参考向导,讲述了公共代码段(common code fragments)和常编译器对几种典型的代码序列表现出的编译器习性(complier idioms),并介绍了识别和破解它们的方法。 谁应当阅读此书 本书所揭示的技术能够让各行各业的人受益。软件开发人员想要提高他们对软件底层知识的理解:如操作系统、汇编语言、编译,等等,这本书无疑会让他们受益匪浅。更重要的是,该书能够让所有对开发技术感兴趣的人们快速而高效地研究和考察现有代码,不管是操作系统代码、软件库代码还是软件组件代码。除了这些技术以外,本书还提供了诸如安全、版权控制等许多主题的精彩讲述。即使对逆向工程不是很感兴趣,只是在书中找到一处或多处感兴趣的内容,你就可能从中获益。 就预修知识而言,本书涉及到一些相当高级的技术材料,我已经试着尽可能让它们在内容上保持独立。所需的大多数基础知识都包含在本书的第1部分中。当然,要想真正从本书中获益,你还得有一定的软件开发知识和经验,这也是很重要的。如果你一点专业的软件开发经验都没有,但是现在正在学习这方面的知识,那也为时不晚。相反地,如果你没有正规地学习过计算机,只做过几年的程序设计,那你也可能从本书中获益。 最后,对于那些已经具有底层软件和逆向工程经验的高级读者而言,他们希望学习一些有趣的高级技术和如何从现有代码中提取非常详细的信息,本书也会对他们有所帮助。 工具和平台 实施逆向工程需要各种各样的工具。本书通篇介绍和讨论了大量这样的工具,而且我有意地在大部分范例中使免费工具,这样读者就可以照着范例实践而不需要在工具上花费数千美元了。需要指出的是,在某些情况下,大型的逆向工程项目会从这些昂贵的工具中受益匪浅。我试着为每个相关的工具提供尽量多的信息,并展示每个工具对逆向过程的影响。项目是否值得花钱去买工具,最终的决定权还在读者手里。 逆向工程通常是平台相关的,它会受到具体的操作系统和所的硬件平台的影响。本书中使的主要操作系统是Microsoft Windows,而且我有很好的理由说明为什么选择Microsoft Windows。Windows是最流行的逆向工程环境,这不仅仅是因为它是最流行的操作系统。例如,受人欢迎的Windows替代品——开放源码的Linux,准确地讲它与逆向的立场相去甚远,因为整个操作系统以及在其上运行的大部分软件的源代码都是开放的。逆向开发源码的产品是没有意义的——直接读源代码就好了,或者还有更好的办法——咨询原开发者,没有什么秘密可言。 本书网站上有什么 你可以访问本书的网站http://www.wiley.com/go/eeilam,上面有书中所有的示例程序。在网站上我还增加了链向本书讨论过的各种文章、产品以及在线资源的链接。 从哪里开始学习? 本书是按照从开始到结尾顺序阅读的方式写作的。当然,有些人可能更愿意挑选感兴趣的章节阅读,对他们说这样获益更多。就从哪里开始而言,不考虑你的背景,我建议你先读一下第1章,以确保你了解本书所涉及的所有基本的与逆向工程相关的资料。如果你没有很好的逆向工程和底层软件经验的话,我强烈建议你按照本书的“自然”顺序阅读,最起码前两部分要这样做。 如果你经验丰富,并觉得自己精通软件开发和操作系统的话,或许你可以直接跳到第4章开始学习逆向工程工具
译者注:本人所译文章(以及其中本人的所注、所编和所评,绿色正体示出,仅供参考,阅读时可以略去),首先是出于自身研究工作的需要;同时也兼顾 作为同行们和学友们 的非正式参考。文中诸多错误和谬误,恳望读者审查、指正。 不难发现,数学术语的译名,常常比较艰涩难读(但不应是晦涩难懂),想是为了避免 与容易产生常义二义性的习常词汇相混淆,以保证数学术语涵义的唯一性和确切性。译者把这一条 作为自己译作的信条之一;出于类似的考虑,在本人译作的译文中,亦常尝试着,采插入空格、短逗号(正常逗号只于 独立句但不是完整句 的场合)、增加虚词等‘不规范’的辅助方式,尽量避免 译意的模糊性和二义性,提高译文的可读性。还应指出,译者将译作中 第一次明确出现的、译者‘杜撰’的数学术语的译名(后加原文名),以及原文中相应部分,阴影加以强调。愿读者不吝赐教。(在本段落中即有部分体现。请见带阴影 的部分。) 为了避免术语译义上的混乱,本人译作中认为需要杜撰的重要术语,後附术语原文,必要时更附上已经存在的汉译术语,并一直保持。 周生烈 数学哲学 实数分析 群论 投影几何 布尔代数和逻辑 皮亚诺算术 基础性危机 悖论 http://en.wikipedia.org/wiki/Foundations_of_mathematics This page was last modified on 22 January 2014 at 02:54    Foundations of mathematics 数学基础   From Wikipedia, the free encyclopedia 取自维基百科,开放的百科全书    This article needs additional citations for verification. Please helpimprove this article by adding citations to reliable sources. Unsourced material may be challenged and removed. (January 2014) 为了验证本条目,需要附加引证。请通过增加引证可靠资源 帮助改善本条目。没有资源的材料,可以质疑和删除。(2014年1月) For the book by Hilbert and Bernays, see Grundlagen der Mathematik.对于希尔伯特和伯奈斯的著作,见数学基础(德文)。      Foundations of mathematics is the study of the basic mathematical concepts (number, geometrical figure, set, function...) and how they form hierarchies of more complex structures and concepts, especially the fundamentally important structures that form the language of mathematics (formulas, theories and their models giving a meaning to formulas, definitions, proofs, algorithms...) also called metamathematical concepts, with an eye to the philosophical aspects and the unity of mathematics. The search for foundations of mathematics is a central question of the philosophy of mathematics; the abstract nature of mathematical objects presents special philosophical challenges. 数学基础研究基本数学概念(数、几何形状、集合、函数...),及其 如何构成更复杂结构和概念的 层次结构,特别是一类 也被称为元数学概念的 基础性重要结构,它们形成数学语言(公式、理论、以及它们的 表意公式、定义、证明、算法...的模型),着眼於哲学方面 以及数学的统一性。对数学基础的探索 是数学哲学的一个中心论题;数学对象的抽象性质 向哲学提出了特殊的挑战。      The foundations of mathematics as a whole does not aim to contain the foundations of every mathematical topic. Generally, the foundations of a field of study refers to a more-or-less systematic analysis of its most basic or fundamental concepts, its conceptual unity and its natural ordering or hierarchy of concepts, which may help to connect it with the rest of human knowledge. The development, emergence and clarification of the foundations can come late in the history of a field, and may not be viewed by everyone as its most interesting part. 数学基础作为一个整体 并不瞄準於包含每个数学论题的基础。一般说 建立一个研究领域 指的是一种系统分析,或多或少地建立 其最基本的或基础的概念、其概念的一致性、以及其概念的本性顺序或层次结构;这可以有助于 将其与其它人类知识 联系起。但是在一个领域的历史上,基础的开发、出现、和滤清往往得晚些,以致无法让每一个人 都能观察到 其最感兴趣部分的龙去脉。   Mathematics always played a special role in scientific thought, serving since ancient times as a model of truth and rigor for rational inquiry, and giving tools or even a foundation for other sciences (especially physics). Mathematics' many developments towards higher abstractions in the 19th century brought new challenges and paradoxes, urging for a deeper and more systematic examination of the nature and criteria of mathematical truth, as well as a unification of the diverse branches of mathematics into a coherent whole. 在科学思维中 数学总是起着特殊的作;其自古以 一直是作为 理性探讨真理性和严谨性的一种范型,并作为 其他科学(特别是物理学)的工具,甚至是基础。在19世纪中,数学的 趋于更高抽象的 许多开发,带了新的挑战和悖论,迫切需要对数学真理的本性和准则,进行更深入、更系统的考察,以及将各个不同的数学分支 统一成一个连贯的整体。      The systematic search for the foundations of mathematics started at the end of the 19th century and formed a new mathematical discipline called mathematical logic, with strong links to theoretical computer science. It went through a series of crises with paradoxical results, until the discoveries stabilized during the 20th century as a large and coherent body of mathematical knowledge with several aspects or components (set theory, model theory, proof theory...), whose detailed properties and possible variants are still an active research field. Its high level of technical sophistication inspired many philosophers to conjecture that it can serve as a model or pattern for the foundations of other sciences. 系统地探索数学基础 始于19世纪末,并形成了一个 与理论计算机科学 有紧密联系的、称之为数理逻辑 的新数学学科。它历经了 种种相悖结论 的一系列危机,直到 在20世纪期间 发掘出 作为具有多个方位或组成部分(集合论,模型论,证明论·····)的 一个庞大的、条理分明的 数学知识体系 而稳定下。研究其详尽的属性和可能的变体,仍然是一个活跃的研究领域。它的深邃的技术内涵,激励了许多哲学家去揣测,它可能作为一种 成为其他科学的基础 的模型或模式。    Contents 1 Historical context 历史背景 1.1 Ancient Greek mathematics 古希腊的数学 1.2 Platonism as a traditional philosophy of mathematics 柏拉图主义作为一种传统的数学哲学 1.3 Middle Ages and Renaissance 中世纪和文艺复兴时期 1.4 19th century 19世纪 1.4.1 Real Analysis 实数分析 1.4.2 Group theory 群论 1.4.3 Non-Euclidean Geometries 非欧几何 1.4.4 Projective geometry 投影几何 1.4.5 Boolean algebra and logic 布尔代数和逻辑 1.4.6 Peano Arithmetic 皮亚诺算术 2 Foundational crisis 基础性危机 2.1 Philosophical views 哲学观点 2.1.1 Formalism 形式主义 2.1.2 Intuitionism 直觉主义 2.1.3 Logicism 逻辑主义 2.1.4 Set-theoretical Platonism 集合论的柏拉图主义 2.1.5 Indispensability argument for realism 对现实主义的不可或缺的论证 2.1.6 Rough-and-ready realism 粗线条的现实主义 2.1.7 Philosophical consequences of the Completeness Theorem 完备性定理的哲学推论 2.2 More paradoxes 更多的悖论 3 Partial resolution of the crisis 危机的部分解决 4 See also 参见 5 Notes 注解 6 References 参考文献 7 External links 外部链接    ·1.Historical context[edit] 历史背景 See also: History of logic and History of mathematics.另请参阅:逻辑史和数学史。      1.1 Ancient Greek mathematics[edit] 古希腊的数学      While the practice of mathematics previously developed in other civilizations, the special interests for its theoretical and foundational aspects really started with Ancient Greeks. Early Greek philosophers disputed as to which is more basic, arithmetic or geometry. Zeno of Elea (490 BC – ca. 430 BC) produced four paradoxes that seem to show that change is impossible. 虽然早在其他文明时代 就已有数学的实践,但对于其理论和基础方面的特殊兴趣 实际上是从古希腊人开始的。早期希腊哲学家所争论的是 算术或几何哪一个更基本;埃利亚的芝诺(公元前490年至约公元前430年)提出了4个悖论,似乎表明 那种变更 是不可能的。      The Pythagorean school of mathematics originally insisted that only natural and rational numbers exist. The discovery of the irrationality of √2, the ratio of the diagonal of a square to its side (around 5th century BC), was a shock to them which they only reluctantly accepted. The discrepancy between rationals and reals was finally resolved by Eudoxus of Cnidus, a student of Plato, who reduced the comparison of irrational ratios to comparisons of multiples (rational ratios), thus anticipating Richard Dedekind's definition of real numbers. 数学的毕达哥拉斯学派 最初坚持认为 只存在自然数和有理数。√2,即正方形的对角线与其边之比,其非有理性的发现(约公元前5世纪),是对他们的一个冲击,他们只是勉强接受。有理数和实数之间的冲突 是由克尼得岛的欧多克斯,柏拉图的一个学生,最终解决的;他将无理比率的比较,简化为倍乘(有理比率)的比较,从而预见到(可从 垂线对正直角三角形进行不断分割,形成一系列(无穷)镶套的正直角三角形;根据 三角形两边之和大于第三边,排序 镶套正直角三角形各弦,而导出) 实数的理查德·戴德金定义。      In the Posterior Analytics, Aristotle (384 BC – 322 BC) laid down the axiomatic method, to organize a field of knowledge logically by means of primitive concepts, axioms, postulates, definitions, and theorems, taking a majority of his examples from arithmetic and geometry. This method reached its high point with Euclid's Elements(300 BC), a monumental treatise on geometry structured with very high standards of rigor: each proposition is justified by a demonstration in the form of chains of syllogisms (though they do not always conform strictly to Aristotelian templates). Aristotle's syllogistic logic, together with the Axiomatic Method exemplified by Euclid's Elements, are universally recognized as towering scientific achievements of ancient Greece. 在(工具论之)后分析篇中,亚里士多德(公元前384 -公元前322年)提出了公理化方法;他从算术和几何的主要范例中,将原始概念、公理、公设、定义、和定理,从逻辑上组织成 一个知识领域。这一方法 在欧几里德的几何原本著作中(公元前300年)达到了高峰。几何原本是一本关于几何的里程碑式著作,它以十分严谨的标准写成;每个命题 都是通过一个 三段论链接形式的论证 合理化(虽然它们并不总是严格地遵守亚里士多德的模式)。亚里士多德的三段论逻辑 加上公理化方法,通过欧几里德 几何原本的实例化,被公认为是古希腊的顶尖科学成就。      1.2 Platonism as a traditional philosophy of mathematics[edit] 作为一种传统数学哲学的柏拉图主义      Starting from the end of the 19th century, a Platonist view of mathematics became common among practicing mathematicians. 从十九世纪末开始,一种柏拉图学派的数学观点,曾普遍存在于实数学家之中。   The concepts or, as Platonists would have it, the objects of mathematics are abstract and remote from everyday perceptual experience: geometrical figures are conceived as idealities to be distinguished from effective drawings and shapes of objects, and numbers are not confused with the counting of concrete objects. Their existence and nature present special philosophical challenges: How do mathematical objects differ from their concrete representation? Are they located in their representation, or in our minds, or somewhere else? How can we know them? 柏拉图学派具有这样的概念,即 数学的客体是抽象的,远离日常的感性经验:几何图形理想化,以区别于客体的实际图样和形状;数字不与具体客体的计算相混淆。它们的存在和本性 出现了特殊的哲学挑战:如何做到 数学客体不同于具体表现?它们是位于其表现形式中,或者是在我们的头脑中,还是别的什么地方?我们怎样才能知道它们呢?      The ancient Greek philosophers took such questions very seriously. Indeed, many of their general philosophical discussions were carried on with extensive reference to geometry and arithmetic. Plato (424/423 BC – 348/347 BC) insisted that mathematical objects, like other platonic Ideas (forms or essences), must be perfectly abstract and have a separate, non-material kind of existence, in a world of mathematical objects independent of humans. He believed that the truths about these objects also exists independently of the human mind, but is discovered by humans. In the Meno Plato’s teacher Socrates asserts that it is possible to come to know this truth by a process akin to memory retrieval. 古希腊哲学家非常严肃地对待这些问题。事实上,他们之间 许多通常的哲学讨论 就是广泛引几何和算术 进行的。 柏拉图(公元前423/424年-公元前34/348年)坚持认为,数学客体 像其他柏拉图理念(形式或本质)一样,必须完善地抽象,且在一个独立于人类的 数学客体世界中,具有一种独立的、非物质类别的存在。他认为,关于这些客体的真实性,也独立于人类的脑海而存在,但被人类发现了。在梅诺 柏拉图的老师苏格拉底 声称,通过一种类似于记忆提取的过程,有可能发现这种真实性。      Above the gateway to Plato's academy appeared a famous inscription: "Let no one who is ignorant of geometry enter here". 在通向网关柏拉图学院的必经之途上,呈现有一句著名的题词:“不让任何一个对几何无知的人 进入这里”。   In this way Plato indicated his high opinion of geometry. He regarded geometry as ``the first essential in the training of philosophers", because of its abstract character. 通过这种方式 柏拉图表明了他对几何的高度评价。由于几何的抽象特征,他把几何尊为“培训哲学家中的第一要素”。      This philosophy of Platonist mathematical realism, is shared by many mathematicians. It can be argued that Platonism somehow comes as a necessary assumption underlying any mathematical work.[1] 这种柏拉图式数学现实主义哲学,是许多数学家都共有的。 这可以表明 柏拉图主义 在某种程度上 是一种 构建任何数学工作 的必要前提。 [1]      In this view, the laws of nature and the laws of mathematics have a similar status, and the effectiveness ceases to be unreasonable. Not our axioms, but the very real world of mathematical objects forms the foundation. 这种观点认为,自然规律和数学法则 也有类似的情况,有效性不再是不合理的。 不是我们的公理,而是数学客体的十分现实的世界 形成了这一基础。      Aristotle dissected and rejected this view in his Metaphysics. These questions provide much fuel for philosophical analysis and debate. 亚里士多德 以他的形而上学立场 解剖并拒绝这一观点。这些问题 为哲学分析和辩论 注入了大量的‘燃料’。    1.3 Middle Ages and Renaissance[edit] 中世纪和文艺复兴时期 [编辑]      For over 2,000 years, Euclid’s Elements stood as a perfectly solid foundation for mathematics, as its methodology of rational exploration guided mathematicians, philosophers, and scientists well into the 19th century. 几何原本 在过去的2000多年里,一直作为一种于数学的完美坚实基础;其合理探索的方法论,引导数学家、哲学家、和科学家,顺当地进入19世纪。      The Middle Ages saw a dispute over the ontological status of the universals (platonic Ideas): Realism asserted their existence independently of perception; conceptualism asserted their existence within the mind only;nominalism, denied either, only seeing universals as names of collections of individual objects (following older speculations that they are words, "logos"). 在中世纪,出现过一种 关于一般概念(柏拉图理念)的本体论状态的争议:现实主义断言,它们的存在 独立于感知;观念主义宣称,它们只存在于头脑中;唯名主义则对这两种断言都拒绝,将一般概念 仅仅看作为 独个客体集合的名称(它们是词‘logos(标识)’顺着原意推测)。      René Descartes published La Géométrie (1637) aimed to reduce geometry to algebra by means of coordinate systems, giving algebra a more foundational role (while the Greeks embedded arithmetic into geometry by identifying whole numbers with evenly spaced points on a line). It became famous after 1649 and paved the way to infinitesimal calculus. 勒内·笛卡尔发表了几何学(1637),旨在通过坐标系 将几何简化到代数,予代数以更基础的角色(而希腊人 则通过确认 将全部数 均匀分布在一条线上的点,把算术嵌入至几何)。这一著作铺平了通向无限小运算的道路,并在1649年以后名声大增。      Isaac Newton (1642 – 1727) in England and Leibniz (1646 – 1716) in Germany independently developed theinfinitesimal calculus based on heuristic methods greatly efficient, but direly lacking rigorous justifications. Leibniz even went on to explicitly describe infinitesimals as actual infinitely small numbers (close to zero). Leibniz also worked on formal logic but most of his writings on it remained unpublished until 1903. 艾萨克·牛顿(1642-1727)在英格兰,莱布尼茨(1646-1716)在德国,各自独立开发了 基于探试法 的无限小运算,十分有效 但极缺乏严格的理据。莱布尼茨更进而阐明 无穷小是作为实际无限小的数(接近于零)。莱布尼茨还参与了形式逻辑的研究;但直到1903年,他的大部分有关著作仍未发表。      The Christian philosopher George Berkeley (1685–1753), in his campaign against the religious implications of Newtonian mechanics, wrote a pamphlet on the lack of rational justifications of infinitesimal calculus:[2] “They are neither finite quantities, nor quantities infinitely small, nor yet nothing. May we not call them the ghosts of departed quantities?” 基督教徒哲学家乔治·伯克利(1685–1753),在他攻击牛顿力学宗教含义的运动中,写了一本 关于无限小运算缺乏合理理据的小册子:[2]“他们既不是有限的数量,也不是数量无限小,还 什么也不是。那么 我们不可以称它们为 数量已经死亡 的鬼吗?”      Then mathematics developed very rapidly and successfully in physical applications, but with little attention to logical foundations. 自此之后,在物理应中 数学取得了十分迅速和成功的发展,却很少关注逻辑基础。    1.4 19th century[edit] 19世纪[编辑]      In the 19th century, mathematics became increasingly abstract. Concerns about logical gaps and inconsistencies in different fields led to the development of axiomatic systems. 在19世纪,数学变得越越抽象。出于对不同的领域中逻辑漏洞和不一致性的关注,导致公理系统的开发。      1.4.1 Real Analysis[edit] 实分析 [编辑]      Cauchy (1789 – 1857) started the project of formulating and proving the theorems of infinitesimal calculus in a rigorous manner, rejecting the heuristic principle of the generality of algebra exploited by earlier authors. In his 1821 work Cours d'Analyse he defines infinitely small quantities in terms of decreasing sequences that converge to 0, which he then used to define continuity. But he did not formalize his notion of convergence. 柯西(1789-1857)排斥为早期作者所使的 通代数的探索式原理,开始一种严谨方法 设计无限小演算定理的公式化和证明。他在1821年的著作分析教程中,依据 收敛趋于0的递减序列,定义了无穷小量,然后 以此定义连续性。但他没有形式化他的收敛的概念。      The modern (ε, δ)-definition of limit and continuous functions was first developed by Bolzano in 1817, but remained relatively unknown. It gives a rigorous foundation of infinitesimal calculus based on the set of real numbers, arguably resolving the Zeno paradoxes and Berkeley's arguments. 近代的(ε, δ)-极限定义和连续函数 是由 博尔扎诺于1817年首先开发的,但这相对不为人知。他基于实数集合,赋予无限小演算 一个严格的基础,可以认为 解决了芝诺悖论 及伯克利的争辩。      Mathematicians such as Karl Weierstrass (1815 – 1897) discovered pathological functions such as continuous, nowhere-differentiable functions. Previous conceptions of a function as a rule for computation, or a smooth graph, were no longer adequate. Weierstrass began to advocate the arithmetization of analysis, to axiomatize analysis using properties of the natural numbers. In 1858, Dedekind proposed a definition of the real numbers as cuts of rational numbers. This reduction of real numbers and continuous functions in terms of rational numbers and thus of natural numbers, was later integrated by Cantor in his set theory, and axiomatized in terms of second order arithmetic by Hilbert and Bernays. 数学家们 如卡尔·维尔斯特拉斯(1815 – 1897) 发现了 诸如连续的,无处可微函数之类的 异态函数。以前的 一个函数作为一种 于计算规则 或平滑曲线 的观念,已不再恰当。维尔斯特拉斯开始提倡分析算术化,采自然数的属性 将分析公理化。 1858年,戴德金提出了一种 将实数作为分隔有理数 的定义。这种 依据有理数乃至自然数 简化实数和连续函数,后被康托尔综合到他的集合论中,并由希尔伯特和伯内斯 依据二阶算术 公理化。      1.4.2 Group theory[edit] 群论 [编辑]      For the first time, the limits of mathematics were explored. Niels Henrik Abel (1802 – 1829), a Norwegian, andÉvariste Galois, (1811 – 1832) a Frenchman, investigated the solutions of various polynomial equations, and proved that there is no general algebraic solution to equations of degree greater than four (Abel–Ruffini theorem). With these concepts, Pierre Wantzel (1837) proved that straightedge and compass alone cannot trisect an arbitrary angle nor double a cube, nor construct a square equal in area to a given circle. Mathematicians had vainly attempted to solve all of these problems since the time of the ancient Greeks. 最初,探讨的是数学的局限性。尼尔斯·亨里克·阿贝尔(1802 – 1829),一位挪威人,和埃瓦里斯特·伽罗瓦(1811 – 1832),一位法国人,研究了各种多项式方程的解,并证明了 对于大于四次的方程 不存在一般代数解(阿贝尔-鲁菲尼定理)。根据这些概念,Pierre Wantzel(1837皮埃尔)证明,只直尺和圆规 不能三等分任意角,不能加倍立方体,也不能构建一个 面积等于一已知圆 的正方形。而在此前,数学家一直徒劳地企图解决 自古希腊时代提出的 所有这些问题。      Abel and Galois's works opened the way for the developments of group theory (which would later be used to studysymmetry in physics and other fields), and abstract algebra. Concepts of vector spaces emerged from the conception of barycentric coordinates by Möbius in 1827, to the modern definition of vector spaces and linear maps by Peano in 1888. Geometry was no more limited to 3 dimensions. These concepts did not generalize numbers but combined notions of functions and sets which were not yet formalized, breaking away from familiar mathematical objects. 阿贝尔和伽罗华的工作 开辟了 开发群论(这后 在物理学和其他领域中 研究对称性)和抽象代数 的道路;从1827年 莫比乌斯构想重心坐标,到1888年 皮亚诺定义了 向量空间和线性映射的现代定义,向量空间的概念出现了;几何也没有更多受限于3维。这些概念并没有将数一般化,但是 组合了函数和集合的概念,那时还尚未形式化,从此告别了人们熟悉的数学客体。   1.4.3 Non-Euclidean Geometries[edit] 非欧几何 [编辑]      After many failed attempts to derive the parallel postulate from other axioms, the study of the still hypotheticalhyperbolic geometry by Johann Heinrich Lambert (1728 – 1777) led him to introduce the hyperbolic functions and compute the area of a hyperbolic triangle (where the sum of angles is less than 180°). Then the Russian mathematician Nikolai Lobachevsky (1792–1856) established in 1826 (and published in 1829) the coherence of this geometry (thus the independence of the parallel postulate), in parallel with the Hungarian mathematician János Bolyai (1802–60) in 1832, and with Gauss. Later in the 19th century, the German mathematician Bernhard Riemanndeveloped Elliptic geometry, another non-Euclidean geometry where no parallel can be found and the sum of angles in a triangle is more than 180°. It was proved consistent by defining point to mean a pair of antipodal points on a fixed sphere and line to mean a great circle on the sphere. At that time, the main method for proving the consistency of a set of axioms was to provide a model for it. 约翰·海因里希·兰伯特(1728-1777)从(几何的)其他公理 导出平行公设的企图,经过多次失败之后,研究了 仍然是假设性的双曲几何,导致他引入双曲函数 计算一个双曲三角形的面积(其中 三角形三角总和 小于180°)。之后 俄罗斯数学家 尼古拉·罗巴切夫斯基(1792–1856)于1826年(发表于1829年)、与此同时,还有匈牙利数学家亚诺什·波尔约(1802–1860)于1832年、以及高斯,确定了该几何的一致性(从而独立于平行公设)。19世纪后期,德国数学家伯恩哈德·黎曼开发的椭圆几何--又一种非欧几何--找不到平行线,其三角形内角之和大于180°;通过定义 点 意味着 一固定球体上的一对对极点,线 意味着 该球体上的一大圆弧,证明其一致性。那时 为了证明一组公理的一致性,其主要方法是 为一致性提供一个模型。      1.4.4 Projective geometry[edit] 射影几何 [编辑]      One of the traps in a deductive system is circular reasoning, a problem that seemed to befall projective geometryuntil it was resolved by Karl von Staudt. As explained by Laptev & Rosenfeld (1996): 在一个演绎系统中 陷阱之一是循环论证;这个问题似乎也降临到射影几何,直到这个问题 为卡尔·冯·施陶特所解决。正如拉普捷夫海和罗森菲尔德(1996)所解释的那样: In the mid-nineteenth century there was an acrimonious controversy between the proponents of synthetic and analytic methods in projective geometry, the two sides accusing each other of mixing projective and metric concepts. Indeed the basic concept that is applied in the synthetic presentation of projective geometry, thecross-ratio of four points of a line, was introduced through consideration of the lengths of intervals. 十九世纪中叶 在射影几何中 有一场 发生在综合方法支持者和分析方法支持者之间 的激烈争论,双方彼此指责对方 混淆了投影和度量的概念。的确,应于投影几何综合表述 的基本概念,一线上4点的交比,是通过考察区间的长度而引入的。   The purely geometric approach of von Staudt was based on the complete quadrilateral to express the relation of projective harmonic conjugates. Then he created a means of expressing the familiar numeric properties with his Algebra of Throws. English language versions of this process of deducing the properties of a field can be found in either the book by Oswald Veblen and John Young, Projective Geometry (1938), or more recently in John Stillwell'sFour Pillars of Geometry (2005). Stillwell writes on page 120 冯·施陶特的纯几何方法 是基于完全四线形 表达投射调和共轭的关系。 然后,他采他的投掷代数 创建了一种 表达熟知的数字属性 的工具。这一演绎一域属性的过程 的英文版本,可以从 奥斯瓦尔德·凡勃伦和约翰·扬的著作射影几何 (1938),或最近的约翰·史迪威著作几何的四大支柱(2005年)中 任一本书中找到。史迪威在第120页上写道:   ...projective geometry is simpler than algebra in a certain sense, because we use only five geometric axioms to derive the nine field axioms. ...射影几何比较于代数 在某种意义上 更简单 ,因为我们只使五个几何公理 就推导出九个域公理。   The algebra of throws is commonly seen as a feature of cross-ratios since students ordinarily rely upon numberswithout worry about their basis. However, cross-ratio calculations use metric features of geometry, features not admitted by purists. For instance, in 1961 Coxeter wrote Introduction to Geometry without mention of cross-ratio. 投掷代数一般被视为交比的一个特点,因为学生们通常依赖于数字 并不担心自身的基础。 然而,交比计算使的 几何度量特征,并不为纯粹主义者所承认。 例如 考克斯特在1961年所著的几何简介中 就没有提及交比。      1.4.5 Boolean algebra and logic[edit] 布尔代数和逻辑 [编辑]      Attempts of formal treatment of mathematics had started with Leibniz and Lambert (1728 – 1777), and continued with works by algebraists such as George Peacock (1791 – 1858). Systematic mathematical treatments of logic came with the British mathematician George Boole (1847) who devised an algebra that soon evolved into what is now called Boolean algebra, in which the only numbers were 0 and 1 and logical combinations (conjunction, disjunction, implication and negation) are operations similar to the addition and multiplication of integers. Also De Morgan publishes his laws (1847). Logic becomes a branch of mathematics. Boolean algebra is the starting point of mathematical logic and has important applications in computer science. 数学的 形式处理的尝试 始于莱布尼茨和兰伯特(1728-1777),并为代数学家们 诸如乔治·皮科克(1791 – 1858) 继承和发展。逻辑的系统数学处理 则是伴随着英国数学家乔治·布尔(1847)而。布尔发明了一种代数,很快就演变成 现在称谓的布尔代数,其中只有数字0和1 以及逻辑组合(合取、析取、蕴涵、和否取),是类似于整数加和乘的运算。德·摩根也发表了他的运算法则(1847)。逻辑成了数学的一个分支。布尔代数是数理逻辑的出发点,在计算机科学中具有重要应。      Charles Sanders Peirce built upon the work of Boole to develop a logical system for relations and quantifiers, which he published in several papers from 1870 to 1885. 在布尔工作的基础上 查尔斯·桑德斯·皮尔士开发了一个于关系和数量的逻辑系统;从1870年至1885年,他发表的几篇关于这方面的论文。      The German mathematician Gottlob Frege (1848–1925) presented an independent development of logic with quantifiers in his Begriffsschrift (formula language) published in 1879, a work generally considered as marking a turning point in the history of logic. He exposed deficiencies in Aristotle's Logic, and pointed out the 3 expected properties of a mathematical theory 德国数学家弗雷格(1848–1925),在他的 出版于1879年的 概念文字(公式语言)中,提出一种 具有数量的逻辑 的独立开发。这项工作 在逻辑史中 通常被认为 标志着一个转折点。他揭示了亚里士多德逻辑中的缺陷,并指出了 一种数学理论的3个预期属性:   Consistency: impossibility to prove contradictory statements 一致性:证明矛盾陈述的不可能性   Completeness: any statement is either provable or refutable (i.e. its negation is provable). 完备性:任何陈述不是可证的,就是可驳的(即它的否取是可证明的)。   Decidability: there is a decision procedure to test any statement in the theory.可判定性:存在一种决策步骤,测试该理论中的任何陈述。      He then showed in Grundgesetze der Arithmetik (Basic Laws of Arithmetic) how arithmetic could be formalised in his new logic. 之后 他在Grundgesetze DER Arithmetik(算术的基本规律)中证示了 算术如何可以他的新逻辑的概念 形式化。      Frege's work was popularized by Bertrand Russell near the turn of the century. But Frege's two-dimensional notation had no success. Popular notations were (x) for universal and (∃x) for existential quantifiers, coming from Giuseppe Peano and William Ernest Johnson until the ∀ symbol was introduced by Gentzen in 1935 and became canonical in the 1960s. 弗雷格的工作 是由罗素 在接近世纪之交 推广的。然而 弗雷格的二维符号 没有成功。流行的符号是 于全称命题的(x)、和于存在量词的(∃x)--它们自杰赛普·皮亚诺和威廉·欧内斯特·约翰逊、以及 直到1935年根岑引入的 符号∀;它们在20世纪60年代成为经典。      From 1890 to 1905, Ernst Schröder published Vorlesungen über die Algebra der Logik in three volumes. This work summarized and extended the work of Boole, De Morgan, and Peirce, and was a comprehensive reference to symbolic logic as it was understood at the end of the 19th century. 从1890年到1905年间,恩斯特·施罗德发表Vorlesungen über die Algebra der (Vorlesungen超级模代数逻辑学)三卷本。这项工作 总结和扩展了 布尔、德·摩根、和皮尔斯的工作;这是一本关于符号逻辑的综合参考,因为它基于19世纪末年代的认识。      1.4.6 Peano Arithmetic[edit] 皮亚诺算术      The formalization of arithmetic (the theory of natural numbers) as an axiomatic theory, started with Peirce in 1881, and continued with Richard Dedekind and Giuseppe Peano in 1888. This was still a second-order axiomatization (expressing induction in terms of arbitrary subsets, thus with an implicit use of set theory) as concerns for expressing theories in first-order logic were not yet understood. In Dedekind's work, this approach appears as completely characterizing natural numbers and providing recursive definitions of addition and multiplication from the successor function and mathematical induction. 作为一种公理化理论,算术(自然数理论)的形式化,始于1881年皮尔斯,并于1888年 为理查德·戴德和杰赛普·皮亚诺所继续。这仍然是一个二阶公理化(依据任意子集表达归纳,于是 采取一种隐含使集合论 的方法);因为对于一阶逻辑表达理论 尚不能理解。在戴德金的工作中,这种做法 似乎完整地表征了自然数,并根据后继函数和数学归纳法 提供了加法和乘法的递归定义。    ·2. Foundational crisis[edit] 基础性危机      The foundational crisis of mathematics (in German wikipedia article: Grundlagenkrise der Mathematik) was the early 20th century's term for the search for proper foundations of mathematics. 数学基础的危机(在德文维基百科的文章:Grundlagenkrise DER Mathematik中)是20世纪初的术语,探索数学的恰当基础。      Several schools of the philosophy of mathematics ran into difficulties one after the other in the 20th century, as the assumption that mathematics had any foundation that could be consistently stated within mathematics itself was heavily challenged by the discovery of various paradoxes (such as Russell's paradox).   在20世纪中,数学哲学的几个学派,由于认定 数学已经具备了 数学自身就能说明的一致性,而受到 发现各种悖论(如罗素悖论)的沉重挑战,一个跟着一个进入了困境。      The name "paradox" should not be confused with contradiction. A contradiction in a formal theory is a formal proof of an absurdity inside the theory (such as 2 + 2 = 5), showing that this theory is inconsistent and must be rejected. But a paradox may either refer to a surprising but true result in a given formal theory, or to an informal argument leading to a contradiction, so that a candidate theory where a formalization of the argument might be attempted must disallow at least one of its steps; in this case the problem is to find a satisfying theory without contradiction. Both meanings may apply if the formalized version of the argument forms the proof of a surprising truth. For instance, Russell's paradox may be expressed as "there is no set of all sets" (except in some marginal axiomatic set theories). 名称‘悖论’ 不应该与矛盾相混淆。在一种形式理论中,如果存在着 某种谬论(如2 +2 = 5)却能在该理论中 得到形式证明,这就是一个矛盾;这表明 该理论是不一致的,必须被拒绝。而一个悖论 或者指的是 在一种所给的形式理论中 是一种惊异 却为真的结果;或者是 一种导致矛盾的 非形式论据;这样,要使待选理论的论据形式化,就必须禁止其中至少一个步骤;在这种情况下,问题归结为 去寻找一种没有矛盾的满意理论。如果论据的形式化版本 形成了一个惊异事实的证明,这两种涵义都可适。例如,罗素悖论可以表达为“不存在所有集合的集合”(除了在某些边缘化的公理化集合理论中)。      Various schools of thought on the right approach to the foundations of mathematics were fiercely opposing each other. The leading school was that of the formalist approach, of which David Hilbert was the foremost proponent, culminating in what is known as Hilbert's program, which thought to ground mathematics on a small basis of a logical system proved sound by metamathematical finitistic means. The main opponent was the intuitionist school, led by L. E. J. Brouwer, which resolutely discarded formalism as a meaningless game with symbols (van Dalen, 2008). The fight was acrimonious. In 1920 Hilbert succeeded in having Brouwer, whom he considered a threat to mathematics, removed from the editorial board of Mathematische Annalen, the leading mathematical journal of the time. 关于恰当处理数学基础的思路,有着各种流派,他们彼此激烈反对对方。领先的流派是形式主义者方法,其中大卫·希尔伯特是最重要的倡导者,最终归结为著名的希尔伯特规划;规划设想 将数学建立在 一个逻辑系统的很小基础上,而这个基础 通过元数学的有穷手段 证明是健壮的。这一流派的主要对手 是直观主义者流派,由 L.E.J.布劳威尔带头,坚决摒弃形式主义,认为是一个毫无意义的符号游戏(范·达伦,2008)。争斗很激烈。1920年 希尔伯特成功地摆布了布劳威尔:希尔伯特认为布劳威尔是数学的一个威胁,于是从数学年鉴编辑部赶走了布劳威尔。数学年鉴 是当时一本主要的数学杂志。      2.1 Philosophical views[edit] 哲学观点   Main article: Philosophy of mathematics 主条目:数学哲学      At the beginning of the 20th century, 3 schools of philosophy of mathematics were opposing each other: Formalism, Intuitionism and Logicism. 20世纪初,数学哲学的三个流派是彼此对立的:形式主义、直觉主义、和逻辑主义。 (这几种‘对立’的哲学观点,似乎可以统一起:柏拉图主义 对客观世界和客体的观点,以及将客体和客观世界 抽象出 人们能理解的 其属性共性 的认识,是本质;自觉主义肯定了 人类认识客观事物的特殊途径和抽象方法(思维),不能离开人类思维而独立存在,是宇宙中‘人类’这个客体的特有属性;逻辑主义强调的逻辑 是人类思维进行抽象的基础;形式主义强调的形式 是逻辑在数学方向的延伸。)      2.1.1 Formalism 形式主义[edit]   Main article: Formalism (mathematics) 主条目:形式主义(数学)      It has been claimed that formalists, such as David Hilbert (1862–1943), hold that mathematics is only a language and a series of games. Indeed he used the words "formula game" in his 1927 response to L. E. J. Brouwer's criticisms: 形式主义者 如大卫·希尔伯特(1862-1943),一直持有这样的主张,即 认为数学只是一种语言和一系列博弈。事实上 在1927年 针对L.E.J.布劳威尔的批评,他使字眼“公式博弈”回应:      "And to what has the formula game thus made possible been successful? This formula game enables us to express the entire thought-content of the science of mathematics in a uniform manner and develop it in such a way that, at the same time, the interconnections between the individual propositions and facts become clear......The formula game that Brouwer so deprecates has, besides its mathematical value, an important general philosophical significance. For this formula game is carried out according to certain definite rules, in which the technique of our thinking is expressed. These rules form a closed system that can be discovered and definitively stated."[3] “为什么有了公式博弈就可能获得成功?这种公式博弈,使我们能够 以统一的方式 表达数学科学的整个思想内容,并以这样一种途径 即 同时将独立命题和事实 互联起进行开发,这样一种思路 变得清晰起......被布劳威尔如此反对的公式博弈,除了它的数学价值,更有一个重要的普遍哲学意义。对于这种公式博弈 是按照某种明确的规则完成的,其中表达了我们思维的技巧。这些规则 构成了一个 可以揭示并明确说明的 封闭系统。”[ 3 ]      Thus Hilbert is insisting that mathematics is not an arbitrary game with arbitrary rules; rather it must agree with how our thinking, and then our speaking and writing, proceeds.[3] 因此 希尔伯特坚持认为,数学不是一个 采任意规则的任意游戏,而是必须与 我们如何思考 乃至我们说和写 的进程 相一致。[ 3 ]      "We are not speaking here of arbitrariness in any sense. Mathematics is not like a game whose tasks are determined by arbitrarily stipulated rules. Rather, it is a conceptual system possessing internal necessity that can only be so and by no means otherwise."[4] “在这里 我们并非说 是任何意义上的随意性。数学并不像游戏那样 其任务可通过任意约定的规则 确定,相反 这是一个 具有内部必要性的 概念系统,它只能如此 否则就决不。” [ 4 ]      The foundational philosophy of formalism, as exemplified by David Hilbert, is a response to the paradoxes of set theory, and is based on formal logic. Virtually all mathematical theorems today can be formulated as theorems of set theory. The truth of a mathematical statement, in this view, is represented by the fact that the statement can be derived from the axioms of set theory using the rules of formal logic. 形式主义的基本哲学思想 如大卫·希尔伯特所例证的 是一种 对集合论的悖论 基于形式逻辑的回应。实际上 几乎所有的数学定理 今天都可归结为 集合论的定理。以这样的视角观察,判定一个数学主题的真实性,就可 通过使形式逻辑 根据集合论公理 导出该主题,确认。      Merely the use of formalism alone does not explain several issues: why we should use the axioms we do and not some others, why we should employ the logical rules we do and not some others, why do "true" mathematical statements (e.g., the laws of arithmetic) appear to be true, and so on. Hermann Weyl would ask these very questions of Hilbert: 仅仅只使形式主义 还不能解释几个疑问:为什么我们应当使的公理 是我们强调的那些 而不是某些其他的,为什么我们应当使的逻辑规则 是我们强调的那些 而不是某些其他的,为什么强调 “真”数学语句(例如,算术法则)看起是真实的,诸如此类。赫尔曼·外尔问及了这些很有疑问的希尔伯特的疑题:   "What "truth" or objectivity can be ascribed to this theoretic construction of the world, which presses far beyond the given, is a profound philosophical problem. It is closely connected with the further question: what impels us to take as a basis precisely the particular axiom system developed by Hilbert? Consistency is indeed a necessary but not a sufficient condition. For the time being we probably cannot answer this question…"[5] “至于‘真实性’或客观性 可以归结到 我们世界的这种理性结构,这远远超出了我们所要考虑的,是一个深奥的哲学问题。这与下面的进一步问题 紧密联系在一起:是什么促使我们 非要采取 由希尔伯特开发的 特有的公理系统 作为一种基础?一致性确实是一个必要条件,但不是充分条件。暂且我们或许不能回答这个疑问......“ [ 5 ]      In some cases these questions may be sufficiently answered through the study of formal theories, in disciplines such as reverse mathematics and computational complexity theory. As noted by Weyl, formal logical systems also run the risk of inconsistency; in Peano arithmetic, this arguably has already been settled with several proofs ofconsistency, but there is debate over whether or not they are sufficiently finitary to be meaningful. Gödel's second incompleteness theorem establishes that logical systems of arithmetic can never contain a valid proof of their own consistency. What Hilbert wanted to do was prove a logical system S was consistent, based on principles P that only made up a small part of S. But Gödel proved that the principles P could not even prove P to be consistent, let alone S! 在某些情况下 这些疑题 在诸如逆向数学和计算复杂性理论等学科中 可以通过形式理论的研究 作出充分的回答。正如魏尔所指出的,形式逻辑系统 也冒着不一致的风险;在皮亚诺算术中,这可以说 通过若干一致性证明 而已经解决,但在 它们足够有穷方面 是否有意义 存在争论。哥德尔第二不完备性定理 确立了 算术逻辑系统 从不能包含它们自身一致性的有效证明。至于希尔伯特打算要做的 是证明 基于原理P的一个逻辑系统S 是一致的,而P仅由S的一小部分组成。然而哥德尔已经证明,原理P甚至不能证明P是一致的,更何况S!      2.1.2 Intuitionism 直觉主义[edit]   Main article: Intuitionism 主条目:直觉主义      Intuitionists, such as L. E. J. Brouwer (1882–1966), hold that mathematics is a creation of the human mind. Numbers, like fairy tale characters, are merely mental entities, which would not exist if there were never any human minds to think about them. 直觉主义,如L.E.J.布劳威尔(1882-1966),认为数学是一种人类心智的创造。数字 就像童话人物 仅仅是精神实体,如果从未有过任何人的头脑去思考它们,也就不存在了。      The foundational philosophy of intuitionism or constructivism, as exemplified in the extreme by Brouwer and more coherently by Stephen Kleene, requires proofs to be "constructive" in nature – the existence of an object must be demonstrated rather than inferred from a demonstration of the impossibility of its non-existence. For example, as a consequence of this the form of proof known as reductio ad absurdum is suspect. 直觉主义或建构主义的基本哲学思想,由布劳威尔极端化,更为斯蒂芬·克莱尼条理化;正如所例证的那样,需要证明 是按本性‘构建’的--一个客体的存在 必须被论证,而不是 从论证其不存在的不可能性 推断。由此推论,称之为归谬法的证明形式,是受怀疑的。      Some modern theories in the philosophy of mathematics deny the existence of foundations in the original sense. Some theories tend to focus on mathematical practice, and aim to describe and analyze the actual working of mathematicians as a social group. Others try to create a cognitive science of mathematics, focusing on human cognition as the origin of the reliability of mathematics when applied to the real world. These theories would propose to find foundations only in human thought, not in any objective outside construct. The matter remains controversial. 在数学哲学中的某些现代理论 否认存在原意义上的基础。有些理论 往往把重点放在数学实践上,旨在描述和分析 作为一个社会群体的数学家们的 实际工作。其他的 则试图建立一种数学的认知科学,当其应于现实世界时,其专注于 将人类的认知 作为数学可靠性的起点;这些理论会建议 只在人类的思维中 寻找基础,而不在任何客观的外部结构中寻找。这件事仍存在着争议。      2.1.3 Logicism 逻辑主义[edit]   Main article: Logicism 主要文章:逻辑主义      Logicism is one of the schools of thought in the philosophy of mathematics, putting forth the theory that mathematics is an extension of logic and therefore some or all mathematics is reducible to logic. Bertrand Russelland Alfred North Whitehead championed this theory fathered by Gottlob Frege. 在数学哲学中 逻辑主义是思维学派之一,把理论推向 数学是逻辑的延伸,因而部分或全部数学 就可简化到逻辑。伯特兰·罗素和艾尔弗雷德·诺斯·怀特海倡导这一 由弗雷格创建的理论。      2.1.4 Set-theoretical Platonism 集合论的柏拉图主义[edit]      Many researchers in axiomatic set theory have subscribed to what is known as set-theoretical Platonism, exemplified by mathematician Kurt Gödel. 许多公理集合论的研究者 都认同 由数学家库尔特·哥德尔例证了的 集合论的柏拉图主义。      Several set theorists followed this approach and actively searched for possible axioms that may be considered as true for heuristic reasons and that would decide the continuum hypothesis. Many large cardinal axioms were studied but the continuum hypothesis remained independent from them. Other types of axioms were considered, but none of them has as yet reached consensus as a solution to the continuum problem. 若干集合理论家 遵循这一方法;并积极寻找这样一类可能的公理,即 其对于探索式推理 可以认为为真,以及 能判定连续统假设的公理。他们曾对许多大基数公理 进行了研究,但对连续统假设的公理 的研究 独立进行。其他类型的公理 也作了考虑,然而 没有一个公理 可以成为他们 对连续统问题解案 的共识。   2.1.5 Indispensability argument for realism 对于现实主义不可或缺的论证[edit]      This argument by Willard Quine and Hilary Putnam says (in Putnam's shorter words),这一由威拉德·奎因和希拉里·普特南提出的论据 (普特南更短的话)说,   quantification over mathematical entities is indispensable for science...; therefore we should accept such quantification; but this commits us to accepting the existence of the mathematical entities in question. 遍及数学实体的量化 对于科学是不可缺少的 ......,因此,我们应该接受这样的量化,但这使我们承受 接受有疑问数学实体的存在。      However Putnam was not a Platonist. 然而 普特南不是柏拉图主义者。   2.1.6 Rough-and-ready realism 粗线条的现实主义[edit]      Few mathematicians are typically concerned on a daily, working basis over logicism, formalism or any other philosophical position. Instead, their primary concern is that the mathematical enterprise as a whole always remains productive. Typically, they see this as insured by remaining open-minded, practical and busy; as potentially threatened by becoming overly-ideological, fanatically reductionistic or lazy. Such a view was expressed by the Physics Nobel Prize laureate Richard Feynman 通常 很少有数学家 天天关心 基于什么哲学立场-逻辑主义、形式主义、还是任何其他的, 在进行工作。相反,他们主要关注的是,数学事业 作为一个整体 始终保持卓有成效。通常 他们认为 这是通过保持思想开放、务实、和勤奋 保证的,而潜在威胁 则是由于变得过于意识形态、狂热地还原论、或懒散。诺贝尔物理学奖获得者理查德·费曼表达了这种观点。   People say to me, “Are you looking for the ultimate laws of physics?” No, I’m not… If it turns out there is a simple ultimate law which explains everything, so be it — that would be very nice to discover. If it turns out it’s like an onion with millions of layers… then that’s the way it is. But either way there’s Nature and she’s going to come out the way She is. So therefore when we go to investigate we shouldn’t predecide what it is we’re looking for only to find out more about it. Now you ask: “Why do you try to find out more about it?” If you began your investigation to get an answer to some deep philosophical question, you may be wrong. It may be that you can’t get an answer to that particular question just by finding out more about the character of Nature. But that’s not my interest in science; my interest in science is to simply find out about the world and the more I find out the better it is, I like to find out…[6] 人们对我说,“您是否在寻找物理学的终极规律?”不,我不是......如果事实证明存在一种 能解释一切的、一种简单的终极法则,顺其自然-那是非常美好的发现。如果事实证明 这像一个无数层的洋葱.....于是 事情本就是这样的。但无论怎样 ‘本性’总是存在的,她总是要出现的。所以,当我们进行研究时,我们不应该预先判定 这是什么,我们只期待发现更多的其所有关。现在,你要问:“为什么你不尝试找出得再多一点呢?”如果你在为 对一些深层次的哲学疑题 求取一个答案 而开始你的研究,你可能是错误的。很可能 对于那个具体疑题 正是由于发现更多关于本性的特征 而不能回答。而这 并非我在科学上的兴趣所在,我对科学的兴趣 仅仅是发现世界,发现得越多越好,我酷爱发现... [ 6 ]   Philosophers, incidentally, say a great deal about what is absolutely necessary for science, and it is always, so far as one can see, rather naive, and probably wrong[7] 顺带提一下, 哲学家说了大量 关于什么是 对于科学所绝对必要 的话,迄今为止 如人们所见 总是 相当幼稚,而且或许是错的[ 7 ]      and also Steven Weinberg[8] 史蒂芬·温伯格[ 8 ]也是这种观点   The insights of philosophers have occasionally benefited physicists, but generally in a negative fashion—by protecting them from the preconceptions of other philosophers.(...) without some guidance from our preconceptions one could do nothing at all. It is just that philosophical principles have not generally provided us with the right preconceptions. 哲学家的见解 偶尔会有益于物理学家,但通常却以一种消极的方式-以保护他们免受其他哲学家的偏见。(...)对我们的观念没有某种指导,人们可以什么都没有做。恰恰是 哲学原理通常并没有为我们提供了正确的观念。      Physicists do of course carry around with them a working philosophy. For most of us, it is a rough-and-ready realism, a belief in the objective reality of the ingredients of our scientific theories. But this has been learned through the experience of scientific research and rarely from the teachings of philosophers. (...) we should not expect [the philosophy of science] to provide today's scientists with any useful guidance about how to go about their work or about what they are likely to find. (...) 当然,物理学家们的工作理念总是不离身影地伴随着他们。对于我们中的大多数而言,这差不离是一种现实主义,是组成我们科学理论的 客观现实中的信念。但是,这是通过科学研究认识到的,极少自哲学家的教诲。(...)我们不应指望[科学哲学] 为今天的科学家提供 关于如何去进行他们的工作 或者他们可能会发现什么 的任何有的指导。(...)   After a few years' infatuation with philosophy as an undergraduate I became disenchanted. The insights of the philosophers I studied seemed murky and inconsequential compared with the dazzling successes of physics and mathematics. From time to time since then I have tried to read current work on the philosophy of science. Some of it I found to be written in a jargon so impenetrable that I can only think that it aimed at impressing those who confound obscurity with profundity. (...) But only rarely did it seem to me to have anything to do with the work of science as I knew it. (...) 作为一个大学生 我迷恋哲学几年之后,变得不再抱有幻想。我学的哲学家的见解 与物理和数学的耀眼成就相比 显得昏暗和无足轻重。从那以后,有时 我试图阅读科学哲学的当前成果,其中有些,我发现 一种行话在书写,很难接受,以至我只能认为 这旨在将那些带着深奥的晦涩 强加给已经混乱的人们。(...)却只有 似乎罕见对我科学工作中的任何事情有什么帮助,如我已经了解的。(...)   I am not alone in this; I know of no one who has participated actively in the advance of physics in the postwar period whose research has been significantly helped by the work of philosophers. I raised in the previous chapter the problem of what Wigner calls the "unreasonable effectiveness" of mathematics; here I want to take up another equally puzzling phenomenon, the unreasonable ineffectiveness of philosophy. 这 不仅我一个,我知道 没有一个 战后时期 积极参与了物理学进展 的人,其研究 是由于哲学家工作的极大帮助。我在前面的章节中提到过 维格纳称之为数学的“不合理有效性”问题;在这里 我要称 另外一个同样的费解现象 为:哲学的不合理无效。   Even where philosophical doctrines have in the past been useful to scientists, they have generally lingered on too long, becoming of more harm than ever they were of use. 即使在过去 哲学信条曾有益于科学家,它们通常也因为遗留太久,而成为 比以往使它们的任何时候 造成更大的伤害。      He believed that any undecidability in mathematics, such as the continuum hypothesis, could be potentially resolved despite the incompleteness theorem, by finding suitable further axioms to add to set theory. 他认为,数学中的任何不可判定性 如连续统假设,可以撇开不完备性定理,通过寻找适当的更深层公理,添加到集合论中,从而有能力得以解决。      2.1.7 Philosophical consequences of the Completeness Theorem 完备性定理的哲学推论[edit]      The Completeness theorem establishes an equivalence in first-order logic, between the formal provability of a formula, and its truth in all possible models. Precisely, for any consistent first-order theory it gives an "explicit construction" of a model described by the theory; and this model will be countable if the language of the theory is countable. However this "explicit construction" is not algorithmic. It is based on an iterative process of completion of the theory, where each step of the iteration consists in adding a formula to the axioms if it keeps the theory consistent; but this consistency question is only semi-decidable (an algorithm is available to find any contradiction but if there is none this consistency fact can remain unprovable). 完备性定理,在所有可能模型中 一个公式的形式可证性与其真实性之间,建立起一种 一阶逻辑中的 等价关系。严格地说,对于任何一致的一阶理论,它为一个 该理论所描述的模型,给出一种‘清晰的架构’;如果理论的语言是可数的,该模型也是可数的。然而 这种‘清晰的架构’不是算法。它是基于 理论完成的 迭代过程,其中迭代的每一步 是由加入一个公式 给公理 组成,如果它保持理论是一致的;但这个一致性疑题 只是半可判定的(一种算法 可于寻找任何矛盾,但如果什么也没有 这种一致性事实 就能保持不可证明)。      This can be seen as a giving a sort of justification to the Platonist view that the objects of our mathematical theories are real. More precisely, it shows that the mere assumption of the existence of the set of natural numbers as a totality (an actual infinity) suffices to imply the existence of a model (a world of objects) of any consistent theory. However several difficulties remain: 这可以被看作是 对柏拉图主义者观点的 一种合理解释,即 我们数学理论的客体 是真实的。更确切地说,它表明 仅仅假设 自然数集合作为一个整体(一个实际的无穷大)存在 就足以意味着 存在一个 任何一致理论的模型(一个 客体的世界)。然而仍然存在几个困难: For any consistent theory this usually does not give just one world of objects, but an infinity of possible worlds that the theory might equally describe, with a possible diversity of truths between them. 对于任何一致的理论,这通常并非只给出 一种客体世界,而是该理论可以同样描述的 无穷多的可能世界,其真实性是多种多样的。 In the case of set theory, none of the models obtained by this construction resemble the intended model, as they are countable while set theory intends to describe uncountable infinities. Similar remarks can be made in many other cases. For example, with theories that include arithmetic, such constructions generally give models that include non-standard numbers, unless the construction method was specifically designed to avoid them. 在集合论的情况下,通过这种架构 获得不了 任何类似的预期模型,这是由于 它们是可数的,而集合论旨在描述不可数的无穷。类似的情况 也可能在其他许多场合下出现。例如,对于包含算术的理论,这样的架构 通常给出 包含非标准数的模型,除非 架构方法被设计成 刻意避免它们。 As it gives models to all consistent theories without distinction, it gives no reason to accept or reject any axiom as long as the theory remains consistent, but regards all consistent axiomatic theories as referring to equally existing worlds. It gives no indication on which axiomatic system should be preferred as a foundation of mathematics. 因为它给出的模型 对所有一致的理论 都没有区别,只要理论保持一致 就没有理由 接受或拒绝任何公理,而 对所有一致的公理化理论 等同地看作为 已有的世界。它没有指明 哪一个公理化系统更应当作为数学基础。 As claims of consistency are usually unprovable, they remain a matter of belief or non-rigorous kinds of justifications. Hence the existence of models as given by the completeness
发帖
构建之法

170

社区成员

程序员。写过:移山之道,编程之美,构建之法,智能之门。
社区管理员
  • SoftwareTeacher
  • GreyZeng
加入社区
帖子事件
创建了帖子
2022-06-23 19:21
社区公告
暂无公告