Tôi biết rằng có Turing Machine, nếu một chức năng có thể tính toán được. Vậy thì làm thế nào để chỉ ra rằng chức năng này không thể tính toán được hoặc không có Máy Turing nào cho việc đó. Có bất cứ điều gì như một bổ đề bơm?
Tôi biết rằng có Turing Machine, nếu một chức năng có thể tính toán được. Vậy thì làm thế nào để chỉ ra rằng chức năng này không thể tính toán được hoặc không có Máy Turing nào cho việc đó. Có bất cứ điều gì như một bổ đề bơm?
Câu trả lời:
Trước khi tôi trả lời câu hỏi chung của bạn, trước tiên tôi hãy lùi lại một bước, đưa ra một số nền tảng lịch sử và trả lời một câu hỏi sơ bộ: Các hàm không tính toán có tồn tại không?
[ghi chú công chứng: chúng ta có thể liên kết bất kỳ hàm với ngôn ngữ và sau đó thảo luận về tính quyết định của thay vì khả năng tính toán của ]
Có một số ngôn ngữ mà không máy Turing nào có thể quyết định. Đối số rất đơn giản: có "chỉ" có rất nhiều khác nhau, nhưng vô số ngôn ngữ khác nhau . Do đó, có nhiều nhất ngôn ngữ có thể quyết định và phần còn lại (vô cùng nhiều) là không thể giải quyết được. Đọc thêm:
Để đặt bàn tay của chúng tôi vào một ngôn ngữ không thể xác định cụ thể, ý tưởng là sử dụng một kỹ thuật có tên là đường chéo (Georg Cantor, 1873) ban đầu được sử dụng để chỉ ra rằng có nhiều số thực hơn số nguyên, hay nói cách khác, đó là .
Ý tưởng xây dựng ngôn ngữ không thể giải quyết đầu tiên rất đơn giản: chúng tôi liệt kê tất cả các máy Turing (có thể vì chúng có thể đếm được!) Và tạo một ngôn ngữ không đồng ý với mỗi TM trên ít nhất một đầu vào.
Ở trên, mỗi hàng là một TM và mỗi cột là một đầu vào. Giá trị của ô là 0 nếu TM từ chối hoặc không bao giờ tạm dừng và 1 nếu TM chấp nhận đầu vào đó. Chúng tôi định nghĩa ngôn ngữ sao cho chứa đầu vào thứ khi và chỉ khi -th TM không chấp nhận đầu vào đó.D i i
Theo bảng trên, kể từ khi chấp nhận . Tương tự, , nhưng vì không chấp nhận .M 1 ε 0 ∉ D 1 ∈ D M 3 1
Bây giờ, giả sử quyết định và tra cứu dòng trong bảng: nếu có trong cột thứ , thì chấp nhận đầu vào đó nhưng không nằm trong và nếu có ở đó, đầu vào nằm trong nhưng không chấp nhận nó. Do đó, không quyết định và chúng tôi đã đạt được mâu thuẫn. D1 k M k D 0 D M k M k D
Bây giờ cho câu hỏi của bạn. Có một số cách để chứng minh rằng một ngôn ngữ là không thể giải quyết được. Tôi sẽ cố gắng chạm vào những cái phổ biến nhất.
Phương pháp đầu tiên, là trực tiếp chỉ ra rằng một ngôn ngữ là không thể giải quyết được, bằng cách chỉ ra rằng không có TM nào có thể quyết định ngôn ngữ đó. Điều này thường sử dụng theo phương pháp đường chéo được hiển thị ở trên.
Thí dụ.
Cho thấy rằng (bổ sung của) ngôn ngữ đường chéo là không thể giải quyết được.
Bằng chứng.
Giả sử là có thể quyết định và để là người quyết định. Có hai trường hợp: MD
Đôi khi chúng ta có thể sử dụng các thuộc tính đóng để hiển thị một số ngôn ngữ không thể quyết định được, dựa trên các ngôn ngữ khác mà chúng ta đã biết là không thể quyết định được.
Cụ thể, nếu không thể quyết định (chúng tôi viết ), thì phần bổ sung của nó là không thể giải quyết được: nếu có người quyết định cho chúng tôi có thể sử dụng nó để quyết định bằng cách chấp nhận bất cứ khi nào từ chối và ngược lại. Vì luôn dừng lại với một câu trả lời (nó là một người quyết định), chúng ta luôn có thể đảo ngược câu trả lời của nó.L ∉ R ¯ L M ¯ L L M M
Kết luận: Ngôn ngữ chéo là undecidable, . L D ∉R
Một đối số tương tự có thể được áp dụng bằng cách lưu ý rằng nếu cả và phần bù nó đều có thể liệt kê đệ quy, cả hai đều có thể quyết định được. Điều này đặc biệt hữu ích nếu chúng tôi muốn chứng minh rằng một ngôn ngữ không được liệt kê đệ quy, một thuộc tính mạnh hơn tính không thể thiếu.¯ L
Thông thường, thật khó để chứng minh trực tiếp rằng một ngôn ngữ là không thể giải quyết được (trừ khi nó được xây dựng theo kiểu "đường chéo"). Phương pháp cuối cùng và phổ biến nhất để chứng minh tính không ổn định là sử dụng một ngôn ngữ khác mà chúng ta đã biết là không thể giải quyết được. Ý tưởng là giảm ngôn ngữ này sang ngôn ngữ khác: để chỉ ra rằng nếu một ngôn ngữ có thể quyết định được thì ngôn ngữ kia cũng phải có thể quyết định được, nhưng một trong số chúng đã được biết là không thể giải quyết được dẫn đến kết luận rằng ngôn ngữ đầu tiên cũng không thể giải quyết được. Đọc thêm về giảm trong "Các kỹ thuật phổ biến để giảm các vấn đề với nhau là gì?" .
Thí dụ.
Chứng tỏ rằng ngôn ngữ đường chéo là không thể giải quyết được.
Bằng chứng.
Chúng tôi biết rằng là không thể giải quyết được. Chúng tôi giảm thành (cái này được ký hiệu là ), nghĩa là, chúng tôi cho thấy rằng nếu có thể quyết định được thì chúng tôi có thể sử dụng công cụ quyết định của nó để quyết định , đó là một mâu thuẫn.L D H P L D ≤ H P H P L D
Việc giảm này hoạt động bằng cách chuyển đổi một ứng cử viên cho (nghĩa là đầu vào cho bất kỳ người quyết định / người chấp nhận tiềm năng nào cho ) thành một ứng cử viên cho sao cho khi và chỉ khi . Chúng tôi đảm bảo rằng chuyển đổi này là có thể tính toán được. Do đó, việc quyết định cho chúng ta biết liệu hay không , vì vậy nếu chúng ta có thể quyết định HP, chúng ta cũng có thể quyết định .¹L D L D w ' H P w ∈ L D w ' ∈ H P w ' w ∈ L D L D
Việc chuyển đổi như sau. Lấy một số và xuất ra , ² trong đó là một TM hoạt động giống như , nhưng nếu từ chối, thì sẽ đi thành một vòng lặp vô hạn.w ' = ⟨ M ' , ⟨ M ⟩ ⟩ M ' M M M '
Hãy xem thỏa mãn các yêu cầu.
Nếu , điều đó có nghĩa là tạm dừng và chấp nhận đầu vào . Do đó, cũng tạm dừng và chấp nhận đầu vào . Do đó, .
Mặt khác, nếu thì sẽ từ chối hoặc không bao giờ tạm dừng trên . Trong cả hai trường hợp, sẽ đi vào một vòng lặp vô hạn trên . Do đó, w ∈ L D M ⟨ M ⟩ M ' ⟨ M ⟩ ⟨ M ' , ⟨ M ⟩ ⟩ ∈ H P w ∉ L D M ⟨ M ⟩ M ' ⟨ M ⟩ ⟨ M ' , ⟨ M ⟩ ⟩ ∉ H P w ∈ L D w ' ∈ H P
, Và chúng tôi đang thực hiện cho thấy rằng nếu và chỉ nếu , và do đó chỉ ra rằng .
Đọc thêm: nhiều ví dụ về việc giảm và chứng minh tính không ổn định của ngôn ngữ có thể được tìm thấy thông qua thẻ rút gọn.
Có một số hạn chế hơn về việc giảm để có hiệu lực. Bản thân việc chuyển đổi phải được tính toán và được xác định rõ ràng cho mọi đầu vào.
Một đầu vào của trông giống như , trong đó là một TM và là một chuỗi. Vì vậy, ở đây chúng tôi chọn chuỗi là mã hóa của máy , đây chỉ là một chuỗi ..⟨ M , x ⟩ M x x M
"Vì vậy, mỗi khi chúng tôi muốn chứng minh là không thể giải quyết được, chúng tôi cần giảm (hoặc ) cho nó? Không có phím tắt nào sao?"L D H P
Vâng, trên thực tế, có. Đây là Định lý của Rice .
Định lý nói rằng nhiều ngôn ngữ có cấu trúc nhất định, là không thể giải quyết được. Bởi vì tất cả các ngôn ngữ này có cấu trúc nhất định này, chúng tôi có thể thực hiện giảm một lần và áp dụng nó cho bất kỳ ngôn ngữ nào thừa nhận cấu trúc tương tự.
Định lý được chính thức nêu theo cách sau,
Định lý (Gạo). Với một thuộc tính , ngôn ngữ sau là không thể giải quyết được L S = { ⟨ M ⟩ | L ( M ) ∈ S }
Tập là tập hợp con của các ngôn ngữ trong ; chúng tôi gọi nó là một tài sản bởi vì nó mô tả một thuộc tính của ngôn ngữ được chấp nhận . Tất cả các TM có ngôn ngữ thỏa mãn tính chất này thuộc về .R E L ( M ) L S
Chẳng hạn, có thể là thuộc tính mà ngôn ngữ được chấp nhận chứa chính xác hai từ:L ( M )
L S 2 L S 2 = { ⟨ M ⟩ | L ( M ) ∈ S } = { ⟨ M ⟩ | | L ( M ) | = 2 } .
Trong trường hợp này là tập hợp tất cả các TM có ngôn ngữ bao gồm chính xác hai từ:
Thuộc tính có thể rất đơn giản, nhưng nó không thể là tất cả các ngôn ngữ RE hoặc không có ngôn ngữ RE nào. Nếu hoặc thì thuộc tính được coi là tầm thường và cảm ứng là có thể tính toán được. Một ví dụ cho một đơn giản là một ngôn ngữ chỉ chứa một ngôn ngữ duy nhất, giả sử . Lưu ý rằng mặc dù chỉ chứa một ngôn ngữ duy nhất, nhưng có vô số máy có ngôn ngữ là , vì vậy là vô hạn và không thể giải quyết được.S = R E L S S S c o m p l e t e = { Σ ∗ } S M Σ ∗ L S c o m p e t e
Định lý này rất mạnh để chứng minh tính không ổn định của nhiều ngôn ngữ.
Thí dụ.
Ngôn ngữ , là không thể giải quyết được
Bằng chứng.
Chúng ta có thể viết là , đó là cho thuộc tính . Đây là một thuộc tính không tầm thường (bao gồm ngôn ngữ , nhưng không bao gồm, ví dụ, ngôn ngữ . Do đó, theo Định lý của Rice, là không thể giải quyết được.
Bây giờ chúng ta chứng minh định lý. Như đã đề cập ở trên, chúng tôi sẽ hiển thị giảm từ xuống (đối với bất kỳ không tầm thường tùy ý ).
Bằng chứng.
Đặt là một thuộc tính không tầm thường, . Chúng tôi hiển thị , nghĩa là chúng tôi giảm xuống để nếu chúng tôi có thể quyết định chúng tôi sẽ có thể quyết định (điều mà chúng tôi biết là không thể, do đó, không thể quyết định được). Trong giấy tờ chứng minh dưới đây chúng ta giả định rằng ngôn ngữ có sản phẩm nào không phải là một phần của , đó là . (nếu ngôn ngữ trống ở , một bằng chứng tương đương hoạt động trên thuộc tính bổ sung , tôi sẽ bỏ qua các chi tiết). Kể từlà không cần thiết, nó bao gồm ít nhất một ngôn ngữ; hãy gọi ngôn ngữ đó là và giả sử là máy chấp nhận (máy đó tồn tại, vì chỉ bao gồm các ngôn ngữ trong RE).
Hãy nhớ lại rằng trong phần giảm như vậy (Xem phần 3 ở trên), chúng ta cần chỉ ra cách chuyển đổi đầu vào cho thành đầu vào cho sao cho
Đặt , chúng tôi chuyển đổi nó thành trong đó mô tả của máy (trên đầu vào ) là như sau:w ' = ⟨ M ' ⟩ M ' x '
Chúng tôi thấy rằng chuyển đổi này là hợp lệ. Đầu tiên lưu ý rằng thật đơn giản để xây dựng mô tả của cho . w = ( ⟨ M ⟩ , x )
Nếu , thì dừng trên . Trong trường hợp này, tiến hành bước 2 và hành xử giống như . Do đó ngôn ngữ được chấp nhận của nó là . Do đó, .
Nếu thì vòng trên . Trường hợp này, vòng trên bất kỳ đầu vào - nó bị mắc kẹt ở bước 1. Ngôn ngữ được chấp nhận bởi trong trường hợp này là trống rỗng, . Do đó, .M x M ' M 0 L ( M ' ) = M 0 ∈ S w ' = ⟨ M ' ⟩ ∈ L S w ∉ H P
x M ' x ' M ' L ( M ' ) = ∅ ∉ S w ' = ⟨ M ' ⟩ ∉ L S
Định lý gạo cho chúng ta một cách dễ dàng để chứng minh rằng một ngôn ngữ nhất định thỏa mãn tính chất nhất định là không thể quyết định, có nghĩa là, . Phiên bản mở rộng của định lý Rice cho phép chúng ta xác định liệu ngôn ngữ có được đệ quy hay không, nghĩa là xác định xem , bằng cách kiểm tra xem thỏa mãn một số thuộc tính bổ sung hay không.L ∉ R L ∉ R E L
Định lý (Gạo, mở rộng). Với một thuộc tính , ngôn ngữ có thể được liệt kê đệ quy ( ) khi và chỉ khi cả ba câu lệnh sau cùng kết hợp giữ
- Đối với bất kỳ hai , nếu và cũng sau đó cũng .
- Nếu sau đó tồn tại một tập con hữu hạn để .
- Tập hợp tất cả các ngôn ngữ hữu hạn trong là vô số (nói cách khác: có một TM liệt kê tất cả các ngôn ngữ hữu hạn ).
Bằng chứng.
Đây là một định lý "nếu và chỉ nếu" và chúng ta nên chứng minh cả hai hướng của nó. Đầu tiên, chúng tôi cho thấy rằng nếu một trong các điều kiện (1,2,3) không giữ thì . Sau đó, chúng tôi sẽ chỉ ra rằng nếu cả ba điều kiện giữ đồng thời, thì .
Nếu (1,2) giữ, nhưng (3) không, thì .
Giả sử rằng và chúng ta sẽ thấy rằng chúng ta có cách chấp nhận bất kỳ ngôn ngữ hữu hạn nào trong (và do đó, tập hợp tất cả các ngôn ngữ này là RE), do đó điều kiện (3) giữ và chúng ta đạt được mâu thuẫn . Làm thế nào để quyết định xem một hữu hạn có thuộc hay không? Dễ dàng - chúng tôi sử dụng mô tả của để xây dựng một máy chỉ chấp nhận các từ trong và bây giờ chúng tôi chạy máy của trên (hãy nhớ - chúng tôi giả sử , vì vậy có một máy chấp nhận!). Nếu thì và vì , máy của nó sẽ nói có trên đầu vào , và chúng ta đã hoàn thành.
Nếu (2,3) giữ, nhưng (1) không, thì .
Chúng tôi giả định rằng và chúng tôi sẽ cho thấy rằng chúng tôi có cách để quyết định , dẫn đến mâu thuẫn.
Bởi vì điều kiện (1) không giữ, có một ngôn ngữ và một superset của nó, để . Bây giờ chúng ta sẽ lặp lại đối số được sử dụng trong Phần 4 để quyết định : đưa ra một đầu vào cho , chúng tôi xây dựng một máy có ngôn ngữ là if hay nói cách khác, ngôn ngữ của nó là . Sau đó, chúng ta có thể quyết định : hoặc dừng trên hoặc máy RE cho chấp nhận; chúng ta có thể chạy cả hai song song và được đảm bảo rằng ít nhất một cái sẽ dừng lại.
Hãy cho biết chi tiết về cách xây dựng (trên đầu vào ):
Tại sao điều này làm việc? Nếu thì 1.1 không bao giờ tạm dừng và chấp nhận chính xác tất cả các đầu vào đang được chấp nhận ở bước 1.2, vì vậy . Mặt khác, nếu thì, tại một số điểm, bước 1.1 dừng lại và chấp nhận chính xác . Có thể xảy ra rằng chấp nhận trước, nhưng vì , điều này không thay đổi ngôn ngữ của trong trường hợp này.
Nếu (1,3) giữ, nhưng (2) không, thì .
Một lần nữa, chúng tôi sẽ giả sử và cho thấy trở nên có thể quyết định, đó là một mâu thuẫn.
Nếu điều kiện (2) không giữ, thì với bất kỳ , tất cả các tập con hữu hạn của nó thỏa mãn (lưu ý rằng phải là vô hạn, vì ). Như ở trên, để quyết định cho một đầu vào nhất định , chúng tôi xây dựng một máy có ngôn ngữ là if và một số hữu hạn nếu không. Sự mâu thuẫn diễn ra theo cách tương tự như trên.
Cấu tạo của cỗ máy này khá giống với trước đây chúng tôi đã xây dựng. Máy (trên đầu vào ) không:
Nó giữ rằng, nếu , thì tại một số điểm, nói sau 1000 bước, dừng lại trên . Do đó, bước 1 sẽ tạm dừng (và từ chối) mọi đầu vào có độ dài . Do đó, trong trường hợp này, là hữu hạn . Cũng lưu ý rằng , và đặc biệt, bởi giả định của chúng tôi về sự vô hiệu của điều kiện (2), ta có .
Mặt khác, nếu , thì bước 1 không bao giờ dừng lại và chúng tôi không bao giờ từ chối ở bước 2. Trong trường hợp này, dễ dàng thấy rằng và trong Đặc biệt, .
Chúng ta còn lại để chỉ ra hướng khác của định lý mở rộng. Đó là, chúng ta cần chỉ ra rằng nếu tất cả các điều kiện (1,2,3) giữ, thì chúng ta có một TM chấp nhận , nghĩa là, . Nói cách khác, chúng ta cần hiển thị một máy sao cho với mọi đầu vào mà , máy chấp nhận đầu vào này, .
Đây là cách máy hoạt động (trên đầu vào ):
Tại sao nó hoạt động? Nếu thì nó có tập con hữu hạn và một khi xuất ra tập con đó, bước 2.2 / 2.3 sẽ thấy chấp nhận tất cả các từ trong ngôn ngữ đó và Chấp nhận.
Mặt khác, nếu nó không thể được chấp nhận tất cả những lời trong cho bất kỳ . Thật vậy, theo điều kiện (1), bất kỳ cũng ở , vì vậy nếu chấp nhận tất cả các từ trong cho một số , thì và do đó , trái lại.
Cuối cùng, lưu ý rằng sau đây là một hệ quả đơn giản (và rất hữu ích) ở trên:
Hệ quả (Gạo, kéo dài). Với một thuộc tính không tầm thường , do đó , ngôn ngữ không thể đếm được đệ quy, nghĩa là .
Một công cụ hữu ích là định lý Rice . Đây là những gì nó nói:
Đặt một tập hợp không đơn giản của các hàm unary tính toán một phần và một số thứ tự của Gôdel của . Sau đó, bộ chỉ số của
không được đệ quy.
Bạn thấy nó cũng được biểu thị dưới dạng mã hóa máy Turing (hoặc bất kỳ ngôn ngữ lập trình hoàn chỉnh Turing nào khác), tức là ; đây định nghĩa một số Gôdel.
Nghĩa là, bạn có thể sử dụng định lý Rice để chứng minh các tập hợp không đệ quy đó là các tập chỉ mục của các tập hợp hàm không tầm thường (hoặc có thể rút gọn thành ).
Lưu ý rằng có một phần mở rộng có thể được sử dụng để hiển thị rằng các bộ chỉ mục nhất định không được liệt kê đệ quy.
Hãy để một đánh số Gôdel. Hãy xem xét các tập hợp của Naturals
.
Bây giờ vì
Định lý của Rice có thể được áp dụng và không thể quyết định.
Vì nhiều người không quen thuộc với cách đánh số của Gôdel, lưu ý rằng ví dụ này hoạt động tốt về mặt máy Turing (tức là các chương trình) bằng cách sử dụng .
Hãy xem xét các tập hợp của Naturals
mà chắc chắn là không thể tính toán được Tuy nhiên, không phải là một chỉ mục được đặt cho bất kỳ ! Hãy đối với một số . Vì là một số thứ tự của Godel , nên có (vô số) với nhưng với tất cả giữ vì .P f = φ i i ∈ A φ j ≠ i φ j = f j ∉ A f ( 2 ) = i ≠ j
Hãy cảnh giác với điều này! Theo nguyên tắc thông thường, nếu chỉ mục của hàm được sử dụng ở "phía bên tay phải" hoặc làm tham số của hàm trong định nghĩa tập hợp, thì có khả năng đó không phải là tập chỉ mục. Bạn có thể cần thuộc tính của đánh số Gôdel và định lý điểm cố định để chỉ ra rằng một tập hợp không có tập chỉ mục.
Xem ở đây và ở đây cho các bài viết liên quan về định lý Rice.