Chúng ta biết gì về các phiên bản hạn chế của vấn đề tạm dừng


16

( CẬP NHẬT : một câu hỏi được hình thành tốt hơn được đặt ra ở đây vì các ý kiến ​​cho câu trả lời được chấp nhận dưới đây cho thấy câu hỏi này không được xác định rõ)


Bằng chứng cổ điển về tính không thể của vấn đề tạm dừng phụ thuộc vào việc chứng minh mâu thuẫn khi cố gắng áp dụng thuật toán phát hiện tạm dừng cho chính nó làm đầu vào. Xem nền dưới đây để biết thêm thông tin.

Mâu thuẫn được chứng minh áp dụng vì một nghịch lý tự tham chiếu (như câu "Câu này không đúng"). Nhưng nếu chúng ta nghiêm cấm việc tự tham khảo như vậy (nghĩa là chấp nhận thực tế là việc tự tham khảo như vậy không thể quyết định được để dừng lại), thì chúng ta sẽ để lại kết quả gì? Là vấn đề tạm dừng cho bộ máy không tự giới thiệu còn lại có thể quyết định dừng lại hay không?

Các câu hỏi là:

Nếu chúng ta xem xét một tập hợp con của tất cả các máy Turing có thể, không tự tham chiếu (nghĩa là không lấy chúng làm đầu vào), chúng ta biết gì về vấn đề tạm dừng cho tập hợp con này?

CẬP NHẬT

Có lẽ một sự cải tổ tốt hơn về những gì tôi đang theo là một sự hiểu biết tốt hơn về những gì định nghĩa một tập hợp quyết định. Tôi đã cố gắng cô lập bằng chứng không thể thiếu cổ điển bởi vì nó không thêm bất kỳ thông tin nào về tính không ổn định ngoại trừ các trường hợp bạn tự chạy HALT.

Bối cảnh: Giả sử có mâu thuẫn rằng có một máy Turing có thể quyết định đầu vào là mã hóa cho máy Turing và , có dừng hay không . Sau đó, hãy xem xét một máy Turing lấy và và sử dụng để quyết định xem dừng hay không, và sau đó làm ngược lại, tức là dừng lại nếu không dừng lại và không dừng lại nếu dừng lại. Sau đó thể hiện một mâu thuẫn, nhưM X M ( X ) K M X Q M ( X ) K M ( X ) M ( X ) K ( K ) KQMXM(X)KMXQM(X)KM(X)M(X)K(K)K nên dừng lại nếu nó không dừng lại, và không dừng lại khi nó dừng lại.

Động lực: Một đồng nghiệp đang nghiên cứu xác minh chính thức các hệ thống phần mềm (đặc biệt khi hệ thống đã được chứng minh ở cấp mã nguồn và chúng tôi muốn kiểm tra lại phiên bản đã biên dịch của nó, để vô hiệu hóa các vấn đề của trình biên dịch), và trong trường hợp của anh ta, anh ta quan tâm đến bộ chương trình điều khiển nhúng đặc biệt mà chúng tôi biết chắc chắn chúng sẽ không tự tham chiếu. Một khía cạnh của xác minh mà anh ta muốn thực hiện là liệu có đảm bảo rằng chương trình được biên dịch sẽ dừng lại nếu mã nguồn đầu vào được chứng minh là chấm dứt.

CẬP NHẬT

Dựa trên các ý kiến ​​dưới đây, tôi làm rõ ý nghĩa của các máy Turing không tự tham khảo.

Mục tiêu là xác định nó là tập hợp không dẫn đến mâu thuẫn được nêu trong bằng chứng (xem "Bối cảnh" ở trên). Nó có thể được định nghĩa như sau:

Giả sử rằng có một máy Turing quyết định sự cố tạm dừng cho một bộ máy Turing , thì không tự tham chiếu đến nếu loại trừ tất cả các máy gọi trên (trực tiếp hoặc gián tiếp). (Rõ ràng điều đó có nghĩa là không thể là thành viên của )S S Q Q S Q SQSSQQSQS

Để làm rõ về ý nghĩa của việc gọi trên một cách gián tiếp:SQS

Gọi trên được biểu thị bằng máy Turing với một tập hợp các trạng thái và một đầu vào ban đầu có thể có trên băng (tương ứng với bất kỳ thành viên nào của ), với đầu ban đầu ở đầu đầu vào đó. Một máy gọi trên "một cách gián tiếp" nếu có một chuỗi các bước (hữu hạn) mà sẽ thực hiện để làm cho cấu hình của nó "đồng hình" với cấu hình ban đầu của .S Q S W Q S W Q ( S )QSQSWQSWQ(S)

CẬP NHẬT 2

Từ một câu trả lời dưới đây cho rằng có vô số máy Turing thực hiện cùng một nhiệm vụ và vì vậy không phải là duy nhất, chúng tôi thay đổi định nghĩa ở trên bằng cách nói rằng không phải là một máy Turing duy nhất, mà là bộ (vô hạn) của tất cả các máy tính cùng chức năng (HALT), trong đó HALT là chức năng quyết định máy Turing tạm dừng trên một đầu vào cụ thể.QQQ

