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

Tiểu luậ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 (206.04 KB, 19 trang )

Tiểu luận: Lý thuyết Tính toán GVHD: PGS.TS Phan Huy Khánh
MỤC LỤC
Phần I:LÝ THUYẾT 3
ĐỆ QUY ĐẾM ĐƯỢC VÀ NGÔN NGỮ ĐỆ QUY 3
.1 Đệ quy đếm được và đệ quy không đếm được 3
.2 Ngôn ngữ không phải đệ qui đếm được 4
.3 Liệt kê một số ngôn ngữ đệ quy 9
Phần II: BÀI TẬP 14
KẾT LUẬN 18
TÀI LIỆU THAM KHẢO 19
Nhóm thực hiện : nhóm 7 trang 1
Tiểu luận: Lý thuyết Tính toán GVHD: PGS.TS Phan Huy Khánh
LỜI MỞ ĐẦU
Sự phát triển phi thường của các máy tính và những thay đổi sâu sắc trong
phương pháp luận khoa học đã mở ra những chân trời mới cho toán học với một
tốc độ không thể sánh được trong suốt lịch sử lâu dài của toán học. Những phát
triển đa dạng của toán học đã trực tiếp tạo ra “thuở ban đầu” của máy tính và tin
học và các tiến bộ trong tin học đã dẫn đến sự phát triển mạnh mẽ một số ngành
toán học.
Nguyên cứu những phương pháp lập trình này giúp ích rất nhiều cho những
ai muốn tìm hiểu về kỹ thuật lập trình trong các lĩnh vực trí tuệ nhân tạo, giao tiếp
hệ thống. xử lý ký hiệu, tính toán hình thức, các hệ thống đồ họa…
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 Đệ quy đếm được và đệ quy không đếm được. Đề 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.2. An Undecidable Problem
That is Recursively Enumerable p373 – 381”
Phần II: Bài tập - Viết chương trình của một máy RAM chuẩn và RAM thô
sơ kiểm tra một số nguyên n cho trước có phải là số lẻ (ghi lên băng ra kết quả 1)
hay một số chẵn (ghi lên băng ra kết qủa 0).
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 chúng tôi không thể tránh khỏi những thiếu sót, kính mong nhận
được sự góp ý kiến của Thầy giáo hướng dẫn PGS. TS. Phan Huy Khánh và các
anh chị trong lớp để đề tài được tốt hơn.
Nhóm thực hiện : nhóm 7 trang 2
Tiểu luận: Lý thuyết Tính toán GVHD: PGS.TS Phan Huy Khánh
Phần I:LÝ THUYẾT
ĐỆ QUY ĐẾM ĐƯỢC VÀ NGÔN NGỮ ĐỆ QUY
.1 Đệ quy đếm được và đệ quy không đếm được
Trong chương này và tiếp theo, chúng ta tập trung vào mặt nhận biết ngôn
ngữ của máy Turing, và nghiên cứu chi tiết hơn những ngôn ngữ có thể được đoán
nhận bởi máy Turing. Chúng ta sẽ bắt đầu tìm hiểu sự khác nhau giữa accepting
và recognizing một ngôn ngữ. Cho 1 máy Turing T, L(T) là ngôn ngữ của những
xâu mà T dừng lại.
Định nghĩa 1. Cho L


* là một ngôn ngữ. Một máy Turing T với bảng chữ vào

thì được gọi là đoán nhận (accept) L nếu L(T) = L. Máy Turing T thừa nhận
(recognizes) hay quyết định nhận (decides) L nếu T tính toán hàm đặc trưng
χ
L
:


*

{0,1}. Đối với những từ khác, T thừa nhận L nếu T dừng với mọi xâu x
thuộc

*, sản xuất ra 1 nếu x

L, ngược lại xuất ra 0.
Một ngôn ngữ L là đệ quy đếm được nếu đó là một máy Turing đoán nhận
(accept) L và đệ quy nếu máy Turing thừa nhận (recognizes) L.
Mọi ngôn ngữ đệ quy là đệ quy đếm được: nếu T là một máy Turing thừa
nhận L thì một máy đã được định nghĩa là phá hủy thay vì xuất ra 0 đoán nhận L.
Chúng ta cũng đã sẵn sàng nhận dạng vấn đề tiềm ẩn với sự trực tiếp chuyển đổi.
Nếu T là một máy Turing đoán nhận L, có thể xâu không thuộc L làm cho T phá
hủy và vì vậy không bao giờ đưa ra được câu trả lời. Trong phần sau của chương
này chúng ta sẽ nghiên cứu tỉ mỉ những ngôn ngữ không có khả năng đã bị loại
trừ. Bây giờ, chúng ta ghi nhận kết quả từng phần rằng đề nghị là ngôn ngữ tự
nhiên. Nó sẽ hữu ích để tổng quát rõ ràng về máy không đơn định.
Định lý 9.1: Nếu L được đoán nhận bởi một máy Turing không đơn định T và mọi
khả năng di chuyển tuần tự của T cho kết quả dừng hoặc bị phá hủy thì L là đệ
quy.
Nhóm thực hiện : nhóm 7 trang 3
Tiểu luận: Lý thuyết Tính toán GVHD: PGS.TS Phan Huy Khánh
Ở điểm này, thật hữu ích để đặt một số điều kiện đủ cho ngôn ngữ đệ quy
đếm được và đệ quy theo một thứ tự định sẵn. Một vài kết quả này phụ thuộc vào
cách đặt một máy Turing có thể tái tạo hai máy Turing khác cùng một lúc.
Định lý 9.2. Nếu L
1
và L

