Tải bản đầy đủ (.doc) (15 trang)

tiểu luận lý thuyết tính toán undecidable problems about turing machine

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (344.11 KB, 15 trang )

BỘ GIÁO DỤC & ĐÀO TẠO
TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG

Đề tài:
UNDECIDABLE PROBLEMS ABOUT TURING
MACHINE
GVHD: PGS.TS PHAN HUY KHÁNH
NHÓM HỌC VIÊN: NGUYỄN TUẤN TRUNG
LÊ QUỐC DŨNG
NGUYỄN VĂN PHÚ
MÔN: LÝ THUYẾT TÍNH TOÁN
LỚP: CAO HỌC KHÓA 24
CHUYÊN NGÀNH: KHOA HỌC MÁY TÍNH

Đà Nẵng, tháng 05 năm 2012
MỤC LỤC
***
BỘ GIÁO DỤC & ĐÀO TẠO 1
TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG 1
MỤC LỤC 1
U 6
M 7
M’ 7
M 10
ML 10
M’ 10
LỜI MỞ ĐẦU
Trong thời kỳ phát triển công nghệ cao, thời đại mà thông tin, tri thức trở thành
lực lượng sản xuất trực tiếp, thời đại của xã hội thông tin và nền kinh tế tri thức được
hình thành trên cơ sở phát triển và ứng dụng rộng rãi công nghệ thông tin và truyền
thông. Cuộc cách mạng thông tin cùng với quá trình toàn cầu hóa đang ảnh hưởng sâu


sắc đến mọi lĩnh vực trong đời sống kinh tế - xã hội, đưa con người chuyển nhanh từ
xã hội công nghiệp sang xã hội thông tin, từ kinh tế công nghiệp sang kinh tế tri thức,
ở đó năng lực cạnh tranh phụ thuộc chủ yếu vào năng lực sáng tạo, thu thập, lưu trữ,
xử lý và trao đổi thông tin. Máy tính đóng vai trò quan trọng trong cuộc cách mạng
này.
Lý thuyết tính toán là nền tảng lý thuyết của thông tin và tính toán để tạo ra sự
thực thi và các ứng dụng trên hệ thống máy tính. Nó nghiên cứu các khả năng tính
toán khi áp dụng trên các loại máy tính hiện hành. Nguyên lý đã được phát triển bởi
Alan Turing và những nhà khoa học khác. Nó cung cấp những kiến thức cơ bản về
máy tính như: Các máy truy cấp ngẫu nhiên, các ôtômát hữu hạn trạng thái, các ngôn
ngữ hình thức và văn phạm được sử dụng, lý thuyết về độ phúc tạp tính toán, lý thuyết
ước tính, mô hình máy Turing, các hàm đệ quy, …
Trong khuôn khổ đề tài này chúng tôi chỉ trình bày những hiểu biết về một phần
của lĩnh vực về máy Turing. Đề tài gồm các phần chính như sau:
Phần I: Lý thuyết – Dịch nội dung “ Chapter 9.3: Undecidable Problems About
Turing Machine”.
Phần II: Bài tập.
Chúng tôi xin chân thành cảm ơn PGS.TS. Phan Huy Khánh đã tận tình giảng
dạy và hướng dẫn để chúng tôi hoàn thành tiểu luận này.
Mặc dù đã nghiên cứu kỹ phần lý thuyết để có được cách giải quyết bài tập đúng
đắn nhưng không thể tránh khỏi những thiếu sót, kính mong nhận được sự góp ý của
Thầy và các anh chị trong lớp để đề tài được hoàn thiện tốt hơn.
Nhóm thực hiện báo cáo:
Nguyễn Tuấn Trung (nhóm trưởng)
Lê Quốc Dũng
Nguyễn Văn Phú
Phần I:
NỘI DUNG LÝ THUYẾT
(Chapter 9.3: Undecidable Problems About Turing Machine)
9.3. Các bài toán không giải được của máy Turing:

Chúng ta sẽ sử dụng ngôn ngữ L
u
và L
d
liên quan đến ngôn ngữ liệt kê đệ quy
và các ngôn ngữ đệ qui để minh họa cho các khả năng không giải được và ngôn ngữ
không liệt kê đệ qui. Kỹ thuật rút gọn sẽ được sử dụng để chứng minh. Phần này sẽ
liên quan đến việc chứng minh “định lý Rice”, định lý này cho rằng bất kỳ thuộc tính
dị thường nào của máy Turing phụ thuộc vào ngôn ngữ mà máy Turing chấp nhận thì
ngôn ngữ đó là ngôn ngữ không giải được.
9.3.1. Sự rút gọn:
Thông thường, nếu ta có thuật toán để chuyển trường hợp của bài toán P
1
sang
trường hợp của bài toán P
2
mà nó cho cùng đáp số thì chúng ta nói P
1
rút gọn xuống
P
2
. Chúng ta cũng có thể sử dụng cách chứng minh này để minh họa rằng P
2
dễ hơn
P
1
. Vì vậy, nếu P
1
là không đệ qui thì P
2

