LPSINVELM(1)

πŸ“¦ version 202507, in nixos 26.05, nixpkgs unstable

πŸ’… lpsinvelm β€” check invariants & simplify summands of an LPS ✨

okay so this is the lpsinvelm page from the User Commands corner of the mCRL2 toolset manual, section 1, and bestie it's literally about proving your LPS behaves itself πŸŽ€


πŸ¦‹ NAME

lpsinvelm β€” check invariants and use these to simplify or eliminate summands of an LPS. that's the whole vibe, no cap πŸ’–


🌸 SYNOPSIS

lpsinvelm [OPTION]... --invfile=INVFILE [INFILE [OUTFILE]]

like, options first, then the invariant file is basically mandatory, and then INFILE and OUTFILE are optional besties 🫢


✨ DESCRIPTION ✨

So what it does is: it checks whether the boolean formula (an mCRL2 data expression of sort Bool) that you handed over as your invariant is actually, truly an invariant of the linear process specification (LPS) sitting in INFILE. vibe check passed or failed, we'll find out πŸ”₯

If it is an invariant, the tool eliminates all summands of the LPS whose condition violates the invariant, and writes the result to OUTFILE. slay πŸ’…

  • if INFILE is present… wait, no, careful: if INFILE is not present, stdin is used πŸ“
  • if OUTFILE is not present, stdout is used 🌈

Also! the tool can be used to simplify the conditions of the summands of the given LPS. so it's not just a bouncer, it's also a glow-up artist ✨


πŸ‘‘ OPTIONS πŸ‘‘

OPTION can be any of the following, and yes we're listing every single one because we don't skip πŸ’œ

  • -y, --all-violations β€” don't terminate as soon as a single violation of the invariant is found; instead, report all violations. the completionist option, we love her πŸ™ˆ
  • -c, --counter-example β€” display a valuation indicating why the invariant could possibly be violated, for when it's uncertain whether a summand violates the invariant. receipts, basically 🧾
  • -o, --induction β€” apply induction on lists. lists get the induction treatment, periodt πŸŽ€
  • -iINVFILE, --invariant=INVFILE β€” use the boolean formula (an mCRL2 data expression of sort Bool) in INVFILE as the invariant. note the short form is glued right onto the value: -iINVFILE πŸ’–
  • -n, --no-check β€” do not check if the invariant holds before applying the invariant. living dangerously, honestly πŸ’€
  • -e, --no-elimination β€” do not eliminate or simplify summands, but add the invariant to each condition. this implies setting the flag --simplify-all. iykyk ⭐
  • -pPREFIX, --print-dot=PREFIX β€” save a .dot file of the resulting BDD if it's impossible to determine whether a summand violates the invariant; PREFIX will be used as prefix of the output files πŸ¦‹
  • -QNUM, --qlimit=NUM β€” limit enumeration of universal and existential quantifiers in data expressions to NUM iterations (default NUM=10, NUM=0 for unlimited). yes, zero means unlimited, not zero, iconic 🌸
  • -rNAME, --rewriter=NAME β€” use rewrite strategy NAME: 'jitty' jitty rewriting (default), 'jittyc' compiled jitty rewriting. pick your fighter πŸ’…
  • -l, --simplify-all β€” simplify the conditions of all summands, instead of just eliminating the summands whose conditions in conjunction with the invariant are contradictions ✨
  • -zSOLVER, --smt-solver=SOLVER β€” use SOLVER to remove inconsistent paths from the internally used BDDs (by default, no path elimination is applied): 'cvc' the SMT solver CVC3, 'z3' the SMT solver Z3 πŸ”₯
  • -tLIMIT, --time-limit=LIMIT β€” spend at most LIMIT seconds on proving a single formula. time is a social construct but LIMIT is real πŸ•
  • --timings[=FILE] β€” append timing measurements to FILE. measurements are written to standard error if no FILE is provided πŸŽ€

πŸ’œ Standard options πŸ’œ

  • -q, --quiet β€” do not display warning messages 🀫
  • -v, --verbose β€” display short log messages πŸ—£οΈ
  • -d, --debug β€” display detailed log messages πŸ”
  • --log-level=LEVEL β€” display log messages up to and including level; either warn, verbose, debug or trace πŸ‘‘
  • -h, --help β€” display help information 🫢
  • --version β€” display version information ⭐
  • --help-all β€” display help information, including hidden and experimental options. the secret menu 🌈

🧚 AUTHOR

Written by Luc Engelen. give her her flowers πŸ’


😭 REPORTING BUGS

Report bugs at <http://www.mcrl2.org/issuetracker>. please do, they're not gonna fix themselves, fr fr πŸ“


Copyright Β© 2025 Technische Universiteit Eindhoven.

This is free software. You may redistribute copies of it under the terms of the Boost Software License <http://www.boost.org/LICENSE_1_0.txt>. There is NO WARRANTY, to the extent permitted by law. like, none. zero. don't come for them πŸ’€


⭐ SEE ALSO

See also the manual at <http://www.mcrl2.org/web/user_manual/tools/release/lpsinvelm.html>. go read it bestie, it's giving documentation πŸ’–


ngl this one's from the mCRL2 toolset, version string 202507..., dated October 2026, and it lives in section 1 of the manual under LPSINVELM(1). that's the whole page, mwah πŸ’‹βœ¨
πŸ“¦ where this page comes from