Bằng chứng về tính không ổn định của vấn đề dừng


25

Tôi đang gặp khó khăn trong việc tìm hiểu bằng chứng về tính không ổn định của Vấn đề Ngừng.

http://computing.guide/wp-content/uploads/2014/12/HaltingPro Hiệu1.jpg

Nếu trả về việc chương trình dừng lại ở đầu vào b hay không , tại sao chúng ta phải truyền mã của P cho cả ab ?H(a,b)abPab

Tại sao chúng ta không thể cung cấp với P và một số đầu vào tùy ý, giả sử, x ?H()Px


Hãy nhớ rằng trong mô hình tính toán đang được sử dụng ở đây, mọi đầu vào (được mã hóa) đều được phép. Không có loại kiểm tra hoặc bất cứ điều gì như thế. Bạn luôn có thể mã hóa một chương trình và truyền nó làm đầu vào cho chính nó.
asmeker

2
Bạn có thể nuôi bất cứ thứ gì bạn muốn. Cấu trúc của bằng chứng này đòi hỏi phải xem xét một đầu vào cụ thể. H
David Richerby

1
Bạn có thể cung cấp bất kỳ đầu vào cho chương trình. Mục đích là để tìm ra mâu thuẫn. Về mặt lý thuyết, máy 'H' sẽ hoạt động cho tất cả các loại đầu vào. Do đó, chúng tôi xem xét một trong tất cả các đầu vào có thể, dẫn đến mâu thuẫn.
Ugnes

Bằng chứng này là thiếu sót tinh tế. Hãy xem xét nếu tôi có một H () hoạt động cho tất cả mọi thứ trừ chính nó; đó vẫn sẽ là một giải pháp chung cho vấn đề dừng.
Joshua

Liên quan, có thể trùng lặp: cs.stackexchange.com/questions/42819/ Kẻ
Ilmari Karonen

Câu trả lời:


27

Bằng chứng nhằm mục đích tìm ra một mâu thuẫn. Bạn phải hiểu mâu thuẫn xuất phát là gì, để hiểu tại sao được sử dụng làm đầu vào cho chính nó. Mâu thuẫn là, một cách không chính thức: nếu chúng ta có một máy H (a, b) quyết định "a chấp nhận b", thì chúng ta có thể xây dựng một máy chấp nhận các máy không tự chấp nhận. (Đọc mà một vài lần cho đến khi bạn nhận được nó.) Máy hiển thị trong hình - chúng ta hãy gọi nó là M - M ( P ) = không P không chấp nhận P ?PMM(P)=PP

Mâu thuẫn xảy ra khi bạn đặt câu hỏi: không chấp nhận M ? Hãy thử làm việc với hai tùy chọn để xem làm thế nào có mâu thuẫn.MM

chấp nhậnM khi và chỉ khi M không chấp nhậnM ; Đây rõ ràng là một mâu thuẫn.MMMM

Đây là lý do tại sao bằng chứng để chạy trên chính nó không phải là một số đầu vào tùy ý. Đây là một chủ đề phổ biến trong các bằng chứng không thể gọi là đối số đường chéo.P


38

Bỏ qua hình ảnh trong một khoảnh khắc; chúng tôi sẽ sớm nhận được nó. Chương trình được coi là một công cụ kiểm tra tạm dừng: khi chúng tôi cung cấp cho H một đầu vào của chương trình a (nghĩ về một danh sách của một chương trình) và bất cứ điều gì cho b , H ( a , b ) hoạt động như sauH(a,b)HaabH(a,b)

  1. Nếu chương trình được biểu thị bằng nửa khi được b làm đầu vào, H ( a , b ) sẽ trả lời "có". Mặt khác, nếu chương trình được mô tả bởi a chạy mãi mãi khi cho đầu vào b thì H ( a , b )abH(a,b)abH(a,b) sẽ trả lời "không".
  2. Điều quan trọng, chương trình sẽ luôn dừng lại và đưa ra câu trả lời đúng cho bất kỳ cặp nào ( a , b )H(a,b) .

Đối số mà không thể xây dựng dựa trên hành động của một chương trình "đồi trụy" cụ thể, P , một chương trình sử dụng H làm chương trình con. P lấy đầu vào là danh sách của bất kỳ chương trình nào, x và thực hiện như sau:HPHPx

P(x) =
  run H(x, x)
  if H(x, x) answers "yes"
      loop forever
  else
      halt

Không khó để thấy điều đó

sẽ dừng khi và chỉ khi chương trình x sẽ chạy mãi mãi khi được đưa ra mô tả của chính nó làm đầu vào.P(x)x

Cho đến nay rất tốt: chắc chắn sẽ là một chương trình miễn là chương trình con H của nó là một chương trình.PH

PpP

P(p)P(p) sẽ chạy mãi mãi.

