Перейти к содержанию

31. Гипотеза Римана через функцию Лиувилля

← 30. Риман: контрапозиция · Оглавление · 32. Rank-parity узел →

Lean: Engine/RiemannLiouville.lean. Числа: \(|L(x)|/\sqrt{x}\) ограничено (классический Liouville-эквивалент RH). Связь с двигателем: знак Лиувилля = (−1)^rank, флип при deleteFactor.

Где мы

В главах 30–31 (SeparatingScale, RankDescent, ProductCore) мы закрыли ProductHall чистой арифметикой и перенесли всю нагрузку на конкретное продукт-ядро RankNode r — структуру со знаком и r факторами, по которой идёт корректный rank descent \(r \to r-1 \to \dots \to 1\). Логика спуска верна; открытыми остались узлы сшивки (extensionality на residual-рангах, конечность ProdSig против pigeonhole).

Прежде чем продолжать штурмовать эти узлы «в лоб», сделаем шаг вбок и посмотрим, на что именно наш rank-аппарат (ранг — «высота» состояния, строго падающая вдоль шагов спуска; см. словарь) отображается в классической аналитической теории чисел. Ответ окажется неожиданно точным: динамика знака при спуске по рангу — это буквально динамика знака функции Лиувилля, а её баланс эквивалентен гипотезе Римана.

Идея этой ветки: взять готовый эквивалент RH

Ветка RiemannBranch (гл. 28) шла напрямую «двигатель \Rightarrow нули \zeta» и упиралась в аналитический мост EngineBridge, по сложности сопоставимый с самой RH. Здесь мы поступаем иначе. Естественно предположить: вместо того чтобы строить свой мост к нулям дзета-функции, взять готовое арифметическое утверждение, эквивалентное RH, и разложить именно его в нашей теории. Тогда его истинность автоматически даёт RH — вся аналитика уже упакована в известную эквивалентность, а нам остаётся чисто арифметическая цель.

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

Определения

Введём функцию Лиувилля и её суммирующую функцию.

Определение 31.1 (функция Лиувилля). Для \(n \ge 1\)

\[ \lambda(n) \;=\; (-1)^{\Omega(n)}, \]

где \(\Omega(n)\) — число простых факторов \(n\) с учётом кратности (например \(\Omega(12)=\Omega(2^2\cdot 3)=3\)). В mathlib это ArithmeticFunction.liouville, а \(\Omega(n)\) — это cardFactors n.

Определение 31.2 (суммирующая функция).

\[ L(x) \;=\; \sum_{n=1}^{x} \lambda(n). \]

В Lean: def L (x : ℕ) : ℤ := ∑ n ∈ Finset.Icc 1 x, liouville n.

Функция \(\lambda\) вполне мультипликативна и принимает значения \(\pm 1\); \(L(x)\) — знакопеременная сумма, накопленный дисбаланс между числами с чётным и нечётным количеством простых множителей до \(x\).

Определение 31.3 (LiouvilleBound).

\[ \texttt{LiouvilleBound} \;:\!\!\iff\; \forall\,\varepsilon>0\ \exists\,C>0\ \forall x:\quad |L(x)| \le C\,x^{1/2+\varepsilon}. \]

В Lean это LiouvilleBound : Prop. Содержательно: сумма \(\pm 1\) длины \(x\) ведёт себя как случайное блуждание — растёт не быстрее \(\sqrt{x}\) (с точностью до \(x^\varepsilon\)), а не линейно.

Определение 31.4 (RiemannHypothesis, из mathlib). По принципу «всё внешнее — из mathlib», RiemannHypothesis здесь — официальная mathlib-формулировка (квантор по всем нулям riemannZeta, исключая тривиальные -2(n+1) и s = 1), а не самодельный def. Та же цель, что в RiemannBranch.

Классический мост: \(LiouvilleBound \iff RH\)

Опорным фактом служит известная теорема аналитической теории чисел (в mathlib её пока нет, поэтому мы вводим её как явный вход-мост — вход, или гейт, это честно названное недоказанное утверждение (см. словарь), — а не постулируем RH):

Определение 31.5 (мост Лиувилля \(H_L\), LiouvilleRHBridge).

\[ \texttt{LiouvilleRHBridge} \;:\!\!\iff\; \bigl(\texttt{LiouvilleBound} \iff \texttt{RiemannHypothesis}\bigr). \]

В Lean — LiouvilleRHBridge : Prop.

Это классическая эквивалентность: оценка \(L(x)=O(x^{1/2+\varepsilon})\) равносильна отсутствию нулей \(\zeta\) правее прямой \(\mathrm{Re}=1/2\). Мы не доказываем её здесь и не выдаём за свою — мы делаем ветку условной на ней. Это честнее, чем постулировать RH: постулируется лишь известный, признанный факт связи двух объектов, а не искомое.

При наличии моста ветка замыкается тривиальной импликацией.

