Диагональный аргумент и бесконечные множества

От редакции

Многоуважаемые читатели!

Эта статья вызвала много вопросов, горячее обсуждение в сети и обвинения в лженауке. У нас не было цели устраивать нездоровые сенсации и опровергать основы математики. Реагируя на столь живой отклик, мы попросили прокомментировать статью Данияра Салкарбековича Шамканова, кандидата физико-математических наук, старшего научного сотрудника Математического института им. В. А. Стеклова РАН, доцента факультета математики НИУ ВШЭ. С комментарием вы можете ознакомиться по ссылке.

С уважением, Денис Яцутко, редактор.

Математика — очень полезная для человеческой практики наука. Довольно тяжело найти ту научную или инженерную область, для которой бы не было одного или нескольких разделов математики, способных оказать оной существенную помощь.

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

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

Или как, например, соизмерить одно бесконечное с другим бесконечным? Осмысленна ли вообще такая процедура?

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

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

Вот об этих ошибках — содержащих противоречия трактовках понятий «бесконечное» и «бесконечное множество» — как раз и пойдёт речь в статье.

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

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

Понятия «множество» и «бесконечность»

Идею множества довольно легко понять через следующую процедуру.

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

Обычно список покупок не подразумевает, что их надо делать именно в том порядке, в котором они перечислены — можно в произвольном: главное, чтобы каждый «элемент» в конечном счёте был куплен. Вот это и есть неупорядоченное множество: перечень всех элементов, где их порядок можно проигнорировать.

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

Если же слить два списка в один, то это будет объединением множеств. И так далее.

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

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

Это подводит нас к идее «бесконечного» множества.

«Бесконечное» тут не случайно заключено в кавычки: это слово может означать самые разные вещи, в зависимости от его трактовки, что, собственно, и будет основной темой данной статьи.

Так вот, на примере списка покупок уже можно понять какие-то нюансы трактовки «бесконечного».

Например, в него могут попасть «апельсины» или «бекон», однако вряд ли Петя соберётся купить «пространство», «наверно» или «эй».

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

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

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

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

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

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

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

Понятие «предел»

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

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

Через сколько-то шагов у нас получилась такая последовательность результатов.

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

Однако можно задаться вопросом: а что будет «в конце» этого процесса?

В каком ещё «конце»? Никакого конца нет — мы ж можем повторить сколько угодно раз!

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

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

Для характеристики такой последовательности и описания такой закономерности мы можем ввести понятие «предел».

То есть,

  1. …если последовательность такова, что начиная с какого-то шага результаты всех последующих шагов укладываются в какой-то отрезок…
  2. …и, начиная с некоторого шага, длина этого отрезка только сокращается…
  3. …и ни на каком шаге не прекратит сокращаться, рано или поздно став меньше любой указанной длины…
  4. …и внутри этого отрезка всё время находится некоторое число…

то вот это число — «предел последовательности». В том смысле, что чем дальше по последовательности, тем ближе все её последующие элементы к этому числу.

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

Бесконечный предел

Однако давайте теперь будем не делить предыдущие элементы на 2, а умножать.

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

Мы начали с единицы и назвали «сто миллиардов», но рано или поздно некоторый элемент последовательности станет больше ста миллиардов, следующий ещё больше, следующий — ещё, и так далее.

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

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

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

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

Так, описанный выше процесс на «точном математическом языке» записывается как

Возможно, вам не знакомо обозначение «lim», неясно, что означает «→», и даже символ «∞» вы, хоть и сможете прочитать, как «бесконечность», но не сможете точно определить его смысл, если недостаточно вдумчиво читали написанное ранее. Однако один символ, который — в данном случае, к сожалению, — всем знако́м: символ «=».

Математический символ, наделённый наибольшим количеством разных смыслов, из всех символов математики.

«Предел равен бесконечности» — вот что прочитает любой знакомый с высшей математикой, включая профессиональных математиков.

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

То есть

оба два нормальные, но вот

уже нет — нормальный из них только первый. Занимательная система обозначений.

Актуальная бесконечность

«Бесконечность» — не число, а ссылка на особого рода закономерность, которая, тем не менее, иногда записывается так, будто это число, от чего велик соблазн как-то допилить это понятие, чтобы оно стало совсем числом.

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

