Ý nghĩa của định lý Rice


8

Mỗi lần tôi nghĩ rằng tôi hiểu định lý của Rice nghĩa là gì, tôi lại tìm thấy một ví dụ để làm tôi bối rối. Có lẽ ai đó có thể cho tôi biết tôi đang nghĩ sai ở đâu.

Hãy lấy một số thuộc tính không tầm thường của tập hợp các hàm tính toán, ví dụ: hãy để . Rõ ràng, là đếm được vô hạn và cũng có một số đếm được vô hạn của các chức năng tính toán không trong L .L={f:NN|f is a computable and total function}LL

Bây giờ, hãy xem xét một ngôn ngữ lập trình hoàn chỉnh đầy đủ qua một tập lệnh hữu hạn Σ và tập hợp các chương trình đúng về mặt cú pháp PΣ , với |P|=|N|. Nếu tôi có thể chọn ngữ nghĩa của ngôn ngữ của mình theo ý muốn, tôi cũng có thể đánh số các chương trình theo ý muốn và do đó có thể thiết kế một ngôn ngữ lập trình trong đó một số tập hợp con của chương trình tính toán chính xác một số tập hợp con tùy ý của các hàm tính toán, như miễn là phù hợp với cardinality. Ví dụ: hãy để Ppal={wΣ|w is a palindrome} và mỗi chương trình pPpal tính tổng một hàm. Vì |Ppal|=|L|, một ngôn ngữ như vậy nên tồn tại.

Tuy nhiên, isPalindrome(w) rõ ràng là có thể tính toán được và vì isPalindrome(w)isTotal(w) , do đó, chúng tôi sẽ có một chương trình quyết định tính chất không tầm thường L , không thể thực hiện được theo định lý của Rice.

Đâu là lỗi trong suy luận của tôi? Điều này có nghĩa là không có ngôn ngữ lập trình trong đó mỗi chương trình palindromic (hay đúng hơn là bất kỳ cấu trúc tính toán nào ) sẽ tính toán chính xác tổng số hàm (hay đúng hơn là bất kỳ tập hợp các hàm tính toán nào)? Điều này thực sự làm tôi bối rối.


2
Từ tất cả các ý kiến ​​của bạn, dường như với tôi rằng bạn không thực sự hiểu được tính toán là gì. Kiểm tra bạn định nghĩa về khả năng tính toán; đảm bảo bạn hiểu máy Turing phổ dụng là gì và hoạt động như thế nào; hãy chắc chắn rằng bạn hiểu các điểm tốt của bảng liệt kê, đặc biệt là bảng liệt kê của Godel (với tài sản smn!). Định lý của Rice rất đơn giản một khi những điều cơ bản được hiểu, nhưng nó có rất ít ý nghĩa ... bất cứ điều gì bạn đang cố gắng làm, là cảm giác ruột của tôi.
Raphael

Câu trả lời:


6

Điều bạn quên là tất cả các ánh xạ bạn sử dụng phải được tính toán. Khi bạn tuyên bố rằng các số chính phù hợp đảm bảo sự tồn tại của ánh xạ, điều đó có thể đúng, nhưng ánh xạ khó có thể tính toán được, chính xác bởi vì điều đó sẽ cho phép bạn có một mâu thuẫn với định lý Rice. Trong khả năng tính toán (ít nhất là đối với những gì tôi biết về nó), mọi thứ đều hữu hạn hoặc vô hạn. Vì vậy, sự tồn tại của ánh xạ thường không phải là một vấn đề. Vấn đề là nó có tính toán được không.

Nói cách khác, chắc chắn có một ánh xạ (thực tế là rất nhiều) có liên quan chính xác các từ palindromic với tổng số các hàm tính toán. Nhưng, với một palindrom , mà ánh xạ liên kết với hàm , không có cách nào bạn thực sự có thể sử dụng ánh xạ như vậy để có được kết quả của việc áp dụng cho một số đối số. Bản đồ của bạn không cung cấp cho bạn bất kỳ cách nào để xác định chức năng hoặc tính toán với nó. Ngôn ngữ của bạn có ngữ nghĩa không tính toán.wfwfw


Điều đó thật có ý nghĩa. Điều này có nghĩa là định lý của Rice không áp dụng được cho các ngôn ngữ có ngữ nghĩa không tính toán được, hay các ngôn ngữ có ngữ nghĩa không tính toán được là một khái niệm "cấm" nói chung (theo nghĩa là kết quả từ lý thuyết tính toán thường không áp dụng được cho chúng)?
Stefan Lutz

1
Ngữ nghĩa không tính toán là một biểu thức tôi tạo ra cho trực giác. Ngữ nghĩa thường được định nghĩa là ánh xạ từ cú pháp (đọc số Gôdel) đến một số miền giá trị (đọc hàm tính toán). Biểu thức của tôi là một chút của oxymoron vì việc đánh số Gôdel được cho là được xác định để các hàm liên quan có thể được tính toán. Tôi đã cố gắng đưa ra một trực giác cho những gì bạn đang làm, đó thực sự là một điều sai trái. Nhưng bạn không nên sử dụng một "khái niệm" như vậy. Có: coi đó là một khái niệm bị cấm, vì lý do bạn nêu.
babou

