Quizás la respuesta es que su compañero de trabajo es correcto. ¿Quizás has entendido mal a Turing, o cómo se aplica aquí?
Todas las máquinas son finitas, por lo tanto no hay máquinas de Turing 'reales' ni programas que nunca se detengan. Un programa trivial que ejecuta un bucle infinito simple podría durar 5 minutos o 50 años, pero en una máquina finita se detendrá. También se detendrá un problema no trivial que no se detenga, como 'calcular pi exactamente', porque eventualmente el cálculo excederá la capacidad de almacenar más dígitos.
El resultado de Turing no garantiza nada particularmente útil en máquinas finitas, por lo que su búsqueda es en última instancia infructuosa. Es mejor centrarse en cuánto tiempo y cuánto dinero y dejar infinito a los matemáticos.
Puede pensar que un programa como { while true: print "running"; print "halted"; }
es un contraejemplo, pero no lo es. Este programa tiene efectos secundarios, que pueden o no hacer que se detenga. Ignorando los efectos secundarios, es posible idear una prueba formal de que este programa no se detendrá. En esta pregunta solo nos interesan los programas que evaden la prueba formal de no detenerse, donde la cuestión de la detención es indecidible. Este no es un programa así.
Puede ayudar distinguir Turing 'fuerte' de Turing 'débil'. Las máquinas de Turing fuertes son realmente infinitas y, si no se detienen, funcionarán por tiempo infinito. No podemos construir esos.
Las máquinas de Turing débiles tienen límites finitos de tiempo y espacio, y son el único tipo que podemos construir. Estamos interesados en programas que no se puede demostrar que se detengan dentro de esos límites. Turing nos dice que existen tales programas, pero no podemos identificarlos. Si los límites son lo suficientemente bajos, podemos identificarlos escribiendo el programa y ejecutándolo hasta sus límites.
La esencia de Turing es que no hay atajos. La única manera de estar seguro de si un problema es computacionalmente factible es escribir el programa, ejecutarlo y averiguarlo. Con suficiente tiempo y dinero puede escribir todos los programas, ejecutarlos para siempre y con el tiempo, y encontrar los que producen resultados (los cabestros). Los otros seguirán corriendo. ¿Tiene un compañero de trabajo suficiente tiempo y dinero para hacer eso?
En serio, sin embargo, la disputa se trata de límites. Turing y NP complete nos dicen que ciertas clases de problemas no pueden ser resueltas por computadoras dentro de un presupuesto dado o en un horario dado, sin importar cuán grande sea ese presupuesto o cuán generoso sea ese horario. Abundan ejemplos de ese tipo de problemas: romper claves criptográficas; optimizar las rutas para realizar entregas a cientos de direcciones; cajas de embalaje en camiones; ¡Encontrar errores en programas grandes!
Por lo tanto, solicite a su compañero de trabajo un presupuesto y un cronograma, y haga una promesa de que puede producir un problema que no puede resolverse dentro de ese presupuesto o cronograma. Esa promesa será muy fácil de cumplir.