08. Ограниченный аддитивный цикл¶
← 07. Короткий train · Оглавление · 09. Factor-repeat rigidity →
Lean:
EuclidsPath/Engine/BK.lean(exists_additive_cycle).
Где мы¶
В главе 07 мы зажали длину валидного train'а: даже вдоль бесконечной аффинной линии число реально достижимых центров коротко (cubic_squeeze). Топливо +1 неисчерпаемо, но валидный ход двигателя стеснён.
Теперь мы поворачиваем зажим в аддитивную плоскость: вместо длины одного хода спросим, сколько различных K-кратных комбинаций делителей может уместиться в ограниченном окне, прежде чем две из них неизбежно совпадут по сумме. Ответ — чистый pigeonhole, то есть пижонхол, принцип ящиков (см. словарь) — даёт нам первый структурный запрет на бесконтрольное накопление повторов.
Постановка: аддитивный цикл на K-мультимножествах¶
Зафиксируем конечное множество делителей (или центров) 𝒜 ⊆ [1, T], то есть каждый a ∈ 𝒜 удовлетворяет 1 ≤ a ≤ T. Параметр K ≥ 1 — порядок комбинации, «длина» аддитивного слова, которое двигатель складывает из элементов 𝒜.
Определение 8.1 (K-мультимножество). K-мультимножеством над
𝒜называется мультимножество мощностиK, все элементы которого лежат в𝒜. Множество всех таких объектов в Lean/Mathlib записывается𝒜.sym K(симметрическая K-степень). Порядок в мультимножестве не важен, повторы допускаются — это в точности «неупорядоченный выборKэлементов из𝒜с возвращением».
Каждому K-мультимножеству s ∈ 𝒜.sym K сопоставим его аддитивный вес — сумму элементов:
Определение 8.2 (нетривиальный аддитивный цикл). Нетривиальным аддитивным (евклидовым) циклом мы называем пару различных K-мультимножеств
s ≠ tиз𝒜.sym Kс равным весом:\[ s \neq t, \qquad \Sigma(s) \;=\; \Sigma(t). \tag{8.2} \]«Нетривиальность» здесь — именно
s ≠ t: тривиальное равенствоΣ(s) = Σ(s)ничего не стоит; содержательно то, что два разных способа сложитьKделителей дают один и тот же итог.
Название «цикл» неслучайно. Равенство Σ(s) = Σ(t) при s ≠ t — это соотношение \(\sum_{x\in s} x - \sum_{y\in t} y = 0\), то есть нетривиальная целочисленная линейная зависимость (с коэффициентами ±1) между элементами 𝒜. Такая замкнутая аддитивная петля и есть «цикл» в аддитивной структуре, порождённой носителем.
Теорема: масса вынуждает цикл¶
Основной результат главы — контрапозиция леммы B_K (§VI, Лемма 6.1.1). Прямая лемма утверждает: если в 𝒜 ⊆ [1,T] нет нетривиального равенства K-сумм, то множество вынужденно мало, \(|𝒜| \ll_K T^{1/K}\). Нам, однако, нужна именно контрапозиция — то, что питает Fan-Cycle далее по цепи: как только комбинаторной массы достаточно, цикл обязан существовать.
Теорема 8.3 (
exists_additive_cycle). Пусть \(\mathcal{A} \subseteq \mathbb{N}\) — конечное множество, \(K, T \in \mathbb{N}\), \(1 \le K\), и пусть\[ 1 \le a \le T \quad \text{для всех } a \in \mathcal{A}, \qquad K \cdot T \;<\; |\,\mathcal{A}.\mathrm{sym}\ K\,|. \tag{8.3} \]Тогда существуют \(s, t \in \mathcal{A}.\mathrm{sym}\ K\) такие, что \(s \neq t\) и \(\Sigma(s) = \Sigma(t)\) (8.2) — нетривиальный аддитивный евклидов цикл.
Условие K · T < |𝒜.sym K| — это порог массы: число различных K-мультимножеств превосходит число K·T возможных значений суммы. Всё доказательство — pigeonhole, без анализа, без распределения простых, без сита. Это делает результат атомарным законом двигателя, а не эвристикой.
Почему это верно: разбор доказательства¶
Доказательство в BK.lean устроено в три шага, и каждый честно отражает свою роль.
Шаг 1 — образ веса зажат в окне [K, K·T]. Пусть s ∈ 𝒜.sym K. По определению s — мультимножество мощности ровно K (в Lean это s.2 : (s : Multiset ℕ).card = K), все элементы которого лежат в 𝒜, а значит зажаты между 1 и T. Отсюда две границы:
Нижняя граница — это Multiset.card_nsmul_le_sum (сумма K слагаемых, каждое ≥ 1, не меньше K); верхняя — Multiset.sum_le_card_nsmul (каждое ≤ T, значит сумма ≤ K·T). В коде это оформлено как
то есть отображение веса Σ : 𝒜.sym K → ℕ действительно попадает в целочисленный отрезок Finset.Icc K (K*T).
Шаг 2 — окно значений тесное. Отрезок Finset.Icc K (K*T) содержит ровно K·T − K + 1 целых точек (Nat.card_Icc). При 1 ≤ K это не превосходит K·T. Гипотеза K·T < |𝒜.sym K| тогда даёт
В Lean это единственная арифметическая строка, закрываемая omega:
Значений суммы строго меньше, чем K-мультимножеств.
Шаг 3 — pigeonhole. Отображение Σ переводит бо́льшее множество (все K-мультимножества) в меньшее (окно сумм). По принципу Дирихле оно не может быть инъективным: два разных прообраза склеиваются в один образ. Формально это Finset.exists_ne_map_eq_of_card_lt_of_maps_to, получающее ровно нужную пару:
hne : s ≠ t и heq : Σ(s) = Σ(t) — это и есть нетривиальный аддитивный цикл. Доказательство завершается.
Примечание. Три шага соответствуют трём ингредиентам любого pigeonhole-аргумента: (1) отправить объекты в ящики (
hmaps— вес попадает в окно), (2) посчитать, что ящиков мало (hcard_lt), (3) вывести коллизию (Finset.exists_ne_map_eq_of_card_lt_of_maps_to). Никакой из шагов не использует свойства простых чисел — работает любое𝒜 ⊆ [1,T]. Именно поэтому это закон механизма, а не свойство конкретной арифметики.
Что это значит: ограничение порядка повторов¶
Содержательное следствие — граница на то, как долго носитель может расти «бесциклично». Переформулируем прямую лемму B_K как счётную оценку.
Предложение 8.4 (порог бесцикличности). Если \(\mathcal{A} \subseteq [1,T]\) не содержит нетривиального аддитивного цикла порядка \(K\) (в смысле Определения 8.2), то отображение веса \(\Sigma\) (8.1) инъективно на \(\mathcal{A}.\mathrm{sym}\ K\), откуда
\[ |\mathcal{A}.\mathrm{sym}\ K| \;\le\; |\mathrm{Icc}(K,\,K{\cdot}T)| \;=\; K{\cdot}T - K + 1 \;\le\; K{\cdot}T. \tag{8.6} \]Поскольку \(|\mathcal{A}.\mathrm{sym}\ K|\) растёт как \(\binom{|\mathcal{A}| + K - 1}{K} \asymp |\mathcal{A}|^K / K!\), из (8.6) следует \(|\mathcal{A}|^K \lesssim K{\cdot}T\), откуда \(|\mathcal{A}| \ll_K T^{1/K}\). Это и есть \(|\mathcal{A}| \ll_K T^{1/K}\) из §VI. (Контрапозитивно: если \(|\mathcal{A}|^K \gg K \cdot T\), то по Теореме 8.3 цикл существует.)
Вывод. Избежать аддитивного цикла можно, лишь удерживая носитель радикально редким — не более чем порядка T^{1/K} элементов в окне [1,T]. Двигатель Евклида, напротив, вынужден накапливать делители на центрах вдоль хода; как только их набирается достаточно много относительно доступного окна значений, повтор сумм неизбежен. Через контрапозицию это переводится в структурный запрет: порядок повторов ограничен — нельзя бесконечно клонировать делительную конфигурацию, сохраняя все аддитивные веса различными.
В связке с невозможностью вечного двигателя — бесконечной строго убывающей цепи, главного запрещённого объекта программы (глава 01, no_infinite_descent) — это питает запрет вечного clean-recycling: если бы повторное использование делителей могло продолжаться без образования аддитивной петли, носитель рос бы, оставаясь бесцикличным, что противоречит порогу T^{1/K}. Цикл, гарантированный Теоремой 8.3 (exists_additive_cycle), — это точка, где «чистая» переработка топлива замыкается сама на себя и потому не может длиться вечно.
Примечание (граница результата). Теорема даёт существование цикла, но не его геометрию: она не говорит, какие именно делители в него входят, и не привязывает цикл к разностям центров. Эту привязку — что повтор делителя
ℓфиксируетℓ ∣ (n₂ − n₁)— устанавливает уже следующая глава. Здесь мы честно фиксируем: Теорема 8.3 (exists_additive_cycle) — комбинаторный порог, а не структурная жёсткость; смешивать одно с другим нельзя.
Мост к следующему¶
Мы получили, что масса делителей вынуждает аддитивный цикл, и через контрапозицию — что порядок повторов ограничен окном T^{1/K}. Но чистое существование совпадающих сумм ещё не говорит, что повтор делителя влечёт периодичность попаданий вдоль хода.
В главе 09 (factor_repeat_rigidity, cross_side_fuel) мы придадим повтору жёсткость: если простой ℓ появляется делителем на двух центрах, он делит их разность, ℓ ∣ (n₂ − n₁). Ограниченный цикл этой главы и ригидность следующей вместе с коротким train'ом (глава 07) замкнут покрытие в конечное и короткое — превращая аддитивный запрет в геометрический.
← 07. Короткий train · Оглавление · 09. Factor-repeat rigidity →