Тільки для запису, стандартний доказ нерозбірливості проблеми зупинки спирається на ту саму ідею, що і quines: про те, що можна написати програму, деякий суб-термін якої оцінює до вихідного коду для всієї програми. Тоді, якби була функція, halts
яка, задавши вихідний код для програми, повертала True, якщо ця програма зупинилася на всіх вхідних даних, а False - інакше, це буде законною програмою:
prog() = if halts "prog" then prog() else ()
де "prog"
було б якесь вираження, яке оцінюється для вихідного коду для prog
; однак, ви можете швидко побачити, що prog
зупинки (для всіх входів) якщо вони не зупиняються, що є протиріччям. Ніщо в цьому доказі жодним чином не покладається на введення / виведення (чи потрібно мені введення / виведення, щоб написати квітку?).
До речі, ви можете заглянути в "діалогове введення-виведення" для отримання додаткових доказів того, що введення-виведення абсолютно не має значення для вашої проблеми (в основному, програми, які роблять введення-виведення, можуть бути зведені до програм, які приймають введення як (явні) функціональні аргументи і повертають висновок як (явні) додаткові результати в ледачій мові). На жаль, зараз я не можу знайти в Інтернеті розумну, необ’єктивну (або діалогову) сторінку в Інтернеті.