De acuerdo con el teorema de Rice, la respuesta en un lenguaje con recursión general (bucles potencialmente ilimitados) es no , a menos que cuente las “propiedades” triviales que son idénticamente falsas o idénticas. En otras palabras, el razonamiento sobre código arbitrario es imposible, excepto en lenguajes que son estrictamente menos poderosos que cualquier lenguaje de programación moderno (formalmente hablando, no Turing-completo).
La buena noticia es que los humanos no escriben códigos arbitrarios. Escribimos programas para resolver problemas específicos y, por lo general, nos mantenemos dentro de un subespacio de “todos los programas” de baja entropía porque nosotros mismos no tenemos la inteligencia para aventurarnos en lo profundo y razonar sobre lo que hay. Si genera un programa de trabajo aleatorio para un idioma determinado, y hay lenguajes de juguete en los que es posible “generar un programa de trabajo aleatorio”, bajo ciertas restricciones, no se parece en nada a lo que escribiría un humano. Es un programa sin propósito y, si bien es posible que no podamos razonar sobre él de manera significativa, eso no es realmente un problema, excepto un académico. La mayoría de los programas que escriben los humanos son (al menos, uno espera esto) lo suficientemente bajos en entropía como para que podamos seguir razonando sobre ellos. Los sistemas de tipos ayudan mucho, al igual que los idiomas restringidos. Por ejemplo, en un lenguaje que solo permite la recursión primitiva (es decir, permite bucles limitados, pero no “ilimitados”), el problema de la detención se vuelve trivial: cada programa se detiene.
Por así decirlo, los grandes resultados negativos de mediados del siglo XX (el Teorema de la Incompletitud de Godel, el trabajo de Turing sobre el Problema Detenido, el trabajo de la Iglesia sobre la indecisión de la igualdad funcional general y el Teorema de Rice) fueron, en ningún caso, inesperados o incluso perturbadores. . Los matemáticos habían sospechado que eran verdad; de lo contrario, habría una forma mecánica de cuantificar sobre “todos los problemas” y esto podría dejar a los matemáticos sin trabajo.
Por ejemplo, si el problema de Halting fuera algorítmicamente manejable, no habríamos necesitado que Andrew Wiles resolviera (el egociosamente mal llamado) el último teorema de Fermat. Puede codificarlo como un bucle de tiempo, ejecutar su comprobador de terminación y conocer la respuesta.
- ¿Qué preguntas de Quora sobre filosofía deberían leer todos?
- ¿Qué es tan detestable sobre la filosofía de Ayn Rands?
- ¿Permitiría Estados Unidos que exista un mundo perfecto que no esté bajo su control?
- ¿Es verdad que el bien siempre vence al mal? ¿O es simplemente más probable?
- ¿Quiénes son los mejores filósofos modernos?
La mala noticia, como sabemos muy bien, es que si bien la mayoría de los seres humanos intentan escribir código de baja entropía, el software adquiere vida propia una vez que el proyecto se desarrolla como multi-desarrollador, y en ese momento podemos profundizar más en eso. Región de “código arbitrario” en la que la única forma de razonar sobre el código es empíricamente (es decir, ejecutarlo). Muchos proyectos corporativos, si bien pueden no estar tan lejos en el código arbitrario o de alta entropía como matemáticamente indecidible, han ido mucho más allá de la capacidad de las herramientas y técnicas modernas para entender el código (especialmente cuando se considera que las computadoras reales son mucho más complejas que las computadoras idealizadas de la lógica matemática).