Например, исходя из того, что

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

Ой. «Бесконечность, как число» явно должна обладать какими-то иными свойствами — так же как ими обладает число «ноль» в контексте умножения.

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

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

Ну да ладно, у нас есть менее очевидная область — множества. А среди них есть множества, в которых количество элементов «бесконечно».

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

И даже оказалось, что в таком ключе вполне можно писать абсолютно корректные программы: которые правильно обработают список, количество элементов которого ничем в программе не ограничено.

Однако, где эти «ещё не добавленные» элементы «остаются»? Откуда мы их «извлекаем», чтобы добавить в наш список—множество? Не из другого ли множества, где они во всём своём бесконечном количестве уже лежат? Почему бы нам не взглянуть на это, гораздо более занимательное множество?

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

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

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

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

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

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

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

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

Правда, не факт, что таковое у них всех относится и к «множеству возможных покупок» тоже, но к некоторым математическим сущностям оно у них явно относится.

Множество натуральных чисел и теория множеств

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

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

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

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

Почему бы тогда не предположить, что оно не «в некотором смысле», а в совсем прямом смысле уже существует?

Мы, математики, ведь уже даже пишем что-то вроде «число 10 принадлежит к множеству натуральных чисел». Чем это принципиально отличается от «батон нарезной уже включён в Петин список покупок»? Или хотя бы от «батон нарезной относится к множеству того, что возможно прямо сейчас купить и съесть»?

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

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

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

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

Вроде бы нет, но ведь всё равно считают.

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

Об одном из таких методов как раз и пойдёт речь дальше, но сначала рассмотрим один из наиболее напрашивающихся вопросов теории множеств, независимо от того, наивная она или нет.

Как соотнести между собой бесконечные множества?

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

Однако в аналогичном же смысле бесконечно и потенциальное множество товаров, включающих в себя и несъедобные тоже.

И количество слов языка.

Мы имеем три бесконечных множества, а для бесконечности понятия «больше» и «меньше» не определены — она же не число.

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

То есть множества-то бесконечные, но при этом они включены друг в друга.

И в каждом «внешнем» множестве по логике вещей должно быть «больше» элементов, чем во «внутренних»: все, которые есть во внутренних, плюс какие-то ещё.

Везде бесконечно много, но в одном всё равно больше, чем в другом. То есть бесконечности в этой новой трактовке должны быть сравнимы между собой.

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

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

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

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

Мощность множеств

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

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

На примере списков покупок это бы работало так. Есть у нас Петин список и полный перечень всего ассортимента всех магазинов. Берём первый элемент Петиного списка и ищем его в полном перечне всех магазинов. Находим. Записываем его номер в перечне. Берём второй, находим, записываем номер.

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

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

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

К сожалению, если мы трактуем бесконечные множества как «актуально бесконечные» — в стиле «они уже есть и сразу бесконечные», то такой итеративный подсчёт работать уже не будет.

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

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

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

Так оно и есть. Рассмотрим для начала…

Доказательство равномощности рациональных и натуральных чисел

«Рациональным числом» называется то число, которое представимо в виде простой дроби.

Поскольку

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

Давайте впишем все дроби в бесконечную таблицу: в её колонках будет числитель дроби, а в строках — знаменатель.

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

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

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

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

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

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

Множества, таким образом, равномощны, даже если учесть и отрицательные рациональные числа тоже.

Но для всех ли множеств существует такой способ?

Иррациональные числа и «диагональный аргумент» Кантора

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

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

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

Обратное неверно: не любое число, имеющее в десятичном представлении бесконечное количество знаков, является иррациональным. Например,

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

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

И вот из этого следует доказательство того, что множество действительных чисел мощнее множества натуральных. Изначально предложенное Кантором.

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

Рассмотрим все действительные числа, лежащие на отрезке от 0 до 1 (исключая эту самую единицу).

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

Именно в такой форме мы и будем записывать все числа.

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

Поскольку наша цель — доказать, что способа нет, конкретный порядок нумерации известен быть не может, а для разъяснения процесса будут использованы произвольные числа.

  1. 0,123
  2. 0,57434
  3. 0,915543
  4. 0,7
  5. …и так далее

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

