Files
sim-numerics/PREREG_controls_2026-09-22.md
T
vvsandClaude Opus 5 60294e84d9 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>
2026-09-22 07:37:41 +01:00

128 lines
14 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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% свободных ядер).