MURPHI2SMV(1)

๐Ÿ“ฆ version 2025.02.02, in debian trixie, ubuntu resolute, ubuntu stonking

๐Ÿ’– MURPHI2SMV(1) ๐Ÿ’–

okay bestie, gather round, because this is the page for murphi2smv โ€” a General Commands Manual classic, and she is so useful. โœจ


๐ŸŒธ NAME ๐ŸŒธ

murphi2smv โ€” the lil translator that takes your Murphi model and turns it into SMV. like, it's giving "bilingual icon". ๐Ÿฆ‹


๐ŸŽ€ SYNOPSIS ๐ŸŽ€

murphi2smv [--output FILE | -o FILE] FILE

โœจ DESCRIPTION โœจ

so murphi2smv ships bundled with the model checker Rumur, and what she does is translate a Murphi model into the input format for the NuSMV model checker. ๐Ÿ’…

if you want the whole backstory on Rumur or on Murphi itself, go read rumur(1) โ€” she's got the lore. ๐Ÿ“–


๐Ÿ‘‘ OPTIONS ๐Ÿ‘‘

  • --help or -? โ€” shows you the usage info. your lil "what do I even do here" button. ๐Ÿซถ
  • --numeric-type [integer | word] or -n [integer | word] โ€” sets the SMV type used for ranges, scalarsets and numeric literals. pick integer to use native integers, or word... no wait, word to use bit-vectors. if you don't pass this at all, one gets chosen automatically based on what's inside your input model. she just knows. ๐Ÿ”ฎ
  • --output FILE or -o FILE โ€” tells her where to write the output SMV model. skip it and the output goes to standard out instead. classic. ๐ŸŒˆ
  • --quiet or -q โ€” shhh. silences warning diagnostics. ๐Ÿคซ
  • --verbose or -v โ€” the opposite vibe: reports extra debugging information. she will yap (affectionately). ๐Ÿ—ฃ๏ธ
  • --version โ€” displays version information and exits. periodt. ๐Ÿ‘‘

โš ๏ธ NOTES โš ๏ธ

okay so real talk, bestie, because this part matters. ๐Ÿšจ

Translation to SMV is imprecise, because the semantics of model execution in SMV are significantly different from Murphi. like, different enough that you should not expect murphi2smv to hand you a ready-to-run SMV model. nope!

what she actually gives you is an initial rough translation โ€” a starting point that you will need to edit before it becomes a runnable model. it's giving "first draft energy", not "final submission energy". โœ๏ธ

fr fr, do not skip the editing step. ๐Ÿ™ˆ

๐Ÿ’€ LIMITATIONS ๐Ÿ’€

Murphi type declarations have no exact equivalent in SMV. so what happens? they get handled by propagating and expanding them inline. and this is done purely syntactically, which can lead to unexpected or incorrect results if your input model has symbols that shadow other symbols. no cap. ๐Ÿ˜ญ

and now, the big list. the following Murphi constructs have no equivalent in SMV and get emitted as a placeholder comment:

  • alias declarations
  • alias rules
  • alias statements
  • assume, cover, and liveness properties
  • clear statements
  • error statements
  • exists expressions
  • for loops
  • forall expressions
  • functions, procedures, and calls to these
  • if statements
  • isundefined statements
  • property statements
  • quantifiers
  • record definitions
  • simple rules
  • rulesets
  • switch statements
  • undefine statements
  • while statements

so basically you've got two paths, bestie: rephrase your input model to dodge all of these features, or edit the generated SMV after generation. pick your fighter. ๐ŸฅŠ


Rumur supports integers up to 64-bit in width. SMV integers are only 32-bit. and there are no checks that the numbers or calculations in your input model actually fit in 32-bit. which means... yeah. constants or calculations in the generated SMV may overflow. ๐Ÿ’ฅ be careful out there.


Murphi rule-local declarations and variables have no equivalent in SMV either. they get emitted using SMV syntax, but you'll need to move them to a valid location within the SMV output yourself. she did her part, you do yours. ๐Ÿ’…


๐ŸŒˆ SEE ALSO ๐ŸŒˆ

rumur(1)


๐Ÿซถ AUTHOR ๐Ÿซถ

all comments, questions and complaints should be directed to Matthew Fernandez <matthew.fernandez@gmail.com>. ๐Ÿ’Œ

(yes, complaints too. he said it, not me.)


๐Ÿ“œ LICENSE ๐Ÿ“œ

This is free and unencumbered software released into the public domain.

Anyone is free to copy, modify, publish, use, compile, sell, or distribute this software, either in source code form or as a compiled binary, for any purpose, commercial or non-commercial, and by any means.

In jurisdictions that recognize copyright laws, the author or authors of this software dedicate any and all copyright interest in the software to the public domain. We make this dedication for the benefit of the public at large and to the detriment of our heirs and successors. We intend this dedication to be an overt act of relinquishment in perpetuity of all present and future rights to this software under copyright law.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

For more information, please refer to <http://unlicense.org>


okay that's the whole page, bestie!! ๐ŸŽ€ this was murphi2smv(1) from the General Commands Manual, and that's the whole vibe check. go translate something iconic. mwah. ๐Ÿ’–โœจ๐Ÿ‘‘

๐Ÿ“ฆ where this page comes from