# Findings — логарифмическая замена переменной (линия `NEXT_PAPER_logarithmic.md`) Пред-регистрация: `PREREG_logarithmic_2026-09-20.md`. Здесь — то, что установлено, в порядке установления. Числа только с Linux (libm). --- ## 0. Базовое состояние воспроизведено (2026-09-20, сервер) - `pytest tests/ -q` → **665 passed, 9 skipped, 364.91 s**. - `verify_article.py` → **«every number stated in the paper matches the sweep data»** (все 72 числа). - 🟡 Несоответствие документации: README обещает «490 tests», фактически 674. README не правлю — он описывает опубликованный артефакт; расхождение зафиксировано здесь. - 🟡 На сервере не было ни одного `*.json`: `sweep_full.json` (1 349 222 байта) залит с ноутбука, иначе проверки, сверяющие статью с данными, молча пропускаются (те самые 9 skipped). ## 1. 🔴 Два гейта допуска НЕСОВМЕСТИМЫ в строгой формулировке — установлено ВЫВОДОМ, без прогона Шаг метода: `step = (1 − S(|f|/sc))·(far − x)`, `sc = |slope|·|far − x|`. Гейт **G1** — `c`, `s` выводятся из скобки; гейт **G2** — на узких скобках преобразование тождественно до округления, то есть требует `|x − c| / s → 0` при сжатии скобки. | выбор единицы `s` (все беспараметрические) | узкая скобка | широкая скобка | |---|---|---| | `s = \|f(c)\|/\|f'(c)\|` — ньютоновская длина (пред-регистрированный кандидат) | у простого корня `\|x−c\| ~ \|f\|/\|f'\| ~ s`, отношение → **O(1)**, тождественности **НЕТ** | марш есть | | `s = w₀` — исходная ширина скобки (датум задачи) | `\|x−c\|/w₀ → 0`, тождественность **есть** | `\|x−c\|/w₀ ≤ 1` ⇒ снова почти тождественность, **марша НЕТ** | | `u = log\|x−c\|` — без единицы вовсе | режима тождественности **нет** и `x = c` не определено | марш есть | | `s = \|x−c\|` — самомасштабируемая | мультипликативный шаг отличается от аддитивного во **втором порядке** `O((Δ/(x−c))²)` ⇒ строгой тождественности **НЕТ** | марш есть | **Вывод:** ни одна доступная беспараметрическая единица не удовлетворяет G1 и строгому G2 одновременно. Это свойство постановки, а не деталь реализации. **Что из этого следует содержательно:** марш требует **отношения** расстояний, а тождественность — **абсолютной** шкалы; одно преобразование не может быть одновременно масштабно-свободным и масштабно-привязанным. Заодно это объясняет, почему `cbrt` «работал случайно»: он берёт фиксированную долю скобки, то есть отношение, и потому марширует — но фиксирует показатель 1/3 как константу, чего метод себе позволить не может. **Развилка, вынесенная Валерию (решение не моё):** - **A** — оставить G2 строгим ⇒ линия закрывается сейчас, по выводу; отрицательный результат постановки, сам вывод сохранён. - **B** — заменить G2 на его же измеримое чтение из пред-регистрации (L2: «на APS-154 суммарная цена не растёт»), реализовать самомасштабируемый режим и мерить; строгая тождественность была лишним обещанием, а не требованием протокола статьи. Ослабление пред-регистрированного гейта после его провала — приём, которым легко обмануть себя, поэтому он делается только по явному решению, и оба варианта записаны здесь заранее. **Решение Валерия: вариант B** — G2 заменён измеримым G2′, единица `s = xtol` зафиксирована выводом (поправка 1 пред-регистрации). --- ## 2. 🔴 Измерено: логарифмический марш НЕ платит. Линия закрывается Режим реализован как `space="log"` в `pure_root` (по умолчанию `"x"`, опубликованный тракт побитово не тронут — пиннится тестом); свип 126 конфигураций × 199 задач по тому же протоколу (`sweep_full.evaluate`, тот же XTOL/MAXFEV/ACC, провал = полный бюджет, проверка границы `2×` на каждом прогоне), результат в своём файле `sweep_log.json`. Сравнение — по-наборно, правилом статьи, и внутри семейства сторожей, несущих гарантию. | проверка | цель | измерено | вердикт | |---|---|---|---| | **G2′** цена на APS-154 не растёт | ≤ 2806 | **6940** | 🔴 FAIL — в 2.5 раза дороже | | **L3** Chandrupatla-45 ≤ 2857 | 2857 | **3115** | 🔴 FAIL | | два набора вместе | < 6026 | **10 414** | 🔴 FAIL | | **L1** широкие скобки дешевле ≥2× | ≥2× | 4516 → 3115 = **1.45×** | 🔴 FAIL | | решено | ≥193/199 | **193/199** | 🟢 PASS | | гарантия `2⌈log₂(w/xtol)⌉+3` | не нарушена | `over2x = 0` во всех конфигурациях | 🟢 PASS | Лучшие конфигурации: APS — `log.ratio_soft.derived.step/safe` 6940 (153/154); CHA — `log.ratio_soft.derived.credit` 3115 (40/45). Опубликованное x-пространство: APS `pure.ratio.derived3.none` **2806**, CHA `pure.sqrt.bracket.project` 4516. **Содержательный итог.** Механизм сработал в предсказанную сторону: на широких скобках марш действительно дешевле (4516 → 3115), то есть мультипликативное движение — правильный диагноз регима. Но цена на каноническом наборе выросла в 2.5 раза, а это ровно тот трейд, на котором закончились все четыре прежние попытки (`NEXT_PAPER_logarithmic.md` §«что уже пробовали»). Теперь он измерен и для логарифмической замены: **пятая попытка провалилась тем же способом**, и это, а не числа, — главный вывод линии. **Что теперь ЗАПРЕЩЕНО повторять (пятый пункт к прежним четырём):** глобальная замена переменной с единицей `xtol` — APS 6940 против 2806, CHA 3115 против цели 2857. Локальное переключение между пространствами по наблюдаемому признаку закрыто отдельно: это пункт 2-4 прежних запретов (детекторы режима), все провалены. **Открытым остаётся только одно направление**, и оно не про похожесть: разрыв на CHA закрывает Chandrupatla-1997 (2423 против наших 4516) при **нуле** настроечных констант, то есть существующий алгоритм уже делает то, чего мы добиваемся, и объяснение его преимущества — отдельная задача (качество пробы, `stage4_why.py`), а не новая шкала шага.