Là vấn đề tạm dừng có thể quyết định cho các chương trình thuần túy trên một máy tính lý tưởng?


25

Khá đơn giản để hiểu tại sao vấn đề tạm dừng là không thể giải quyết được đối với các chương trình không tinh khiết (nghĩa là các chương trình có I / O và / hoặc trạng thái phụ thuộc vào trạng thái toàn cầu của máy); nhưng theo trực giác, dường như việc dừng một chương trình thuần túy trên một máy tính lý tưởng sẽ có thể quyết định thông qua phân tích tĩnh.

Đây có phải là thực tế trường hợp? Nếu không, một số mẫu hoặc giấy tờ từ chối yêu cầu này là gì?


35
Lưu ý rằng các bằng chứng chuẩn cho thấy vấn đề tạm dừng là không thể giải quyết được (chẳng hạn như vấn đề được mô tả trên wikipedia: en.wikipedia.org/wiki/Halting_probols#Sketch_of_proof ) đều hoạt động với các mô hình tính toán thậm chí không cố gắng đại diện cho I / O. Và trong khi, ví dụ Turing Machines có trạng thái, hành vi của chúng được định nghĩa chính thức theo các chức năng thuần túy. Vì vậy, trong một số ý nghĩa "các chương trình thuần túy trên một máy tính lý tưởng" thực sự là cài đặt trong đó vấn đề tạm dừng thường được chứng minh là không thể giải quyết được.
Ben

1
Bạn đã làm nghiên cứu gì? Googling "Ngừng vấn đề" nên đã trả lời câu hỏi này cho bạn.
Jonathan Cast

Câu trả lời:


38

Dưới đây là một bằng chứng về sự không ổn định bằng cách giảm từ vấn đề Dừng.

Giảm: Cho máy và đầu vào x , xây dựng Máy Turing H mới không đọc bất kỳ đầu vào nào, nhưng ghi Mx trên băng và mô phỏng M trên x cho đến khi M dừng lại.MxHMxMxM

Hoạt động của máy này không phụ thuộc vào băng đầu vào, do đó, nó là Máy Turing thuần túy chỉ áp dụng phân tích tĩnh. Nếu phân tích tĩnh là đủ, thì nó có thể cho thấy liệu H dừng lại, điều này sẽ cho thấy liệu M dừng trên x hay không , điều này sẽ giải quyết vấn đề tạm dừng cho các máy không tinh khiết, mà chúng ta biết là không thể giải quyết được, và do đó vấn đề của bạn cũng không thể giải quyết được.HHMx



@HendrikJan Chính xác!
Liêuwe Vinkhuijzen

16

Không, nó không phải, và hơn nữa nó không phụ thuộc vào I / O.

Ví dụ đơn giản: viết chương trình để tìm một số lẻ hoàn hảo (đây là một vấn đề mở: chúng tôi chưa biết có tồn tại hay không) - nó không nhận bất kỳ đầu vào nào và không thực hiện bất kỳ nhiệm vụ không tinh khiết nào ; nó có thể dừng lại khi tìm thấy một hoặc có thể hoạt động vô hạn (trong trường hợp số đó không tồn tại). Bây giờ nếu phân tích tĩnh đủ mạnh để xác định trường hợp tạm dừng thì nó sẽ được sử dụng để trả lời câu hỏi này (và nhiều câu hỏi nữa) trong đó tạm dừng có nghĩa là sự tồn tại tích cực của một số đó và không dừng lại có nghĩa là không có số đó, nhưng không may là phân tích tĩnh không phải là mạnh mẽ


18
Tôi không thực sự thấy điểm trong câu trả lời này. Chỉ vì hiện tại chúng tôi không biết liệu một số như vậy có tồn tại không ngụ ý rằng nó không, trong tương lai chúng tôi không thể viết một bộ phân tích tĩnh có thể quyết định điều này. Một cách khác tốt hơn là sử dụng một số vấn đề không thể giải quyết được biết đến. Ví dụ, người ta biết rằng không có chương trình nào có thể giải tất cả các phương trình diophantine và giải phương trình như vậy là một nhiệm vụ tương tự như chương trình được hiển thị trong câu trả lời.
Bakuriu

2
Chà, nếu vấn đề Ngừng là có thể quyết định, thì mọi vấn đề sẽ là quyết định nếu chúng ta có thể đưa nó vào một hình thức mà chúng ta hỏi liệu chương trình có dừng lại hay không. Hoặc bất kỳ câu hỏi nào của biểu mẫu: Có một bộ có thể đếm được và tôi có thể quyết định xem có bất kỳ yếu tố tiềm năng riêng lẻ nào có trong tập hợp hay không. Bộ có trống không? Các phương trình diophantine có một tập hợp các giải pháp tiềm năng có thể đếm được và tôi có thể kiểm tra xem mỗi giải pháp tiềm năng riêng lẻ có phải là một giải pháp hay không. Nếu vấn đề Dừng là có thể quyết định, phương trình Diophantine sẽ là quyết định.
gnasher729

10
@ gnasher729 Có, và vì chúng không phải là vấn đề Dừng là không thể giải quyết được. Đó là quan điểm của tôi. Mặc dù tuyên bố trong câu trả lời này không có ý nghĩa thực sự: "Hãy xem xét định nghĩa toán học này. Hiện tại chúng tôi không biết liệu một chương trình quyết định điều này sẽ dừng lại hay không, nhưng ngày mai một chàng trai có thể phát hiện ra rằng nó có hay không và câu trả lời này trở thành 100 % vô nghĩa ".
Bakuriu

6
Đây không phải là một trường hợp tương tự như Làm sao có thể quyết định được liệu π có một số dãy số không? , vấn đề tạm dừng là không thể giải quyết được trên các lớp vấn đề, không phải vấn đề đơn lẻ .
npostavs

2

Bằng chứng cổ điển bằng cách chéo hóa là một cỗ máy thuần túy , không chỉ nó là một Turing Machine thuần túy, mà nó không dựa vào "Các vấn đề mở".

Ví dụ, một máy Turing thực hiện Giả thuyết Collatz không có trạng thái tạm dừng, nhưng điều đó phụ thuộc vào sự thiếu hiểu biết của chúng tôi về Giả thuyết Collatz, một ngày nào đó chúng ta có thể dự đoán rằng Collatz đã đúng và sau đó chúng ta sẽ có thể quyết định trạng thái Ngừng của phỏng đoán (Hoặc cho một số đầu vào không dừng lại, hoặc Luôn dừng lại).

Vì vậy, phỏng đoán Collatz đã có thể trả lời câu hỏi của bạn (ít nhất là tạm thời), nhưng nó phụ thuộc vào những điều chúng ta không biết . Thay vào đó, bằng chứng cổ điển là một vấn đề được giải quyết: chúng ta đã biết điều đó là không thể giải quyết được .


0

Chỉ để ghi lại, bằng chứng tiêu chuẩn về tính không thể giải quyết được của vấn đề tạm dừng dựa trên cùng một ý tưởng như câu hỏi: rằng có thể viết một chương trình một số thuật ngữ phụ để đánh giá mã nguồn cho toàn bộ chương trình. Sau đó, nếu có một hàm halts, được cung cấp mã nguồn cho một chương trình, đã trả về Đúng nếu chương trình đó tạm dừng trên tất cả các đầu vào và Sai thì đây sẽ là một chương trình hợp pháp:

prog() = if halts "prog" then prog() else ()

nơi "prog"sẽ có một số biểu thức được ước tính cho mã nguồn prog; tuy nhiên, bạn có thể nhanh chóng thấy rằng progtạm dừng (đối với tất cả các đầu vào) nếu nó không dừng lại, đó là một mâu thuẫn. Không có gì trong bằng chứng này phụ thuộc vào I / O theo bất kỳ cách nào (bạn có cần I / O để viết một câu hỏi không?).

Nhân tiện, bạn có thể muốn xem xét "I / O dựa trên hộp thoại" để biết thêm bằng chứng rằng I / O hoàn toàn không liên quan đến vấn đề của bạn (về cơ bản, các chương trình làm I / O có thể được giảm xuống thành các chương trình lấy đầu vào như (rõ ràng) đối số chức năng và trả về đầu ra dưới dạng (rõ ràng) kết quả bổ sung trong một ngôn ngữ lười biếng). Thật không may, tôi không thể tìm thấy một trang hợp lý, không thiên vị (hoặc hộp thoại chuyên nghiệp) trên web ngay bây giờ.

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.