Để giải thích một chút về các tuyên bố "không thể", đây là một bản phác thảo bằng chứng đơn giản.
Chúng ta có thể mô hình hóa các thuật toán với đầu ra bằng Turing Machines tạm dừng với đầu ra của chúng trên băng của chúng. Nếu bạn muốn có các máy có thể dừng bằng cách chấp nhận đầu ra trên băng của chúng hoặc từ chối (trong trường hợp không có đầu ra), bạn có thể dễ dàng đưa ra một mã hóa cho phép bạn mô hình hóa các máy này với "tạm dừng hoặc dừng, không," không có từ chối "máy móc.
Bây giờ, giả sử tôi có một thuật toán P để xác định xem hai TM như vậy có cùng một đầu ra cho mỗi đầu vào hay không. Sau đó, được cung cấp TM A và đầu vào X , tôi có thể xây dựng TM B mới hoạt động như sau:
- Kiểm tra xem đầu vào có chính xác X không
- Nếu có, sau đó nhập một vòng lặp vô hạn
- Nếu không, sau đó chạy A trên đầu vào
Bây giờ tôi có thể chạy P trên Một và B . B không dừng lại trên X , nhưng có cùng một đầu ra với A cho tất cả các đầu vào khác, vì vậy nếu và chỉ khi A không dừng trên X thì hai thuật toán này có cùng một đầu ra cho mọi đầu vào. Nhưng P được cho là có thể cho biết hai thuật toán có cùng một đầu ra cho mỗi đầu vào hay không, vì vậy nếu chúng ta có P, chúng ta có thể biết liệu một máy tùy ý có dừng trên một đầu vào tùy ý hay không, đó là Vấn đề Dừng. Vì Vấn đề dừng được biết là không thể giải quyết được, P không thể tồn tại.
Điều này có nghĩa là không có cách tiếp cận chung (tính toán) để xác định xem hai thuật toán có cùng một đầu ra luôn hoạt động hay không, do đó bạn phải áp dụng lý luận cụ thể cho cặp thuật toán bạn đang phân tích. Tuy nhiên, trong thực tế, có thể có các phương pháp tính toán hoạt động cho các lớp thuật toán lớn, và chắc chắn có những kỹ thuật bạn có thể sử dụng để cố gắng đưa ra bằng chứng cho bất kỳ trường hợp cụ thể nào. Câu trả lời của Dave Clarke cung cấp cho bạn một số điều có liên quan để xem xét ở đây. Kết quả "không thể áp dụng" chỉ áp dụng để đưa ra một phương pháp chung sẽ giải quyết vấn đề một lần và mãi mãi, cho tất cả các cặp thuật toán.