? Turing著名的停機(jī)定理說明無法用有限時長的算法判定任意的計算機(jī)程序是否停機(jī)產(chǎn)生確定輸出刁赦,這意味著你無法將某些永不停機(jī)的程序和其實會在等待時間后才停機(jī)的區(qū)分開來,人們或可主張這結(jié)果意義不大——畢竟運行時間太長的程序和不停機(jī)實踐上也沒啥區(qū)別妖泄。然而,Rice定理來指出“事情沒那么簡單”:停機(jī)定理中的“停機(jī)”可以被替換成任何只跟功能有關(guān)的性質(zhì),結(jié)果一樣是不可判定的。
? 例如:一段程序是否是破壞系統(tǒng)文件的計算機(jī)病毒就是不可判定的啥么,跟停機(jī)問題是同樣意義上的不可判定。使用停機(jī)定理來證明計算機(jī)“比人類無能”的反AI論者運行殺毒軟件時身體可是很誠實——如果你覺得不可判定類問題人比機(jī)器更擅長的話贰逾,你為什么不自己扒代碼而是讓另一個計算機(jī)程序(殺毒軟件)來嘗試識別病毒呢悬荣?根據(jù)Rice定理,對方完全可以具有你的殺毒軟件識別不了的破壞功能疙剑。
? 判定病毒為何與判定停機(jī)等價氯迂?這就要從Rice定理的具體證明說起,我們首先定義何為只跟功能有關(guān)的性質(zhì):兩個程序作用于同一數(shù)據(jù)若總是產(chǎn)生相同的運行結(jié)果(都不停機(jī)或都停機(jī)在相同輸出)言缤,則稱兩者功能相同嚼蚀。一個程序的性質(zhì)F如果滿足以下兩點:
(1)程序P具有F當(dāng)且僅當(dāng)所有功能相同的程序都具有F。
(2)具有/不具有F的程序各至少存在一個(這排除了所有程序無論功能如何都具有/不具有F的平凡情況)管挟。
則稱性質(zhì)F只跟程序功能有關(guān)轿曙,或稱F是功能性的。顯然僻孝,“會破壞系統(tǒng)文件”“病毒性”就是功能性的导帝。
Rice定理是這樣處理的,假定可以判定任意程序是否具備F穿铆,那么對任意程序A都可以通過判定下列構(gòu)造的A1和A2來求解A是否停機(jī):
A1:每個循環(huán)中仿真運行A常數(shù)步您单,在循環(huán)末尾檢驗A是否已進(jìn)入(仿真的)停機(jī)態(tài),否則繼續(xù)循環(huán)荞雏,是則清零并執(zhí)行G1.
A2:每個循環(huán)中仿真運行A常數(shù)步虐秦,在循環(huán)末尾檢驗A是否已進(jìn)入(仿真的)停機(jī)態(tài),否則繼續(xù)循環(huán)凤优,是則清零并執(zhí)行G2.
G1:任一已知具有F的程序悦陋。G2:任一已知不具有F的程序。功能性的定義(2)自然要求了G1和G2都存在筑辨,所以上述構(gòu)造是可行的俺驶。
若A停機(jī),則A1與A2功能分別等同于G1與G2挖垛,故判定結(jié)果應(yīng)各是具有/不具有F痒钝,結(jié)果不同。
若A不停機(jī)痢毒,則A1與A2都會被卡在仿真運行A的無限循環(huán)上送矩,因為仿真的停機(jī)態(tài)永不會被訪問。功能相同哪替,故結(jié)果相同栋荸。