От топологии к непрерывности

Что построили предыдущие главы

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

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

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

Два лица непрерывности

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

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

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

{ Над действительными числами есть классическая теорема — теорема Кантора–Гейне, — которая говорит: на отрезке (на компакте) эти два вида непрерывности совпадают. Поточечно непрерывная функция на автоматически равномерно непрерывна. Над это не так. И причина та же, что рушила Гейне–Бореля в § 2.5, — неполнота . Рациональный отрезок дыряв, и поточечной непрерывности не хватает, чтобы стянуть все локальные в одну глобальную. }

Из этого следует ключевой факт о строении главы. Обе главные теоремы — о промежуточном значении и об экстремуме — формализованы с гипотезой равномерной непрерывности, не поточечной. Не потому, что формализация слаба, а потому, что над равномерность — это именно то, что нужно, и его приходится требовать явно, раз Кантора–Гейне не действует.

О статусе аксиом: техническое и онтологическое

Как и в Главе 5.2, условимся о словах заранее — иначе теоремы этой главы прозвучат тревожнее, чем следует.

Доказательства теоремы о промежуточном значении и теоремы об экстремуме используют аксиому classic — объект из файла ToS_Axioms.v. Но classic — не чужеродный костыль и не уступка нестрогости. Это техническая Rocq-аксиома, реализующая онтологический закон логики ToS: закон исключённого третьего, , в той форме, в какой его принимает Rocq.

Различие принципиально. В чисто конструктивной математике появление classic было бы признанием слабости. В ToS это не так: — закон логики ToS, принятый на уровне самой системы (Часть I). Когда доказательство <<использует classic>>, оно не отступает от строгости — оно явно учитывает, что опирается на закон логики ToS. Поэтому всякий раз, когда глава отмечает обращение к , это честный учёт уровня, а не сигнал тревоги. Далее по главе — сквозная отсылка <<по уговору § 3.1>>.

Замысел главы

Глава идёт от понятия к теоремам. Сначала — непрерывность как таковая: её топологическое лицо (§ 3.2) и центральный для главы разговор о равномерной непрерывности и границе (§ 3.3). Затем — первая большая теорема: о промежуточном значении, через бисекцию (§ 3.4), и на трёх уровнях типизации (§ 3.5). Затем — вторая: об экстремуме, через измельчение сетки (§ 3.6), в двух версиях формализации (§ 3.7). И наконец — равномерный предел непрерывных функций и итог главы (§ 3.8).

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

Непрерывность: топологическое лицо

Определение через {delta}-{epsilon}

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

Definition continuous_at (f : Q -> Q) (x : Q) : Prop :=
  forall eps, eps > 0 -> exists delta, delta > 0 /\
    forall y, Qabs (y - x) < delta -> Qabs (f y - f x) < eps.
 
Definition continuous (f : Q -> Q) : Prop :=
  forall x, continuous_at f x.

Для работы с приращением удобна вторая, родственная форма того же понятия — непрерывность на интервале. Она спрашивает о поведении на отрезке и измеряет изменение через приращение : малое даёт малое изменение . В репозитории эта форма записана в UniformConvergence.v:

Definition continuous_on (f : Q -> Q) (a b : Q) : Prop :=
  forall x : Q, a <= x -> x <= b ->
    forall eps : Q, 0 < eps ->
      exists delta : Q, 0 < delta /\
        forall h : Q, Qabs h < delta ->
          a <= x + h -> x + h <= b ->
          Qabs (f (x + h) - f x) < eps.

continuous_on f a b — та же поточечная непрерывность, ограниченная отрезком и записанная через приращение. Это — главная интервальная форма определения непрерывности среди опорных файлов главы; именно она удобна для теорем о равномерных пределах, к которым глава придёт в § 3.8.

Алгебра непрерывных функций

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

{ Простейшие функции непрерывны. Тождество непрерывно — малое изменение аргумента есть в точности малое изменение значения (лемма identity_continuous). Постоянная функция непрерывна тривиально — значение не меняется вовсе (constant_continuous). Сдвиг непрерывен (add_const_continuous). Это отправные кирпичи. }

{ Операции сохраняют непрерывность. Сумма двух непрерывных в точке функций непрерывна в этой точке (continuous_at_sum); отрицание непрерывной непрерывно (continuous_at_neg); композиция непрерывных непрерывна (continuous_at_comp). Каждая из этих лемм Topology.v замыкает класс непрерывных функций относительно ещё одной операции. }

Сложив отправные кирпичи с этими операциями, получаем сразу многое: сложением, отрицанием, сдвигом и композицией из тождества и постоянных строится богатый класс непрерывных функций. Полное утверждение — что непрерывны все многочлены — требует ещё одного звена: леммы о сохранении непрерывности при умножении. Среди лемм Topology.v, на которые глава здесь опирается (continuous_at_sum, continuous_at_neg, continuous_at_comp и отправные identity_ continuous, constant_continuous), такого звена нет; замыкание относительно умножения — стандартное расширение алгебры непрерывных функций, и глава оставляет его именно расширением, не приписывая Topology.v большего, чем там доказано. Важно другое: фундамент — устойчивый, замкнутый относительно основных операций класс непрерывных функций — заложен, и на него можно опираться.

Прообраз открытого открыт

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

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

Theorem continuous_preserves_open_preimage : forall f S,
  continuous f -> is_open S ->
  is_open (fun x => S (f x)).

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

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

И заметим, на чём всё это стоит. Топологическое лицо непрерывности — - определение, алгебра непрерывных функций, вывод теоремы о прообразе — получено конструктивно, без обращения к законам логики; Topology.v, как отмечалось ещё в § 2.2, не использует ни одной аксиомы. Аксиомы понадобятся дальше — когда глава перейдёт к двум большим теоремам анализа.

