Forse la risposta è che il tuo collega ha ragione. Forse hai frainteso Turing o come si applica qui?
Tutte le macchine sono finite, quindi non ci sono macchine di Turing "reali" e nessun programma che non si fermerà mai. Un programma banale che esegue un semplice ciclo infinito potrebbe durare 5 minuti o 50 anni ma su una macchina finita si fermerà. Si interromperà anche un problema non-banale non banale come 'calcola pi esattamente', perché alla fine il calcolo supererà la capacità di memorizzare ulteriori cifre.
Il risultato di Turing non garantisce nulla di particolarmente utile su macchine finite, quindi la tua ricerca alla fine è infruttuosa. Meglio concentrarsi su quanto tempo e quanti soldi e lasciare l'infinito ai matematici.
Potresti pensare che un programma simile { while true: print "running"; print "halted"; }
sia un controesempio ma non lo è. Questo programma ha effetti collaterali, che possono o meno causare l'interruzione. Ignorando gli effetti collaterali, è possibile escogitare una prova formale che questo programma non si fermerà. In questa domanda ci occupiamo solo di programmi che sfuggono alla prova formale di non-arresto, in cui la questione dell'arresto è indecidibile. Questo non è un programma del genere.
Può aiutare a distinguere Turing "forte" da "debole". Le macchine di Turing forti sono in realtà infinite e se non riescono a fermarsi, funzioneranno per un tempo infinito. Non possiamo costruirli.
Le macchine di Turing deboli hanno limiti finiti nel tempo e nello spazio e sono l'unico tipo che possiamo costruire. Siamo interessati a programmi che non possono essere dimostrati fermarsi entro tali limiti. Turing ci dice che ci sono tali programmi ma non possiamo identificarli. Se i limiti sono abbastanza bassi possiamo identificarli scrivendo il programma ed eseguendolo ai suoi limiti.
L'essenza di Turing è che non ci sono scorciatoie. L'unico modo per essere certi che un problema sia fattibile dal punto di vista computazionale è scrivere il programma, eseguirlo e scoprirlo. Con abbastanza tempo e denaro puoi scrivere tutti i programmi, eseguirli per sempre e nel tempo e trovare quelli che producono risultati (le cavezze). Gli altri continueranno a correre. Collaboratore ha abbastanza tempo e denaro per farlo?
Scherzi a parte, la disputa riguarda i limiti. Turing e NP complete ci dicono che alcune classi di problemi non possono essere risolte dai computer all'interno di un determinato budget o in un determinato programma, non importa quanto grande sia quel budget o quanto generoso possa essere quel programma. Esempi di questo tipo di problema abbondano: rompere le chiavi crittografiche; ottimizzare i percorsi per effettuare consegne a centinaia di indirizzi; scatole per imballaggio in camion; trovare bug in programmi di grandi dimensioni!
Quindi chiedi al tuo collega un budget e un programma e prometti che puoi produrre un problema che non può essere risolto all'interno di quel budget o programma. Questa promessa sarà molto facile da mantenere.