人工智慧通識-程式設計-圖靈機之停機問題
歡迎關注我的專欄( つ•̀ω•́)つ【人工智慧通識】
之前的文章 人工智慧通識-科普-圖靈機之繁忙的海狸Busy beaver 主要涉及了三個問題:可計算性問題、停機問題和計算的複雜度問題。

停機問題 Halting Problem
停機問題是指我們讓計算機啟動一段程式碼程式,依照程式進行運算,比如圖靈機根據卡片或表格規則反覆讀寫和移動,如果計算機能夠完成這個計算流程並且最後自己停下來,那麼我們就認為這個程式正常,不會遇到停機問題。——換句話說,如果它自己執行起來就停不下,那就是遇到了停機問題。
在繁忙的海狸遊戲中我們設定0狀態為停機狀態,假如卡片上的全部規則都不跳轉到0狀態,那麼肯定就不會停機。——或者雖然某些條規則會轉到0狀態,但是這個規則永遠也不會被用到,那麼也不會停機。
比如最簡單的一張卡片狀態1,如果規定無論讀取到1或者0,都往左走一格,然後還跳轉到這個狀態1,那麼就是死迴圈,不能結束,遇到了停機問題。
停機判定
在繁忙的海狸中,3個狀態卡片的情況就有1600多萬中可能的走法,哪些會停機?哪些不會?這怎麼判斷呢?
當時我們說這是無法判斷的,嚴謹地說,應該是我們無法判定所有程式是否停機,因為有很多明顯的停機情況很容易找到規律或給出證明。
為什麼我們不能讓計算機自己判斷每個走法是否能停機?——而不是直接去嘗試那些走法才浪費時間?
因為這是不可能的,圖靈在20世紀30年代就證明這是不可能的。
圖靈的證明
要推翻一個假設,最好的辦法就是假設它是成立的,沿著這個假設繼續推理,如果推理出矛盾,那麼就證明這個假設是不靠譜的。

假設我們有一個方盒機器,我們向他輸入一個程式程式碼a,它就能輸出 是 或者 否 ,以此表示我們輸入的程式是否會自動停機。
我們不管這個方盒機器怎麼執行的,它就是個圖靈假想的黑盒,它符合我們能夠判定所有程式是否停機的假設。沿著這個假設思考下去。
假設我們有一個程式如下所示,它包含了一個圖靈判定黑盒,這個黑盒當然可以正確判定輸入的a是否能夠停機(依照假設前提成立),當a能自動停機時候就輸出yes,不能停就輸出No。
但是我們在這個黑盒後面又加了一個兩個白盒。如果前面的小黑盒輸出Yes,那麼就進入一個無限迴圈白盒,如果前面輸出No那麼就直接輸出Yes。

如果我們把上面這個程式當成一個要被判定是否停機的程式,整個打包作為一個程式放入到大的黑盒裡面去,就是下圖中藍色範圍部分。這時候會發生什麼?

如果a能夠停機,那麼大黑盒就輸出Yes。但是如果a能停機,那麼小黑盒也輸出Yes然後進入無限迴圈,也就是說這時候藍盒不能停機。這就產生了矛盾,到底能停不能停?
相反的,如果a不能停機,那麼大黑盒應該輸出No,但實際上小黑盒會進入Yes白盒,輸出Yes,這又是矛盾。
如果外層是肯定的,那麼內層就會是否定的;如果外層是否定的,那麼內層就會是肯定的。這個矛盾是無法調和的。
所以,至少在這個情況下,一個機器不能正確判斷自身執行的程式是否會停機。即一個機器對自身執行的所有程式是否停機做出正確判斷。
這是一個迴圈巢狀的情況,計算機無法對這種巢狀的情況作出正確判斷,不只是計算機,人也做不到,或者說任何系統都沒法處理這樣的情況。下一篇我們來一起看發生在人身上的類似問題。
歡迎關注我的專欄( つ•̀ω•́)つ【人工智慧通識】
每個人的智慧新時代
如果您發現文章錯誤,請不吝留言指正;
如果您覺得有用,請點喜歡;
如果您覺得很有用,歡迎轉載~
END