Разбор E/R/R: непрерывность как система

Непрерывность — система, и к ней приложима методология E/R/R (Часть I). Разбор разворачивает разметку, уже стоящую в заголовке опорного файла, где непрерывность названа прямо: правило — непрерывность есть конституция: прообраз открытого открыт.1 Ведём разбор в онтологическом порядке Rules Roles Elements. Оговорка о статусе — та же, что в Главах 5.1–5.2: непрерывность здесь — свойство функций , не отображений фактор-классов; <<система>> — содержательная онтологическая интерпретация, не объект System .

Rules — правила (закон ). Сама непрерывность есть конституция — в двух равносильных формах: локальной (-) и топологической (<<прообраз открытого открыт>>); § 3.2.3 показал, что это одно правило, записанное дважды. К нему примыкает конкретный слой — замыкание класса непрерывных функций относительно суммы, отрицания, сдвига и композиции (§ 3.2.2); всё это конструктивно, без аксиом. Но над у правил непрерывности есть вынужденное усиление: поточечной формы недостаточно для теорем анализа, ибо Кантора–Гейне над неверна (§ 3.3.2). Поэтому в правила входит требование равномерности, а конструктивным мостом к ней служит липшицевость (§ 3.3.3). Это — Rule-уровневое следствие неполноты , объясняющее, почему обе большие теоремы несут равномерную непрерывность в гипотезе. Наконец, у каждой теоремы — своё правило-конструкция: бисекция (знак в середине выбор половины) и измельчение сетки.

Roles — значимость позиций (закон ). Функция играет роль отображения — перевода входа в выход; непрерывность наделяет её одной из качественных позиций: непрерывна в точке, равномерно непрерывна, липшицева — режимы, в которых функция уважает близость с разной силой. В двух больших теоремах роль иная: искомый объект — корень или максимизатор — играет роль Cauchy-процесса в , сходящегося к перемене знака или к супремуму.2 Здесь же — тонкое ролевое различение § 3.6.3: у максимума роль значения (процесс супремума, Коши) первична, а роль позиции (argmax) производна и хрупка.

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

Сведём разбор в таблицу.

КомпонентЧто фиксируетE/R/R
функции , точкиносителиElement
отображение; режимы: непрерывна / равномерно / липшицевароли-позицииRole
непрерывность (- прообраз открытого открыт)конституцияRule (конструкт.)
замыкание по сумме, композиции, сдвигуалгебраRule (конструкт.)
равномерность как требование (Кантор–Гейне над неверна)усиление правилаRule (неполнота, )
бисекция, измельчение сеткиконструкции теоремRule
законы –универсальный слойRule (универс.)

Хорошая сформированность. Разметка однозначна: функции суть элементы, режимы непрерывности — роли, критерий непрерывности — правило. Самореференции нет: критерий квантифицирует по аргументам и стоит над значениями функции — по операция выше операндов. Непрерывность хорошо сформирована.

Разбор проясняет две тонкости, к которым глава придёт дальше. Три уровня теоремы о промежуточном значении (§ 3.5) — это, по , три интенсионально различных представления одного корня: три ответа на вопрос <<что есть корень>>, согласованных по содержанию, но разных по типу. А argmax теоремы об экстремуме (§ 3.7) — это -выделенная роль-позиция: порядок делает выбор максимизатора однозначным там, где значений-претендентов несколько. И тот же разбор задаёт образец Части V: каждое аналитическое понятие читается как система со своей E/R/R-структурой.

Равномерная непрерывность и граница {Равномерная непрерывность и граница Q}

Определение равномерной непрерывности

§ 3.2 дало поточечную непрерывность. Теперь нужно её усиление — понятие, на котором будет стоять вся вторая половина главы.

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

Definition uniformly_continuous_on (f : Q -> Q) (a b : Q) : Prop :=
  forall eps : Q, eps > 0 -> exists delta : Q, delta > 0 /\
    forall x y : Q, a <= x <= b -> a <= y <= b ->
      Qabs (x - y) < delta -> Qabs (f x - f y) < eps.

Всё различие с поточечной непрерывностью § 3.2 — в порядке кванторов. Там стояла внутри квантора по точке: <<для каждой точки — своя >>. Здесь вынесена наружу, перед квантором по и : одна на весь отрезок. Перестановка двух кванторов — и получается принципиально иное, более сильное свойство: единый масштаб, на котором функция ведёт себя смирно всюду на сразу.

{ Об этом понятии нужно сказать одно честное слово — о его статусе в нашем построении. Канонический головной файл теории непрерывности теперь есть — analysis/Continuity.v: в нём сведены воедино определения continuous_on, uniformly_continuous_on и Lipschitz_on (для на отрезке ), доказан мост lipschitz_uniform (липшицевость влечёт равномерную непрерывность) и переход uniformly_continuous_pointwise, а с ними элементарная алгебра (константа, тождество, сумма) — всё без аксиом. Честная оговорка, однако, двоякая. Во-первых, миграция: существующие большие теоремы — IVT_ERR.v, EVT_ERR.v, EVT_idx.v, HeineBorelComplete.v — пока не переведены на этот головной файл: каждая по-прежнему несёт своё локальное, дословно повторяющееся определение uniformly_continuous_on, и сведение их к канону отложено (чтобы не вызывать каскад правок в уже доказанном). Во-вторых, обратного перехода — от поточечной непрерывности к равномерной — в каноне нет, и это не упущение: над он неверен (теорема Кантора–Гейне, к которой глава переходит ниже). Так что головной файл задаёт канон и Липшицев путь к равномерности, но единой теорией, на которую опираются все теоремы главы, он станет лишь после миграции. }

