От принципа к типу

Что оставила Глава 4.1

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

Но назвать процесс и построить его как полноценный объект формализации — разные вещи. Глава 4.1 назвала; настоящая глава строит. Её задача — дать процессу определение типа: такого же определённого предмета Rocq-формализации, как индуктивный тип натуральных чисел или тип рациональных. Пока этого определения нет, все разговоры о <<процессном действительном числе>> остаются обещанием; Глава 4.2 обещание выполняет.

Почему именно тип функций

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

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

Это и делает выбор типа неизбежным, а не произвольным. Можно было бы вообразить процесс как-то иначе — как бесконечный список, как поток, как пару из правила и состояния. Но всякое такое представление либо сводится к функции <<номер шага приближение>>, либо протаскивает завершённую бесконечность (бесконечный список как готовый объект), которую как раз и запрещает. Функция из номеров в приближения — наименьшее, чего достаточно, и наибольшее, что позволяет. Тип процесса вычитывается из принципа, а не назначается рядом с ним.

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

Дальнейшее строит этот тип по шагам и разбирает его аппарат. Сперва — голый процесс как тип функций и наблюдение его по конечным префиксам (§ 2.2). Затем — условие, отбирающее из всех процессов те, что годятся в действительные числа: свойство Коши (§ 2.3). Затем — арифметика процессов и теоремы о том, что она не выводит за пределы отобранного класса (§ 2.4). Затем — собственно тип действительного числа, в котором носитель и доказательство сведены вместе, и честный разбор того, что Rocq-формализация ToS даёт этот тип не одним, а несколькими родственными оформлениями (§ 2.5). Затем — отношение, по которому разные процессы задают одно и то же число (§ 2.6), и структурные признаки сходимости (§ 2.7). Наконец — итог и мост к Главе 4.3 (§ 2.8).

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

Голый процесс как тип функций

Определение RealProcess{RealProcess}

В Rocq-репозитории ToS базовый процессный тип определён в файле ProcessCore.v и носит имя RealProcess.1 Определение предельно коротко:

Definition RealProcess := nat -> Q.

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

Назовём такой объект голым процессом — голым в том смысле, что на него ещё не наложено никаких условий. Голый процесс может вести себя как угодно: приближаться к некоторому значению, колебаться без предела, разбегаться. Тип RealProcess вмещает их все. Это важно осознать сразу: RealProcess шире класса действительных чисел. Не всякий голый процесс есть число; какие именно процессы числами являются, установит § 2.3. Пока же RealProcess — это общий тип-носитель, пространство, внутри которого числа предстоит ещё выделить.

Простейший обитатель этого пространства — постоянный процесс:

Definition const_process (q : Q) : RealProcess := fun _ => q.

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

RealProcess{RealProcess} есть тип тотальных функций

Глава 4.1 в § 1.8 уже сделала оговорку, которую здесь нужно развернуть. Технически nat -> Q есть в Rocq тип тотальных функций: терм этого типа определён на всяком , а не только на тех номерах, что уже были запрошены. Было бы неточно сказать, что в RealProcess <<нет ничего завершённого>>.

Различение здесь такое же, как проведённое в § 1.4 для типа nat. Формально тип RealProcess существует, и терм этого типа есть законный объект Rocq, по которому можно квантифицировать. ToS этого формального факта не отрицает. ToS читает терм типа RealProcess операционально — как правило, которое по предъявленному номеру вычисляет рациональный ответ. При таком чтении процесс есть схема, разворачивающаяся по запросу, а не собранная воедино бесконечная таблица значений. Завершённой бесконечности как сет-теоретического объекта — готового бесконечного множества пар <<номер, значение>> — в этом чтении нет; но в формальном языке Rocq RealProcess есть именно функциональный тип. Глава держит оба уровня: формальный (функциональный тип) и онтологический (операциональное правило), — и не подменяет один другим.

Стоит отметить и техническую сторону. В Rocq запись nat -> Q есть функциональный тип, построенный поверх двух уже имеющихся типов — nat и Q, — и берущий их как область и кообласть. Определение RealProcess не создаёт ни натуральные, ни рациональные числа заново; оно их использует. Это согласуется с онтологической деривацией § 2.1.2 — процесс не требует нового исходного материала, — но важно видеть, где проходит граница: онтологическая деривация объясняет, почему тип таков, а формально nat и Q — готовые типы языка Rocq, построенные в предыдущих частях тома, и глава 4.2 их не переобосновывает, а применяет.

Наблюдение процесса: префиксы

Если процесс читается операционально — как правило, отвечающее на запросы, — то естественно спросить: что мы реально наблюдаем, имея процесс на руках? Ответ Rocq-формализация даёт в файле ProcessGeneral.v, и ответ этот — конечные префиксы.2 Файл вводит универсальный процессный тип GenProcess A := nat -> A — процесс над любым типом , для совпадающий по существу с RealProcess, — и две операции наблюдения:

Definition observe {A : Type} (p : GenProcess A) (n : nat) : A := p n.
 
Fixpoint prefix {A : Type} (p : GenProcess A) (n : nat) : list A :=
  match n with
  | O => []
  | S k => prefix p k ++ [p k]
  end.

