Tiểu luận Lý thuyết Tính toán
Trang 1MỤ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
Trang 2LỜ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
Trang 3Phầ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
Trang 4Ở đ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
Trang 5mộ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
Trang 6e(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
Trang 7SA 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 0k1 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ị
Trang 8hỏ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
Trang 9.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
Trang 10PROOF: 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
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
Trang 11Đị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 :
x1 # x2 # xn # y
nơi mà n>=0, với mỗi xi L, xi’ 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 xi 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 T1 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
∈
∈
∑*
∑