không thể đệ qui. Nếu P
1
không là liệt kê đệ
qui thì P
2
cũng không thể là liệt kê đệ qui.
Hình 9.7: Các rút gọn chuyển trạng thái khẳng định sang khẳng định
và trạng thái phủ định qua phủ định.
Như trong hình 9.7, một sự rút gọn phải chuyển đổi bất kỳ một trạng thái nào
của P
1
có trả lời “yes” sang một trạng thái của P
2
cũng phải có trả lời “yes”, và mỗi
trạng thái nào của P
1
có trả lời “no” sang một trạng thái của P
2
cũng phải trả lời “no”.
Chú ý rằng không cần thiết mỗi trạng thái của P
2
phải là kết quả của một trong các
trạng thái của P
1
, và trong thực tế thì thường chỉ một phần nhỏ trạng thái của P
2
là kết
quả của sự rút gọn.
Thông thường sự rút gọn P
1

thành P
2
là một máy Turing lấy một trạng thái của
P1 được ghi trên băng của nó và sẽ dừng tại một trạng thái của P
2
trên băng từ. Trong
thực tế, ta thường mô tả các sự rút gọn như là các chương trình máy tính lấy một trạng
thái của P
1
như nhập liệu và tạo ra trạng thái của P
2
như phần xuất. Việc tương đương
của máy Turing và chương trình máy tính cho phép chúng ta mô tả sự rút gọn bằng
hai phương pháp. Sự quan trọng của việc rút gọn được nhấn mạnh bởi định lý sau:
* Định lý 9.5: Nếu có một sự rút gọn từ P
1
thành P
2
thì:
a. Nếu P
1
không giải được thì P
2
cũng không giải được.
b. Nếu P
1
không là liệt kê đệ qui thì P
2
cũng không là liệt kê đệ qui.
Chứng minh: Giả sử P

1
không giải được. Nếu ta có thể giải P
2
thì chúng ta có
thể kết hợp sự rút gọn P
1
thành P
2
với giải thuật giải bài toán P
2
để xây dựng một giải
thuật giải bài toán P
1
.
yes
no
yes
no
P
1
P
2
Để chi tiết hơn, giả sử rằng ta có thể hiện w của P
1
. Áp dụng thuật toán sau vào
w: chuyển w thành trạng thái x của P
2
, sau đó áp dụng thuật toán giải P
2
cho trạng thái

x. Nếu thuật toán cho câu trả lời “yes” thì x thuộc P
2
.
Do chúng ta rút gọn P
1
thành P
2
nên câu trả lời cho w của P
1
cũng là “yes”,
nghĩa là w thuộc P
1
. Ngược lại, nếu x không thuộc P
2
thì w sẽ không thuộc P
1
. Tóm lai
câu trả lời “x có thuộc P
2
hay không?” cũng sẽ là câu trả lời cho “w có thuộc P1 hay
không?”.
Nhưng điều này lại trái với giả thuyết “P
1
không thể giải được”, kết luận “nếu
P
1
không thể giải được thì P
2
cũng không thể giải được”.
Với phần (b), giả thuyết rằng P

1
là không liệt kê đệ qui và P
2
là liệt kê đệ qui.
Ta có thuật toán rút gọn P
1
thành P
2
, nhưng ta chỉ có một thủ tục để nhận dạng P
2
. Đó
là: có một máy Turing trả lời “yes” nếu nhập liệu của nó thuộc P
2
nhưng nó có thể
không dừng nếu nhập liệu của nó không thuộc P
2
. Như trong phần (a), bắt đầu bằng
thể hiện w trong P
1
, chuyển đổi nó bằng giải thuật rút gọn thành thể hiện x trong P
2

sau đó ứng dụng máy Turing đối với P
2
cho thể hiện x. Nếu x được chấp nhận thì w
cũng sẽ được chấp nhận.
Thủ tục này mô tả một máy Turing (sẽ không dừng) có ngôn ngữ là P
1
. Nếu w
thuộc P

