Forse la risposta è che il tuo collega di lavoro è corretto. 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 ciclo infinito semplice potrebbe eseguire 5 minuti o 50 anni, ma su una macchina finita si fermerà. Anche un problema non banale di non interruzione come "calcolare più esattamente" si fermerà, 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 è in definitiva infruttuosa. Meglio concentrarsi su quanto tempo e quanti soldi e lasciare infinito ai matematici.
Potresti pensare che un programma come { while true: print "running"; print "halted"; }
sia un controesempio, ma non lo è. Questo programma ha effetti collaterali, che possono o meno causare l'arresto. Ignorando gli effetti collaterali, è possibile escogitare una prova formale che questo programma non si fermerà. In questa domanda ci occupiamo solo di programmi che eludono la prova formale di non fermarsi, dove la questione dell'arresto è indecidibile. Questo non è un programma del genere.
Può aiutare a distinguere Turing "strong" da Turing "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 debole hanno limiti finiti su tempo e spazio, e sono l'unico tipo che possiamo costruire. Siamo interessati a programmi che non possono essere fermati entro questi limiti. Turing ci dice che ci sono tali programmi ma non possiamo identificarli. Se i limiti sono abbastanza bassi, possiamo identificarli scrivendo il programma e portandolo ai suoi limiti.
L'essenza di Turing è che non ci sono scorciatoie. L'unico modo per essere certi che un problema sia computazionalmente fattibile è 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. Il tuo collaboratore ha abbastanza tempo e denaro per farlo?
Seriamente però, la disputa riguarda i limiti. Turing e NP ci dicono che determinate classi di problemi non possono essere risolti da computer all'interno di un dato budget o in un dato programma, indipendentemente da quanto sia grande il 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 di imballaggio in camion; trovare bug in grandi programmi!
Quindi chiedi al tuo collega di lavoro un budget e un programma e prometti che puoi produrre un problema che non può essere risolto in quel budget o programma. Questa promessa sarà molto facile da mantenere.