может ли программист написать определитель останова, который не сможет определить, останавливается ли он сам?
Так, согласно такой постановки задачи это невозможно. Так как анализатор это функция от одного аргумента, а по условию не сказано что передавать в аргумент анализатора для анализатора, то и создать такую функцию невозможно.
Так как анализатор имеет тип
f: (() -> a) -> a
Попробуем проанализировать анализатор анализатором
f f невалидное выражение, так как f : (() -> a) -> a != () -> a
Если мы попытаемся добавить в качестве аргумента аргументу анализатор, мы получим:
f (f f)
Что тоже невалидный терм.
И так далее.