Честность
Как проверить каждое число на этом сайте
Сайт про математическую честность не может врать про собственные бенчмарки. Поэтому здесь действует одно правило: каждое число либо реально вычислено — и тогда рядом сказано, чем и когда, — либо явно помечено как иллюстрация. Третьего варианта на сайте нет.
Правило провенанса
- Все измеренные числа приходят из двух файлов —
data/benchmarks.jsonиdata/lean-audit.json, — которые создаются скриптами репозитория и коммитятся вместе с метаданными прогона. - Страницы читают эти файлы через один модуль (
src/lib/data.ts). Это касается и вывода команд, и значений в комментариях к примерам кода: генератор запускает CLI и сами вызовы API и кладёт их результат в JSON, откуда страницы его и печатают. У любой таблицы с измерениями стоит плашка Измерено 2026-09-08. - Иллюстративные значения — то есть числа, не полученные прогоном, — помечаются плашкой «Иллюстрация, не измерение» и в сравнениях не участвуют. На сегодня таких значений на сайте нет ни одного: всё, что выглядит как число, вывод команды или результат в комментарии к примеру, снято прогоном и лежит в JSON.
- Утверждений вида «до N раз быстрее» на сайте нет вовсе. Отношения времён приводятся только там, где обе стороны отношения измерены в одном прогоне — включая случаи, где Balansis проигрывает.
Провенанс текущего прогона
| Прогон завершён | 2026-09-08T18:58:44.587394+00:00 |
|---|---|
| Скрипт | scripts/generate-benchmarks.py, sha256 01439b8fd653e7c3a63b09fd… |
| Библиотека | balansis 1.1.0 — PyPI wheel (site-packages) |
| Колесо | sha256 2445ae239cb21e48e5b267e5364e161cc6b89a0fbaef90160bf88bd3eae0b828 — совпадает с digest, объявленным JSON-API PyPI |
| Рантайм | Python 3.12.3, numpy 1.26.4 |
| Хост | Intel Xeon (серверный), 8 vCPU, Linux x86_64, glibc 2.39 класс машины, а не её точная модель и версия ядра: для интерпретации таймингов достаточно класса, а публиковать инвентарь живого хоста незачем |
| Исходники для справки | v1.1.0-1-g91c406d (91c406d72421…), дерево чистое |
| Прогон завершён | 2026-09-08T19:00:15.309614+00:00 |
|---|---|
| Скрипт | scripts/generate-lean-audit.py |
| Toolchain | leanprover/lean4:v4.28.0 · Lake version 5.0.0-src+7e01a1b (Lean version 4.28.0) |
| Mathlib | v4.28.0 · 8f9d9cff6bd728b17a24e163c9402775d9e6a365 |
| Результат | 73 теорем, отчёт об аксиомах у 73, все шаги с кодом 0 |
Повторить у себя
Ничего, кроме Python и доступа к PyPI, для этого не нужно: оба генератора и оба JSON сайт отдаёт файлами, а их sha256 лежат в /repro/manifest.json.
# 1. Бенчмарки — нужен только Python и сеть до PyPI
curl -O https://balansis.xteam.pro/repro/generate-benchmarks.py
curl -O https://balansis.xteam.pro/repro/benchmarks.json
python -m venv .venv && . .venv/bin/activate
pip install "balansis==1.1.0" numpy
python generate-benchmarks.py --out mine.json
# 2. Доказательства — нужен Lean4 (elan) и кеш Mathlib
curl -O https://balansis.xteam.pro/repro/generate-lean-audit.py
git clone https://github.com/StudyLabPro/Balansis
BALANSIS_REPO=./Balansis python generate-lean-audit.py --out mine-lean.json
# 3. Сравнить с опубликованным: точность обязана совпасть, тайминги — нет
python - <<'EOF'
import json
mine, theirs = json.load(open("mine.json")), json.load(open("benchmarks.json"))
for a, b in zip(mine["scenarios"], theirs["scenarios"]):
for x, y in zip(a.get("results") or [], b.get("results") or []):
if isinstance(x, dict) and "abs_error" in x:
print(a["id"], x["method"], x["value"] == y["value"], x["abs_error"] == y["abs_error"])
EOFРасхождения ожидаемы в двух местах: тайминги зависят от машины и загрузки, а результаты BLAS-зависимых операций (numpy.dot, numpy.linalg.svd) могут отличаться в последних битах на другой сборке numpy. Значения, полученные точным суммированием и EFT-примитивами, отличаться не должны — если отличаются, это ошибка, и о ней стоит сообщить в репозиторий.
Где документация Balansis расходится с прогоном
Это не претензия к библиотеке, а обязательство сайта: если наш прогон не подтверждает утверждение из README, мы пишем об этом здесь, а не тихо повторяем удобную формулировку.
| Утверждение источника | Что показал прогон | Как это отражено на сайте |
|---|---|---|
README, раздел Real-World Value First: sum([1e16, 1.0, -1e16]) # 0.0 | На CPython 3.12.3 встроенный sum() применяет компенсацию Ноймайера и возвращает 1. Ноль (0) даёт наивный цикл, а не sum(). | В сценарии агрегации сравниваются оба варианта отдельно; наивный цикл назван наивным циклом |
| README, Catastrophic Cancellation: Balansis «сохраняет информативный остаток» | compensated_add(1e16, −1e16) возвращает 2 при точном ответе 0.0. Это величина в один ULP — сигнал о риске потери точности, не восстановленное значение | Отдельный пример с прямой формулировкой «сигнал, а не значение» |
| README, Financial Cancellation: встречные проводки «сокращаются структурно в ABSOLUTE» | Верно только когда суммы точно представимы в двоичном float64 (как 250.00 в примере README). На 12345.67 структурный ноль исчезает: Ledger.post_entry приводит Decimal к float на входе | Пример прогнан в трёх масштабах; вывод — для денег берите Decimal |
| Бейдж README: доказаны A1–A5, E1–E4, S1–S3 | Прогон нашёл 73 доказанных теорем: сверх бейджа — вся семантика ExtendedRatio и аналитический слой. Это недоговаривание, а не преувеличение | Показаны все 73 с аксиоматической базой каждой |
Название модуля linalg.svd как «ACT-compensated SVD» | Бэкенд numpy_gesdd вызывает numpy.linalg.svd; компенсировано в нём телеметрия и политика, а не разложение. Бэкенд act_jacobi в нашем прогоне медленнее и не точнее | Сказано прямо в примере и в таблице проигрышей |
ROADMAP.md: «Current Version 0.6.1», «PyPI publication: Not published»; benchmarks/baselines.json версии 0.5.0 | Актуальная версия — 1.1.0, пакет на PyPI опубликован 2026-08-31. Эти файлы устарели | Сайт на них не опирается ни одним числом |
LICENSING.md: файл LICENSE сделан verbatim ради автоопределения лицензии | GitHub API всё равно отдаёт spdx_id: NOASSERTION — автоопределение не сработало | Лицензия названа явно (AGPL-3.0-only плюс коммерческая) со ссылкой на LICENSING.md |
Чего на сайте нет
Живого исполнения кода в браузере. Это было бы честнее всего — читатель сам запускает Balansis и видит числа. Технически путь известен (Pyodide с самохостингом дистрибутива), но он тянет за собой ≈11 МБ загрузки и отдельный контракт честности для рантайма, который не тестировался апстримом. Пока этого нет, числа приходят из зафиксированного прогона — с полным провенансом, но не «вживую».
Английской версии. Сайт пока только на русском, хотя аудитория библиотеки — международная.
Ничего из закрытых частей экосистемы. На сайт вынесено только то, что уже опубликовано: код на GitHub, пакет на PyPI, формальный слой в том же репозитории. Ни внутренних документов, ни данных пользователей, ни непубличных проектов здесь нет.