圖靈機

圖靈機的藝術表示
圖靈機（Turing machine），又稱確定型圖靈機，是英國數學家艾倫·圖靈於1936年提出的一種將人的計算行為抽象化的數理邏輯機，其更抽象的意義為一種計算模型，可以看作等價於任何有限邏輯，數學過程的強大可計算機器。

**圖靈的基本思想**
圖靈的基本思想是用機器來模擬人們用紙筆進行數學運算的過程，他把這樣的過程看作下列兩種簡單的動作：- 在紙上寫上或擦除某個符號；- 把注意力從紙的一處移動到另一處；
而在每個階段，人要決定下一步的動作，依賴於（a）此人當前所關注的紙上某個位置的符號和（b）此人當前思維的狀態。
在某些模型中，紙帶移動，而未用到的紙帶真正是“空白”的。要進行的指令（q4）展示在掃描到方格之上（由Kleene（1952）p.375繪製）。
在某些模型中，讀寫頭沿著固定的紙帶移動。要進行的指令（q1）展示在讀寫頭內。在這種模型中“空白”的紙帶是全部為0的。有陰影的方格，包括讀寫頭掃描到的空白，標記了1,1,B的那些方格，和讀寫頭符號，構成了系統狀態。（由Minsky（1967）p.121繪製）
為了模擬人的這種運算過程，圖靈構造出一臺假想的機器，該機器由以下幾個部分組成：
# 一條無限長的紙帶TAPE。紙帶被劃分為一個接一個的小格子，每個格子上包含一個來自有限字母表的符號，字母表中有一個特殊的符號表示空白。紙帶上的格子從左到右依次被編號為0, 1, 2, ...，紙帶的右端可以無限伸展。
# 一個讀寫頭HEAD。它可以在紙帶上左右移動，能讀出當前所指的格子上的符號，並能改變它。
# 一套控制規則數量有限的TABLE（A finite table of instructions）。它根據當前機器所處的狀態以及當前讀寫頭所指的格子上的符號來確定讀寫頭下一步的動作，並改變狀態寄存器的值，令機器進入一個新的狀態。按照以下順序告知圖靈機命令：
#* 1. 寫入（替換）或擦除當前符號；
#* 2. 移動 HEAD， 'L'向左， 'R'向右或者'N'不移動；
#* 3. 保持當前狀態或者轉到另一狀態。
# 一個狀態寄存器。它用來保存圖靈機當前所處的狀態。圖靈機的所有可能狀態的數目是有限的，並且有一個特殊的狀態，稱為停機狀態。參見停機問題。
注意這個機器的每一部分都是有限的，但它有一個潛在的無限長的紙帶，因此這種機器只是一個理想的設備。圖靈認為這樣的一臺機器就能模擬人類所能進行的任何計算過程。

**圖靈機的正式定義**
一臺圖靈機是一個七元有序組，其中都是有限集合，且滿足：
# 是非空有窮狀態集合；
# 是非空有窮輸入字母表，其中不包含特殊的空白符；
# 是非空有窮帶字母表且；為空白符，也是唯一允許出現無限次的字符；
# 是轉移函數，其中表示讀寫頭是向左移還是向右移, - 表示不移動；
# 是起始狀態；
# 是接受狀態。
# 是拒絕狀態，且。
圖靈機將以如下方式運作：
開始的時候將輸入符號串
從左到右依此填在紙帶的第號格子上，其他格子保持空白（即填以空白符)。
的讀寫頭指向第0號格子，
處於狀態。機器開始運行後，按照轉移函數所描述的規則進行計算。例如，若當前機器的狀態為，讀寫頭所指的格子中的符號為，設，則機器進入新狀態，將讀寫頭所指的格子中的符號改為，然後將讀寫頭向左移動一個格子。若在某一時刻，讀寫頭所指的是第0號格子，但根據轉移函數它下一步將繼續向左移，這時它停在原地不動。換句話說，讀寫頭始終不移出紙帶的左邊界。若在某個時刻根據轉移函數進入了狀態，則它立刻停機並接受輸入的字符串；
若在某個時刻根據轉移函數進入了狀態，則它立刻停機並拒絕輸入的字符串。
注意，轉移函數是一個部分函數，換句話說對於某些,，可能沒有定義，如果在運行中遇到下一個操作沒有定義的情況，機器將立刻停機。

**圖靈機的基本術語**
設是一臺圖靈機，
# 的帶描述（tape description）是一個函數，其中表示的帶上第個格子中的符號；
# 的格局（configuration）是一個三元組，其中是當前的帶描述，是當前的狀態，是當前讀寫頭所處的位置；
# 設, 是的格局，設，若滿足，以及則稱從格局 產生格局，記作。
# 設為的格局，若則稱為接受格局；若則稱為拒絕格局；接受格局和拒絕格局統稱為停機格局。
設是一臺圖靈機，將字符串
作為其輸入，若存在格局序列，使得
# 是在輸入上的起始格局，即，其中
# ，其中；
# 是接受格局。
則稱 接受字符串，且稱為圖靈機在輸入上的接受計算歷史。同理，若是拒絕格局，則稱 拒絕，且稱為圖靈機在輸入上的拒絕計算歷史。所接受的所有字符串的集合稱為的語言，記作。