1 1 2 3 0 0 0 0
2 5 7 4 3 4 0 0
3 9 1 5 5 4 3 0
4 7 0 0 0 0 0 0
5 .

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

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

У нас было «0,1750…», теперь будет, например, «0,3232…».

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

Однако оно не может стоять ни в одной из строк таблицы. Ведь чтобы стоять в первой строке, его первая после запятой цифра должна быть «1», а она «3», чтобы стоять во второй, вторая после запятой цифра должна быть «7», а она «2», и так далее.

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

Это доказывает, что мощность множества действительных чисел — даже расположенных на отрезке от 0 до 1 — больше, чем у множества натуральных: между множествами невозможно построить взаимно однозначное соответствие.

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

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

Этот же метод используется в некоторых версиях доказательства теоремы Гёделя. Есть и другие места.

В общем, многообещающий метод.

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

Нет, это была не опечатка.

Мощность множества натуральных чисел не равна самой себе

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

Следует заметить, что сами числа от такой записи не меняются, поэтому данный манёвр никак не влияет на корректность доказательства — всё это делается просто для удобства записи. Более того, слова «на таком-то месте стоит _» можно считать более регулярной в рамках рассматриваемого процесса формой фразы «к этому знаку число успело закончиться»: действительно, ровно те же слова мы могли бы говорить и при рассмотрении действительных чисел, рассматривая отдельно два случая — число ещё не закончилось к данному знаку или уже закончилось. Мысленное приписывание бесконечного количества нулей к концу числа позволило нам свести эти два случая в один: в любой позиции всегда стоит какой-то знак. Так же и здесь: вместо двух случаев остаётся один, только специальным знаком—маркером окончания числа к этой позиции выступает «_», а не «0».

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

Предположим, что мы нашли способ сопоставления натуральных чисел натуральным.

Есть, например, очевидный: каждое натуральное число сопоставляется самому же себе. Однако чтобы суть диагонального метода легче отслеживалась, предположим, что есть и другие, и каким-то из них мы воспользовались.

Тогда мы имеем бесконечный список примерно такого вида.

  1. 123
  2. 57434
  3. 915543
  4. 7

Как и раньше, разобьём каждое число на цифры и запишем всё это в таблицу.

1 1 2 3 _ _ _ _
2 5 7 4 3 4 _ _
3 9 1 5 5 4 3 _
4 7 _ _ _ _ _ _
5 .

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

У нас получилось натуральное число, например «3232…». Оно не может стоять в первой строке, поскольку его первая цифра должна была бы быть «1», а она «3», не может стоять во второй, поскольку вторая цифра должна была бы быть «7», а она — «2» и так далее. Даже в четвёртой строке оно не может стоять, поскольку в четвёртой позиции у него не знак подчёркивания (оно должно было бы кончиться уже после первой цифры, но нет, не кончилось).

То есть в этой таблице просто нет места для такого числа.

Какой бы способ сопоставления натуральных чисел с натуральными же мы бы ни выбрали, будет число, не попавшее в нумерацию!

Не, ну как «будет»? «Будет» в смысле той «актуальной бесконечности», которую мы допустили в предыдущих разделах.

Второй метод доказательства

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

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

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

Это, вдобавок, позволяет отказаться от знака «_», который тоже мог вызывать подозрения, и использовать в качестве заполнителя всё тот же «0» — ведь приписывание спереди целой части числа любого количества нулей точно так же не меняет число, как приписывание любого количества нулей сзади дробной части.

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

  1. 123
  2. 57434
  3. 915543
  4. 7

1 3 2 1 0 0 0 0
2 4 3 4 7 5 0 0
3 3 4 5 5 1 9 0
4 7 0 0 0 0 0 0
5 .

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

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

В чём тут фокус

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

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

Однако ровно то же самое делается Кантором с множеством действительных чисел — с той лишь разницей, что бесконечное количество цифр там стоит после запятой, а не до неё.

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

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

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

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

Конечное — это сколько? Две подойдёт? Тогда чисел всего 100 штук — от 0 (сочтём ноль для простоты натуральным) до 99.

100 цифр? Ну, Ok, тогда чисел всего

