Các ví dụ đơn giản nhất về các chương trình mà chúng ta không biết liệu chúng có chấm dứt không?


27

Vấn đề tạm dừng nêu rõ không có thuật toán nào xác định xem chương trình đã cho có dừng hay không. Do đó, cần có các chương trình mà chúng tôi không thể biết liệu họ có chấm dứt hay không. Các ví dụ đơn giản nhất (nhỏ nhất) được biết đến của các chương trình như vậy là gì?


Bạn đang mâu thuẫn trong câu trả lời của bạn ..... Cảm ơn! Nhưng chương trình tạm dừng giả định kiến ​​thức về nguồn. ... Nếu điều này là đúng, bạn đã trả lời câu hỏi của mình. Chương trình tạm dừng sẽ biết. Hãy tưởng tượng một hệ thống kiểm soát một dấu hiệu, nó luôn được chiếu sáng và nhấp nháy, khi nào nó tắt? Mất điện, chuyển đổi nguồn hoặc trong chuỗi flash. Hoặc được cung cấp một pin dự phòng và máy phát điện, không bao giờ.
htm11h


Tôi sẽ nói thêm rằng vấn đề tạm dừng chỉ là vấn đề nếu bạn không đặt giới hạn thời gian trên. Chắc chắn không có sự khác biệt trong thực tế giữa việc nhận được câu trả lời quá muộn để được sử dụng và không bao giờ nhận được câu trả lời. Bạn có thể hỏi liệu một chương trình sẽ trả lời câu trả lời trong một số bước, giống như một định nghĩa chính xác theo thời gian thực. Nếu bạn không thể đảm bảo câu trả lời kịp thời, thì bạn chỉ cần có một chương trình thiếu bảo đảm chính xác.
Rob

1
@Rob Điều đó không thực sự đúng. Nếu bạn không biết liệu máy có dừng lại hay không, bạn có thể đợi vô thời hạn để xem máy có dừng hay không; sau một thiên niên kỷ, bạn vẫn sẽ không biết liệu nó sẽ dừng lại hay không, vào ngày hôm sau.
Kyle Strand

@KyleStrand Tôi đồng ý với bạn. Nhưng tôi cũng nói rằng đó là một vấn đề hoàn toàn bị thổi phồng trong thực tế, bởi vì tất cả các tính toán thực tế đều phải tuân theo thời hạn (mili giây đến vài tháng). Nếu bạn cần một câu trả lời trong 5 giây để nó hữu ích, điều duy nhất quan trọng là bạn có thể đảm bảo câu trả lời trong 5 giây không. Giả sử rằng bạn có thể đảm bảo một câu trả lời cho một lượng thời gian không xác định để tính toán. Đó sẽ là một sự đảm bảo vô ích.
Cướp

Câu trả lời:


41

Một ví dụ khá đơn giản có thể là một chương trình kiểm tra phỏng đoán Collatz :

f(n)={HALT,if n is 1f(n/2),if n is evenf(3n+1),if n is odd

được biết đến để dừng lại cho n lên đến ít nhất 5×2605.764×1018 , nhưng nhìn chung nó là một vấn đề mở.


9
Để nhấn mạnh quan điểm của tôi từ nhận xét bên dưới câu hỏi: vấn đề "liệu dừng lại cho tất cả n không?" là tính toán . f(n)n
Raphael

6
@KyleStrand Xem tại đây .
Raphael

10
@KyleStrand, Raphael đúng 100%. Đây là một quan niệm sai lầm phổ biến. Bạn phải theo dõi những gì định nghĩa nói rất cẩn thận, và sau đó bạn có thể phát hiện ra rằng trực giác của bạn không hoàn toàn khớp với định nghĩa. Theo định nghĩa về khả năng tính toán, điều đó đủ cho thấy có tồn tại một máy Turing để tính toán nó - không quan trọng chúng ta có biết máy Turing đó là gì không. Lần đầu tiên nhìn thấy điều này, nhiều sinh viên nghĩ rằng nó gian lận, nhưng thực tế không phải vậy - đó chỉ là hệ quả của định nghĩa.
DW

2
@KyleStrand Bạn phải loại bỏ ý tưởng rằng chương trình phải giải quyết vấn đề . Nó không. Nó chỉ phải đưa ra câu trả lời, đó là một nhiệm vụ tầm thường. Về mặt thuật toán, các vấn đề với các tập hợp hữu hạn đều nhàm chán vì chúng ta có thể mã hóa các câu trả lời. (Và ngay cả khi chúng ta không biết câu trả lời, chúng ta vẫn biết rằng có một thuật toán chính xác.) Nói chung, khi cho thấy rằng không có thuật toán cho một cái gì đó, bạn không được đưa ra bất kỳ giả định nào về cách nó sẽ xảy ra công việc. Sự thiếu trí tưởng tượng của chúng tôi không cung cấp một bằng chứng.
Raphael

2
@KyleStrand Afaik, tôi sử dụng định nghĩa chuẩn về khả năng tính toán như được dạy ngày nay (và, afaik, đã được nhiều thập kỷ). Tôi khuyên bạn nên tiếp thu các câu trả lời và tài liệu được liên kết và tìm ra nơi bạn đã sai. Nó không có ý nghĩa đối với tôi và những người khác lặp đi lặp lại những điều tương tự. Thêm một lần thử: định nghĩa về khả năng tính toán vốn có tính tồn tại, không mang tính xây dựng. Miễn là bạn nghĩ trong phạm vi của logic cổ điển, không cần thiết phải có thể đưa ra thuật toán "giải quyết" - chúng ta chỉ cần chứng minh rằng một câu trả lời đúng.
Raphael

31

Vấn đề tạm dừng nêu rõ không có thuật toán nào xác định xem chương trình đã cho có dừng hay không. Do đó, cần có các chương trình mà chúng tôi không thể biết liệu họ có chấm dứt hay không.

"Chúng tôi" không phải là một thuật toán =) Không có thuật toán chung nào có thể xác định liệu một chương trình đã cho có dừng lại cho mọi chương trình hay không .

Các ví dụ đơn giản nhất (nhỏ nhất) được biết đến của các chương trình như vậy là gì?

Hãy xem xét chương trình sau:

n = 3
while true:
    if is_perfect(n):
            halt()
    n = n + 2

Hàm is_perinf kiểm tra xem n có phải là một số hoàn hảo hay không . Không biết có bất kỳ số hoàn hảo kỳ lạ nào không, vì vậy chúng tôi không biết liệu chương trình này có dừng lại hay không.


7
Chúng tôi là một thuật toán.
PyRulez

3
@PyRulez không có bằng chứng nào cho thấy sức mạnh tính toán của tâm trí con người tương đương với Turing Machine. Bằng chứng không hoạt động, ví dụ như không biết làm thế nào để mô phỏng một tâm trí trong một tâm trí khác.
avsmal

1
@avsmal Được rồi, nhưng điều cực kỳ khó xảy ra là chúng ta có khả năng siêu tính toán.
PyRulez

2
@PyRulez John Lucas và Roger Penrose đã gợi ý rằng tâm trí con người có thể là kết quả của một loại tính toán "phi thuật toán" được tăng cường cơ học lượng tử. Đó là một số giả định mạnh mẽ. Nhưng ít nhất tâm trí của chúng ta có thể có một số nguồn không chắc chắn. Và điều đó là đủ để phá vỡ bằng chứng: không thể phủ nhận "ngẫu nhiên" (đối với một số định nghĩa phù hợp về ý nghĩa ngẫu nhiên) Turing Machine nếu không biết liệu nó có dừng lại hay không.
avsmal

5
Là điện toán lượng tử được coi là siêu tính toán? Tôi cho rằng máy tính lượng tử có thể được mô phỏng hoàn hảo bằng máy turing - chỉ chậm hơn một chút.
MaiaVictor

10

Bạn viết:

Vấn đề tạm dừng nêu rõ không có thuật toán nào xác định xem chương trình đã cho có dừng hay không. Do đó, cần có các chương trình mà chúng tôi không thể biết liệu họ có chấm dứt hay không.

Đây là một phi sequitur, theo cả hai hướng. Bạn chịu thua một ngụy biện phổ biến đáng để giải quyết.

PPP

Chỉ khi bạn yêu cầu thuật toán giải quyết vấn đề Dừng cho tất cả các chương trình, bạn mới có thể chỉ ra rằng không có thuật toán nào như vậy có thể tồn tại.

Bây giờ, biết rằng vấn đề Ngừng là không thể giải quyết được không có nghĩa là có bất kỳ chương trình nào không ai có thể chứng minh việc chấm dứt hoặc lặp lại. Ngay cả khi bạn không mạnh hơn máy Turing (chỉ là giả thuyết, không phải thực tế đã được chứng minh), tất cả những gì chúng ta biết là không một thuật toán / người nào có thể cung cấp bằng chứng như vậy cho tất cả các chương trình. Có thể có một người khác nhau có thể quyết định cho mỗi chương trình.

Một số bài đọc liên quan khác:


Vì vậy, bạn thấy rằng câu hỏi thực tế của bạn (như được lặp lại dưới đây) không liên quan gì đến vấn đề tạm dừng có thể tính toán được không. Ở tất cả.

Các ví dụ đơn giản nhất (nhỏ nhất) được biết đến của [các chương trình chúng tôi không biết để tạm dừng hoặc lặp lại] là gì?

S

