Resumen: Según el teorema de Rice, todo es imposible. ¡Y sin embargo, hago cosas supuestamente imposibles todo el tiempo!
Por supuesto, el teorema de Rice no dice simplemente "todo es imposible". Dice algo más específico: "Cada propiedad de un programa de computadora no es computable".
(Si desea dividir pelos, cada propiedad "no trivial". Es decir, propiedades que todos los programas posses o no hay programas poseen son trivialmente computable. Pero cualquier otra propiedad no es computable.)
Eso es lo que dice el teorema, o parece decir. Y presumiblemente un gran número de personas muy inteligentes han verificado cuidadosamente la exactitud de este teorema. ¡Pero parece desafiar completamente la lógica! ¡Existen numerosas propiedades de los programas que son triviales para calcular! Por ejemplo:
¿Cuántos pasos ejecuta un programa antes de detenerse? Decidir si este número es finito o infinito es precisamente el problema de detención, que no es computable. ¡Decidir si este número es mayor o menor que algunos finitos es trivial! Simplemente ejecute el programa por hasta pasos y vea si se detiene o no. ¡Fácil!
Del mismo modo, ¿utiliza el programa más o menos de unidades de memoria en sus primeros pasos de ejecución? Trivialmente computable.
¿El texto del programa menciona una variable llamada ? Un análisis textual trivial revelará la respuesta.
¿El programa invoca el comando ? Nuevamente, escanee el texto del programa buscando ese nombre de comando.
Veo un montón de propiedades que lo hacen parecer no computables así; por ejemplo, ¿cuántas adiciones realiza una ejecución completa del programa? Bueno, eso es casi lo mismo que preguntar cuántos pasos realiza el programa, que es prácticamente el problema de detención. Pero parece que hay un montón de propiedades de programas que son realmente fáciles de calcular. Y, sin embargo, el teorema de Rice insiste en que ninguno de ellos es computable.
¿Que me estoy perdiendo aqui?