v1.0.0
tlaplusplus v1.0.0
A Rust TLA+ model checker with TLC feature parity and 10.7x faster state
exploration on many-core systems. v1.0.0 is the first stable release.
Headline numbers
- 756 default tests, 776 with failpoints, 774 with symbolic-init, 0 failures
- 13/13 specs match TLC exactly via the diff CI gate
(scripts/diff_tlc.sh) - 174/182 (95.6%) of tlaplus/Examples
pass full model checking at 60s; 182/182 pass analysis - 10.7x faster than Java TLC on the synthetic counter-grid benchmark
(128-core AMD EPYC); up to 22x on NUMA-optimized configs - Verus tier-B + tier-A proofs of the seqlock resize protocol — 19 + 31
lemmas verified, includingtheorem_no_fingerprint_lostand the
linear-probe-table soundness extension
What's new since v0.3.0
Correctness
- Differential CI gate vs TLC (T1) — 13 curated specs run under both
checkers on every push; uncovered and fixed seven soundness bugs (T1.1,
T1.3, T1.4, T1.5, T1.6, T2.4, T11.5) - Compiled-vs-interpreted proptest equivalence (T2) — well-typed
expression generator, 17 proptest cases, clean across 9 seeds at
PROPTEST_CASES=2048 - State-graph snapshot tests (T3) — 12 specs pinned to 128-bit XxHash3
digests, validated against TLC v2.19 - Mutation testing audit (T4) —
cargo-mutantsagainst eval/action paths;
17 inline kill-tests added - Cross-arch CI matrix (T12) —
[ubuntu-latest, ubuntu-24.04-arm] - Regehr-style swarm testing (T16) — both the proptest harness (random
17-bit feature mask) and the chaos soak (1-4 concurrent failpoints per iter)
Performance
- Symbolic Init enumeration via Z3 (T5, opt-in
--features symbolic-init)
— 10-41x on filtered record-set Init shapes - Cross-node distributed work stealing (T6) — TCP steal protocol with
peer-down cooldown and termination consensus extension. Fixed three
pre-existing v0.3.0 distributed-mode termination bugs along the way. See
RELEASE_1.0.0_LOG.md### T6and### T6.1for the
honest cluster-vs-independent benchmark. - Partial-order reduction via stubborn sets (T7, opt-in
--por) — 36.8x
state reduction, 17.9x wall-time speedup on PorBenchProcessGrid - State compression in queue (T8, default-on, opt-out
--queue-compression false) — zstd ring between hot deques and disk; 13.2x
ratio, -68% peak RSS at 1M items, +2% wall time - Liveness checking 550x faster (T10) — iterative Tarjan +
fingerprint-keyed graph + fast SCC fairness check; 63.39 s → 115.28 ms on
LivenessBench
Polish & robustness
- Trace minimization on violation (T9, default-on
--minimize-trace) —
earliest-violation truncation + BFS shortcut to fixed point + variable
highlighting - 1-hour chaos soak with swarm-mode failpoints (T11 + T16b) — every
failpoint insrc/chaos.rsfired ≥23 times; 0 divergences, 0 hangs
Verification
- Verus tier-B + tier-A proofs of the seqlock resize protocol (T13 +
T13.1-T13.3). 19 lemmas at the abstractSet<u64>layer (tier B,
seqlock_resize.rs); 31 lemmas at the concreteSeq<u64>linear-probe
layer (tier A,seqlock_resize_tier_a.rs). Together they
machine-check that no inserted fingerprint is ever lost during a resize,
the spec-level CAS soundness theorem, and bounded reader-retry termination.
See verification/verus/README.md.
Deferred to v1.1.0
Eight quality follow-ups are parked as the v1.1.0 roadmap (detail in
RELEASE_1.0.0_PLAN.md, each entry begins with
**DEFER TO 1.1.0.**):
- T5.4, T5.5 — Streaming Init enumeration / joint Init+Solution symbolic
encoding (Einstein-class workloads). - T10.2 — Streaming SCC discovery for 100M+ liveness.
- T11.3, T11.4 — CI-gate chaos variant;
route_spill_batchinflight
accounting on disk-overflow push errors. - T13.4, T13.5, T13.6 — Verus production-code annotations,
unbounded-fairness reader liveness, CI gate.
Try it
git clone https://github.com/zoratu/tlaplusplus.git
cd tlaplusplus
cargo build --release
# Model-check a TLA+ spec
./target/release/tlaplusplus run-tla \
--module /path/to/Spec.tla --config /path/to/Spec.cfg
# Compare with TLC on the curated diff list
scripts/diff_tlc.shLinks
- Full changelog
- Architecture & developer notes
- Release plan & v1.1.0 backlog
- Detailed work log
- Verus proof
License
GNU GPLv3.