1
thì x thuộc P
2
vì máy Turing này chấp nhận w. Nếu w không thuộc P
1
thì x
không thuộc P
2
. Máy Turing này có thể dừng hoặc không nhưng chắc chắn rằng nó
không chấp nhận w vì chúng ta giả sử rằng không có máy Turing nào có ngôn ngữ P
1
tồn tại. Như vậy, ta đã chỉ ra được điều trái ngược là không có máy Turing cho ngôn
ngữ P
2
tồn tại. Nghĩa là: nếu P
1
không là liệt kê đệ qui thì P
2
cũng là không liệt kê đệ
qui.
9.3.2. Các máy Turing chấp nhận ngôn ngữ rỗng:
Trong ví dụ rút gọn liên quan đến máy Turing, ta sẽ kiểm chứng hai ngôn ngữ
sau L
e
và L
ne
. Mỗi ngôn ngữ chứa các chuỗi là số nhị phân. Nếu w là một chuỗi nhị
phân thì nó sẽ biểu diễn cho một máy Turing bất kỳ M
i
trong danh sách các máy

Turing đã liệt kê ở phần 9.1.2.
Nếu L(M
i
)=φ, nghĩa là M
i
không chấp nhận ngôn ngữ nào thì w sẽ thuộc L
e
. Vì
vậy, L
e
là ngôn ngữ chứa tất cả các mã hóa của các máy Turing có ngôn ngữ là rỗng.
Ngược lại, nếu L(M
i
) không là ngôn ngữ rỗng thì w sẽ thuộc L
ne
. Vì vậy L
ne
là ngôn
ngữ chứa tất cả các mã hóa của các máy Turing chấp nhận ít nhất là một chuỗi nhập
liệu (không rỗng).
Để tiện thì ta xem các chuỗi như là các máy Turing mà nó biểu diễn, do vậy ta
có thể định nghĩa cho hai ngôn ngữ vừa đề cập như sau:
- L
e
= {M | L(M) = φ}
- L
ne
= {M | L(M) ≠ φ}
Chú ý rằng L
e

và L
ne
là hai ngôn ngữ chứa các số nhị phân {01} và một ngôn
ngữ sẽ là phần bù của ngôn ngữ kia.
* Định lý 9.8: L
ne
là liệt kê đệ qui.
Chứng minh: Ta phải chỉ ra có một máy Turing chấp nhận L
ne
. Dễ nhất là chỉ
ra một máy Turing M không xác định,vì theo định lý 8.11 thì M có thể chuyển thành
máy Turing xác định, như hình 9.8.
Hình 9.8 : Xây dựng một máy Turing không xác định chấp nhận L
ne
Họat động của máy M như sau:
1. M lấy nhập liệu như máy Turing M
i
.
2. Sử dụng khả năng không xác định của nó, M phỏng đoán nhập liệu w mà M
i
có thể chấp nhận nó.
3. M kiểm tra liệu M
i
có chấp nhận w hay không? Đối với phần này M có thể
mô phỏng máy phổ dụng U chấp nhận ngôn ngữ L
u
.
4. Nếu M
i
chấp nhận w thì M chấp nhận nhập liệu của nó (nhập liệu của M

i
).
Bằng cách này, nếu M
i
chấp nhận một chuỗi thì M sẽ phỏng đoán chuỗi đó và
chấp nhận M
i
. Tuy nhiên, nếu L(M
i
) = φ thì không có phỏng đóan nào cho w dẫn đến
việc chấp nhận bởi M
i
, vì vậy M không chấp nhận M
i
. Do vậy, L(M)=L
ne
.
Bước kế tiếp chúng ta chứng minh L
ne
không đệ qui. Để làm việc này, ta rút
gọn L
u
thành L
ne
. Nghĩa là: Ta sẽ mô tả một giải thuật chuyển đổi một nhập liệu (M,w)
thành một dữ liệu xuất M’, một đoạn mã cho một máy Turing khác, sao cho w thuộc
L(M) nếu và chỉ nếu L(M’) không rỗng. Nghĩa là: M chấp nhận w nếu và chỉ nếu M’
chấp nhận ít nhất một chuỗi. Thủ thuật ở đây là có một máy Turing M’ bỏ qua nhập
liệu của nó thay vì mô phỏng máy Turing M với nhập liệu w. Nếu m chấp nhận thì
M’ chấp nhận nhập liệu của nó, do vậy việc chấp nhận w của M tương đương với

