Repository navigation
This release fixes several soundness bugs in the core LTL model checker, substantially improving the reliability of verification results.
🔴 Correctness fixes (model checking)
- Fix operand transposition in the NNF negation of Until / WeakUntil. Formulas involving Until / Eventually / WeakUntil could return wrong results — e.g.
p U rwas incorrectly reported as HOLDS. (#16) - Fix the Release tableau-expansion branches, which assigned the operands incorrectly. (#17)
- Fix
check()'snot(.atomic)special case to use universal (not existential) quantification over the initial states. (#18) - Unify Büchi emptiness checking on a single standard Nested DFS (Holzmann–Peled–Yannakakis / CVWY), removing the non-standard pre-order implementation and the redundant SCC-based fallback. (#21)
⚠️ Robustness
- Tableau construction now throws an error when the GBA state-count limit is exceeded, instead of silently truncating (which could yield an incorrect HOLDS). (#20)
🧹 Maintenance
- Remove debug cruft and dead code (−368 lines in #23; −227 net from the NestedDFS unification in #21). (#21, #23)
- Add the MIT
LICENSEfile. (#25) - Add an Apple-platform (macOS) CI job. (#26)
⚠️ Breaking changes
- Removed the unused
LTLModelCheckerError.algorithmsNotImplementedcase. - Due to the correctness fixes above, some formulas that previously (incorrectly) returned HOLDS/FAILS now return the correct verdict.
Full Changelog: v0.1.0...v0.2.0