Controls K1/K2: code and two PREREG amendments, committed before the full run.

simroot/pure.py: flatlagmempt / flatbandmempt / flatflagmempt - A' with only the flat detector
swapped (Lagouanelle without declining outside (0,1), with memory; Chandrupatla's band; none).
A' itself is untouched: bit-identical to the compiled simbracket on all 868 problems (x2).
sweep_controls.py: K2 through sweep_fourth's harness, K1 with the oracle order m*.
Amendment 1: m* <= 0 is undefined (aps.15.22-30, C0.04 crashed the first full attempt).
Amendment 2 (after the smokes; only corpus-level K1 sums and corpus-4 K2 sums were seen): each
side's slope rounded to 0.01, m* defined only when both sides show a zero (jumps C0.03,
aps.15.21), group 'multiple/fractional' = m* >= 2 or m* <= 2/3, the branches of section 8.1
(simple roots measured at 0.99999 fell under the registered 'm* < 1').
tests/test_article_numbers.py: the verifier test runs on Linux only (the paper's numbers are a
Linux run; libm's last digit differs elsewhere, e.g. 4461 vs 4462).

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
vvs
2026-09-22 07:37:41 +01:00
co-authored by Claude Opus 5
parent 77312bedcf
commit 60294e84d9
4 changed files with 319 additions and 8 deletions
+29
View File
@@ -88,6 +88,35 @@ m_L — оценка Лагуанеля по трём последним точ
любая новая идея — отдельная предрегистрация. A′ заморожен: его код и результаты не трогаются, в
прогоне он воспроизводится бит в бит (проверяется: суммы A′ = таблица 10).
## Поправка 1 (после смоука, до полного прогона; результатов К1 и К2 на полных корпусах нет)
Полный прогон остановился делением на ноль: на десяти задачах оракул дал m\* ≤ 0 — `aps.15.22`–
`aps.15.30` (кусочно-линейная функция APS 15, линейный участок у корня уже h, дальше |f| постоянна:
m\* = 0) и `C0.04` нового корпуса 1 (|f| растёт к корню: m\* = −1). Степенной модели нуля в масштабе h
там нет, так что это случай «не определено»: **m\* ≤ 0 → m\* = 1**, преобразование не применяется.
Определение h и всё остальное не меняются.
## Поправка 2 (после второго смоука, до полного прогона)
Видено к этому моменту: смоук К2 только на корпусе 4 (суммы и w/t/l всех трёх вариантов) и смоук К1 —
**суммы по корпусам целиком**, без разбиения на группы. Проверка правдоподобия оракула нашла два
изъяна определения, оба — не в пользу какой-либо стороны:
1. **Скачки.** `C0.03` (f прыгает от −0.9 к 1.1 в корне) даёт m\* = 1.5·10⁻⁶; `aps.15.21` — наклон 0 с
одной стороны и 0.22 с другой, среднее 0.11. Нуля там нет, «порядок» — шум у нуля.
2. **Граница группы в точке шума.** Простой корень измеряется как 0.99999…, и правило «m\* < 1»
относило его к дробным; порядок 2 (например, log(1+q²) в D5) измеряется как 1.99999… или 2.00001.
Исправленное определение:
- наклон с каждой стороны **округляется до 0.01** (разрешение объявлено: у двухточечного наклона при
h = 10⁻⁵ ошибка порядка 10⁻⁵, так что 0.01 его не задевает); m\* **определён, только если обе
стороны положительны** (нуль виден с обеих сторон), и равен среднему двух округлённых наклонов;
иначе m\* = 1. Поправка 1 (m\* ≤ 0 → 1) входит сюда как частный случай;
- группа «кратные/дробные» — **m\* ≥ 2 или m\* ≤ ⅔**: ровно ветви §8.1, где касательный шаг проигрывает
делению пополам (те же константы, что в A′ и в К2; нового числа нет). Дробные порядки из (⅔, 1)
попадают в «остальные» — по теории §8.1 там касательный шаг сам бьёт деление.
## Реализация (план, до кода)
- `simroot/pure.py`: три новых варианта плоского режима — `flatlagmempt`, `flatbandmempt`,