Операция observe читает значение на одном шаге. Операция prefix собирает первые значений процесса в конечный список. И вот это — prefix — есть в действии, записанный как функция. Что бы мы ни взяли у процесса, мы берём конечный префикс: список длины , собранный за шагов. Файл это и доказывает: лемма prefix_length устанавливает, что префикс длины имеет ровно элементов, а лемма prefix_nth — что -й элемент префикса есть в точности . Процесс никогда не предъявляется весь; он предъявляется префиксами, и всякий префикс конечен. Это и есть конечная актуальность § 1.1, ставшая операцией: в любой момент наблюдения налицо конечный список, а бесконечен лишь незавершённый процесс их порождения.

Условие Коши: отбор чисел из процессов

Зачем нужен отбор

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

Значит, тип RealProcess надо сузить. Действительное число — не любой голый процесс, а процесс, прошедший отбор: удовлетворяющий условию сходимости. Это условие ToS, следуя классической традиции и операциональному духу Главы III.4, формулирует как свойство Коши.

Определение свойства Коши

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

Rocq-формализация записывает это так. Процесс есть Коши, если для всякой положительной точности можно указать такой номер шага , что любые два приближения с номерами не меньше отстоят друг от друга меньше чем на . В файле CauchyReal.v (о нём подробно § 2.5) это предикат is_cauchy:

Definition is_cauchy (a : nat -> Q) : Prop :=
  forall eps : Q, 0 < eps ->
    exists N : nat, forall m n : nat,
      (N <= m)%nat -> (N <= n)%nat -> Qabs (a m - a n) < eps.

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

Число как отобранный процесс

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

Процессы рациональных приближений к , разобранные в Главе III.4, — ньютонов процесс и процесс подходящих дробей цепной дроби, — служат мотивационными примерами таких кандидатов в числа. Здесь, однако, нужна точность относительно того, что в репозитории об этих процессах доказано. В формализации Главы III.4 для них проверены первые шаги, установлено различие двух процессов и проведено сравнение качества приближения на конкретном шаге. Полное доказательство того, что именно ньютонов или цепно-дробный процесс есть процесс Коши — то есть отдельная теорема вида is_Cauchy с оценкой скорости сходимости, — в проверенном фрагменте не предъявлено и требует самостоятельной формулировки. Глава III.4 поддерживает идею, что к одному числу ведут разные процессы; полная проверка их сходимости в форме Коши — предмет отдельной теоремы. Сказанное здесь о следует читать в этом точном смысле: — образцовый кандидат на роль процессного числа, и наглядный, но именно как кандидат.

Здесь, однако, надо быть точным в одном пункте, и это первый случай, где сказывается множественность процессных конструкций в репозитории (о ней § 2.5). Свойство Коши в ToS формализовано двумя предикатами в двух файлах. В CauchyReal.v — предикат is_cauchy, приведённый выше. В ProcessCore.v — предикат is_Cauchy (с заглавной буквой), наложенный на RealProcess. По смыслу это одно и то же условие; формально это два разных предиката в двух разных файлах, и глава не будет делать вид, будто это один. Файл ProcessGeneral.v проводит между ними мост — к нему § 2.5 и вернётся. Пока же запомним содержательное: число есть процесс, прошедший отбор по свойству Коши, — а каким из двух предикатов отбор записан, зависит от того, в какой из процессных линий репозитория мы работаем. В E/R/R-разборе (§ 2.8.2) свойство Коши — это правило отбора, выделяющее из носителей-процессов представителей числа.

Арифметика процессов

Операции поточечны

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

Definition process_add (R1 R2 : RealProcess) : RealProcess :=
  fun n => R1 n + R2 n.
 
Definition process_neg (R : RealProcess) : RealProcess :=
  fun n => - (R n).
 
Definition process_sub (R1 R2 : RealProcess) : RealProcess :=
  fun n => R1 n - R2 n.
 
Definition process_scale (c : Q) (R : RealProcess) : RealProcess :=
  fun n => c * R n.

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

Стоит сразу отметить границу этого аппарата. Перечисленные операции — аддитивные (сложение, отрицание, вычитание) и масштабирование рациональной постоянной. Полного умножения двух произвольных процессных чисел — операции с доказательством, что она сохраняет свойство Коши, — среди операций ProcessArithmetic.v нет, и настоящая глава его не строит и не использует. Само умножение, однако, в репозитории построено — отдельным файлом: process_mul с леммой сохранения Коши mul_preserves_Cauchy (CauchyProcessBridge.v), а на упакованной линии — cauchy_mul с полевыми законами (RealField.v). Оно и вправду сложнее сложения (оценка произведения привлекает ограниченность сомножителей) и относится к построению поля — к нему обращается Глава 4.3 (§ 3.6). Здесь же предмет — тип числа и его аддитивная арифметика; умножение эта глава не использует, но открытым направлением оно уже не является.

Операции сохраняют свойство Коши

Поточечное определение операций само по себе ещё ничего не гарантирует. Возникает законный вопрос: если и суть числа — то есть прошли отбор § 2.3, удовлетворяют свойству Коши, — то будет ли их сумма снова числом? Иначе говоря: не выводит ли арифметика за пределы отобранного класса? Если бы выводила, действительные числа не были бы замкнуты относительно сложения, и вся конструкция теряла бы смысл.

ProcessArithmetic.v доказывает, что не выводит. В файле — четыре теоремы сохранения:

Theorem add_preserves_Cauchy : forall R1 R2,
  is_Cauchy R1 -> is_Cauchy R2 -> is_Cauchy (process_add R1 R2).