Có thể có một sự hiểu lầm khác về phần tôi ở đây, nhưng nếu tôi coi ngữ nghĩa là một thành phần của hai hàm, chương trình ánh xạ đầu tiên -> số gödel và số gödel thứ hai -> hàm tính toán như bạn đã mô tả, thì đánh số gödel có thể dễ dàng làm theo định nghĩa của nó, nhưng ánh xạ đầu tiên sẽ có thể tính toán được nếu chúng ta có "ngữ nghĩa tính toán". Nó có thể vẫn là một khái niệm vô dụng, nhưng không có vấn đề gì khi định nghĩa nó, hoặc là có?
Stefan Lutz

Tôi không chắc làm thế nào để trả lời bạn. Xây dựng của bạn làm cho tôi khó chịu. Đối với tôi cú pháp của chương trình trong một số ngôn ngữ là số Gôdel. Tôi chỉ đọc văn bản như một số lớn trong một số hệ thống số trong đó tất cả các ký tự của tôi được coi là chữ số. Vì vậy, tôi xem xét một ánh xạ duy nhất. Ngược lại, nếu bạn cho tôi một bảng liệt kê hàm, tôi đọc số này dưới dạng một số biểu diễn cú pháp. Tôi chỉ cố gắng để tránh làm cho một sự khác biệt. Bây giờ, bạn có thể giới thiệu các ánh xạ phỏng đoán trung gian (tính toán) từ N đến N, và nó sẽ không thay đổi nhiều thứ.
babou

"Tôi chỉ đọc văn bản dưới dạng số lớn trong một số hệ thống số trong đó tất cả các ký tự của tôi được coi là chữ số" - Vì vậy, bạn lấy chương trình dưới dạng một chuỗi làm đầu vào và đưa bạn thành một số, trong đó mỗi chương trình tương ứng với một số chính xác ( = mệnh đề). Ngoài ra, bạn nêu "một số sơ đồ số", vì vậy việc mã hóa đó hoạt động chính xác như thế nào, miễn là nó có thể tính toán được, phải không? Xin lỗi vì đã quá cố chấp, nhưng tôi thực sự muốn có được điều này.
Stefan Lutz

2

Tôi cũng có thể đánh số các chương trình theo ý muốn và do đó, có thể thiết kế một ngôn ngữ lập trình trong đó một số tập hợp con của chương trình tính toán chính xác một số tập hợp con tùy ý của các hàm tính toán, miễn là khớp chính xác.

Đối với một số bộ chức năng, hoạt động; không cho người khác . Nhưng một ngôn ngữ lập trình mới là một số mới của một số chương trình, và đó không phải là định lý của Rice nói về.

Đối với mục đích của định lý Rice, chúng tôi chỉ xem xét liệt kê của Godel về tất cả các hàm đệ quy một phần, và sau đó nó chỉ nêu điều gì đó về các bộ chỉ số , đó là tập hợp tất cả các chỉ số trong bảng liệt kê các hàm trong tập đã cho.

Điều đó không bao gồm tất cả các bộ chỉ số; và điều đó tốt, bởi vì chắc chắn có rất nhiều thuộc tính có thể quyết định của các chương trình. Xem thêm tại đây .


1
"Một ngôn ngữ lập trình mới là cách đánh số mới của một số chương trình." - nếu tôi xem xét một ngôn ngữ hoàn chỉnh, không có nghĩa là nó đánh số tất cả các chức năng tính toán? Dù sao, tôi nghĩ rằng sự hiểu lầm của tôi là việc đánh số của Godel sẽ không phải tự tính toán.
Stefan Lutz

@Skrjiban Mỗi ngôn ngữ lập trình thích hợp một bảng liệt kê của Godel. (Để rõ ràng, việc đánh số của Gôdel thể tính toán được một phần do sự cần thiết.)
Raphael

2

Không phải mọi phép liệt kê chương trình đều "chấp nhận được", vì không phải phép liệt kê nào cũng cho phép bạn tính toán hiệu quả chức năng liên quan đến chương trình từ chỉ mục của chương trình. Nói cách khác, bạn sẽ không có máy vạn năng (thuộc tính utm). Thuộc tính thứ hai thường được yêu cầu để "chấp nhận" phép liệt kê là thuộc tính smn: bạn cần có khả năng tính toán chỉ số của các phiên bản chương trình một cách thống nhất và hiệu quả.

Có thể chứng minh (định lý tương đương của Rogers) rằng bất kỳ cặp liệt kê nào được sử dụng utm và smn đều là đẳng cấu đệ quy, nghĩa là bạn có một cách hiệu quả để dịch các chương trình đặt ra hai cách liệt kê. Điều này làm cho lý thuyết của bạn liệt kê độc lập.

Điều này đã đủ để nhấn mạnh sự liên quan của utm và smn, hai định lý cơ bản của phương pháp "trừu tượng" đối với khả năng tính toán.

Định lý Rogers được trình bày dưới dạng một bài tập (sic!) Trong cuốn sách Lý thuyết về các hàm đệ quy và khả năng tính toán hiệu quả (bài tập 2-10, trang 41). Nhưng bằng chứng thực sự không khó lắm.


