Ngừng vấn đề - một vấn đề khiến tôi bận tâm


8

Theo hiểu biết của tôi, vấn đề tạm dừng hỏi liệu có tồn tại một chương trình quyết định xem chương trình đang được thử nghiệm hay không, được cung cấp một số dữ liệu đầu vào (bất kể đó là chương trình nào, hoặc dữ liệu đầu vào nào chúng tôi cung cấp) sẽ chấm dứt hay không. Câu trả lời cho vấn đề này là 'không'. Nói cách khác, không có chương trình 'đơn' nào có thể xác minh nó cho tất cả các cặp có thể (một số thuật toán, một số dữ liệu đầu vào).

Nhưng điều đó không có nghĩa là chúng tôi không thể quyết định liệu chương trình cụ thể X sẽ chấm dứt hay không.

Tôi chưa thể nhận xét các câu trả lời khác, nhưng một trong số đó khiến tôi chú ý:

Về mặt thực tế, điều này rất quan trọng vì nó cho phép bạn nói với những ông chủ không biết gì của mình "những gì bạn đang hỏi là không thể về mặt toán học".

Có lẽ bạn có thể cho tôi biết người đó có nghĩa là gì? Trong kịch bản của tôi, ông chủ không biết gì của tôi có thể yêu cầu tôi xác minh (thực tế, chứng minh hoặc từ chối) nếu chương trình của tôi (đó là một chương trình cụ thể) sẽ chấm dứt hay không. Và tất nhiên, có những cặp (thuật toán, dữ liệu đầu vào) có thể được chứng minh là chấm dứt (hoặc không bao giờ chấm dứt).

Câu hỏi là - tôi có thể chứng minh điều đó cho từng cặp như vậy (chương trình, dữ liệu đầu vào) không? Ngay cả khi câu trả lời là có, thì vẫn có một vấn đề - có thể có vô số 'dữ liệu đầu vào'. Vì vậy, thật tự nhiên khi hỏi - tôi có thể chứng minh, đối với mọi thuật toán, thuật toán này sẽ chấm dứt (hoặc ngược lại), bất kể tôi cung cấp dữ liệu đầu vào nào?


Cho dù chúng tôi có thể tìm thấy tất cả các bằng chứng như vậy là một vấn đề của logic, tôi đoán, nhưng chắc chắn có nhiều bằng chứng chúng tôi chưa tìm thấy .
Raphael

vấn đề tạm dừng được định nghĩa là một thuật toán cụ thể có thể xác định xem chương trình nào dừng lại hay không. Kiểm tra một chương trình cụ thể (hoặc thậm chí nhiều chương trình cụ thể) với các thuật toán khác nhau xem chúng có thể tạm dừng hay không là có thể thực hiện được (trường hợp chung là không)
Nikos M.

Câu trả lời:


6

Không, bạn không thể chứng minh điều này cho mọi thuật toán (máy Turing). Điều này trở thành một câu hỏi về bản chất của bằng chứng chứ không phải là một câu hỏi về tính toán.

Hãy xem xét máy Turing sau : kiểm tra xem có tồn tại bằng chứng cho câu lệnh tạm dừng, có độ dài(để giải thích về việc tự tham khảo, xem định lý đệ quy của Klenee). Nếu tìm thấy bằng chứng như vậy, hãy vào một vòng lặp vô hạn (nếu không thì dừng lại).M(x)xM(x)|x|

Rõ ràng bạn không thể chứng minh tạm dừng cho tất cả , vì nếu bạn có thể tìm thấy bằng chứng về độ dài , nó sẽ không dừng lại cho tất cả các đầu vào có kích thước . Ngoài ra, bạn không thể chứng minh không dừng lại đối với một số , vì điều này có nghĩa là tồn tại một bằng chứng cho việc tạm dừng trên tất cả các đầu vào (mâu thuẫn). Tình huống ở đây là, nếu hệ tiên đề của chúng ta phù hợp, thì tạm dừng cho tất cả , nhưng bạn không thể chứng minh điều đó (có nghĩa là bạn có thể chứng minh trong lý thuyết của mình rằng nếu phù hợp thìM(x)xppM(x)xMM(x)xTTxM(x) dừng lại, nhưng bạn không thể chứng minh nó dừng lại mà không có giả định này, trừ khi hệ thống của bạn không nhất quán).


