เครื่องทัวริง (Turing Machines)
ความสามารถของเครื่องที่ศึกษามายอมรับภาษาที่มีข้อจำกัดอยู่ เช่น ภาษาปกติ (โดยออโตมาตาจำกัด) ภาษาไม่พึ่งบริบท
(โดยออโตมาตากดลง) ในขั้นต่อไปเราจะสร้างเครื่องที่สามารถยอมรับภาษาอื่นที่เครื่องเหล่านั้นยอมรับไม่ได้ เรียกว่าเครื่องทัวริง เครื่องทัวริงถูกคิดค้นครั้งแรกโดย
อลัน ทัวริง (Alan Turing) ในปี ค.ศ. 1936
โดยที่หลักการของเครื่องนี้ถือได้ว่าเป็นแม่แบบของสถาปัตยกรรมของเครื่องคอมพิวเตอร์ที่มีหน่วยประมวลผลเดี่ยว ในปัจจุบันเครื่องทัวริงสามารถแบ่งออกได้เป็น
- เครื่องทัวริงแถบเดี่ยวปลายเปิดทางเดียว (One-way infinite single tape Turing machine),
- เครื่องทัวริงแถบเดี่ยวปลายเปิดสองทาง (Two-way infinite single tape Turing machine)
- หรือ เครื่องทัวริงหลายแถบ (Multitape Turing machine)
ตามจำนวนแถบและการใช้งานแถบ ในยุคแรกทัวริงออกแบบเครื่องในลักษณะของเครื่องทัวริงแถบเดี่ยวปลายเปิดสองทาง แต่เพื่อความง่ายต่อการเข้าใจ
เราจะเริ่มศึกษาเครื่องทัวริงแถบเดี่ยวปลายเปิดทางเดียวก่อน แล้วค่อยพิจารณาเครื่องทัวริงที่ใช้แถบเดี่ยวปลายเปิดสองทาง และเครื่องทัวริงหลายแถบ
ไม่ว่าอย่างไรก็ตามเราสามารถแสดงได้ว่าเครื่องทัวริงทั้งหมดสมมูลกัน
บทนิยาม เครื่องทัวริงแถบเดี่ยวปลายเปิดทางเดียว (One-way infinite single tape Turing machine)
แต่ละเครื่องประกอบด้วย
- เซตของสถานะ (state) ทั้งหมดซึ่งเป็นเซตจำกัด เขียนแทนด้วย Q
- เซตของสัญลักษณ์รับเข้า (input symbol) ทั้งหมดซึ่งเป็นเซตจำกัด เขียนแทนด้วย
- เซตของสัญลักษณ์แถบ (tape symbol) ทั้งหมดซึ่งเป็นเซตจำกัด เขียนแทนด้วย
สังเกตว่า
- เซตของสถานะยอมรับ (accepting state) ทั้งหมดซึ่งเป็นสับเซตของ Q เขียนแทนด้วย F
- สถานะเริ่มต้น (initial state) ซึ่งเป็นสมาชิกใน Q เขียนแทนด้วย q0
- สัญลักษณ์พิเศษที่บอกตำแหน่งซ้ายสุดของแถบ เขียนแทนด้วย Z0 และสัญลักษณ์ที่บอกว่าไม่มีข้อมูลบันทึกในช่อง
เขียนแทนด้วย
โดยที่ Z0 ไม่ใช่ตัวเดียวกับ
- ฟังก์ชันการผ่าน (transition function)
เป็นฟังก์ชันที่มีโดเมนเป็นสับเซตของ
Q × และพิสัยเป็นสับเซตของ Q ×
× {R, L, S} และมีเงื่อนไขว่า
(qf, i) ไม่มีค่าทุก qf
F, i