Theorem neg_preserves_Cauchy : forall R,
  is_Cauchy R -> is_Cauchy (process_neg R).
Theorem sub_preserves_Cauchy : forall R1 R2,
  is_Cauchy R1 -> is_Cauchy R2 -> is_Cauchy (process_sub R1 R2).
Theorem scale_preserves_Cauchy : forall c R,
  is_Cauchy R -> is_Cauchy (process_scale c R).

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

Связь с {P4} Главы 4.1

Стоит заметить, что эти теоремы сохранения перекликаются с тем, что встречалось в Главе 4.1. Там предикат P4_formalized из ProcessFourPrinciples.v был конъюнкцией трёх утверждений: существует процесс Коши; некоторая операция над процессами Коши сохраняет свойство Коши; сумма процессов Коши есть процесс Коши. Третий конъюнкт P4_formalized — это в точности теорема замкнутости относительно сложения, аналогичная приведённой здесь add_preserves_Cauchy.

Второй конъюнкт требует оговорки, и важной. В P4_formalized он записан через process_product и process_fst: сохранение свойства Коши под первой проекцией продукта процессов. Слово product здесь относится к продукту процессов в структурном, категориальном смысле — к образованию пары процессов и её проекциям, — а не к арифметическому умножению двух действительных чисел . Глава не смешивает эти две вещи. Арифметическая замкнутость, которую настоящая глава реально использует и которую даёт ProcessArithmetic.v, — это замкнутость относительно сложения, вычитания, отрицания и рационального масштабирования (§ 2.4.2); арифметического умножения двух процессов среди неё, как отмечено в § 2.4.1, нет.

Связь с Главой 4.1 поэтому содержательная, но не буквальная. Глава 4.1 говорила о P4_formalized как о формальном следе принципа — машинно-проверяемом ядре, фиксирующем, что процессы Коши существуют и замкнуты относительно некоторых операций. Настоящий раздел показывает аддитивную замкнутость вблизи, на уровне отдельных теорем ProcessArithmetic.v. То, что в Главе 4.1 было сжато в один предикат-след, здесь развёрнуто в рабочую аддитивную арифметику. Процессное действительное число не просто существует как тип — над ним считают: определены аддитивные операции, и они не разрушают его числовой природы. В терминах § 2.8.2 это правила-операции (Rules), сохраняющие роль <<число>>: отобранный класс замкнут.

Тип действительного числа

Носитель и свидетель в одном объекте

{ До сих пор действительное число описывалось в два приёма: голый процесс (тип RealProcess, § 2.2) плюс условие отбора (свойство Коши, § 2.3). Число было процессом и доказательством того, что процесс прошёл отбор, — но эти две вещи лежали порознь: процесс в одном месте, его свойство Коши в другом. }

Полноценный тип действительного числа сводит их в один объект. В Rocq это делается записью — структурой с полями. Файл CauchyReal.v вводит тип CauchySeq:4

Record CauchySeq := mkCauchy {
  cs_seq :> nat -> Q;
  cs_cauchy : is_cauchy cs_seq
}.

Терм типа CauchySeq — это пара: первое поле, cs_seq, — сам процесс, функция из номеров в рациональные; второе поле, cs_cauchy, — доказательство того, что этот процесс удовлетворяет свойству Коши. Конструктор mkCauchy собирает объект из этих двух составляющих: носитель и свидетель отбора вместе.

Здесь нужно сразу сказать точно, чем CauchySeq является, а чем — нет, потому что соблазн назвать его прямо <<типом действительного числа>> велик, а это было бы неточно. CauchySeq есть тип процессных представителей действительных чисел. Терм типа CauchySeq — это процесс рациональных приближений вместе с доказательством его фундаментальности; это кандидат, прошедший отбор, законный представитель некоторого действительного числа. Но собственно число, строго говоря, CauchySeq ещё не есть. Число возникает следующим шагом — как класс эквивалентности таких представителей по отношению cauchy_equiv (о нём § 2.6); этот шаг, факторизацию, совершит Глава 4.3. Различие существенно, и глава будет его держать: RealProcess (§ 2.2) — голый процесс-кандидат; CauchySeq — процесс-представитель, кандидат, прошедший отбор; собственно число — класс эквивалентных представителей.

{ С этой оговоркой видно, чем CauchySeq отличается от RealProcess. Тип RealProcess был шире: он вмещал и расходящиеся процессы, не задающие никакого числа. Тип CauchySeq расходящийся процесс вместить не может: чтобы построить терм типа CauchySeq с данным носителем, нужно предъявить второе поле — доказательство is_cauchy этого носителя; а для процесса, у которого свойство Коши опровергнуто, такого доказательства предъявить нельзя. Поэтому население типа CauchySeq — ровно процессы Коши, то есть допустимые представители действительных чисел, и ничего сверх. Отбор § 2.3 здесь не отдельный шаг, а часть устройства типа. }

Маленькая, но важная деталь записи — двоеточие со стрелкой в cs_seq :> nat -> Q. Это принуждение (coercion): Rocq разрешает применять терм типа CauchySeq прямо как функцию, автоматически беря его первое поле. Если есть CauchySeq, то означает cs_seq — приближение представителя на шаге . Представитель можно запрашивать как процесс, не извлекая носитель вручную. Тип помнит, что процессный представитель числа — это всё ещё процесс, только процесс с гарантией.

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