**圖靈機的例子**
設和.
比如做一個以1的個數表示數值的加法運算，在磁帶上的數據是0000001110110000，就是3+2的意思。程序如下：
 0,0 -> 0,0R
 0,1 -> 1,1R
 1,0 -> 10,1R
 1,1 -> 1,1R
 10,0 -> 11,0L
 10,1 -> 10,1R
 11,0 -> E
 11,1 -> 0,0S
第一行程序0,0->0,0R意思就是如果機器讀到0，就將其變成0，狀態變為0，讀寫頭向右移動一格. R就是向右移動一格，L就是向左移一格，E是錯誤，S是停機. xx,y -> aa,b中xx是當前狀態, y是當前格子的值, aa是程序下一步的狀態, b是當前格的修改值。
雖然這裡給出與上面不同形式的定義，但兩者是等價的，這裡的定義能完成的工作並不比上面的定義多。

**通用圖靈機**
對於任意一個圖靈機，因為它的描述是有限的，因此我們總可以用某種方式將其編碼為字符串。我們用表示圖靈機的編碼。
我們可以構造出一個特殊的圖靈機，它接受任意一個圖靈機的編碼，然後模擬圖靈機的運作，這樣的圖靈機稱為通用圖靈機（Universal Turing Machine）。現代電子計算機的計算模型其實就是這樣一種通用圖靈機，它先接受一段描述另一圖靈機，例如圖靈機的action table的字串，然後運行寫給圖靈機的程序，這樣通用圖靈機執行程序就像圖靈機一樣，能正確執行並實現程序所描述的算法。

**圖靈機的變體**
圖靈機有很多變種，但可以證明這些變種的計算能力都是等價的，即它們識別同樣的語言類。證明兩個計算模型和的計算能力等價的基本思想是：用和相互模擬，若可模擬且可模擬，顯然他們的計算能力等價。注意這裡我們暫時不考慮計算的效率，只考慮計算的理論上“可行性”。
首先我們可以發現，改變圖靈機的帶字母表並不會改變其計算能力。例如我們可以限制圖靈機的帶字母表為，這並不會改變圖靈機的計算能力，因為我們顯然可以用帶字母表為的圖靈機模擬帶字母表為任意有限集合的圖靈機。
另一個要注意的是，如果我們允許圖靈機的紙帶兩端都可以無限伸展，這並不能增加圖靈機的計算能力，因為我們顯然可以用只有紙帶一端能無限伸展的圖靈機來模擬這種紙帶兩端都可以無限伸展的圖靈機。
如果我們允許圖靈機的讀寫頭在某一步保持原地不動，那也不會增加其計算能力，因為我們可以用向左移動一次再向右移動一次來代替在原地不動。
其它的常見圖靈機變種包括：- 多帶圖靈機- 非確定型圖靈機- 交替式圖靈機- 枚舉器

**圖靈可計算性**
 圖靈可識別語言- 圖靈可判定語言- 遞歸可枚舉語言- 可計算函數- 遞歸函數- 停機問題- 可判定性- 不可判定性- 不可解度

**其它等價的計算模型**
除了圖靈機以外，人們還發明瞭很多其它的計算模型。包括：- 寄存器機- 遞歸函數- λ演算- 生命遊戲- 馬爾可夫算法
然而這些模型無一例外地都和圖靈機的計算能力等價，因此邱奇，圖靈和哥德爾
提出了著名的邱奇-圖靈論題：一切直覺上能計算的函數都可用圖靈機計算，反之亦然。

**定理**
 克萊尼–波斯特定理- 弗裡德堡–穆奇尼克定理- 波斯納–羅賓遜定理- 跳躍逆轉定理

**參考文獻**
 Turing, A.,  On Computable Numbers, With an Application to the Entscheidungsproblemdate=20040403210049 , Proceedings of the London Mathematical Society, Series 2, Volume 42, 1936; reprinted in M. David（ed.）, The Undecidable, Hewlett, NY: Raven Press, 1965;- Michael Sipser,  Introduction to the Theory of Computation, PWS Publishing, 1997. ISBN 0-534-94728-X

**外部鏈接**
  Visual Turing, a Turing machine interactive simulator/IDEdate=20040407193325 （free software for Windows）。-  Suzanne Brittons Turing Machine Simulator（java applet）。-  C++ Simulator of a Nondeterministic and Deterministic Turing Machinedate=20040404111027 （free software）。-  Citations from CiteSeerdate=20130610071250