Tóm tắt: Theo định lý của Rice, mọi thứ đều không thể. Tuy nhiên, tôi làm điều này được cho là không thể mọi lúc!
Tất nhiên, định lý của Rice không chỉ đơn giản nói "mọi thứ đều không thể". Nó nói một cái gì đó cụ thể hơn: "Mọi tài sản của một chương trình máy tính là không thể tính toán được."
(Nếu bạn muốn chia tóc, mọi thuộc tính "không tầm thường". Đó là các thuộc tính mà tất cả các chương trình sở hữu hoặc không có chương trình sở hữu đều có thể tính toán được. Nhưng bất kỳ tài sản nào khác đều không thể tính toán được.)
Đó là những gì định lý nói, hoặc dường như để nói. Và có lẽ một số lượng lớn những người rất thông minh đã cẩn thận xác minh tính đúng đắn của định lý này. Nhưng nó dường như hoàn toàn bất chấp logic! Có rất nhiều thuộc tính của các chương trình tầm thường để tính toán !! Ví dụ:
Có bao nhiêu bước để một chương trình thực hiện trước khi tạm dừng? Để quyết định xem con số này là hữu hạn hay vô hạn chính xác là Vấn đề Dừng, không thể tính toán được. Để quyết định xem con số này lớn hơn hay nhỏ hơn một số hữu hạn là chuyện nhỏ! Chỉ cần chạy chương trình cho tối đa bước và xem nó có dừng lại hay không. Dễ dàng!
Tương tự, chương trình sử dụng nhiều hơn hoặc ít hơn đơn vị bộ nhớ trong các bước thực hiện đầu tiên của nó ? Tính toán tầm thường.m
Có văn bản chương trình đề cập đến một biến có tên ? Một phân tích văn bản tầm thường sẽ tiết lộ câu trả lời.
Chương trình có gọi lệnh không? Một lần nữa, quét văn bản chương trình tìm kiếm tên lệnh đó.
Tôi có thể thấy rất nhiều tính năng mà làm trông không tính toán cũng; ví dụ, có bao nhiêu bổ sung để chạy hoàn thành chương trình? Chà, điều đó gần giống như hỏi chương trình thực hiện bao nhiêu bước , đó gần như là vấn đề dừng. Nhưng có vẻ như có rất nhiều tài sản chương trình mà thực sự rất dễ tính toán. Tuy nhiên, định lý của Rice khẳng định rằng không ai trong số họ có thể tính toán được.
Tôi đang thiếu gì ở đây?