Короткий зміст: За теоремою Райса все неможливо. І все-таки я роблю це, нібито, неможливо весь час!
Звичайно, теорема Райса не говорить просто "все неможливо". У ньому сказано щось досить конкретніше: "Кожна властивість комп'ютерної програми не обчислюється".
(Якщо ви хочете розділити волоски, кожне "нетривіальне" властивість. Тобто властивості, якими володіють усі програми або програми не мають тривіального обчислення. Але будь-яке інше властивість не обчислюється.)
Ось що говорить теорема, або, здається, говорить. І, мабуть, велика кількість дуже розумних людей ретельно перевірили правильність цієї теореми. Але це, здається, повністю не відповідає логіці! Є численні властивості програм, які тривіально обчислювати !! Наприклад:
Скільки кроків виконує програма перед зупинкою? Вирішити, чи є це число кінцевим чи нескінченним, саме проблема зупинки, яка не обчислюється. Вирішити, чи більша ця чи менша, ніж деяка кінцева , тривіально! Просто запустіть програму до n кроків і подивіться, зупиняється вона чи ні. Легко!
Аналогічним чином , робить використання програми більш-менш ніж одиниць пам'яті в своїх перших м кроків виконання? Тривіально обчислювані.
Чи згадується текст програми змінної з назвою ? Тривіальний текстовий аналіз виявить відповідь.
Програма чи викликає команду ? Знову скануйте текст програми, шукаючи це ім'я команди.
Я можу побачити безліч властивостей, які також виглядають невичислими; наприклад, скільки доповнень виконує повна програма програми? Ну, це майже те саме, що запитати, скільки кроків виконує програма, що практично є проблемою зупинки. Але, схоже, є навантаження на човні програмних властивостей, які по-справжньому дуже просто обчислити. І все-таки теорема Райса наполягає на тому, що жодна з них не обчислюється.
Що я тут пропускаю?