Кантора–Гейне над Q неверна

Теперь — центральный для главы факт. И подать его надо так же прямо, как в § 2.5 был подан провал Гейне–Бореля.

Над поточечная непрерывность на отрезке не влечёт равномерную. Классическая теорема Кантора–Гейне над неверна.

Классическая теорема Кантора–Гейне утверждает: функция, поточечно непрерывная на замкнутом ограниченном отрезке, на нём автоматически равномерно непрерывна. Над действительными числами это так. Над рациональными — нет.

Корень — тот же, что и у провала Гейне–Бореля в § 2.5: неполнота . Классическое доказательство Кантора–Гейне опирается на компактность отрезка в полном смысле: из любого покрытия локальными -окрестностями извлекается конечное подпокрытие, и минимум конечного набора даёт искомую глобальную . Над этот ход не проходит. Рациональный отрезок не компактен в классическом смысле (§ 2.5): покрытие может <<утекать>> в иррациональный зазор, и локальные , мельчая к зазору, не дают положительного минимума. Поточечная непрерывность остаётся — а стянуть её в равномерную нечем.

Это не дефект формализации. Это математический факт о , прямое продолжение того, что Глава 5.2 установила о компактности. Рациональная прямая дырява, и дыры мешают равномерности так же, как мешали конечному подпокрытию.

У этого факта есть простое, вполне осязаемое лицо — конкретный пример. Возьмём функцию

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

Конструктивная замена: липшицевость

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

Функция липшицева с константой , если расстояние между значениями не превосходит , помноженного на расстояние между аргументами: . Из этого свойства равномерная непрерывность следует прямым счётом. В самом деле: задано ; возьмём (при ); тогда для всякой пары аргументов ближе имеем . Одна , годная сразу для всего отрезка, не подобрана наугад, а вычислена по и . Вырожденный случай — постоянная функция — ещё проще: годится любая . Этот вывод формализован в HeineBorelComplete.v (с этим файлом глава встречалась в § 2.6) теоремой:

Theorem lipschitz_uniform_cont : forall f a b L,
  Lipschitz_on f a b L ->
  uniformly_continuous_on f a b.

Вот в чём смысл этой замены. Над путь к равномерной непрерывности шёл так: непрерывность (по Кантору–Гейне) равномерность. Над первая стрелка сломана. Но есть обходной путь: липшицевость равномерность, — и этот путь конструктивен, он не зависит от полноты. Там, где классика пользуется недоказуемой над импликацией, ToS пользуется доказуемой: липшицевость — проверяемое, вычислимое свойство, и из него равномерная непрерывность следует прямым счётом.

{ И вокруг этого моста — та же алгебра, что в § 3.2 окружала поточечную непрерывность. Сумма, масштабирование и композиция равномерно непрерывных функций снова равномерно непрерывны, тождество и постоянная равномерно непрерывны: класс равномерно непрерывных функций так же замкнут и богат, как класс непрерывных. Эти замыкания подтверждены в HeineBorelComplete.v леммами uniform_cont_sum, uniform_cont_scale, uniform_cont_composition. }

Почему теоремы анализа требуют равномерной непрерывности

Теперь видно, почему обе главные теоремы главы — о промежуточном значении (§ 3.4) и об экстремуме (§ 3.6) — формализованы с гипотезой именно равномерной непрерывности.

Это прямое следствие § 3.3.2. Над можно было бы записать эти теоремы с гипотезой поточечной непрерывности — а равномерность получить попутно, из Кантора–Гейне. Над так нельзя: Кантора–Гейне не действует. Значит, равномерность, которая в доказательствах реально нужна (нужен единый , чтобы оценки работали по всему отрезку сразу), приходится требовать явно — внести в гипотезу теоремы. В терминах разбора § 3.2.4 это усиление правила: над конституция непрерывности требует равномерной формы.

И это, по логике всей Части V, — не слабость, а точность. Теорема, честно записанная над , обязана нести в условии ровно то, на чём стоит её доказательство. Гипотеза uniformly_continuous_on в формулировках IVT и EVT — не лишняя предосторожность, а точное указание уровня: вот при каком условии теорема над верна. Когда в § 3.4 и § 3.6 глава будет читать сигнатуры главных теорем, эта гипотеза будет стоять там не случайно — она поставлена туда неполнотой .

Теорема о промежуточном значении: бисекция

Замысел теоремы

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

Классика говорит: существует точка с . ToS, по , говорит иначе. Завершённой точки может и не быть — корень способен оказаться иррациональным, а иррационального числа в нет. Поэтому ToS строит не точку, а процесс: алгоритм, который шаг за шагом всё точнее локализует, где функция переходит через нуль. Корень — это сам процесс, не его недостижимый предел. Как именно мы строим этот процесс — предмет следующего подраздела; построенная конструкция целиком формализована в файле IVT_ERR.v (424 строки, двадцать три доказанные теоремы, ни одного незакрытого места).

Алгоритм бисекции

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

Чтобы это формализовать, опишем состояние процесса — пару концов текущего отрезка — и шаг, переводящий состояние в состояние:

Record BisectionState := mkBisection { bis_left : Q; bis_right : Q }.
 
Definition bisection_step (f : ContinuousFunction) (s : BisectionState)
  : BisectionState :=
  let mid := (bis_left s + bis_right s) / 2 in
  if Qlt_le_dec (f mid) 0
  then mkBisection mid (bis_right s)
  else mkBisection (bis_left s) mid.