Стоит назвать вещь её классическим именем. То, что строит CauchyReal.v, — это пополнение поля рациональных чисел по Коши: стандартная конструкция, которой математика получает действительные числа из рациональных. Рациональные числа неполны — в них есть <<дыры>> вроде , последовательности приближений, которым некуда сойтись внутри . Пополнение затыкает дыры, объявляя действительным числом саму сходящуюся последовательность рациональных приближений.

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

Нужна, впрочем, точность относительно того, что в файле уже построено. Слова о <<классе эквивалентности фундаментальных последовательностей>> — это пока классическое математическое чтение, а не готовый Rocq-объект. Файл CauchyReal.v строит тип представителей CauchySeq и отношение cauchy_equiv; он не строит фактортип — тип, в котором эквивалентные процессы буквально стали бы одним термом. Действительное число как класс эквивалентности есть, стало быть, задача следующего шага, а не уже реализованная в этом файле конструкция. Глава 4.2 даёт представителей и отношение; превращение представителей в числа — факторизацию — совершит Глава 4.3.

Три линии процесса в репозитории

Теперь глава обязана сказать прямо то, на что несколько раз намекала. <<Процесс как тип>> представлен в Rocq-формализации ToS не одной конструкцией, а тремя родственными, и читатель, открыв репозиторий, встретит все три. Честность требует их назвать и показать, как они соотносятся.

Первая линия — RealProcess := nat -> Q из ProcessCore.v (§ 2.2). Голый процесс: функция без вшитого доказательства. На нём стоит арифметика ProcessArithmetic.v (§ 2.4) и формальный след из ProcessFourPrinciples.v (Глава 4.1). Свойство Коши здесь — отдельный предикат is_Cauchy, накладываемый извне.

Вторая линия — CauchySeq из CauchyReal.v (§ 2.5.1). Процесс с вшитым доказательством Коши; тип процессных представителей действительного числа. Своя арифметика (cauchy_add и прочие, § 2.6), своё отношение эквивалентности, свои алгебраические законы. Эта линия в репозитории выросла самостоятельно: CauchyReal.v даже не подключает ProcessCore.v.

Третья линия — GenProcess A := nat -> A из ProcessGeneral.v (§ 2.2.3). Универсальный процесс над произвольным типом . Это не конкурент первым двум, а рамка над ними: и RealProcess, и носитель CauchySeq суть частные случаи GenProcess при . Шапка файла прямо говорит, что GenProcess A — универсальный процессный тип, а конкретные процессы суть его частные случаи.

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

ФайлТипПредикат КошиСтатус
Process\-Core.vRealProcess, т. е. nat -> Qis_CauchyГолый процесс внешний отбор
Cauchy\-Real.vCauchySeqis_cauchyПроцесс вшитое доказательство
Process\-Gene\-ral.vGenProcess A, т. е. nat -> Ais_cauchy_genОбщая метрическая рамка

Заметим и устройство репозитория: CauchyReal.v и ProcessGeneral.v лежат в верхнем каталоге src/, а ProcessCore.v — в src/process/. Это историческое расположение файлов; концептуально все три принадлежат одному процессному слою.

Как три линии соотносятся

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

Lemma cauchy_Q_equiv : forall (a : nat -> Q),
  is_cauchy a <-> is_cauchy_gen Qdist a.

{ Левая часть — предикат is_cauchy из CauchyReal.v; правая — общее свойство Коши при метрике Qdist. Лемма устанавливает их равносильность: свойство Коши второй линии есть частный случай общего свойства Коши третьей. Следующая лемма, cauchy_seq_is_gen_process, довершает: всякий CauchySeq есть GenProcess , удовлетворяющий общему свойству Коши. }

{ Стоит проследить связь линий до конца. ProcessGeneral.v связывает вторую и третью линии — предикат is_cauchy с is_cauchy_gen. Первую же со второй связывает теперь отдельный файл CauchyProcessBridge.v: предикаты is_Cauchy (из ProcessCore.v, первая линия) и is_cauchy (из CauchyReal.v, вторая) формализуют одно и то же --условие и оказались совпадающими буквально, — так что мостовая лемма is_Cauchy_iff_is_cauchy ( для всякого ) доказывается простой развёрткой определений. Лемма process_equiv_iff_cauchy_equiv связывает и отношения эквивалентности двух линий, а функция to_CauchySeq переводит процесс первой линии в представитель второй. }

Это снимает прежнюю оговорку: направление синхронизации, которое глава здесь называла, пройдено. Мостовая лемма <<для всякого верно is_Cauchy тогда и только тогда, когда is_cauchy >> построена (is_Cauchy_iff_is_cauchy), и при полном совпадении определений её доказательство и свелось к развёртке. Операции переносятся по тому же мосту: умножение второй линии cauchy_mul даёт умножение первой process_mul — с сохранением Коши и совместимостью (CauchyProcessBridge.v). Так что первая и вторая линии — не <<родственные, но формально раздельные>>, а машинно связанные: переход между ними теперь есть ссылка на доказанное, а не только содержательный жест. Различие же остаётся онтологическим, а не формальным — это две записи одного --условия, и мост именно записи и отождествляет.

Какую линию глава берёт за основную

Раз линий три, нужно сказать, на какой из них стоит дальнейшая Часть IV. Глава делает выбор и называет его явно.

