這是一個非!吧羁獭焙椭匾慕Y果。它說的是有一些數學陳述,我們永遠無法在包含它們的邏輯系統中證明它們的正誤。有趣和偶然的是這一理論本身是可以證明的!
因此我們已經有理由相信,某些知識對我們是不可訪問的。
但是GÖDel并不是唯一持有這種觀點的人。我們至少知道其它兩個領域,在其中我們永遠無法得到某些問題的答案。
進入計算機科學家
第一個領域的代表是計算機科學中的“停機問題”。Wikipedia是這樣描述該問題的:
給出一個程序的描述和它的初始輸入,決定程序在該輸入下運行時會不會停止(完成)。另一種可能是程序將一直運行下去無法停止。
Alan Turing在1936年證明了對所有可能輸入解決停機問題的通用算法是不存在的。我們說停機問題在圖靈機上是不可判定的。因此,又有一類問題我們認為是沒有可能的解決方案或答案的。
第二類問題來自組合數學界。2最常見的例子是著名的“旅行商問題”,這個問題乍一看幾乎是平淡乏味的:
已知一些城市以及從一座城市到另一座城市的旅行費用,最便宜的遍歷所有城市并回到出發城市的路線是什么?
對較少的城市這個問題就是困難的,而且隨著城市數量的增加問題的復雜性迅速增長。實際上,當城市數量超過一個非常小的值時,即使使用計算機也無法解決這個問題了,因為需要計算的可能組合的數量增長得太快。3這個問題就是很多“NP完全”問題中的一個。4現在,對這類問題我們的最好解決辦法是找出近似解。按照目前的知識,NP完全問題沒有精確解。
關鍵在于,我們有若干來自數學和計算機科學的指示,告訴我們有一些問題是無法解決的,有一些假設是無法被證明正確或是錯誤的。但是這是一個悲劇嗎?從我個人來說,我接受人類永遠無法知道一切的觀點。也許我們可以近似比我們可以證明的更多的東西。最終事情的某些方面可能被發現是不可知的。那么就由它們去吧。
對現實軟件世界的啟示
軟件開發界中有兩個領域直接與“知識的局限性”和“什么組成了一個證明”的提法相對應。前者是測試在軟件開發中的作用,后者是迭代開發的提法本身。
文章來源于領測軟件測試網 http://www.kjueaiud.com/