Так IVT_ERR.v записывает один шаг бисекции. mid — середина; Qlt_le_dec проверяет знак в ней; в зависимости от знака новым состоянием становится правая половина или левая — ровно та половина, где перемена знака сохранилась.

Существенно здесь одно — Qlt_le_dec. Это решающая процедура: для рациональных чисел вопрос << или ?>> решается вычислением, за конечное время, без всякого обращения к закону исключённого третьего. Выбор половины здесь конструктивен — и этим бисекция IVT отличается от бисекции Больцано–Вейерштрасса (§ 2.7), где выбор населённой половины не вычислялся и требовал .

Шаг бисекции построен; теперь надо повторять его и собирать результат в процесс. Применив шаг раз к начальному отрезку и взяв середину получившегося отрезка, мы получаем -е приближение корня. Последовательность этих середин и есть искомый процесс — локализатор корня. В IVT_ERR.v итерация шага и сам процесс записаны так (bisection_iter применяет шаг раз, bisection_process выдаёт середину):

Definition bisection_process (f : ContinuousFunction) (a b : Q)
  : RealProcess :=
  fun n => let s := bisection_iter f (mkBisection a b) n in
           (bis_left s + bis_right s) / 2.

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

Ширина и свойство Коши

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

Каждый шаг бисекции делит отрезок ровно пополам; значит, после шагов ширина отрезка есть в точности . Это устанавливает лемма bisection_width. Дальше работает архимедовость : величина становится меньше любой наперёд заданной за конечное число шагов. А раз отрезки вложены и ширина их стремится к нулю, середины сближаются: для всякой точности найдётся шаг, после которого все середины лежат теснее требуемого, — то есть процесс середин есть процесс Коши. Этот вывод подтверждён в IVT_ERR.v леммами bisection_shrinks и bisection_is_Cauchy. Процесс бисекции — полноценный Cauchy-процесс в смысле Главы 5.1; темп его сходимости — за шаг.

Слабый инвариант знака

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

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

{ Значит, доказуемый инвариант — слабый: и , с нестрогими неравенствами. И этого вполне достаточно. Если в какой-то середине обратилась точно в нуль — тем лучше, корень найден буквально; а если нет — слабый инвариант продолжает зажимать перемену знака между концами. Именно слабый инвариант — то, что нужно теории, и именно его IVT_ERR.v и доказывает, под именем bisection_preserves_signs_weak; слово weak в имени стоит не случайно. Слабая формулировка — не небрежность, а точный учёт того, что над функция может попасть в нуль ровно. }

Главная теорема

Все части собраны: бисекция строит вложенные отрезки, ширина их стремится к нулю, процесс середин есть Коши, слабый инвариант удерживает перемену знака. Собрав их, получаем теорему о промежуточном значении — в IVT_ERR.v она записана так:

Theorem IVT_process : forall (f : ContinuousFunction) (a b : Q),
  a < b -> uniformly_continuous_on f a b ->
  f a < 0 -> f b > 0 ->
  exists c : RealProcess, is_Cauchy c /\ in_interval a b c /\
    equiv (apply_to_process f c) (fun _ => 0).

Прочтём её внимательно — здесь сразу две точки точности.

Первое — гипотеза. В условии стоит uniformly_continuous_on, равномерная непрерывность, не поточечная. Это ровно то, о чём говорил § 3.3.4: над Кантора–Гейне не действует, и равномерность — то, что реально нужно доказательству (единый , чтобы оценка работала на любом шаге), — внесена в гипотезу явно.

Второе — заключение. Теорема даёт не <<точку с >>, а процесс — Cauchy-процесс, лежащий в , — для которого equiv (apply_to_process f c) (fun _ => 0). Это значит: процесс значений эквивалентен нулевому процессу. Не << равно нулю буквально>>, а <<процесс сколь угодно близок к нулю>>. Разница принципиальна и снова идёт от : буквальный корень над может не существовать (он иррационален), но процесс, чьи значения под неотличимо приближаются к нулю, существует и построен — это сама бисекция.

И — по уговору § 3.1 — об основании. Доказательство опирается на архимедовость и через неё — на classic, аксиому, приходящую в файл из Archimedean_ERR. По уговору: classic — техническая Rocq-реализация . Обращение к ней — явный учёт уровня. Сам выбор половины, отметим, конструктивен (Qlt_le_dec); нужен не для выбора, а в архимедовой части рассуждения.

IVT на трёх уровнях

Один факт, три высоты типизации

Теорема о промежуточном значении формализована в ToS трижды — не из повторения, а потому, что один и тот же математический факт можно записать на разной высоте типизации. Три файла — IVT_ERR.v, ProcessIVT.v, IVT_CauchyReal.v — дают три уровня. § 3.4 разобрал нижний; теперь — два верхних.

Уровень процесса

На первом уровне корень был RealProcess — функцией , голой последовательностью рациональных чисел, к которой свойство Коши приложено отдельной леммой. Поднять результат на уровень процессов в смысле ProcessCore — того аппарата, на котором стоит вся Часть V, — значит переписать теорему в его языке. Это и делает второй уровень.

{ Основная работа здесь — навести мосты совместимости. Загвоздка техническая: свойство Коши определяется двумя чуть разными способами. Archimedean_ERR, откуда пришла бисекция, формулирует его через условие ; ProcessCore формулирует через . Условия равносильны — с точностью до сдвига на единицу, — но формально это разные предикаты, и прежде чем переносить теорему, надо их равносильность доказать. Доказав её, мы и получаем мосты: cauchy_compat (свойства Коши совпадают), interval_compat (совпадают определения <<лежать в >>), equiv_compat (совпадают определения эквивалентности процессов). По этим мостам теорема о промежуточном значении переписывается в типах ProcessCore как process_IVT, а ivt_convergence_rate фиксирует темп — . Всё это — содержание файла ProcessIVT.v (175 строк). }

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

