Provided by: rumur_2020.02.17-1_amd64 bug

NAME

       rumur - Yet another explicit state model checker

SYNOPSIS

       rumur options --output FILE [FILE]

DESCRIPTION

       Rumur  is  a  reimplementation  of  the  model  checker  CMurphi with improved performance and a slightly
       different feature set.

OPTIONS

       --bound STEPS
              Set a limit for state space exploration. The verifier will stop  checking  beyond  this  depth.  A
              bound  of  0,  the  default, indicates unlimited exploration.  That is, the verifier will not stop
              checking until it has expanded all seen states.

       --colour [auto | off | on]
              Enable or disable the use of ANSI colour codes in the verifier's output. The default is  auto,  to
              auto-detect based on whether the verifier's stdout is a TTY.

       --counterexample-trace [diff | full | off]
              Set  how  counterexample  traces  are  printed  when  an error is found during checking. diff, the
              default, prints each state showing only the differences from the previous state.  full  shows  the
              entire contents of each state. off disables counterexample trace printing altogether.

       --deadlock-detection [off | stuck | stuttering]
              Enable  or  disable  deadlock detection. Rumur has the ability to generate a verifier that notices
              when there is no valid transition out of a state and raise an error in this scenario. The possible
              modes for this check are:

                     • off No deadlock checks are performed.

                     • stuck  A  deadlock  is  reached  when arriving at a state from which there are no enabled
                       transitions, and an error is signaled in this case.

                     • stuttering A deadlock is reached in the same circumstances as for  the  stuck  option  or
                       additionally if there are enabled transitions but these all result in an identical state.
                       For CMurphi users, this is the scenario that CMurphi considers to be a deadlock.

              This defaults to stuttering. However, whether  such  a  deadlock  actually  represents  a  problem
              depends  on the properties of the system you are modelling.  Hence you may want to change deadlock
              detection.

       --debug or -d
              Enable debugging options in the generated verifier. This  includes  enabling  runtime  assertions.
              This will also output debugging messages while generating the verifier.

       --help
              Display this information.

       --max-errors COUNT
              Number  of  errors the verifier should report before considering them fatal. By default this is 1,
              that is exit as soon as an error is encountered.  However, you may wish to set a higher  value  to
              get multiple error traces from a single run.

       --monopolise
              Assume that the machine the generated verifier will run on is the current host and that it will be
              the only process running. This flag causes the verifier to upfront allocate a seen set  that  will
              eventually occupy all of memory. That is, it is the same as passing --set-expand-threshold 100 and
              --set-capacity with the total amount of physical memory available on the current machine.

       --output FILE or -o FILE
              Set path to write the generated C verifier's code to.

       --output-format [machine-readable | human-readable]
              Change the format in which the verifier displays its output. By default,  it  uses  human-readable
              which  results  in  progress output and then a final summary of the result. Using machine-readable
              generates output in an XML format suitable for consumption by a following tool in an I/O pipeline.

       --pack-state [on | off]
              Set whether auxiliary state data is compressed in the generated verifier.   Compression  (on,  the
              default)  saves  memory  at  the  expense of runtime. That is, by default the verifier will try to
              minimise memory usage. If your model is small enough to comfortably fit in available  memory,  you
              may want to set this to off to accelerate the checking process.

       --quiet or -q
              Don't output any messages while generating the verifier.

       --sandbox [on | off]
              Control whether the generated verifier uses your operating system's sandboxing facilities to limit
              its own operations. The verifier  does  not  intentionally  perform  any  malicious  or  dangerous
              operations,  but at the end of the day it is a generated program that you are going to execute. To
              safeguard against a bug in the code generator, it is recommended to constrain the  operations  the
              verifier  is  allowed  to  perform if you are using a model you did not write yourself. By default
              this is off.

       --set-capacity SIZE or -s SIZE
              The size of the initial set to allocate for storing seen states. This is given  in  bytes  and  is
              interpreted  to  mean the desired size of the set when it is completely full. That is, the initial
              allocation performed will be for a number of "state slots" that, when all occupied,  will  consume
              this much memory. Default value for this 8MB.

       --set-expand-threshold PERCENT or -e PERCENT
              Expand the state set when its occupancy exceeds this percentage. Default is 75, valid values are 1
              - 100. Setting a value of 100 will result in the set only expanding when completely full. This may
              sound ideal, but will actually result in a much longer runtime.

       --symmetry-reduction [off | heuristic | exhaustive]
              Enable  or  disable  symmetry  reduction. Symmetry reduction is an optimisation that decreases the
              state space that must be searched by deriving a canonical representation of each state. While  two
              states may not be directly equal, if their canonical representations are the same only one of them
              need be expanded.  To take advantage of this optimisation you must be using named scalarset types.
              The available options are:

                     • off  Do  not use symmetry reduction. All scalarsets will be treated as if they were range
                       types.

                     • heuristic Use a symmetry reduction algorithm based on sorting the state data. This is not
                       guaranteed  to  find a single, canonical representation for each equivalent state, but it
                       is fast and performs reasonably well empirically. Using this option, you may explore more
                       states  than  you need to, with the advantage that you will process each individual state
                       much faster than with exhaustive. This is the default.

                     • exhaustive Use a symmetry reduction algorithm based  on  exhaustive  permutation  of  the
                       state  data.  This  is  guaranteed  to  find  a single, canonical representation for each
                       equivalent state, but is typically very slow. Use this if you  want  to  minimise  memory
                       usage at the expense of runtime.

       --threads COUNT or -t COUNT
              Specify  the  number  of  threads the verifier should use. If you do not specify this parameter or
              pass 0, the number of threads will be chosen based  on  the  available  hardware  threads  on  the
              platform on which you generate the model.

       --trace CATEGORY
              Enable  tracing  of specific events while checking. This option is for debugging Rumur itself, and
              lets you generate a verifier that writes events to stderr.  Available event categories are:

                     • handle_reads Reads from variable handles

                     • handle_writes Writes to variable handles

                     • memory_usage Summary of memory allocation during checking

                     • queue Events relating to the pending state queue

                     • set Events relating to the seen state set

                     • symmetry_reduction Events related to the symmetry reduction optimisation

                     • all Enable all of the above

              More than one of these can be enabled at once by passing the --trace argument multiple times. Note
              that  enabling  tracing  will  significantly  slow the verifier and is only intended for debugging
              purposes.

       --value-type TYPE
              Change the C type used to represent scalar values in the generated  verifier.   Valid  values  are
              auto  and the C fixed-width types, int8_t, uint8_t, int16_t, uint16_t, int32_t, uint32_t, int64_t,
              and uint64_t. The type you select is mapped to its fast equivalent  (e.g.  int_fast8_t)  and  then
              used in the verifier. The default is auto that selects the narrowest type that can contain all the
              scalar types in use in your model. It is possible  that  your  model  does  some  arithmetic  that
              temporarily  exceeds  the bound of any declared type in your model, in which case you will need to
              use this option to select a wider type. However, this is not a common case.

       --verbose or -v
              Output informational messages while generating the verifier.

       --version
              Display version information and exit.

