От метрики к топологии
Что построила предыдущая глава
Глава 5.1 дала Части V первое аналитическое понятие — расстояние. Появились метрика на рациональных числах, абстрактное метрическое пространство, расстояние как процесс и — в самом конце — первое обещание: открытые шары и понятие <<близких процессов>>. На этом обещании и начинается настоящая глава.
Имея расстояние, можно строить топологию — науку о близости, окрестности, форме. Топология отвечает на вопросы, которые метрика только готовит. Что значит, что множество <<открыто>> — что у каждой его точки есть запас свободного пространства вокруг? Что значит, что две точки можно отделить? Что значит, что множество <<связно>> — что из любой его точки можно пройти к любой другой, не покидая множества? И — центральное понятие главы — что значит, что множество компактно?
Два слоя главы: топология и компактность
Глава распадается на два слоя, и о различии между ними честнее сказать сразу, с самого начала.
Первый слой — собственно топология: открытые и замкнутые
множества, отделимость, связность. Этот слой над строится
полностью и конструктивно. Опорные файлы топологического слоя —
Topology.v, ProcessTopOpen.v, ProcessTop\- Connected.v — не используют ни одной аксиомы. Здесь ToS получает
топологию <<даром>>: из одного только рационального расстояния, без
всяких дополнительных допущений.
Второй слой — компактность: теоремы Гейне–Бореля и
Больцано–Вейерштрасса. И вот здесь картина меняется. Компактность —
то место, где рациональные числа обнаруживают свою неполноту.
Классический Гейне–Борель над попросту неверен (об этом —
§ 2.5), и теоремы компактности приходится либо ремонтировать, либо
доказывать с привлечением законов логики ToS. Файлы
компактностного слоя — HeineBorel_ERR.v,
BolzanoWeierstrass.v — опираются на и локально на
.
Глава честно держит эту границу. Она не говорит <<вся топология построена без аксиом>> — это было бы неправдой о компактностном слое. Она говорит точнее: топологический слой конструктивен; компактностный слой опирается на законы логики ToS, и каждое такое обращение отмечается на месте.
О статусе аксиом: техническое и онтологическое
Здесь нужно условиться о словах, иначе вторая половина главы прозвучит тревожнее, чем следует.
Когда глава говорит, что доказательство <<использует аксиому
classic>> или <<аксиому L4_witness>>, речь идёт о
вполне определённых объектах из файла ToS_Axioms.v. Но эти
объекты — не чужеродные костыли и не уступка нестрогости. Это
технические Rocq-аксиомы, реализующие онтологические законы
логики ToS. Аксиома classic — это , закон
исключённого третьего, в той форме, в какой его принимает Rocq.
Аксиома L4_witness — это , закон достаточного
основания.
Разница принципиальна. В чисто конструктивной математике появление
classic было бы признанием слабости — <<здесь не удалось
построить, пришлось постулировать>>. В ToS это не так.
и — законы логики ToS, принятые на уровне самой
системы (Часть I). Когда доказательство <<использует classic>>,
оно не отступает от строгости — оно явно учитывает, что
опирается на закон логики ToS, а не выводится из одной лишь
вычислительной конструктивности. Технические аксиомы Rocq — это
ровно тот мост, по которому онтологические законы логики входят в
формальную проверку.
Поэтому всякий раз, когда глава отмечает обращение к или , это не сигнал тревоги, а честный учёт уровня: данное рассуждение опирается на закон логики, и глава говорит, на какой именно. Различать <<доказано конструктивно>> и <<доказано с опорой на закон логики ToS>> — значит не прятать структуру доказательства, а показывать её.
Замысел главы
Глава идёт от простого к трудному. Сначала — открытые и замкнутые множества над (§ 2.2) и процессный взгляд на открытое множество как на процесс покрытий (§ 2.3). Затем — отделимость: хаусдорфовость (§ 2.4). Далее — центральный и самый ответственный раздел: компактность и неполнота , теорема Гейне–Бореля (§ 2.5). Затем — тотальная ограниченность и -сети, с вычислительным примером (§ 2.6). Затем — Больцано–Вейерштрасс, честно разобранный вместе с его аксиомным основанием (§ 2.7). И наконец — связность, унификация трёх лиц компактности и итог главы (§ 2.8).
Опорных файлов одиннадцать — шесть основных и пять вспомогательных process-обёрток; все сверены с репозиторием дословно. Топологический слой — без аксиом; компактностный — с явно учтёнными и .
Открытые и замкнутые множества над {Q}
Открытый шар и открытое множество
Топология начинается с понятия окрестности. И простейшую
окрестность мы уже умеем построить из материала Главы 5.1 — это
открытый шар: множество всех точек, отстоящих от центра меньше
чем на заданный радиус. Расстояние у нас есть — то самое
рациональное ; шар определяется им сразу. В Rocq это
записано в файле Topology.v так:
Definition open_ball (center radius : Q) (x : Q) : Prop :=
Qabs (x - center) < radius.Точка лежит в шаре с центром center и радиусом
radius, если расстояние от до центра строго меньше
радиуса. Всё над : центр, радиус, точка — рациональные.
Из шара мы выращиваем центральное понятие топологии — открытое множество. Множество назовём открытым, если у каждой его точки есть запас свободного пространства: шар, целиком лежащий внутри множества. Где бы внутри ни находилась точка, вокруг неё есть <<воздух>> — шар, не выходящий за пределы . В Rocq:
Definition is_open (S : Q -> Prop) : Prop :=
forall x, S x -> exists eps, 0 < eps /\
forall y, open_ball x eps y -> S y.Множество открыто, если у каждой его точки есть положительный радиус такой, что весь шар целиком лежит в .
Замкнутое множество мы определяем через открытое — как дополнение к открытому: замкнуто, если множество точек вне открыто. В Rocq это прямая запись:
Definition is_closed (S : Q -> Prop) : Prop :=
is_open (fun x => ~ S x).И, наконец, ограниченным мы называем множество, целиком умещающееся в некоторый шар вокруг нуля.
Девятнадцать лемм топологии над Q
На этих определениях мы строим весь базовый аппарат точечно-множественной
топологии над — и строим конструктивно, ни разу не прибегая к
аксиоме. Девятнадцать лемм Topology.v подтверждают каждый
шаг; перечислим главные.
Шар открыт. Открытый шар сам есть открытое множество: у всякой
его внутренней точки есть запас свободного пространства — шар
радиуса , который неравенством треугольника не выходит за
пределы . Это лемма open_ball_is_open.
Пустое и полное множества открыты. Два вырожденных, но
необходимых случая: и пустое множество, и всё открыты
(empty_is_open, full_is_open).
{
Объединение и пересечение двух открытых открыты. Топология
замкнута относительно двух базовых операций над множествами; для
пересечения запас свободного пространства берётся как меньший из двух
запасов. Это union_two_open и
intersection_two_open.
}
{
Интервалы. Открытый интервал есть открытое множество,
замкнутый интервал — замкнутое (interval_open,
closed_interval_closed). Эти два факта — опора всей
будущей теории компактности: компактным окажется именно
замкнутый интервал.
}
{
Непрерывность. Здесь же мы вводим и непрерывность — в точке
(continuous_at) и всюду (continuous) — и
устанавливаем её устойчивость: тождество и постоянная непрерывны,
сдвиг непрерывен, сумма, отрицание и композиция
непрерывных функций непрерывны. И ключевую для топологии лемму —
continuous_preserves_open_preimage: прообраз открытого
множества под непрерывным отображением открыт. Это топологическое
определение непрерывности в эквивалентной форме; к нему
подробно вернётся Глава 5.3.
}
Топология над Q, не над классами
Одно уточнение, важное для всей главы. Всё, что построено в
Topology.v, — топология над рациональными числами.
Открытое множество здесь есть предикат Q -> Prop —
подмножество ; непрерывность — свойство функций .
Это не топология на фактор-классах RealPoint — на
тех классах эквивалентных процессов, которыми Часть IV определяла
точку. В опорных файлах этой главы топология живёт на уровне
. Но базис метрической топологии на классах уже перенесён —
отдельным файлом RealPointTopology.v: там определён открытый
шар на классах rp_in_ball (центр — точка, радиус —
рациональное) и доказана его корректность на классах
(rp_in_ball_well_defined: принадлежность шару не зависит от
выбора представителя), а также rp_in_ball_centre (центр
лежит в своём шаре). Полная же теория открытых и замкнутых множеств на
классах — ещё не перенесена. Различать рациональный уровень и уровень
классов глава будет последовательно: топология над — прочный
конструктивный фундамент; на классах построен её метрический базис (шар
с корректностью), а полная топология классов — направление дальнейшей
работы.
И заметим главное о топологическом слое: Topology.v —
девятнадцать лемм, ноль аксиом. Открытые множества, замкнутые
множества, непрерывность, интервалы — весь этот аппарат ToS
получает чисто конструктивно, из одного рационального расстояния.
Аксиомы появятся позже — когда глава дойдёт до компактности.
Разбор E/R/R: топология как система
Топология — система, а значит, к ней приложима методология E/R/R (Часть I): разбор на три аспекта — Elements, Roles, Rules. Проведём его. Как и для метрики в Главе 5.1, разбор не навязывает ничего извне — он разворачивает разметку, уже стоящую в заголовке опорного файла: элементы — точки, подмножества, шары; роли — точка как позиция, шар как окрестность, множество как область; правила — открытость и непрерывность как конституции.1 Порядок разбора — онтологический, Rules Roles Elements; познавательно мы шли обратным путём — от шара и открытого множества к аксиомам, которым они подчинены.
Оговорка о статусе — та же, что в Главе 5.1. Топология здесь живёт
над рациональными числами: открытое множество есть предикат
Q -> Prop, непрерывность — свойство функций
(§ 2.2.3). Называя это системой, мы ведём содержательную
онтологическую интерпретацию, а не приписываем коду объект типа
System . Разбор читает структуру файла, не добавляя ему
формального содержания.
Rules — правила, удерживающие топологию (закон : правила стоят над тем, что организуют). И здесь разбор проясняет главную тему главы — два слоя. Правила топологии расслаиваются. Универсальный слой — законы –. Конкретный конструктивный слой — две конституции из заголовка: открытость (<<у каждой точки множества есть шар внутри него>>) и непрерывность (<<прообраз открытого открыт>>), а с ними замкнутость топологии относительно объединения и пересечения и факты об интервалах — весь топологический аппарат § 2.2, доказанный без единой аксиомы. И — конкретный слой, опирающийся на законы логики — правила компактности: <<конечное подпокрытие существует>>, <<процесс построения терминирует>>. Как покажут § 2.5 и § 2.7, эти правила привлекают (а Больцано–Вейерштрасс — и ). Различие, проходящее через всю главу, — между конструктивной топологией и компактностью, обнаруживающей неполноту , — есть, в терминах разбора, расслоение внутри Rules: одни правила конструктивны, другие явно учитывают закон логики ToS.
Roles — значимость позиций (закон : каждая роль структурно обоснована). Заголовок называет три роли: точка играет роль позиции, шар — окрестности, множество — области. Эти роли не произвольны: по их основание — в самих правилах (шар есть окрестность именно потому, что вокруг своей точки даёт <<запас свободного пространства>>; множество есть область потому, что открытость наделяет каждую его точку таким запасом). В процессном слое (§ 2.3) к ним добавляются роли покрытия и уточнения: конечные наборы шаров, накрывающие множество, и переход к более мелким наборам.
Elements — носители (закон и принцип
). Элементы — точки , подмножества Q -> Prop и
открытые шары. По каждая точка тождественна себе. А в процессной
форме открытого множества (§ 2.3) носители — конечные
рациональные покрытия: <<целое>> открытого множества потенциально, но
всякий его кадр конечен и обозрим (лемма p4_cover_finite) —
прямое проявление .
Сведём разбор в таблицу.
| Компонент | Что фиксирует | E/R/R |
|---|---|---|
| точки , подмножества, шары | носители | Element |
| точка позиция, шар окрестность, множество область | ролевые позиции | Role |
| открытость, непрерывность | конституции | Rule (конструкт.) |
| замкнутость по /, интервалы | правила топологии | Rule (конструкт.) |
| конечное подпокрытие, терминация | компактность | Rule (опора на /) |
| законы – | универсальный слой | Rule (универс.) |
Хорошая сформированность. Разметка однозначна: точки и шары суть элементы, позиция/окрестность/область — роли, открытость и непрерывность — правила; ни один компонент не претендует на две категории. Самореференции нет: критерий открытости квантифицирует по точкам множества и стоит над ними — по операция выше своих операндов. Топология хорошо сформирована.
Разбор объясняет уже сделанные в главе различения. Двухслойность, о которой § 2.1 говорит как о главном уроке, оказывается расслоением Rules: топологические конституции конструктивны, компактностные правила опираются на законы логики. Хаусдорфовость (§ 2.4) — правило, которым топология уважает акт различения: различимые элементы оказываются и пространственно отделимы. А <<три лица компактности>> (§ 2.8) — Гейне–Борель, нётеровость, терминация процесса — суть одно Rule-уровневое свойство, прочитанное под как простейший, завершающийся за конечное число шагов процесс. И тот же разбор задаёт образец: каждое топологическое понятие Часть V читает как процессный паттерн со своей E/R/R-структурой.
Открытое множество как процесс покрытий
Процессный взгляд
До сих пор открытое множество было у нас предикатом — . Это статичное описание: про каждую точку сказано, внутри она или нет. Но вся ToS приучила смотреть иначе — и открытое множество естественно переосмыслить процессно.
Рассуждение здесь то же, что превращало число в процесс приближений
(Часть IV). Под открытое множество не может быть
завершённым подмножеством — завершённого нет. Зато его
можно предъявлять: процессом рациональных покрытий шарами,
последовательностью всё более подробных конечных наборов рациональных
шаров. Такой процесс — это процессное представление
открытости: способ показать, как открытое множество разворачивается
конечными приближениями, уровень за уровнем. Объект, который
классическая математика мыслит готовым, ToS видит разворачивающейся
последовательностью конечных приближений; этот же ход мы и применяем
к открытому множеству. В Rocq процессный слой собран в файле
ProcessTopOpen.v.
Шар, покрытие, процесс
Строим этот взгляд снизу вверх. В основании — рациональный шар:
in_ball c r x означает , та же конструкция, что в
§ 2.2. Его базовые свойства те же: центр лежит в своём шаре, и —
in_ball_shrink — если точка внутри шара, вокруг неё
помещается меньший шар (снова неравенство треугольника).
Над шаром — открытое множество в процессной форме,
is_open_process, и тот же набор лемм, что в § 2.2, только
на процессном языке: пустое и полное множества открыты, шар открыт
(ball_is_open), объединение и пересечение открытых открыты,
открытый интервал открыт.
И на вершине — собственно покрытие и процесс покрытий, которые и несут процессную идею:
Definition QBallCover := list (Q * Q).
Definition OpenProcess := nat -> QBallCover.
Definition is_refining (op : OpenProcess) : Prop :=
forall n x, covered_by_balls (op n) x ->
covered_by_balls (op (S n)) x.QBallCover — конечный список пар <<центр, радиус>>:
конечный набор рациональных шаров. OpenProcess — функция из
номера уровня в такой набор: на каждом уровне — своё конечное
покрытие. is_refining — свойство уточнения: всё,
что покрыто на уровне , остаётся покрытым на уровне . Покрытие
с уровнями не теряет точек, только добавляет.
Существенно, что на каждом уровне покрытие конечно — список
конечной длины; это устанавливает лемма p4_cover_finite. И
здесь прямо виден : открытое множество разворачивается как
бесконечный процесс, но всякий его кадр — конечный, обозримый
набор шаров. <<Целое>> открытого множества потенциально,
<<кадр>> — актуально конечен.
Что даёт процессный взгляд
Зачем процессная форма, если Topology.v уже дал открытое
множество предикатом? Затем же, зачем Часть IV давала число процессом.
Предикат описывает результат — но не путь
к нему. Процесс покрытий описывает, как открытое множество
строится: уровень за уровнем, конечным набором шаров за конечным
набором. Для онтологии ToS это не стилистическая деталь, а суть:
открытое множество — не данная разом область, а процесс её
рационального исчерпания.
Будем, однако, точны в том, что именно мы здесь построили, а
что — нет. Построена инфраструктура: QBallCover,
OpenProcess, is_refining,
covered_by_balls — и доказаны её базовые свойства. Чего
мы не доказали — так это полной теоремы эквивалентности:
что всякому открытому предикату отвечает процесс
покрытий, исчерпывающий ровно , и наоборот. Поэтому процесс
покрытий честно назвать процессным представлением открытости,
инфраструктурным слоем — а не доказанным тождеством между всеми
открытыми предикатами и процессами покрытий. Глава так им и
пользуется: как способом предъявить открытость конечными
приближениями, не как теоремой о совпадении двух описаний. То, что в
ProcessTopOpen.v построено, мы выдаём ровно за то, что оно
есть.
{
И — важное для общей картины главы: процессный слой, как и
топологический, остаётся конструктивным —
ProcessTopOpen.v, подобно Topology.v, не использует
ни одной аксиомы.
}
Отделимость: хаусдорфово{Отделимость: Q хаусдорфово}
Различить — значит отделить
Вся ToS выросла из единственного акта — акта различения. Различить два объекта — исходный шаг, с которого начинается всё остальное. У этого акта есть топологическое лицо, и оно называется хаусдорфовостью.
Топологическое пространство хаусдорфово, если любые две различные точки можно отделить — поместить в непересекающиеся окрестности. Различить две точки логически (сказать: они не равны) и различить их топологически (развести в непересекающиеся шары) — в хаусдорфовом пространстве это одно и то же. Хаусдорфовость есть утверждение, что логическое различение поддержано пространственно.
Теорема hausdorff_Q
Установим, что хаусдорфово — и проследим, как это выводится. Дано: две различные рациональные точки и . Нужно: развести их в непересекающиеся шары.
Рассуждение прямое. Раз , расстояние между ними
положительно — это отдельный факт, лемма
not_Qeq_pos_dist: различные рациональные числа имеют
строго положительное расстояние. Возьмём радиус равным половине
этого расстояния. Если бы некоторая точка попала в оба шара
радиуса сразу — вокруг и вокруг , — то по неравенству
треугольника расстояние от до оказалось бы меньше , то
есть меньше самого расстояния от до . Это невозможно; значит,
общих точек у шаров нет, и точки отделены. Так выводится теорема
hausdorff_Q, записанная в ProcessTopOpen.v так:
Theorem hausdorff_Q : forall x y : Q,
~ (x == y) ->
exists e : Q, 0 < e /\
(forall z, Qabs (z - x) < e -> Qabs (z - y) < e -> False).Для любых двух различных рациональных и существует положительный радиус такой, что ни одна точка не лежит одновременно в шаре радиуса вокруг и в шаре радиуса вокруг , — ровно то, что мы и вывели.
Хаусдорфовость и акт различения
Стоит задержаться на том, почему эта простая теорема важна онтологически.
ToS начинается с акта различения: , и различить —
значит положить границу. Лемма not_Qeq_pos_dist —
буквальное воплощение этого на уровне рациональных чисел: если два
числа различены (не равны), то между ними есть зазор —
положительное расстояние. Различение не бывает <<бесконечно малым>>:
оно либо есть, и тогда есть измеримый зазор, либо его нет вовсе.
Хаусдорфовость надстраивает над этим топологический этаж. Положительный зазор между точками означает, что вокруг каждой можно очертить окрестность — и эти окрестности не сольются. Логическое различение () разворачивается в пространственное разделение (непересекающиеся шары). Хаусдорфовость — это гарантия, что топология уважает исходный акт различения: то, что различено, может быть и разделено. В терминах разбора § 2.2.4 отделимость — правило (Rule), которым топология уважает различимость элементов.
И — по-прежнему — ни одной аксиомы. hausdorff_Q и
not_Qeq_pos_dist доказаны чисто конструктивно. Весь
топологический слой — открытые множества, замкнутые множества,
непрерывность, отделимость — ToS строит без обращения к законам
логики. Это меняется в следующем разделе, где глава доходит до
компактности.
Компактность: где обнаруживает неполноту{Компактность: где Q обнаруживает неполноту}
Жирная черта
Это центральный и самый ответственный раздел главы, и начать его надо прямым тезисом.
Классическая теорема Гейне–Бореля над неверна. И это не дефект формализации, а математический факт.
Классический Гейне–Борель утверждает: всякое открытое покрытие замкнутого ограниченного интервала имеет конечное подпокрытие. Над действительными числами это верно. Над рациональными — нет. Глава не прячет этот разрыв и не выдаёт желаемое за доказанное: она показывает, где проходит граница и как ToS с ней работает.
Контрпример
{
Почему классический Гейне–Борель над ложен — видно из
контрпримера. Файл HeineBorel_ERR.v фиксирует общий смысл
препятствия — классический Гейне–Борель требует полноты, которой у
нет, — а конкретную конструкцию мы приведём здесь как
пояснение главы.
}
Возьмём иррациональное число , лежащее внутри интервала — скажем, на отрезке . Для каждой рациональной точки интервала зададим радиус
Этот радиус строго положителен: рационально, иррационально, совпасть они не могут. Значит, покрытие корректно — каждая рациональная точка накрывается хотя бы своим собственным шаром.
Но конечного подпокрытия у этого покрытия нет. Пусть выбран конечный набор центров . Величина
строго положительна — минимум конечного набора положительных чисел. Шар вокруг центра имеет радиус и потому не дотягивается до ближе чем на : всякая точка, отстоящая от меньше чем на , не покрыта ни одним из выбранных шаров. Рациональные точки в этой окрестности есть — по плотности , — и ни один из конечного числа шаров их не накрывает. Конечный набор центров не покрывает весь рациональный интервал.2
Существенно, что именно ломает компактность. Зазор у — иррациональной точки, которой в нет и которая в покрываемом множестве не участвует, — и есть та <<дыра>>, сквозь которую утекает конечность подпокрытия. Шары мельчают по мере приближения к , и половинный радиус не даёт им сомкнуться над зазором.
Корень в одном слове — неполнота. Классическое доказательство Гейне–Бореля опирается на полноту: вложенные интервалы сходятся к точке, и эта точка обязана существовать. Над она не обязана: вложенные интервалы могут сходиться к иррациональному зазору. Компактность — ровно то место, где обнаруживает свою неполноту, о которой Глава 5.1 говорила как о понятии. Здесь это понятие становится осязаемым препятствием.
Ремонт: число Лебега
Сломанную теорему мы не оставляем сломанной — мы её ремонтируем. Контрпример указал, что именно ломает компактность: радиусы покрытия могут стремиться к нулю у иррационального зазора. Значит, ремонт — добавить к покрытию условие, которое этой патологии не допускает: запретить радиусам выдыхаться. Такое условие — равномерность покрытия, или, в классических терминах, наличие числа Лебега. В Rocq оно записано так:
Definition uniform_cover (C : OpenCover) (a b delta : Q) : Prop :=
delta > 0 /\ forall x : Q, a <= x <= b -> C x >= delta.Обычное покрытие (valid_cover) лишь требует, чтобы у каждой
точки радиус был положителен, — и этого, как показал контрпример,
мало. uniform_cover требует большего: существует
единый положительный , не превосходимый снизу ни одним
радиусом. Радиусы не могут <<выдохнуться>> — у всех есть общая
нижняя граница. Это и есть число Лебега: масштаб, на котором покрытие
работает равномерно по всему интервалу.
С этим условием Гейне–Борель снова доказуем. Рассуждение — бисекция:
делим интервал пополам, каждую половину — снова пополам. Поскольку
все радиусы не меньше , дробление можно остановить, как
только ширина куска станет меньше : такой кусок целиком
накрывается одним шаром. Архимедовость гарантирует, что нужная
мелкость достигается за конечное число шагов, — и конечное
подпокрытие собирается из конечного числа шаров. Этот вывод
формализован в HeineBorel_ERR.v (бисекционный спуск —
hb_step, Qpow2, Heine_Borel_by_depth)
и собран в теорему:
Theorem Heine_Borel_uniform : forall (C : OpenCover) (a b delta : Q),
a < b ->
uniform_cover C a b delta ->
exists centers : FiniteSubcover, covers_interval C centers a b.При наличии числа Лебега конечное подпокрытие существует.
Теорема Heine_Borel — то же утверждение с явно вынесенной
гипотезой существования числа Лебега.
Что доказано и что нет
{
Будем точны в том, что именно установлено. Доказана равномерная
версия Гейне–Бореля — для покрытий, обладающих числом Лебега.
Полная классическая компактность — <<всякое покрытие имеет
конечное подпокрытие>>, без оговорки о равномерности, — не
доказана, и доказана быть не может: ей противоречит контрпример. Глава
не выдаёт Heine_Borel_uniform за классическую теорему. Это
честный ремонт: теорема восстановлена на том классе покрытий, на
котором она вообще верна над .
}
Аксиомный статус: {L3} в бисекции
{
И — по уговору § 2.1 — честно отметим, где наше рассуждение
опирается на закон логики. Бисекция Гейне–Бореля держится на одном
шаге, который конструктивным не является. Шаг этот — лемма
not_coverable_half: если интервал не покрывается конечным
числом шаров, то и одна из его половин не покрывается. Утверждение
верное — но чтобы указать, какая именно половина не
покрывается, нужен закон исключённого третьего. Поэтому
HeineBorel_ERR.v импортирует ToS_Axioms.v и эта
лемма пользуется classic.
}
Вспомним уговор § 2.1: classic — это техническая
Rocq-реализация , закона исключённого третьего ToS.
Обращение к ней — не брешь в строгости, а явный учёт уровня:
бисекционный аргумент Гейне–Бореля опирается на закон логики ToS, и
глава это отмечает. Компактностный слой при этом неоднороден.
Одни его части вполне конструктивны — например, тотальная
ограниченность интервала и построение -сетей, к которым
глава перейдёт в § 2.6. Другие — например, бисекционные
рассуждения о непокрываемой или о бесконечно населённой половине —
опираются на . Различать <<доказано конструктивно>> и
<<доказано с опорой на >> здесь не педантизм, а точное
описание того, на чём стоит каждая конкретная теорема. Это и есть тот опирающийся на
закон логики подслой Rules, который выделил разбор § 2.2.4.
Тотальная ограниченность и -сети{Тотальная ограниченность и eps-сети}
Другой подход к компактности
Раздел 2.5 показал, что классический Гейне–Борель над ломается, и отремонтировал его условием числа Лебега. Зайдём теперь с другой стороны: часть того же разрыва можно закрыть иным понятием — тотальной ограниченностью, — и это понятие над ведёт себя гораздо смирнее.
Идея проста. Вместо того чтобы говорить о покрытиях произвольными
шарами, потребуем малого: чтобы всё множество можно было приблизить
конечной сеткой точек с любой наперёд заданной точностью. Такая
сетка называется -сетью, а свойство интервала иметь
-сеть для каждого — тотальной
ограниченностью. В Rocq (файл HeineBorelComplete.v) это
записано так:
Definition eps_net (pts : list Q) (a b eps : Q) : Prop :=
forall x : Q, a <= x <= b ->
exists p : Q, In p pts /\ Qabs (x - p) < eps.
Definition totally_bounded (a b : Q) : Prop :=
forall eps : Q, eps > 0 ->
exists pts : list Q, eps_net pts a b eps.eps_net — конечный список точек pts такой, что
всякая точка интервала отстоит от какой-нибудь точки списка меньше чем
на . totally_bounded — свойство интервала
иметь такую сеть для каждого : как бы мелко ни
требовалась точность, конечная сетка, накрывающая всё с этой
точностью, найдётся.
Главная теорема: интервал тотально ограничен
{
Установим главное: всякий замкнутый интервал тотально ограничен. В
HeineBorelComplete.v это теорема:
}
Theorem totally_bounded_interval : forall a b,
a <= b -> totally_bounded a b.И — что важно для онтологии ToS — доказывается она
конструктивно, прямым построением сетки. По заданному
раскладываем по интервалу равномерный рациональный
грид с шагом, вычисляемым из , и предъявляем его как
конечный список точек; всякая точка интервала оказывается ближе
к какому-нибудь узлу грида. Никакого обращения к
законам логики — сетка строится явно (лемма
rational_eps_net, узлы — grid_points).
В отличие от Гейне–Бореля, где над возникла настоящая трудность, тотальная ограниченность интервала — результат конструктивный и беспроблемный. И это понятно: тотальная ограниченность не требует, чтобы предельная точка существовала, — она требует лишь, чтобы интервал можно было приблизить конечной сеткой. А приближать конечным умеет без всякой полноты.
{
На том же фундаменте мы строим и мост к равномерной
непрерывности — задел для Главы 5.3. Липшицево отображение
равномерно непрерывно (lipschitz_uniform_cont); это
конструктивная замена недоказуемой над классической импликации
<<непрерывность влечёт равномерную непрерывность>>. Сумма, масштаб и
композиция равномерно непрерывных функций снова равномерно
непрерывны. Весь этот аппарат HeineBorelComplete.v подаёт
Главе 5.3.
}
Оговорка об аксиомном статусе
{
Здесь нужна честная оговорка — и она же иллюстрирует общее правило
аудита ToS. Заголовок файла HeineBorelComplete.v объявляет
статус <<0 axioms>>. Но это статус файла по заголовку, а не
каждой теоремы в нём. Среди лемм файла есть
mono_bounded_is_cauchy — <<монотонная ограниченная
последовательность есть Коши>>, — и она использует
classic (через приём NNPP, снятие двойного
отрицания).
}
{
Противоречия с заголовком нет — есть напоминание о правиле,
заведённом ещё в Главе 4.6: аксиомный статус проверяется по
конкретной теореме, командой Print Assumptions, а не
приписывается файлу оптом. totally_bounded_interval и
построение -сетей — конструктивны. А
mono_bounded_is_cauchy опирается на — и, по
уговору § 2.1, это явный учёт уровня: данная лемма стоит на
законе исключённого третьего ToS, и аудит это фиксирует.
}
Вычислительный пример: сетка интервала
Тотальная ограниченность — понятие, которое легко сделать осязаемым. Это третий, вычислительный слой изложения. Возьмём интервал и посчитаем, сколько точек нужно в -сетке для нескольких уровней точности.
Грид раскладывается с шагом, равным ; число точек — это число шагов длины , укладывающихся в единичный интервал, плюс одна. Вот результат:
| Точность | Шаг сетки | Довольно точек для |
|---|---|---|
{
Прочтём таблицу. Чтобы накрыть с точностью , довольно пяти точек — : всякая точка интервала отстоит от какой-нибудь из них меньше чем на . С точностью — девяти точек. С точностью — семнадцати. Сетка конечна при каждом , и её размер прямо вычисляется: при уменьшении вдвое число точек примерно удваивается. Это и есть тотальная ограниченность в работе: не отвлечённое <<сетка существует>>, а конкретная конечная таблица. И всё вычислимо — никакой полноты, никакого предельного перехода, только рациональная арифметика. }
Одна техническая оговорка. Таблица выше — минимально интуитивная
сетка с шагом ровно . Формальное доказательство в
HeineBorelComplete.v устроено надёжнее: лемма
rational_eps_net строит грид с половинным шагом
, чтобы гарантировать строгое неравенство
без оговорок о крайних точках. Таблица здесь —
педагогическая иллюстрация порядка величин, а не буквальный
grid_points из доказательства; код берёт вдвое более
частую сетку и тем избавляется от возни с границами.
Больцано–Вейерштрасс: компактность через бисекцию
Вторая теорема компактности
Гейне–Борель говорит о покрытиях. У компактности есть и второе лицо, двойственное первому, — теорема Больцано–Вейерштрасса, говорящая о последовательностях. Классически её формулируют как существование сходящейся подпоследовательности у всякой ограниченной последовательности. Текущая формализация доказывает близкую, Коши-совместимую форму. В терминах ToS, где предел — это процесс: всякая ограниченная последовательность рациональных чисел имеет точку сгущения — процесс Коши, к которому члены последовательности с большими индексами сколь угодно приближаются. Именно эта — через точку сгущения, а не через явно построенную подпоследовательность , — формулировка и будет доказана.
{
Доказать эту теорему — наш следующий шаг (формализация её собрана в
BolzanoWeierstrass.v). И сразу — честно, по уговору
§ 2.1 — об основании, на котором она будет стоять. В отличие от
тотальной ограниченности § 2.6, Больцано–Вейерштрасс конструктивным
не будет: его доказательство опирается на два закона логики
ToS — и . Заголовок BolzanoWeierstrass.v
аксиомного статуса не скрывает и объявляет его прямо:
<<Axioms: classic (), L4_witness ()>>.
Глава делает это основание не примечанием мелким шрифтом, а узлом
раздела — и § 2.7.2 покажет в точности, где и почему законы логики
вступают в дело.
}
Бисекция и выбор половины
Доказательство — бисекция, родственная той, что работала в Гейне–Бореле, но применённая к последовательности. Дан интервал , в котором лежит ограниченная последовательность . Делим интервал пополам. В одной из половин — по крайней мере в одной — лежит бесконечно много членов последовательности (всех членов бесконечно много, а половин две). Выбираем такую половину, снова делим, и так далее. Получается процесс вложенных интервалов, чья ширина стремится к нулю; <<точка>>, к которой они стягиваются, — и есть точка сгущения.
{ В этом рассуждении есть в точности один неконструктивный шаг — и мы его не маскируем, а указываем прямо. Шаг — выбор половины; в Rocq он записан так: }
Definition bw_step (s : nat -> Q) (st : BWState) : BWState.
Proof.
destruct (L3_informative (bw_step_left s st)) as [H | H].
- exact (mkBW (bw_left st) (bw_mid st)).
- exact (mkBW (bw_mid st) (bw_right st)).
Defined.Чтобы выбрать, идти в левую половину или в правую, нужно решить,
в левой ли половине бесконечно много членов. А этого — в общем
случае — конструктивно решить нельзя: проверка <<бесконечно много>>
не завершается за конечное время. Здесь и вступает L3_ informative — информативная форма закона исключённого третьего: она
постановляет, что одна из двух возможностей имеет место, и
позволяет разобрать случаи. Лемма infinite_pigeonhole —
бесконечный вариант принципа Дирихле, <<хотя бы в одной половине
бесконечно много>>, — по той же причине использует classic.
По уговору § 2.1: L3_informative и classic —
технические Rocq-реализации . Выбор половины опирается на
закон исключённого третьего ToS. Это не изъян доказательства —
это его честно предъявленная структура. Бисекция Больцано–Вейерштрасса
по своей природе неконструктивна: <<населённую>> половину нельзя
вычислить, её можно лишь назвать по . ToS принимает
как закон логики — и потому теорема в ToS доказуема;
но доказуема именно с опорой на закон логики, а не из чистого
вычисления, и глава говорит об этом прямо.
Уточним и характер этого шага. bw_step выбирает половину
классическим разбором случаев по предложению <<в левой половине
бесконечно много членов>> — через L3_informative. Это
не полноценный алгоритм построения подпоследовательности по
индексам и не выбор минимального индекса. Бисекция Больцано–
Вейерштрасса — это процесс построения вложенных интервалов и
Коши-точки сгущения; неконструктивность сосредоточена ровно в одном
месте — в удержании статуса <<населённой половины>> через разбор
случаев, — и больше нигде.
Главная теорема
Остальные свойства бисекции конструктивны и отработаны подробно:
каждый шаг сохраняет вложенность и <<населённость>> выбранной
половины, ширина после шагов не превосходит и —
через архимедовость (bw_width_to_zero) — стремится к
нулю, а левые и правые концы образуют процессы Коши. Собрав выбор
половины с этими свойствами, получаем главную теорему — в
BolzanoWeierstrass.v она записана так:
Theorem bolzano_weierstrass : forall (s : nat -> Q) (a b : Q),
a < b -> bounded_seq s a b ->
exists L : CauchySeq, is_cluster_point s L.Всякая ограниченная последовательность в имеет точку
сгущения — и эта точка предъявлена как CauchySeq, процесс
Коши. Предикат is_cluster_point определён Коши-совместимо:
для любой точности и любого порога найдётся член последовательности с
большим индексом, лежащий к точке сгущения ближе требуемого.
Двойственная пара теорем — monotone_bounded_cauchy и
decreasing_bounded_cauchy — добавляет: монотонная
ограниченная последовательность сама есть Коши.
Бисекция как процесс
{
Остаётся перевести результат на процессный язык ToS — эту обёртку
несёт файл ProcessBW.v. Левые и правые концы бисекции мы
рассматриваем как процессы над (bw_left_process и
bw_right_process) и устанавливаем: они монотонны (левые
растут, правые убывают), оба суть Коши и сходятся к одному пределу.
Теорема bw_is_process_construction собирает это в единую
картину E/R/R, а bw_convergence_rate фиксирует скорость —
: интервал на каждом шаге уполовинивается.
}
{
Аксиомного основания процессная обёртка не меняет: она ничего не
добавляет и не убавляет, перенося на язык процессов теорему, как она
есть — доказанную, с опорой на и . Заголовок
ProcessBW.v это и фиксирует: <<classic (inherited from
BolzanoWeierstrass)>>.
}
Онтологически бисекция Больцано–Вейерштрасса — чистый образец процесса ToS. Точка сгущения не дана заранее; она строится — шаг за шагом, делением за делением, выбором населённой половины за выбором. Результат — процесс Коши, разворачивающийся с темпом . То, что в классической математике есть готовая <<предельная точка>>, здесь — процесс; и единственное место, где процесс опирается не на вычисление, а на закон логики, — честно названный выбор половины.
Связность, унификация и итог главы
Связность: топологическая связность и процессные пути
Остаётся последнее топологическое понятие — связность. И с ним ведёт себя поучительно: ответ зависит от того, какую связность спросить.
В смысле классической топологической связности не связно — более того, вполне несвязно. Между любыми двумя рациональными числами лежит иррациональный зазор, по которому можно рассечь надвое. Топологически рациональная прямая рассыпается в пыль; нетривиальных связных подмножеств у нет.
Но есть и другое понятие перехода — и тут нужна терминологическая аккуратность, иначе возникнет конфликт со стандартной топологией. Если связности как цельности у нет, спросим о связности как достижимости: можно ли пройти из одной рациональной точки в другую, не покидая множества? Для этого построим рациональную линейную интерполяцию — прямую параметризацию из в :
Definition linear_path (a b t : Q) : Q := a + t * (b - a).linear_path — при параметре даёт , при —
, между — линейную интерполяцию. <<Путь в множестве>> мы
определяем так:
Definition PathIn (S : Q -> Prop) (gamma : Q -> Q) (a b : Q) : Prop :=
gamma 0 == a /\ gamma 1 == b /\
forall t, 0 <= t -> t <= 1 -> S (gamma t).И вот здесь — существенная оговорка, которую глава делает прямо. В
определении PathIn нет требования непрерывности
отображения gamma. Стандартный топологический путь — это
непрерывное отображение связного отрезка; именно непрерывность
гарантирует, что образ связен. PathIn требует лишь, чтобы
параметризация в концах попадала в и , а на всяком
рациональном параметре оставалась внутри . Это не
стандартная путь-связность — и мы не выдаём её за таковую. Это
процессная путь-достижимость: рациональная параметризация,
переводящая одну точку в другую, не покидая множества. В Rocq этот
слой собран в ProcessTopConnected.v.
Поэтому глава не называет <<путь-связным>> в топологическом
смысле — это было бы неверно. Глава говорит точнее:
процессно достижимо. Что при этом установлено:
linear_path остаётся внутри интервала, липшицева по ,
пути обращаются и склеиваются; interval_path_connected
даёт процессную достижимость для замкнутого интервала; процессная
форма process_path — ходок, движущийся из к , на
шаге занимающий параметр , и
process_path_cauchy показывает, что этот процесс есть Коши
и сходится к . Весь этот слой — ноль аксиом.
Различие двух понятий онтологически важно. Топологическая связность спрашивает о завершённом континууме без дыр — и его не образует. Процессная достижимость спрашивает о процессе перехода — и процесс линейной интерполяции строит без труда. То, что для классической топологии есть недостаток (вполне несвязность), для процессной онтологии ToS оказывается несущественно: важна не статичная цельность, а возможность пройти — а пройти из точки в точку рациональный процессный путь позволяет. В терминах E/R/R-разбора (§ 2.2.4) достижимость — это роль (Role): процессный путь, ведущий от одной точки к другой.
Три лица компактности
Сведём теперь вместе разные облики компактности — их в ToS оказывается три, и они суть одно. Под компактность — простейший случай процесса: процесс, который терминирует, завершается за конечное число шагов. У этого простейшего случая три имени.
Гейне–Борель: всякое (равномерное) покрытие имеет конечное
подпокрытие. Нётеровость: всякая ограниченная возрастающая
цепь стабилизируется. Терминация: процесс построения
завершается за конечное число шагов. Три формулировки об одном; в
ProcessTopCompact.v их единство закреплено теоремой
p4_compactness_summary, а compact_eq_noetherian
и compact_eq_hb связывают их попарно.
Стоит, однако, точно сказать о статусе этих сводных теорем.
p4_compactness_summary и родственные ей — не новые
результаты, а конъюнкции уже доказанного: они собирают вместе
теоремы, установленные в HeineBorel_ERR.v и в файлах о
нётеровости. То же относится к файлу ProcessTopUnified.v —
сводке всего топологического материала: он перечисляет пять
подпаттернов топологии (открытые множества, метрика, компактность,
связность, отделимость) и помещает топологию одиннадцатым в ряду
процессных паттернов ToS. ProcessTopUnified.v —
обзорный файл, сводка; глава ссылается на него как на карту
уже пройденного, не как на источник новых доказательств. И — по
уговору § 2.1 — шапки ProcessTopCompact.v и
ProcessTopUnified.v честно отмечают: classic
унаследован от слоя нётеровости.
{
Сюда же относится и маленький файл ProcessCompactness.v с его
теоремой compactness_foundation. Имя громкое — но, как и
у process_space_complete в Главе 5.1, по своему содержанию
это foundation-заготовка, а не теория компактности: она
фиксирует базовые факты вроде ограниченности постоянного процесса и
Коши-свойства постоянной последовательности. Глава учитывает её
именно так и называет вещи своими именами.
}
Что построено и что готовится
Итог главы — тремя списками, по дисциплине honest-режима.
Построено и проверено.
- { Топологический слой над — открытые и замкнутые множества, шары, интервалы, непрерывность, хаусдорфовость, процессная путь-достижимость; конструктивно, без аксиом (
Topology.v,ProcessTopOpen.v,ProcessTopConnected.v).} - Открытое множество в процессной форме — процесс конечных рациональных покрытий шарами, с уточнением по уровням.
- Гейне–Борель в равномерной версии (
Heine_Borel_ uniform) — для покрытий с числом Лебега; доказан бисекцией. - Тотальная ограниченность всякого интервала (
totally_bounded_interval) — конструктивно, через явное построение -сеток. - Больцано–Вейерштрасс (
bolzano_weierstrass) — вCauchySeq-форме: всякая ограниченная последовательность имеет Коши-точку сгущения (а не явно построенную подпоследовательность).
На чём это стоит.
- Топологический слой — на чистой конструкции, без законов логики.
- Компактностный слой — на законах логики ToS: бисекция Гейне–Бореля и Больцано–Вейерштрасса опирается на (
classic,L3_informative), Больцано–Вейерштрасс дополнительно — на (L4_witness). Это не изъян, а явный учёт уровня: технические Rocq-аксиомы реализуют онтологические законы логики ToS.
Не построено в этой главе.
- Классический Гейне–Борель без оговорки о равномерности — он над ложен, и это математический факт, а не пробел.
- { Полная топология открытых множеств и компактность на фактор-классах
RealPoint— отдельной структурой не строятся; материал этой главы живёт на уровне и процессов над . (Базис метрической топологии на классах — открытый шарrp_in_ballс корректностью — построен отдельно, вRealPointTopology.v; см. § 2.2.3.)}
Готовит дальше. Равномерная непрерывность, Липшицев аппарат, -сети — задел для Главы 5.3 о непрерывности; компактность интервала — инструмент, на котором будут стоять теоремы о промежуточном значении и об экстремуме.
Итог главы
Глава 5.2 прошла топологию процессов от открытого шара до точки сгущения. Её главный урок — о двух слоях. Топология как таковая — открытость, замкнутость, отделимость, связность — даётся ToS даром, чисто конструктивно, из одного рационального расстояния. Компактность — даётся иначе: здесь обнаруживает неполноту, классический Гейне–Борель ломается, и теоремы восстанавливаются либо ремонтом (число Лебега), либо опорой на законы логики ToS. И эта опора — не слабость, а честно предъявленная структура: и суть законы логики ToS, и обращение к ним аудит отмечает не как брешь, а как учёт уровня.
{Итог главы — в трёх частях. Первое: что построено. Топологический слой над — открытые и замкнутые множества, шары, интервалы, непрерывность, хаусдорфовость, процессная путь-достижимость — построен конструктивно, без единой аксиомы. Открытое множество получило процессную форму — процесс конечных рациональных покрытий шарами. Доказаны равномерная версия Гейне–Бореля, тотальная ограниченность всякого интервала и теорема Больцано–Вейерштрасса.}
{Второе: на чём это стоит. Топологический слой — на
чистой конструкции. Компактностный слой — на законах логики ToS:
бисекция Гейне–Бореля и Больцано–Вейерштрасса опирается на ,
Больцано–Вейерштрасс дополнительно на . Технические
Rocq-аксиомы classic и L4_witness — это
реализации онтологических законов логики ToS; обращение к ним есть
явный учёт уровня доказательства, а не отступление от строгости.}
{Третье: что остаётся открытым. Классический
Гейне–Борель без оговорки о равномерности над неверен — это
математический факт. На фактор-классах RealPoint построен
базис метрической топологии — открытый шар rp_in_ball
с корректностью (RealPointTopology.v, § 2.2.3); полная же
теория открытых множеств и компактность на классах отдельной структурой
не построены. Глава дала топологию процессов и две теоремы компактности;
непрерывность, что встанет на этом основании, — предмет следующей
главы Части V.}
Часть: Часть V. Топология и анализ процессов · Том: «Математика»
Понятия: Логика · Формализация
Навигация: ← Глава 1. Метрика на процессах · Глава 3. Непрерывность →
Footnotes
-
Дословная E/R/R-разметка в шапке файла
Topology.v; здесь она разворачивается по образцу Части I. ↩ -
Эта конкретная конструкция теперь и машинно проверена — как самостоятельная 0-аксиомная теорема, а не только общий смысл препятствия. Для задано явное открытое покрытие : оно накрывает весь рациональный отрезок (
covers, ибо ), но конечного подпокрытия не имеет (no_finite_subcover) — у разреза величина убывает к нулю быстрее любого конечного порога. Вместе —Q_interval_not_compact; свидетелем служат Pell-приближения . Машинно проверено, 5 Qed, 0 аксиом. ↩