Уровень типа: корень как CauchySeq

Третий уровень — IVT_CauchyReal.v (382 строки) — делает шаг тоньше. На первых двух уровнях корень был последовательностью, а свойство Коши — отдельным утверждением о ней. Здесь корень предъявляется как объект типа CauchySeq — типа, в который Коши-свойство встроено. Носить с собой доказательство свойства Коши отдельно больше не нужно: оно стало частью самого объекта.

Theorem ivt_cauchy_real :
  forall (f : ContinuousFunction) (a b : Q),
    a < b -> uniformly_continuous_on f a b ->
    f a < 0 -> f b > 0 ->
    exists c : CauchySeq,
      (forall n : nat, a <= cs_seq c n /\ cs_seq c n <= b) /\
      (forall eps : Q, 0 < eps ->
        exists N : nat, forall n : nat,
          (N <= n)%nat -> Qabs (f (cs_seq c n)) < eps).

Корень — c : CauchySeq: не <<последовательность, про которую доказано, что она Коши>>, а объект, чья типовая принадлежность уже несёт доказательство свойства Коши.

Существенная для этого уровня лемма — continuous_compose_cauchy. Она утверждает: если равномерно непрерывна, а — Cauchy-последовательность в , то и композиция — снова Cauchy. Равномерная непрерывность сохраняет свойство Коши. И здесь опять видно, зачем нужна именно равномерная непрерывность, а не поточечная: общий позволяет из близости членов заключить близость членов единообразно, не подбирая заново под каждую точку. Главная теорема ivt_cauchy_real и её следствие ivt_cauchy_real_equiv (которое выражает результат через cauchy_equiv с постоянным нулём) стоят на этой лемме.

Зачем три уровня

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

{ Три уровня — это три ответа на вопрос <<что есть корень>>. На уровне IVT_ERR — голая последовательность плюс отдельная справка о её свойстве Коши. На уровне ProcessIVT — процесс в смысле ProcessCore, встроенный в общий аппарат Части V. На уровне IVT_CauchyReal — объект, в типе которого свойство Коши уже записано. Математическое содержание — бисекция, сходящаяся к перемене знака — одно. Но как объект задан, что он есть интенсионально — меняется от уровня к уровню. По это и значит, что перед нами три разных, хотя и согласованных, представления одного факта. ToS строит лестницу типизации, и теорема о промежуточном значении прописана на каждой её ступени. В терминах разбора § 3.2.4 это три роли-представления одного корня — разные по типу, согласованные по содержанию (). }

Теорема об экстремуме: сетка

Замысел теоремы

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

И снова ToS читает <<достигает>> по . Завершённой точки максимума может не быть — способна оказаться иррациональной. Поэтому максимум строится как процесс: последовательность всё более подробных приближений. Но здесь, в отличие от теоремы о промежуточном значении, процессов оказывается два, и они ведут себя по-разному. Это — узловая точность раздела, и к ней § 3.6.3 вернётся отдельно.

Опорные файлы EVT — три: EVT_ERR.v как историческая argmax-версия, EVT_idx.v как текущая рекомендуемая index-версия, и process-обёртка ProcessEVT.v. В § 3.6 мы объясним общую конструкцию — сетку и процесс значений; в § 3.7 разберём, почему текущей основной версией является именно EVT_idx.v.

Сетка

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

Узел сетки строится прямой формулой: -й из равноотстоящих узлов отрезка есть . В Rocq это записано так:

Definition grid_point (a b : Q) (n k : nat) : Q :=
  a + (inject_Z (Z.of_nat k)) * (b - a) / (inject_Z (Z.of_nat n)).

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

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

Значение против позиции

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

Значение максимума — max_on_grid, наибольшее из значений по узлам сетки. Позиция максимума — argmax, тот узел, на котором это наибольшее значение достигается. С измельчением сетки оба, казалось бы, должны сходиться. Но это не так.

{ Процесс значений — sup_process — сходится. Файл доказывает sup_process_is_Cauchy: последовательность наибольших значений по всё более густым сеткам есть процесс Коши. }

Процесс позиций — argmax_process — сходиться не обязан. И EVT_ERR.v прямо это оговаривает в комментарии. Представим постоянную функцию: всюду. Тогда наибольшее значение достигается в каждом узле сетки. Без фиксированного правила выбора <<позиция максимума>> здесь вообще не определена однозначно: при разных допустимых выборах она может скакать от узла к узлу при каждом измельчении. Процесс значений при этом безупречно сходится — он попросту постоянен и равен единице.

Index-версия (§ 3.7) как раз вводит такое правило — -порядок позиций, — чтобы сделать позицию на каждом шаге детерминированной. Но и детерминированности мало: даже с однозначно выбираемой позицией процесс argmax_process над Cauchy быть не обязан. Максимум может приближаться к иррациональной точке, и тогда процесс рациональных приближений позиции к Cauchy-процессу не сводится; или позиция может перескакивать с одной стороны на другую при измельчении сетки. Процесс значений от всех этих бед свободен.

Вывод, который глава должна сформулировать прямо: теорема об экстремуме над доказывает сходимость процесса значений, не процесса позиций. По это и есть верное прочтение <<максимума>>: фундаментален процесс значения супремума; позиция — производное, более хрупкое понятие, требующее дополнительной структуры (изоляции максимума), которой в общем случае нет. В терминах разбора § 3.2.4 перед нами расщепление роли: значение и позиция — две роли максимума, и над Коши-устойчива лишь первая.

Главная теорема