CẬP NHẬT 3

Định nghĩa của đồng cấu Turing Machine:

TM A đồng hình với TM B nếu đồ thị chuyển tiếp của A đồng hình với B, theo nghĩa đồng nhất tiêu chuẩn của đồ thị có các nút VÀ cạnh có nhãn. Biểu đồ chuyển tiếp (V, E) của TM sao cho V = trạng thái, E = cung tròn chuyển tiếp giữa các trạng thái. Mỗi cung được dán nhãn bằng biểu tượng (S, W, D), S = đọc băng và W = ký hiệu được ghi vào đó và D = hướng mà đầu hiển thị di chuyển đến.


5
"Bộ không tham chiếu tự còn lại" Trước khi tôi có thể thảo luận một cách hợp lý về bộ này, tôi muốn có một định nghĩa về "tự tham khảo". Tuy nhiên, tôi nghĩ rằng đó sẽ là một điều khó khăn để xác định?
Sam Nead

1
Có những nghiên cứu về các chương trình tạm dừng có thể chứng minh được (lớp này không bao gồm tất cả các chương trình tạm dừng). Về cơ bản, chúng là một cặp chương trình và là bằng chứng cho thấy nó dừng lại. Ví dụ, nếu tôi không nhầm, Agda chỉ cho phép các chương trình tạm dừng. Tôi nghĩ rằng những người làm việc về logic và ngôn ngữ lập trình có nhiều điều để nói về điều này.
Tsuyoshi Ito

1
@M. Alaggan. Bây giờ tôi muốn có một định nghĩa về "gọi trên S một cách gián tiếp", điều mà tôi nghi ngờ là khó xác định như "tự tham khảo" ban đầu :)QS
Rob Simmons

2
Điều này đặt ra một câu hỏi thú vị: Có phải tất cả các bằng chứng không thể tính toán được (không thể giải quyết được) đều có thể truy nguyên theo phương pháp đường chéo của Cantor? Có bằng chứng không thể thiếu nào mà không dựa trực tiếp hay gián tiếp vào phương pháp đường chéo?
Mohammad Al-Turkistany

Câu trả lời:


9

Tôi nghĩ rằng sẽ cần thêm một chút công việc để đi đến một câu hỏi "được xác định rõ". Đặc biệt, đây là vấn đề:

Gọi Q trên S được biểu thị bằng máy Turing Q với một tập hợp các trạng thái và một đầu vào ban đầu có thể có trên băng (tương ứng với bất kỳ thành viên nào của S), với đầu ban đầu ở đầu đầu vào đó. Một máy W gọi Q trên S "một cách gián tiếp" nếu có một chuỗi các bước (hữu hạn) mà W sẽ thực hiện để làm cho cấu hình của nó "đồng hình" với cấu hình ban đầu của Q (S).

Một vấn đề là có vô số máy Turing tính toán cùng chức năng. Trong đối số đường chéo tiêu chuẩn, tôi chỉ có thể thay thế chương trình con Q bằng một người quyết định khác cho HALT, vì có vô số trong số chúng. Hoặc một chức năng tương đương với HALT. Vì vậy, nó không hoàn toàn rõ ràng với tôi làm thế nào để xác định khái niệm của bạn về "lời mời gián tiếp".

Một câu hỏi khác có thể là: đối với những bộ máy Turing nào thì vấn đề tạm dừng có thể quyết định được? Ở đây có rất nhiều câu trả lời: TM bị hạn chế tài nguyên (ví dụ: chỉ sử dụng không gian f (n), trong đó f là một số chức năng tính toán cụ thể), các TM bị hạn chế hoạt động theo một cách cụ thể nào đó (ví dụ: đầu đọc chỉ di chuyển một chiều), v.v. Tuy nhiên, một câu hỏi thú vị khác là liệu tư cách thành viên trong tập hợp bị hạn chế đó có thể quyết định được không, hoặc liệu bạn có phải hạn chế "vấn đề hứa hẹn" hay không, trong đó bạn chỉ đảm bảo câu trả lời đúng cho một số tập hợp con "đã hứa", nhưng không xác minh thành viên.


QH

Nó không hoàn toàn đơn giản. Định nghĩa của bạn là nghịch lý bây giờ, vì bạn đang tìm kiếm một HALT tính toán. Nhưng nếu điều này là tính toán được, thì bất kỳ hàm tính toán nào cũng tương đương với nó. Nhưng nếu bộ đầu vào của bạn chứa các vấn đề bán tính toán (TM), bạn sẽ có mâu thuẫn vì việc quyết định vấn đề tạm dừng cho một TM như vậy sẽ cung cấp cho bạn quy trình quyết định cho vấn đề đó.
Đánh dấu Reitblatt

1) HALT không thể tính toán có nghĩa là không thể giải quyết được? Tôi đã cho rằng một HALT tính toán như vậy tồn tại, hy vọng cho mâu thuẫn. 2) Tôi không quen với khái niệm rằng tất cả các hàm tính toán đều tương đương với nhau, tôi đã trích dẫn bạn và có nghĩa đó là một hàm giải quyết vấn đề HALT. Rõ ràng λx.1 là có thể tính toán được nhưng nó không quyết định HALT. Xin hãy sửa tôi nếu tôi sai. Về các vấn đề bán tính toán, HALT có thể thực hiện vô số bước, điều đó vẫn không dẫn đến mâu thuẫn trong bằng chứng ban đầu rằng HALT không thể quyết định được.
M. Alaggan

