DragonFly On-Line Manual Pages
SPIN(1) DragonFly General Commands Manual SPIN(1)
NAME
Spin - verification of multithreaded systems
SYNOPSIS
spin -V
spin [ options ] file
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,
nondeterministic case selection, loops, gotos, local and global
variables. It also allows for a concise specification of logical
correctness requirements, including, but not restricted to requirements
expressed in linear 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 (cc -o pan pan.c) to produce an executable
verifier. The online SPIN manuals contain the details on
compilation 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
variables, the 3rd field defines the name of the structure
declaration 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
argument and translates it into Promela syntax (a never claim,
qhich is Promela's equivalent of a Bchi Automaton). The LTL
operators 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
inline specification of ltl formula, in Spin version 6.0.
-F file
Translate the LTL formula stored in file into a never claim.
This behaves identical 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
conventions 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
updates in the output of a simulation run.
-M Produce a message sequence chart in tcl/tk form for a random
simulation or a guided simulation (when combined with --tt), for
the model in file , and display the result with wish. 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 --nn and the integer N. ,TP -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 merging
(-o3) during verification. Turn on rendezvous optimization
(-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
number. For each message parameter, show the message type and
the message channel number and name.
-replay
Replay an error trace found in an earlier verification (see
-search). As with -search, arguments meant for Spin itself
(e.g., -p) can be given before the -replay argument. If the
replay can only be done with the ./pan executable, then
arguments for the replay with the ./pan executable can be given
after the -replay argument.
-search
Compile and run directly. Verificaiton compile-time and runtime
flags can be added after this parameter. Any Spin parse-time
parameters must come before the -search parameter. The actual
command line executed is printed if -v is specified (before the
-search argument).
-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 Print the SPIN version number and exit.
-x Generate transition tables from model and exit (generates,
compiles, and runs pan.c).
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
information that the user wants about a random, guided, or interactive
simulation 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 is interactive, or if option -t or -k file
is added, the simulation is guided.
-b Suppress the execution of printf statements within the model.
-g Show at each time step the current value of global variables.
-l In combination with option -p, show the current value of local
variables of the process.
-p Show at each simulation step which process changed state, and
what source statement was executed.
-r Show all message-receive events, giving the name and number of
the receiving process and the corresponding the source line
number. For each message parameter, show the message type and
the message channel number and name.
-s Show all message-send events.
-v Verbose mode, add some more detail, and generat more hints and
warnings about the model.
SEE ALSO
Online manuals at spinroot.com:
http://spinroot.com/spin/Man/3_SpinGUI.html
http://spinroot.com/spin/Man/4_SpinVerification.html
http://spinroot.com/spin/Man/1_Exercises.html
More background information on the system and the verification process,
can be found in, for instance:
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,
Englewood Cliffs, NJ, 1991.
SPIN(1)