1

Tôi tìm thấy bài báo thú vị này của Udi Boker và Nachum Dershowitz, người giải quyết vấn đề mà tôi gặp phải, trong số những thứ khác. Trong phần giới thiệu, họ tuyên bố rằng (nhấn mạnh của tôi)

Người ta có ý nghĩa gì khi nói rằng có thể tính toán được? Một khả năng nhất có nghĩa là một máy Turing , sao cho tính , sử dụng một số chuỗi đại diện của miền . Nhưng các đại diện chuỗi được phép là gì? Rõ ràng, việc cho phép một đại diện tùy ý (bất kỳ phép tiêm nào từ đến ) đều có vấn đề - nó sẽ khiến bất kỳ chức năng quyết định nào cũng có thể tính toán được. Ví dụ: bằng cách hoán vị miền của mã máy, chức năng tạm dừng có thể biến thành chức năng tương đương đơn giản [...]fMMf DDΣ

và xa hơn

Một cách tiếp cận khác là chỉ cho phép các đại diện có thể sử dụng một cách tự nhiên. Tuy nhiên, trong bối cảnh xác định khả năng tính toán, người ta có nghĩa vụ phải sử dụng một khái niệm mơ hồ và không xác định về tính tự nhiên, hay của tính hiệu quả, do đó đánh bại mục đích đặc trưng của tính toán.

trong đó giải thích những gì babou gọi là "ngữ nghĩa tính toán". Bài viết cũng chứa trích dẫn này của Michael Rescorla:

Tôi sẽ đề xuất rằng các phân tích khái niệm có chủ đích liên quan đến luận điểm của Church tạo ra một vòng tròn tinh tế nhưng không thể tóm tắt: chúng mô tả khái niệm trực quan về khả năng tính toán bằng cách gọi khái niệm trực quan về khả năng tính toán [...] Chúng tôi đưa ra cú pháp với ngữ nghĩa nguyên thủy. Tôi gửi rằng [...] chúng ta phải yêu cầu rằng mối tương quan ngữ nghĩa giữa các thực thể cú pháp và các thực thể phi cú pháp phải được tính toán. Nhưng sau đó, phân tích đề xuất không chiếu sáng khả năng tính toán không tuần hoàn.

Vì vậy, theo các tác giả, định nghĩa chính thức phổ biến của hàm tính toán dựa vào trực giác không chính thức về khả năng tính toán có nghĩa là gì, điều này giải thích điều gì làm tôi bối rối về việc đánh số gödel.


1
Không gần với những gì tôi đã giải thích trong hai bình luận cuối cùng tôi đã gửi cho bạn. Tôi đã nói rằng đó là Luận án CT cung cấp định nghĩa về khả năng tính toán, và do đó là viên đá sáng lập của phần còn lại, mặc dù không thể chứng minh được. Tôi đã mong đợi bạn trả lời những bình luận này. - - - - - - Một điểm khác là tôi không thấy làm thế nào đây có thể là một câu trả lời cho câu hỏi của bạn. Câu hỏi của bạn là về một lỗi trong lý luận của bạn và bạn không phải là người tìm thấy lỗi này.
babou

Tôi xin lỗi nếu tôi xúc phạm bạn, ý kiến ​​của bạn rõ ràng hữu ích! Tôi muốn trả lời rằng sự tồn tại của một trình biên dịch có thể tính toán được từ ngôn ngữ sang tương đương với sự tồn tại của một trình thông dịch tính toán cho , điều đó khiến tôi suy nghĩ về một trình thông dịch "tính toán" sẽ khiến tôi suy nghĩ về điều gì làm thế nào một cách đánh số gödel có thể "tính toán được", dẫn tôi đến bài báo trên. Nếu đó đã là những gì bạn muốn nói, thì rõ ràng tôi không thể nhìn thấy nó. LLL
Stefan Lutz

Nhưng bạn nói đúng, đó là điều khiến tôi hiểu rõ ràng, nhưng nó không trả lời câu hỏi ban đầu. Tôi sẽ đánh dấu câu trả lời của bạn là chấp nhận thay thế.
Stefan Lutz

Vâng, bạn cảm ơn cả Raphael và tôi. Nhưng cách để cảm ơn mọi người ở đây là bỏ phiếu cho họ, hoặc chấp nhận câu trả lời của họ. Trừ khi bạn đưa ra một câu trả lời tốt hơn nhiều cho câu hỏi ban đầu, bạn có nghĩa vụ phải thể hiện sự đánh giá cao đối với những đóng góp tích cực ,. Ít nhất thì đó là sự hiểu biết của tôi. Cá nhân tôi không bao giờ coi thường mọi người như một sự phản kháng đối với nhiều người bất tài, những người coi thường sự bất cẩn. Khoa học là đối thoại, không bỏ phiếu. Về định nghĩa tính toán, hãy nhìn vào những bình luận tôi gửi cho bạn. Chính khái niệm này thật khó xử vì được định nghĩa bởi Luận án Church-Turing. Chúc may mắn.
babou
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.