Основным типом для построения процессного действительного числа глава берёт CauchySeq — вторую линию. Причина проста: именно CauchySeq есть готовый тип представителей, снабжённый всем нужным аппаратом. В нём доказательство Коши вшито в объект, а не приложено снаружи; его население — ровно процессы Коши, допустимые представители чисел; для него уже доказаны отношение эквивалентности со всеми нужными свойствами и алгебраические законы (§ 2.6). Когда Глава 4.3 будет строить число как класс эквивалентности, а Глава 4.4 — доказывать несчётность, удобнее всего опираться на тип представителей, который уже несёт свою гарантию внутри.

При этом RealProcess не отбрасывается. Он остаётся в изложении как голый процесс — процесс до наложения условия Коши, то самое широкое пространство § 2.2, внутри которого представители выделяются отбором. Различие линий получает теперь ясный смысл, и его стоит назвать в окончательной форме: RealProcess — голый процесс-кандидат; CauchySeq — процесс-представитель, кандидат, прошедший отбор; собственно число — класс эквивалентных представителей, и его строит Глава 4.3. А GenProcess остаётся универсальной рамкой, напоминающей, что и то и другое — частные случаи одной идеи процесса над типом. Глава не сводит три линии в одну искусственно — она расставляет их по ролям: рамка, кандидат, представитель, — а число оставляет следующей главе.

Когда два процесса задают одно число

Разные процессы, одно число

Глава III.4 уже отметила — а Глава 4.1 повторила, — что у одного действительного числа процессов много. К ведёт не один процесс рациональных приближений, а разные: можно приближать десятичными дробями, можно — подходящими дробями цепной дроби, можно — ньютоновыми итерациями. Это разные процессы — разные функции из номеров в рациональные, дающие на одних и тех же шагах разные приближения. Но число они задают одно.

Значит, тип CauchySeq различает больше объектов, чем есть действительных чисел: одному числу отвечает целое семейство термов типа CauchySeq. Это и есть та причина, по которой § 2.5 называл CauchySeq типом представителей, а не самих чисел: представителей у одного числа много. Чтобы от представителей перейти к числам, нужно отождествить процессы, задающие одно и то же. Нужно отношение: <<процесс и процесс задают одно число>>.

Отношение эквивалентности процессов

Когда два процесса Коши задают одно число? Тогда, когда их приближения со временем сближаются неограниченно — расходятся меньше всякой наперёд заданной точности. Это — то же --рассуждение, что в свойстве Коши, только теперь применённое к паре процессов. CauchyReal.v вводит его как предикат cauchy_equiv:

Definition cauchy_equiv (a b : CauchySeq) : Prop :=
  forall eps : Q, 0 < eps ->
    exists N : nat, forall n : nat,
      (N <= n)%nat -> Qabs (cs_seq a n - cs_seq b n) < eps.

Процессы и эквивалентны, если для всякой точности найдётся рубеж , начиная с которого их приближения расходятся меньше чем на . Файл вводит для этого отношения знак — (в записи репозитория — a \~{}\~{} b).

{ Чтобы такое отношение годилось для отождествления чисел, оно должно быть отношением эквивалентности — рефлексивным, симметричным, транзитивным. CauchyReal.v это и доказывает, тремя отдельными леммами: cauchy_equiv_refl (всякий процесс эквивалентен себе), cauchy_equiv_sym (если эквивалентен , то — ), cauchy_equiv_trans (если эквивалентен , а — , то — ). Три свойства доказаны; cauchy_equiv есть полноценное отношение эквивалентности на типе CauchySeq. }

Арифметика уважает эквивалентность

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

{ CauchyReal.v доказывает и это. Файл определяет арифметику второй линии — cauchy_add, cauchy_neg, cauchy_sub, cauchy_const, — где каждая операция есть mkCauchy: она строит новый CauchySeq, сразу снабжая результат доказательством, что он опять Коши (это та же замкнутость, что в § 2.4, но проведённая внутри второй линии). А затем — ключевые леммы согласования: }

Lemma cauchy_add_compat : forall a a' b b' : CauchySeq,
  a ~~ a' -> b ~~ b' -> cauchy_add a b ~~ cauchy_add a' b'.
Lemma cauchy_neg_compat : forall a a' : CauchySeq,
  a ~~ a' -> cauchy_neg a ~~ cauchy_neg a'.

Лемма cauchy_add_compat говорит: замена слагаемых на эквивалентные даёт эквивалентную сумму; cauchy_neg_compat — то же для смены знака. Арифметика уважает отношение эквивалентности. Это значит, что операции корректно определены не только на процессах, но и на числах — на классах эквивалентных процессов: результат не зависит от выбора представителя.

Что это готовит для Главы 4.3

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

Структурные признаки сходимости

Зачем нужны достаточные условия

Свойство Коши § 2.3 — определение: оно говорит, что значит быть сходящимся процессом. Но проверять его прямо по определению — для всякой точности искать рубеж — не всегда удобно. Часто процесс устроен так, что его сходимость видна из структуры, без перебора . Математике поэтому нужны достаточные условия Коши: структурные признаки, из которых свойство Коши следует. Rocq-формализация ToS такие признаки даёт, и настоящий раздел собирает главные.

Монотонность и ограниченность

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

Definition monotone_increasing (R : RealProcess) : Prop :=
  forall n, R n <= R (S n).