U
Accept Accept
Guesed
w
M
i
M for L
ne
L(M’) không rỗng. Nếu L
ne
là đệ qui thì ta có thể có giải thuật cho biết liệu M có chấp
nhận w hay không? Bằng cách xây dựng M’ và kiểm tra L(M’) = φ hay không?
* Định lý 9.9: L
ne
là không đệ qui.
Chứng minh: Chúng ta sẽ theo như cách chứng minh ở trên. Ta phải thiết kế
một giải thuật để chuyển đổi một nhập liệu theo cặp mã hóa nhị phân (M,w) thành
một máy Turing M’ sao cho L(M’) ≠ φ nếu và chỉ nếu M chấp nhận nhập liệu w. Việc
xây dựng M’ được minh họa trong hình 9.9.
Hình 9.9: Phác họa máy Turing M’ được xây dựng từ (M,w) trong định lý 9.9;
M’ chấp nhận nhập liệu bất kỳ nếu và chỉ nếu M chấp nhận w.
Nếu M không chấp nhận w thì M’ không chấp nhận nhập liệu của nó. Nghĩa là
L(M’) = φ. Tuy nhiên nếu M chấp nhận w thì M’ chấp nhận mọi nhập liệu và vì vậy
L(M’) ≠ φ.
M’ được thiết kế để thực hiện các công việc sau:
1. M’ không quan tâm đến nhập liệu của chính nó. Hơn nữa, nó thay thế nhập
liệu của nó bằng chuỗi biểu diễn cho máy Turing M với nhập liệu w. Do M được thiết
kế cho một cặp cụ thể (M,w) có chiều dài n bất kỳ nên ta có thể xây dựng M’ có một
chuỗi các trạng thái q
0

, q
1
, …, q
n
với q
0
là trạng thái đầu tiên.
(a) Tại trạng thái q
i
với i=0,1,…, n-1; M’ sẽ viết (i+1) bit đầu tiên của chuỗi
(M,w), chuyển sang trạng thái q
i+1
và dịch chuyển sang phải.
(b) Tại trạng thái qn, M’ dịch chuyển sang phải, thay thế bất kỳ dữ liệu không
rỗng nào bằng khoảng trắng (có thể là sau x nếu nhập liệu đó có chiều dài lớn
hơn n).
2. Khi M’ đạt tới khoảng trống trong trạng thái q
n
, nó sẽ dùng bộ trạng thái
tương tự để định vị lại đầu đọc về bên trái cuối cùng của băng.
3. Bây giờ ta sử dụng thêm trạng thái để M’ mô phỏng máy Turing phổ dụng U
trên băng từ hiện tại.
M
Accept Acceptw
x
M’
4. Nếu U chấp nhận thì M’ chấp nhận. Nếu U không chấp nhận thì M’ cũng
không chấp nhận.
Việc mô tả M’ như trên sẽ hiệu quả để chỉ ra rằng ta có thể thiết kế một máy
Turing mà nó có thể chuyển đổi mã cho M và chuỗi nhập liệu w thành mã cho M'.

Nghĩa là có 1 thuật toán để thực hiện việc rút gọn L
u
thành L
ne
. Ta thấy rằng nếu M
chấp nhận w thì M’ chấp nhận bất kể nhập liệu x nào trên băng từ. Thực tế x được lờ
đi là không thích hợp, việc định nghĩa sự chấp nhận bởi máy Turing cho biết rằng bất
kể những gì được đặt trên băng từ là những gì máy Turing chấp nhận. Do vậy, nếu M
chấp nhận w thì mã cho M’ sẽ thuộc L
ne
.
Ngược lại, nếu M không chấp nhận w thì M’ sẽ không bao giờ chấp nhận
những nhập liệu cho nó. Vì thế, trong trường hợp này mã cho M’ không thuộc L
ne
. Ta
đã thành công trong việc rút gọn L
u
thành L
ne
bằng thuật toán xây dựng M’ từ M và w.
Ta kết luận rằng do L
u
không đệ qui nên L
ne
cũng không đệ qui. Việc tồn tại sự rút gọn
này rất có ích để kết luận điều cần chứng minh. Tuy nhiên, để minh họa tác động của
việc rút gọn ta sẽ quay lại vấn đề này thêm một lần nữa. Nếu L
ne
là đệ qui thì ta có thể
phát triển một thuật toán cho L

u
như sau:
1. Chuyển (M,w) thành máy Turing M’ như trên.
2. Dùng thuật toán giả thuyết cho L
ne
để biết liệu L(M’) = φ hay không? Nếu
đúng thì nói rằng M không chấp nhận w, nếu L(M’) ≠ φ thì nói M chấp nhận w.
Do định lý 9.6 nói rằng không có thuật toán nào như thế cho L
u
tồn tại nên điều
này trái ngược với giả thuyết rằng L
ne
là đệ qui.
Kết luận: L
ne
không đệ qui.
Bây giờ chúng ta đã biết trạng thái của L
e
. Nếu L
e
liệt kê đệ qui thì theo định lý
9.4 cả L
e
và L
ne
sẽ đệ qui. Do L
ne
không đệ qui như định lý 9.9 nên ta kết luận rằng:
* Định lý 9.10: L
e

