LÝ THUYẾT MÁY TURINGMục đích của các lý thuyết của các vấn đề không thể quyết định là không chỉ để thành lập sự tồn tại của vấn đề như vậy - một ý tưởng về trí tuệ thú vị ở bên phải của
Trang 1BỘ GIÁO DỤC & ĐÀO TẠO
Niên khóa : 2011 - 2013
Đà Nẵng, 05/2012
Trang 2MỤC LỤC
Đ Ề TÀI : 1
MỤC LỤC 2
LỜI MỞ ĐẦU 3
PHẦN 1 LÝ THUYẾT 4
8.2.1 T ÌM QUYẾT ĐỊNH CHO TẤT CẢ CÁC CÂU HỎI TOÁN HỌC 5
8.2.2 K Ý HIỆU CHO CÁC MÁY T URING 6
8.2.3 M Ô TẢ TỨC THỜI CHO MÁY T URING 8
8.2.4 N HỮNG SƠ ĐỒ CHUYỂN TIẾP CHO MÁY T URING 13
8.2.5 N GÔN NGỮ CỦA MÁY T URING 17
8.2.6 M ÁY T URING VÀ SỰ DỪNG 18
PHẦN 2 BÀI TẬP 20
2.1 B ÀI 8.2.1 20
2.2 B ÀI 8.2.3 23
TÀI LIỆU THAM KHẢO 26
Trang 3LỜI MỞ ĐẦU
Nhóm 02 thực hiện việc nghiên cứu tài liệu “Introduction to Automata
Theory, Languages and Computation”, phần 8.2 (p.316 – 328).
Nội dung chính của tiểu luận bao gồm:
Phần 1 LÝ THUYẾT
Máy Turring
8.2.1 Tìm quyết định cho tất cả các câu hỏi toán học
8 2.2 Ký hiệu cho các máy Turing
8.2.3 Mô tả tức thời cho máy Turing
8.2.4 Những sơ đồ chuyển tiếp cho máy Turing
8.2.5 Ngôn ngữ của máy Turing
và trình bày không thể tránh khỏi những sai sót, hạn chế Rất mong được sự đóng góp ý kiến của Thầy PGS TS Phan Huy Khánh và các bạn cùng lớp
Xin chân thành cảm ơn!
Nhóm 02 – Lớp KHMT Khóa 24
Lê Văn Linh Mai Văn Tùng Huỳnh Anh Tuấn
Trang 4PHẦN 1 LÝ THUYẾT MÁY TURING
Mục đích của các lý thuyết của các vấn đề không thể quyết định là không chỉ để thành lập sự tồn tại của vấn đề như vậy - một ý tưởng về trí tuệ thú vị ở bên phải của riêng của nó -nhưng để cung cấp hướng dẫn cho các lập trình viên
về những gì họ có thể hoặc có thể không được có thể thực hiện thông qua lập trình Lý thuyết này cũng có tác động lớn khi chúng ta thảo luận, chúng tôi quy định tại chương 10, vấn đề là mặc dù có thể quyết định, yêu cầu số lượng lớn thời gian để giải quyết chúng Những vấn đề này, được gọi là "vấn đề nan giải," có xu hướng trình bày khó khăn lớn cho các lập trình và hệ thống thiết kế so với các vấn đề không thể quyết định Lý do là, trong khi các vấn đề không thể quyết định thường khá rõ ràng như vậy, và giải pháp của họ hiếm khi thực nghiệm trong thực tế, những vấn đề khó đang phải đối mặt mỗi ngày Hơn nữa, họ thường mang lại những thay đổi nhỏ trong các yêu cầu hoặc khám phá các giải pháp Vì vậy, những người thiết kế thường xuyên phải đối mặt với việc phải quyết định có hay không một vấn đề là trong lớp khó chữa, và phải làm gì về nó, nếu như vậy.Chúng ta cần các công cụ mà sẽ cho phép chúng ta để chứng minh câu hỏi không thể quyết định hàng ngày hoặc khó chữa Các công nghệ đã được giới thiệu tại mục 8.1 rất hữu ích cho các câu hỏi đối phó với các chương trình, nhưng
nó không dịch một cách dễ dàng đến các vấn đề trong các lĩnh vực không liên quan Ví dụ, chúng ta sẽ giảm được khó khăn các câu hỏi trong bài toán hello-world cho dù ngữ pháp là mơ hồ
Kết quả là, chúng ta cần phải xây dựng lại lý thuyết không thể quyết định của chúng ta, không dựa trên các chương trình trong C hoặc ngôn ngữ khác, nhưng dựa trên một máy tính có mô hình rất đơn giản được gọi là máy Turing Thiết bị này chủ yếu là tự động hữu hạn có một băng dài vô hạn mà trên đó nó có thể đọc và ghi dữ liệu Một trong những lợi thế của máy Turing qua chương trình
là đại diện của những gì có thể được tính là máy Turing là đủ đơn giản mà chúng
ta có thể đại diện cấu hình của nó một cách chính xác, bằng cách sử dụng một ký
Trang 5hiệu đơn giảngiống như ID của một PDA Trong so sánh, trong khi chương trình
C có một trạng thái, liên quan đến tất cả các biến theo trình tự của lời gọi hàm được thực hiện, các ký hiệu cho mô tả các trạng thái quá phức tạp để cho phép chúng ta dễ hiểu, chính thức chứng minh
Sử dụng các ký hiệu máy Turing, chúng ta sẽ chứng minhbài toán không thể quyết định được xuất hiện không liên quan đến lập trình Một ví dụ, mà chúng ta sẽ thấy trong phần 9.4 là "Vấn đề tương ứng của Bưu chính", một câu hỏi đơn giản liên quan đến hai danh sách các chuỗi, là không thể quyết định được, và vấn đề này làm cho nó dễ dàng để hiển thị câu hỏi về ngữ pháp, chẳng hạn như sự mơ hồ, là không thể quyết định được Tương tự, khi chúng tôi giới thiệu các vấn đề khó, chúng ta sẽ thấy rằng một số câu hỏi, dường như có ít để làm với tính toán (ví dụ như, thỏa mãn công thức của boolean), là khó chữa
8.2.1 Tìm quyết định cho tất cả các câu hỏi toán học
Bước vào thế kỷ 20, nhà toán học D Hilbert hỏi có thể tìm thấy một thuật toán để xác định sự thật hay là dối trá bất kỳ lời tuyên bố toán học nào Đặc biệt, ông hỏi nếu có một cách để xác định xem bất kỳ công thức nào trước: thứ tự các phép tính toán, áp dụng số nguyên, là sự đúng Kể từ khi thứ tự các phép tính toán là các số nguyên thì đủ mạnh mẽ để thể hiện phát biểu như "ngữ pháp này là
mơ hồ," hoặc "chương trình này in hello world," Hilbert đã thành công, có những vấn đề sẽ có các thuật toán mà đến bây giờ chúng ta biết không tồn tại.Tuy nhiên, vào năm 1931, K Godel công bố định lý bất toàn nổi tiếng của ông Ông đã xây dựng một công thức trong tính toán vị áp dụng cho số nguyên, khẳng định rằng công thức đó có thể được chứng minh không phải và cũng không bác bỏ trong các tính toán vị Kỹ thuật của Gödel tương tự như việc xây dựng các chương trình mâu thuẫn H2 tại mục 8.1.2, nhưng với các chức năng trên số nguyên, chứ không phải với các chương trình C
Tính toán vị không phải là khái niệm chỉ rằng các nhà toán học đã có "bất
kỳ tính toán có thể." Trong tính toán vị thực tế, được khai báo chứ không phải là
Trang 6tính toán, phải hoàn tất với một loạt các ký hiệu, bao gồm cả "đệ quy một phần chức năng", giống một ký hiệu hơn là ngôn ngữ lập trình và những ký hiệu tương
tự khác Năm 1936, A M Turing đề xuất các máy Turing như là một mô hình của "bất kỳ tính toán có thể." Mô hình này giống như máy tính, hơn so với chương trình, mặc dù đúng điện tử, hoặc thậm chí máy tính điện tử đã nhiều năm trong tương lai (Turing đã tự mình tham gia vào xây dựng như là máy trong suốt chiến tranh thế giới thứ II)
Thật thú vị, tất cả các đề nghị quan trọng cho một mô hình tính toán có cùng một quyền lực, đó là, họ tính toán các hàm giống nhau hoặc công nhận giống nhau ngôn ngữ Giả định không thể chứng minh được rằng bất kỳ cách thức chung để tính toán sẽ cho phép chúng ta tính toán chỉ có hàm đệ quy một phần (hoặc tương đương máy Turing máy hoặc các máy tính hiện đại ngày nay có thể tính toán) được biết đến như giả thuyết của Giáo Hội (sau khi một luận sư A Church) hoặc luận văn Church-Turing
8.2.2 Ký hiệu cho các máy Turing
Chúng tôi có thể hình dung một máy Turing như trong hình 8.8 Máy này bao gồm một điều khiển hữu hạn, mà có thể là trong bất kỳ của một tập hợp hữu hạn của các trạng thái Có một băng được chia thành các ô vuông hoặc các tế bào, mỗi tế bào có thể chứa bất kỳ một trong số hữu hạn biểu tượng
Hình 8.8Ban đầu, đầu vào, mà là một chuỗi hữu hạn chiều dài của các biểu tượng được chọn từ bảng chữ cái đầu vào, được đặt trên băng Tất cả các ô khác của
Trang 7băng, mở rộng vô hạn đến bên trái và bên phải, ban đầu chứa một biểu tượng đặc biệt gọi là biểu tượng rỗng Các biểu tượng rỗng là một biểu tượng băng, nhưng không phải là một biểu tượng đầu vào, và có thể là biểu tượng băng khác, bên cạnh những biểu tượng đầu vào và biểu tượng rỗng.
Một đầu băng là ô ở vị trí thứ nhất của băng Máy Turing có thể quét các ô trên băng Ban đầu, đầu băng ở ô cùng nhất bên trái chứa dữ liệu đầu vào
Di chuyển của máy Turing là một hàm của trạng thái về kiểm soát hữu hạn
và biểu tượng của băng quét Trong một động thái, máy Turing sẽ:
1 Thay đổi trạng thái Trạng thái tiếp theo tùy chọn có thể là tương tự như trạng thái hiện tại
2 Viết một biểu tượng băng trong các tế bào quét Biểu tượng băng này thay thế những biểu tượng đã có trong ô Tuy nhiên, biểu tượng có thể là giống như các biểu tượng hiện có
3 Di chuyển đầu băng sang trái hoặc phải Trong hình thức của chúng ta, chúng ta yêu cầu một di chuyển, và không cho phép đầu đọc đứng yên một chỗ Hạn chế này không không hạn chế những gì một máy Turing có thể tính toán, vì bất kỳ chuỗi di chuyển với một đầu đọc đứng yên tại chỗ
có thể ngưng tụ, cùng với đầu băng tiếp theo di chuyển, vào một thay đổi trạng thái duy nhất, một biểu tượng mới băng, và một di chuyển sang trái hoặc phải
Ký hiệu chính thức, chúng ta sẽ sử dụng cho một máy Turing (TM) là tương tự như sử dụng automát hữu hạn hoặc PDA Chúng ta mô tả một TM bởi các tuple-7
M = (Q, ∑, Γ, δ, q0, B, F)
có các thành phần có ý nghĩa như sau:
Q: tập hữu hạn của các trạng thái kiểm soát hữu hạn
∑: tập hợp hữu hạn các ký hiệu đầu vào
Trang 8Γ: bộ hoàn chỉnh các biểu tượng băng; E luôn luôn là một tập hợp con của r.
δ: chức năng chuyển đổi Những tham số của hàm 5 (q, X) là một trạng thái q và một băng ký hiệu X Giá trị của hàm b(q, X), nếu nó được định nghĩa, là một bộ ba (p, Y, D), trong đó:
1 p là trạng thái tiếp theo, trong Q
2 Y là biểu tượng, trong Γ, được viết trong ô được quét, thay thế
bất cứ điều gì biểu tượng đã có
3 D là một định hướng, hoặc L hoặc R, là viết tắt của chữ "left"
hoặc "right", riêng từng từ, và cho chúng ta biết hướng di chuyển đầu
q0: Trạng thái bắt đầu, là một thành viên của Q, trong đó kiểm soát hữu hạn được tìm thấy ban đầu
B: Biểu tượng rỗng Biểu tượng này là trong Γ nhưng không phải trong ∑, nghĩa là, nó không phải là một biểu tượng đầu vào Biểu tượng rỗng xuất hiện ban đầu trong tất cả, nhưng số lượng hữu hạn của ô ban đầu mà giữ biểu tượng đầu vào
F: tập hợp các trạng thái cuối cùng hoặc chấp nhận, là một tập hợp con của Q
8.2.3 Mô tả tức thời cho máy Turing
Để mô tả chính thức những gì một máy Turing (TM) làm, chúng ta cần phải phát triển một ký hiệu cho các cấu hình hoặc mô tả tức thời (ID), giống như các
ký hiệu chúng ta phát triển cho PDA Từ một TM, về nguyên tắc, có một băng dài vô tận, chúng ta có thể tưởng tượng rằng nó là không thể mô tả các cấu hình của một TM ngắn gọn Tuy nhiên, sau khi bất kỳ số lượng hữu hạn của sự di chuyển, TM có thể chỉ có một số hữu hạn của các ô đã truy cập, mặc dù số lượng của các ô truy cập cuối cùng có thể phát triển xa hơn bất kỳ giới hạn hữu hạn
Trang 9Như vậy, trong mỗi ID, có một tiền tố và hậu tố vô hạn của các ô không bao giờ được truy cập Tất cả những ô này phải giữ một trong hai khoảng trống hoặc một
số hữu hạn các ký hiệu đầu vào Do đó chúng ta hiển thị trong một ID chỉ có các
ô giữa tận cùng bên trái và những khoảng trống ngoài cùng bên phải Trong điều kiện đặc biệt, khi đầu đọc đang quét một số hàng đầu hoặc dấu trống, một số hữu hạn các khoảng trống bên trái hoặc bên phải của phần không trống của băng cũng phải được bao gồm trong các ID
Ngoài ra để đại diện cho các băng, chúng ta phải đại diện cho sự kiểm soát hữu hạn và vị trí đầu băng Để làm như vậy, chúng ta nhúng các trạng thái trong băng, và ngay lập tức đặt nó tới bên trái của các ô đã được quét Để phân biệt với các chuỗi băng cộng với trạng thái, chúng ta phải chắc chắn rằng chúng ta không
sử dụng bất kỳ một biểu tượng trạng thái nào cũng là một biểu tượng băng Tuy nhiên, nó rất dễ dàng thay đổi tên của các trạng thái vì thế chúng không có gì chung với các biểu tượng băng, kể từ khi hoạt động của TM không phụ thuộc vào những gì các trạng thái được gọi Vì vậy, chúng ta sẽ sử dụng chuỗi X1 X2 … X i- 1q X i X i+1 X n để đại diện cho một ID, trong đó:
1 q là trạng thái của máy Turing.
2 Đầu đọc băng quét các biểu tượng thứ i từ bên trái.
3 X 1 X 2 … X n là một phần của băng giữa tận cùng bên trái và bên phải không trống Như một ngoại lệ, nếu đầu đọc đến bên trái của tận cùng bên trái không trống hoặc đến bên phải của ngoài cùng bên phải không
trống, thì một số tiền tố hoặc hậu tố của X 1 X 2 X n sẽ được để trống, và
Trang 10Chú ý động thái này phản ánh sự thay đổi trạng thái p và thực tế rằng đầu đọc băng bây giờ ở tại vị trí ô i - 1 Có hai trường hợp ngoại lệ quan trọng:
1 Nếu i = 1, thì M di chuyển vào chỗ trống bên trái của X1 Trong trường hợp đó,
2 Nếu i = n và Y = B, thì ký hiệu B được viết đè lên Xn tham gia vào chuỗi
vô hạn các khoảng trống theo sau và không xuất hiện trong các ID tiếp theo Vì vậy,
Bây giờ, giả sử δ(q,Xi) = (p,Y,R), tức là di chuyển tiếp theo là hướng về bên phải Sau đó,
Ở đây, sự di chuyển này phản ánh thực tế rằng đầu đọc đã chuyển đến ô i +
1 Một lần nữa, có hai trường hợp ngoại lệ quan trọng:
1 Nếu i = n thì ô thứ i + 1 giữ một khoảng trống, và ô này không phải là một phần của ID trước Vì vậy, thay vào chúng ta có
2 Nếu i = 1 và Y = B, ký hiệu B viết đè lên X1 tham gia vào chuỗi vô hạn các khoảng trống đầu hàng và không xuất hiện trong các ID tiếp theo Vì vậy,
Ví dụ 8.2: Chúng ta thiết kế một máy Turing và xem nó làm thế nào để hoạt
động trên một đầu vào điển hình Các TM chúng ta xây dựng sẽ chấp nhận ngôn ngữ {0n1n|N≥1} Ban đầu, nó cho 1 chuỗi hữu hạn của số 0 và l trên băng của nó, trước và sau là vô hạn của khoảng trống Cách khác, TM sẽ thay đổi từ số 0 thành X và sau đó thay đổi số 1 thành Y, cho đến khi tất cả các số 0 và l đã được phù hợp
Trang 11Chi tiết hơn, bắt đầu từ đầu bên trái của đầu vào, nó liên tục thay đổi từ số 0 thành X và di chuyển từ phải qua bất cứ khi nó nhìn thấy số 0 và Y, cho đến khi
nó đến số 1 Nó thay đổi số 1 thành Y và di chuyển sang trái, qua Y và số 0, cho đến khi nó tìm thấy X Vào thời điểm đó, nó lập tức cho số 0 ngay bên phải, và nếu tìm thấy số 1, nó thay đổi thành X và lặp đi lặp lại các quy trình, thay đổi một kết hợp số 1 thành Y
Nếu đầu vào không trống không thuộc 0*1*, thì TM cuối cùng sẽ không có một sự di chuyển tiếp theo và sẽ ngừng hoạt động mà không chấp nhận Tuy nhiên, nếu nó kết thúc thay đổi tất cả các số 0 thành các X trên cùng một vòng thay đổi số 1 thành Y cuối cùng, thì nó đã tìm thấy đầu vào của hình thức 0nln và chấp nhận đặc điểm kỹ thuật chính thức của TM M là
δ được cho bởi bảng trong hình 8.9
M thực hiện tính toán của nó, các phần của băng, đầu băng của M đã truy cập, sẽ luôn luôn là một chuỗi các biểu tượng được mô tả bởi các biểu thức chính
quy X*0*Y*1* Đó là, sẽ có một số các số 0 đã được thay đổi thành các X, tiếp
theo là một số các số 0 chưa được thay đổi thành các X Sau đó có một số các số
l đã được thay đổi thành các Y, và một số các số l chưa được thay đổi thành các
Y Có thể có hoặc có thể không có các số 0 và các số 1 làm theo
Hình 8.9: Một máy Turing chấp nhận {0nln | n≥ 1}
Trạng thái qo là trạng thái ban đầu, và M cũng nhập vào trạng thái qo mỗi khi nó trở về số 0 còn lại tận cùng bên trái Nếu M là ở trạng thái qo và quét một
Trang 12số 0, các quy tắc ở góc trên bên trái của hình 8.9 “nói” để nó đi đến trạng thái q1, thay đổi từ số 0 thành X và di chuyển sang phải Một khi ở trạng thái q1, M di chuyển trên tất cả số 0 và Y mà nó tìm thấy trên băng còn lại ở trạng thái q1 Nếu
M thấy X hoặc B, nó sẽ ngừng hoạt động Tuy nhiên, trong trạng thái q1 nếu M
nhìn thấy số 1, nó thay đổi số 1 thành Y, nhập vào trạng thái q2, và bắt đầu di
chuyển trái
Trong trạng thái q2, M di chuyển sang trái trên các số 0 và các Y, còn lại ở trạng thái q2 Khi M đến các X ngoài cùng bên phải, đánh dấu sự kết thúc của các khối số 0 mà đã được thay đổi thành X, M trở về trạng thái qo và di chuyển sang
bên phải Có hai trường hợp:
1 Nếu M bây giờ nhìn thấy một số 0, thì nó lặp đi lặp lại chu kỳ phù hợp
với chúng ta vừa mô tả
2 Nếu M thấy một Y, thì nó thay đổi tất cả các số 0 thành các X Nếu tất cả l
đã được thay đổi thành Y, thì các đầu vào của hình thức 0nln, và M phải chấp nhận Như vậy, M nhập vào trạng thái q3, và bắt đầu di chuyển sang bên phải, qua các Y Nếu biểu tượng khác hơn so với một Y thì M nhìn thấy đầu tiên là một khoảng trống, thì thực sự đã có một số lượng của số 0 bằng số lượng của l, do đó,
M nhập vào trạng thái q4 và chấp nhận Mặt khác, nếu M gặp số khác 1 thì có
quá nhiều số 1, do đó M ngừng hoạt động mà không chấp nhận Nếu nó gặp một
số 0 thì đầu vào của các hình thức sai, và M cũng ngừng hoạt động.
Đây là một ví dụ của một tính toán chấp nhận bởi M Đầu vào của nó là
0011 Ban đầu, M là trạng thái qo, quét số 0 đầu tiên, nghĩa là, ID ban đầu của M
là q 0 0011 Trình tự toàn bộ di chuyển của M là:
Ví dụ khác, hãy xem xét M nhập vào 0010, đó không phải là ngôn ngữ được chấp nhận
Trang 13Các hành vi của M trên 0010 giống như các hành vi trên 0011, cho đến khi
trong ID XXYq 1 0 M quét số 0 cuối cùng cho lần đầu tiên M phải di chuyển sang
phải, ở trong trạng thái q1, đưa đến ID XXY0q 1 B Tuy nhiên, ở trạng thái q1 M không có di chuyển trên băng biểu tượng B, do đó M ngừng hoạt động và không chấp nhận đầu vào
8.2.4 Những sơ đồ chuyển tiếp cho máy Turing
Chúng ta có thể biểu diễn cho quá trình chuyển đổi của một hình tượng máy
Turing, nhiều như chúng ta đã làm cho các PDA Một sơ đồ chuyển đổi là quá
trình bao gồm một tập hợp các nút tương ứng với các trạng thái của TM Một
vòng cung từ trạng thái q đến trạng thái p được dán nhãn bởi một hoặc nhiều mục của mẫu X/YD, trong đó X và Y là biểu tượng băng, và D là một định hướng (L hay R) Bất cứ khi nào δ(q,X)=(p,Y,D), chúng ta tìm thấy các nhãn X/YD trên vòng cung từ q đến p Tuy nhiên, trong sơ đồ của chúng ta, hướng D được mô tả
bởi ← cho "bên trái" và → cho "bên phải”
Đối với các loại biểu đồ dịch chuyển, chúng ta sử dụng "Start" để đại diện cho trạng thái bắt đầu và một mũi tên vào trạng thái đó Trạng thái chấp nhận được chỉ định bởi vòng tròn kép Như vậy, thông tin duy nhất về một TM không thể đọc trực tiếp từ biểu đồ là biểu tượng được sử dụng cho khoảng trống Chúng
ta giả định rằng biểu tượng này là B trừ các trạng thái khác
Ví dụ 8.3: Hình 8.10 cho thấy sơ đồ chuyển tiếp cho máy Turing ở ví dụ
8.2, có chức năng chuyển đổi đã được đưa ra trong hình 8.9
Ví dụ 8.4: Trong khi ngày nay chúng ta thấy nó thuận tiện nhất để nghĩ
rằng máy Turing xin nhận ngôn ngữ, hoặc tương đương, giải quyết các vấn đề, quan điểm ban đầu của máy Turing là một máy có chức năng tính giá trị là số nguyên Trong chương trình của mình, các số nguyên được biểu diễn ở dạng đơn nguyên, như các khối của một đơn ký tự, và máy tính bằng cách thay đổi chiều dài của các khối hoặc bởi việc xây dựng khối mới ở nơi khác trên băng Trong ví
dụ đơn giản này, chúng ta sẽ hiển thị chức năng tính toán một máy Turing