Definition monotone_decreasing (R : RealProcess) : Prop :=
  forall n, R (S n) <= R n.

И доказывает признак сходимости — теорему monotone_bounded_Cauchy:

Lemma monotone_bounded_Cauchy : forall R ub,
  monotone_increasing R -> (forall n, R n <= ub) -> is_Cauchy R.

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

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

Здесь нужна оговорка о логическом статусе, и глава её делает. В отличие от базового файла CauchyReal.v, доказательство monotone_bounded_Cauchy в ProcessArithmetic.v использует классическую логику: в коде применяется разбор случаев через classic (файл импортирует Classical). Для ToS это не новая внешняя аксиома — classic есть уже принятый закон (Глава 4.1, § 1.2.4), — но статус этого доказательства следует отличать от полностью конструктивных лемм. CauchyReal.v с его базовой конструкцией CauchySeq, отношением cauchy_equiv и аддитивной арифметикой обходится без classic вовсе; структурный же критерий monotone_bounded_Cauchy опирается на . Глава отмечает это, чтобы не выдать классический критерий за конструктивный в том же смысле, в каком конструктивно базовое построение типа.

Геометрическая скорость: процессный зазор

{ Второй признак — иной природы и связан с скоростью сходимости. Файл ProcessBounds.v вводит структуру, которую можно назвать процессным зазором.5 Это запись has_process_mass_gap с тремя условиями: процесс имеет устойчивый положительный нижний рубеж; его приближения сходятся с геометрической скоростью — расхождение убывает как степень некоторого числа меньше единицы; и процесс монотонно убывает. }

Имя mass_gap стоит читать как технический термин процессной формализации — наличие положительного нижнего зазора и геометрической оценки скорости. Это не утверждение о физическом массовом зазоре в смысле квантовой теории поля; оговорка нелишняя, поскольку в репозитории ToS есть и файлы физического содержания, и читатель мог бы связать имена. Здесь mass_gap — чисто структурное понятие сходимости.

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

Полнота: процесс приближается рациональными

Третий сюжет — не признак Коши, а его следствие, и сюжет этот относится к полноте. CauchyReal.v доказывает теорему cauchy_rational_approx: всякий процесс Коши на достаточно далёких шагах сколь угодно точно приближается рациональным числом — одним из своих же приближений. И теорему cauchy_complete_self — процесс Коши сходится <<к себе>>: его хвост укладывается в любую наперёд заданную точность вокруг любого достаточно далёкого приближения.

Здесь нужна точность в том, что именно доказано. Эти две теоремы фиксируют базовую форму полноты конструкции: каждый CauchySeq сам предоставляет рациональные приближения и сходится к себе как процессному объекту. Это ещё не полная метатеорема о метрической полноте — не утверждение <<всякая фундаментальная последовательность процессных действительных чисел имеет пределом процессное действительное число>>. Такая теорема потребовала бы отдельной формулировки: последовательностей действительных чисел, их пределов, и доказательства, что предел снова есть действительное число. cauchy_rational_approx и cauchy_complete_self к ней не равны; полная метрическая полнота пространства классов CauchySeq — отдельная задача, выходящая за пределы Главы 4.2. Содержательно же сказанного довольно для главного: рациональные числа неполны (в них <<не помещается>>), а процессная конструкция эту неполноту устраняет на базовом уровне — всякий процесс Коши имеет, к чему сходиться, к самому себе. И этот базовый результат доказан без завершённой бесконечности: CauchyReal.v в своей основе несёт ноль аксиом, построение конструктивно над .

Тип построен

Что сделано

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

Сперва — голый процесс: тип RealProcess как функция из номеров шагов в рациональные приближения, наблюдаемая по конечным префиксам (§ 2.2). Затем — осознание, что голый процесс слишком широк: тип RealProcess вмещает и расходящиеся процессы, не задающие никакого числа, и потому нужен отбор — свойство Коши, --условие о внутреннем сближении приближений (§ 2.3). Затем — арифметика: поточечные аддитивные операции и теоремы о том, что отбор они переживают, отобранный класс замкнут относительно сложения, вычитания, масштабирования (§ 2.4). Затем — тип процессных представителей действительного числа CauchySeq: запись, сводящая процесс и доказательство его сходимости в один объект, так что население типа — ровно процессы Коши, допустимые представители чисел (§ 2.5). Затем — отношение эквивалентности, говорящее, когда два процесса задают одно число, с доказанными рефлексивностью, симметрией, транзитивностью и согласованностью с арифметикой (§ 2.6). Наконец — структурные признаки, позволяющие устанавливать сходимость, не перебирая (§ 2.7).

Глава честно показала и то, что <<тип процесса>> в репозитории ToS существует в трёх родственных оформлениях — голый RealProcess, снабжённый гарантией CauchySeq, универсальная рамка GenProcess, — и расставила их по ролям: кандидат, представитель, рамка. Основным типом для построения процессного действительного числа во всей дальнейшей Части IV глава приняла CauchySeq — с ясной оговоркой, что собственно число есть класс эквивалентных представителей, и шаг к нему сделает Глава 4.3.

Разбор E/R/R: процессное число как система