Собрав сетку, процесс наибольших значений и его свойства, мы получаем теорему об экстремуме. В EVT_ERR.v она записана так:

Theorem EVT_complete : forall f a b,
  a < b -> uniformly_continuous_on f a b ->
  exists (M : RealProcess) (c : RealProcess),
    is_Cauchy M /\
    (forall n, a <= c n <= b) /\
    (forall n, apply_f f c n == M n) /\
    (forall x, a <= x <= b -> process_le (fun _ => f x) M).

Теорема даёт два процесса: — процесс значений супремума, и — процесс приближённых максимизаторов. Утверждается: есть процесс Коши; лежит в ; на каждом шаге совпадает с ; и мажорирует — значение в любой точке отрезка не превосходит (с точностью до процессного ). Гипотеза — снова uniformly_continuous_on, равномерная непрерывность, по причине из § 3.3.4.

{ И здесь честность требует отметить, чего в этой формулировке нет — по сравнению с тем, что хотелось бы доказать. Глядя на § 3.6.3, естественно ждать в заключении и Коши-свойства для процесса позиций . Его там нет, и в такой общей формулировке оно стоять не должно: задача максимизации сама по себе Коши-свойства процесса позиций не гарантирует. При плато или нескольких равноценных максимумах выбор позиции требует дополнительного правила; без него позиционный процесс может оказаться скачущим. Поэтому формулировку пришлось ослабить — оставить Коши-свойство только за процессом значений . Именно это — сходимость и его мажорирующее свойство — и есть честное содержание теоремы об экстремуме над ; и именно так EVT_complete в репозитории и сформулирована (комментарий файла отмечает это ослабление прямо). Глава не выдаёт EVT_complete за полную классическую теорему: это её отремонтированная, ослабленная — и потому верная — форма. }

EVT: argmax-версия, index-версия, обёртка

Две версии главного файла

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

{ Первая формализация — EVT_ERR.v, argmax-версия. Сегодня это историческая версия: в её шапке стоит пометка <<DEPRECATED: Use EVT_idx.v instead>>, и к использованию рекомендована не она. След того затруднения, ради которого версию сменили, виден и внутри файла: одна лемма — max_list_attained — обрывается командой Abort; доказать её в задуманном виде не удалось, и в дело пошёл обходной вариант max_list_attained_classical. Мы не прячем этот Abort — он и есть свидетельство того, что argmax-версия упёрлась в стену. }

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

Index-based решение

Затруднение argmax-версии — тонкое, но показательное. Оно в различии двух равенств рациональных чисел. Есть равенство по значению, Qeq: числа и равны как рациональные. И есть равенство буквальное, лейбницево: и — разные выражения, разные представления. Узел сетки grid_point a b n 0 равен по значению (Qeq), но не буквально — это разные термы. Argmax-версия, выбирая максимум по значениям, всё время спотыкалась об этот разрыв: доказательства о том, что максимум достигается, вязли в согласовании Qeq с лейбницевым равенством.

EVT_idx.v обходит это затруднение переключением внимания — и приём стоит того, чтобы назвать его прямо: вместо значения наилучшего узла argmax возвращает его номер, индекс в списке. Не <<какое значение наибольшее>>, а <<на каком месте оно стоит>>. В Rocq это записано так:

Definition argmax_idx (f : Q -> Q) (l : list Q) (default : Q) : nat :=
  match l with
  | [] => O
  | x :: xs => find_max_idx_acc f xs 1%nat O (f x)
  end.

find_max_idx_acc — аккумуляторный обход списка, возвращающий индекс наилучшего узла; max_on_grid определяется тогда как от узла, стоящего на этом индексе. Выигрыш немедленный. Лемма <<максимум на сетке достигается>> — max_on_grid_attained — в index-версии становится тривиальной: она доказывается одним словом reflexivity. Достижение максимума здесь определительно — максимум по построению есть от узла на найденном индексе, — и согласовывать Qeq с лейбницевым равенством больше негде. Индексы — натуральные числа, с равенством у них никаких тонкостей нет. Так переключение с значения на позицию снимает затруднение, в которое упёрлась argmax-версия.

L5 и статус argmax

С переходом к индексам проясняется и более глубокий вопрос — что вообще такое <<позиция максимума>>, когда максимум достигается не в одной точке. Разберём его; ответ опирается на закон логики ToS, и тот же ответ зафиксирован в комментарии EVT_idx.v.

Представим плато: на сетке несколько узлов дают одно и то же наибольшее значение, . Какой из них — <>? Наивный ответ: <<надо разрешить ничью>>, доопределить выбор каким-то внешним правилом. Точнее — иначе. Здесь работает , закон порядка ToS. конституирует порядок позиций; и <> мы определяем через этот порядок — как выделенную -позицию, достигающую максимума: позицию, отобранную фиксированным порядком обхода сетки. На плато роль <> назначается не как <<разрешение ничьей>> внешним правилом, а потому, что сам задаёт порядок, в котором узлы рассматриваются. Ничьей нет: порядок выделяет позицию, а вполне-упорядоченность натуральных индексов делает выбор однозначным. Никакой внешней информации не добавляется — структура берётся из самого закона порядка.

Уточним, что значит <<выделенная>> — и при чтении кода здесь стоит быть внимательным. В аккумуляторе find_max_idx_acc сравнение узлов идёт через Qle_bool, и обновление наилучшего индекса происходит при равенстве значений. Если сетка перечисляется слева направо, выделенной окажется одна позиция; если список реализует обратный порядок или иначе обновляет при равенстве — другая. Важно поэтому не <<левая первой>> само по себе — важно отсутствие произвольного внешнего выбора: <> детерминирован порядком , каким бы конкретно порядком перечисления узлов этот -приоритет ни был реализован. Index-версия как раз и делает выбор детерминированным; для полной прозрачности следует лишь держать в виду, какой порядок обхода сетки этот приоритет воплощает.