Теорема 31.6 (riemann_of_liouville_bound). Если дан мост LiouvilleRHBridge и доказан LiouvilleBound, то RiemannHypothesis.

\[ \texttt{LiouvilleRHBridge} \;\wedge\; \texttt{LiouvilleBound} \;\Rightarrow\; \texttt{RiemannHypothesis}.\tag{31.1} \]

Доказательство в Lean — одна строка bridge.mp hbound: вся аналитика изолирована в мосту, арифметика (LiouvilleBound) — единственная содержательная цель.

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

Почему это наш аппарат: \(\lambda = (-1)^{\text{rank}}\)

Ключевое наблюдение — совпадение объектов. Число простых факторов \(\Omega(n)=\) cardFactors n — это ровно наш ранг RankNode: у нас RankNode r имеет factors : Fin r → ℕ, то есть ранг \(r\) есть число факторов узла. Отсюда мгновенно:

Теорема 31.7 (liouville_eq_neg_one_pow_rank). Для \(n\ne 0\)

\[ \lambda(n) \;=\; (-1)^{\mathrm{cardFactors} n} \;=\; (-1)^{\text{rank}}.\tag{31.2} \]

В Lean это просто liouville_apply hn: знак Лиувилля есть чётность ранга.

То есть \(L(x)\) — это накопленная сумма знаков \((-1)^{\text{rank}}\) по всем узлам до \(x\). LiouvilleBound говорит, что эта сумма мала (порядка \(\sqrt{x}\)): знаки нашего ранга сбалансированы.

Флип знака при deleteFactor: descent = динамика знака Лиувилля

Второе наблюдение связывает наш шаг спуска с изменением знака. У нас deleteFactor понижает ранг \(r\to r-1\), удаляя одну роль. В терминах чисел это переход от \(n=p\cdot m\) к \(m\) (снятие одного простого фактора). Что происходит со знаком?

Теорема 31.8 (liouville_flip_of_mul_prime). Для простого \(p\) и \(m\ne 0\)

\[ \lambda(p\cdot m) \;=\; -\,\lambda(m).\tag{31.3} \]

Доказательство (Lean): \(\mathrm{cardFactors}(p\cdot m)=\mathrm{cardFactors} m + 1\) (через cardFactors_mul и cardFactors_apply_prime), откуда \((-1)^{\Omega(m)+1}=-(-1)^{\Omega(m)}\).

Смысл. Наш deleteFactor (RankNode (r+1) → RankNode r, снятие одного фактора при том же знаковом поле) на уровне чисел флипает знак Лиувилля. Значит product-rank descent — это в точности динамика знака \(\lambda\): каждый шаг спуска по рангу меняет \(\lambda\) на противоположный. Спуск \(r\to r-1\to\dots\to 1\), который в главах 30–31 гонит коллизию к rank-1 базе, на арифметическом языке есть последовательность флипов знака Лиувилля вдоль факторизации.

Примечание. Здесь два разных «спуска» встречаются на одном объекте. Наш динамический спуск — это движение вниз по одной родословной (\(p\cdot m \to m\)), и он строго знакопеременен. Сумма же \(L(x)\) пробегает все \(n\le x\) по горизонтали. Связь между «вертикальным» флипом и «горизонтальным» балансом — это и есть содержательная работа, которую rank-аппарат должен выполнить: показать, что попарные флипы вдоль родословных заставляют горизонтальную сумму сокращаться до \(O(\sqrt{x})\).

Числа: \(|L(x)|/\sqrt{x}\) ограничено

Что именно требуется доказать, наглядно видно в нормировке. LiouvilleBound эквивалентен тому, что величина $\(\frac{|L(x)|}{\sqrt{x}}\)$ остаётся ограниченной (по модулю поправки \(x^{\varepsilon}\)). Численно \(L(x)\) действительно ведёт себя как \(\sqrt{x}\)-размах: знаки \((-1)^{\text{rank}}\) почти поровну делятся между чётным и нечётным рангом, и накопленный дисбаланс не выходит за корневой масштаб. Это ровно тот separating scale \(\sqrt{x}\), который в главе 30 отделял legal-слой; здесь он проступает как масштаб роста \(L\).

Примечание (историческая осторожность). Более сильное \(L(x)\le 0\) при \(x\ge 2\) — гипотеза Пойа — опровергнута (первый контрпример около \(x\approx 906{,}150{,}257\)). Поэтому наша цель — именно оценка \(O(x^{1/2+\varepsilon})\), а не знакоопределённость \(L\): rank-баланс должен быть статистическим (сумма мала), а не поточечным (знак фиксирован). Это существенно: наш descent строго флипает знак вдоль родословной, но горизонтальный баланс — вероятностный, и путать их нельзя.

Честно: \(LiouvilleBound \equiv RH\) — это parity-стена

Теперь скажем прямо, где стена, и не будем выдавать редукцию за доказательство. Мы не доказали LiouvilleBound. Мы показали лишь, что этот эквивалент RH выразим на нашем языке и что наша операция deleteFactor управляет ровно тем знаком, сумму которого нужно оценить.