H(p,p)HH


Tôi thích câu trả lời này. Mặc dù bây giờ tôi đã hiểu bằng chứng, nó chỉ xuất hiện để chứng minh rằng H có thể ném ngoại lệ giới hạn đệ quy.
Fax

2
@Fax Hkhông được gọi nhiều hơn một lần, không có đệ quy Pnào. H(P, P)không thực thi P, nó chỉ "kỳ diệu" xác định có hay không Pdừng lại khi tự thông qua.
Ajedi32

@ Ajedi32 H(P,P)không phải thực thi P, nhưng nó phải thực thi H(x ↦ H(x,x), P)như là một phần của việc xác định nếu Pdừng lại. Mà mở rộng H(x ↦ H(y ↦ H(y,y), x), P)và như vậy.
Fax

@Fax Việc thực hiện Hkhông được chỉ định trong bằng chứng này. Vì vậy, không, nó không để thực hiện bất cứ điều gì, cho dù đó là Phoặc bản thân. Bằng chứng bắt đầu với giả định rằng một số loại chương trình Htồn tại quyết định một cách kỳ diệu vấn đề tạm dừng, sau đó tiếp tục chứng minh rằng chính sự tồn tại của một chương trình như vậy sẽ là một mâu thuẫn, và do đó không có chương trình nào như vậy tồn tại.
Ajedi32

1
@Fax Bạn nêu lên một điểm tốt về việc liệu một chương trình có thể tồn tại hay không quyết định vấn đề tạm dừng trừ khi được gọi chính nó. Xem Có bất kỳ bằng chứng nào về tính không ổn định của vấn đề tạm dừng không phụ thuộc vào tự tham chiếu hoặc chéo? cho một câu hỏi thú vị về điều đó
Ajedi32

9

Hãy thử một bằng chứng đẹp hơn với hình ảnh động. Và vì ansewrs không chỉ chứa một liên kết đến một trang web, đây là câu trả lời cho câu hỏi của bạn.

Đầu tiên, chúng ta hãy nhớ lại bằng chứng về sự không tồn tại của nhà tiên tri hoạt động. Chúng tôi chứng minh rằng với bất kỳ ứng cử viên nào Hcho một nhà tiên tri Dừng, có một chương trình Pvà đầu vào aHkhông dự đoán chính xác những gì P(a).

Định lý: Cho phép Hbất kỳ chương trình nào có hai đầu vào và luôn trả về một trong hai halthoặc loop. Sau đó, tồn tại một chương trình Qvà một đầu vào asao cho Q(a)dừng lại nếu và chỉ khi H(Q,a)trả về loop.

Bằng chứng. Xem xét chương trình

program P(y):
  if H(y,y) = halt then
    loop forever
  else:
    return

Hãy để Q = Pa = P. Hoặc H(Q,a) = halthay H(Q,a) = loop:

  • if H(Q,a) = haltthen Q(a)(mà chỉ P(P)) chạy mãi theo định nghĩa của P.
  • nếu H(Q,a) = loopsau đó Q(a)dừng lại bởi definitoin của P.

QED

Bạn hỏi tại sao chúng tôi xem xét H(P,P)thay vì H(P,X)cho một số khác X. Câu trả lời rõ ràng là "bởi vì H(P,P)điều gì làm cho bằng chứng hoạt động"! Nếu bạn sử dụng H(P,X)cho một số tùy ý X, sau đó bạn sẽ bị mắc kẹt. Thật vậy, bằng chứng sau đó sẽ trông như thế này:

Bằng chứng bị phá vỡ. Xem xét chương trình

program P(y):
  if H(y,y) = halt then
    loop forever
  else:
    return

Hãy để Q = Pa = Xcho một số tùy ý X. hoặc H(Q,X) = halthayH(Q,X) = loop :

  • giả sử H(Q,X) = haltsau đó chúng ta không thể nói điều gì P(X)làm được, bởi vì việc P(X)dừng lại phụ thuộc vào những gì H(X,X)trả về. Chúng ta đang mắc kẹt. Tuy nhiên, nếu chúng ta biết điều đó P(X)X(X) giống nhau, chúng ta có thể tiến bộ. (Vì vậy, chúng ta thực sự nên dùng X = P).
  • nếu H(Q,a) = loopsau đó chúng ta bị mắc kẹt một lần nữa, và chúng ta sẽ không bị cản trở nếu X = P.

Không có QED.

Tôi hy vọng điều này cho thấy rằng chúng ta phải xem xét H(P,P)để thực hiện ý tưởng của mình.


Haha. Tuyệt vời! :)
aelguindy

2

Kết quả cuối cùng của bằng chứng là tương tự:

P(P)P(P)P(P)(P)(P) sẽ không biết nên bày tỏ tình cảm gì . 🙂

(P)(P)

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.