glenda.party
term% ls -F
term% cat index.txt
SPIN(1)                     General Commands Manual                    SPIN(1)

NAME
       spin - verification tool for models of concurrent systems

SYNOPSIS
       spin [ options ] file
       spin -V

DESCRIPTION
       Spin  is  a  tool for analyzing the logical consistency of asynchronous
       systems, specifically distributed software, multi-threaded systems, and
       communication protocols.  A model of  the  system  is  specified  in  a
       guarded  command language called Promela (process meta language).  This
       modeling language supports dynamic creation of processes,  nondetermin‐
       istic  case  selection,  loops,  gotos, local and global variables.  It
       also allows for a concise specification of logical correctness require‐
       ments, including, but not restricted to requirements expressed in  lin‐
       ear temporal logic.

       Given  a  Promela  model  stored in file, spin can perform interactive,
       guided, or random simulations of the system's execution.  It  can  also
       generate  a  C  program that performs an exhaustive verification of the
       correctness requirements for the system.  The  main  options  supported
       are as follows. (You can always get a full list of current options with
       the command "spin --").

       -a     Generate  a  verifier  (a  model checker) for the specification.
              The output is written into a set of C files  named  pan.[cbhmt],
              that  can be compiled (pcc pan.c) to produce an executable veri‐
              fier.  The online spin manuals contain the details  on  compila‐
              tion and use of the verifiers.

       -b     Do not execute printf statements in a simulation run.

       -c     Produce an ASCII approximation of a message sequence chart for a
              random  or  guided  (when  combined with -t) simulation run. See
              also option -M.

       -Dxxx  Pass -Dxxx to the preprocessor (see also -E and -I).

       -d     Produce symbol table information  for  the  model  specified  in
              file.   For  each  Promela  object this information includes the
              type, name and number of elements (if declared as an array), the
              initial value (if a data object) or size (if a message channel),
              the scope (global or local), and whether the object is  declared
              as a variable or as a parameter.  For message channels, the data
              types  of  the  message  fields are listed.  For structure vari‐
              ables, the third field defines the name of the structure  decla‐
              ration that contains the variable.

       -Exxx  Pass xxx to the preprocessor (see also -D and -I).

       -e     If  the  specification  contains  multiple  never claims, or ltl
              properties, compute the synchronous product of  all  claims  and
              write the result to the standard output.

       -f ltl Translate the LTL formula ltl into a never claim.
              This  option reads a formula in LTL syntax from the second argu‐
              ment and translates it into Promela syntax (a never claim, which
              is Promela's equivalent of a Büchi Automaton).  The LTL  opera‐
              tors  are  written:  [] (always), <> (eventually), and U (strong
              until).  There is no X (next) operator, to secure  compatibility
              with  the  partial order reduction rules that are applied during
              the verification process.  If the formula  contains  spaces,  it
              should be quoted to form a single argument to the spin command.
              This  option  has largely been replaced with the support for in‐
              line specification of ltl formula, in Spin version 6.0.

       -F file
              Translate the LTL formula stored in file into a never claim.
              This behaves identically to option -f but will read the  formula
              from the file instead of from the command line.  The file should
              contain  the  formula  as the first line.  Any text that follows
              this first line is ignored, so it can be used to store  comments
              or annotation on the formula.  (On some systems the quoting con‐
              ventions  of  the shell complicate the use of option -f.  Option
              -F is meant to solve those problems.)

       -g     In combination with option -p, print all global variable updates
              in a simulation run.

       -h     At the end of a simulation run, print the value of the seed that
              was used for the random number  generator.   By  specifying  the
              same  seed  with  the  -n  option, the exact run can be repeated
              later.

       -I     Show the result of inlining and preprocessing.

       -i     Perform an interactive simulation, prompting the user  at  every
              execution  step  that  requires  a nondeterministic choice to be
              made.  The simulation proceeds without  user  intervention  when
              execution is deterministic.

       -jN    Skip printing for the first N steps in a simulation run.

       -J     Reverse the evaluation order for nested unless statements, e.g.,
              to match the way in which Java handles exceptions.

       -k file
              Use the file name file as the trail-file, see also -t.

       -l     In  combination  with  option -p, include all local variable up‐
              dates in the output of a simulation run.

       -M     Produce a message sequence chart in Postscript form for a random
              simulation or a guided simulation (when combined with  -t),  for
              the  model in file, and write the result into file.ps.  See also
              option -c.

       -m     Changes the semantics of send events.  Ordinarily, a send action
              will be (blocked) if the target message buffer  is  full.   With
              this option a message sent to a full buffer is lost.

       -nN    Set  the  seed  for  a random simulation to the integer value N.
              There is no space between the -n and the integer N.

       -N file
              Use the never claim stored in file to generate the verified (see
              -a).

       -O     Use the original scope rules from pre-Spin version 6.

       -o[123]
              Turn off data-flow optimization ( -o1).  Do not hide  write-only
              variables ( -o2 ) during verification.  Turn off statement merg‐
              ing  (  -o3 ) during verification.  Turn on rendezvous optimiza‐
              tion ( -o4 ) during verification.  Turn on case caching ( -o5  )
              to reduce the size of pan.m, but losing accuracy in reachability
              reports.

       -O     Use the scope rules pre-version 6.0. In this case there are only
              two  possible levels of scope for all data declarations: global,
              or proctype local.  In version 6.0 and later there  is  a  third
              level of scope: inlines or blocks.

       -Pxxx  Use  the command xxx for preprocessing instead of the standard C
              preprocessor.

       -p     Include all statement executions in  the  output  of  simulation
              runs.

       -qN    Suppress  the  output  generated for channel N during simulation
              runs.

       -r     Show all message-receive events, giving the name and  number  of
              the receiving process and the corresponding the source line num‐
              ber.   For each message parameter, show the message type and the
              message channel number and name.

       -s     Include all send operations in the output of simulation runs.

       -T     Do not automatically indent the printf output of process i  with
              i tabs.

       -t[N]  Perform  a  guided  simulation,  following the [Nth] error trail
              that was produces by an earlier verification run, see the online
              manuals for the details on verification. By  default  the  error
              trail  is  looked  for  in  a file with the same basename as the
              model, and with extension .trail.  See also -k.

       -v     Verbose mode, add some more detail, and generate more hints  and
              warnings about the model.

       -V     Prints the spin version number and exit.

       With  only a filename as an argument and no option flags, spin performs
       a random simulation of the model specified in the file.  This  normally
       does  not  generate  output, except what is generated explicitly by the
       user within the model with printf statements, and  some  details  about
       the  final  state  that is reached after the simulation completes.  The
       group of options -bgilmprstv is used to set the desired level of infor‐
       mation that the user wants about a random, guided, or interactive simu‐
       lation run.  Every line of output normally contains a reference to  the
       source  line  in  the specification that generated it.  If option -i is
       included, the simulation i interactive, or if option -t  or  -kfile  is
       added, the simulation is guided.

SOURCE
       /sys/src/cmd/spin

SEE ALSO
       http://spinroot.com/spin/Man/
       G.J.  Holzmann,  The  Spin Model Checker (Primer and Reference Manual),
       Addison-Wesley, Reading, Mass., 2004.
       â, ‘The model checker Spin,' IEEE Trans. on SE, Vol,  23,  No.  5,  May
       1997.
       â,  ‘Design and validation of protocols: a tutorial,' Computer Networks
       and ISDN Systems, Vol. 25, No. 9, 1993, pp. 981-1017.
       â, Design and Validation of Computer Protocols, Prentice  Hall,  Engle‐
       wood Cliffs, NJ, 1991.

                                                                       SPIN(1)