2
là ngôn ngữ đệ quy đếm được trên

, thì L
1

L
2
và L
1

L
2
cũng là đệ quy đếm được.
Phép hợp và phép giao cũng giữ lại những thuộc tính của đệ quy; chúng ta
sẽ nói chi tiết ở phần bài tập. Đối với ngôn ngữ đệ quy, chúng ta có thể bổ sung
thêm các hoạt động để danh sách tốt hơn.
Định lý 9.3. Nếu L là đệ quy, thì L’ cũng là đệ quy.
Chứng minh. Nếu T là một máy Turing thừa nhận L, chúng ta có thể làm cho nó
thừa nhận L’ bằng cách đổi chỗ 2 sản xuất.
Chứng minh này không chỉ trực tiếp đến những câu lệnh tương ứng cho
ngôn ngữ đệ quy đếm được là sai (mặc dù nó đúng là như vậy); tuy nhiên, kết quả
tiếp theo thừa nhận rằng ít nhất là nó đúng.
Định lý 9.4. Nếu L là một ngôn ngữ đệ quy đếm được với các thành phần là đệ
quy đếm được thì L là đệ quy.
.2 Ngôn ngữ không phải đệ qui đếm được
Theo như Church-Turing, ngôn ngữ mà không được chấp nhận bởi 1 máy
Turing thì không thể được công nhận như một thuật toán có thể hiểu được, bởi vậy
Nhóm thực hiện : nhóm 7 trang 4
Tiểu luận: Lý thuyết Tính toán GVHD: PGS.TS Phan Huy Khánh

một cách tiếp cận tinh tế được đề xuất. “Tinh tế” là cách hay để mô tả tham số
đường chéo trong phần trước, tuy nhiên chúng ta cũng có thể sử dụng nó như 1
tham số ở đây.
Trong trường hợp này, chúng ta sử dụng 1 ma trận với các dòng tương ứng
với các số nguyên i và các cột được đặt là Aj, và sử dụng phép toán tập hợp để
định nghĩa mục vào (i,j). Ở đây đối số có thể …… Đặt bộ TMs như các giá trị
đếm được T0, T1, … và coi như mỗi Ti và 1 chuỗi mã hóa e(Ti)

{0,1}*, trong
đó e là hàm mã hóa (xem phần 9.7). Sau đó lặp lại các tham số đường chéo trước,
với các thay đổi: thay vì i, sử dụng e(Ti); thay vì Aj sử dụng Tj và thay thế “i

Aj” bởi “e(Ti) không chấp nhận bởi Tj”. Bạn có thể muốn ngắt đọc của bạn tại
thời điểm này để xem bạn có thể hoàn tất mô tả ngôn ngữ và cho rằng nó có thể
không chấp nhận bởi bất kỳ 1 máy TM nào.
Định nghĩa chính thức của chúng tôi sẽ hơi khác một phần, bởi vì nó không
sử dụng khả năng đếm được của bộ TMs một cách rõ ràng, nhưng chủ yếu là bởi
vì nó sẽ thuận lợi trong một số các ứng dụng sau này để xem xét một ngôn ngữ lớn
hơn.
Định nghĩa 2: Cho NSA (không tự chấp nhận) là tập con của {0,1}
*
sau:
NSA = NSA1 U NSA2
Trong đó:
NSA1 = {

ω
{0,1} |
ω
=e(T) cho máy Turing T, và T không chấp nhận

ω
}
NSA2 = {

ω
{0,1} |
ω
khác e(T) cho bất kỳ TM }
Đặt SA (tự chấp nhận) là phần mở rộng của NSA trong {0,1}*, sao cho
SA= {

ω
{0,1} |
ω
=e(T) cho máy Turing T, và T không chấp nhận
ω
}
Định lý 2 : Ngôn ngữ NSA là không đệ qui đếm được
Chứng minh.
Như trong tham số đường chéo ở phần trước, ta chứng minh bằng phương
pháp phủ định. Giả sử cho 1 máy Turing T0 với L(T0)=NSA. Đặt
0
ω
là 1 chuỗi
Nhóm thực hiện : nhóm 7 trang 5
Tiểu luận: Lý thuyết Tính toán GVHD: PGS.TS Phan Huy Khánh
e(T0). Ta có thể khẳng định TM T0 chấp nhận chuỗi
0
ω
. Hay nói cách khác, T0