Đây là câu trả lời cho 'tôi có thể chứng minh, đối với mọi thuật toán, thuật toán này sẽ chấm dứt (hoặc ngược lại), bất kể tôi cung cấp dữ liệu đầu vào nào?' - chỉ để chắc chắn.
user4205580

Đúng. Cần thêm nhân vật
Ariel

Bạn cũng có thể quan tâm đến kết quả không hoàn hảo của Godel : về cơ bản, trong bất kỳ hệ thống logic nào đủ mạnh để nói về số học, có những phát biểu đúng mà không thể chứng minh được.
jmite

- máy turing, x - đầu vào của nó. Sau đó, chúng tôi chạy nó với, giả sử, x = 2 . Chương trình dịch thành: "kiểm tra xem có tồn tại bằng chứng cho tuyên bố hay không: cho tất cả 2 M (2) tạm dừng, có độ dài2 ..." Không có nghĩa gì để nói cho cả 2 . Hoặc có lẽ đó không phải là cách tôi nên nhìn vào nó. Mxx= =2222
user4205580

Biến định lượng mới, suy nghĩ về nó như tạm dừng. x (đầu vào) chỉ xuất hiện dưới dạng giới hạn về độ dài của bằng chứng. yM(y)x
Ariel

2

Đối với một chương trình cụ thể, chắc chắn tôi có thể chứng minh rằng chương trình sẽ tạm dừng trên tất cả các đầu vào: chương trình của tôi đã "tạm dừng" như hướng dẫn đầu tiên.

Một ví dụ khác: Tôi có thể có một chương trình cụ thể là trình giả lập máy Turing (tức là máy Turing phổ dụng). Nó diễn giải đầu vào của nó dưới dạng mô tả về máy Turing và trình giả lập mô phỏng máy chạy trên một băng trống. Vì vậy, trình giả lập sẽ dừng nếu máy đang dừng đầu vào và sẽ chạy mãi mãi nếu máy là đầu vào chạy mãi mãi. (Nếu đầu vào không đúng định dạng để mô tả máy Turing, trình giả lập sẽ dừng lại.)

Chúng tôi biết rằng không thể quyết định liệu một máy Turing tùy ý có dừng lại khi bắt đầu trên một băng trống hay không. Vì vậy, đối với máy giả lập cụ thể của tôi, không có thuật toán để quyết định những gì nó làm trên đầu vào tùy ý.

Tôi không biết nếu hai ví dụ này giúp.

Chắc chắn trong nhiều lĩnh vực vấn đề là hợp lý để có thể chứng minh rằng các chương trình cụ thể chấm dứt. Nếu chương trình của tôi nhân hai ma trận, tôi sẽ hy vọng có thể chứng minh rằng không có cách nào nó có thể tiếp tục mãi mãi.


2

Ít nhất tôi có thể làm rõ câu hỏi giả định mà ông chủ tưởng tượng được cho là hỏi để dẫn đến câu trả lời này:

Bạn có thể thiết kế một chương trình lấy truy vấn chương trình / mẫu / cơ sở dữ liệu / vv này luôn xác định xem nó có chấm dứt / tăng ngoại lệ / hết bộ nhớ không?

Điểm của bằng chứng không thể thực hiện được là một nhiệm vụ như vậy không thể hoàn thành. Tất nhiên, kiến ​​thức phổ biến hiện nay là một nhiệm vụ như vậy có thể được xấp xỉ khá tốt, tức là có thể đưa ra thuật toán xác định liệu chương trình có đưa ra một ngoại lệ hay không, nhưng đôi khi câu trả lời "có thể đưa ra một ngoại lệ" mặc dù chương trình không Thực hành nó trong thực tế .

Một số trong số này cũng khó thực hiện trong thực tế, ví dụ như chấm dứt khá khó để chứng minh hơn là không có ngoại lệ con trỏ null cho "các chương trình trong thế giới thực" (nhưng tương đương về lý thuyết).

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.