Инструмент, чтобы разбирать численные математические утверждения быстро и одинаково: утверждение описывается один раз как данные, дальше его прогоняет фиксированный каскад сит. Каждое сито — независимая причина НЕ поверить.
python -m goldsieve selftest проверить сам инструмент
python -m goldsieve run cases/zeta_gue.py прогнать задачу
python -m goldsieve new cases/my_task.py заготовка новой задачи
Код возврата ненулевой, если есть ОПРОВЕРГНУТО или ПУСТО — сито можно ставить в CI.
| сито | что ловит |
|---|---|
| С1 регенерируемость | эталон процитирован, а не вычислим — сравнивать не с чем |
| С2 заявленное=эталон | заявленное число против пересчитанного |
| С3 данные=эталон | измерение из данных против пересчитанного |
| С4 подставка ловится | проверка, которая прошла бы и на неверном ответе |
| С5 контроль | негативный: шум не должен давать эталон; позитивный: генерическая модель обязана его дать |
| С6 сходимость | результат зависит от сетки/разрешения |
| С7 выбор оценки | вывод меняет знак при законной смене оценки |
| С8 бюджет точности | заявленный эффект меньше погрешности входа |
| С9 конечный размер | расхождение объясняется конечностью выборки |
- ПОДТВЕРЖДЕНО — все применимые сита прошли.
- ОПРОВЕРГНУТО — расхождение с вычисляемым эталоном при живых контролях.
- ВОПРОС — не хватает рецепта, или вывод зависит от оценки, сетки, размера выборки. Это не находка.
- ПУСТО — проверка вырождена: она прошла бы и на неверном ответе.
Порядок правил в своде не переставляется: вырожденная проверка бьёт всё, отсутствие вычисляемого эталона бьёт любое расхождение.
- Эталон обязан быть вычислимым. Голое десятичное число в колонке «expected» — это не эталон, это цитата.
- У каждой проверки обязана быть подставка — заведомо неверный ответ той же формы. Если подставка проходит, проверка ничего не значит.
- Подставка ставится там, где неверный ответ реально отличается, а не в точке пересечения кривых. Сито С4 показывает величину различения в процентах.
- Прежде чем назвать расхождение находкой, конвейер обязан отвергнуть шум (С5) и не объясниться конечным размером выборки (С9).
cases/zeta_gue.py— расстояния между нулями дзета-функции против точного закона зазоров GUE (детерминант Фредгольма с синус-ядром, не surmise).cases/khinchin.py— константа Хинчина у частных цепной дроби; эталон считается по произведению Хинчина.
python -m goldsieve new cases/my_task.py, затем заполнить reference
(вычисляемый эталон), wrong (заведомо неверный ответ), null_model (шум или
генерическая модель, с null_kind). Всё остальное необязательно и просто
пропускается.
Каскад расширен с девяти сит до двенадцати плюс два мета-сита. Самопроверка:
35 проверок (GOLDSIEVE_FULL=1 python3 -m goldsieve.selftest).
| Сито | Что делает |
|---|---|
| С10 неопределённость | масштаб расхождения — полуширина бутстрэп-интервала с поправкой Шидака; терпимость выводится, а не назначается |
| С11 слишком хорошо | согласие точнее выборочного шума по нескольким статистикам — признак числа, списанного из теории |
| С12 независимый метод | эталон подтверждается вторым, принципиально иным путём; порог берётся из измеренного разброса второго метода |
| С13 объявленные пропуски | каждый skip обязан иметь причину под точным номером сита |
| С14 сквозная подставка | подделка прогоняется через весь каскад; ПОДТВЕРЖДЕНО на подделке = ПУСТО |
Ещё:
С4принимает СПИСОК подставок и различает «плоха подставка» и «вырождена проверка»;goldsieve power <case>— минимально различимое отклонение;goldsieve cover <корень> --registry claims.yaml— покрытие корпуса (помечено как ТРИАЖ, не аудит);- провенанс в каждом отчёте: sha256 входов, коммит корпуса, версии, α, терпимость и отпечаток рецепта (sha256 исходного текста эталона/подставки/наблюдения — машинный аналог пре-регистрации);
refs/khinchin_reference.py— эталон с аналитическим хвостом (устойчивость 2.7e-10 вместо 5.6e-05);refs/gue_montecarlo.py— независимый эталон GUE по спектрам случайных матриц.
Правило свода дополнено: расхождение по С2/С3 считается ОПРОВЕРГНУТО только если С10 признал его значимым; иначе — ВОПРОС. Провал С11 или С12 тоже даёт ВОПРОС, а не подтверждение.
| Сито | Что ловит | Как срабатывает |
|---|---|---|
| С15 внешняя цель | предсказательное утверждение, сверенное с числом из того же документа | при claim_kind="prediction" без external_target даёт VOID -> ПУСТО; иначе меряет отклонение в сигмах погрешности внешней величины, порог 3 сигма |
| С16 подгонка под ответ | попадание, ожидаемое по случаю при переборе формул | VOID если ожидаемых попаданий >= 1 или случайная цель накрывается в >= 50 % случаев; FAIL если p_глоб > alpha |
| С17 описание короче данных | формула не сжимает данные (MDL Риссанена) | FAIL -> ВОПРОС, если биты совпадения <= биты описания |
| С18 объявленная область | фактический перебор шире объявленного | FAIL -> ОПРОВЕРГНУТО |
Зачем они нужны: тик крона выдал восемь вердиктов ПОДТВЕРЖДЕНО на утверждениях вида «формула даёт напечатанное рядом число». Такая проверка тавтологична — она прошла бы при любом значении формулы. С15 ловит это машинно.
Перечисление семейства n*3^k*pi^m*phi^p*e^q, поправка на множественность
(эмпирически и аналитически), биты описания по MDL, проверка выхода за
объявленные границы. 14 собственных самопроверок, включая guard «наивная оценка
плотности обязана расходиться с правильной».
Порог разрешающей способности: совпадение несёт информацию только при eps < ln10 * D / (2M). Для M = 123 201 и D = 5 декад это eps* ~ 8e-5 (Монте-Карло подтверждает аналитику с расхождением 7 %).
python3 -m goldsieve regress --registry claims.yaml [--update]
Перепрогоняет весь реестр и сравнивает вердикты с записанными. Нужна потому, что
усиление каскада может молча перевернуть прежние вердикты: без перепрогона
ведомость начинает противоречить инструменту. С --update записывает новые
вердикты в реестр. Сопоставление имён устойчиво к регистру и лишним пробелам.