chấp nhận 1 chuỗi nhập vào w nếu và chỉ nếu

ω
NSA. Như vậy, kể từ T0
chấp nhận NSA,
0
ω
thuộc NSA. Khi
0
ω
được sinh mã bởi 1 máy Turing, và
chỉ có
0
ω
có thể là NSA. Tuy nhiên, theo định nghĩa của NSA1, nếu
0
ω
thuộc
NSA1 và
0
ω
= e(T0), T0 không thể chấp nhận
0
ω
. Do đó, nếu T0 chấp nhận
0
ω
thì T0 không thể chấp nhận
0
ω

.
Ngược lại, nếu T0 không chấp nhận w0 thì w0 thỏa mãn điều kiện là thành viên
trong NSA1, và do đó T0 chấp nhận
0
ω
vì NSA1

NSA = L(T0).
Bây giờ ta có 1 mâu thuẫn, Hoặc To chấp nhận hoặc không chấp nhận
0
ω
;
tuy nhiên, chúng tôi đã cho thấy rằng cả hai đều không thể. Do đó, ta giả định rằng
L(T0) = NSA là sai.
Một lần nữa bạn có thể hỏi “Tại sao?” (ít nhất bạn có thể tự do hỏi câu này
nếu bạn đã đọc các bằng chứng và hiểu rõ). Ngôn ngữ NSA dường như đặt ra, để
nói rằng không phải là ít nhất mà chúng tôi đã biết rằng có rất nhiều ngôn ngữ đệ
qui không đếm được. Nó không có vẻ đặc biệt thú vị mà lạ triển khai ngôn ngữ
này trong số những ngôn ngữ đệ quy không đếm được. Tuy nhiên, định lý 10.9 ra
đời đã giải quyết được một số hệ quả quan trọng. Chúng tôi sẽ có thể sử dụng nó
để cho thấy rằng một số vấn đề, kể cả một số không âm thanh như vậy được đặt ra,
là "không giải quyết được". Bây giờ, chúng tôi có thể sử dụng nó để sản xuất một
ví dụ khác, trong đó làm rõ mối quan hệ giữa đệ qui đếm được và đệ qui.
Định lý 3
Nhóm thực hiện : nhóm 7 trang 6
Tiểu luận: Lý thuyết Tính toán GVHD: PGS.TS Phan Huy Khánh
SA là ngôn ngữ đệ qui đếm được nhưng không đệ qui. Nói cách khác, dù
SA chấp nhận bởi 1 máy Turing, bất kỳ máy TM nào chấp nhận nó sẽ lặp vô tận
với ít nhất 1chuỗi nhập vào từ ngôn ngữ.
Chứng minh:

Phát biểu sau được khẳng định 1 một cách dễ dàng từ định lý 10.9. Nếu SA
đã được đệ quy, phần mở rộng của NSA cũng sẽ được đệ quy. Định lý 10.9 cho
thấy rằng NSA không thể đệ qui bởi vì nó thậm chí không đệ qui đếm được. Vậy,
để chứng minh được, đó đủ để xây dựng 1 máy TM Tsa chấp nhận ngôn ngữ SA.
Gọi SA = {
ω
|
ω
= e(T) và T chấp nhận
ω
}. Máy Turing Tsa bắt đầu
bằng cách xác định xem
ω
chuỗi đầu vào là của e(T) cho một vài T. Nếu nó
không chấp nhận thì Tsa bị treo. Nếu
ω
=e(T) thì Tsa mô phỏng các xử lý của
ω

bởi T và dừng nếu và chỉ nếu T dừng với đầu vào
ω
. Ta đã có một máy TM để
thực hiện bước này lần thứ hai: phổ TM Tu giới thiệu trong phần 9.7, phép toán
trên chuỗi
ω
e(
ω
) = e(T) e(
ω
). Có nghĩa là Tsa có thể xây dựng các dạng T1Tu.