không liệt kê đệ qui.
9.3.3. Định lý Rice và các thuộc tính của ngôn ngữ liệt kê đệ qui:
Trong thực tế các ngôn ngữ L
e
và L
ne
không thể giải được là một trường hợp
đặc biệt của một định lý có tính tổng quát: Tất cả các thuộc tính không tầm thường
của ngôn ngữ không liệt kê đệ qui đều không thể giải được. Một ví dụ về thuộc tính
của các ngôn ngữ liệt kê đệ qui là “ngôn ngữ có ngữ cảnh tự do”. Nó không thể giải
được bất kể là máy Turing cho trước có chấp nhận ngôn ngữ có ngữ cảnh tự do hay
không? Đó là trường hợp đặc biệt của một nguyên lý: Tất cả các thuộc tính không tầm
thường của các ngôn ngữ liệt kê đệ qui đều không thể giải được.
Một thuộc tính của các ngôn ngữ liệt kê đệ qui hoàn toàn là một tập các ngôn
ngữ liệt kê đệ qui. Do vậy, thuộc tính của ngữ cảnh tự do cũng là một tập các ngôn
ngữ có ngữ cảnh tự do. Thuộc tính của rỗng là một tập {φ} chỉ chứa ngôn ngữ rỗng.
 Chú ý rằng thuộc tính rỗng, φ , khác thuộc tính của ngôn ngữ rỗng, {φ}.
* Tại sao các bài toán và phần bù của nó lại khác nhau:
Bằng trực giác ta nhận thấy rằng các bài toán và phần bù của nó thực sự
giống nhau. Để giải quyết một bài toán này ta có thể dùng thuật toán cho phần bù của
nó và tại bước cuối cùng thì phần bù sẽ là dữ liệu xuất: “yes” thay cho “no” và
ngược lại. Điều này đúng khi bài toán và phần bù của nó là đệ qui.
Tuy nhiên như đã đề cập ở 9.2.2, ta có hai khả năng khác: Đầu tiên, nếu bài
toán và phần bù của nó không phải là liệt kê đệ qui thì cả hai sẽ không thể giải được
bằng tất cả các loại máy Turing, vì vậy ta thấy chúng giống nhau. Tuy nhiên, trong
trường hợp đáng quan tâm đối với L
e
và L
ne
thì một ngôn ngữ là RE còn ngôn ngữ kia

không RE.
Đối với các ngôn ngữ là RE thì ta có thể thiết kế một máy Turing sẽ lấy nhập
liệu w và tìm kiếm lý do tại sao w thuộc ngôn ngữ. Do vậy, đối với L
ne
, cho trước một
máy Turing M nhập liệu và ta sẽ cho máy Turing này tìm các chuỗi mà máy Turing M
chấp nhận, ngay khi tìm thấy một chuỗi ta chấp nhận ngay M. Nếu M là một máy
Turing có ngôn ngữ rỗng thì ta sẽ không bao giờ biết chắc rằng “M không thuộc L
ne

nhưng chúng ta không chấp nhận M và đó là sự phản hồi chính xác từ máy Turing.
Mặt khác, đối với bài toán bù là L
e
không liệt kê đệ qui thì không có cách nào
để chấp nhận tất cả các chuỗi của nó. Giả sử rằng chúng ta được cho trước chuỗi M
và chúng ta có thể không bao giờ tìm thấy một chuỗi được M chấp nhận, tuy nhiên ta
không chắc rằng không có nhập liệu nào mà chúng ta chưa kiểm tra. Do vậy, M có
thể không được chấp nhận mặc dù nó cần được chấp nhận.
Một thuộc tính là tầm thường nếu nó là rỗng hoặc là các ngôn ngữ liệt kê đệ
qui. Ngược lại là các thuộc tính không tầm thường.
Ta không thể nhận dạng một tập các ngôn ngữ như các ngôn ngữ của chính nó.
Lý do là ngôn ngữ tiêu biểu (không hữu hạn) không thể được viết như là các chuỗi có
chiều dài xác định, đó là những chuỗi nhập liệu cho máy Turing. Hơn nữa, chúng ta
phải nhận dạng các máy Turing chấp nhận những ngôn ngữ này, mã cho các máy
Turing là giới hạn cho dù ngôn ngữ mà nó chấp nhận không hữu hạn. Do vậy, nếu ρ là
thuộc tính của các ngôn ngữ liệt kê đệ qui thì ngôn ngữ L
ρ
là một tập các mã cho máy
Turing M
i