Итог секции EVT_STRONG файла — теорема EVT_strong_process: процесс значений супремума есть Коши, процесс позиций лежит в , и на каждом шаге значение супремума совпадает с от позиции. То же честное содержание, что и в EVT_complete (§ 3.6.4): сходимость доказана для процесса значений; о процессе позиций комментарий EVT_idx.v прямо повторяет — над он Коши быть не обязан, его предел может оказаться иррациональным.

Process-обёртка

{ Третий файл — ProcessEVT.v (133 строки) — играет ту же роль, что ProcessIVT.v для теоремы о промежуточном значении: тонкая обёртка, переносящая результат на язык процессов ProcessCore. Мосты Cauchy-совместимости (evt_cauchy_ compat), sup_process_cauchy, process_EVT; evt_convergence_rate фиксирует темп — . }

Здесь важна одна оговорка о согласованности. ProcessEVT.v оборачивает именно слой EVT_ERR.v — он импортирует историческую argmax-версию, а не новую index-версию EVT_idx.v. Поэтому ProcessEVT.v следует читать как process-адаптацию исторической формулировки теоремы об экстремуме. А для вопроса о достижении максимума на сетке и для разрешения затруднения <<Qeq против лейбницева равенства>> главным файлом остаётся EVT_idx.v.

И — последняя для раздела точность, по уговору § 3.1. Файл EVT_idx.v устроен в отношении аксиом с особенностью: он импортирует ToS_Axioms и при этом ещё раз объявляет Axiom classic локально, внутри самого файла. Содержательно это тот же — закон исключённого третьего: по замыслу обе classic — одна и та же техническая Rocq-реализация закона логики ToS. Но технически файл объявляет отдельной локальной аксиомой — и при чтении Print Assumptions эту зависимость следует учитывать именно как локальное объявление, а не автоматически как тот же самый объект из ToS_Axioms.v. Глава отмечает это как особенность файла; на статус доказательства это не влияет — по уговору § 3.1 обращение к есть явный учёт уровня.

Равномерный предел, связь и итог главы

Равномерный предел непрерывных функций

Остаётся последний сюжет главы — и он отвечает на естественный вопрос: сохраняется ли непрерывность при предельном переходе? Если последовательность непрерывных функций к чему-то сходится, будет ли предел непрерывен?

Ответ зависит от вида сходимости — и здесь придётся, как уже было с непрерывностью в § 3.3, различить поточечное и равномерное. Сходимость последовательности функций к функции бывает поточечной: в каждой точке по отдельности значения сходятся к . И бывает равномерной: номер , после которого уже неотличимо близка к , един для всего отрезка сразу. Равномерную сходимость на записывают так:

Definition uniform_converges (fn : fun_seq) (f : Q -> Q) (a b : Q)
  : Prop :=
  forall eps : Q, 0 < eps ->
    exists N : nat, forall n : nat,
      (N <= n)%nat -> forall x : Q, a <= x -> x <= b ->
        Qabs (fn n x - f x) < eps.

И здесь — та же перестановка кванторов, что отличала равномерную непрерывность от поточечной (§ 3.3). При равномерной сходимости номер вынесен наружу, перед квантором по точке: после шага все функции отстоят от ближе сразу во всех точках. Этого — и только этого — хватает, чтобы непрерывность пережила предельный переход:

Theorem uniform_limit_continuous_on :
  forall (fn : fun_seq) (f : Q -> Q) (a b : Q),
    uniform_converges fn f a b ->
    (forall n : nat, continuous_on (fn n) a b) ->
    continuous_on f a b.

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

Одна честная оговорка о границах. Файл UniformConvergence.v — шире этой одной теоремы: в нём есть и обмен предела с интегралом, и обмен с производной, и теорема Дини. Но эти сюжеты опираются на интегрирование и дифференцирование — на аппарат, который Часть V строит позже. Глава 5.3 берёт из UniformConvergence.v только то, что относится собственно к непрерывности, — определение continuous_on и теорему о равномерном пределе. Обмен предела с интегралом и производной — материал одной из последующих глав Части V.

{ И — по уговору § 3.1 — слово об аксиомном статусе. Шапка файла UniformConvergence.v объявляет, что файл в целом импортирует классический слой — classic приходит в него через смежные результаты о монотонной сходимости и дифференцировании. Само доказательство uniform_limit_continuous_on имеет стандартный -вид. Однако без отдельной проверки Print Assumptions именно этой теоремы глава не утверждает её аксиомной чистоты — по правилу аудита, заведённому ещё в Главе 4.6: аксиомный статус устанавливается по Print Assumptions конкретной теоремы, а не приписывается ей от заголовка файла. Поэтому глава использует uniform_limit_continuous_on как рабочий результат о равномерных пределах, а суждение о его аксиомной чистоте оставляет этой проверке. }

Смежная заготовка: отображения процессов

{ Стоит, чтобы карта была полной, упомянуть ещё один файл — ProcessContinuity.v. Имя обещает теорию непрерывности, но содержание иное, и честнее сказать это прямо. Файл маленький (36 строк) и говорит не о непрерывности функций , а об отображениях процессов — отображениях . Он вводит process_map_lipschitz (липшицевость такого отображения) и process_contraction (сжатие) — понятия, относящиеся к будущей линии неподвижных точек, а не к настоящей главе. Его теорема с громким именем continuity_foundation — как и одноимённые <> из Главы 5.1 — честно есть лишь конъюнкция двух тривиальных лемм (тождественное отображение липшицево с константой , постоянное — с константой ). К теории непрерывности функций ProcessContinuity.v прямого отношения не имеет; глава называет это прямо. }

