Не число

Jan 29, 2021 14:38

Предположим, у нас есть генератор случайных чисел.

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

Теперь мы берём такой непредсказуемый генератор и используем его для того, чтобы раз за разом генерировать некое принципиально непредсказуемое число от нуля до девяти. Возвращённые числа мы трактуем как цифры десятичной записи некоторого «числа». Причём считаем, что это «число» составлено из всех цифр, которые вернёт генератор, а то, что мы имеем на данный момент, - лишь некоторое его приближение.

Почему «число» в кавычках?

Потому что, на мой взгляд, это не число. Это только кажется, что оно - число. Причём, кажется, в том числе, ряду математиков, но оно всё равно нет.

И вот в чём тут штука.

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

Для числа «sin(2)» можно использовать текстуальную идентичность. То есть сравнивать сам текст, которым оно записано, или объект, которым оно представлено: ну там «объект класса “Sin” с параметром “2”».

Однако для данного «числа» определение идентичности невозможно.

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

По тексту алгоритма - причём даже с учётом стартового «зерна» - мы тоже его идентифицировать не можем: в разные моменты времени один и тот же генератор, инициализированный одним и тем же зерном, будет возвращать разные цифры для одной и той же позиции.

Тем не менее, предположим, что каким-то чудом он всё-таки возвращает одни и те же цифры - просто мы их не можем предсказать, а потому идентичность по тексту функции генератора и зерну действительно можно было бы определить.

Тогда настаёт «во-вторых».

Во-вторых, это «число» нигде не существует и никогда не будет существовать. Просто по той причине, что в общем случае не может существовать наше предсказание оного в аналитической форме, а получение всех цифр из данного алгоритма заняло бы бесконечное количество времени.

Вот этот момент гораздо менее очевиден, чем предыдущий: сто-пицот-триллионный знак числа Пи тоже ведь никто не видел, однако мы всё равно считаем это число существующим.

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

Собственно, нам важно не столько точное численное значение, выраженное в бесконечном количестве цифр десятичной записи, сколько вот эти самые свойства.

Однако то «число», которое мы генерируем сабжевым генератором, никакими свойствами не обладает - если мы и встретим процесс, в котором какая-то константа или значение чего-то там в какой-то точке будет равно некоторому приближению этого «числа», то это будет лишь случайным совпадением. Начиная с какой-то цифры всё равно начнётся расхождение.

Сие, впрочем, можно счесть «философскими рассуждениями» и сказать: «ну и что, пусть на практике это число не встретится, однако оно всё равно число».

Ок, ладно, тогда перенесём сие из «философии» в теоретическую область, прежде чем снова вернуться к «философии».

Дело в том, что наше интуитивное предположение о том, что это - настоящее число, базируется исключительно на интуитивном же ощущении, что нечто, по построению состоящее только из цифр десятичной записи - точно число.

Вдобавок, мы приписываем цифры к его «хвосту» после десятичной точки, а потому каждая следующая только лишь сужает диапазон, в котором лежит это «число».

Состоит из цифр + диапазон всё у́же = число.

Как бы.

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

У функции «1/x», например, тоже есть предел - 0. Однако она никогда не будет ему равна.

Предел - это лишь некая характеристика диапазона, в котором лежат значения, начиная с какого-то момента, и то, что в каких-то случаях оный предел может быть записан числом, вовсе не означает, что «предел функции» и «значение функции» - одно и то же.

Скажем, функция «sin(x)/x» с ростом икса колеблется всё в меньшей и меньшей области вокруг нуля. Но она никогда не прекращает вокруг него колебаться. Если бы мы значение этой функции в какой-то точке трактовали, как «приближения» некоторого «числа», считая, что чем больше икс, тем точнее приближение, то мы получили бы аналогичный сабжевому генератору случай. «Число» лежит всё в более и более узком диапазоне. «Приближение всё точнее и точнее».

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

Более того, есть такие точки, в которых эта функция равна этому пределу.

Однако «предел sin(x)/x при икс стремящемся к бесконечности» действительно выражается числом 0, но вот «sin(∞)/∞» числом не является - у нас в принципе нет способа вычислить такое значение.