sao cho L(M
i
) là một ngôn ngữ trong ρ. Khi ta nói đến khả năng giải được
của thuộc tính ρ thì ta cũng nói L
ρ
có thể giải đựơc.
* Định lý 9.11: (Định lý Rice) Mỗi thuộc tính không tầm thường của các ngôn
ngữ liệt kê đệ qui là không thể giải được.
Chứng minh: Cho ρ là thuộc tính không tầm thường của các ngôn ngữ liệt kê
đệ qui. Giả sử bắt đầu từ φ, ngôn ngữ rỗng, không thuộc ρ, ta sẽ trả về trường hợp
ngược lại. Do ρ không tầm thường nên phải có một vài ngôn ngữ L không rỗng thuộc
ρ, cho M
L
là máy Turing chấp nhận L.
Ta sẽ rút gọn L
u
thành L
ρ
, do ta đã chứng minh L
ρ
không thể giải được, vì vậy
L
u
sẽ không thể giải được. Thuật toán để thực hiện việc rút gọn sẽ lấy nhập liệu là cặp
(M,w) và tạo ra một máy Turing M’. Thiết kế của máy Turing M’ được cho như hình
9.10, L(M’)=φ nếu M không chấp nhận w và L(M’)=L nếu M chấp nhận w.
Hình 9.10: Xây dựng máy Turing M’ để chứng minh định của Rice.
M’ là một máy Turing có 2 băng. Một băng được dùng để mô phỏng M trên
nhập liệu w. Chú ý rằng thuật toán để thực hiện việc rút gọn là cho máy M với nhập
liệu là w, ta có thể dùng nhập liệu này trong thiết kế các chuyển tiếp của M. Do vậy

mô phỏng M trên nhập liệu w là “xây dựng nên” máy M’ và máy M’ không phải đọc
các chuyển tiếp của M trên băng của nó. Một băng còn lại của M’ được mô phòng M
L
trên nhập liệu x cho M’ nếu cần thiết. Các chuyển tiếp của M
L
được biết như là thuật
toán rút gọn và có thể “xây dựng nên” các chuyển tiếp của M’. Máy Turing M’ được
xây dựng để làm các việc sau:
1. Mô phỏng M trên nhập liệu w. Chú ý rằng w không nhập liệu cho M’, hơn
nữa M’ viết M và w trên một băng của nó và mô phỏng một máy Turing phổ dụng U
trên cặp này.
M
L
M
Accept Accept
x
w
Accept
start
M’
2. Nếu M không chấp nhận w thì M’ không làm gì. M’ không bao giờ chấp
nhận nhập liệu x của chính nó, nên L(M’)=φ. Do ta giả sử φ không thuộc thuộc tính ρ
nên mã cho M’ không thuộc L
ρ
.
3. Nếu M chấp nhận w thì M’ bắt đầu mô phòng M
L
trên nhập liệu x của nó. Do
vậy M’ sẽ chấp nhận ngôn ngữ L. Do L thuộc ρ nên mã cho M’ thuộc L
ρ

.
Việc xây dựng M’ từ M và w có thể được thực hiện bởi một thuất toán. Do
thuật toán này chuyển (M,w) thành M’ thuộc L
ρ
nếu và chỉ nếu (M,w) thuộc L
u
, thuật
toán này là sự rút gọn L
u
thành L
ρ
và đã chứng minh thuộc tính ρ không thể giải được.
Ta cần xét đến trường hợp φ thuộc ρ. Nếu chúng ta xem xét thuộc tính
ρ
- tập
các ngôn ngữ liệt kê đệ qui không có thuộc tính ρ. Như đã đề cập ở trên
ρ
không thể
giải được. Tuy nhiên, mỗi máy Turing chấp nhận ngôn ngữ liệt kê đệ qui,
ρ
L
,
nên tập
mã cho máy Turing không chấp nhận ngôn ngữ trong ρ cũng tương tự như L
ρ
- tập
mã cho máy Turing chấp nhận một ngôn ngữ trong
ρ
. Giả sử L
ρ

có thể giải được nên
L
ρ
cũng có thể giải được bởi phần bù của ngôn ngữ đệ qui là đệ qui (theo định lý 9.3).
9.3.4. Các bài toán liên quan đến đặc tả máy Turing:
Tất cả các bài toán về máy Turing đều liên quan đến ngôn ngữ được chấp nhận
bởi máy Turing là không thể giải được (theo định lý Rice). Ví dụ các bài toán sau là
không thể giải được:
1. Ngôn ngữ được chấp nhận bởi máy Turing là rỗng.
2. Ngôn ngữ được chấp nhận bởi máy Turing là hữu hạn.
3. Ngôn ngữ được chấp nhận bởi máy Turing là một ngôn ngữ thông dụng.
4. Ngôn ngữ được chấp nhận bởi máy Turing là ngôn ngữ có ngữ cảnh tự do.
Tuy nhiên, định lý Rice không có ngụ ý mọi bài toán liên quan đến máy Turing
là có thể giải được. Ví dụ, các câu hỏi liên quan đến các trạng thái của máy Turing là
có thể giải được, còn các ngôn ngữ mà nó chấp nhận thì không thể giải được.
* Ví dụ 9.12: Nếu máy Turing có 5 trạng thái thì có thể giải được. Thuật toán
để giải bài toán này là xét đến mã cho máy Turing và đếm số các trạng thái xuất hiện
trong bất kỳ các chuyển tiếp nào.
Một ví dụ khác là bài toán tồn tại một nhập liệu sao cho máy Turing chuyển đổi
ít nhất 5 trạng thái cũng có thể giải được. Thuật toán trở nên hiển nhiên khi ta nhớ
rằng nếu một máy Turing có thể chuyển tiếp đến 5 trạng thái thì nó sẽ có 9 ô trên băng
liên quan đến vị trí bắt đầu của đầu đọc. Do vậy, chúng ta có thể mô phỏng máy
Turing có 5 chuyển tiếp trên một số hữu hạn các băng chứa 5 trạng thái hoặc ít hơn ký
hiệu nhập liệu, ô trước đó và sau đó là rỗng. Nếu bất kỳ mô phỏng nào thất bại trong
việc đạt đến trạng thái dừng thì ta kết luận rằng máy Turing tạo ra ít nhất 5 chuyển
tiếp trên một số nhập liệu.
PHẦN II: BÀI TẬP
* Bài 9.3.2: Để thúc đẩy thị trường đang chùng xuống, tập đoàn Big Computer đã
quyết định sản xuất một phiên bản công nghệ cao của máy Turing, gọi là BWTM,
được trang bị chuông và còi. Về cơ bản BWTM giống như máy Turing bình thường,

