CHƯƠNG INHỮNG BÀI TOÁN KHÔNG THỂ GIẢI ĐƯỢC Khi đề cập đến máy Turing, ta thường quan tâm đến các lớp ngôn ngữ đơn giản và những cách đơn giản được sử dụng trong giải quyết các vấn đề như
Trang 1ĐẠI HỌC ĐÀ NẴNG TRƯỜNG ĐẠI HỌC BÁCH KHOA
TIỂU LUẬN MÔN LÝ THUYẾT TÍNH TOÁN
(Introduction to Automata Theory, Languages, and Computation)
GVHD: PGS.TS PHAN HUY KHÁNH
Nhóm thực hiện: 1.Nguyễn Văn Định
2 Hồ Trúc Lâm
3 Đoàn Xuân Lộc Lớp : Khoa học máy tính –khóa 24
ĐÀ NẴNG 05/2012
Trang 2LỜI MỞ ĐẦU
Con người có thể chế tạo ra một loại máy tính nào đó có hiểu được con người và thông minh như người hay không? Với thế hệ máy tính ngày nay có thể hiểu được như bộ não của người không? Tìm hiểu chính bản thân mình – đó là niềm khát khao của loài người trong suốt quá trình phát triển Những thành tựu khoa học vang dội gần đây như nhân bản vô tính, giải mã bộ gen người,… phần nào tạo nên ấn tượng con người sắp đạt đến chỗ hiểu được chính mình Như vậy, con người đang đứng trước một câu hỏi lớn: liệu có thể chế tạo ra các máy tính thông minh được không? tức là sẽ có hay không các máy tính biết tư duy như con người?
Công trình của A Turing (1912-1954), nhà toán học người Anh, cũng nằm trong hướng nghiên cứu vấn đề hình thức hoá toán học (theo tinh thần bài toán mà Hilbert đặt ra năm 1928 tại Hội nghị Toán học thế giới) Turing chứng minh rằng, mọi quá trình tính toán tổng quát có thể thực hiện được bởi một
“máy” Máy này gồm có một cuộn băng độ dài vô hạn với các ô vuông, một thiết bị có hữu hạn trạng thái dùng để đọc các kí hiệu trên cuộn băng Dựa trên
kí hiệu ở cuộn băng và trạng thái của thiết bị tại thời điểm hiện tại, máy sẽ thay
kí hiệu đang có trên cuộn băng bởi một kí hiệu khác, đồng thời đổi trạng thái của thiết bị Thiết bị đọc kí hiệu có thể dịch chuyển về bên phải và bên trái.
Trong phạm vi của báo cáo môn học này chúng em xin phép được trình bày một phần rất nhỏ trong việc cấu tạo ra các máy Turing và tổ hợp chúng lại
để thực hiện những mục đích cụ thể Chức năng chính của các máy Turing trong phần này thể hiện trên việc đoán nhận và chấp nhận một ngôn ngữ Trên cơ sở những định nghĩa về ngôn ngữ đệ quy và liệt kê đệ quy để tìm hiểu các tính chất của ngôn ngữ hình thức và tính bất biến của các tính chất đó Đề tài gồm có những nội dung chính:
Trang 3Chương 1 Những bài toán không thể giải được
Chương 2: Dịch chương 9.1( giáo trình Introduction to Automata Theory, Languages, and Computation)
Chương 3 Bài tập chương 9.1( giáo trình Introduction to Automata Theory, Languages, and Computation)
Qua những phần trên cung cấp cho chúng ta những thông tin về phương diện nhận dạng ngôn ngữ của các máy Turing, khả năng thiết kế các máy Turing chấp nhận ngôn ngữ tổ hợp Tuy việc diễn đạt nội dung chính xác, rõ ràng nhưng vẫn còn hạn chế là phạm vi còn nhỏ hẹp Chúng em mong muốn có những điều kiện tốt hơn để nâng cao chất lượng đề tài.
Trên những cơ sở lý thuyết được học và các tài liệu tham khảo, với sự hợp tác làm việc chuyên cần của các thành viên trong nhóm, chúng em xin được báo cáo công việc đã thực hiện được Kính mong được sự góp ý chân thành của quý thầy và các anh chị học viên trong lớp Chúng em xin chân thành cảm ơn sự
chỉ bảo tận tình của PGS.TS Phan Huy Khánh , và các bạn đã giúp chúng em
hoàn thành báo cáo này.
Hồ Trúc Lâm Đoàn Xuân Lộc
Trang 4Chương I,Chương II và Chương III được thực hiện trên nền tảng lý
thuyết của cuốn sách " Introduction to Automata Theory, Languages, and Computation " của John C Martin và tham khảo theo lý thuyết của tài liệu
"Lý thuyết tính toán" của PGS TS Phan Huy Khánh.
BẢNG PHÂN CÔNG THỰC HIỆN CÔNG VIỆC TIỂU LUẬN
1 Nguyễn Văn Định Dịch chương 2, phân
việc và tổng hợp
4 Nguyễn Văn Định, Hồ Trúc
Lâm, Đoàn Xuân Lộc
Dịch và giải bài tập
Trang 5MỤC LỤC
LỜI MỞ ĐẦU 2
MỤC LỤC 5
CHƯƠNG I 6
NHỮNG BÀI TOÁN KHÔNG THỂ GIẢI ĐƯỢC 6
I CÁC VẤN ĐỀ KHÔNG THỂ GIẢI ĐƯỢC TRÊN MÁY TÍNH 6
II CÁC CHƯƠNG TRÌNH IN “Hello, World” 7
III KẾT LUẬN 8
CHƯƠNG II –DỊCH CHƯƠNG 9.1 9
NHỮNG BÀI TOÁN KHÔNG THỂ GIẢI ĐƯỢC LIÊN QUAN ĐẾN MÁY TURING 9
I MỘT NGÔN NGỮ KHÔNG THỂ LÀ LIỆT KÊ ĐỆ QUI 9
1 Liệt kê các chuỗi nhị phân 10
2 Tìm các mã cho máy Turing 10
3 Ngôn ngữ chéo hóa 12
4 Chứng minh rằng Ld không là liệt kê đệ qui 13
CHƯƠNG II –BÀI TẬP 15
Tài liệu tham khảo 18
Trang 6CHƯƠNG I
NHỮNG BÀI TOÁN KHÔNG THỂ GIẢI ĐƯỢC
Khi đề cập đến máy Turing, ta thường quan tâm đến các lớp ngôn ngữ đơn giản và những cách đơn giản được sử dụng trong giải quyết các vấn đề như: phân tích giao thức, tìm kiếm văn bản hoặc các chương trình phân tích văn
phạm… Trong phần trình bày này, nhóm em sẽ trình bày vấn đề “những ngôn
ngữ nào sẽ không thể giải bằng thiết bị tính toán”, vấn đề này tương đương với
câu hỏi “máy tính có thể làm được những gì?”, việc nhận dạng văn bản trong 1 ngôn ngữ là cách diễn đạt vấn đề này một cách tốt nhất
Ta bắt đầu với một vấn đề sau, bằng cách sử dụng ngôn ngữ lập trình C,
để chỉ ra rằng có một số vấn đề máy tính không thể giải được – đó là những vấn
đề được gọi là “không thể quyết định” hoặc "không thể giải được"
I CÁC VẤN ĐỀ KHÔNG THỂ GIẢI ĐƯỢC TRÊN MÁY TÍNH
Mục đích của phần này là cung cấp 1 ví dụ được viết dựa trên ngôn ngữ C
để chứng minh có những vấn đề mà máy tính không thể giải quyết Đó là đoạn chương trình C in ra dòng “Hello, World”, ở đây ta không quan tâm đến thời gian giải quyết vấn đề mà ta quan tâm đến chương trình đã làm những gì
Trang 7II CÁC CHƯƠNG TRÌNH IN “Hello, World”
Ta xét 2 đoạn chương trình sau:
và
Ta có nhận xét:
- Đoạn chương trình 1 sẽ in ra dòng “Hello, World” và dừng
- Đoạn chương trình 2 cũng là một chương trình in ra “Hello, World” nhưng nó cho phép nhập vào số n, sau đó nó sẽ tìm 3 số nguyên dương thỏa mãn điều kiện:
Trang 8Nếu tìm thấy đoạn chương trình sẽ in ra “Hello, World”, nếu không thì nó
sẽ tiếp tục tìm và không bao giờ in ra “Hello, World” (trong đó hàm exp(int i,n)
là hàm tính in) Qua thực nghiệm, nếu n=2 thì sẽ tìm được các tổ hợp x, y, z thỏa mãn điều kiện
Ví dụ:
- Khi total = 12 thì ta sẽ có x = 3, y = 4 và z = 5
- Do vậy, khi n = 2 đoạn chương trình sẽ in ra “Hello, World”
- Tuy nhiên với n > 2 thì đoạn chương trình sẽ không tìm thấy 3 số nguyên dương thỏa điều kiện trên nên sẽ không bao giờ in ra “Hello, World”
III KẾT LUẬN
Có một số vấn đề mà toán học không thể giải được Dạng bài toán này sẽ được đưa về dạng: “ Có chương trình P, với nhập liệu I cho chương trình P Với giá trị I, chương trình P có giải bài toán được không?” Vậy tại sao vấn đề
“không thể giải được" tồn tại? Chính là do trong thực tế có rất nhiều vấn đề vô hạn trong khi đó con người lại biết rất ít chương trình giải quyết các vấn đề vô hạn
Trang 9CHƯƠNG II –DỊCH CHƯƠNG 9.1
NHỮNG BÀI TOÁN KHÔNG THỂ GIẢI ĐƯỢC LIÊN QUAN ĐẾN MÁY TURING
Như ta đã biết, các bài toán không thể giải được là do các giới hạn trong thực tế Tuy nhiên những giới hạn này, như không gian địa chỉ của bộ nhớ, không phải là các giới hạn không thể vượt qua do khoa học công nghệ tiến bộ rất nhanh (Đối với máy Turing, các giới hạn này không còn tồn tại)
Cho đến nay, câu hỏi: “Liệu máy Turing có chấp nhận hết các dữ liệu nhập?” vẫn còn tồn tại Để trả lời cho câu hỏi này, ta chia các vấn đề máy Turing có thể giải được thành 2 lớp:
- Lớp các vấn đề có giải thuật (máy Turing sẽ dừng bất kể có chấp nhận hay không chấp nhận dữ liệu đó)
- Lớp các vấn đề có thể giải được bằng máy Turing, nhưng máy Turing không dừng
Lớp thứ 2 được chấp nhận (bởi vì ta không quan tâm đến thời gian máy Turing chạy) là 1 nghi ngờ vì ta không thể biết liệu dữ liệu có được chấp nhận hay không? Nên vấn đề ở đây là: với các bài toán không thể giải được liệu máy Turing có chấp nhận không?
I MỘT NGÔN NGỮ KHÔNG THỂ LÀ LIỆT KÊ ĐỆ QUI
Như ta đã biết, một ngôn ngữ L được xem là có thể liệt kê đệ qui (RE) nếu L = L(M), M là máy Turing Mục tiêu lâu dài là chứng minh ngôn ngữ chứa các cặp (M,w) là không thể giải được, với:
- M là máy Turing (mã nhị phân) với chuỗi nhập là các ký tự {0 và 1}
- w là chuỗi gồm các số 0 và 1
- M chấp nhận w
Trang 10Như vậy, nếu với dữ liệu nhập là chuỗi số nhị phân mà không thể giải được thì chắc chắn các vấn đề tổng quát hơn sẽ không thể giải được
* Bước đầu tiên là: chuyển câu hỏi này thành câu hỏi quan hệ trong một
ngôn ngữ cụ thể Do vậy, ta phải đưa ra một bộ mã gồm các số 0 và 1 cho máy Turing mà không quan tâm đến số trạng thái Một khi ta có bộ mã này, thì các chuỗi nhị phân được xem như các máy Turing Nếu chuỗi không thể biểu diễn được, thì xem như máy Turing không có di chuyển
language), bao gồm các chuỗi w mà máy Turing không chấp nhận Ở đây, ngôn ngữ Ld đóng vai trò tương đương như chương trình hello, world trong ngôn ngữ
C đã đề cập ở trên, chính xác hơn là ngôn ngữ Ld không được chấp nhận bởi máy Turing
1 Liệt kê các chuỗi nhị phân
Ta sẽ gán mỗi chuỗi nhị phân tương ứng với một số nguyên Nếu w là một chuỗi nhị phân, thì wi cũng được xem như một số nhị phân i, và ta gọi chuỗi w là chuỗi thứ i Nghĩa là, chuỗi rỗng là chuỗi đầu tiên, 0 là chuỗi thứ 2, 1
là chuỗi thứ 3, 00 là chuỗi thứ 4, 01 là chuỗi thứ 5… Điều này tương ứng với các chuỗi được xếp thứ tự theo chiều dài, những chuỗi có chiều dài bằng nhau sẽ
có thứ tự liền kề nhau Ta ký hiệu chuỗi thứ i là wi
2 Tìm các mã cho máy Turing
Mục tiêu của phần này là đưa ra mã nhị phân cho máy Turing sao cho mỗi máy Turing với dữ liệu nhập là các chuỗi gồm các số {0, 1} được xem như là một chuỗi nhị phân Do ta đã biết cách liệt kê các chuỗi nhị phân, nên ta sẽ định danh máy Turing theo các số như: máy Turing thứ i là Mi Để biểu diễn máy Turing M=(Q,{0,1},Γ,δ,q1,B,F)) như một chuỗi nhị phân, đầu tiên ta gán các số nguyên cho các trạng thái, cho các ký hiệu băng và các hướng trái (L) và phải (R)
Trang 11- Giả sử có các trạng thái là q1, q2,…, qr với r bất kỳ Trạng thái bắt đầu luôn luôn là q1 và q2, và chúng chỉ là trạng thái nhận (không phải là trạng thái chuyển tiếp) Chú ý rằng, do ta giả sử máy Turing dừng bất cứ khi nào nó gặp trạng thái nhận nên không cần nhiều trạng thái nhận
- Giả sử các băng là X1, X2, …, Xs với s bất kỳ X1 là băng 0, X2 là băng 1
và X3 là băng B (băng rỗng), các băng khác được gán cho các Xi còn lại
- Hướng L là D1, Hướng R là D2
Do mỗi máy Turing M có các số nguyên được gán cho các trạng thái và các băng theo các trật tự khác nhau nên sẽ có nhiều hơn một bộ mã cho máy Turing Tuy nhiên, điều này không quan trọng bởi vì ta chỉ cần đưa ra không có
mã nào có thể biểu diễn máy Turing M để:
L(M)=Ld Một khi đã thiết lập một số nguyên biểu diễn cho một trạng thái, một băng
và một hướng, ta có thể mã hoá thành hàm chuyển đổi δ Giả sử rằng một luật chuyển đổi là δ(qi,Xj)=(qk,Xl,Dm) với i, j, k, l và m là các số nguyên Ta sẽ mã hóa luật này bằng chuỗi 0i10j10k10l10m, chú ý rằng do tối thiểu phải có một bộ các i, j, k, l và m nên sẽ không xảy ra tình trạng các số 1 liên tiếp nhau trong bộ
mã khi thực hiện một chuyển đổi đơn
Một mã cho máy Turing tổng quát M sẽ chứa tất cả các mã cho các sự chuyển đổi và chúng được ngăn cách nhau bởi cặp số 11:
C111C211… Cn-111Cn
Với mỗi Ci là mã cho một chuyển đổi của máy Turing M.
Ví dụ 9.1: TM trong câu hỏi là
M = ({ql, q2, q3}, {O, 1} {O, 1, B}, 6, khí, B, {q2})
nơi 6 bao gồm các quy tắc:
δ (qi, 1) = (q3, O, R)
Trang 12δ (q3, 1) = (q2, 0, R)
δ (q3, B) = (q3, 1, L)
Các mã tương ứng, cho mỗi người trong số các quy tắc này, là:
0100100010100
0001010100100
00010010010100
0001000100010010
Ví dụ, quy tắc đầu tiên có thể được viết là δ (qi, X2) = (q3, X, D2), kể từ khi
1 = X2, 0 = X1, và R D2 = Do đó, mã của nó là 01102103101102,
chỉ ra ở trên Một mã cho M là:
Lưu ý rằng có rất nhiều mã khác có thể cho M Đặc biệt, các mã
cho quá trình chuyển đổi có thể được liệt kê trong bất kỳ của 4! đơn đặt hàng, cho chúng tôi 24 mã cho M
3 Ngôn ngữ chéo hóa
Trong mục 1 ta đã mã hóa các máy Turing theo cách: máy Turing M nào
có mã hóa là wi thì sẽ tương ứng với chuỗi thứ i Có nhiều số nguyên không tương ứng với máy Turing nào, ví dụ như: 11001 không bắt đầu bằng số 0 hoặc
001011101 là không hợp lệ bởi vì nó có 3 số 1 liên tiếp nhau… Nếu wi không là
mã hợp lệ cho máy Turing thì xem như máy Turing Mi có một trạng thái và không có chuyển đổi Điều này có nghĩa là máy sẽ dừng với bất kể nhập liệu nào Do vậy L(Mi) = φ nếu wi không là mã hợp lệ cho máy Turing
L(Mi) (các wi không là mã hợp lệ cho máy Turing)
Lý do Ld được gọi là ngôn ngữ chéo là do hình sau:
Trang 13Hình 1 Bảng biểu diễn các chuỗi được chấp nhận bởi máy Turing
Hình 1 cho biết máy Turing Mi có chấp nhận nhập liệu wj hay không? 1 là chấp nhận, 0 là không chấp nhận Các giá trị ở đường chéo cho chúng ta biết Turing Mi có chấp nhận nhập liệu wi hay không? Để xây dựng Ld chúng ta sẽ lấy phần bù của đường chéo này, lúc này Ld chỉ chứa w1 mà không chứa các w2,…
Theo như quan sát của hình trên, ta sẽ chứng minh rằng: Không máy Turing nào chấp nhận ngôn ngữ Ld
tập hợp các số 0 và 1 do vậy M sẽ là một danh sách các máy Turing Như vậy, sẽ
có ít nhất một mã mà M=Mi (với i bất kỳ) Ta sẽ kiểm tra liệu wi có nằm trong
Ld hay không:
- Nếu wi thuộc Ld thì Mi sẽ chấp nhận wi Nhưng theo định nghĩa của Ld,
wi không thuộc Ld bởi vì Ld chỉ chứa các wj không được chấp nhận bởi máy Turing
- Tương tự nếu wi không thuộc Ld thì Mi không chấp nhận wi Do định nghĩa của Ld thì wi thuộc Ld
Do wi không thể vừa thuộc Ld và vừa là không thuộc Ld nên ta kết luận rằng: Điều này mâu thuẫn với giả thiết tồn tại máy M Vì vậy, Ld không là ngôn
Trang 14* Định lý II.1: Ld không là một ngôn ngữ liệt kê đệ qui Có nghĩa là không
có máy Turing nào chấp nhận ngôn ngữ Ld.
Trang 15CHƯƠNG II –BÀI TẬP
Bài tập 9.1.1: Sâu chuỗi gì đây:
* a) w37?
b) w00?
Bài tập 9.1.2: Viết một mã số có thể cho máy Turing Hình 8.9.
Bài tập 9.1.3: Đây là hai định nghĩa của ngôn ngữ tương tự như các định nghĩa
của Ld, từ ngôn ngữ khác nhau Đối với mỗi người, cho thấy
ngôn ngữ không được chấp nhận bởi một máy Turing, bằng cách sử dụng một
loại diagonalization đối số Lưu ý rằng bạn không thể phát triển một đối số dựa trên đường chéo chính nó, nhưng phải tìm một chuỗi vô hạn các điểm trong ma trận đề nghị Hình 9.1
* A) tập hợp của tất cả các w w không được chấp nhận bởi M21
b) Các thiết lập của tất cả các w rằng W21 không được chấp nhận bởi M,
Bài tập 9.1.4: Chúng tôi đã xem xét chỉ Turing máy có đầu vào
bảng chữ cái {O, 1} Giả sử chúng ta muốn chỉ định một số nguyên cho tất cả các máy Turing, bất kể cái trong bảng chữ cái đầu vào của họ Đó không phải là hoàn toàn có thể bởi vì,trong khi tên của các bang hoặc biểu tượng băng
noninput là tùy ý, phần đầu vào biểu tượng vật chất Ví dụ, các ngôn ngữ {On 1n | n>=1) và {an bn | n >=1}, trong khi tương tự như trong một nghĩa nào đó, không cùng một ngôn ngữ, và họ được chấp nhận bởi khác nhau TMA Tuy nhiên, giả
sử rằng chúng ta có một tập hợp vô hạn các biểu tượng, {ai, a2, .} mà từ đó tất
cả các bảng chữ cái TM đầu vào được lựa chọn Hiển thị làm thế nào chúng ta
có thể chỉ định một số nguyên cho tất cả các TM s có một tập hợp hữu hạn của
Trang 16* Bài 9.3.4: Như chúng ta biết theo định lý của Rice thì các bài toán sau là
không thể giải được Tuy nhiên, chúng là đệ qui liệt kê (RE) hay không đệ qui liệt kê (non RE)?
a L(M) chứa ít nhất 2 chuỗi
b L(M) là vô hạn
c L(M) là ngôn ngữ phi ngữ cảnh
d L(M) = (L(M))R
* Bài giải:
a L(M) chứa ít nhất 2 chuỗi L(M) không rỗng, hay là Lne, mà theo định
lý II.7 thì ngôn ngữ Lne là liệt kê đệ quy L(M) liệt kê đệ quy
b L(M) là vô hạn:
Theo định nghĩa, L được gọi là liệt kê đệ quy nếu có một máy Turing T chấp nhận L Nói cách khác, với mọi w∈L thì T dừng và w sẽ được chấp nhận sau một số dịch chuyển hữu hạn Trong khi đó L(M) là vô hạn T sẽ không dừng và cũng sẽ không cho biết có chấp nhận L(M) hay không L(M) không phải là ngôn ngữ liệt kê đệ quy
c L(M) là ngôn ngữ phi ngữ cảnh:
Theo định nghĩa của ngôn ngữ phi ngữ cảnh: A α, với A∈N (tập hữu hạn ký hiệu không kết thúc, đây là một tập chưa rõ) và α∈V*, V* = N∪Σ (tập hữu hạn ký hiệu kết thúc, đây là một tập đã rõ) Như vậy, ngôn ngữ phi ngữ cảnh sẽ dừng sau một thời gian nào đó có máy Turing chấp nhận nó ngôn ngữ phi ngữ cảnh là ngôn ngữ liệt kê đệ quy
d L(M) = (L(M))R: