Là tạm dừng vấn đề tính toán cho các đầu vào / giả định cụ thể


19

Từ hiểu biết của tôi về bằng chứng cho thấy vấn đề tạm dừng là không thể tính toán được, vấn đề này không thể tính toán được vì nếu chúng ta có chương trình P (x) tính toán nếu chương trình x tạm dừng hay không, chúng ta đã gặp nghịch lý khi đưa P làm đầu vào cho cùng P, có: P (P), cố gắng quyết định xem P có dừng hay không sử dụng chính P.

Vì vậy, câu hỏi của tôi là: tạm dừng vấn đề có thể tính toán được bởi chương trình P cho tất cả các chương trình khác được sử dụng làm đầu vào nhưng bản thân P không? Nói cách khác: vấn đề tạm dừng không thể tính toán được chỉ trong trường hợp đặc biệt này hoặc bằng chứng chung chung hơn và tôi đang thiếu một cái gì đó?


Tôi nghĩ rằng bạn đang hiểu nhầm bằng chứng rằng vấn đề tạm dừng là không thể tính toán được. P (P) chỉ trả về true, bởi vì P luôn xác định xem chương trình có dừng trong thời gian hữu hạn hay không. Bạn cần phải làm một số xây dựng hơi khó khăn hơn để đạt được một mâu thuẫn.
Dan Staley

Tôi nghĩ rằng bạn sẽ nhận được câu trả lời tốt hơn và có lẽ thực tế hơn nếu bạn hỏi liệu có nhiều chương trình mà vấn đề tạm dừng có thể giải quyết được không. Rốt cuộc, nhiều chương trình thậm chí còn có thể kiểm chứng chính thức , điều này chắc chắn bao gồm cả quyết định liệu chúng có dừng với các đầu vào nhất định hay không. Tôi mạnh mẽ cho rằng nhóm đó không thể được xác định (vì điều đó sẽ giải quyết ..., bạn biết đấy), nhưng đối với phần lớn các chương trình trong thế giới thực, không có trở ngại nào để biết liệu họ có dừng lại hay không, cho các đầu vào có liên quan.
Peter - Tái lập Monica

Câu trả lời:


10

Nếu là bất kỳ hàm tính toán nào, thì g , được định nghĩa làfg

g(n)={f(n)if nkvotherwise

cũng có thể tính toán được, cho mọi lựa chọn của .k,v

Về cơ bản, nếu bạn có chương trình tính toán cho tất cả ngoại trừ , bạn có thể "sửa" trường hợp đó (ví dụ: sử dụng an ) và lấy chương trình tính cho tất cả .Pg(n)nn=kif then elsePg(n)n

Do đó, nếu bạn có thể tính toán hàm tạm dừng "ngoại trừ một trường hợp", bạn cũng có thể tính toán hàm tạm dừng (không có trường hợp ngoại lệ). Từ đó, bạn có thể có được một mâu thuẫn như bình thường.

Kết luận: không, bạn không thể quyết định vấn đề tạm dừng "ngoại trừ một trường hợp" (cũng không phải "ngoại trừ nhiều trường hợp").


1
Ok, tôi nghĩ rằng tôi đã hiểu nó về mặt toán học ... Nhưng tôi đã tự hỏi: nếu tôi cố gắng viết một chương trình tính toán HP, tôi sẽ gặp phải những vấn đề cụ thể nào? Tại sao và tại một số điểm tôi sẽ hiểu rằng tôi không thể viết một chương trình như vậy?
Alessio Martorana

@AlessioMartorana Nó phụ thuộc: bạn sẽ tiếp cận vấn đề như thế nào? Một vấn đề chính là phải luôn dừng lại, ngay cả khi đầu vào của nó là chương trình không tạm dừng - vì vậy bạn không thể đơn giản thử mô phỏng chương trình đầu vào. P
chi

Và giả sử chúng ta có thể thấy mã của chương trình đầu vào? Chúng tôi không thể từ mã xem chương trình dừng lại?
Alessio Martorana

2
@AlessioMartorana Chúng ta thực sự có thể thấy mã, nhưng nếu có một vòng lặp while thì chúng ta không thể nói chung nhiều. Một vòng lặp while có thể kiểm tra tất cả các bằng chứng có thể có của một phỏng đoán toán học tùy ý và chỉ dừng lại khi tìm thấy một bằng chứng. Quyết định xem vòng lặp này có dừng hay không có nghĩa là quyết định liệu phỏng đoán có thể chứng minh được hay không. Việc giải quyết HP sẽ cho chúng ta một cỗ máy trả lời Có (có thể chứng minh) / Không (không thể chứng minh) cho bất kỳ câu hỏi toán học chính thức nào. Đó sẽ là sức mạnh phi thực tế.
chi

1
@AlessioMartorana Nếu bạn nghĩ rằng bạn đã viết một chương trình giải quyết HP, thì chương trình của bạn sẽ thất bại theo một trong hai cách: đối với một số chương trình, nó có thể trả về kết quả sai (nói điều gì đó dừng lại khi nó không hoặc nói điều gì đó không xảy ra ' Không dừng lại khi có) và / hoặc chính chương trình người quyết định của bạn sẽ không dừng lại ở nhiều đầu vào mà bạn không thể biết liệu nó có thực sự dừng lại hay không nếu chỉ cần thêm thời gian để tính toán câu trả lời.
Shufflepants

21

vấn đề tạm dừng có thể tính toán được bởi chương trình P cho tất cả các chương trình khác được sử dụng làm đầu vào nhưng bản thân P không?

P1,P2,PTôiiiPPP

P


15
Tôi nghi ngờ câu cuối cùng của bạn có thể đúng, nhưng tôi không nghĩ rằng nó tuân theo điều đó bởi vì một tài sản là không thể chắc chắn rằng việc hạn chế tập hợp đầu vào dựa trên tài sản đó sẽ khiến vấn đề không thể giải quyết được. Như một ví dụ ngớ ngẩn, nếu bạn giới hạn bộ đầu vào để chấm dứt các chương trình (một thuộc tính không thể giải quyết được), vấn đề sẽ có thể được giải quyết (bởi một chương trình luôn trả về đúng).
Owen

3
@Owen Khi bản thân hạn chế là không thể giải quyết được, bạn không thể áp đặt hạn chế đó để nó không thể mua cho bạn bất cứ thứ gì trong thực tế.
David Richerby

5

Có các thuật toán để chỉ ra rằng các lớp chương trình nhất định làm hoặc không dừng lại. Ví dụ,

  • Có thể xác định theo thuật toán xem chương trình mô hình hóa máy trạng thái hữu hạn có dừng hay không.
  • Có thể xác định một cách hợp lý liệu máy turing giới hạn tuyến tính có dừng lại không
  • Nếu bạn biết chương trình thuộc lớp phức tạp nào, thì bạn biết rằng chương trình tạm dừng cho các đầu vào hữu hạn.

Mặc dù không có thuật toán để xác định xem chương trình tùy ý có dừng hay không, nhưng phần lớn mã được thiết kế để tạm dừng (giống như hầu hết các chương trình con) hoặc không dừng lại (như một vòng lặp vô hạn để xử lý các sự kiện) và có thể xác định bằng thuật toán để xác định đó là gì. Nói cách khác, bạn có thể có một thuật toán trả lời "tạm dừng", "không dừng lại" hoặc "Tôi không biết" và một thuật toán như vậy có thể được thiết kế để bao gồm đủ các chương trình mà nó sẽ hữu ích.


Điều này có liên quan gì với goto? Chúng ta không thể có một chương trình sử dụng goto và vẫn quyết định xem nó có dừng hay không, miễn là nó mô hình một máy trạng thái hữu hạn?
Bergi

Tôi sẽ viết về việc tạm dừng về các vòng lặp, và sau đó thay đổi nó chỉ để nói về những cỗ máy nhà nước hữu hạn và không có gì
Antonio Perez

4

Bằng chứng bằng mâu thuẫn không cần phải toàn diện , một ví dụ đơn lẻ là đủ. Bằng chứng về vấn đề tạm dừng là không thể giải quyết được cung cấp cho bạn một ví dụ về P mà tài sản tạm dừng không thể được quyết định. Bằng chứng này không nói rõ rằng P là chương trình duy nhất như vậy, trên thực tế, có thể tồn tại các bằng chứng độc lập xây dựng các lớp P. hoàn toàn khác nhau.


3

Bằng chứng thực sự là tổng quát hơn: vấn đề tạm dừng là một trường hợp đặc biệt của định lý Rice , trong đó nêu rõ

Φ

ABΦ(A)Φ(B)

xx

Bạn có thể nhận được một số kết quả bằng cách giới hạn không gian của các chương trình bạn muốn làm việc cùng, mặc dù những hạn chế này phải khá quyết liệt. Ví dụ: nếu bạn được đảm bảo rằng chương trình bạn được cung cấp tạm dừng trong vòng 100 bước hoặc chạy mãi mãi, việc quyết định xem chương trình đó có bị dừng hay không.

NkBB(k)


1
N

1
Đoạn cuối giống như Busy Beaver.
Ác

Liên quan đến các hạn chế "khá quyết liệt": tổng số ngôn ngữ lập trình là một điều. Họ có xu hướng đòi hỏi một mức độ tinh vi tương đối cao, vì vậy có thể bạn cho rằng quyết liệt đó, nhưng có thể giải quyết các vấn đề thực sự trong một không gian các chương trình có thể dừng lại.
Ben Millwood

Bao gồm một liên kết đến en.wikipedia.org/wiki/Rice%27s_theorem sẽ có ý nghĩa IMO.
Dmitry Grigoryev

Cảm ơn, tôi đã cập nhật câu trả lời. @BenMillwood Chắc chắn, nhưng đưa ra giải pháp của họ là "làm cho mọi thứ dừng lại" Tôi không chắc đó thực sự là những gì Alessio đang tìm kiếm. Một trường hợp trong đó hành vi tạm dừng là có thể quyết định nhưng không tầm thường sẽ rất thú vị, mặc dù: có thể các loại cưỡng chế Agda +?
Anton Golov

0

Đặt R là bất kỳ tập hợp đệ quy nhưng không đệ quy. Có vô số bộ như vậy. Đặt T là một máy Turing tạm dừng đầu vào k khi và chỉ khi k ở R. Như vậy T tồn tại cho bất kỳ tập hợp đệ quy nào. Không thể viết chương trình có thể giải quyết vấn đề tạm dừng cho điều này. Điều này là do bất kỳ thuật toán nào để xác định nếu T dừng sẽ mang lại thuật toán xác định tư cách thành viên trong R, điều này là không thể nếu R không có giá trị. Vì có vô số R như vậy, mỗi máy cung cấp các máy Turing khác nhau, nên có vô số máy Turing mà bất kỳ chương trình tạm dừng P cố gắng nào cũng sẽ thất bại.

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.