FuzzTLA¶
FuzzTLA tests the TLA+ model checkers TLC and Apalache. It generates random TLA+ specifications, checks each one with both tools, and keeps every specification on which they disagree, fail or crash. A campaign therefore finds defects in either checker and documents where their semantics differ.
Under active development
Input and output formats, configuration keys and corpus layouts may change without notice. Initialize a new corpus after upgrading FuzzTLA.
How it works¶
flowchart LR
G[Generate] --> P[Parse with SANY]
P --> T[TLC]
P --> A[Apalache]
T --> C[Compare verdicts]
A --> C
C --> Q[Select inputs for mutation]
Q -. next generation .-> G
- Generate. FuzzTLA turns random bytes into a well-typed TLA+ module. The same bytes always produce the same module.
- Parse. SANY, the TLA+ parser, must accept the module.
- Check. TLC and Apalache check the module with the same
Init,Nextand invariant, independently and in parallel. - Compare. If the verdicts differ, for example a pass against a counterexample, the entry is a disagreement.
- Select and mutate. Agreeing entries that exercise the checkers well seed the next generation of inputs.
Every input, verdict and diagnostic is stored in a corpus, a directory you can resume, inspect, query and report on.
Where to start¶
- Getting started: build FuzzTLA and run your first campaign.
- The corpus: what a campaign stores and what the verdicts mean.
- Running campaigns and Configuration: control what is generated and how the checkers are run.
- Inspecting a corpus: turn a disagreement into a TLA+ module you can rerun, and classify crashes against known issues.
- Results: the defects and conformance differences found so far.