Какое бы ограничение мы ни назвали, всегда будет получаться лишь конечное количество чисел. То есть если их именно что актуально бесконечное количество: они уже лежат во множестве, а не просто может быть построено число с наперёд заданным количеством знаков, — то и цифр у некоторой их части тоже должно быть бесконечное количество. И количество таких чисел бесконечно.

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

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

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

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

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

В доказательствах неразрешимости остановки машины Тьюринга и разновидности доказательства теоремы Гёделя на основе «диагонального аргумента», кстати, всё ещё веселее.

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

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

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

Что наверно не вариант: лучше свести в ноль теорию множеств в таком её виде и некоторые сопутствующие ей утверждения (которые, кстати, до сих пор никак не проявляют себя на практике и, таким образом, не имеют практической пользы), чем вообще всю математику целиком.

Натуральные числа с бесконечным количеством знаков

Можно предположить, что натуральные числа с бесконечным количеством знаков не являются натуральными, и заключить, что подвох состоит именно в этом. Ведь такое число как бы должно быть «равно бесконечности», мы же им оперируем так, будто бы это — обычное натуральное число.

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

Причём у нас даже останется возможность проверять два числа на равенство между собой.

Не, ну как «остаётся»? Как бы остаётся.

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

С генерируемыми что «спереди», что «сзади» натуральными числами этот метод работает так же хорошо. Ну, тоже «как бы хорошо работает».

Ok, есть способ определить, что какие-то числа — разные, но как узнать, что какие-то другие числа — одинаковые?

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

Так будет что для действительных, что для натуральных чисел с бесконечным количеством знаков.

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

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

Можно предположить, что отличие в том, что «натуральное число с бесконечным количеством знаков — не натуральное число». Однако в процессе доказательства, вообще-то, такое число и не получается — оно получается только тогда, когда мы подменяем «предел» на «существование». И чтобы лучше понять, где тут проблема, рассмотрим доказательство «диагональным аргументом» как алгоритм.

«Диагональный аргумент» как алгоритм

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

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

Иными словами, программа правда строит «неуместное число», однако она никогда не закончит его построение.

Если мы попристальнее взглянем на процесс, то заметим следующее:

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

Что это означает для логики рассуждений?

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

Эти две вещи на каждом шаге процесса никак не противоречат друг другу, а являются довольно естественным математическим явлением.

При этом в случае с действительными числами мы ни на одном шаге не получаем иррационального числа — ведь любая конечная десятичная дробь рациональна.

И, аналогично, в случае с натуральными числами мы ни на одном шаге не получаем натурального числа с бесконечным количеством символов.

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

И тут, заметьте, в чём проблема. Когда мы трактуем бесконечность в смысле пределов, само определение предела говорит нам, что мы по мере продвижения по последовательности шагов становимся всё «ближе и ближе» к этому самому пределу (если он вообще есть).

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

Точно так же, сколько бы ни было цифр в натуральном числе, оно ровно такое же натуральное, как натуральное число с другим количеством цифр.

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

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

Это совершенно не одно и то же, но мы мысленно «гасим софиты» и представляем себе, что вот он, результат

Причём так происходит три раза.

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

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

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

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

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

Что же произошло на сцене в тот момент, когда погасли софиты?

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

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

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

Завершимость незавершимого

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

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

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

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

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

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

Таким образом, введя целую кучу противоречивых утверждений, мы сделали вывод о том, что «действительные числа нельзя разбить на пары с натуральными». Но вот натуральные с натуральными — почему-то можно. Хотя процессы вообще неотличимы (ну, с поправкой на «держим ноль и десятичную запятую в уме»).

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

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

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

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

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

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

Как вернуть иррациональные числа

Сами по себе иррациональные числа появились из анализа некоторых аналитических конструкций (подобных «корню из двух» или «число π»), для которых показывалось, что некоторые такие конструкции принципиально не представимы в виде простой дроби.

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

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

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

Далее мы смотрим на максимальный номер символа и выделяем под хранение каждого символа столько бит (то есть элементарных ячеек, в каждой из которых может лежать 0 или 1), сколько нужно, для хранения максимального номера символа. Теперь любой «текст» может быть сохранён как последовательность чисел, под хранение каждого из которых отведено вот столько бит.

