Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Performance Flags

Complete flag reference

FlagEffectWhen to use
--fastFingerprint-only (8 bytes/state, no traces)Large state spaces (>1M states)
--porPartial order reductionSpecs with independent actions
--symmetrySymmetry reductionIdentical/interchangeable processes
--no-parallelSingle-threadedDebugging, deterministic output
--threads NSet thread countFine-tune parallelism
--max-states NStop after N statesTime/resource limits
--max-depth NLimit BFS depthBounded depth verification
--max-time NTime limit in secondsCI/scheduled checks
--memory-limit NMax memory in MBResource-constrained environments
--bloomBloom filter (fixed memory, probabilistic)Very large state spaces
--directedPriority BFS toward violationsBug hunting
--swarm NN parallel instances with shuffled action ordersProbabilistic bug hunting
--no-deadlockSkip deadlock detectionProtocol specs with quiescent states
--check-only NAMECheck only named invariant(s)Focused verification

--fast — fingerprint mode

Stores only 64-bit fingerprints instead of full states. Uses ~25x less memory. Cannot produce counterexample traces.

specl check spec.specl -c N=3 --fast    # 8 bytes/state vs ~200 bytes

Use this when you need to verify large state spaces and a simple “violation exists” / “OK” answer is sufficient. If a violation is found, re-run without --fast to get the trace.

--por — partial order reduction

Computes stubborn sets: identifies which actions are independent (don’t read/write overlapping variables) and explores only a sufficient subset. Can reduce the state space by orders of magnitude for loosely-coupled processes.

specl check spec.specl -c N=3 --por

Most effective when processes interact infrequently (e.g., separate counters that occasionally synchronize).

--symmetry — symmetry reduction

When processes are interchangeable, canonicalizes states by sorting process indices. Collapses symmetric states into one representative.

specl check spec.specl -c N=3 --symmetry

Only effective when processes are truly identical (same actions, same initial state).

Combining flags

Flags compose freely:

# Maximum reduction for large state space
specl check spec.specl -c N=3 --por --symmetry --fast

# Bounded exploration with time limit
specl check spec.specl -c N=4 --max-states 10000000 --max-time 300
# 1. Start small, default settings
specl check spec.specl -c N=2

# 2. Scale up processes
specl check spec.specl -c N=2 -c MaxTerm=2

# 3. Add reductions
specl check spec.specl -c N=2 -c MaxTerm=2 --por

# 4. Go bigger with fast mode
specl check spec.specl -c N=3 -c MaxTerm=2 --por --fast

# 5. Maximum coverage
specl check spec.specl -c N=3 -c MaxTerm=2 --por --symmetry --fast