Просто отметим, что стандартное доказательство неразрешимости проблемы остановки основывается на той же идее, что и на языке quines: можно написать программу, подстроку которой соответствует исходный код всей программы. Затем, если бы была функция, haltsкоторая, учитывая исходный код программы, вернула True, если эта программа остановилась на всех входных данных, и False в противном случае, это была бы легальная программа:
prog() = if halts "prog" then prog() else ()
где "prog"будет какое-то выражение, которое оценивается для исходного кода prog; однако вы можете быстро увидеть, что он progостанавливается (для всех входов), если он не останавливается, что является противоречием. Ничто в этом доказательстве никак не зависит от ввода-вывода (нужен ли ввод-вывод для написания квин?).
Кстати, вы можете захотеть заглянуть в «ввод-вывод на основе диалога», чтобы получить дополнительные доказательства того, что ввод-вывод совершенно не имеет отношения к вашей проблеме (в основном, программы, выполняющие ввод-вывод, могут быть сведены к программам, которые принимают ввод как (явные) функциональные аргументы и возвращают вывод в виде (явных) дополнительных результатов на ленивом языке). К сожалению, я не могу найти разумную, непредвзятую (или поддерживающую диалог) страницу в Интернете прямо сейчас.