Для простоты можно взять с запасом — например, 16 бит хватит для кодирования 65536 разных символов, а потому любую математическую конструкцию возможно представить как последовательность чисел, хранящихся в шестнадцатибитных ячейках.

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

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

Другой вопрос, а все ли иррациональные числа имеют хоть какое-то конечное аналитическое выражение?

Тут есть масса тонкостей. Например, для числа π (изначально определённого не через аналитическое выражение, а через свои свойства) известен целый ряд рекурсивных алгоритмов, позволяющих вычислить сколь угодно много знаков этого числа.

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

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

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

И тут снова вопрос: а есть ли такие иррациональные числа, которые невозможно записать таким способом?

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

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

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

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

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

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

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

Иными словами, трактовка бесконечности, как чего-то «потенциального», меняет выводы, но при этом устраняет противоречия. Чего нельзя сказать о трактовке бесконечности, как чего-то «актуального».

Неотличимость рациональных чисел от иррациональных

Для надёжности сделаем контрольный выстрел.

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

То есть примеры и того, и этого существуют, даже если не все нюансы сейчас ясны.

Однако в тот момент, когда мы пользуемся «диагональным аргументом», возникает странное.

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

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

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

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

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

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

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

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

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

Но давайте «решим, что их там нет».

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

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

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

И поэтому мощность множества рациональных чисел больше мощности множества натуральных, несмотря на то, что мы точно знаем способ нумерации рациональных чисел.

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

Отказ от актуальной бесконечности

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

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

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

«Долетит», — возражает ему математик, — «ведь» …

Однако давайте рассмотрим процесс в ином свете: вместо суммы частей пути давайте будем рассматривать последовательность расстояния до цели на каждом шаге.

Из условий задачи легко найти, что оставшаяся часть пути зависит от шага, как

При этом, если пройденная к данному шагу последовательности часть пути равна sn, то оставшаяся часть пути равна

Если знак равенства после суммы ряда правда означает «равно», а не «предел частичных сумм равен», то из этого следует, что существует такое n, что

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

И для какого же это числа выполняется, интересно? Не для того ли самого «числа ∞», при помощи которого можно доказать, что 1 = 2?

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

Если оставшаяся часть пути когда-нибудь станет равной нулю, то из этого следует, что есть такое число, которое при делении на два даёт ноль.

Что это за число? Очевидно, ноль же.

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

Быть может, апория тогда неразрешима?

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

Таким вот образом «упрощение записи» — отбрасывание указания на предел и замена всей этой конструкции на простой знак равенства — подталкивает к «парадоксам».

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

Как избежать противоречий диагонального аргумента

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

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

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

Это, в свою очередь, означает, что реально мы конструируем вот такое число:

где an — полученная на данном шаге цифра.

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

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

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

Аналогично, когда мы приписываем цифры справа от запятой, мы конструируем число

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

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

А это совсем даже не идентично «актуально существующей бесконечной десятичной дроби, равной корню из двух».

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

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

Уточнение понятия «бесконечное множество»

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

Это может показаться очень близким к «множество, содержащее бесконечно много элементов», но оно на самом деле иное: напротив, мы уверены, что в каждом конкретном «экземпляре» этого множества будет конечное количество элементов — просто мы не знаем, сколько именно, и никак не закладываемся в рассуждениях на «как максимум, столько-то».

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

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

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

Так, например, если мы рассматриваем «бесконечное множество всех стульев», то на самом деле мы имеем дело с тремя разными сущностями.

  1. Критерий того, считать ли объект «стулом».
  2. Множество или множества выбранных нами стульев («все стулья, имеющиеся в данный момент на Земле», например).
  3. Генератор или хотя бы гипотетический генератор новых стульев (обеспечивающий, в частности, возможность добавить к имеющимся на Земле стульям ещё один).

В этой трактовке вопрос «возможно ли пронумеровать всё множество стульев?» теряет смысл.

Точнее, теряет свой расплывчатый смысл.

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

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

Вопрос же «может ли существовать генератор, который сгенерирует бесконечно много чисел?» в данной трактовке имеет ответ: «да, может, поскольку бесконечность множества мы понимаем как возможность сгенерировать ещё один его элемент, сколько бы их ни было сгенерировано до того».

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

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

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

Лекс Кравецкий :