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

CÁC NGÔN NGỮ ĐỆ QUY VÀ ĐỆ QUY LIỆT KÊ (TIỂU LUẬN MÔN LÝ THUYẾT TÍNH TOÁN)

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 (246.5 KB, 19 trang )

Tiểu luận Lý thuyết tính toán GVHD: PGS.TS Phan Huy Khánh
ĐẠI HỌC ĐÀ NẴNG
TRƯỜNG ĐẠI HỌC BÁCH KHOA
KHOA CÔNG NGHỆ THÔNG TIN
Tel. (84-511) 736 949, Fax. (84-511) 842 771
Website: itf.ud.edu.vn, E-mail:

Tiểu luận môn học
LÝ THUYẾT TÍNH TOÁN
Đề tài:
CÁC NGÔN NGỮ ĐỆ QUY VÀ ĐỆ QUY
LIỆT KÊ
NHÓM HỌC VIÊN : - TRƯƠNG TIẾN DƯỠNG
- NGUYỄN ĐÔNG KỲ
- VÕ TRƯƠNG HOÀNG OANH
- NGUYỄN THỊ UYÊN THẢO
LỚP : Cao học khoá 12 (2009-2011)
CBHD : PGS. TS PHAN HUY KHÁNH
ĐÀ NẴNG, 05/2010
Trang - -
1
Tiểu luận Lý thuyết tính toán GVHD: PGS.TS Phan Huy Khánh
MỤC LỤC
10.1 ĐỆ QUY VÀ LIỆT KÊ ĐỆ QUY 3
10.2 LIỆT KÊ MỘT NGÔN NGỮ 6
10.3 KHÔNG PHẢI MỌI NGÔN NGỮ ĐỀU LÀ LIỆT KÊ ĐỆ QUY 9
PHẦN 2: BÀI TẬP 17
PHẦN 3: TÀI LIỆU THAM KHẢO 19
Trang - -
2
Tiểu luận Lý thuyết tính toán GVHD: PGS.TS Phan Huy Khánh


PHẦN 1: PHẦN LÝ THUYẾT
10.1 ĐỆ QUY VÀ LIỆT KÊ ĐỆ QUY
Chương này chúng ta sẽ tập trung (to concentrate on) vào nhận dạng
ngôn ngữ (language-recognition), một khía cạnh của các máy Turing (TMs) và
nghiên cứu chi tiết hơn về các ngôn ngữ có thể được chấp nhận nhờ máy
Turing. Chúng ta bắt đầu bằng cách hình thức hóa sự khác biệt giữa thừa nhận
(accepting) và nhận ra (recognizing) một ngôn ngữ.
Định nghĩa 10.1. Cho L


*
là một ngôn ngữ nào đó. Một máy Turing
cùng bộ kí tự nhập