Vấn đề là sau đó giảm xây dựng T1, nghĩa là phá vỡ đầu vào
ω
nếu không có
dạng e(T) và dừng nếu được, để lại chuỗi
ω
e(
ω
) trên băng.
Để cho 1 chuỗi
ω
trở thành e(T) từ 1 vài T, nó phải chứa 1 chuỗi 0
k
1 theo
sau là chuỗi có mã hóa TM di chuyển. Đặc biệt, nó phải tương ứng với biểu thức
chính quy
0
+
1((0
+
1)
5
)
+
Tiếp theo, có thể có nhiều nhất là một trong những di chuyển được chỉ định
cho mỗi trạng thái - biểu tượng cho sự kết hợp, có nghĩa là không thể có hai trạng
thái “5- tuples” khác nhau với hai phần đầu của một trạng thái này giống với hai
phần đầu của trạng thái kia. Thứ 3, phần thứ 5 của mỗi 5-tuple phải là 0, 00, 000,
vì thế nó đại diện cho 1 huwongs hợp lệ. Cuối cùng, không có 5-tuple nào cho
phép có phần đầu 0 bởi vì 1 TM không cho phép di chuyển từ trạng thái dừng. Bất
kỳ chuỗi đầu vào thỏa mãn điều kiện e(T) cho một vài T, thậm chí nếu máy T bị

Nhóm thực hiện : nhóm 7 trang 7
Tiểu luận: Lý thuyết Tính toán GVHD: PGS.TS Phan Huy Khánh
hỏng đột ngột hoặc bị lỗi vì các lý do khác để thi hành bất kỳ hành động có nghĩa
nào.
Nhưng phần thứ hai của điều kiện này dễ dàng kiểm tra. Để kiểm tra phần
thứ 2, T1 sẽ thực hiện 1 vòng lặp, thi hành bước lặp thứ i vớ Ti ………….Chi tiết
được biễu diễn trong hình 9-19, và ta không mô tả thêm bất kỳ điều kiện nào.
Nếu tất cả 4 điều kiện cho chuỗi
ω
là của mẫu e(T) không được đáp ứng,
sau đó T1 dừng. Nếu tất cả 4 điều kiện được thỏa mãn thì sau đó T1 phục hồi với
đầu vào
ω
là bản mẫu và thêm vào cuối chuỗi e(
ω
). Bởi vì
ω
bản than nó là
chuỗi các bít 0 và 1, tạo ra chuỗi e(
ω
) đơn giản. Nó bắt đầu bởi 2 bít 11. Nếu 2 kí
tự 0 và 1 là ai và aj, tương ứng trong bảng chữ cái S, mỗi bít 0 trong
ω
được mã
hóa bằng 0i+1 và mỗi bít 1 bằng 0j+1, mỗi chuỗi theo sau bởi 1 bít 1. Ví dụ,
00101 trở thành 110i+110i+110j+110i+110j+11. Sau đó T1 bỏ chuỗi
ω
e(
ω
) trên

băng, nó dừng với đầu băng trên hình vuông bít 0.
Nhóm thực hiện : nhóm 7 trang 8
Tiểu luận: Lý thuyết Tính toán GVHD: PGS.TS Phan Huy Khánh
.3 Liệt kê một số ngôn ngữ đệ quy
Một công cụ mạnh mẽ trong việc chứng minh ngôn ngữ thuộc về trong vòng thứ
hai của hình. 9.2 (tức là, RE, nhưng không đệ quy) là xem xét bổ sung của ngôn ngữ.
Chúng ta sẽ thấy rằng các ngôn ngữ đệ quy được đóng cửa được bổ trợ. Như vậy, nếu
một ngôn ngữ L được RE, nhưng L, bổ sung của L, không phải là RE, sau đó chúng tôi
Tại sao "đệ quy"?
Các lập trình viên ngày nay đã quen thuộc với các chức năng đệ quy. Tuy nhiên,
những chức năng tái diễn dường như không có bất cứ điều gì để làm với máy Turing mà
luôn luôn ngăn chặn. Tệ hơn nữa, ngược lại - không đệ quy đề cập đến ngôn ngữ mà
không thể được công nhận bởi bất kỳ thuật toán, nhưng chúng tôi đã quen với suy nghĩ
"không đệ quy" như để tính toán đơn giản như vậy không có nhu cầu cho các cuộc gọi
chức năng đệ quy
Thuật ngữ "đệ quy" như một từ đồng nghĩa với đi học Toán như hiện hữu trước
khi đến các máy tính. dựa trên đệ quy (nhưng không phải lặp đi lặp lại hoặc vòng) thường
được sử dụng như là một khái niệm về tính toán. Những ký hiệu, mà chúng ta sẽ không
bao gồm ở đây, đã có một số hương vị của tính toán trong chương trình chức năng ngôn
ngữ như LISP hay ML. Trong ý nghĩa đó, nói một vấn đề đã được "đệ quy" có ý nghĩa
tích cực đó chính là ý nghĩa thực của thuật ngữ ngày hôm nay "nó là đủ đơn giản mà tôi
có thể viết một hàm đệ quy để giải quyết nó, và chức năng luôn luôn kết thúc." , kết nối
với máy Turing.
Biết L không thể được đệ quy. Nếu L là đệ quy, sau đó L cũng sẽ được đệ quy và
do đó chắc chắn RE. Bây giờ chúng ta chứng minh tài sản này đóng cửa quan trọng của
ngôn ngữ đệ quy.
M Accept-~~~
Reject —
Định lý 9.3 Nếu L là một ngôn ngữ đệ quy, như vậy là L.
Nhóm thực hiện : nhóm 7 trang 9