g(n)={1,S true,g(n+1),else.

Cấp, đây không phải là "tự nhiên".


  1. Không nhất thiết là tất cả , nhưng "nhiều" trong một số ý nghĩa. Vô cùng nhiều, ít nhất.

Bình luận không dành cho thảo luận mở rộng; cuộc trò chuyện này đã được chuyển sang trò chuyện .
Raphael

Để cố gắng viết lại điều này theo cách hiểu của riêng tôi, có đúng không khi nói rằng trong khi không có thuật toán duy nhất nào có thể xác định liệu có bất kỳ chương trình nào được đưa ra tùy ý, có thể có một số thuật toán dành riêng cho chương trình để giải quyết vấn đề tạm dừng của mọi chương trình có thể không?
Asad Saeeduddin

@AsadSaeeduddin Điều đó "tệ hơn": với mỗi bộ chương trình hữu hạn nhất định, vấn đề Ngừng là không đáng kể . Mỗi tập hợp hữu hạn là quyết định.
Raphael

7

Bất kỳ vấn đề mở nào liên quan đến sự tồn tại của một số có thuộc tính cụ thể đều dẫn đến một chương trình như vậy (chương trình tìm kiếm số đó). Ví dụ, lấy phỏng đoán Collatz; vì chúng tôi không biết có đúng không, chúng tôi cũng không biết liệu chương trình sau có chấm dứt hay không:

    n:=1;
    found:=false;
    while not found do
      s:={};
      i:=n;
      while i not in s do
        add i to s;
        if i even then i:=i/2 else i:=3i+1
      if 1 not in s then found:=true;
      n:=n+1  


0

câu hỏi rất khó bởi vì tính quyết định (chính thức hóa / khái quát hóa tương đương CS của vấn đề tạm dừng) có liên quan đến các ngôn ngữ nên nó cần được làm lại theo định dạng đó. điều này dường như không được chỉ ra nhiều, nhưng nhiều vấn đề mở trong toán học / CS có thể dễ dàng chuyển đổi thành các vấn đề (ngôn ngữ) không xác định được. điều này là do sự tương ứng chặt chẽ giữa việc chứng minh định lý và (un) phân tích tính quyết định. ví dụ (hơi giống câu trả lời khác với các số hoàn hảo lẻ), lấy giả thuyết số nguyên tố sinh đôi có từ thời Hy Lạp (hơn 2 milimet trước) và chịu sự tiến bộ lớn của nghiên cứu gần đây, ví dụ như Zhang / Tao. chuyển đổi nó thành một vấn đề thuật toán như sau:

Đầu vào: n . Đầu ra: Y / N tồn tại ít nhất n số nguyên tố sinh đôi.

thuật toán tìm kiếm các số nguyên tố sinh đôi và dừng lại nếu nó tìm thấy n của chúng. nó không được biết nếu ngôn ngữ này là quyết định. giải quyết vấn đề số nguyên tố sinh đôi (hỏi xem có số hữu hạn hay số vô hạn) cũng sẽ giải quyết tính quyết định của ngôn ngữ này (nếu nó cũng được chứng minh / phát hiện có bao nhiêu số, nếu là hữu hạn).

một ví dụ khác, lấy giả thuyết Riemann và xem xét ngôn ngữ này:

Đầu vào: n . Đầu ra: Y / N tồn tại ít nhất n số 0 không cần thiết của hàm Riemann zeta.

thuật toán tìm kiếm các số 0 không cần thiết (mã không đặc biệt phức tạp, tương tự như tìm kiếm gốc và có các công thức tương đương khác tương đối đơn giản, về cơ bản tính tổng "chẵn lẻ" của tất cả các số nguyên tố nhỏ hơn x vv) và tạm dừng nếu nó tìm thấy n trong số chúng và một lần nữa, không biết ngôn ngữ này có thể quyết định được không và độ phân giải "gần như" tương đương với việc giải quyết phỏng đoán Riemann.

Bây giờ, làm thế nào về một ví dụ thậm chí ngoạn mục hơn? (hãy cẩn thận, có lẽ cũng gây tranh cãi hơn)

Đầu vào: c: Đầu ra: Y / N tồn tại thuật toán O (n c ) cho SAT.

tương tự, độ phân giải của độ phân giải của ngôn ngữ này gần tương đương với bài toán P vs NP . tuy nhiên có ít trường hợp rõ ràng hơn cho mã "đơn giản" cho vấn đề trong trường hợp này.


1
Downvoter sẽ giải thích những gì sai với câu trả lời này?
MaiaVictor

2
NnNNa,b,can+bn=cnnN=2
vonbrand

3
Tôi không phải là người hạ cấp, nhưng tất cả các yêu cầu trong câu trả lời này đều sai. Tất cả ba vấn đề đó đều có thể quyết định được (không cần đưa ra bất kỳ giả định nào chưa được chứng minh). Vì sao, hãy nghiên cứu kỹ câu trả lời của Raphael.
DW

ok có thể đầu vào cần phải có TM được chỉ định và thuật toán quyết định nếu TM tính toán vấn đề. phải suy nghĩ nhiều hơn ... nghĩ rằng có một số công thức đơn giản cho các loại vấn đề này về cơ bản kết nối các vấn đề mở với các ngôn ngữ không thể giải quyết được ... nhưng đồng ý rằng điều này hiếm khi được ghi lại / công thức trong các tài liệu tham khảo CS ... chỉ tìm thấy một vài phân tán refs ... hoặc có thể đầu vào là một bằng chứng và ngôn ngữ xác minh xem bằng chứng đó có đúng không ... các câu trả lời được bình chọn cao khác đề cập đến các số hoàn hảo kỳ lạ, vấn đề collatz, v.v ... các chương trình không được biết là dừng hoặc không cho các hằng số cụ thể .
vzn

xin lỗi vì sự nhầm lẫn! về một số ý kiến ​​khác, các xác nhận là chính xác ở dạng mà chúng mô tả các chương trình đơn giản không biết là chấm dứt (đối với tất cả các đầu vào) (tức là câu hỏi ban đầu) và sự thất bại của ý tưởng tổng thể được phác thảo / chỉ ra bởi DW đang cố gắng chuyển đổi từng thành ngôn ngữ không thể giải quyết được. sẽ tiếp tục suy nghĩ rằng ý tưởng xây dựng sau này đang tìm kiếm một ý tưởng thành công. một cách nhìn khác là các vấn đề có thể được xem như là các trường hợp / đầu vào riêng lẻ cho một người giải quyết vấn đề tạm dừng nhưng không thực sự (được biết là) tương đương với chính vấn đề tạm dừng.
vzn

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.