Что построено и что готовится

Итог главы — тремя списками, по дисциплине honest-режима Части V.

Построено и проверено.

  • { Топологическое лицо непрерывности над — - определение (continuous_at, continuous, continuous_on), алгебра непрерывных функций, прообраз открытого открыт; конструктивно, без аксиом (Topology.v).}
  • Равномерная непрерывность и конструктивный мост к ней — lipschitz_uniform_cont (липшицевость влечёт равномерную непрерывность), с алгеброй равномерно непрерывных функций.
  • Теорема о промежуточном значении на трёх уровнях — -версия (IVT_process), процессная обёртка (process_IVT), типовой апгрейд до CauchySeq (ivt_cauchy_real); корень — бисекционный Cauchy-процесс.
  • Теорема об экстремуме в двух версиях: историческая argmax-версия EVT_complete сохранена, но помечена как deprecated; текущая рекомендуемая index-based версия — EVT_strong_process. В обеих процесс значений супремума — Коши.
  • Равномерный предел непрерывных функций непрерывен (uniform_limit_continuous_on).

На чём это стоит.

  • Топологическое лицо непрерывности — на чистой конструкции, без аксиом (Topology.v).
  • Теоремы о промежуточном значении и об экстремуме — на : classic приходит в IVT_ERR через архимедовость, в EVT_ERR и EVT_idx — напрямую. Это не изъян, а явный учёт уровня: classic — техническая Rocq-реализация закона исключённого третьего ToS.

Не построено в этой главе.

  • { Теорема Кантора–Гейне над — поточечная непрерывность на отрезке не влечёт равномерную; это математический факт, а не пробел, и причина — неполнота .}
  • Сходимость процесса позиций максимума: над argmax_process не обязан быть Коши — доказана сходимость лишь процесса значений.
  • { Миграция теорем на головной файл: канонический головной файл теории непрерывности построен (analysis/Continuity.v: канон continuous_on, uniformly_continuous_on, Lipschitz_on и Липшицев мост), но существующие теоремы (IVT, EVT, HeineBorelComplete) на него ещё не переведены — каждая несёт своё локальное определение.}
  • Непрерывность функций на фактор-классах RealPoint — материал главы живёт на уровне функций .

{

Готовит дальше. Равномерная непрерывность и липшицевость — рабочий аппарат для следующей главы Части V, о производной; теоремы о промежуточном значении и об экстремуме — инструменты, на которые обопрётся дифференциальное исчисление; обмен равномерного предела с интегралом и производной (остальная часть Uniform\- Convergence.v) — материал одной из последующих глав. }

Итог главы

Глава 5.3 прошла непрерывность от - определения до двух больших теорем анализа. Её главный урок — о двух лицах непрерывности. Над поточечная и равномерная непрерывность не совпадают: теорема Кантора–Гейне, склеивающая их над , над неверна — та же неполнота, что рушила Гейне–Бореля. Поэтому обе главные теоремы — о промежуточном значении и об экстремуме — честно несут в гипотезе именно равномерную непрерывность, и обе строят не классическую <<точку>>, а процесс: бисекцию, сходящуюся к перемене знака, и измельчающуюся сетку, чьи значения супремума образуют процесс Коши.

{Итог главы — в трёх частях. Первое: что построено. Топологическое лицо непрерывности над — определение, алгебра непрерывных функций, теорема о прообразе — построено конструктивно, без аксиом, в рамках файла Topology.v. Равномерная непрерывность снабжена конструктивным мостом — липшицевость влечёт равномерную непрерывность — взамен недоказуемой над теоремы Кантора–Гейне. Теорема о промежуточном значении доказана на трёх уровнях типизации, теорема об экстремуме — в двух версиях; равномерный предел непрерывных функций непрерывен.}

{Второе: на чём это стоит. Топологическое лицо непрерывности — на чистой конструкции. Теоремы о промежуточном значении и об экстремуме — на , законе исключённого третьего ToS. Техническая Rocq-аксиома classic — это реализация ; обращение к ней есть явный учёт уровня доказательства, а не отступление от строгости.}

{Третье: что остаётся открытым. Теорема Кантора–Гейне над неверна — это математический факт. Процесс позиций максимума над не обязан быть Коши — доказана сходимость лишь процесса значений. Канонический головной файл теории непрерывности построен (analysis/Continuity.v), но миграция на него существующих теорем (IVT, EVT) пока отложена. Глава дала непрерывность и две её теоремы; производная, что встанет на этом основании, — предмет следующей главы Части V.}



Часть: Часть V. Топология и анализ процессов · Том: «Математика»

Понятия: Логика · Формализация

Навигация: ← Глава 2. Топология и компактность · Глава 4. Производная →

Footnotes

  1. E/R/R-разметка в шапке файла Topology.v; здесь разворачивается по образцу Части I. ↩

  2. Эта ролевая разметка — из шапок ProcessIVT.v и ProcessEVT.v. ↩

  3. Этот пример теперь и формально проверен. Для на машинно установлены обе стороны границы: поточечная непрерывность во всякой точке отрезка (cantor_heine_continuous) и отсутствие равномерной непрерывности (cantor_heine_not_uniform), — вместе они и означают, что теорема Кантора–Гейне над неверна (cantor_heine_fails_Q). Подходящие к точки — это рациональные приближения по рекуррентности Пелля с точной ошибкой , на которых . Машинно проверено, 11 Qed, 0 аксиом. ↩