Честность

Как проверить каждое число на этом сайте

Здесь указаны версии, входные данные и команды для проверки опубликованных результатов. Таблицы относятся к сохранённому прогону Balansis 1.1.0 от 2026-09-08. Они не описывают автоматически поведение нового релиза или другой версии Python.

Правило провенанса

  • Все измеренные числа приходят из двух файлов — data/benchmarks.json и data/lean-audit.json, — которые создаются скриптами репозитория и коммитятся вместе с метаданными прогона.
  • Страницы читают эти файлы через один модуль (src/lib/data.ts). Это касается и вывода команд, и значений в комментариях к примерам кода: генератор запускает CLI и сами вызовы API и кладёт их результат в JSON, откуда страницы его и печатают. У любой таблицы с измерениями стоит плашка Измерено 2026-09-08.
  • Иллюстративные значения — то есть числа, не полученные прогоном, — помечаются плашкой «Иллюстрация, не измерение» и в сравнениях не участвуют. На сегодня таких значений на сайте нет ни одного: всё, что выглядит как число, вывод команды или результат в комментарии к примеру, снято прогоном и лежит в JSON.
  • Утверждений вида «до N раз быстрее» на сайте нет вовсе. Отношения времён приводятся только там, где обе стороны отношения измерены в одном прогоне — включая случаи, где Balansis проигрывает.
Граница сравнения. Python 3.12 улучшил sum и добавил math.sumprod. В сохранённом прогоне sum измерен отдельно от наивного цикла, а math.sumprod не измерен. Поэтому преимущество над math.fsum(x * y for ...) не доказывает превосходство над всей стандартной библиотекой. Документация math.sumprod.

Провенанс опубликованного прогона

Бенчмарки. Измерено 2026-09-08
Прогон завершён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…), дерево чистое
Доказательства Lean4. Проверено 2026-09-08
Прогон завершён2026-09-08T19:00:15.309614+00:00
Скриптscripts/generate-lean-audit.py
Toolchainleanprover/lean4:v4.28.0 · Lake version 5.0.0-src+7e01a1b (Lean version 4.28.0)
Mathlibv4.28.0 · 8f9d9cff6bd728b17a24e163c9402775d9e6a365
Результат73 теорем, отчёт об аксиомах у 73, все шаги с кодом 0

Повторить у себя

Для численных примеров используйте ту же минорную версию Python, что в прогоне (3.12.3), и указанные версии пакетов. Для проверки Lean отдельно нужны elan, toolchain проекта и зависимости Mathlib. Генераторы и исходные 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
python -m pip install "balansis==1.1.0" "numpy==1.26.4"
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. Различия Python, компилятора и условий underflow тоже нужно учитывать для EFT-примитивов. Сверяйте результат с рациональным эталоном и сохраняйте версии вместе с воспроизводимым примером расхождения. Запуск Lean на текущей ветке проверяет текущие исходники; опубликованный JSON не фиксирует отдельный SHA дерева Lean, поэтому побайтовое воспроизведение именно того аудита им не гарантировано.

Расхождения, найденные в опубликованном прогоне

Это история проверки версии 1.1.0 и документации на дату 2026-09-08. Текущий README и поведение новой версии могли измениться. Численные результаты ниже сохраняют первоначальную версию; их нельзя переносить на другой релиз без повторения.

Проверено на источниках 2026-09-08. Измерено 2026-09-08
Утверждение источникаЧто показал прогонКак это отражено на сайте
README, раздел Real-World Value First: sum([1e16, 1.0, -1e16]) # 0.0На CPython 3.12.3 встроенный sum() возвращает 1. Алгоритм float-суммы улучшен с Python 3.12. Ноль (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 и видит числа. Такой рантайм пока не проверен. Сейчас числа приходят из зафиксированного прогона — с полным провенансом, но не «вживую».

Английской версии. Сайт пока только на русском, хотя аудитория библиотеки — международная.

Ничего из закрытых частей экосистемы. На сайт вынесено только то, что уже опубликовано: код на GitHub, пакет на PyPI, формальный слой в том же репозитории. Ни внутренних документов, ни данных пользователей, ни непубличных проектов здесь нет.