ngoại trừ mỗi trạng thái của máy được dán nhãn hoặc đặt ở “trạng thái chuông báo”
(hoặc đặt ở “trạng thái còi báo”). Bất cứ khi nào BWTM vào một trạng thái mới, nó sẽ
rung chuông hay thổi còi, tùy thuộc vào loại trạng thái nhập vào. Chứng minh rằng
máy BWTM M không giải quyết được, với đầu vào là w và trạng thái thổi còi.
Bài giải:
Giả sử rằng vấn đề đầu ra có giải pháp với một máy Turing WC, có đầu vào là
ρ(M), ρ(w), luôn tạm dừng, và kết quả đầu ra là “Y” nếu M thổi còi với w và “N” nếu
nó không thổi còi.
Bây giờ viết một máy BWTM M’ và một máy Turing R, với đầu vào là chuỗi x
và chỉ thổi còi nếu máy Turing dừng lại. Sự kết hợp của hai máy Turing có thể được
dùng để xác định nếu R tạm dừng với x là không thể giải quyết được.
Do đó WC không thể tồn tại.
* 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à liệt kê đệ qui (RE) hay không liệt kê đệ qui (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à L
ne
, mà theo định lý
9.9 thì ngôn ngữ L
ne
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
:
Ta có thể phát biểu lại như sau: liệu máy Turing có chấp nhận ngôn ngữ bị đảo
ngược không?
Cho trước một máy Turing M, ta sẽ xây dựng một máy Turing không tiền định
(nondeterministic) M’ – đó là máy Turing chấp nhận ngôn ngữ rỗng (vì ngôn ngữ
rỗng có ngôn ngữ đảo ngược cũng là chính nó) và ngôn ngữ nhị phân {01} (có ngôn
ngữ đảo ngược khác với chính nó). Ta đảm bảo rằng nếu L(M) là rỗng thì L(M’) là
ngôn ngữ đảo ngược của chính nó và nếu L(M) không rỗng thì L(M’) không phải là
ngôn ngữ đảo ngược của chính nó. M’ làm việc như sau:
- Đầu tiên kiểm tra nhập liệu của nó có phải là chuỗi nhị phân không, nếu
không thì lọai bỏ nó.
- Phỏng đoán nhập liệu cho M.
- Mô phỏng máy Turing M với nhập liệu w. Nếu M chấp nhận w thì M’ sẽ chấp
nhận nhập liệu của nó – đó là các chuỗi nhị phân {01}.
Do vậy, sẽ có 2 trường hợp xảy ra:
- Trường hợp 1: Nếu L(M) không rỗng thì M’ sẽ phỏng đoán một số chuỗi mà
máy Turing M chấp nhận và vì vậy nó chấp nhận các chuỗi nhị phân {01}  L(M)
được máy Turing chấp nhận  L(M) là liệt kê đệ qui.
- Trường hợp 2: Nếu L(M) là rỗng thì tất cả các phỏng đoán bởi M’ sẽ thất bại,

nên M’ không bao giờ chấp nhận các chuỗi nhị phân {01}  không có máy Turing
chấp nhận L(M)  L(M) không là liệt kê đệ quy.
* Bài 9.3.6: Chứng minh rằng các câu sau đây có thể giải quyết được:
a). Cài đặt mã cho máy Turing M khi bắt đầu với băng trống kết quả sẽ viết
một vài kí tự không trống trên băng đó.
Gợi ý: Nếu M có m trạng thái, hãy xem xét trạng thái m đầu tiên mà nó tạo ra.
b). Tập hợp các mã của máy Turing M không bao giờ di chuyển sang trái.
c). Tập hợp các cặp (M, w) của máy Turing M bắt đầu với đầu vào w, không
bao giờ quét qua bất kì ô nào nhiều hơn một lần.
Bài giải:
a). Xây dựng một TM M’ tạo mã cho một TM M, đếm số m trạng thái của M
và sau đó mô phỏng M trên một băng trống để di chuyển m. Chấp nhận nếu mô phỏng
M viết kí tự không trống. Bằng cách xây dựng một máy dừng, và nếu M L thì M
M(L’).
Mặt khác, nếu M ∈ L thì giả sử rằng M viết kí tự đầu tiên không trống sau quá
trình chuyển đổi j. Quá trình chuyển đổi này phải bắt đầu từ trạng thái j khác biệt, nếu
không sẽ mâu thuẫn với định nghĩa của j. Do đó j ≤ m và các máy M’ sẽ chấp nhận.
b). Xây dựng một NTM N tạo mã cho một TM M, đếm số t của 5-tuple mà M
sử dụng để xác định δ, và tiến hành như sau: N không xác định được một chuỗi bắt
đầu s, | s | ≤ t và sau đó mô phỏng M trên s cho t bước; N ngừng (và từ chối) nếu M di
chuyển sang trái trong suốt thời gian này, và chấp nhận ở cuối của mô phỏng khác.
Bằng cách xây dựng này thì đây là một cách giải quyết NTM, với tất cả các
nhánh có thể dừng (Giả sử rằng NTM xây dựng một chuỗi “đoán” với chiều dài bị
chặn trên một băng làm việc chưa được viết bởi b bit nào – liên tục được chọn để viết
0 và di chuyển sang phải hoặc 1 và di chuyển sang phải hoặc dừng).
Lưu ý rằng nếu M không di chuyển sang trái với đầu vào là x cho lần đầu tiên
sau r bước, sau đó nó được di chuyển đều đặn sang phải và như vậy, với đầu vào x’
khác mà M di chuyển bên trái cho lần đầu tiên sau r’ bước với r’< t. Điều này là vì khi
r ≥ t quá trình chuyển đổi (không kể những di chuyển sang trái) sẽ được sử dụng hai
lần, và lần thứ hai này M sẽ quét một ô ở bên phải của bit ban đầu, do đó tất cả các bit