- และถ้า
(q, Z0) = (p, X, D) แล้ว D
L และ X = Z0
บทนิยาม แผนภาพการผ่าน (transition diagram) ของเครื่องทัวริงแถบเดี่ยวปลายเปิดทางเดียว (Q,
, ,
, q0, Z0, F) คือ กราฟเทียมที่มีทิศทาง มี Q เป็นเซตของจุดยอด
มีลูกศรชี้เข้าที่จุดยอด q0 จุดยอดทุกจุดใน F มีวงกลมล้อมรอบสองวง และถ้า (q, a)
= (p, X, D) แล้วจะต้องมีอาร์กเชื่อมจากจุดยอด q ไปยังจุดยอด p โดยมี (a), (X, D) เขียนกำกับ ดังรูป
ตัวอย่างที่ 1: จงเขียนแผนภาพการผ่านของเครื่องทัวริง M = (Q,
, ,
, q0, Z0, F) โดยที่ Q = {q0, q1,
q2}, = {0, 1}, = {0, 1,
X, Z0, }, F = {q1} และ
(q0, Z0) = (q0, Z0, R),
(q0, 0) = (q1, X, R),
(q0, 1) = (q2, 1, R),
(q2, 0) = (q1, X, R),
(q2, 1) = (q0, 1, R)
บทนิยาม สำหรับเครื่องทัวริงแถบเดี่ยวปลายเปิดทางเดียว M = (Q,
, ,
, q0, Z0, F) เรากล่าวว่า c เป็น โครงแบบ (configuration)
หนึ่งของเครื่องทัวริง M ก็ต่อเมื่อ c = (q,  i
) โดยที่ q Q,
*, i
และ
*
ซึ่งหมายความว่า ขณะนั้นเครื่องทัวริง M กำลังอยู่ในสถานะ q สายอักขระที่ปรากฎบนแถบคือ
i (อาจจะไม่ใช่สายอักขระรับเข้า)
และหัวอ่านชี้อยู่ที่ i ดังรูป
เรากล่าวว่า c เป็นโครงแบบเริ่มต้น (initial configuration) ก็ต่อเมื่อ c = (q0,
Z0w) เมื่อ w เป็นสายอักขระรับเข้า โดยทั่วไปจะใช้สัญลักษณ์ c0
แทนโครงแบบเริ่มต้น
เรากล่าวว่า c เป็นโครงแบบหยุด (halting configuration) ก็ต่อเมื่อ c = (q,
 i
) โดยที่ (q, i) ไม่มีค่า
ถ้า c = (q,  i
) และ c' = (q', '
i' ') ต่างก็เป็นโครงแบบของเครื่องทัวริง
M และ (q, i) = (p, X, D) แล้ว เรากล่าวว่า c' เป็นโครงแบบถัดจาก c
เขียนแทนด้วย c c' ก็ต่อเมื่อ p = q' และ
- ถ้า D = R แล้ว
' = X
และ = i'
- ถ้า D = L แล้ว
= 'i'
และ = X
- ถ้า D = S แล้ว
' = ,
= และ i' = X
เรากล่าวว่า c' เป็นโครงแบบที่ได้มาจาก c เขียนแทนด้วย c c' ก็ต่อเมื่อ c = c' หรือ
มีโครงแบบ c1, c2, ..., cn ที่ c = c1, c' = cn และ c1
c2, c2
c3, ..., cn-1 cn
บทนิยาม ให้ M เป็นเครื่องทัวริงและ w เป็นสายอักขระรับเข้า จะกล่าวว่า M ยอมรับ w ก็ต่อเมื่อ มีโครงแบบ c
ที่ c0 c โดยที่สถานะที่ปรากฎในโครงแบบ c เป็นสถานะหนึ่งที่เป็นสถานะยอมรับ
ภาษาที่ M ยอมรับ เขียนแทนด้วย L(M) คือเซตของสายอักขระรับเข้าทั้งหมดที่ M ยอมรับ จะได้ L(M) = {
w * |
M ยอมรับ w }
สำหรับภาษา L ใดๆ เรากล่าวว่า M ยอมรับ L ก็ต่อเมื่อ L = L(M)
ตัวอย่างที่ 2 จงตรวจสอบว่า เครื่องทัวริงในตัวอย่างที่ 1 ยอมรับสายอักขระต่อไปนี้หรือไม่
- 010
- 1101
ตัวอย่างที่ 3 จงเขียนแผนภาพการผ่านของเครื่องทัวริงแถบเดี่ยวปลายเปิดทางเดียวที่ยอมรับ L เมื่อ
- L = { w
{0,1}* | w มี 0 ปรากฎอย่างน้อยหนึ่งตัว }
- L = {0n1n | n
}
- L = { wwR | w
{0, 1}* }
- L = { ww | w
{0, 1}* }
บทนิยาม เครื่องทัวริงแถบเดี่ยวปลายเปิดสองทาง (Two-way infinite single tape Turing machine)
แต่ละเครื่องประกอบด้วย
- เซตของสถานะ (state) ทั้งหมดซึ่งเป็นเซตจำกัด เขียนแทนด้วย Q
- เซตของสัญลักษณ์รับเข้า (input symbol) ทั้งหมดซึ่งเป็นเซตจำกัด เขียนแทนด้วย
- เซตของสัญลักษณ์แถบ (tape symbol) ทั้งหมดซึ่งเป็นเซตจำกัด เขียนแทนด้วย
สังเกตว่า
- เซตของสถานะยอมรับ (accepting state) ทั้งหมดซึ่งเป็นสับเซตของ Q เขียนแทนด้วย F
- สถานะเริ่มต้น (initial state) ซึ่งเป็นสมาชิกใน Q เขียนแทนด้วย q0
- ฟังก์ชันการผ่าน (transition function)
เป็นฟังก์ชันที่มีโดเมนเป็นสับเซตของ
Q × และพิสัยเป็นสับเซตของ Q ×
× {R, L, S} และมีเงื่อนไขว่า
(q, i) ไม่มีค่าทุก q F, i
แต่มีเงื่อนไขเพิ่มเติมว่าขณะเริ่มต้นจะอยู่ในสถานะ q0 อ่านสายอักขระรับเข้าเริ่มจากตัวที่อยู่ซ้ายสุดของสายอักขระนั้น
โดยทั่วไปจะเขียนแทนเครื่องทัวริงนี้ด้วย (Q, ,
, , q0, F)
บทนิยาม แผนภาพการผ่าน (transition diagram) ของเครื่องทัวริงแถบเดี่ยวปลายเปิดสองทาง (Q,
, ,
, q0, F) จะเหมือนกับของเครื่องทัวริงแถบเดี่ยวปลายเปิดทางเดียว
คือ กราฟเทียมที่มีทิศทาง มี Q เป็นเซตของจุดยอด มีลูกศรชี้เข้าที่จุดยอด q0 จุดยอดทุกจุดใน F มีวงกลมล้อมรอบสองวง และถ้า
(q, a) = (p, X, D) แล้วจะต้องมีอาร์กเชื่อมจากจุดยอด q ไปยังจุดยอด p โดยมี (a), (X, D) เขียนกำกับ
นิยามของโครงแบบ โครงแบบเริ่มต้น โครงแบบหยุด โครงแบบถัดจาก และโครงแบบที่ได้มาจากคำ ของเครื่องทัวริงแถบเดี่ยวปลายเปิดสองทาง
เหมือนกับเครื่องทัวริงแถบเดี่ยวปลายเปิดทางเดียว
ตัวอย่างที่ 4 จงเขียนแผนภาพการผ่านของเครื่องทัวริงแถบเดี่ยวปลายเปิดสองทางที่ยอมรับ
L เมื่อ L = { w {0,1}* | n(0, w) = n(1, w) }
บทนิยาม เครื่องทัวริง k-แถบ (k-tape Turing machine) แต่ละเครื่องประกอบด้วย (Q,
, ,
, q0, Z0, F) โดยที่ฟังก์ชันการผ่าน (transition function)
เป็นฟังก์ชันที่มีโดเมนเป็นสับเซตของ Q ×
(
{ }) × k
Q × k ×
{R, L, S}k+1 โดยที่ (q, a, x1, x2, ..., xk)
ไม่มีค่าทุก q F, a
{ }, (x1, x2, ..., xk)
k และ
- ถ้า
(q, a, x1, x2, ..., xk) = (q',
y1, y2, ..., yk, D, D1, D2, ..., Dk) แล้ว D
L และ Di L สำหรับแต่ละ i
{1, 2, ..., k} ที่ xi = Z0
หมายเหตุ
- เราถือว่าเครื่องทัวริง k-แถบ ประกอบด้วยแถบทั้งหมด k+1 แถบ (นับแถบบันทึกข้อมูลรับเข้าเพิ่มอีกหนึ่งแถบ
และที่เหลือเป็นแถบสำหรับหน่วยความจำอีก k แถบ) โดยแถบหน่วยความจำ k แถบเป็นแถบที่มีปลายเปิดทางเดียว
- หัวอ่านของแถบบันทึกรับเข้าเคลื่อนขวาหรืออยู่ที่เดิมเท่านั้น (จึงไม่จำเป็นต้องมีสัญลักษณ์พิเศษ Z0)
- หัวอ่านของแถบสำหรับหน่วยความจำสามารถเคลื่อนซ้าย ขวาหรืออยู่ที่เดิมก็ได้ ดังนั้นจึงต้องมีสัญลักษณ์พิเศษ Z0
เพื่อบอกตำแหน่งซ้ายสุดของแต่ละแถบ
- หัวอ่านแต่ละแถบเคลื่อนที่ได้อย่างเป็นอิสระไม่ขึ้นต่อกัน
- ในกรณีที่ไม่ได้ระบุ k เราเรียกรวมๆ ว่า เครื่องทัวริงหลายแถบ (multitape Turing Machine)
- ในกรณีที่เราต้องการให้เครื่องทัวริงสามารถเขียนข้อมูลออก เราเพิ่มเซตของข้อมูลออกทั้งหมด และฟังก์ชันของข้อมูลออกดังนี้
เครื่องทัวริง k-แถบที่มีข้อมูลออก (k-tape Turing machine with output) แต่ละเครื่องประกอบด้วย Q,
, ,
, q0, Z0, F เหมือนในบทนิยามของเครื่องทัวริง k-แถบ และให้ O
เป็นเซตของสัญลักษณ์ข้อมูลออก และ เป็นฟังก์ชันข้อมูลออก ที่นิยามโดย
:partial Q × (
{ }) ×
k O × {R, S}
บทนิยาม แผนภาพการผ่าน (transition diagram) ของเครื่องทัวริง k-แถบ (Q,
, ,
, q0, Z0, F) คือกราฟเทียมระบุทิศทางที่มี Q เป็นเซตของจุดยอดทั้งหมด
มีลูกศรชี้เข้าที่จุดยอด q0 จุดยอดทุกจุดใน F มีวงกลมล้อมรอบสองวง และถ้า (q, a,
x1, x2, ..., xk) = (p, y1, y2, ..., yk, D, D1, D2,
..., Dk) แล้ว จะต้องมีอาร์กเชื่อมจากจุดยอด q ไปยังจุดยอด p โดยมี
- (a, x1, x2, ..., xk), (y1, y2, ..., yk, D,
D1, D2, ..., Dk) เขียนกำกับ
ในกรณีที่เครื่องทัวริงมีข้อมูลออก และถ้า (q, a,
x1, x2, ..., xk) = (o, D') แล้ว เราจะเติม /(o, D') ต่อท้ายคือ
บทนิยาม เรากล่าวว่า c เป็น โครงแบบ (configuration) หนึ่งของเครื่องทัวริง k-แถบ M ก็ต่อเมื่อ
- c = (q, x
iy, 1
A1 1,
2 A2
2, ..., k
Ak k)
โดยที่ q Q, x
*, i
{ }, y
* และ j
*, Aj
,
j
* สำหรับทุก j = 1, 2, ..., k
ซึ่งหมายถึง ขณะนั้นเครื่องทัวริง M อยู่ในสถานะ q สายอักขระที่ปรากฎบนแถบบันทึกรับเข้าคือ xiy โดยมีหัวอ่านชี้อยู่ที่ i และสำหรับแต่ละ j
{1, 2, ..., k} สายอักขระที่ปรากฎบนแถบหน่วยความจำแถบที่ j คือ
jAjBj โดยมีหัวอ่านชี้อยู่ที่ Aj ดังรูป
เราเรียก c ว่าเป็น โครงแบบเริ่มต้น (initial configuration) ก็ต่อเมื่อ q = q0, x =
, i
{ }, 0 =
1 = ... = k
= , A1 = A2 = ... = Ak = Z0 และ
1 = 2 = ... =
k =
โดยทั่วไปเราจะใช้สัญลักษณ์ c0 แทนโครงแบบเริ่มต้น ดังนั้น
- c0 = (q0,
iy,
Z0, Z0,
..., Z0)
เรากล่าวว่า c เป็น โครงแบบหยุด (halting configuration) ก็ต่อเมื่อ q F หรือ
(q, i, A1, A2, ..., Ak) ไม่มีค่า
สำหรับเครื่องทัวริงที่มีข้อมูลออก ถ้าบนแถบข้อมูลออกปรากฎสายอักขระ uo โดยมีหัวอ่านชี้ที่ o แล้ว เรานิยามโครงแบบโดยเพิ่ม
u o เข้าไปในตอนท้ายของโครงแบบ เขียนได้เป็น
- c = (q, x
iy, 1
A1 1,
2 A2
1, ..., k
Ak k,
u o)
และโครงแบบเริ่มต้นคือ
- c0 = (q0,
iy,
Z0, Z0,
..., Z0,
)
ส่วนโครงแบบหยุดมีนิยามเหมือนเดิม
บทนิยาม
- ให้ c = (q, x
iy,
1 A1
1, 2
A2 2, ...,
k Ak
k) และ
- c' = (q', x'
i'y',
1' A1'
1', 2'
A2' 2', ...,
k' Ak'
k') เป็นโครงแบบของเครื่องทัวริง k แถบ M เครื่องหนึ่ง
- ถ้า
(q, i, A1, A2, ..., Ak) = (p,
y1, y2, ..., yk, D, D1, D2, ..., Dk) แล้ว เรากล่าวว่า c' เป็น
โครงแบบถัดจาก c (เขียนแทนด้วย c c') ก็ต่อเมื่อ
- p = q'
- ข้อใดข้อหนึ่งในสองข้อนี้ต้องเป็นจริง
2.1 ถ้า D = R แล้ว x' = xi และ y = i'y'
2.2 ถ้า D = S แล้ว x = x', i = i' และ y = y'
- สำหรับแต่ละ j
{1, 2, ..., k} ข้อใดข้อหนึ่งในสามข้อนี้ต้องเป็นจริง
3.1 ถ้า Dj = R แล้ว j' =
jyj,
j = Aj'
j'
3.2 ถ้า Dj = L แล้ว j =
j'Aj' และ
j' = yj
j
3.3 ถ้า Dj = S แล้ว j =
j', Aj' = yj และ
j = j'
เรากล่าวว่า c' เป็น โครงแบบที่ได้มาจาก c (เขียนแทนด้วย c c') ก็ต่อเมื่อ
c = c' หรือมีโครงแบบ c1, c2, ..., cn ที่ c = c1, c' = cn และ c1
c2, c2
c3, ..., cn-1 cn
- สำหรับเครื่องทัวริงที่มีข้อมูลออก ถ้า c = (q, x
iy,
1 A1
1, 2
A2 2, ...,
k Ak
k, u o) และ
- c' = (q', x'
i'y',
1' A1'
1', 2'
A2' 2', ...,
k' Ak'
k', , u' o')
ต่างก็เป็นโครงแบบของเครื่องนี้ และถ้า
- ถ้า
(q, i, A1, A2, ..., Ak) = (p,
y1, y2, ..., yk, D, D1, D2, ..., Dk) และ
(q, i, A1, A2, ..., Ak) = (v, N)
แล้ว นิยามของ c c' จะเหมือนที่กล่าวข้างต้น กับเงื่อนไขเพิ่มเติมคือ
- ถ้า N = R แล้ว u' = uv และ o' =
- ถ้า N = S แล้ว u' = u และ o' = v
สำหรับนิยาม c c' เหมือนกับข้างต้น
ตัวอย่างที่ 5 จงเขียนแผนภาพการผ่านของเครื่องทัวริงหลายแถบที่ยอมรับ
L เมื่อ L = { w {0,1}* | n(0, w)
n(1, w) }
นอกจากนี้เรายังสามารถสร้างเครื่องทัวริงที่คำนวณค่าของฟังก์ชัน แล้วแสดงผลลัพธ์บนแถบข้อมูลออก ดังนี้
ตัวอย่างที่ 6 จงเขียนแผนภาพการผ่านของเครื่องทัวริงที่คำนวณค่าของฟังก์ชัน
f :
ที่นิยามโดย f(n) = n+1 ทุก n
เมื่อกำหนดว่า n เขียนแทนด้วย
- สายอักขระของ 1
- เลขฐานสอง
หมายเหตุ
- เรามักกำหนดให้เครื่องทัวริงที่คำนวณค่าฟังก์ชันมีแถบบันทึกรับเข้า และแถบข้อมูลออก โดยที่ขณะเริ่มต้นบนแถบรับข้อมูลเข้าจะมี
สายอักขระที่แทนสมาชิกในโดเมนของฟังก์ชัน และเมื่อจบการทำงาน บนแถบช้อมูลออกจะปรากฎสายอักขระที่แทนค่าของฟังก์ชันที่จุดนั้น
- เนื่องจากจำนวนฟังก์ชันที่ต่างกันทั้งหมดจาก
ไปยัง
มีจำนวนอนันต์แบบนับไม่ได้ แต่จำนวนเครื่องทัวริงที่คำนวณค่าของฟังก์ชันจากเซตดังกล่าวมีจำนวนอนันต์แบบนับได้
ดังนั้นจะมีฟังก์ชันบางชนิดซึ่งไม่มีเครื่องทัวริงที่คำนวณค่าของฟังก์ชันนั้นได้
- ฟังก์ชันที่มีโดเมนเป็นสับเซตของ
k และพิสัยเป็นสับเซตของ
ที่เราสามารถสร้างเครื่องทัวริงที่คำนวณค่าของฟังก์ชันนั้นได้ มีชื่อเรียกว่า
ฟังก์ชันทัวริง-คำนวณได้ (Turing-computable function) ซึ่งกลุ่มของฟังก์ชันนี้จะเป็นกลุ่มเดียวกับกลุ่มของฟังก์ชันรีเคอร์ซีฟ
(recursive function)
ตัวอย่างที่ 7 จงสร้างเครื่องทัวริงที่คำนวณค่าของฟังก์ชันการบวกจำนวนนับสองจำนวน การหักออกของจำนวนนับสองจำนวน
การคูณของจำนวนนับสองจำนวน
บทนิยาม เครื่องทัวริงแถบเดี่ยวปลายเปิดทางเดียวเชิงไม่กำหนด (Nondeterministic one-way infinite single
tape Turing machine) เรียกสั้นๆ ว่า เอ็นทีเอ็ม (NTM) แต่ละเครื่องเป็นเครื่องทัวริงแถบเดี่ยวปลายเปิดทางเดียวที่มีฟังก์ชันการผ่าน
สอดคล้องเงื่อนไขดังนี้
:partialQ ×
เซตของสับเซตจำกัดทั้งหมดของ Q ×
× {R, L, S} โดยที่ (q, a) ไม่มีค่า
ทุก q F, a