1) Phải. Nhưng vấn đề là cố gắng xác định khái niệm "không tự giới thiệu" của bạn. Hoặc đó là một hạn chế yếu, cho phép đường chéo như tôi đã tranh luận, hoặc đó là một hạn chế mạnh mẽ giúp loại bỏ mọi thứ. 2) Thật đơn giản. "Tương đương tính toán" đại khái có nghĩa là có một ánh xạ có thể tính toán từ cái này sang cái khác bảo tồn câu trả lời. Nhưng nếu tôi có thể tính toán một câu trả lời, tôi có thể gian lận và làm cho ánh xạ trở nên tầm thường. 3) Nếu TM quyết định HALT không tự chấm dứt, thì đó không phải là người quyết định cho HALT.
Đánh dấu Reitblatt

Một điều khác có một chút khó hiểu là sự kết hợp của TM với vấn đề quyết định được tính toán bởi họ. Thật không bình thường khi nói về một TM được tính toán tương đương với nhau. Thay vào đó, các hàm được tính toán bởi chúng có thể tương đương (hoặc bằng nhau). Vấn đề là việc cố gắng nói rằng một TM không mô phỏng một TM khác là khó xác định nói chung, mà không đưa ra một cái gì đó cụ thể để tách các chức năng được tính toán bởi chúng. Ví dụ: TM không gian nhật ký không thể mô phỏng TM giải quyết vấn đề không gian EXP.
Đánh dấu Reitblatt

9

Nếu tôi hiểu động cơ của bạn một cách chính xác, có vẻ như đây là vấn đề "tính chính xác của trình biên dịch" hơn là vấn đề "hạn chế tạm dừng". Bạn có một thuộc tính (chấm dứt) mà bạn đã chứng minh cho một số chương trình cấp nguồn Prog mà bạn muốn sau đó mở rộng sang mã được biên dịch để có cùng thuộc tính được biên dịch (Prog) . Nhưng trình biên dịch có thể (nói chung) có thể làm những việc ngớ ngẩn một cách tùy tiện như thực hiện một thời gian chạy hoàn chỉnh (giả sử JVM), biên dịch chương trình kết thúc của bạn thành một mã byte JVM và sau đó loại bỏ một tệp thực thi để khởi động JVM và cung cấp cho mã byte được biên dịch của bạn.

Trong thực tế , có thể hoàn toàn có thể sử dụng kiến ​​thức ngầm mà bạn có về cách trình biên dịch của bạn hoạt động để thực hiện một quy trình xác minh nào đó chứng minh rằng các chương trình được biên dịch chính xác đã cung cấp các chương trình nguồn chính xác (thực sự, rất nhiều công cụ xác minh tự động cho các chương trình đang sử dụng kiến ​​thức ngầm của "trình biên dịch" thuật toán thành mã trong bộ não của các lập trình viên). Tuy nhiên, nói chung có lẽ bạn đang xem xét một vấn đề về tính chính xác của trình biên dịch. Theo tôi hiểu, có hai cách cổ điển để làm như vậy.

Một tùy chọn là có một trình biên dịch lấy đầu vào chương trình Prog và bằng chứng chấm dứt (Prog) và đầu ra được biên dịch (Prog)kết thúc (được biên dịch (Prog)) - sau đó là bằng chứng có thể được kiểm tra độc lập trình biên dịch. Bài báo kinh điển về vấn đề này là Necula và Lee . Thiết kế và triển khai trình biên dịch chứng nhận , tôi tin.

Ngoài ra, bạn có thể chứng minh một thực tế về hàm biên dịch () - rằng bất cứ khi nào biên dịch () đưa ra một đầu vào kết thúc, nó sẽ tạo ra một đầu ra kết thúc. Một giới thiệu dễ tiếp cận về cách suy nghĩ này về tính chính xác của trình biên dịch là bài viết CACM của Xavier Leroy, Xác minh chính thức của một trình biên dịch thực tế .

(PS Tôi hy vọng câu trả lời này hữu ích - Tôi nhận ra nó hơi khác so với câu hỏi bạn đã hỏi, vì vậy hãy cho tôi biết nếu tôi rời khỏi cơ sở và / hoặc lặp lại điều gì đó bạn đã biết.)


Cảm ơn câu trả lời tuyệt vời. Điều này chắc chắn sẽ hữu ích cho đồng nghiệp của tôi. Tuy nhiên, tôi (độc lập với đồng nghiệp của tôi) quan tâm nhiều hơn đến ý nghĩa lý thuyết về bằng chứng của vấn đề tạm dừng, rằng nếu chúng ta thoát khỏi trường hợp cho thấy mâu thuẫn, thì chúng ta còn biết gì về tính quyết định của vấn đề tạm dừng?
M. Alaggan
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.