Tiểu luận: Lý thuyết Tính toán GVHD: PGS.TS Phan Huy Khánh
PROOF: Let L = L (M) đối với một số M TM mà luôn luôn tạm dừng. Chúng tôi xây
dựng một M TM L = L (M) bằng cách xây dựng đề nghị trong hình. 9.3. Đó là, M cư xử
giống như M. Tuy nhiên, M được sửa đổi như sau để tạo ra M:
Liệt kê một tập hợp nghĩa là liệt kê từng phần tử một. Do đó, nếu nói rằng
một tập hợp là có thể liệt kê được thì nghĩa là có một thuật toán cho việc liệt kê
nó. Thật vậy, chúng ta có thể sử dụng ý tưởng này để tiến đến cân bằng việc mô tả
tính chất của liệt kê đệ qui và các ngôn ngữ đệ qui. Chúng ta bắt đầu bằng việc mô
tả một cách chính xác việc 1 máy turing liệt kê một ngôn ngữ như thế nào. Thật
thuận tiện để sử dụng máy với tối thiểu 2 băng, mà 1 trong số đó được chỉ định bởi
băng ra.
Hình 9.3: Xây dựng một TM chấp nhận bổ sung của một ngôn ngữ đệ quy
Kể từ khi M để ngăn chặn, chúng ta biết rằng M cũng được bảo đảm để ngăn chặn. Hơn
nữa, M chấp nhận chính xác những chuỗi mà M không chấp nhận. Vì vậy M chấp nhận
L. □
Có một thực tế quan trọng khác về bổ sung ngôn ngữ Ther lông ¬ hạn chế trong sơ đồ
của hình. 9.2 một ngôn ngữ và bổ sung của nó có thể rơi. Chúng tôi nhà nước hạn chế này
trong các định lý tiếp theo.
Định lý 9,4: Nếu L một ngôn ngữ và bổ sung của nó RE, sau đó L là đệ quy. Lưu
ý rằng sau đó bởi lý 9,3, L là đệ quy là tốt.PROOF: chứng minh được đề xuất bởi hình.
9.4. Hãy L = L {M {) và L = ¿(M2). Cả M \ và M2 là mô phỏng song song M. TM Chúng
tôi có thể làm cho M TM hai băng, và sau đó chuyển đổi nó một TM một băng, để làm
cho các mô phỏng dễ dàng và rõ ràng. Một băng của M mô phỏng băng của Mi, trong khi
các băng khác của M mô phỏng băng của M2. Các tiểu bang của Mi và M2 là mỗi thành
phần của nhà nước.
Nhóm thực hiện : nhóm 7 trang 10


*
Tiểu luận: Lý thuyết Tính toán GVHD: PGS.TS Phan Huy Khánh

Định nghĩa 1: Gọi T là một máy turing k-băng, k>=2, L . Ta nói rằng
T liệt kê L nếu nó tiến hành để các điều kiện theo sau thỏa mãn.
- Đầu băng ở băng thứ nhất không bao giờ di chuyển về bên trái.
- Tại mỗi điểm trong toán tử của T, băng 1 có nội dung :
x
1
# x
2
# x
n
# y
nơi mà n>=0, với mỗi x
i
L, x
i
’ là phân biệt, và y là tiền tố của nhân tử L
- Với mỗi x L, x sẽ xuất hiện như 1 trong những chuỗi x
i
trên băng
1.
Nếu L là một ngôn ngữ hạn chế, máy turing trong định nghĩa cũng có thể dừng khi
tất cả các phần tử của L xuất hiện trong băng 1, hoặc nó có thể tiếp tục di chuyển
mà không có in bất kỳ chuỗi nào trong băng 1. Nếu L vô hạn, T tiếp tục di chuyển
mãi mãi. Định nghĩa rõ ràng là một cách hợp lý để tính toán ý tưởng của T “liệt kê
phần tử của L”.
Như chúng ta đã định nghĩa, một ngôn ngữ là liệt kê đệ qui nếu nó có thể
chấp nhận bởi một máy turing nào đó. Vì những đề nghị thuật ngữ, một mô tả tính
chất cân bằng là ngôn ngữ có thể được liệt kê bởi một máy turing nào đó. Mặc dù
ý tưởng gốc thì đơn giản, một sự chỉ dẫn đưa ra một ít sẽ tinh tế hơn xuất hiện lần
đầu tiên.

Mặt khác, nếu chúng ta có một máy T liệt kê L, rồi cho vào một chuỗi x, ta
có thể cố gắng kiểm tra x cho các phần tử lân cận trong L bằng cách đợi x xuất
hiện trong băng ra T. Một máy turing T
1
có thể thực hiện chiến lược này bảo đảm
chấp nhận L bởi vì nếu chuỗi x trong L xuất hiện, và nếu nó không phải (để máy
turing lặp mãi mãi, trừ khi L có hạn).
Mặt khác, nếu T là một máy turing chấp nhận L, rồi liệt kê, ta bắt đầu với
một vài tiêu chuẩn nào đó đặt sẵn trong tất cả các chuỗi trong , như là trật tự
hợp quy được giới thiệu trong đoạn 9.6. Trong trật tự này, chuỗi ngắn đi trước
chuỗi dài, và chuỗi cùng độ dài đi theo bảng chữ cái (đạt đến trật tự lúc đầu nào
đó, nó không có ý nghĩa với cái nào, trong các kí hiệu trong ). Chúng ta xem tất
cả các chuỗi, trong trật tự này, và mỗi chuỗi x, ta thử quyết định dù cho bao gồm x
Nhóm thực hiện : nhóm 7 trang 11



*


Tiểu luận: Lý thuyết Tính toán GVHD: PGS.TS Phan Huy Khánh
trong việc liệt kê bằng cách sử dụng T để xác định với mọi x L. Đây là nơi các
đối số cần tinh xảo hơn : T có lẽ lặp vô tận trong đầu vào x. Sự xây dựng bằng
chứng chính thức sẽ có thể nắm được vấn đề.
Lý thuyết 1: Một ngôn ngữ L


*
là liệt kê đệ qui (Ví dụ, có thể chấp nhận
bởi một máy turing nào đó) nếu và chỉ nếu L có thể được liệt kê bởi một máy

turing nào đó.
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 với nhiều băng hơn T, băng 1 là băng thêm phục vụ cho băng đầu
vào. Máy turing T
1
bắt chước T, ngoại trừ mỗi thời gian # được viết trên băng 2,
việc bắt chước T dừng trong khi T
1
đang so sánh chuỗi ra của nó với chuỗi liệt kê
trước #. Nếu 2 chuỗi phù hợp, T
1
dừng. Rõ ràng rằng T
1
chấp nhận 1 cách chính
xác những chuỗi tạo ra trên băng 2, cái mà có được phần tử của L.
Chính xác hơn, T
1
có thể hợp nhất chuyển tiếp T nguyên vẹn, xử lý các
băng hơn băng 1 vì các băng của T và lờ đi băng 1, với thay đổi sau : Mỗi sự
chuyển tiếp bao gồm viết # trên băng 2 được thay thế bởi trình tự chuyển tiếp
trong các băng hơn băng 1 và 2 bị lờ đi, chuỗi vào được so sánh với chuỗi trước
dấu # trên băng 2, và nếu nó không phù hợp, T
1
được trả lại cấu trúc mà kết quả có
từ chuyển tiếp ban đầu.
Ngược lại, giả sử T chấp nhận L, ta xây dựng một máy T
1
3 băng liệt kê L.

Băng 1 là băng ra, băng 2 được dùng bởi T
1
cho các chuỗi tạo nên trong

*
,
băng 3 là băng T
1
dùng cho bắt chước hành động của T trong mỗi chuỗi tạo ra.
Để tránh khó khăn trong việc thảo luận chính xác, T
1
bắt chước tuần tự giới
hạn dài hơn của việc di chuyển T, hơn là cố gắng thực hiện truy cập T trong chuỗi
đơn để làm cho xong. Về lý do này, băng 2 không những lưu các chuỗi tạo ra, mà
số lượng di chuyển của T còn được thực hiện trên chuỗi.
Chúng ta nhận thứ tự trên

*
. Nếu
{ }

= ba,
, ví dụ, chuỗi được tạo ra
theo thứ tự :
Λ
, a, b, aa, ab, ba, bb, aaa, aab, …, bbb, aaaa, aaab….
Nhóm thực hiện : nhóm 7 trang 12
Tiểu luận: Lý thuyết Tính toán GVHD: PGS.TS Phan Huy Khánh
Máy turing T
1

tạo một loạt dãy. Trong dãy 1, T
1
tạo ra chuỗi
Λ
và bắt chước di
chuyển của T ở đầu vào đó. Trong dãy 2, T
1
bắt chước 2 bước của T trong đầu vào
Λ
, rồi tạo ra a và bắt chước một bước trong đầu vào đó. Ở dãy 3, T
1
bắt chước 3
bước trên
Λ
, 2 trên a, và 1 trên b. Sau dãy hoàn tất thứ I, băng 2 giống thế này :
Khi x là chuỗi thứ i trong trật tự. Trong suốt dãy tiếp theo, T
1
tiến hành mỗi
chuỗi I trên băng 2 bằng cách thêm vào phần phụ 1 sau nó, sao chép chuỗi vào
trong băng3, bắt chước T mà chuỗi vào dành cho các bước được chỉ định, xóa
băng 3. Nếu việc bắt chước dừng lại, T
1
sao chép chuỗi đó vào trong băng 1 và
theo sau nó là dấu #. Băng cuối cùng trong dãy được tạo ở cuối băng 2 ở phần tử
tiếp theo của

*
(cái đến sau x), đặt 1 phần tử đơn 1 sau nó, và bắt chước 1 bước
của T ở đầu vào.
Ta không chỉ ra rõ ràng thiết bị giữ chỗ mà T cần để thực hiện các bước

này, tuy nhiên, chúng rất dễ hiểu. Rõ ràng rằng mỗi chuỗi được chấp nhận bởi T
được liệt kê trong băng 1 và không có chuỗi nào khác được liệt kê.
Ở phần 2 của Lý thuyết 10.5, bạn nên lưu ý mặc dù các chuỗi trong

*
được tạo ra theo trật tự trong băng 2, chuỗi trong L, nhìn chung, không được liệt
kê trật tự đó trong băng 1. Với sự cố gắng mạnh mẽ về T, tuy nhiên, xây dựng đơn
giản trước phát biểu lý thuyết có thể thực hiện mà không có sự rắc rối. Sự cố gắng
mạnh về T chẳng khác gì cố gắng trong L, không những liệt kê đệ qui, mà còn đệ
qui. Ngược lại, nó cũng dễ chỉ ra rằng máy turing liệt kê L theo trật tự, L phải là
đệ qui. Chúng ta phát biểu kết quả chính thức dưới đây và để chứng minh cho bài
tập.
Nhóm thực hiện : nhóm 7 trang 13
  
1 1 111 111 11
21
∆∆∆∆∆∆∆∆∆
−−
xba
iii
Tiểu luận: Lý thuyết Tính toán GVHD: PGS.TS Phan Huy Khánh
Phần II: BÀI TẬP
1. Nội dung bài tập
Viết chương trình của một máy RAM chuẩn và RAM thô sơ kiểm tra một số
nguyên n cho trước có phải là số lẻ (ghi lên băng ra kết quả 1) hay một số chẵn
(ghi lên băng ra kết qủa 0).
2. Chương trình
a. Chương trình của máy RAM chuẩn:
- Giải thuật
- Nhập vào số nguyên N cho ACC

- Nếu Acc là số âm thì chuyển đổi n thành số nguyên dương
- Trong khi Acc>=0 thì giảm giá trị ACC đi 2 đơn vị ( ACC=ACC-2)
- kết thúc vòng lặp ACC sẽ nhận 1 trong hai giá trị là 0 hoặc -1
- gán ACC=ACC*(-1) (đổi ACC thành nguyên dương)
- ACC =0 (n là số lẻ )
- ACC =1 (n là số chẵn)
- Biểu diễn bằng ngôn ngữ Pascal
Mã lệnh Chú thích
Begin
Read (n);
If n<0 then
N=n*-1;
While n>0 do
N:=n-2;
If n<>0 then
N=n*(-1) ;
Write (n);
End;
nhập số nguyên n
đổi n thành số dương nếu n âm
giảm n, 2 đơn vị cho đến khi n<=0
n sẽ nhận 1 trong 2 giá trị (0 hoặc -1)
đổi n thành số nguyên nếu n=-1
n kết quả (quy ước n=0 : số chẵn
n=1 : số lẻ)
- Chương trình máy RAM chuẩn
Nhóm thực hiện : nhóm 7 trang 14
Tiểu luận: Lý thuyết Tính toán GVHD: PGS.TS Phan Huy Khánh
Load A:2 ACC  2
Store 1 R1  <ACC> ; Lưu 2 vào R1

Load A:-1 ACC -1
Store 2 R2  <ACC> ; Lưu -1 vào R2
LOAD A:n ACC  N
JGTz Lap Kiểm tra <ACC>=0
MULT 2 ACC  <ACC> * <2> ; ACC=ACC*(R2)
Lap:
SUB 1 ACC <ACC> - <1> ; ACC=ACC - (R1)
JZERO Kq ;Kiểm tra ACC=0
JGTz Lap ; Kiểm tra ACC>=0
Kq:
MULT 2 ACC <ACC>*<2> ; Chuyển ACC thành
nguyên dương
STORE 1 R1  <ACC> ; ACC nhận 1 trong hai
giá trị
0 : n

số chẵn; 1 : n

số lẻ
WRITE 1 ghi nội dung <R1>
HALT Dừng máy
b. Chương trình của máy RAM thô sơ:
- Giải thuật
• Đọc số nguyên N vào thanh ghi R1
• Đặt nội dung thanh ghi R2 là 0
• Đặt nội dung thanh ghi R3 là 1
• Kiểm tra giá trị của R1
+ Nếu khác 0 thì thì hoán đổi giá trị của các thanh ghi R2, R3
+ Giảm bớt 1 nội dung của thanh ghi R1
Nhóm thực hiện : nhóm 7 trang 15

Tiểu luận: Lý thuyết Tính toán GVHD: PGS.TS Phan Huy Khánh
+ Kiểm tra giá trị của R1, nếu khác không thì lạp lại, ngược lại thì
kết thúc lặp
• Đọc giá trị của thanh ghi R2 (0: số chẵn, 1 là số lẻ)
• Dừng máy
- Biểu diễn bằng ngôn ngữ pascal
Mã lệnh Chú thích
Begin
Read (n);
R1=n; R2=0; R=1;
While R1<>0 do
Begin
K:=R2;
R2:=R3;
R3:=K;
R1:=R1-1;
End;
Write (R2);
End;
nhập số nguyên n
đọc giá trị vào các thành ghi R1,R2,R3
Hoán đổi giá trị của R2 và R3
Giám R1 đi 1 đơn vị
R2: kết quả (0: N là số chẵn, 1: N là số
lẻ)
- Chương trình máy RAM thô sơ
1: LOAD A: n
2: STORE 1 Đọc số nguyên n vào R1
3: LOAD A : 0
4: STORE 2 Đọc 0 vào R2

5: LOAD A : 1
6: STORE 3 Đọc 1 vào R2
7: J < 1> (11,8) Nếu nội dung của R1 là 0 thì nhảy đến nhãn
11, ngược lại thì nhảy đến
nhãn 8
Nhóm thực hiện : nhóm 7 trang 16
Tiểu luận: Lý thuyết Tính toán GVHD: PGS.TS Phan Huy Khánh
8: S < 2, 3 > Hoán đổi nội dung của thanh ghi 2,3
(R2,R3)
9: D <1> Giảm bớt 1 nội dung thanh ghi R1
10: J < 1 > ( 11 , 8 ) Nếu nội dung của R1 là 0 thì nhảy đến nhãn
11, ngược lại thì nhảy đến nhãn 8
11: LOAD 2
12: WRITE 2 Ghi R2 lên băng
13: HALT
Nhóm thực hiện : nhóm 7 trang 17
Tiểu luận: Lý thuyết Tính toán GVHD: PGS.TS Phan Huy Khánh
KẾT LUẬN
Qua quá trình nghiên cứu bài giảng của thầy giáo PGS.TS Phan Huy Khánh
và các tài liệu liên quan để áp dụng thực hiện bài tiểu luận nhóm này, chúng tôi đã
hiểu được rõ thêm bản chất của môn Lý thuyết tính toán, nhất là các ngôn ngữ
hình thức, ngôn ngữ đệ quy và đệ quy đếm được. 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
Nội dung tiểu luận đã khái quát sơ lược lý thuyết tính toán, lý thuyết đệ
quy, quy trình máy Turing, chương trình máy Ram…
Tuy nhóm đã cố gắng nghiên cứu đề tài nhưng không sao tránh khỏi nhiều
điều sai sót. Kính mong Thầy giáo và các bạn đóng góp ý kiến để bài tập nhóm
càng hoàn thiện hơn. Xin chân thành cảm ơn!
Nhóm thực hiện : nhóm 7 trang 18
Tiểu luận: Lý thuyết Tính toán GVHD: PGS.TS Phan Huy Khánh

TÀI LIỆU THAM KHẢO

[ 1 ] Phan Huy Khánh, Giáo trình Lý thuyết tính toán, Đại học Đà Nẵng
1999.
[ 2 ] Phan Huy Khánh, Lý thuyết ngôn ngữ hình thức và ôtômat, Đại học Đà
Nẵng 1997.
[ 3 ] J.C. Martin, Introduction to Languages and the Theory of Computation,
The Mac Graw - Hill Companies, Inc 1997.
Nhóm thực hiện : nhóm 7 trang 19

×