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>
128 lines
14 KiB
Markdown
128 lines
14 KiB
Markdown
# PREREG — контроли: классическое преобразование и простые детекторы плоскости
|
||
|
||
Составлено 2026-09-22 до кода и до прогона, ветка `release`. Валерий: «помечай и начинай
|
||
предрегистрацию контролей».
|
||
|
||
## Вопрос
|
||
|
||
Выигрыш A′ может нести разбиение (7) — ложное положение на sign(f)|f|^{1/m}, классика
|
||
Шрёдера и Трауба — **плюс любой разумный детектор плоскости**, а не распознавание по аналогии
|
||
(повторяемость безразмерной конфигурации последних трёх точек). Пока это не сравнено, утверждение §8.6
|
||
«решающий слой по подобию прогона своему прошлому несёт выигрыш» не доказано.
|
||
|
||
Два контроля:
|
||
|
||
- **К1 (замечание 5): классическое преобразование с известной кратностью.** Библиотечные Chandrupatla
|
||
и Brent, применённые к g(x) = sign(f(x))·|f(x)|^{1/m*}, где m* — истинный порядок корня. Это
|
||
**верхняя граница** подхода «преобразовать и интерполировать»: кратность дана даром, методу её
|
||
оценивать не нужно. Недостижимо на практике, но отделяет вклад преобразования от вклада оценки порядка.
|
||
- **К2 (замечание 6): A′ с другим детектором.** Всё в A′ остаётся как есть — флаг невыполненного
|
||
обещания, память на прогон, разбиение (7), суждение выхода, шаг допуска, половина, противоречие
|
||
знаков, паттерн шага, ветвь перелёта. Меняется **только то, откуда берутся решение «режим плоский»
|
||
и порядок m для разбиения**.
|
||
|
||
## К1 — определения
|
||
|
||
**m\*.** Наклон ln|f| по ln|x−r| в самом корне r, известном по построению:
|
||
m\* = (ln|f(r+2h)| − ln|f(r+h)|)/ln 2, среднее по двум сторонам (±h), h = 10⁻⁵·max(1, |r|).
|
||
Если значение не определено или не конечно, m\* = 1 (преобразование не применяется). h — точность
|
||
измерения оракула, не параметр метода; объявлено здесь и не меняется по результату.
|
||
|
||
**Где.** Только корпуса с известным корнем: APS (154), Chandrupatla (45), новый корпус 1 (206),
|
||
корпус 4 (240). Для Roots.jl и прикладного корпуса корень известен не везде, там К1 не считается.
|
||
|
||
**Счёт.** Вызов g — ровно один вызов f, считается та же обёртка, бюджет 200, критерий успеха —
|
||
единый: смена знака **f** в пределах 10⁻⁶ или f = 0. Допуски библиотек те же, что везде.
|
||
|
||
## К2 — определения детекторов
|
||
|
||
Во всех трёх вариантах: состояние режима, память, вход по флагу, выход по суждению «ближе к прямой,
|
||
чем к нулю» и разбиение (7) — код A′ без изменений. Компонента «предел трансляции» (exp) принадлежит
|
||
чтению по аналогии и в контролях отсутствует; её роль (m = ∞) берёт на себя формула Лагуанеля при
|
||
θ ≥ 1.
|
||
|
||
m_L — оценка Лагуанеля по трём последним точкам (производные параболы), **без отказа за пределами
|
||
(0, 1)**: θ = f·f''/f'², m_L = 1/(1 − θ) при θ < 1 (так m_L ∈ (0, 1) при θ < 0 — ветвь дробного
|
||
порядка), m_L = ∞ при θ ≥ 1; не определена, если f' = 0 или не конечна.
|
||
|
||
| вариант | «крутой» (m ≥ 2, вход по флагу недовыполнения) | «пологий» (вход по флагу перелёта) | m для разбиения |
|
||
|---|---|---|---|
|
||
| **К2-Л: Лагуанель с гистерезисом** | m_L ≥ 2, запоминается на прогон до выхода | 0 < m_L ≤ ⅔, запоминается | последнее m_L, давшее «крутой»/«пологий» |
|
||
| **К2-П: полоса Chandrupatla** | полоса отвергает текущую тройку (1−√(1−ξ) < φ < √ξ нарушено), запоминается | полоса отвергает, запоминается | m_L текущего состояния (∞, если не определена) |
|
||
| **К2-Ф: без детектора** | всегда (режим с первого флага) | всегда | m_L текущего состояния (∞, если не определена) |
|
||
|
||
К2-Ф — нижняя граница: сколько даёт разбиение (7) с выходом вообще без распознавания.
|
||
«Гистерезис» у К2-Л — ровно тот же механизм памяти, что у A′: признак, раз увиденный, держится до
|
||
суждения выхода. Ни одного нового числа: ½, ¼, 2 и ⅔ — те же, что в A′.
|
||
|
||
**Известно заранее (не результат).** В §10, п. 5 та же оценка Лагуанеля по трём точкам, поставленная
|
||
в масштаб шага, ошибалась: m > 1 на 27.9% шагов канонического набора. Здесь она решает только при
|
||
невыполненном обещании и снимается суждением выхода — это другое употребление, и исход не предрешён.
|
||
|
||
## Критерии и правило вывода
|
||
|
||
Сравнение на шести корпусах §9, единый критерий; **решающий — корпус 4** (как в M1 для ModAB): это
|
||
корпус, на котором A′ проверен один раз после заморозки. Контроли не настраиваются ни на каком
|
||
корпусе: их определение выше окончательное.
|
||
|
||
| # | сообщается / ПРОЙДЕНО, если |
|
||
|---|---|
|
||
| **C1** | для каждого варианта К2 на корпусе 4: сумма A′ меньше **и** по задачам побед больше, чем поражений, знаковый тест p < 0.05 |
|
||
| **C2** | шесть корпусов: суммы, w/t/l, p для A′ против К2-Л, К2-П, К2-Ф — сообщается |
|
||
| **C3** | К1: на задачах с m\* ≥ 2 или m\* < 1 и отдельно на остальных — суммы A′, Chandrupatla(g), Brent(g), Chandrupatla(f); по задачам A′ против Chandrupatla(g) — сообщается |
|
||
| **C4** | гарантия: нарушения границы 2⌈log₂(w/xtol)⌉ + 4 у всех вариантов К2 — сообщается (ожидается 0: проекция не тронута) |
|
||
| **C5** | по семействам (единица независимости): A′ против лучшего из К2 на корпусе 4 по шести классам — сообщается |
|
||
|
||
**Что пишется в статье — при любом исходе:**
|
||
|
||
- C1 пройден для всех трёх вариантов → «детектор по аналогии заработан против Лагуанеля с
|
||
гистерезисом, полосы Chandrupatla и режима без детектора» с числами; иначе.
|
||
- C1 не пройден хотя бы для одного → утверждение §8.6 о том, что выигрыш несёт распознавание по
|
||
аналогии, **снимается** в пользу «разбиение (7) с детектором плоскости; наш детектор — один из
|
||
работающих, с такими-то числами». Заголовок и аннотация следуют за этим.
|
||
- К1: если Chandrupatla(g) с известной кратностью дешевле A′ на кратных корнях, пишется прямо: при
|
||
известной кратности классическое преобразование лучше, вклад A′ — оценка порядка без знания его, и
|
||
разрыв с К1 — цена этой оценки. Если дороже — так же прямо, с числами.
|
||
|
||
**Стоп-правило.** Один прогон всех вариантов на всех корпусах. После него определения не меняются;
|
||
любая новая идея — отдельная предрегистрация. 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`,
|
||
`flatflagmempt` — в том же месте, где `flatanalogmempt`; составной prestep A′ и все прежние режимы
|
||
не меняются (тест бит-в-бит против `simbracket` и против сохранённых сумм A′).
|
||
- `sweep_controls.py`: К2 через обвязку `sweep_fourth.evaluate`, К1 отдельной функцией с оракулом m\*.
|
||
- Проверка до прогона: смоук ×2 локально, смоук на сервере, затем полный прогон (`setsid nohup`, лог
|
||
с прогрессом, 40% свободных ядер).
|