В случае с генератором происходит ровно вот оно: есть сужающийся интервал, есть предел последовательности, но само «число» не может быть вычислено, поскольку такое вычисление предполагало бы бесконечное количество операций. Если бы такое считалось «числом», то числом должен был бы считаться и «sin(∞)/∞» - тем более, у последовательности, из которой мы вывели это «число», даже предсказуем предел. Уж тут-то точно должно!

Причём соблазн объявить такое «числом» и в этом случае тоже весьма велик. Типа, почему бы и нет? Будем «∞» считать числом, тогда числом станет и «sin(∞)/∞».

Но довольно легко обнаружить, что «число бесконечность» ведёт себя совсем не так, как другие числа.

Чем, например, равно «∞ - 1»? Бесконечности же? То есть, все числа уменьшаются при вычитании единицы, а это нет?

Чему равно «sin(∞ - 1)/(∞ - 1)»? Снова нулю? Или, быть может, какому-то числу, которое отличается от нуля на бесконечно малую, но ненулевую величину? А «бесконечно малая ненулевая величина» тогда, видимо, тоже должна считаться числом?

Реально, я привёл лишь малую часть вопросов без ответа, которые появятся, если перестать называть это «пределом» и начать называть «числом». Если для уникального числа «ноль» не определена операция деления на это число, то для «чисел», подобных «числу бесконечность», окажутся не определены почти все операции. В довольно узкой области вычисления пределов как-то выкрутиться можно, но в случае со всей арифметикой - уже нет.

Более того, в некоторой области математики «для упрощения» попытались такое проделать, начав вместо «предел конечных сумм последовательности равен…» говорить: «сумма бесконечной последовательности равна…». И довольно быстро энтузиасты наплодили целую кучу сногсшибательных результатов бесконечного суммирования, самый известный из которых, пожалуй: «сумма всех натуральных чисел равна -1/12».

Почему так? Потому что, если мы назвали что-то «числом», мы автоматически распространили на него все закономерности, которым подчиняются числа. А значит, в частности, можно вычитать в произвольном порядке слагаемые бесконечных сумм друг из друга, считая результат тождественным разности этих бесконечных сумм.

С пределами такой фокус, разумеется, работает далеко не всегда: они ведь ведут себя не так, как числа. Например, предел x при стремлении икс к бесконечности равен бесконечности, и предел 2*x тоже, однако предел (x - x) равен нулю, но предел (2*x - x) уже бесконечность. Хотя, казалось бы, чего там, (∞ - ∞) оба раза - должен быть один и тот же результат. А оно нет.

Естественно, признание результата, возвращённого генератором при бесконечном количестве итераций, «числом» будет иметь аналогичные же проблемы. Причём будет, даже если они не лежат на поверхности и, как и в случае с бесконечными суммами, поначалу кажется «а чего такого?». «Оно ж как бы и правда равно числу - разве же может что-то пойти не так, если мы его таковым и признаем?».

Не просто «может», а «наверняка пойдёт». Хотя бы потому, что в аналогичных случаях оно уже пошло.

Например, есть ли гарантия, что при вычитании сгенерированного числа самого из себя получится ноль? Да-да, у Пи и sin(2) в десятичной записи тоже бесконечное количество цифр, однако для них такая гарантия есть, причём выводится она вовсе не из алгоритма генерации цифр. А для результата бесконечной генерации?

Если её нет, то, может статься, что это «число» обладает не только удивительным свойством не проверяться на равенство самому себе (ведь, как уже говорилось, при попытке сравнить число само с собой по цифрам сравнение никогда не закончится, а потому единственный альтернативный способ - считать такие числа равными чисто по тексту функции и зерну инициализации), но и при вычитании из самого себя давать ненулевой результат. А при делении на само себя - не единичный, но при этом отличаться от нуля.

Или, быть может, считать, что вычитание и деление для этого «числа» не определены? А что тогда вообще определено? Ведь, например, синус от этого числа или логарифм от него будут не определены по той же причине: разность может быть не равна нулю, а результат деления - не равен единице.

Можно спросить, а чем такой алгоритм генерации цифр принципиально отличается от, например, генерации цифр числа Пи?

