Читаю книгу
Верещагин, Успенский, Шень. Колмогоровская сложность и алгоритмическая вероятность. М.: МЦНМО, 2013.
И вот на с. 69 встретилось мне непонятное.
Сначала дам несколько определений, чтобы стал ясен контекст.
Назовем двоичным словом кортеж нулей и единиц, двоичной последовательностью - бесконечную последовательность нулей и единиц. Рассмотрим пространство всех двоичных последовательностей

. Назовем двоичную последовательность продолжением слова

, если она начинается со слова

. Обозначим

множество всех продолжений слова

. Легко показать, что система

для всевозможных

образует в

базу топологии, и что эта топология является также кольцом множеств.
Рассмотрим функцию

, где

- длина слова

.
Определим функцию множества

. Можно показать, что такая функция является мерой, заданной на кольце всех открытых множеств (откуда ее можно продолжить по Лебегу с образованием соответствующей сигма-алгебры). Кстати говоря, указанная топология метризуема как раз метрикой

, где

- номер (начиная с нуля) первого знака, в котором различаются последовательности

и

. Множество

представляет собой открытый шар, причем каждая точка этого шара является его центром.
Теперь вопрос. Как известно, множество имеет нулевую меру, если для каждого

найдется его покрытие мерой меньше

. Как построить конструктивный вариант этого понятия? Ясно, что действительные

можно заменить рациональными. Вывести

в качестве выходных данных алгоритма тоже просто - достаточно вывести

.
Так вот Верещагин и К. дают такое определение.
"Множество

называется эффективно нулевым (по данной мере), если существует вычислимая функция

двух аргументов (первый - положительное рациональное число, второй - натуральное число), значениями которой являются двоичные слова, причём
1)

2)

При этом мы
не требуем (выделение мое), чтобы функция

была всюду определена; если

не определено, то соответствующий член (в обоих условиях) пропускается".
И далее задача: "Покажите, что определение не изменится, если предполагать, что алгоритм получает на вход рациональное

, а на выходе перечисляет некоторое множество двоичных слов (печатая их одно за другим с произвольными пробелами), которые образуют покрытие интервалами с суммарной мерой (мерой объединения) не больше

".
Собственно, вопрос. Что-то мне совсем не ясна природа этого разрешения - "функция

может быть не всюду определена". Вычислимая функция называется не определенной в точке

, если вычисляющий ее алгоритм, получив на вход

, зацикливается. Как тогда можно построить алгоритм, который строит покрытие по данному

? По идее, он должен вычислить и вывести сначала

, потом

и так далее. Но тогда он зациклится на первом же

, для которого функция не определена, и получится не "соответствующий член пропускается", а просто "последовательность обрывается на предыдущем члене". Некоторый смысл этому можно придать, если потребовать, чтобы функция, не определенная в

, была не определена и во всяком

- тогда функция зациклится если и только если она вывела последний член конечного покрытия. Но авторы такого требования не заявляют. Или тут используется тот факт, что область определения всякой вычислимой функции перечислима, и, значит, есть алгоритм

, который для всякого натурального

выдает

-тое по счету натуральное число

, для которого

определена? Тогда почему сразу не встроить этот алгоритм в алгоритм вычисления

, потребовав, чтобы

выдавала

-ный член покрытия? Это естественнее, чем разрешать ей быть не всюду определенной...
В общем, чего-то я не понимаю во всей этой истории.