Слои, перечисленные только что, складываются в систему — процессное действительное число, — и эта система имеет E/R/R-устройство (Часть I). Соберём его разбор; он лишь называет в терминах E/R/R то, что глава уже построила. Заголовки опорных файлов задают разметку прямо: ProcessCore.v объявляет правило — всякий объект есть конечный процесс на каждой стадии (); ProcessArithmetic.v — каждая операция сохраняет свойство Коши.6 Ведём разбор в онтологическом порядке Rules Roles Elements. Оговорка о статусе: <<система>> — содержательная интерпретация; речь идёт о процессах и представителях над , а собственно число как класс ещё не построено — его даёт Глава 4.3.

Rules — правила (закон ). Конституция — принцип : число есть не завершённая точка, а процесс рациональных приближений, конечный на каждой стадии; из неё следует и само устройство носителя — функция nat -> Q (§ 2.2). К конституции примыкает конкретный слой правил: свойство Коши как правило отбора (что годится в число, § 2.3); поточечная арифметика, замкнутая относительно Коши (§ 2.4); отношение эквивалентности с согласованностью с арифметикой — правило <<когда два процесса задают одно число>> (§ 2.6); структурные признаки сходимости (§ 2.7). Честная граница: критерий monotone_bounded_Cauchy опирается на (не на чистую конструкцию). Полного умножения двух процессов среди правил этой главы нет — но в репозитории оно построено (process_mul, cauchy_mul; § 2.4.3 и Глава 4.3).

Roles — значимость позиций (закон ). Здесь — центральное различение всей главы, прочитанное как ролевые статусы. Один и тот же носитель-процесс проходит три роли: голый кандидат (RealProcess — процесс до отбора), представитель, прошедший отбор по Коши (CauchySeq — процесс с вшитой гарантией), и, наконец, число — класс эквивалентных представителей. По каждый статус обоснован своим правилом: отбор Коши делает процесс представителем, эквивалентность собирает представителей в число. Эта прогрессия ролей — кандидат представитель число — и есть стержень главы.

Elements — носители (закон и принцип ). Элементы — рациональные приближения на каждом шаге; сам носитель есть процесс nat -> Q, простейший — постоянный const_process. По каждое приближение тождественно себе. По носитель конечен на любом уровне: процесс наблюдается префиксами — конечными списками длины (§ 2.2.3), а не предъявляется весь.

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

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

Хорошая сформированность. Разметка однозначна: приближения и процесс суть элементы, статусы кандидат/представитель/число — роли, с Коши и арифметикой — правила. Самореференции нет. Две честные оговорки. Во-первых, роль <<число>> на уровне этой главы ещё не реализована: построены носитель и представители, а число как класс строит Глава 4.3, — так что система здесь хорошо сформирована на уровне представителей. Во-вторых, <<неизбежность>> типа (§ 2.8.3 ниже) — содержательный тезис, не Rocq-теорема о единственности конструкции.

{ Этот разбор — E/R/R-фундамент всей Части IV. Он показывает, что RealProcess, CauchySeq и число — не три конкурирующих определения, а три ролевых статуса одного носителя, связанных правилом отбора (Коши) и правилом отождествления (эквивалентность); а — конституция, по которой число вообще есть процесс, а не точка. На этом типе встанут и факторизация Главы 4.3 (число как класс), и весь анализ Части V: метрика, непрерывность, производная, интеграл работают над процессными числами, прочитанными именно так.}

Тип не произволен

Стоит в итоге вернуться к тезису § 2.1: тип процессного действительного числа не произволен. Теперь это видно во всей полноте. Каждый его слой вынужден.

Функция из номеров в рациональные — вынуждена: процессу нужно отвечать на запрос <<приближение на шаге >>, а объект, сопоставляющий номеру приближение, и есть такая функция; ничего нового сверх уже построенных и она не требует. Условие Коши — вынуждено: без отбора тип вмещал бы расходящиеся процессы, не задающие чисел. Сведение носителя и свидетеля в запись CauchySeq — вынуждено: только так население типа совпадает с допустимыми представителями чисел и ни с чем сверх. Отношение эквивалентности — вынуждено: без него одному числу отвечало бы семейство несведённых представителей. Каждый слой — ответ на определённую необходимость, а не свободный выбор конструктора.

Тут, однако, нужна точная оговорка о том, чем эта <<неизбежность>> является и чем — нет. Rocq подтверждает корректность выбранных определений и доказательств: что тип CauchySeq построен без противоречий, что теоремы о нём доказаны. Rocq не доказывает уникальности этой конструкции среди всех возможных формализаций действительного числа. Математике известны и другие пути — сечения Дедекинда, локализованные действительные числа, интервальные представления; ToS выбирает процессный путь по содержательным причинам, изложенным в Главе 4.1 и в § 2.1, а не потому, что прочие пути формально исключены. Поэтому <<тип не произволен>> и <<тип структурно неизбежен>> — это философско-методологический вывод главы: каждый слой CauchySeq вынужден задачей <<построить число как процесс в духе >>. Это не Rocq-теорема и не утверждение о единственности конструкции вообще. Глава высказывает сильный содержательный тезис и тут же очерчивает его границы — ровно как делала Глава 4.1 с формальным следом .

Мост к Главе 4.3

Тип построен — но одно дело сделано не до конца, и Глава 4.2 оставляет его Главе 4.3 намеренно. Тип CauchySeq различает больше объектов, чем есть действительных чисел: одному числу отвечает целый класс эквивалентных процессов (§ 2.6). Отношение, отождествляющее их, построено и снабжено всеми нужными свойствами — но факторизация по нему, переход от процессов к их классам, ещё не совершён.

