Algunas demostraciones de incomputabilidad usando la técnica de diagonalización
Abstract
Los supuestos fundamentales de la Teoría de la Computabilidad se establecieron antes de la aparición de los primeros ordenadores (a finales de los años 40), supuestos que muchos años de vertiginoso cambio no han conseguido alterar. Alan Mathison Turing demostró ya entonces que ningún ordenador, por muy potente que lo imaginemos, podría resolver algunas cuestiones. Estos problemas para los que no existe ningún algoritmo posible, los incomputables, no son excepcionales y hay un gran número de ellos entre los problemas que se plantean en torno al comportamiento de los programas.
El problema de parada, es sin duda el miembro más conocido de esta familia: no existe un algoritmo para decidir con carácter general si un programa ciclará o no al recibir unos datos de entrada concretos.
Para demostrar la incomputabilidad de un problema necesitamos un argumento lógico que certifique la inexistencia de algoritmo, o lo que es lo mismo, que pruebe que ninguno de los algoritmos existentes es capaz de resolver dicho problema. Tal argumento de carácter universal no suele ser sencillo de establecer, y normalmente suele estar relacionado con una demostración por reducción al absurdo. Existen distintas técnicas para lograr este objetivo. La técnica de diagonalización es la más básica de ellas, y resulta bastante conocida al no tratarse de una herramienta específica de la Informática Teórica. En este documento no se trata de explicar la técnica en sí, que se supone conocida, sino de ilustrarla con una colección de ejemplos de diferente grado de dificultad.