zoukankan      html  css  js  c++  java
  • 【转】原因与证明

    我在 Cornell 的时候经常遇到这样的问题,那就是教授们一上课就在黑板上写长篇的“定理证明”,全体同学认认真真在下面抄笔记,就连只有十来个人的小课也是那样。有些写字速度慢的人就不得不带上小型录音机,把教授的课全都录下来,要不就是之后去借别人的笔记来抄。

    有一次某知名教授照着讲义,背对着学生,在黑板上写了大半节课,写下好几板的证明,证明的是 simply typed lambda calculus (STLC)的 strong normalization 特性(SN)。刚写完就到下课时间了,他回过头来喘了一口气,说:“Any questions?”没有人啃声,于是他说:“很好!下课!”

    几天后我问他,你证明了 STLC 有这个特性,然而你却没有告诉我它“为什么”有这个特性。他神气的看了我一眼:“你不懂吗?”我说:“你的证明我看懂了大部分,可是一个东西具有如此的性质,并不是因为你证明了它。这性质是它天生就有的,不管你是否能证明它。我想知道的是什么让 STLC 具有这个性质,而不只是证明它。”他说:“你问这样的问题有什么意义吗?你需要非常聪明,并且需要经过大量的努力才能想出这样的证明。”

    原因

    两年之后,我在 Indiana 上了另外一堂程序语言理论课。教授是我之前的导师 Amr Sabry。他上课从来不带讲义,貌似也没有准备,漫不经心的,却每次都能讲清楚问题的关键。于是有一天他也开始讲 STLC 的 SN 特性。他说,我不想写下这个证明让你们抄,我只告诉你们大概怎么去想。SN 的意思就是程序肯定会“终止”。所有会终止的程序,都会有一个“特征值”会随着程序的运行而减小。你需要做的就是找到 STLC 的“特征值”是什么。接着他就开始在黑板上画一个图……

    过了一段时间,我不仅学会了这个“证明”,而且知道了 STLC 具有如此特性的“原因”。

    证明与原因的区别

    从以上的故事,以及你的亲身经历中,你也许注意到了大部分的教育过分的重视了“证明”,却忽略了比证明更重要的东西——“原因”。

    原因往往比证明来得更加简单,更加深刻,但却更难发现。对于一个事实往往有多种多样的证明,然而导致这个事实的原因却往往只有一个。如果你只知道证明却不知道原因,那你往往就被囚禁于别人制造的理论里面,无法自拔。你能证明一个事物具有某种特性,然而你却没有能力改变它。你无法对它加入新的,好的特性,也无法去掉一个不好的特性。你也无法发明新的理论。有能力发明新的事物和理论的人,他们往往不仅知道“证明”,而且知道“原因”。

    打个比方。证明与原因的区别,就像是犯罪的证据与它的原因的区别。证据并不是导致犯罪的原因。有了证据可以帮助你把罪犯绳之以法,可是如果你找不到他犯罪的原因,你就没法防止同样的犯罪现象再次发生。

    古人说的“知其然”与“知其所以然”的区别,也就是同样的道理吧。

  • 相关阅读:
    [转]Cordova + Ionic in Visual Studio
    [转]Getting Start With Node.JS Tools For Visual Studio
    TypeScript
    [转]NPOI TestFunctionRegistry.cs
    [转]Cordova android框架详解
    [转]POI : How to Create and Use User Defined Functions
    [转]用NPOI操作EXCEL--通过NPOI获得公式的返回值
    [转]Formatting the detail section to display multiple columns (水晶报表 rpt 一页多列)
    [转]Creating Mailing Labels in SQL Server Reporting Services (rdlc 数据1页 2竖排 显示)
    [转]Tetris(俄罗斯方块) in jQuery/JavaScript!
  • 原文地址:https://www.cnblogs.com/alantu2018/p/8495851.html
Copyright © 2011-2022 走看看