Этот переход — предмет Главы 4.3. Она объявит действительное число классом эквивалентности процессов и разберёт, что при таком взгляде становится точкой: точка окажется не исходным объектом, а именно классом — режимом рассмотрения, в который оператор переходит, отвлекаясь от различий между процессами с общим пределом. Там же получит разбор и знаменитое равенство нуля целых девяти в периоде единице. В терминах настоящей главы оно предстанет так: процесс десятичных приближений и постоянный процесс cauchy_const 1 — два разных представителя, но один класс эквивалентности, а значит — одно число. Точная форма, которую Главе 4.3 предстоит предъявить, — это определение конкретного представителя для , постоянного представителя для единицы и доказательство их эквивалентности по cauchy_equiv: схематически

Definition nine_process : CauchySeq := (* 0.9, 0.99, 0.999, ... *)
Definition one_process  : CauchySeq := cauchy_const 1.
Theorem nine_equiv_one : nine_process ~~ one_process.

Равенство окажется, стало быть, не парадоксом, а простым следствием того, что два представителя попали в один класс. Настоящая глава построила тип представителей и отношение cauchy_equiv; Глава 4.3 совершит факторизацию и на ней разберёт этот пример. Глава 4.4 затем докажет несчётность процессов, Глава 4.5 переформулирует вопрос о континууме, Глава 4.6 замкнёт часть.

Настоящая глава дала Части IV её основной строительный материал — тип процессных представителей действительного числа. Всё дальнейшее работает с этим типом.

{Процессный представитель действительного числа есть процесс рациональных приближений, прошедший отбор по свойству Коши, взятый как объект единого типа. Rocq-формализация ToS даёт этот тип в трёх родственных оформлениях: голый процесс RealProcess nat -> Q с внешним предикатом is_Cauchy; снабжённый вшитым доказательством сходимости тип CauchySeq mkCauchy { cs_seq; cs_cauchy }; универсальная рамка GenProcess A nat -> A. Эти оформления связаны (лемма cauchy_Q_equiv сводит свойство Коши второй линии к общему случаю третьей), но первая и вторая линии не отождествлены машинно как единый терм; глава расставляет три линии по ролям — кандидат, представитель, рамка — и основным типом для построения числа в Части IV принимает CauchySeq. Существенно: CauchySeq есть тип представителей, а собственно число есть класс эквивалентных представителей; факторизацию совершит Глава 4.3. Над типом определена поточечная аддитивная арифметика — сложение, вычитание, отрицание, рациональное масштабирование, — и доказано, что она сохраняет свойство Коши; полного умножения двух процессов эта глава не строит (оно построено отдельно: process_mul, cauchy_mul). Введено отношение эквивалентности cauchy_equiv с доказанными рефлексивностью, симметрией, транзитивностью и согласованностью с арифметикой — разные процессы могут быть представителями одного числа. Сходимость устанавливается не только по определению, но и структурными признаками — монотонностью с ограниченностью, геометрической скоростью. Базовое построение CauchySeq, отношение cauchy_equiv и аддитивная арифметика в CauchyReal.v несут ноль аксиом и ноль незавершённых доказательств; отдельные структурные критерии — например монотонность с ограниченностью — используют классическую логику , что отмечено особо. Тип не произволен: каждый его слой вынужден задачей построить число как процесс в духе , — это содержательный тезис главы, не Rocq-теорема и не утверждение о единственности конструкции среди всех формализаций действительного числа. Действительное число как класс эквивалентности представителей, и точка как такой класс, строит Глава 4.3.}



Часть: Часть IV. Процессные действительные числа · Том: «Математика»

Понятия: Формализация

Навигация: ← Глава 1. P4: бесконечность как процесс · Глава 3. Точка как класс эквивалентности процессов →

Footnotes

  1. ProcessCore.v Rocq-репозитория ToS (каталог src/process/). Файл объявлен в репозитории как единый источник базовых процессных определений. Имена RealProcess, is_Cauchy, const_process, process_equiv, используемые ниже, — из него. ↩

  2. ProcessGeneral.v Rocq-репозитория ToS (каталог src/), 16 доказанных утверждений, 0 Admitted, 0 аксиом. Файл строит общую теорию процесса над произвольным типом; подробнее о нём § 2.5. ↩

  3. ProcessArithmetic.v Rocq-репозитория ToS (каталог src/process/), 13 доказанных утверждений, 0 Admitted. Файл работает с типом RealProcess из ProcessCore.v. О статусе аксиом — оговорка в § 2.7.2. ↩

  4. CauchyReal.v Rocq-репозитория ToS (каталог src/), 18 доказанных утверждений, 0 Admitted, 0 аксиом. Заголовок файла: <<Cauchy reals: constructive completion of >> — конструктивное пополнение рациональных чисел. ↩

  5. ProcessBounds.v Rocq-репозитория ToS (каталог src/process/), 11 доказанных утверждений, 0 Admitted, 0 аксиом. В оригинале структура называется has_process_mass_gap; русское <<процессный зазор>> передаёт смысл — наличие устойчивого положительного нижнего рубежа. ↩

  6. E/R/R-разметка в шапках ProcessCore.v и ProcessArithmetic.v; здесь разворачивается по образцу Части I. ↩