được phát biểu là thừa nhận L nếu L(T) = L. Máy
Turing T recognizes hoặc decides L nếu T tính được hàm bộ phận
(characteristic function X
L
:
}{
1,0
*


. Mặt khác, T đón nhận L nếu T dừng
với bất kì chuỗi x nào trong tập

*
, kết quả trả về 1 nếu x


L và ngược lại
trả về là 0.
Một ngôn ngữ L là liệt kê đệ quy (recursively enumerable) nếu có tồn
tại một máy Turing T chấp nhận (accept) L và đệ quy nếu có một máy Turing
nhận ra L.
Mọi ngôn ngữ đệ quy cũng đều là liệt kê đệ quy nếu: T là một máy
Turing nào đó nhận ra L thì khi đó một máy bổ sung sẽ crash thay vì trả về kết
quả 0 chấp nhận L. Vậy là chúng ta đã nhận diện được vấn đề còn tồn đọng
(potential) với hướng đi trái ngược nhau. Nếu T là một máy Turing chấp nhận
L thì có thể có các chuỗi không nằm trong L mà T crashes và khi đó sẽ không
bao giờ có được câu trả lời. Sau chương này chúng ta sẽ nghiên cứu
(investigate) thêm các ngôn ngữ có khả năng không thể loại bỏ (khử) được.
Còn bây giờ chúng ta hãy ghi nhận một phần (partial) kết quả mà chúng ta đã
đề cập.
Định lý 10.1 Nếu L được chấp nhận bởi một máy Turing T không xác định và
mỗi bước di chuyển có thể của T cho ra kết quả hoặc là dừng hoặc là crash thì
khi ấy L là đệ quy.
Trang - -
3
Tiểu luận Lý thuyết tính toán GVHD: PGS.TS Phan Huy Khánh
Chứng minh: chúng ta xây dựng máy Turing T’ sao cho có một sự thay đổi
của máy Turing T
2
trong phần chứng minh định lý 9.2. Trong trường hợp đó,
T
2
tái tạo mỗi bước di chuyển hữu hạn có thể của T, máy T dừng lại nếu T tìm
thấy bước mà gây cho T dừng, và ngược lại máy T sẽ lặp mãi mãi. Máy mà
chúng ta cần bây giờ phải khác với hai dấu hiệu này. Trước tiên, nếu và khi T’
tìm thấy một bước di chuyển của T làm cho T dừng thì T sẽ tạo xuất ra

1∆
trên
băng 1 trước khi máy T dừng. Thứ 2, sự thay đổi này mới quan trọng hơn.
Nếu không có bước di chuyển nào gây cho T dừng thì T’ phải xác định một
vài thời điểm và dừng lại với
0∆
trên băng 1.
Nhớ lại chứng minh trong định lý 9.2, T
2
theo dõi các bước di chuyển
bằng cách dùng một chuỗi các con số trên băng 2, số thứ i chỉ ra sự lựa chọn
mà T
2
thực hiện tại bước thứ i. Rõ ràng nếu có một vài số nguyên n sao cho
mọi chuỗi có thể của n số trình bày lại tuần tự các bước di chuyển mà dẫn đến
crash, vì bất kì một chuỗi số nào dài hơn mà được bắt đầu bằng chuỗi có chiều
dài n thì khi ấy chuỗi nhập sẽ không được chấp nhận.
Định lý 10.2. Giả sử L
1
và L
2
là các ngôn ngữ liệt kê đệ quy trên

, khi đó L
1

L
2
và L
1


L
2
cũng là ngôn ngữ liệt kê đệ quy.
Chứng minh: Giả sử rằng T
1
= (Q
1
,

,
1
Γ
, q
1
,
1
δ
) và T
2
= ((Q
2
,

,
2
Γ
, q
2
,

2
δ
)
là các máy Turing chấp nhận L
1
và L
2
. Chúng ta cần xây dựng các máy Turing
chấp nhận L
1

L
2
và L
1

L
2
. Ý tưởng này giống như chứng minh trong định lý
3.4, khi đó chúng ta kết hợp Fas chấp nhận L
1
và L
2
để có được sự chấp nhận
L
1

L
2
. Chúng ta gom (include in) tập các trạng thái các cặp trong Q

2
x Q
2
.
Nên nhớ lại (recall) kỹ thuật này không làm việc với PDAs vì các ngăn xếp.
Lý do để máy Turing thực hiện được ở đây là chúng ta thoải mái sử dụng 2
băng trong máy Turing. Chúng ta mô tả giải pháp này cho L
1

L
2
.
Máy Turing 2 băng (two – tape) T = (Q
1
,

,
Γ
, q
0
,
δ
) bắt đầu bằng
việc sao chép chuỗi nhập x trên băng 2 và chèn một dấu # để đánh dấu lúc bắt
đầu trên mỗi băng. Mô phỏng đồng thời (the simultaneous simulation) máy
Turing T
1
trên băng 1 và máy Turing T
2
trên băng 2 thực hiện (to accomplish)

bằng cách cho phép các bước di chuyển có thể:
Trang - -
4
Tiểu luận Lý thuyết tính toán GVHD: PGS.TS Phan Huy Khánh
δ
((p
1
,p
2
), (a
1
,a
2
))=((q
1
,q
2
), (b
1
,b
2
), (D
1
,D
2
))
Trong đó: cả hai giá trị của i,
i
δ
(p

i
, a
i
) = (q
i
, b
i
, D
i
). Các kết quả mô phỏng này
có thể là:
1. Cả T
1
và T
2
đều dừng lại trong trường hợp T không bao giờ dừng.
2. Ít nhất một trong hai máy T
1
và T
2
dừng trong trường hợp T dừng
3. Một trong hai máy crash. Nếu cả hai máy crash đồng thời thì T crash.
Nếu một máy crash, T cũng bỏ qua mô phỏng này (ví dụ như là bỏ qua
băng đó) và tiếp tục với máy khác. Nếu một máy dừng lại do hoặc là
crash hoặc là dừng, thì T cũng dừng theo cách đó.
Việc xây dựng gây cho T dừng khi và chỉ khi có ít nhất một trong hay máy
T
1
và T
2

dừng, có thể bao gồm trường hợp T chấp nhận ngôn ngữ L
1

L
2
.
Ngôn ngữ L
1


L
2
cũng được xử lý theo cách tương tự, chấp nhận máy
Turing có thể crash ngay khi hoặc T
1
crach hoặc là T
2
crash và máy Turing có
thể chỉ dừng sau khi cả T
1
và T
2
đã dừng.
Giao và hội cũng là thuộc tính riêng của đệ quy. Đối với các ngôn ngữ đệ
quy, chúng ta có thể thêm phép tính bù cho danh sách này cũng được. (as
well)
Định lý 10.3. If L is recurse, so is L’
Chứng minh: Nếu T là máy Turing chấp nhận L, chúng ta có thể tạo ra máy
Turing đón nhận L’ bằng sự thay đổi 2 băng xuất.
Chứng minh đơn giản này không thích hợp trong (to adapt) bất cứ

trường hợp nào rõ ràng trong các ngôn ngữ liệt kê đệ quy. It does not
immediatetly follow that the coresponding statement for RE languages is false
(although it is); howerver, the next result suggests that it is at least less likely
to be true.
Định lý 10.4 Nếu L là ngôn ngữ liệt kê đệ quy whose complement is RE thì L
là đệ quy.
Trang - -
5
Tiểu luận Lý thuyết tính toán GVHD: PGS.TS Phan Huy Khánh
Chứng minh: Cho T1 và T2 là các máy Turing chấp nhận ngôn ngữ L và L’.
Chúng ta xây dựng một máy Turing T hai băng dùng để đón nhận L, bắt đầu
việc xây dựng như trong chứng minh định lý 10.2 cho trường hợp hợp của 2
ngôn ngữ. Sự khác nhau ở chỗ là bây giờ chúng ta biết trước (in advance)
được bất cứ chuỗi nhập x nào, rõ ràng (precisely) là một trong 2 máy Turing
T1 và T2 sẽ dừng lại. Do đó, có đủ khả năng để hiệu chỉnh máy T như sau:
Lúc T1 hoặc T2 dừng, T sẽ xóa bỏ trên băng 1 và xuất ra 0 hoặc 1 trước khi
dừng, điều này tùy thuộc vào máy dừng chấp nhận L hoặc L’ hay không.
10.2 LIỆT KÊ MỘT NGÔN NGỮ
Chúng ta bắt đầu bằng việc mô tả một cách chính xác cách mà một máy
Turing liệt kê 1 ngôn ngữ. Điều này có ích khi sử dụng máy Turing có ít nhất
hai băng, trong đó một băng được thiết kế như là băng xuất.
Định nghĩa 10.2 Cho T là máy Turing k băng, trong đó k >= 2, và cho L


*
. Chúng ta nói rằng T liệt kê L nếu T hoạt động sao cho các điều kiện
sau được thỏa mãn:
1. Băng đầu trên băng đầu tiên không được dịch chuyển sang trái
2. Tại mỗi một thời điểm trong hoạt động của T, băng 1 chứa:
x

1
#x
2
# #x
n
#
y
, trong đó n

0, mỗi x
i
, x
i
’ là phân biệt nhau, và
y là một tiếp đầu ngữ của phần tử L.
3. Với mọi x

L, x xuất hiện nhưng là một chuỗi x
i
trên băng 1.
Nếu L là một ngôn ngữ hữu hạn, máy Turring theo định nghĩa có thể
hoặc là dừng khi tất cả các phần tử L xuất hiện trên băng 1 hoặc là máy Turing
tiếp tục thực hiện việc di chuyển mà không cần phải in ra những chuỗi khác
trên băng 1. Nếu L là vô hạn, máy T tiếp tục di chuyển mãi mãi. Định nghĩa
này rõ ràng là cách thích hợp để hiện thực (to formulate) ý tưởng của máy T là
“liệt kê các phần tử của L”.
Như chúng ta đã định nghĩa, một ngôn ngữ là liệt kê đệ quy nếu có thể
được chấp nhận bởi một số máy Turing.
Trang - -
6

Tiểu luận Lý thuyết tính toán GVHD: PGS.TS Phan Huy Khánh
Mặc khác, nếu chúng ta có một máy Turing T dùng để liệt kê L thì khi
đó cho trước một chuỗi nhập x, chúng ta có thể thử (to attempt) kiểm tra xem
x đối với phần tử trong L bằng cách chờ xem (waiting to see) x có xuất hiện
trên băng xuất của T hay không. Máy Turing T
1
có thực hiện chiến lược này
bảo đảm (guarantee) chấp nhận L vì nếu chuỗi x nằm trong L thì cuối cùng x
cũng sẽ xuất hiện, còn nếu x không nằm trong L thì x sẽ không xuất hiện (vì
thế máy Turing sẽ lặp mãi trừ phi L là hữu hạn)
Mặc khác, nếu T là một máy Turing chấp nhận L thì khi đó liệt kê L,
chúng ta bắt đầu bằng một vài thứ tự chuẩn của tất cả các chuỗi nằm trong

*
, chẳng hạn như thứ tự kinh điển (canonical order) đã được giới thiệu
trong phần 9.6. Trong thứ tự này, những chuỗi nào ngắn hơn đến trước (to
precede) những chuỗi dài hơn, đồng thời những chuỗi nào có cùng độ dài thì
được xếp theo thứ tự alphabe. Chúng ta xét tất cả các chuỗi theo thứ tự này,
đồng thời với mỗi chuỗi x chúng ta thử chọn kể cả x trong việc liệt kê của
chúng ta. Đây là chỗ mà lý luận cần phức tạp một chút: máy T có thể lặp mãi
trên chuỗi nhập x. Chứng minh chính thức của chúng ta có thể sẽ vận dụng
(handle) vấn đề này.
Định lý 10.5 Một ngôn ngữ L


*
là liệt kê đệ quy (có thể được chấp nhận
bởi một số mát Turing) khi và chỉ khi L có thể được liệt kê bởi một số máy
Turing.
Chứng minh: Giả sử T là một máy Turing liệt kê L. Một máy T

1
chấp nhận L
được xây dựng có hơn 1 băng, băng 1 là băng thêm vào ( tape 1 being the
extra tape) có vai trò như là băng xuất. Máy Turing T
1
mô phỏng (simulate) T
chấp nhận bất cứ lúc nào dấu # được ghi trên băng 2, mô phỏng máy T dừng
khi T
1
đối sánh chuỗi nhập với chuỗi đã được liệt kê phía trước dấu #. Nếu hai
chuỗi kết hợp giống nhau thì T
1
dừng. Rõ ràng là T
1
chấp nhận một cách chính
xác các chuỗi đã được tạo ra trên băng 2, giả định là các phần tử của L.
Chính xác hơn, T
1
có thể kết hợp với các chuyển tiếp của T , xét các
băng khác trừ băng 1 của máy T bằng sự thay đổi như sau: mỗi một chuyển
tiếp đòi hỏi phải (involve) ghi dấu # trên băng 2 được thay thế bởi tuần tự các
chuyển tiếp trong đó các băng ngoại trừ băng 1 và băng 2 được bỏ qua, chuỗi
Trang - -
7
Tiểu luận Lý thuyết tính toán GVHD: PGS.TS Phan Huy Khánh
nhập được so với chuỗi ngay trước dấu # trên băng 2, và nếu không kết hợp T
1
quay trở lại tình trạng mà dẫn đến kết quả từ chuyển tiếp ban đầu.
Theo hướng ngược lại (in the converse direction), giả sử T chấp nhận L.
Chúng ta xây dựng một máy Turing T

1
ba băng liệt kê ngôn ngữ L. Băng 1 là
băng xuất, băng 2 được dùng bởi T
1
để tạo ra các chuỗi trong tập

*
và băng
3 là băng T
1
sử dụng để mô phỏng hành động của T trên mỗi chuỗi được tạo.
Để tránh khó khăn được thảo luận ở trước, T
1
mô phỏng tuần tự hữu hạn
các bước chuyển động của T hơn là cố tiếp tục hoàn thành việc xử lý T trên
một chuỗi đơn . Vì lý do này trên băng 2 không chỉ lưu lại các chuỗi được tạo
ra cho đến bây giờ (so far) mà số lượng các bước di chuyển của T cũng được
thực hiện trên mỗi chuỗi đó.
Chúng ta chọn (adopt) thứ tự trên

*
. Lấy ví dụ nếu

={a,b} thì các
chuỗi được tạo ra theo thứ tự sẽ là :

, a, b, aa, ab, ba, bb, aaa, aab, …, bbb, aaaa, aaab,…
Máy Turing T
1
tạo một dãy các vị trí (pass). Với vị trí đầu tiên, T

1
tạo ra
chuỗi

đồng thời mô phỏng một bước di chuyển của T trên chuỗi nhập đó. Ở
vị trí thứ 2, T
1
mô phỏng hai bước di chuyển của T trên chuỗi nhập

, rồi tạo
ra a đồng thời mô phỏng một bước di chuyển trên chuỗi nhập đó. Trên vị trí
thứ ba, T
1
tạo ra 3 bước di chuyển trên

, 2 bước di chuyển trên a và một
bước di chuyển trên b. Sau khi vị trí i hoàn thành, băng 2 sẽ trông giống như
thế này :
1 1 111 111 11 ∆∆∆∆∆∆∆∆∆ xba
Trong đó x là chuỗi thứ i theo thứ tự. Suốt các vị trí tiếp theo T
1
xử lý
mỗi chuỗi thứ i trên băng 2 bằng cách thêm vào một số 1 đằng sau chuỗi

,
sao chép chuỗi này vào trên băng thứ 3, mô phỏng T trên chuỗi nhập đó cho
các bước được chỉ định, đồng thời xóa băng 3. Nếu mô phỏng dừng, T
1
sao
chép chuỗi này trên băng 1 và theo sau chuỗi này là dấu #. Bước cuối cùng tại

Trang - -
8
i i - 1 i - 2
Tiểu luận Lý thuyết tính toán GVHD: PGS.TS Phan Huy Khánh
vị trí này là để kết thúc băng 2 phần tử tiếp theo của

*
(phần tử này đứng
sau x), đặt một chữ 1 sau x đồng thời mô phỏng bước di chuyển của T trên
chuỗi nhập đó.
Chúng ta không chỉ ra một cách rõ ràng (explicitly) các thiết bị theo dõi
mà T cần để thực hiện những bước này, tuy nhiên các bước này hoàn toàn dễ
hiểu (straightforward). Rõ ràng mọi chuỗi đều được chấp nhận bởi máy T
ngay cả chuỗi được liệt kê trên băng 1 và không có chuỗi được liệt kê.
Trong phần chứng minh định lý 10.5, chúng ta nên lưu ý rằng mặc dầu
những chuỗi trong

*
được tạo theo thứ tự cổ điển trên băng 2, nói chung các
chuỗi trong ngôn ngữ L không được liệt kê theo thứ tự trên băng 1. Với các
giả định tốt hơn (stronger assumption) về máy T có nghĩa là giả định rằng
(amount to assuming) ngôn ngữ L không chỉ là có thể liệt kê đệ quy mà còn đệ
quy. Ngược lại, dễ dàng chỉ ra rằng nếu có một máy Turing T liệt kê ngôn ngữ
L theo thứ tự cổ điển thì khi ấy L phải là đệ quy.
Định lý 10. 6: L là đệ quy khi và chỉ khi có một máy Turing liệt kê ngôn ngữ
L theo thứ tự cổ điển.
Chứng minh: Chứng minh xem bài tập Exercise 10.7
10.3 KHÔNG PHẢI MỌI NGÔN NGỮ ĐỀU LÀ LIỆT KÊ ĐỆ QUY
Các mô hình tính toán đơn giản mà chúng ta vừa xem xét trước đây,
Automat hữu hạn (Fas) và Automat đẩy xuống (PDAs) đều có khả năng

(capable) chấp nhận một vài kiểu ngôn ngữ. Chúng ta cần chỉ ra được một số
máy Turing (TMs) chúng ta chỉ ra cái gì trong cả hai trường hợp này: Có các
ngôn ngữ
Định nghĩa 10.3: Một tập S là vô hạn đếm được (countably infinite) nếu có
một song ánh từ (bijection) từ N đến S, và có thể đếm được (countable) nếu
tập S hoặc là vô hạn đếm được hoặc là hữu hạn đếm được. Tập A là vô hạn
hạn không đếm được (uncountably infinte) hoặc nói đơn giản là không đếm
được nếu tập A này không đếm được.
Trang - -
9
Tiểu luận Lý thuyết tính toán GVHD: PGS.TS Phan Huy Khánh
Ta nói rằng f: N

S nghĩa là có ba điều cần có:
1. Với mọi số tự nhiên n, f(n)

S
2. Với bất kì 2 số m và n khác nhau, f(m)

f(n)
3. Mọi phần tử của S đều là f(n) đối với một vài số tự nhiên n.
Do đó, ta nói rằng S là vô hạn đếm được (kích thước tương tự như N)
nghĩa là các phần tử của S có thể được liệt kê chẳng hạn như f(0), f(1), sao
cho mọi phần tử của S đều xuất hiện chính xác một lần trên danh sách. Ta nói
rằng S đếm được cũng có nghĩa là như vậy, ngoại trừ danh sách này có thể
dừng sau một số hữu hạn các số hạng nào đó.
Có ít nhất 2 cách mà trong đó cách thứ nhất có thể hiểu sai
(misinterpret) cụm từ “có thể được liệt kê”. Dĩ nhiên điều này có thể không
bao giờ thực hiện được việc liệt kê tất cả các phần tử của một tập vô hạn bằng
vật lý. Ta nói rằng S “có thể được liệt kê” nghĩa là chỉ có duy nhất một hàm f

như ở trên sao cho bất kì chuỗi x

S, nếu chúng ta ghi xuống đầy đủ các số
hạng (term) f(0), f(1), thì khi đó x xuất hiện như là một trong những số hạng
này. Quan trọng hơn nữa, khi chúng ta nói rằng một tập S là vô hạn đếm được,
chúng ta không nói có một số giải thuật để liệt kê các phần tử này. Chúng ta
chỉ nói rằng “có tồn tại” một song ánh (bijection) f; có thể có hoặc không có
một giải thuật nào cho phép chúng ta tìm ra được f(n) đối với một số tự nhiên
n đã cho.
Lưu ý rằng bất kì 2 tập hữu hạn đếm được nào cũng đều có kích thước
tương tự nhau. Nó có thể là trường hợp mà tất cả các tập không đếm được đều
có kích thước giống nhau. Nếu trên thực tế (in fact) có các tập vô hạn kích
thước khác nhau, tuy nhiên bất cứ một tập không đếm được nào cũng đều lớn
hơn một tập có thể đếm được. Mặc dù điều này không được rõ ràng lắm nhưng
đây là một kết quả có được ngay tức thì (immediate consequence) của cơ sở
lập luận (fact) sau.
Trang - -
10
Tiểu luận Lý thuyết tính toán GVHD: PGS.TS Phan Huy Khánh
Bổ đề 10.1. Mọi tập vô hạn đều có một tập con vô hạn đếm được.
Chứng minh: Chúng ta chỉ ra rằng nếu S là vô hạn, có một song ánh f từ N
đối với tập con của S. Lúc này chúng ta định nghĩa f là một số nguyên, as
follows. Vì S là vô hạn do đó có ít nhất một phần tử; chọn một phần tử đồng
thời gọi phần tử này là f(0). Nói chung, giả sử ta có một số n >0 , f(0), f(1),
…,f(n) là các phần tử S phân biệt nhau. Vì S là vô hạn do đó sẽ có một phần tử
của S không phải là một trong những phần tử này; chọn bất kì phần tử nào, và
gọi nó là f(n+1). Do đó, bằng phương pháp quy nạp toán học (by the principle
of methematical induction), f(n) có thể được định nghĩa với mọi n > = 0 sao
cho tất cả các phần tử f(i) đều phân biệt được nhau.
Một yếu tố khác của các tập đếm được này là tính hữu dụng: bất cứ tập

con nào của tập đếm đều có thể đếm được.
Một ví dụ cụ thể của một tập vô hạn đếm được đó chính là bản thân tập
N. Thật không quá khó để mà tìm ra nhiều ví dụ hơn nữa. Ví dụ tập:
S = {0, ½, 1, 3/2, 2, 5/2,…}
là tập vô hạn đếm được bởi vì cách chúng ta đã định nghĩa đó là “liệt kê” các
phần tử của tập. Dĩ nhiên, ban đầu dường như nghĩ rằng S sẽ lớn hơn N vì S
chứa tất cả các phần tử của N và and infinitely many more besides….
Định lý 10.7. Giả sử rằng S
0
, S
1
, …là các tập đếm được. Khi đó tập S =


=0n
n
S
cũng là đếm được.
Chứng minh: Chúng ta mô tả một cách liệt kê các phần tử của tập hợp này.
Xét mảng hai chiều trong đó các phần tử của S
n
được liệt kê ở hàng thứ n. Vì
S
n
có thể hữu hạn hoặc vô hạn, các dòng giống như là có chiều dài không bằng
nhau. Giờ xét đường đi được chỉ ra trong hình 10.1
Dễ thuyết phục rằng đường đi này cuối cùng sẽ bắt trúng mỗi phần tử
của S ít nhất là một lần. Đường đi sẽ bắt trúng hơn một phần tử nếu phần tử đó
thuộc S
n.

Giả sử rằng chúng ta định nghĩa hàm f như sau:
Trang - -
11
Tiểu luận Lý thuyết tính toán GVHD: PGS.TS Phan Huy Khánh
F(i) =
Khi đó f là một song ánh, hoặc từ {0,1,…,m} đến S hoặc từ N đến S, phụ
thuộc vào tập S là hữu hạn hoặc vô hạn hay không. Do đó, S là một tập đếm
được.
a
0,0
a
0,1
a
0,2
a
0,3
a
0,4

a
1,0
a
1,1
a
1,2
a
1,3
a
1,4
a

2,0
a
2,1
a
2,2
a
2,3
a
2,4
a
3,0
a
3,1
a
3,2
a
3,3
a
3,4
a
4,0
a
4,1
a
4,2
a
4,3
a
4,4
Hình 10.1: liệt kê các phần tử của



=0n
n
S
Vì mỗi tập

k
n
n
S
0=
là một tập hợp con của S, chúng ta có thể kết luận
(conclude) rằng hợp của các tập đếm được hữu hạn thì cũng là đếm được.
Ví dụ 10.1: Cho S = N x N, là tập tất cả các cặp số tự nhiên có thứ tự. Theo
định lý 10.7 thì S là đếm được vì:
N x N =


=
×
0
)}({
m
Nm
Và mỗi tập {m}
×
N là đếm được vì hàm f
m
: N


{m}
×
N được định
nghĩa bởi hàm f
m
(n) = (m,n) là một song ánh (bijection). Tuy nhiên, chúng ta
có thể tường minh hơn (be more explicit) về song ánh f từ N đến N
×
N như
Trang - -
12
A
0,0
nếu i=0
Phần tử đầu tiên của S – {f(0),…, f(i-1)} trên đường đi nếu i > 0
Tiểu luận Lý thuyết tính toán GVHD: PGS.TS Phan Huy Khánh
đã được minh họa trong hình 10.1 và mô tả trong phần chứng minh định lý
10.7. Cho công thức f
-1
(m,n), công thức này liệt kê các cặp trong N
×
N
Lần nữa chúng ta hãy tham chiếu đến đường đi đã chỉ ra trong hình
10.1. Cho j >= 0; vì đường đi lặp lại qua dãy thứ j lần, nó tìm ra (hit) tất cả các
cặp (m,n) để sao cho m + n = j, đồng thời j + 1 cũng là một cặp. Hơn nữa, đối
với cặp biết trước (m,n) với m + n =j thì cũng có m cặp (p,q) khác, với p + q =
j mà được tìm thấy bởi đường đi này trước cặp này. Do đó, toàn bộ các cặp mà
đi trước cặp (m,n) trong liệt kê là:
1+ 2 + …+ (m+n-1) + (m+n) + m = (m+n)(m+n+1)/2 + m

Đây chỉ là một cách khác để nói rằng:
f
-1
(m,n) = (m+n)(m+n+1)/2 + m
Hàm f này thường được xem như là một hàm đôi và hữu dụng trong
một số các chủ đề về đếm.
Đối số được sử dụng trong ví dụ này có thể được hiệu chỉnh một cách
dễ dàng để cho biết bất kì tập S đếm được nào đó thì S x S cũng là tập đếm
được.
Ví dụ 10.2 Cho một tập

bất kỳ, tập

*
của tất cả các chuỗi trên


đếm được. Chúng ta viết:

*
=


=

0n
n
Trong đó

n

là tập các chuỗi trên

chiều dài n. Vì

n
là hữu hạn và do
đó đếm được, theo định lý 10.7 thì

*
cũng đếm được.
Ví dụ 10.3. Cho T là tập tất cả các máy Turing, và cho RE là tập tất cả
các ngôn ngữ liệt kê đệ quy. Ở đây chúng ta tuân theo các quy ước
(convention) của chúng là tất cả các trạng thái của máy Turing đều là các phần
tử của tập Q và tất cả các kí hiệu trên băng đều là các phần tử của tập S. Cụ
thể là tất cả các ngôn ngữ liệt kê đệ quy bao gồm các kí tự aphabet là các tập
Trang - -
13
Tiểu luận Lý thuyết tính toán GVHD: PGS.TS Phan Huy Khánh
hợp con của S. Có thể sử dụng trực tiếp định lý 10.7 để chỉ ra rằng T đếm
được. Tuy nhiên thay vì chúng ta sử dụng hàm mã hóa: e: T

{0,1}* như đã
mô tả trong phần 9.7. Chỉ có đặc trưng của e mà chúng ta cần ở đây đó là 1-1
và do đó một song ánh từ T đến tập hợp con {0,1}*. Vì {0,1} đếm được, bất
cứ tập con của nó cũng đếm được và do đó T cũng đếm được.
Điều đơn giản để chỉ ra rằng RE cũng là đếm được. Theo định nghĩa,
một ngôn ngữ liệt kê đệ quy L có thể được chấp nhận bởi các máy Turing. Với
mỗi ngôn ngữ L, cho t(L) là một máy Turing. Kết quả là một hàm t từ RE đến
T, và vì một máy Turing chấp nhận chính xác một ngôn ngữ, t là 1-1. Vì T
đếm được, lý lẽ tương tự mà chúng ta sử dụng ở trên chỉ ra rằng RE cũng là

đếm được.
Ví dụ 10.3 cung cấp một nữa kết quả mà chúng ta tìm kiếm. Chúng ta
đã chỉ ra tập các ngôn ngữ liệt kê đệ quy là đếm được, chứng minh rằng có
nhiều ngôn ngữ không thể đếm được (ví dụ tập các ngôn ngữ không đếm
được) sẽ chỉ ra rằng phải có các ngôn ngữ không phải là liệt kê đệ quy.
Chứng minh nổi tiếng nhất 1 tập không thể đếm được là lý luận đường
chéo cổ điển (the classic diagonal argument) của nhà toán học Đức Georg
Cantor vào thế kỉ thứ 19 chỉ ra tập các số thực là không thể đếm được.
Định lý 10.8 Nếu S là một tập vô hạn đếm được bất kỳ, khi ấy tập 2
S
của tất cả các tập hợp con của S là vô hạn không đếm được. Rõ ràng là với bất
cứ tập aphabet

không rỗng nào thì tập các ngôn ngữ trên

là không đếm
được.
Chứng minh: Đơn giản chúng ta có thể chứng minh bằng một lưu ý đó
là vì có một song ánh từ N tới S, do đó có một song ánh từ 2
N
đến 2
S
. Do đó đủ
để nói rằng 2
N
là không đếm được, khi đó 2
S
cũng không đếm được.
Ta chứng minh ngược lại. Giả sử 2
N

là vô hạn đếm được. Thì khi đó các
tập con của N có thể được liệt kê như sau :
2
N
= {A
0
, A
1
…}
Trang - -
14
Tiểu luận Lý thuyết tính toán GVHD: PGS.TS Phan Huy Khánh
Chúng ta định nghĩa tập con A của N bằng công thức sau :
A = {i

N | i

A
i
}
Vì mỗi tập con của N là một trong số của A
i
, A = A
I
đối với một số con
số tự nhiên I. Giờ xét I

A
I
. Một mặt, nếu I đúng thì khi đó I không thõa mãn

(fails to satisfy) định nghĩa điều kiện của A, và do đó I

A = A
I
. Mặt khác,
nếu I

A
I
thì khi đó I thõa mãn điều kiện phần tử trong A, và do đó I

A =
A
I
.
Tại thời điểm này, bắt đầu bằng việc giả định (assumption) rằng 2
N
là vô hạn
đếm được, chúng ta đã tìm ra được tập A

N và một số tự nhiên I sao cho:
1. Nếu I

A thì I

A ; và
2. Nếu I

A thì I


A
Đây là điều mâu thuẫn (contradiction) vì một trong hai phát biểu (statement)
I

A và I

A phải đúng và hai phát biểu 1 và 2 nói rằng cả hai có thể là đúng.
Do đó, 2
N
không phải là vô hạn đếm được.
Hệ quả (Corollary) 10.1 : Tập các ngôn ngữ trên {0,1} không phải liệt kê đệ
quy là không đếm được. Nói một cách cụ thể là có tồn tại ít nhất một ngôn ngữ
như thế.
Chứng minh : Theo hệ quả này của định lý 10.8, khả năng đếm được của tập
các ngôn ngữ liệt kê đệ quy và từ cơ sở lập luận (fact) nếu S là không đếm
được và S
1
đếm được thì S – S
1
là không đếm được (xem bài tập 10.15)
Chứng minh định lý 10.8 là khó hiểu. Vì nó không có nhiều tính logic;
khi A được định nghĩa, phát biểu I

A
i
dường như giống như là một điều tự
nhiên thắc mắc vậy. Từ điểm đó, tồn tại mâu thuẫn ít hay nhiều là vấn đề tùy
thuộc vào năng lực của mỗi người. Chứng minh này khó vì định nghĩa A khó
hiểu. Sự khó hiểu này xuất phát từ đâu ? Câu trả lời tốt nhất đó là định nghĩa
A theo cách này làm cho chúng ta có mâu thuẫn.

Trang - -
15
Tiểu luận Lý thuyết tính toán GVHD: PGS.TS Phan Huy Khánh
Định nghĩa A hy vọng chứng minh để dẫn đến tên gọi đối đường chéo
(diagonal argument). Chúng ta có thể trình bày lại vấn đề này theo khía cạnh
hình học. Xét một mảng hai chiều vô hạn như hình bên dưới với dòng i và cột
j được đánh số, phần tử thứ (i,j) là giá trị đúng của phát biểu i

A
j
.
0 1 2 3 …
0 0

A
0
0

A
1
0

A
2
0

A
3

1 1


A
0
1

A
1
1

A
2
1

A
3
2 2

A
0
2

A
1
2

A
2
2

A

3
3 3

A
0
3

A
1
3

A
2
3

A
3

Các phần tử đường chéo của ma trận được gạch dưới ở trong sơ đồ. Tập A là
tập các phần tử i để cho phần tử đường chéo i

A
j
là đúng. Chúng ta sẽ xem
xét các loại đối số này trong các phần kế tiếp cũng như các phần sau.
Trang - -
16
Tiểu luận Lý thuyết tính toán GVHD: PGS.TS Phan Huy Khánh
PHẦN 2: BÀI TẬP
I. Để loại bỏ lệnh hoán đổi S<n,m> trong máy Ram thô sơ để chỉ còn lại các

tập lệnh I <n>, D <n>, Z <n>, J<n>(I,j) & HALT, ta có thể thay thế lệnh
S<n,m> bởi các lệnh sau:
* Thuật toán: hoán đổi nội dung 2 thanh ghi Rn & Rm
R1 = Rn
Rn = Rm
Rm = R1
• Tập lệnh thay thế
Nhãn Lệnh Ý nghĩa
1: Z <1> R1 = 0
2: J <n> (6, 3) Sau vòng lặp: R1 = Rn
3: D <n> Rn = Rn – 1
4: I <1> R1 = R1 + 1
5: J <2> (2,2) Quay lại vòng lặp
6: J <m> (10 , 7) Sau vòng lặp: Rn = Rm
7: D <m> Rm = Rm – 1
8: I <n> Rn = Rn + 1
9: J <2> (6,6)
10: J <1> ( 14, 11) Sau vòng lặp: Rm = R1
11: D <1>
12: I <m>
13: J <2> (10,10) Quay lại vòng lặp
14: HALT
II. Chương trình RAM thô sơ tính số Fibonacci thứ n
• Thuật toán:
Giả sử R3 = n
Dùng thanh ghi R2 chứa kết quả Fib(n)
If (R3 = 0 ) then R2 = 0
Else
{ R1 = 0;
R2 = 1;

Trang - -
17
Tiểu luận Lý thuyết tính toán GVHD: PGS.TS Phan Huy Khánh
R4 = 0;
}
While (R3 <> 0 )
{
R3 = R3 – 1
R4 = R2 + R1
R1 = R2
R2 = R4
}
• Chương trình Ram thô sơ
STT LỆNH RAM Ý NGHĨA
J <3> (KQ1, TIEP) Nếu R3 = 0 thì KQ1=0 &
halt, R3 <> 0 thì nhảy đến
nhãn TIEP
TIEP: Z <1> R1 = 0
Z <2>
I <2> R2 = 1
LAP: J <3> (KQ2, TINH)
TINH: D <3> R3 = R3 – 1
Z <4> R4 = 0
GR1R4: J <1> (ADDR2R4,GAN) Sau vòng lặp: R4 = R1 &
nhảy đến nhãn ADDR2R4
GAN: D <1> R1 = R1 – 1
I <4> R4 = R4 + 1
J <5> (GR1R4,GR1R4) Quay lại vòng lặp
ADDR2R4 : J <2> (GR4R2,ADD) Sau vòng lặp:
R4 = R4 + R2; R1 = R2 &

nhảy đến nhãn GR4R2
ADD: D <2> R2 = R2 – 1
I <4> R4 = R4 + 1
I <1> R1 = R1 + 1
J <5> (ADDR2R4,ADDR2R4) Quay lại vòng lặp
GR4R2: J <4> (LAP , GAN2) Sau vòng lặp: R2 = R4 &
Trang - -
18
Tiểu luận Lý thuyết tính toán GVHD: PGS.TS Phan Huy Khánh
nhảy đến nhãn LAP
GAN2: D <4> R4 = R4 -1
I <2> R2 = R2 + 1
J<5> (GR4R2, GR4R2) Quay lại vòng lặp
KQ1: Z <2> R2 = 0
KQ2: HALT
PHẦN 3: TÀI LIỆU THAM KHẢO
1. TS. Phan Huy Khánh (1999), Lý thuyết tính toán,
2. John C. Martin (1996), Introduction to languages and the theory of
computation, North Dakota State University, Singapore.
Trang - -
19

×