Resumo: De acordo com o teorema de Rice, tudo é impossível. E, no entanto, faço essas coisas supostamente impossíveis o tempo todo!
Obviamente, o teorema de Rice não diz simplesmente "tudo é impossível". Diz algo bastante mais específico: "Todas as propriedades de um programa de computador não são computáveis".
(Se você deseja dividir os cabelos, todas as propriedades "não triviais". Ou seja, as propriedades que todos os programas possuem ou que nenhum programa possui são trivialmente computáveis. Mas qualquer outra propriedade não é computável.)
É o que o teorema diz, ou parece dizer. E, presumivelmente, um grande número de pessoas muito inteligentes verificou cuidadosamente a correção desse teorema. Mas parece desafiar completamente a lógica! Existem inúmeras propriedades de programas que são triviais para calcular !! Por exemplo:
Quantas etapas um programa executa antes de parar? Decidir se esse número é finito ou infinito é precisamente o Problema da Parada, que não é computável. Decidir se esse número é maior ou menor que algum finito é trivial! Basta executar o programa por até etapas e ver se ele pára ou não. Fácil!n
Da mesma forma, o programa usa mais ou menos que unidades de memória em seus primeiros passos de execução? Trivialmente computável.m
O texto do programa menciona uma variável chamada ? Uma análise textual trivial irá revelar a resposta.
O programa chama o comando ? Mais uma vez, verifique o texto do programa procurando esse nome de comando.
Eu posso ver muitas propriedades que fazem olhar não-computável bem; por exemplo, quantas adições uma execução completa do programa executa? Bem, é quase o mesmo que perguntar quantas etapas o programa executa, que é praticamente o Problema da Parada. Mas parece que há um monte de propriedades do programa que são muito, muito fáceis de calcular. E, no entanto, o teorema de Rice insiste que nenhum deles é computável.
O que estou perdendo aqui?