Tôi đang nghiên cứu bằng chứng của định lý sau:
Đưa ra ngôn ngữ
là một máy turing và là thường xuyên
là không thể giải quyết được.
Bằng chứng được đưa ra trong Sipser cho thấy rằng nếu chúng ta đã có máy quyết định thì chúng ta có thể tạo một máy quyết định vấn đề tạm dừng:
Tôi đang gặp khó khăn để hiểu bằng chứng. Đây là cách tôi hiểu nó:
Khi (bất kỳ máy turing nào) và (bất kỳ chuỗi nào) được đưa vào máy , chúng tôi sẽ tạo một máy lấy chuỗi làm đầu vào, nhưng trước tiên chạy máy trên . Trường hợp đầu tiên, nếu , thì chỉ cần chấp nhận x. Đó là trong trường hợp này - tức là một ngôn ngữ thông thường. khác, trường hợp thứ hai, từ chối , sau đó kiểm tra xem đầu vào có dạng hay không và chấp nhận nếu nó là như vậy - tức là không phải là ngôn ngữ thông thường. Bên trong , cho cả hai trường hợp này nếu chúng tôi chạy trên sẽ trả về kết quả phù hợp mà có thể trực tiếp trả về.
Trường hợp tôi bối rối, trường hợp thứ ba, là khi không dừng lại trên . Sau đó , là ngôn ngữ thông thường và do đó sẽ trả về ACCEPT , không thể trả lại trực tiếp dưới dạng . Nhưng mô tả của giải pháp nghe có vẻ như trả về ACCEPT ngay cả trong trường hợp này (mã giả bên dưới). Vậy tôi đang làm gì sai? Có lẽ có một ý tưởng rất cơ bản mà tôi đang thiếu. Đây là mã giả cho máy và bên trong , như bạn có thể thấy, có máy đó tạo ra.
machine S(M, w):
// Construct an instance of machine M2 which uses M and w
machine M2(x):
r := M(w) // Might hang here
if r == ACCEPT:
return ACCEPT
else:
if x is of form 0^n.1^n:
return ACCEPT
else:
return REJECT
// Run R on M2 (always returns, never hangs)
r1 = R(M2)
if r1 == ACCEPT:
return ACCEPT
else:
return REJECT