12 KiB
PREREG — логарифмическая замена переменной для широких скобок
Составлено до любой правки метода. Основание — NEXT_PAPER_logarithmic.md (записан 2026-08-24),
где уже названы цель, четыре оплаченных замерами запрета и два условия допуска. Здесь это доводится
до пред-регистрации: что считаем успехом, что провалом, и в каком порядке.
Протокол этого проекта, который здесь обязателен: конфигурация фиксируется выводом, ДО того как смотрят в рейтинг. Числа берутся только с Linux (libm расходится в последнем знаке: та же SciPy даёт TOMS 748 = 2819 на Windows против 2820 на Linux). Метод правится добавлением режима, ничего из опубликованного тракта не переписывается.
1. Задача
Аддитивный шаг |f|/|f'| задан локальным наклоном и ничего не знает о том, сколько декад осталось до
корня. На семействах Чандрупатлы fun3/fun4/fun5 скобка шириной до 10¹² при корне |x| ≤ 3, то есть
надо пройти двенадцать порядков. Замерено: кубический корень бьёт наше правило на всех пяти членах
fun4 в 2.6 раза (32/32/40/47/59 против 89/93/113/125/153) — не потому, что это «другая похожесть», а
потому что его шаг есть фиксированная доля скобки: он марширует геометрически.
2. Предложение
Работать в u = sign(x−c)·log(1 + |x−c|/s). Аддитивный шаг в u — мультипликативный в x, поэтому
та же похожесть, та же выведенная шкала и та же проекция-сторож дают геометрический марш без новой
константы, а показатель марша (который cbrt случайно зафиксировал на 1/3) перестаёт быть свободной
величиной.
Вывод c и s — часть работы, а не подбор. Они обязаны читаться из того, что метод уже считает:
концов скобки, значений f на них и выведенной шкалы σ. Объявленный до прогона кандидат вывода:
c= конец скобки с меньшим |f| (сторона, к которой корень ближе);s= ньютоновская длина в этой точке,|f(c)|/|f'(c)|, оценённая секущей по концам скобки.
Если вывод даст иные c, s — фиксируются те, что следуют из вывода, до прогона рейтинга; выбор
«какой из вариантов лучше на наборе» запрещён (это ровно тот фолт, который проект уже оплатил в п. 1
запретов ниже).
3. Два условия допуска (гейты, проверяются тестами ДО рейтинга)
| # | Условие | Как проверяется |
|---|---|---|
| G1 | преобразование беспараметрическое: c и s вычисляются из скобки и значений f, ни одной выбранной константы |
грепом по реализации и тестом, что при подмене любого «магического» числа тест падает |
| G2 | на узких скобках преобразование тождественно с точностью до округления | тест: при w/s → 0 шаг в u совпадает со шагом в x до 1e-12, и на APS-154 число вызовов не меняется ни на одной задаче |
Не прошёл G1 → линия закрывается (так же закрылся фазовый детектор). Не прошёл G2 → закрывается: широкие скобки куплены ценой канонического набора, а это трейд, на котором провалились все прежние попытки.
3a. ПОПРАВКА 1 (2026-09-20, решение Валерия: вариант B)
Что произошло: строгий G2 («шаг в u совпадает со шагом в x до 1e-12») провален выводом, без
прогона, и не для одного кандидата, а для всех доступных беспараметрических единиц — марш требует
ОТНОШЕНИЯ расстояний, тождественность требует АБСОЛЮТНОЙ шкалы (разбор в FINDINGS_logarithmic.md §1).
Решение (Валерий, вариант B): строгое чтение G2 заменяется его же измеримым чтением, которое уже стоит в этой пред-регистрации как L2:
G2′: на APS-154 суммарная цена не растёт; ни одна задача канонического набора не становится дороже по вызовам
f.
Это ослабление пред-регистрированного критерия после его провала — записано как ослабление, а не как «уточнение», и принято решением, а не молча.
Единица s фиксируется ВЫВОДОМ здесь и не выбирается по рейтингу:
c= конец скобки с меньшим |f| (сторона, к которой корень ближе);s=xtol.
Обоснование, а не удобство: задача преобразования — считать декады, оставшиеся до различимости.
Единственная длина в задаче, говорящая «ниже этого различий нет», — это xtol, и она приходит от
вызывающего наравне с a, b, f, то есть не является нашей константой. При таком выборе u
покрывает ровно log(w/xtol) единиц — ту самую величину, в которой сформулирована гарантия метода
2⌈log₂(w/xtol)⌉+3, так что марш становится линейным в мере собственной гарантии. Вырождения нет:
xtol > 0 всегда, и |x−c| = 0 даёт u = 0, а не деление на ноль.
Отвергнутая альтернатива (для протокола): самомасштабируемая s = |x−c| вырождается на первом шаге,
потому что итерат стартует в конце с меньшим |f|, то есть ровно в c.
Режим требует выведенной шкалы: space="log" допустим только при scale ∈ {derived, derived3} —
в log-пространстве нужен наклон; при прочих шкалах вызов обязан падать, а не считать молча.
4. Цели (записаны в NEXT_PAPER_logarithmic.md заранее, не подгонялись)
| величина | цель | где сейчас |
|---|---|---|
вызовов f на двух наборах (APS-154 + Chandrupatla-45) |
< 6026 | 6026 |
| решённых задач | ≥ 193 из 199 | 193/199 |
гарантия 2⌈log₂(w/xtol)⌉+3 |
не нарушена ни на одном решённом прогоне | не нарушена |
| Chandrupatla-45 отдельно | ≤ 2857 (уровень ITP) | 3220 |
5. Предсказания и фальсификаторы
| # | Предсказание | ФАЛЬСИФИКАТОР → вывод |
|---|---|---|
| L1 | на fun3/fun4/fun5 логарифмический режим сокращает вызовы не менее чем вдвое |
<1.5× → механизм не в мультипликативности шага, гипотеза неверна |
| L2 | на APS-154 суммарная цена не растёт (G2) | растёт → закрытие, трейд не принимается |
| L3 | Chandrupatla-45 ≤ 2857 | >2857 → цель ITP не достигнута; результат публикуем как отрицательный |
| L4 | гарантия не нарушена ни на одном решённом прогоне | нарушена → закрытие немедленно, без торга |
6. Запреты — уже оплачены замерами, не повторять
- Переключаться на
cbrtпо набору: 6905 против 6026 — хуже;cbrtберёт семействаfunи теряет остальную Чандрупатлу (4099 против 3220). - Детектировать режим по отношению значений
rho = 1 − |f_n|/|f_{n−1}|: порядок 2.000 → 0.904, цена на канонических задачах 84 → 161. - Детектировать по локальному порядку
f(p = L/(L−ln m),m = 1/(1−θ)): вывод верен, оценщик не резок — 27.9 % ложных против 35.8 %, это не разделение, цена +273 вызова. - Разделять режимы по ширине скобки: победители полностью перекрываются (наша шкала выигрывает при ширинах от 10⁰ до 10¹²).
7. Порядок исполнения
- Воспроизвести артефакт: 490 тестов +
verify_article.py(все 72 числа статьи) — на Linux. Не сошлось → сначала это, метод не трогать. - Реализовать режим (новый файл/режим в
simroot/, опубликованный тракт не переписывать), написать тесты гейтов G1 и G2 до прогона рейтинга. - Прогнать
sweep_full.pyна сервере, затемreport_sweep.py, затемverify_article.py. - Сверить с целями §4 и предсказаниями §5. Любой исход — в
FINDINGS-запись проекта и в коммит.
Дисциплина: git заведён 2026-09-20 (базовый коммит 4a23aac); аудит после каждой правки и до
запуска; смоук ×2; тяжёлое — на сервер setsid nohup с логом; загрузка общего сервера мерится до и
после; числа показываются немедленно, до аудита и коммита.