SMT OPTIONS

       If you have a Satisfiability Modulo Theories (SMT) solver installed, Rumur can use it  to  optimise  your
       model  while  generating  a  verifier.  This functionality is not enabled by default, but you can use the
       following options to configure  Rumur  to  find  and  use  your  SMT  solver.  Some  examples  of  solver
       configuration:

              # for Z3 with a 5 second timeout
              rumur --smt-path z3 --smt-arg=-smt2 --smt-arg=-in --smt-arg=-t:5000 ...

              # for CVC4 with a 5 second timeout
              rumur   --smt-path   cvc4   --smt-prelude   "(set-logic   AUFLIA)"   --smt-arg=--lang=smt2  --smt-
              arg=--rewrite-divk --smt-arg=--tlimit=5000 ...

       For other solvers, consult their manpages or documentation to determine what command line parameters they
       accept.  Then use the options described below to instruct Rumur how to use them. Note that Rumur can only
       use a single SMT solver and specifying the --smt-path option multiple times will  only  retain  the  last
       path given.

       --smt-arg ARG
              A  command  line  argument  to pass to the SMT solver. This option can be given multiple times and
              arguments are passed in the order listed. E.g. if you  specify  --smt-arg=--tlimit  --smt-arg=5000
              the solver will be called with the command line arguments --tlimit 5000.

       --smt-bitvectors [off | on]
              Select  whether  simple  types  (enums,  ranges,  and  scalarsets) are translated to bitvectors or
              unbounded integers when passed to the solver. By default,  unbounded  integers  are  used  (--smt-
              bitvectors  off).  If  you turn this option on, 64-bit vectors are used instead. Whether integers,
              bitvectors, or both are supported will depend on your solver as well as  the  SMT  logic  you  are
              using.

       --smt-budget MILLISECONDS
              Total  time  allotted  for running the SMT solver. That is, the time the solver will be allowed to
              run for over multiple executions. This defaults to 30000, 30 seconds. So if the solver runs for 10
              seconds  the first time it is called, then 5 seconds the second time it is called, then 20 seconds
              the third time it is called, it will not be called again. Note that Rumur trusts the SMT solver to
              limit itself to a reasonable timeout per run, so its final run can exceed the budget. You may want
              to use the --smt-arg option to pass the SMT solver a timeout limit if it supports one.

       --smt-path PATH
              Command or path to the SMT solver. This will use your  environment's  PATH  variable,  so  if  the
              solver  is  in  one of your system directories you can simply provide the name of its binary. Note
              that this option has no effect unless you also pass --smt-simplification on.

       --smt-prelude TEXT
              Text to emit when communicating with the solver prior to sending the actual  problem  itself.  You
              can  use  this to set a solver logic or other options. This option can be given multiple times and
              each argument will be passed to the solver on a separate line.

       --smt-simplification [off | on]
              Disable or enable using the SMT solver to simplify the input model. By default, this is automatic,
              in that it is turned on if you use any of the other SMT options or off if you do not use them.

LEGACY OPTIONS

       The following options should no longer be used but are documented here for completeness.

       --smt-logic LOGIC
              Set the target logic used for communication with the SMT solver. This option is deprecated and you
              should use --smt-prelude instead. For example, --smt-prelude AUFLIA.

AUTHOR

       All   comments,   questions   and    complaints    should    be    directed    to    Matthew    Fernandez
       <matthew.fernandez@gmail.com>.

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>

                                                                                                        RUMUR(1)