1. 程式人生 > >【轉】原因與證明

【轉】原因與證明

你們 同學 我只 然而 導致 cal 速度慢 理論 重要

我在 Cornell 的時候經常遇到這樣的問題,那就是教授們一上課就在黑板上寫長篇的“定理證明”,全體同學認認真真在下面抄筆記,就連只有十來個人的小課也是那樣。有些寫字速度慢的人就不得不帶上小型錄音機,把教授的課全都錄下來,要不就是之後去借別人的筆記來抄。

有一次某知名教授照著講義,背對著學生,在黑板上寫了大半節課,寫下好幾板的證明,證明的是 simply typed lambda calculus (STLC)的 strong normalization 特性(SN)。剛寫完就到下課時間了,他回過頭來喘了一口氣,說:“Any questions?”沒有人啃聲,於是他說:“很好!下課!”

幾天後我問他,你證明了 STLC 有這個特性,然而你卻沒有告訴我它“為什麽”有這個特性。他神氣的看了我一眼:“你不懂嗎?”我說:“你的證明我看懂了大部分,可是一個東西具有如此的性質,並不是因為你證明了它。這性質是它天生就有的,不管你是否能證明它。我想知道的是什麽讓 STLC 具有這個性質,而不只是證明它。”他說:“你問這樣的問題有什麽意義嗎?你需要非常聰明,並且需要經過大量的努力才能想出這樣的證明。”

原因

兩年之後,我在 Indiana 上了另外一堂程序語言理論課。教授是我之前的導師 Amr Sabry。他上課從來不帶講義,貌似也沒有準備,漫不經心的,卻每次都能講清楚問題的關鍵。於是有一天他也開始講 STLC 的 SN 特性。他說,我不想寫下這個證明讓你們抄,我只告訴你們大概怎麽去想。SN 的意思就是程序肯定會“終止”。所有會終止的程序,都會有一個“特征值”會隨著程序的運行而減小。你需要做的就是找到 STLC 的“特征值”是什麽。接著他就開始在黑板上畫一個圖……

過了一段時間,我不僅學會了這個“證明”,而且知道了 STLC 具有如此特性的“原因”。

證明與原因的區別

從以上的故事,以及你的親身經歷中,你也許註意到了大部分的教育過分的重視了“證明”,卻忽略了比證明更重要的東西——“原因”。

原因往往比證明來得更加簡單,更加深刻,但卻更難發現。對於一個事實往往有多種多樣的證明,然而導致這個事實的原因卻往往只有一個。如果你只知道證明卻不知道原因,那你往往就被囚禁於別人制造的理論裏面,無法自拔。你能證明一個事物具有某種特性,然而你卻沒有能力改變它。你無法對它加入新的,好的特性,也無法去掉一個不好的特性。你也無法發明新的理論。有能力發明新的事物和理論的人,他們往往不僅知道“證明”,而且知道“原因”。

打個比方。證明與原因的區別,就像是犯罪的證據與它的原因的區別。證據並不是導致犯罪的原因。有了證據可以幫助你把罪犯繩之以法,可是如果你找不到他犯罪的原因,你就沒法防止同樣的犯罪現象再次發生。

古人說的“知其然”與“知其所以然”的區別,也就是同樣的道理吧。

【轉】原因與證明