Можливо, відповідь полягає в тому, що ваш колега правильний. Можливо, ви неправильно зрозуміли Тьюрінга, або як це застосовується тут?
Усі машини є кінцевими, тому немає «справжніх» машин Тьюрінга і немає програм, які ніколи не зупиняться. Тривіальна програма, яка виконує просту нескінченну петлю, може працювати 5 хвилин або 50 років, але на кінцевій машині вона зупиниться. Нетривіальна проблема, що не зупиняється, наприклад "розрахунок пі точно", також зупиниться, оскільки з часом обчислення перевищить здатність зберігати подальші цифри.
Результат Тьюрінга не гарантує нічого особливо корисного на кінцевих машинах, тому ваш квест в кінцевому рахунку безрезультатний. Краще зосередитись на тому, скільки часу і скільки грошей, а нескінченність залиште математикам.
Ви можете подумати, що подібна програма { while true: print "running"; print "halted"; }
є протимірним прикладом, але це не так. Ця програма має побічні ефекти, які можуть або не призведуть до її припинення. Ігноруючи побічні ефекти, можна розробити офіційний доказ того, що ця програма не зупиниться. У цьому питанні ми торкаємося лише програм, які ухиляються від формального підтвердження неприпинення, де питання про зупинку неможливо вирішити. Це не така програма.
Це може допомогти відрізнити "сильний" Тьюрінг від "слабкого" Тюрінга. Сильні машини Тюрінга насправді нескінченні, і якщо вони не зупиняться, працюватимуть нескінченний час. Ми не можемо їх створити.
Машини слабкого Тюрінга мають обмежені обмеження у часі та просторі, і вони є єдиним видом, який ми можемо створити. Нас цікавлять програми, які не можуть бути доведені, що вони зупиняються в цих межах. Тьюрінг говорить нам, що існують такі програми, але ми не можемо їх ідентифікувати. Якщо обмеження досить низькі, ми можемо їх визначити, написавши програму і запустивши її до своїх меж.
Суть Тьюрінга полягає в тому, що ярликів немає. Єдиний спосіб бути впевненим у тому, чи є проблема обчислювально обґрунтованою, - це написати програму, запустити її та з’ясувати. Маючи достатньо часу та грошей, ви можете написати всі програми, запускати їх назавжди та з часом та знаходити ті, які дають результати (хелтери). Інші ще будуть працювати. У вас у колеги є достатньо часу та коштів для цього?
Якщо серйозно, суперечка стосується меж. Тьюрінг та NP завершують нас, що певні класи проблем не можуть бути вирішені комп’ютерами в рамках будь-якого бюджету чи за будь-яким заданим графіком, незалежно від того, наскільки великий цей бюджет чи наскільки великим може бути цей графік. Прикладів такої проблеми є: розбиття криптографічних ключів; оптимізація маршрутів доставки по сотням адрес; пакування ящиків у вантажівки; знаходження помилок у великих програмах!
Тож попросіть свого колегу про бюджет та графік та пообіцяйте, що ви можете створити проблему, яку неможливо вирішити в рамках цього бюджету чи графіка. Цю обіцянку буде дуже легко виконати.