- ถ้า (p, X, D)
(q, Z0)
แล้ว D L
โครงแบบของเอ็นทีเอ็ม เขียนแทนด้วย (q, 
i ) เช่นเดียวกับนิยามของเครื่องทัวริงแถบเดี่ยวปลายเปิดทางเดียว และถ้า
c = (q,  i
) และ c' = (q', '
i' ) เป็นโครงแบบของเอ็นทีเอ็ม
แล้วจะกล่าวว่า c' เป็นโครงแบบถัดจาก c (เขียนแทนด้วย c c') ก็ต่อเมื่อ
ข้อใดข้อหนึ่งในสามข้อต่อไปนี้ต้องเป็นจริง
- (q', X, R)
(q, i),
' = X และ
= i'
- (q', X, L)
(q, i),
= 'i' และ
' = X
- (q', X, S)
(q, i),
i' = X, = และ
= '
และเรากล่าวว่า c' เป็นโครงแบบที่ได้มาจาก c (เขียนแทนด้วย c c') ก็ต่อเมื่อ
c = c' หรือมีโครงแบบ c1, c2, ..., cn ที่ c = c1, c' = cn และ c1
c2, c2
c3, ..., cn-1 cn
แผนภาพการผ่าน (Transition diagram) ของเอ็นทีเอ็ม จะเหมือนกับของเครื่องทัวริงแถบเดี่ยวปลายเปิดทางเดียว
สำหรับนิยามของเครื่องทัวริงเชิงไม่กำหนดอื่น ๆ ก็นิยามได้ในทำนองเดียวกัน
ตัวอย่างที่ 8 ให้ M = (Q, ,
, , q0, Z0, F)
เป็นเอ็นทีเอ็มที่มี Q = {q0, q1, q2}, = {0, 1},
= {0, 1, , X, Y}, F = {q2}
และ นิยามดังนี้
| Z0
| 0 | 1 |
Y |
q0 |
{(q0, Z0, R)} | {(q1, X, R)} |
{(q0, 1, R), (q1, Y, R)} |
{(q0, Y, R)} |
q1 |
| {(q0, 0, L)} |
{(q2, Y, L)} |
|
q2 |
| |
| |
จงตรวจสอบว่า M ยอมรับสายอักขระ 101 และ 100 หรือไม่
เครื่องทัวริงครอบจักรวาล (Universal Turing Machines)
เครื่องทัวริงที่ได้พิจารณา เปรียบเสมือนโปรแกรมแต่ละโปรแกรมที่สร้างเพื่อแก้ปัญหาเฉพาะอย่าง แต่โดยหลักการทำงานของ
คอมพิวเตอร์ที่แท้จริงแล้ว ต้องสามารถทำงานได้หลายหลากขึ้นอยู่กับโปรแกรมที่ถูกเขียน เราจะศึกษาการสร้างเครื่องทัวริงที่จำลองการทำงานของ
เครื่องทัวริงแถบเดี่ยวปลายเปิดทางเดียวเชิงกำหนดทุกเครื่องภายใต้สัญลักษณ์แบบเดียวกัน เพื่อความสะดวกเราจะกำหนด
= {0, 1, , Z0}
เครื่องนี้เราจะให้ชื่อว่า เครื่องทัวริงครอบจักรวาล (Universal Turing Machines) หรือเรียกสั้น ๆ ว่า ยูทีเอ็ม (UTM)
สำหรับสัญลักษณ์ของสายอักขระรับเข้า เรากำหนดให้ใช้ได้เฉพาะ 0 หรือ 1 เท่านั้น ดังนั้นเราต้องมีการกำหนดรหัสให้กับเครื่องทัวริง
ต่อไปเราจะนิยามการกำหนดรหัสที่ใช้กับเครื่องทัวริง
บทนิยาม ให้ M = (Q, ,
, , q0, Z0, F)
เป็นเครื่องทัวริงแถบเดี่ยวปลายเปิดทางเดียวเชิงกำหนดใด ๆ ที่มี = {0, 1,
, Z0}, Q = {q1, q2, ..., qm} โดยที่
q1 เป็นสถานะเริ่มต้น และ F = {q2}
- เราแทนสัญลักษณ์ที่ปรากฎบนแถบด้วย X1, X2, X3, X4 สำหรับ 0, 1,
, Z0 ตามลำดับ
- เราแทนการเลื่อนหัวอ่านด้วย D1, D2, D3 สำหรับ R, L และ S ตามลำดับ
- และสำหรับแต่ละ i และ r
{1, 2, ..., m}, j และ n
{1, 2, 3, 4}, k {1, 2, 3},
- เราแทน
(qi, Xj) = (qr, Xn,
Dk) ด้วยรหัส (code): - 00...i ตัว ...0100...j ตัว...0100...r ตัว ...0100...n ตัว...0100...k ตัว...0
และแทนรหัสของเครื่องทัวริง M ด้วยรหัสของเครื่อง (Turing code)
- 111code111code211...11codet111
เมื่อ code1, code2, ..., codet เป็นรหัสของค่า ทั้งหมด
ของเครื่องทัวริงนี้
เราใช้สัญลักษณ์ <M> แทนรหัสของเครื่องทัวริง และถ้า w เป็นสายอักขระนำเข้าของ M เราจะแทนสัญลักษณ์
<M,w> หมายถึง 111code111code211...11codet111w
ตัวอย่างที่ 9 ให้ M = ({q1, q2, q3}, {0,1}, {0, 1,
, Z0}, , q1,
Z0, {q2}) เป็นเครื่องทัวริงแถบเดี่ยวปลายเปิดทางเดียวเชิงกำหนดที่มี
นิยามดังนี้
(q1, Z0) = (q1, Z0, R),
(q1, 0) = (q1, 0, L),
(q1, 1) = (q3, 0, R),
(q3, 0) = (q1, 1, R),
(q3, 1) = (q2, 0, R),
(q3, ) = (q3,
1, L)
จงเขียนรหัสของเครื่องทัวริงนี้
ยูทีเอ็ม เปรียบได้กับเครื่องคอมพิวเตอร์ที่เราใช้งานอยู่ในปัจจุบัน และเครื่องทัวริงแต่ละเครื่องที่ถูกเข้ารหัสในแถบข้อมูลนำเข้าที่ยูทีเอ็มทำการจำลองเปรียบได้กับโปรแกรมต่าง
ๆ ที่เครื่องคอมพิวเตอร์ใช้งานอยู่ เราจะใช้สัญลักษณ์ Lu แทนภาษาที่ยูทีเอ็มยอมรับ นั้นคือ
- Lu = {<M, w> | M เป็นเครื่องทัวริง, w
{0, 1}* และ M ยอมรับ w} {0, 1}*
|