API-сервис на FastAPI, который проверяет Lean-код внутри mathlib4 (v4.24.0). Возвращает ok: true/false; для ошибок — структурированный JSON с координатами.
- Docker + Docker Compose v2 (
docker compose version) - Git
bash <(curl -fsSL https://raw.githubusercontent.com/andreykhalov/lean-checker/main/install.sh)Параметры (env): REPO_URL, TARGET_DIR, BRANCH. По умолчанию клонирует в ~/lean-checker и запускает docker compose up --build -d.
Производительность: окружение
lake envсобирается один раз при старте приложения и кэшируется; проверки гоняются черезlean --jsonс готовыми olean. При включении переменнойLEAN_SERVER=1можно попробовать экспериментальный режимlean --server(кэширование в памяти), но по умолчанию он выключен.
git clone https://github.com/andreykhalov/lean-checker.git
cd lean-checker
docker compose up --build -dПроверка: curl -s http://localhost:8888/health
GET /health— smoke-test Lean (внутренний файл/srv/health.lean).POST /check- body:
{"code": "<Lean source as string>", "import_line": "import Mathlib"}(import_lineопционально; если не указан и код не начинается сimport, сервер добавитimport Mathlib). - ответ:
ok: bool— успешная проверкаreturncode— код Leanstdout/stderr— исходный вывод Leanmessages— массив структурированных сообщений Lean--json, каждое:{ "severity": "error", "file": "/tmp/.../Main.lean", "line": 19, "column": 4, "endLine": 19, "endColumn": 32, "caption": "", "message": "Function expected at\n zipLeft'\n...", "kind": "[anonymous]", "keepFullRange": false, "raw": { "...": "оригинал строки из Lean --json" } }
- body:
# Успешный пример
python3 - <<'PY' | curl -s -X POST http://localhost:8888/check \
-H 'Content-Type: application/json' -d @-
import json
print(json.dumps({"code": open("test_ok.lean").read()}))
PY
# Ошибка с координатами
python3 - <<'PY' | curl -s -X POST http://localhost:8888/check \
-H 'Content-Type: application/json' -d @-
import json
print(json.dumps({"code": open("test_bug.lean").read()}))
PY- Lean
leanprover/lean4:v4.24.0 - mathlib4
v4.24.0(с кешированием olean через volume) - FastAPI + Uvicorn
- Dockerfile собирает mathlib и запускает API на
:8000(проброшен наlocalhost:8888через docker compose).
- Переменная
MATHLIB_ROOTможет переопределять путь к mathlib (по умолчанию/opt/mathlib4внутри контейнера). - Повторные сборки быстро стартуют за счёт volume-кэшей
elanи.lake.