bên trái của bit đang quét có thể được loại bỏ và M bắt đầu với đầu vào ngắn hơn đối
với cùng một hành vi tiếp theo. Điều này có nghĩa là nếu M L thì NTM N có thể
đoán được chuỗi của M di chuyển sang trái, tức là N tạm dừng và từ chối. Mặt khác
nếu M ∈ L thì không có chuỗi như vậy tồn tại. Vậy N chắc chắn sẽ chấp nhận.
c). Cho một cặp (M, w). Xây dựng một TM M’ với m là số lượng các trạng thái
của M, và l = | w |. Bây giờ M’ mô phỏng một bước của M với đầu vào w và kiểm tra
hướng các bước của M.
Nếu M dịch chuyển sang bên phải (hoặc bên trái) sau đó mô phỏng M chạy m
+ l bước. Từ chối dừng nếu nó di chuyển sang trái (phải), và chấp nhận dừng tại cuối
của mô phỏng khác.
Bằng cách xây dựng này thì đây là một TM dừng. Hơn nữa, khi chúng ta đang
chờ sự dịch chuyển sang bên trái (bên phải) của mô phỏng M, máy này vẫn liên tục
dịch chuyển sang bên phải (bên trái). Nó có thể tạo hầu hết l bước trước khi gặp một
khoảng trống và sau đó, theo lập luận trong (a), có thể tạo m bước bổ sung trước khi
thay đổi hướng nếu thực sự nó cần.
Bây giờ, nếu (M, w) L, mô phỏng M với w cuối cùng sẽ thay đổi hướng và sẽ
làm như vậy trong vòng l + m bước, M’ sẽ từ chối (M, w). Trong khi nếu (M, w) ∈ L
thì không có mô phỏng nào của M với w (cho dù bao nhiêu bước đi nữa) sẽ liên quan
đến thay đổi hướng và do đó M sẽ chấp nhận.
TÀI LIỆU THAM KHẢO
[1] John C. Martin, Introduction to languages and the theory of coputation, The
McGraw-Hill Companies, Inc, 1997.
[2] PGS.TS Phan Huy Khánh, Giáo trình lý thuyết ngôn ngữ hình thức và Ô tô mat,
Đại học Đà Nẵng, 1998.
[3] PGS.TS Phan Huy Khánh, Lý thuyết tính toán, Đại học Đà Nẵng, 1999.

×