Существо трудности — чётность. Знак Лиувилля \(\lambda(n)=(-1)^{\Omega(n)}\) есть чётность \(\Omega(n)\), то есть чётность ранга. Оценка \(L(x)=O(x^{1/2+\varepsilon})\) утверждает, что эта чётность распределена почти равномерно (числа с чётным и нечётным числом факторов встречаются почти одинаково часто, с корневой флуктуацией).

Это классическая parity-стена: контроль чётности \(\Omega\) — известное препятствие, недоступное решётным (sieve) методам и, по существу, равносильное самой RH.

Вывод. Наш rank-аппарат даёт вертикальную информацию (один флип на один снятый фактор), но LiouvilleBound требует горизонтального статистического баланса чётностей по всем \(n\le x\). Переход от первого ко второму и есть неснятый узел.

Гипотеза и план закрытия узла LiouvilleBound

Сформулируем открытый узел явно.

Гипотеза 31.9 (rank-баланс). Динамика знака descent (Теорема 31.8, liouville_flip_of_mul_prime) в сочетании с нашим no_infinite_descent (невозможность вечного двигателя, гл. 28) влечёт статистический баланс чётностей ранга, то есть LiouvilleBound.

План закрытия, по шагам и с честной оценкой каждого:

  1. Спарить родословные во флип-пары. Каждый узел ранга \(r\) через deleteFactor порождает родителя ранга \(r-1\) с противоположным \(\lambda\). Идея: организовать вклад в \(L(x)\) как сумму по парам \((m,\ p\cdot m)\), где два члена сокращаются. Трудность: пары выходят за отрезок \([1,x]\) несимметрично (краевые эффекты порядка \(\sqrt{x}\)) — именно здесь и должен возникнуть корневой масштаб, а не линейный.
  2. Связать флип-баланс с невозможностью двигателя. Если бы чётности ранга были систематически перекошены (например \(L(x)\gg \sqrt{x}\)), это дало бы «бесплатное» направленное перекачивание массы вдоль descent — тот самый вечный двигатель, запрещённый no_infinite_descent (EPMI — ядро невозможности вечного двигателя, см. словарь). Это ровно логика ветки RiemannBranch, но выраженная через знак Лиувилля, а не через высоту \(H\). Задача — сделать эту импликацию точной: \(перекос чётности \Rightarrow Engine\).
  3. Свернуть в оценку. Из ограниченности перекоса — вывести \(O(x^{1/2+\varepsilon})\).

Примечание. Шаг 2 — сердцевина и одновременно граница честности. Он повторяет структуру EngineBridge (гл. 28) на новом объекте: «асимметрия \Rightarrow двигатель». По всей видимости, его сложность сопоставима с самой RH — это и означает, что мы упёрлись в parity-стену, а не обошли её. Записываем это как гипотезу, не как теорему: Step00 по-прежнему sorry. Прогресс реален — найдено точное арифметическое лицо узла (знак Лиувилля = чётность ранга) и точная операция, им управляющая (deleteFactor = флип), — но сам баланс не предъявлен.

Вывод

Ветка Лиувилля даёт самую короткую честную формулировку RH в нашей теории: берём готовую эквивалентность \(LiouvilleBound \iff RH\) (мост LiouvilleRHBridge), и RH сводится к одной арифметической цели — оценке \(|L(x)|=O(x^{1/2+\varepsilon})\) (Теорема 31.6, riemann_of_liouville_bound).

Эта цель ложится на наш аппарат идеально: \(\lambda=(-1)^{\text{rank}}\) (Теорема 31.7, liouville_eq_neg_one_pow_rank), а наш deleteFactor флипает знак (Теорема 31.8, liouville_flip_of_mul_prime), так что product-rank descent — это буквально динамика знака Лиувилля.

Но LiouvilleBound не доказан: он есть контроль чётности \(\Omega\), классическая parity-стена, и переход от вертикального флипа к горизонтальному балансу остаётся открытой гипотезой (план — через no_infinite_descent).

Мост к следующей главе

Итак, у нас теперь два независимых входа к RH — аналитический EngineBridge (гл. 28, через нули \(\zeta\)) и арифметический LiouvilleBound (эта глава, через чётность ранга), — и оба упираются в одну и ту же стену «асимметрия \Rightarrow двигатель», лишь по-разному одетую.

В следующей главе мы возвращаемся к конкретному продукт-ядру и разбираем ProductCore детально: как RankNode, coreSigOf и deleteFactor собираются в честный спуск core_step_proved и где именно (сшивка с deleteFactor на residual-рангах) остаётся вход, — то есть смотрим на ту же parity/extensionality-стену уже не через \(\lambda\), а изнутри самой структуры ядра.


← 30. Риман: контрапозиция · Оглавление · 32. Rank-parity узел →