Собственно, отличается он тем, что алгоритм вычисления цифр Пи построен на решении уравнений, отражающих свойства этого числа. Каждый шаг генерации цифры - решение такого уравнения. И то, что цифра именно такая, мы знаем из самого уравнения, а не откуда-то ещё. А уравнение, в свою очередь, следует из свойств данного числа. Причём все свойства этого числа нам известны не просто до решения бесконечного количества уравнений, дающих каждое десятичное приближение этого числа, а даже до решения первого из них.

Для сабжевого же алгоритма уравнений, описывающих свойства, вообще нет. Этот алгоритм просто генерирует непредсказуемые цифры, которые не соответствуют вообще никаким закономерностям. Он не численное решение какого-то уравнения, не описание какого-то экспериментально изученного процесса, и вообще ничто, что могло бы быть проверено чем-то, кроме запуска самого этого алгоритма до какого-то его шага.

Однако до бесконечного шага мы его запустить не можем, а потому данное «число» принципиально не обладает никакими определёнными свойствами.

То есть алгоритм, дающий приближения числа Пи, действительно даёт приближение числа Пи потому, что мы знаем о существовании числа Пи не из этого алгоритма. Свойства описаны и проверены извне другими методами, причём мы для них можем проверить, что каждое следующее приближение приводит к тому, что все они всё точнее и точнее выполняются.

При генерации же непредсказуемых цифр мы не даём тем самым приближения некоторого «числа», поскольку вовне у этого «числа» нет вообще никаких свойств. И точность «приближения» вообще не на чем проверить.

Это, по сути, означает, что отсутствует само «число», а в результате работы алгоритма мы лишь получаем цифры, которые выписываем друг за другом. У нас на каждом шаге получаются разные числа, у которых повторяется некоторая начальная часть, однако это не означает, что сей процесс ведёт нас к чему-то осмысленному. Мы действительно можем выписывать цифры сколь угодно долго, однако каждый их набор - это не «приближение» чего-то, а просто набор цифр. У которого нет «финальной точки» - в отличие от sin(2) или Пи, где существование оной следует не из выписывания каждой следующей цифры до бесконечности, а из доказательства существования числа, являющегося решением конкретных уравнений или обладающего конкретными свойствами.

Например, в случае с Пи, свойством: быть наименьшим положительным иксом, для которого верно, что «sin(x) = 0».

Если у «числа» нет свойств, нет идентичности, и нет возможности получить его точную запись, кроме как в виде ссылки на текст алгоритма, который генерирует то, что мы полагаем неким фрагментом этого числа, то оно не число. Просто по той причине, что для него не определены вообще никакие операции, определённые для чисел.

Напоследок скажу, что выбор мной такого генератора для анализа неслучаен.

Таковой, по сути, «упрощённая версия» генератора цифр на базе произвольного списка чисел. Который, например, берёт первую десятичную цифру после точки у первого числа списка и генерирует 0, если та не равна нулю, и 1, если равна. Потом берёт вторую цифру второго числа, потом третью у третьего и так далее.

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

Однако, как только мы вводим в этот процесс «бесконечный список» (а на деле -генератор каждого следующего элемента, который никогда не скажет «больше элементов нет»), мы попадаем в ситуацию, полностью аналогичную генерации непредсказуемых случайных цифр. Для бесконечных списков, в которых числа упорядочены по известной нам закономерности, может статься, что в «пределе генерации» на выходе действительно будет «число», обладающее заданными извне свойствами. Например, мы могли бы сделать «бесконечный список» из приближений числа Пи, и предсказать каждую следующую цифру, выданную генератором, не запуская сам генератор.

Но мы ведь говорим, что для любого списка мы этим способом сгененируем именно число. При этом узнать элементы произвольного списка заранее невозможно - возможно лишь просмотреть какие-то из них и тем самым их узнать.

Таким образом, подобный список становится для внешнего наблюдателя полным аналогом генератора непредсказуемых случайных чисел. И если мы говорим, что генерация цифр на базе этого списка «приближает» какое-то число, то мы тем самым говорим и то, что генератор непредсказуемых случайных цифр тоже генерирует «числа».

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

doc-файл

наука, философия

Previous post Next post
Up