COOLJAPAN
← All posts

OxiLean 0.1.3 Released — An Independent Lean 4 Proof Checker, a 144 KB 'Kernel in a Tab,' and a 7× Verification Speedup

OxiLean 0.1.3 ships oxilean-verify, an independent Lean 4 proof checker with three-bucket verdicts, a 144 KB gzip WASM 'Kernel in a Tab,' a kernel soundness overhaul, and a structural-sharing rewrite cutting full-Init verification from 1h20m to 11m28s — the sovereign theorem-proving layer for the COOLJAPAN ecosystem.

release oxilean lean4 theorem-prover formal-verification proof-checker pure-rust wasm kernel

A second Lean 4 kernel, written independently from scratch, that agrees with the original — and fits in 144 KB.

Today we released OxiLean 0.1.3 — headlined by oxilean-verify, an independent Lean 4 proof checker with three-bucket verdicts; oxilean-verify-wasm, a 144 KB gzip “Kernel in a Tab” that checks proofs entirely client-side; a kernel soundness overhaul closing a real overflow bug; and a structural-sharing rewrite of the kernel’s Expr representation that took a full run over Lean 4 core’s Init library from 1 hour 20 minutes down to 11 minutes 28 seconds.

No C. No C++. No OCaml. Lean 4’s reference kernel is a C++ program under a bootstrapped Lean compiler, so trusting a Lean proof has always meant trusting that C++ codebase, transitively, however deep the proof goes. OxiLean’s trusted computing base for independent checking is exactly two Pure Rust crates — oxilean-kernel and oxilean-export — both with zero external runtime dependencies and #![forbid(unsafe_code)], enforced on every push by CI gates (gate-zero-deps.sh, gate-forbid-unsafe.sh, gate-allow-list.sh). The identical code compiles to a single static binary or to a 144 KB gzip WASM artifact that runs in any browser tab, with zero bytes uploaded.

Why OxiLean 0.1.3 is a game changer

Independently checking a Lean proof has historically meant picking from a short list of bad options:

OxiLean 0.1.3 ends all of that.

Technical Deep Dive: how the independent checker is built

  1. Export & replay — oxilean-export. A budgeted, memory-limited reader for lean4export’s NDJSON v3.1.0 format, supporting inductive families, quotients, and recursor verification. Zero external dependencies, #![forbid(unsafe_code)] — the same TCB discipline as the kernel it feeds.
  2. The kernel — oxilean-kernel, hardened. This release is a soundness pass as much as a feature: arbitrary-precision BigNat (schoolbook and Karatsuba multiplication, Knuth-D division) replaces the old u64 literal fast path that could silently wrap 2^32 * 2^32 to 0; quotient types are now validated against kernel-built canonical types instead of trusted from the export data; recursors are re-derived from first principles rather than trusted; and level/order.rs implements complete universe-level definitional equality (the trepplein/nanoda algorithm: smart constructors plus a full param-case-split ≤ procedure).
  3. The checker — oxilean-verify. A streaming CLI that assigns every declaration to exactly one of three buckets — verified, unsupported (a named missing feature), or rejected (the alarm) — and exits non-zero only on a real rejection. Argument parsing and JSON reporting are hand-rolled: no clap, no serde, so the TCB stays at exactly two crates plus this one.
  4. Structural sharing, underneath all of it. Every recursive Expr field is now a cached-header Node { range, cost, rc: Rc<Expr> } instead of a Box<Expr> — cloning becomes an O(1) refcount bump, and the export reader materializes each shared subterm exactly once. Init’s 908,550,041 tree nodes collapse to 552,915 distinct expressions, a ~1,643× sharing factor, which is where the 7× wall-clock win comes from.

Getting Started

Install the checker and point it at a lean4export NDJSON file:

cargo install oxilean-verify
$ oxilean-verify Mathlib.Analysis.SpecialFunctions.Log.Basic.ndjson

✓  Real.log_le_sub_one_of_pos                    1.2 ms
✓  Real.add_pow_le_pow_mul_pow_of_sq_le_sq       4.8 ms
✓  Real.exp_log                                  0.9 ms
⊘  Real.exp_approx        unsupported: Nat literal reduction
✓  Real.log_nonneg                               0.7 ms

1204 verified · 3 unsupported · 0 rejected

Prefer the browser? The same checker runs as the 144 KB WASM build, zero install, zero upload:

cd web/verify-demo
python3 -m http.server 8000
# open http://localhost:8000 and drop an .ndjson file

Or pull the theorem prover itself into a Rust project:

cargo add oxilean-kernel

What’s New in 0.1.3

Tips

This is the foundation

OxiLean’s verification layer leans directly on its Pure Rust COOLJAPAN siblings:

Repository: https://github.com/cool-japan/oxilean

Star the repo if you want a Lean 4 proof independently re-checked by a second kernel small enough to read in an afternoon and light enough to run in a browser tab.

The era of trusting one C++ kernel to grade its own homework is over. Pure Rust theorem proving is here — independent, auditable, and sovereign.

KitaSan at COOLJAPAN OÜ July 17, 2026

↑ Back to all posts