add formal verif
[lttv.git] / trunk / verif / Spin / Doc / V2.Updates
diff --git a/trunk/verif/Spin/Doc/V2.Updates b/trunk/verif/Spin/Doc/V2.Updates
new file mode 100755 (executable)
index 0000000..bfca262
--- /dev/null
@@ -0,0 +1,1163 @@
+Distribution Update History of the SPIN sources
+===============================================
+
+==== Version 2.0 - 1 January 1995 ====
+
+The version published in the first printing of
+``Design and Validation of Computer Protocols''
+is nominally SPIN Version 1.0.
+
+SPIN version 2.0 includes a partial order reduction
+mode and many extensions and revisions that are
+documented in the file Doc/WhatsNew.ps of the
+distribution.  This file lists all updates
+made to these sources after the first release.
+
+===== 2.0.1 - 7 January 1995 ====
+
+An automatic shell script `upgrades' in the main
+SPIN directory will be maintained from now on.
+For all future updates it will suffice to retrieve
+just the upgrades file, and execute it in the Src
+directory to apply all changes.  The tar file will
+of course be kept up to date at all times as well.
+
+Changes in this update:
+1. MEMCNT can now grow larger than 2^31 - for those
+   happy users that have a machine with more than
+   a Gigabyte of main memory.
+   (N.B. this fix was made and distributed before the
+   upgrades file was started - so this one change isn't
+   available in that way)
+2. Change in the lexical analyzer to accept redundant
+   text at the end of preprocessor directives, that
+   some versions of cpp may produce.
+
+===== 2.0.2 - 10 January 1995 ====
+
+Two small updates to pangen1.h to avoid problems on
+some systems when (1) compiling pan.c with profiling
+enabled, or (2) when using the new predefined function
+enabled() in combination with partial order reduction.
+
+===== 2.0.3 - 12 January 1995 ====
+
+At request, added a printout of the mapping from label
+names as used in the Promela source to state numbers as
+used in the verifier to spin option -d.
+to see just this new part of the listing, say:
+       spin -d spec | grep "^label"
+first column is the keyword "label"
+second column is the name of the label
+third column is the state number assigned
+last column is the name of the proctype in which the
+label is used.
+the same state numbers and transitions are
+also used by the verifier, and can be printed as
+before with:
+       spin -a spec; cc -o pan pan.c; pan -d
+
+===== 2.0.4 - 14 January 1995 ====
+
+With the introduction of `else' a new opportunity for
+silly syntax mistakes is created.  it is all too tempting
+to write:
+       if
+       :: condition ->
+               more
+       :: else
+               something
+       fi
+and forgot the statement separator that is required between
+the `else' and `something'
+this likely typo is easy to recognize, and is silently
+repaired and accepted by the new lexical analyzer.
+
+===== 2.0.5 - 17 January 1995 ====
+
+transition labels for send and receive operations
+now preserve all the information from the source text
+(i.e., the symbolic names for all message parameters used).
+
+===== 2.0.6 - 27 January 1995 ====
+
+two fixes, both caught by Roberto Manione and Paola:
+- deeply nested structures (more than two levels)
+  could give syntax errors, and
+- the transition label of an `else' statement wasn't
+  always printed correctly in the traces.
+
+===== 2.0.7 - 2 February 1995 ====
+
+- another fix of the implementation of data structures
+  to make references of deeply nested structure work
+  the way they should
+- removed suboptimal working of safety marking of
+  atomic sequences.  reductions are now slightly
+  larger in some cases.
+- improved boundary checking of array indexing also
+  slightly (made it more efficient for some cases)
+
+===== 2.0.8 - 7 February 1995 ====
+
+- adjusted line number counting slightly in spinlex.c
+  to avoid annoying off-by-one errors.
+
+===== 2.0.9 - 9 February 1995 ====
+
+- removed a bug in the transition structures that are
+  generated for d_steps. (small fix in pangen2.h)
+
+===== 2.1 - 15 February 1995 ====
+
+- removed two errors in the implementation of d_steps:
+   one was related to the treatment of `else' during verification
+   another related to the execution of d_steps in guided simulations
+- improved the treatment of rendez-vous in SPIN verbose printings
+   improves match with xspin; avoids misinterpretation of pids
+- made mtype fields be interpreted uniformly in all SPIN modes
+- added message sequence charts in xspin
+- removed stutter-closedness checks from pangen2.h (no change
+  in functionality, just replaced a dubious check with a more
+  precise descriptive warning)
+
+===== 2.1.1 - 17 February 1995 ====
+
+- instantiated channels declared inside typedefs weren't
+  properly initialized
+
+===== 2.2 - 19 February 1995 ====
+
+- main extension of functionality:
+  added an interactive simulation mode (both in xspin and in spin itself)
+  that will be described at greater length in Newsletter #4.
+  also improved some of the printouts for verbose simulation runs.
+
+- added a precompiler directive -DREACH to force exploration of
+  all states reachable within N execution steps from the initial
+  system state, when the search is deliberately truncated with -mN.
+  normally such a truncated search does not give that guarantee.
+  (note that if a state at level N-1 is also reachable from the
+  initial state within 1 execution step, but it is reached via the
+  longer path first in the DFS - then all successors via the shorter
+  path would normally not be explored, because they succeed a
+  previously visited state. with -DREACH we remember the depth at
+  which a state was visited, and consider it unvisited when encountered
+  on a shorter path.  not compatible with BITSTATE - for the obvious
+  reason (no room to store the depth counts).
+
+- fixed a bug in pangen[24].c that could cause an internal consistency check
+  in the runtime verifiers to fail, and cause the run to terminate with
+  the error `sv_save failed'
+
+===== 2.2.1 - 23 February 1995 ====
+
+- small refinements to interactive simulation mode (xspin and spin)
+
+===== 2.2.2 - 24 February 1995 ====
+
+- added missing prototype in 2.2.1, and fix parameter mistake in a
+  function that was added in 2.2.1
+
+===== 2.2.3 -  3 March 1995 ====
+
+- bug fix in implementation of d_step (dstep.c)
+  and some mild improvements in error reporting
+
+===== 2.2.4 -  9 March 1995 ====
+
+- made sure process numbers assigned by simulator
+  are always the same as those assigned by the verifier
+- by request: added a binary exclusive-or operator ('^')
+
+===== 2.2.5 -  14 March 1995 ====
+
+- removed error in treatment of `else' during random simulation.
+  `else' was incorrectly considered to be executable also
+  in the middle of a rendez-vous handshake. no more.
+
+===== 2.2.6 -  21 March 1995 ====
+
+- made sure that variable declarations are reproduced in
+  the pan.c sources in the same order as they are given
+  in the original promela specification.  this matters
+  in cases where new variables are initialized with each
+  others values.
+- better error handling when a reference is made erroneously
+  to an assumed element of an undeclared structure
+
+===== 2.2.7 -  23 March 1995 ====
+
+- catches more cases of blocking executions inside d_step
+  sequences
+- better handling of timeout, when using both blocking
+  atomic sequences and never claims.  the behavior of the
+  simulator and the verifier didn't always match in these
+  cases.  it does now.
+
+===== 2.2.8 -  30 March 1995 ====
+
+- inside dstep sequences `else' wasn't translated correctly
+
+===== 2.2.9 -  12 April 1995 ====
+
+- removed a mismatch between spin and xspin in dataflow output
+- clarified the scope of dataflow checks spin's -? response
+- fixed a typo that could confuse pid assignments when -DNOCLAIM is used
+- improved some of spin's outputs a little for xspin's benefit
+
+===== 2.2.10 -  18 April 1995 ====
+
+- removed a redundancy in the creation of channel templates
+  during the generation of a verifier with spin option -a
+
+===== 2.3.0 -  19 April 1995 ====
+
+- an extension of functionality.  until now the simulator would execute
+  a receive test (for instance: q?[var1,var2] ) erroneously with
+  side-effects, possibly altering the values of the variables.
+  any boolean condition in Promela, however, must be side-effect free
+  and therefore the verifier had the correct implementation (no value
+  transfers in a test of executability of this type)
+  michael griffioen noted that the poll of a message in a channel was
+  nonetheless usefull.  this leads to a new type of operation in Promela.
+  pending more thorough documentation, here's an example of
+  each of the existing ones:
+
+  A.   q?var1,const,var2       - fifo receive (constants must be matched)
+                                 if successful, the message is removed
+                                 from the channel
+  B.   q??var1,const,var       - random receive (as A., but from any slot
+                                 that has a matching message, checked in
+                                 fifo order) if successful, the message is
+                                 removed from the channel
+  C.   q?[var1,const,var2]     - boolean test of executability of type A receive.
+  D.   q??[var1,const,var2]    - boolean test of executability of type B receive.
+  E.   q?<var1,const,var2>     - fifo poll, exactly as A, but the message is
+                                 not removed from the channel
+  F.   q??<var1,const,var2>    - random receive poll, exactly as B, but message
+                                 not removed from the channel
+
+  there are still only two different ways to test the executability of a
+  receive operation without side-effects (be it a normal receive or a poll
+  operation)
+  the two new operations of type E and F allow one to retrieve the contents
+  of a message from a channel, without altering the state of the channel.
+  all constant fields must of course still be matched, and if no variables
+  are present, an operation of type E has the same effect as one of type C.
+  (and similarly for types F and D)
+
+===== 2.3.1 -  20 April 1995 ====
+
+- slightly more conservative treatment for the change from 2.2.10
+  some redundancy is caused by the spec, and now flagged as warnings.
+  using a \ 5typedef structure that contains an initialized channel in
+  a formal parameter list, for instance, is always reduncant and uses
+  up channel templates in the verifier - without otherwise doing harm,
+  but there is a limit (255) to the number of templates that can exist.
+  the limit is now also checked and a warning is given when it is exceeded.
+
+===== 2.3.2 -  25 April 1995 ====
+
+- adjustment of output format of guided simulation to match a recent
+  change in Xspin (better tracking of printfs in MSC's)
+
+===== 2.3.3 -  29 April 1995 ====
+
+- bit or bool variables cannot be hidden - this is now reported as a
+  syntax error if attempted
+- the reporting of the options during interactive simulations is
+  improved - mysterious options, such as [ATOMIC] are now avoided better
+
+===== 2.3.4 -  1 May 1995 ====
+
+- added the keyword D_proctype as an alternative to proctype to
+  indicate that all the corresponding processes are expected to
+  be deterministic.  the determinism is not enforced, but it is
+  checked by the verifier.  no other difference exists.  a simulation
+  will not pick up violations of this requirement.
+
+===== 2.3.5 -  13 May 1995 ====
+
+- the check for enforcing determinism (2.3.4) was not placed
+  correctly.  it is now.
+
+===== 2.3.6 -  18 May 1995 ====
+
+- removed bug in code generation for arrays of bools
+- moved a debug-printf statement
+
+===== 2.3.7 -  18 May 1995 ====
+
+- removed bug in testing enabledness of run statements
+  during interactive simulations
+
+===== 2.3.8 -  19 May 1995 ====
+
+- small change in bitstate mode.  the verifier checks if a
+  new state is previously visited, or appears on the dfs stack.
+  (information about presence in the stack is only needed to
+   enforce the partial order reduction rules)
+  in both cases (in bitstate mode) the check is done via hashing
+  into a bitarray; with the array for the statespace much larger
+  than the one for the stack.
+  so far, if either match succeeded, the search was truncated.
+  any match in the stack-array that is combined with no-match in
+  the statespace array, however, is necessarily caused by a
+  hash-collision (i.e., is a false match) and can be discarded.
+  the coverage of bitstate runs should improve slightly by this
+  change.  nothing else will be affected.
+
+===== 2.4.0 -  22 May 1995 ====
+
+- new functionality: there is a new option to SPIN that
+  can be used in guided simulations (that is: in combination
+  with the option -t, when following a error trail produced
+  by one of the verifiers generated by SPIN)
+  for very lengthy trails, it can take a while to reach an
+  interesting point in the sequence.  by adding the option
+  -jN one can now skip over the first N steps in the trail
+  (more precisely: supress the printing during those steps)
+  and quickly get to the interesting parts.
+  for instance:
+       spin -t -p -g -l -v -j1000 spec
+  skips the first 1000 steps and prints the rest.
+  caveat: if there are fewer than 1000 steps in the trail,
+  only the last state of the trail gets printed.
+- avoiding some more redundant printouts during guided simulations
+  will also help to speed up the browsing of error trails with XSPIN
+- the extension is supported in the new version of XSPIN as well
+- the new version of XSPIN also supports BREAKPOINTS during
+  all types of simulation
+  breakpoints are supported via the MSC printf statements
+  *    including a printf that starts with the prefix "MSC: "
+       in a Promela Model will cause the remainder of the line
+       printed to be included as a box inside the MSC charts
+       maintined by XSPIN.
+  *    if the remainder of such a line contains the capitalized word
+       BREAK, the simulator will pause at that line and wait for
+       the user to reactivate the run (single step or run)
+
+===== 2.4.1 -  4 June 1995 ====
+
+- added runtime option -e to verifiers produced by SPIN.
+  with this option all errors encountered during the verification
+  are saved in a trail file - up to the limit imposed by -cN
+  (the default is one trail).  the first trail has the extension .trail,
+  as before (which is also the only extension expected right now under
+  the guided simulation option -t of SPIN). subsequent trails have
+  extensions .trail1, .trail2, ... etc.
+  use this option in combination with -cN
+       using -c5 -e will produce the first 5 trails,
+       using -c0 -e will produce all trails.
+- modified Xspin to work also with the new Tcl7.4/Tk4.0, which is now
+  in beta release.  the changes should not affect the working under
+  the current version Tcl7.3/Tk3.6
+- there is now a file called `version_nr' in the directory /netlib/spin
+  on the distribution server.  the file contains just the version
+  number from the currently distributed SPIN sources (avoids having to
+  download larger files to find out if anything changed)
+- added runtime option -hN to choose another than the default hash-function
+  (useful in bitstate mode.  N must be an integer between 1 and 32)
+- improved the implementation of the new runtime option -s (for selecting
+  single-bit hashing instead of the default double-bit hashing)
+  especially useful in combination with -hN for sequential multihashing
+  techniques (iterative approximation of exhaustive searches for very large
+  problem sizes)
+- starting with this version of Xspin there will also be a separate upgrades
+  script to keep the Tcl/Tk files up to date.
+
+===== 2.4.2 -  11 June 1995 ====
+
+- so far, variables were created and initialized in the simulator
+  as late as possible:  upon the first reference.  a variable that
+  is never referenced was therefore never created - which is some
+  sense of economy.  however, if the local is initialized with an
+  expression that includes references to other variables (local or
+  global) then those other variables might well change value before
+  the first reference to the initialized local is made - and thus
+  the local might obtain an unexpected initial value.
+  the error was caught by Thierry Cattel - and lazy variable creation
+  is now abandoned.  the verifier is unaffected by this fix -- it
+  already id the right thing (instant creation of all locals on process
+  initialization).
+- channels deeply hidden inside structures were not properly logged
+  in the partial order reduction tables.  it could cause an abort of
+  a verification run with the mysterious error "unknown q_id, q_cond."
+  it works properly now.  error caught by Greg Duval.
+- made a small change in output format (comments only) for remote
+  references
+- made the new runtim option -e (from version 2.4.1) also accessible
+  from within XSPIN
+- changed the MSC canvas in the simulation mode of XSPIn to no longer
+  be self-scrolling (it defeated any attempt from the user to select
+  other portions of the MSC to ponder, other than the tail, during a
+  run).  also made the message transfer arrows wider - and added an
+  option to replace the symbolic step numbers in the MSC's with source
+  text.
+
+===== 2.5 -  7 July 1995 ====
+
+Fixes
+- values of rendez-vous receives were printed incorrectly in printouts
+  of spin simulation runs - this could confuse xspin; the symptom was that
+  some rendez-vous send-recv arrows were not drawn in the MSC displays.
+- rendez-vous operations that guarded escapes did not always execute
+  properly in random simulations.
+- in xspin, the boxes produced by an MSC printf could lose its text
+  after the cursor would pass over it - that's no longer the case
+- the use of a remote references used to disable the partial order
+  reduction algorithm.  instead, such references now automatically label
+  the transition that enters or exits from the corresponding process state
+  as unsafe.  this suffices to preserve the use of the partial order
+  reduction.  (proposed by Ratan Nalumasu.)
+
+Small Changes
+- added a print line in verbose output for process creations - as well
+  as process terminations.  it will be used in a future version of xspin.
+- made all xspin verification run timed - the user+system time info
+  appears in the xspin logs
+- on aborted verification runs, xspin will now also print the partial
+  information gathered up to the point of the abort
+- slightly changed the way aborts are handled in xspin
+- never claims containing assignments (i.e., side-effects) can be useful
+  in some cases.  spin will still generate warnings, but allows the user
+  to ignore them (i.e., the exit status of spin is no longer affected)
+- in simulation mode - xspin now pays attention to filenames and will not
+  try to hilight lines in files that are not visible in the main text window
+- added compile-time directive -DNOFAIR to allow compilation of a verifier
+  if it is known that the weak-fairness option will not be used -- this
+  avoids some memory overhead, and runs slightly faster.
+  the fastest run can be obtained by compiling -DNOCOMP -DNOFAIR (turning
+  off the state compression and the weak fairness related code)
+  the most memory frugal run (apart from the effects of -DREDUCE) can be
+  obtained by compiling with just -DNOFAIR (and leaving compression turned
+  on by default)  note that memory consumed also goes up with the value
+  provided for the -m option (the maximum depth of the stack)
+- added a file Doc/Pan.Directives with an overview of all user definable
+  compile-time directives of the above type.
+
+Extension
+- added a mechanism to define process priorities for use during random
+  simulations - to make high priority processes more likely to execute
+  than low priority processes.
+  as alternatives to the standard:
+       run pname(...)
+       active proctype pname() { ... }
+  you may now add a numeric execution priority:
+       run pname(...) priority N
+  and/or
+       active proctype pname() priority N
+  (with N a number >= 1)
+  the default execution priority is 1; a higher number indicates a
+  higher priority.  for instance, a priority 10 process is 10x more
+  likely to execute than a priority 1 process, etc.
+  the priority specified at the proctype declaration only affects the
+  processes that are initiated through the `active' prefix
+  a process instantiated with a run statement always gets the priority
+  that is explicitly or implicitly specified there (the default is 1).
+  the execution priorities have no effect during verification, guided,
+  or interactive simulation.
+- added an example specification file (Test/priorities) to verify the
+  correct operation of the execution priorities
+
+===== 2.5.1 -  12 July 1995 ====
+
+- some tweaks to correct the last update (a simulation run could
+  fail to terminate - and xspin could fail to detect the zero exit
+  status of spin after warning messages are printed)
+
+===== 2.6 -  16 July 1995 ====
+
+- added a new option for executable verifiers - to compute the effective
+  value range of all variables during executions.
+  the option is enabled by compiling pan.c with the directive -DVAR_RANGES
+  values are tracked in the range 0..255 only - to keep the memory
+  and runtime overhead introduced by this feature reasonable.
+  (the overhead is now restricted to roughly 40 bytes per variable -
+   it would increase to over 8k per variable if extended to the full
+   range of 16-bit integers)
+- a new option in the validation panel to support the above extension
+  was added
+- xspin now supports compile-time option -DNOFAIR to produce faster
+  verifiers when the weak fairness option is not selected
+- added an example in directory Test to illustrate dynamic creation
+  of processes (Test/erathostenes)
+- removed an error message that attempted to warn when a data structure
+  that contained an initialized channel was passed to a process as a
+  formal parameter.  it leads to the creation of a redundant channel,
+  but is otherwise harmless.
+- changed the data types of some option flags from int to short
+
+===== 2.6.1 -  18 July 1995 ====
+
+- option -jN (introduced in version 2.4.0) -- to skip the verbose
+  printouts for the first N execution steps -- now also works in
+  random simulation mode.
+  only process creations and terminations are still always printed
+- channel names are no longer included in the -DVAR_RANGES output
+  at least not by default (see version 2.6 - above)
+  to still include them, generate the verifier in verbose mode
+  as ``spin -a -v spec'' instead of the default ``spin -a spec''
+- predefined variable _last was not quite implemented correctly
+  in the verifier (the error was harmless, but if you tried to write
+  specifications that included this construct, you may have had
+  more trouble than necessary getting it to work properly)
+
+===== 2.7.Beta -  24 July 1995 ====
+
+Fixes
+- when an atomic sequence blocks, the process executing that sequence
+  loses control, and another process can run.  when all processes block,
+  the predefined variable 'timeout' becomes true, and all processes again
+  get a chance to execute.  if all processes still block - we have reached
+  an end-state (valid or invalid, depending on how states are labeled).
+  until now, timeout was allowed to become true before an atomically
+  executing process could lose control - this is not strictly conform the
+  semantics given above, and therefore no longer possible.
+- it is now caught as a runtime error (in verification) if an attempt
+  is made to perform a rendez-vous operation within a d_step sequence.
+- it is also caught as an error if a 'timeout' statement is used inside
+  a d_step sequence (it may be used as the first statement only)
+- an else statement that appears jointly with i/o statements in
+  a selection structure violates the rules of a partial order
+  reduction.  a warning is now included if this combination is seen, both
+  at compile-time and at run-time.  the combination should probably be
+  prevented alltogether since its semantics are also not always clear.
+- one more correction to the implementation of 'else' inside dsteps
+  to avoid a possibly unjustified error report during verification
+- a previously missed case of the appearance of multiple 'else' statements
+  in selection structures is now caught and reported
+- fixed a missing case were process numbers (_pid's) did not match
+  between a verification run and a guided simulation run. (if a never
+  claim was used, there could be an off-by-one difference.)
+- rendez-vous operations are now offered as a choice in interactive
+  simulation mode only when they are executable - as they should be
+- the introduction of active proctypes in 2.5 introduced an obscure
+  line-number problem (after the first active proctype in a model
+  that contains initialized local vars, the line numbers could be
+  off). it's fixed in this version.
+
+Extensions
+- The main extension added in this release is the inclusion of an
+  algorithm, due to Gerth, Peled, Wolper and Vardi, for the translation
+  from LTL formulae into Promela never claims.  The new options are
+  supported both in SPIN directly, and from XSPIN's interface.
+
+- added the option to specify an enabling condition for each
+  proctype.  the syntax is as follows:
+        proctype name(...) provided ( expression )
+        {
+                ...
+        }
+  where the expression is a general side-effect free expression
+  that may contain constants, global variables, and it may contain
+  the predefined variables timeout and _pid, but not other local
+  variables or parameters, and no remote references.
+
+  the proctype may be declared active or passive.  no enabling
+  conditions can be specified on run statements unfortunately.
+  the provided clauses take effect both during simulation runs
+  and during verification runs.
+
+- extended XSPIN with a barchart that can give a dynamic display
+  of the relative fraction of the system execution that is used by
+  each process.  modified the layout of the Simulation option panel,
+  to make some of the runtime display panels optional.
+
+- added a <Clear> button to most text windows (to clear the contents
+  of the display)
+
+- added <Larger> and <Smaller> scaling buttons to canvas displays
+  (that is: the FSM view displays and the MSC display).  the buttons
+  show up when the image is complete (e.g., when the message sequence
+  chart has been completed) - so that it can be scaled to size as a
+  whole.
+
+- added new <Help> buttons, with matching explanations, to most display
+  panels - and updated and extended the help menus.
+
+===== 2.7 -  3 August 1995 ====
+
+- fixed possible memory allignment problem on sun sytems
+- several fine tunings of xspin
+- made it possible to let the vectorsize get larger than 2^15 bytes
+  to support very large models
+- a provided clause has no effect inside d_step sequences, but it
+  is looked at during atomic sequences.  this rule is now enforced
+  equally in simulation and validation.
+- the use of enabled() and pc_value() outside never claims now triggers
+  a warning instead of an error message (i.e., it is now accepted).
+  in models with synchronous channels, the use of enabled() still makes
+  verification impossible (both random and interactive simulations will
+  work though)
+- added an option to `preserve' a message sequence chart across
+  simulation runs (by default, all remnants of an old run are removed)
+
+===== 2.7.1 -  9 August 1995 ====
+
+- removed bug in the code that implements the compile time directive
+  to verifier source -DNOFAIR, which was introduced in version 2.5,
+  (and picked up starting with version 2.6 also via xspin).
+
+===== 2.7.2 -  14 August 1995 ====
+
+- the LTL formula parser accidentily swapped the arguments of U and V
+  operators.  it does it correctly now.  the associativity of U and
+  V now defaults to left-associative.
+- arithmetic on channel id's was so far silently condoned.
+  it is now flagged as an error.  it is still valid to say: c = d,
+  if both c and d are declared as chan's, but d may no longer be
+  part of an expression.
+- unless operators now distribute properly to (only) the guard of
+  d_step sequences (but not into the body of the d_step).
+
+===== 2.7.3 -  15 August 1995 ====
+
+- tweek in implementation of provided clauses - to make it possible
+  to use `enabled()' inside them.
+
+===== 2.7.4 -  25 September 1995 ====
+
+- fixed a small omission in the implementation of dsteps
+- allowed `else' to be combined with boolean channel references
+  such as len and receive-poll
+- added some compiler directives for agressively collapsing
+  the size of state vectors during exhaustive explorations.
+  this option is still experimental
+- made some cosmetic changes in the look and feel of xspin
+
+===== 2.7.5 -  7 October 1995 ====
+
+- the value returned by a run statement triggered and
+  unwarranted error report from spin, if assigned to a variable
+- xspin didn't offer all possible choices in the menus, when
+  used in interactive simulation mode
+- somewhat more careful in closing file descriptors once they
+  are no longer needed (to avoid running out on some systems)
+- some small cosmetic changes in xspin (smaller arrows in the
+  message sequence chart - to improve readability)
+
+===== 2.7.6 -  8 December 1995 ====
+
+- added a compiler directive PC to allow for compiling the
+  SPIN sources for a PC.  (this is only needed in the makefile
+  for spin itself - not for the pan.? files.)
+  if you generate a y.tab.c file with yacc on a standard Unix
+  machine, you must replace every occurrence of y.tab.[ch]
+  with y_tab.[ch] in all the spin sources as well before compiling.
+  some of the source file names also may need to be shortened.
+- some syntax errors reported by spin fell between the cracks
+  in xspin simulations.  they are now correctly reported in the
+  simulation window and the log window.
+- in interactive simulation mode - typing `q' is now a recognized
+  way to terminate the session
+- option -jN (skip output for the first N steps) now also works
+  for interactive simulations.  the first N steps are then as in
+  a random simulation.
+- FSMview in xspin is updated to offer also the statemachine
+  view for never claims - and to suppress the one for an init
+  segment, if none is used
+- fixed a bug in implementation of hidden structures - some of
+  the references came out incorrectly in the pan.c code
+
+===== 2.7.7 -  1 February 1996 ====
+
+- made it possible to combine the search for acceptance cycles
+  with one for non-progress cycles, to find cycles with at least
+  one accepting state and no progress states.
+  the combined search is compatible with -f (weak fairness).
+  [note added at 2.8.0 -- this wasn't completely robust, and
+   therefore undone in 2.8.0]
+- added the explicit choice for the specification of a positive
+  or a negative property in LTL interface to xspin
+- fixed a bug in the ltl translator (it failed to produce the correct
+  automaton for the right-hand side of an until-clause, if that clause
+  contained boolean and-operators)
+- in non-xspin mode, process states are now identified as <endstates>
+  (where applicable) in the simulation trails
+- it is now flagged as an error if a `run' statement is used
+  inside a d_step sequence
+- added two new options ( -i and -I ) for the generated verifiers
+  (pan -i / pan -I).  recommended compilation of pan.c is with -DREACH
+  for exhaustive mode (-DREACH has no effect on BITSTATE mode).
+  option -i will search for the shortest path to an error.
+  the search starts as before - but when an error is found, the
+  search depth (-m) is automatically truncated to the length of that
+  error sequence - so that only shorter sequences can now be
+  found.  the last sequence generated will be the shortest one possible.
+  option -I is more aggressive:  it halves the search depth
+  whenever an error is found, to try to generate one that is at most
+  half the length of the last generated one.
+  if no errors are found at all, the use of -i or -I has no effect on
+  the coverage of search performed (but the effect of using -DREACH
+  is an increase in memory and time used, see the notes at version 2.2).
+
+===== 2.7.8 -  25 February 1996 ====
+
+Extensions
+- a new runtime option on the verifiers produced by Spin is -q
+  it enforces stricter conformance to what is promised in the book.
+  by default, the verifiers produced by Spin require each process to have
+  either terminated or be in a state labeled with an endstate-label, when
+  the system as a whole terminates.   the book says that for such a state
+  to be valid also all channels must be empty.  option -q enforces that
+  stricter check (which is not always necessary).  the option was suggested
+  by Pim Kars of Twente Univ., The Netherlands.
+- `mtype' is now a real data-type, that can be used everywhere a `bit'
+  `byte' `short' or `int' data-type is valid.
+  variables of type `mtype' can be assigned symbolic values from the range
+  declared in mtype range definitions (i.e.: mtype = { ... }; ).
+  the value range of an mtype variable (global or local) remains equal
+  to that of a `byte' variable (i.e., 0..255).
+  for instance:
+       mtype = { full, empty, half_full };
+       mtype glass = empty;
+  the extension was suggested by Alessandro Cimatti, Italy.
+- the formfeed character (^L or in C-terms: \f) is now an acceptable
+  white space character -- this makes it easier to produce printable
+  promela documents straight from the source (also suggested by Cimatti).
+- a new predefined and write-only (scratch) variable is introduced: _
+  the variable can be assigned to in any context, but it is an error to
+  try to read its value. for instance:
+       q?_,_,_;        /* to remove a message from q */
+       _ = 12;         /* assign a value to _ (not very useful) */
+  the value of _ is not stored in the state-vector
+  it may replace the need for the keyword `hidden' completely
+  the syntax was suggested by Norman Ramsey (inspired by Standard ML)
+
+Fixes
+- the FSM-view mode in xspin wasn't very robust, especially when moving
+  nodes, or changing scale.  it should be much better now.  button-1 or
+  button-2 can move nodes around.  click button-1 at any edge to see
+  its edge label (it no longer comes up when you hover over the edge -
+  the magic point was too hard to find in many cases).
+- fixed bug in processing of structure names, introduced in 2.7.5, caught
+  by Thierry Cattel, France.
+- trying to pass an array hidden inside a structure as a parameter
+  to a process (in a run statement) was not caught as a syntax error
+- trying to pass too many parameters in same also wasn't caught
+- in interactive mode, the menus provided by xspin were sometimes
+  incorrect for interactions in a rendez-vous system, caught by Pim Kars.
+
+===== 2.8.0 -  19 March 1996 ====
+
+- new version of the Spin sources that can be compiled, installed, and
+  used successfully on PC systems running Windows95.
+  (Because of remaining flaws in the latest Tcl/Tk 7.5/4.1 beta 3
+   release, Xspin will not run on Windows 3.1 systems.  Spin itself
+   however will work correctly on any platform.)
+  to compile, you'll need the public domain version of gcc and yacc for PCs,
+  (see README.spin under Related Software, for pointers on where to
+  get these if you don't already have them)
+
+  to use Spin on a PC, compile the Spin sources with directive -DPC
+  (if you have no `make' utitility on the PC, simply execute the
+  following three commands to obtain a spin.exe
+       byacc -v -d spin.y
+       gcc -DPC *.c -o spin
+       coff2exe spin
+  alternatively, use the precompiled spin.exe from the distribution
+  (contained in the pc_spin280.zip file)
+
+- small extension of xspin - lines with printf("MSC: ...\n") show up
+  in xspin's graphical message sequence chart panel. the colors can now
+  also be changed from the default yellow to red green or blue,
+  respectively, as follows;
+       printf("MSC: ~R ...\n")
+       printf("MSC: ~G ...\n")
+       printf("MSC: ~B ...\n")
+  (suggested by Michael Griffioen, The Netherlands)
+- small changes to improve portability and ANSI compliance of the C code
+- compile-time option -DREDUCE (partial order reduction) is now the
+  default type of verification.  both spin and xspin now use this default.
+  to compile a verifier without using reduction, compile -DNOREDUCE
+- missed case of syntax check for use of _ as lvalue corrected
+- missed case of printing mtype values in symbolic form also corrected
+- printfs no longer generate output during verification runs
+  (this was rarely useful, since statements are executed in DFS search
+  order and maybe executed repeatedly in seemingly bewildering order)
+  a compile time directive -DPRINTF was added to suppress this change
+  (this may be useful in debugging, but in little else)
+  this relies on stdarg.h being available on your system - if not, compile
+  Spin itself with -DPRINTF, and the new code will not be added.
+
+===== 2.8.1 -  12 April 1996 ====
+
+- we found a case where the partial order reduction method
+  introduced in Spin version 2.0 was not compatible with
+  the nested depth-first search method that Spin uses for
+  cycle detection (i.e., runtime options -a and -l)
+  the essence of the problem is that reachability properties
+  are affected by the so-called `liveness proviso' from the
+  partial order reduction method.  this `liveness proviso'
+  acted on different states in the 1st and in the 2nd dfs,
+  which could affect the basic reachability properties of states.
+  the problem is corrected in 2.8.1.  as a side-effect of this
+  upgrade, a few other problems with the implementation of the
+  nested depth first searches were also corrected.  in some cases
+  the changes do cause an increase of memory requirements.
+  a new compiler directive -DSAFETY is added to make sure that
+  more frugal verifiers can be produced if liveness is not required.
+- other fixes - one small fix of interactive simulation mode -
+  some small fixes to avoid compiler warnings in tl_parse.c -
+  a fix in pangen3.h to avoid a compile-time error for a few
+  cases of index bound-checking. small fixes in tl_buchi and
+  tl_trans to correct treatment of "[]true" and "[]false"
+- cosmetic changes to the xspin tcl/tk files
+
+===== 2.8.2 -  19 April 1996 ====
+
+- revised Doc/WhatsNew.ps to match the extensions in the
+  current version of the software
+- one more change to the algorithm for acceptance cycle detection
+- changed filenames for multiple error-trails (to ease use on PCs)
+  from spec.trail%d to spec%d.trail
+- some small changes to improve portability
+
+===== 2.8.3 -  23 April 1996 ====
+
+- corrected a missed optimization in the new acceptance cycle detection
+  algorithm from 2.8.[12]
+- corrected a problem with blocking atomic sequences in pangen1.h
+- added a predefined function predicate np_
+  the value of np_ is true if the system is in a non-progress state
+  and false otherwise.  (claim stutter doesn't count as non-progress.)
+  np_ can only be used inside never claims, and if it is used all
+  transitions into and out of progress states become visible/global
+  under the partial order reduction
+- background:
+  the intended purpose of np_ is to support a more efficient check
+  for the existence of non-progress cycles. (the efficient check we
+  had was lost with the changes from 2.8.[12])  instead of the default
+  check with runtime option -l, a more efficient method (under partial
+  order reduction) is to use the never claim:
+       never {
+               /* non-progress: <>[] np_ */
+               do
+               :: skip
+               :: np_ -> break
+               od;
+       accept: do
+               :: np_
+               od
+       }
+  and to perform a standard check for acceptance cycles (runtime
+  option -a) -- the partial order reduction algorithm can optimize
+  a search for the existence of acceptance cycles much better than
+  one for non-progress cycles.
+  a related advantage of searching for non-progress cycles with an
+  LTL property is that the LTL formula (<>[] np_) can easily be
+  combined with extra LTL properties, to built more sophisticated
+  types of searches.
+
+===== 2.8.4 -  25 April 1996 ====
+
+- cycles are closed at a different point in the dfs with the change from
+  2.8.[12], as a result, the cycle-point was no longer accurate - which
+  could be confusing.  fixed
+- all moves through progress states and accepting states within the program
+  are visible under the partial order reduction rules.  it is unlikely that
+  one would use extra accept labels in a program, if an LTL property or a
+  never claim with accept labels is used, but just in case, this is covered.
+
+===== 2.8.5 -  7 May 1996 ====
+
+- process creation and process deletion are global actions
+  they were incorrectly labeled as safe/local actions for the
+  purposes of partial order reduction.  they are global, because
+  the execution of either one can change the executability of
+  similar actions in other processes
+- didn't catch as an error when too many message parameters are
+  specified in a receive test q?[...] (in verifications).
+  it was reported in all other cases, just not for queue tests
+  (the simulator reported it correctly, when flag -r is used)
+- peculiar nestings of array and non-array structure elements
+  could generate incorrect code
+- with fairness enabled (-f), cycles were sometimes closed at the
+  wrong place in the runtime verifiers.
+- a variable initialized with itself could cause spin to go into
+  an infinite loop.  the error is now caught properly.
+
+===== 2.8.6 -  17 May 1996 ====
+
+- timeout's weren't always marked as global actions in partial
+  order reductions - they are now -- this can cause a small increase
+  in the number of reached states during reduced searches
+- fixed error that could cause a coredump on a remote reference
+  during guided simulations (reported by Joe Lin, Bellcore)
+- improved the efficiency of partial order search for acceptance
+  cycles in bitstate mode. (for non-progress cycles, though, we still
+  can't take much advantage of reduction during bitstate searches)
+- fixed the error that caused the extent of a cycle not to be
+  marked correctly in bitstate mode (the trails were always correct,
+  but the cycle point was sometimes placed incorrectly)
+- fixed error that could cause non-existent acceptance cycles to
+  be produced in bitstate mode (hopefully the last aftershock from
+  the correction of the cycle detection method in version 2.8.1)
+
+===== 2.9.0 -  14 July 1996 ====
+
+- Important Change:
+  Spin now contains a predefined never claim template that captures
+  non-progress as a standard LTL property (it is the template described
+  under the notes for 2.8.3 above)
+  this made it possible to unify the code for -a and -l;  it brings
+  option -l (non-progress cycle detection) within the same automata
+  theoretic framework as -a;  and it secures full compatibility of
+  both options -a and -l with partial order reduced searches.
+
+  compiled versions of pan.c now support *either* -a *or* -l, not both
+
+  by default, the verifiers check for safety properties and standard
+  buchi acceptance (option -a).
+  to search for non-progress cycles (i.e., to *replace* option -a with
+  option -l), compile the verifier with the new directive -DNP
+- Xspin 2.9.0 supports this change, and makes it invisible to the user.
+
+- the state vector length is now added explicitly into the state vector.
+  in virtually all cases this is redundant, but it is safer.
+  it can optionally be omitted from the state vector again (saving
+  4 bytes of overhead per state) with the new compiler directive -DNOVSZ
+
+- the verifiers didn't allow a d_step sequence to begin with a
+  rendez-vous receive operation.  that's now fixed.
+
+- change in the as-yet non-documented mode for extra agressive
+  state compressions (added in version 2.7.4, not enabled yet for
+  normal use - more information on this mode will come later)
+
+- assignments to channel variables can violate xr/xs assertions.
+  there is now a check to catch such violations
+
+- updated the PC executable of xspin for the newer current version of
+  gcc - updated the readme files to match the above changes
+
+- added the code for handling the Next Operator from LTL.  the code is
+  not yet enabled (to enable it, compile the sources with -DNXT added).
+  note that when partial order reduction is used this operator cannot
+  be used.  we'll figure out the appropriate warnings and then enable
+  the code (i.e., when you use it, you must compile pan.c with -DNOREDUCE).
+- in the process of this update, we also caught a bug in the translation
+  of LTL formulae into never claims (affecting how the initial state of
+  the claim was encoded).  the implementation has meanwhile been subjected
+  to a more thorough check of the correctness of the translation -- using
+  another model checker (cospan) as a sanity check. (both model checkers
+  have passed the test)
+
+===== 2.9.1 -  16 September 1996 ====
+
+- no major changes - some purification and minor fixes
+- updated email address for bug reports to bell-labs.com in
+  all source files
+- disallowed remote references inside d_step sequences
+  (the verifier has no problem, but the simulator may
+  resolve these differently can cause strange guided
+  simulation results)
+- provided some missing arguments to a routine in pangen1.c
+  that could trigger compile time errors before
+- improved the COLLAPSE modes to be slightly more frugal
+- added explicit casts from shorts to ints to avoid warnings
+  of some compilers...  also fixed a possible bad reference
+  to the stack if an error is found in the first execution step
+- fixed a case where the cycle-extent wasn't set correctly
+  (found by stavros tripakis)
+- write and rewrite just a single trail-file for options -[iI]
+  (instead of numbered trails)
+- fixed a bug in weak fairness cycle detection that had crept
+  in with the overhaul from version 2.8
+- fixed order of variable initialization in simulator (can
+  make a difference if a local variable is initialized with
+  the value of a parameter, which should now work correctly)
+- expanded the number of options accessible through Xspin
+
+===== 2.9.2 -  28 September 1996 ====
+
+- with a -c0 flag, the 2.9.1 verifiers would still stop at the
+  first error encountered, instead of ignoring all errors.
+  has been corrected (-c0 means: don't stop at errors)
+- corrected the instructions and the numbers in Test/README.tests
+  for the current version of spin (for leader and pftp there are
+  some small differences)
+
+===== 2.9.3 -  5 October 1996 ====
+
+- added a function eval() to allow casting a variable name into
+  a constant value inside receive arguments.  this makes it possible
+  to match a message field with a variable value, as in
+       q?eval(_pid),par2,par3
+  until now, only constant values could be matched in this way.
+  note that in the above example the value of _pid does not change,
+  but it guarantees that the receive is unexecutable unless the first
+  message parameter is equal to the value of variable _pid
+  eval() can be used for any message field - the argument must be a
+  (local or global) variable reference (not be a general expression).
+- in the process, discovered that global references inside the parameter
+  list of send or receive statements would not be detected for the
+  marking of safe and unsafe statements for the partial order reduction.
+  this is now corrected - it may lead to a small increase in the number
+  of reachable states under partial order reduction
+
+===== 2.9.4 -  4 November 1996 ====
+
+- the order of initialization of parameters and local variables after
+  a process instantiation was incorrect in the verifier - this could
+  be noticed when a local var was instantiated with a formal parameter
+  inside the variable declaration itself (the verifier failed to do this).
+- added a missing case for interpreting eval() in run.c (see 2.9.3)
+- removed possible erroneous behavior during interactive simulations
+  when a choice is made between multiple rendez-vous handshakes
+- added SVDUMP compiler directive and some extra code to allow for the
+  creation of a statespace dump into a file called sv_dump
+- added an option in Xspin to redraw the layout of an FSM-view using
+  the program 'dot' -- the option automatically enables itself if xspin
+  notices that 'dot' is available on the host system (an extra button
+  is created, giving the redraw option)
+
+===== 2.9.5 -  18 February 1997 ====
+
+- thoroughly revised -DCOLLAPSE -- it can now be used without
+  further thought to reduce memory requirements of an exhaustive run
+  by up to 80-90% without loss of information.  the price is an
+  increase in runtime by 2x to 3x.
+- added new compiler directives -DHYBRID_HASH and -DCOVEST
+  (both for experimental use, see the Pan.Directives file)
+- renamed file sv_dump (see 2.9.4) to 'spec'.svd, for compatibility
+  with PCs
+- removed spin's -D option (dataflow).  it was inaccurate, and
+  took up more source code than warranted (300 lines in main.c and
+  another 60 or so in Xspin)
+
+===== 2.9.6 - 20 March 1997 ====
+
+- bug fix -- for vectorsizes larger than 1024 the generated
+  code from 2.9.5 contained an error in the backward execution
+  of the transition for send operations.  (this did not
+  affect the verification unless a compiler directive -DVECTORSZ=N
+  with N>1024 was used -- which triggered an error-report)
+- sometimes one may try typing 'pan -h' instead of 'pan -?'
+  to get the options listing of the verifiers.  this now gives
+  the expected response.
+- previous versions of the spin Windows95 executable in pc_spin*.zip
+  were compiled as 16-bit executable -- the current version is a
+  32-bit executable.  the newer versions of tcl/tk actually care
+  about the difference and will hang if you try to do a simulation
+  run with one of the older spin executables installed...
+- discrepancy in the stats on memory use reported at the end of a
+  bitstate run corrected.
+- new xspin295 file that corrects a problem when xspin is used on
+  unix systems with a file name argument (it reported an undeclared
+  function).
+
+===== 2.9.7 - 18 April 1997 ====
+
+- spin now recognizes a commandline option -P that can be used to
+  define a different preprocessor.  the default behavior on Unix
+  systems corresponds to:
+       spin -P/lib/cpp [..other options..] model
+  and on solaris systems:
+       spin -P/usr/ccs/lib/cpp [..other options..] model
+  (note, these two are the defaults, so these are just examples)
+  use this option to define your own preprocessor for Promela++ variants
+- bitstate mode can be made to hash over compressed state-vectors
+  (using the byte-masking method).  this can improve the coverage
+  in some cases. to enable, use -DBCOMP
+- -DSVDUMP (see 2.9.4) now also works in -DBITSTATE mode
+- added compiletime option -DRANDSTORE=33 to reduce the probability of
+  storing the bits in the hasharray in -DBITSTATE mode to 33%
+  give an integer value between 0 and 99 -- low values increase
+  the amount of work done (time complexity) roughly by the reverse
+  of the probability (i.e., by 5x for -DRANDSTORE=20), but they also
+  increase the effective coverage for oversized systems. this can be
+  useful in sequential bitstate hashing to improve accumulative coverage.
+- combined the 3 readme-files into a single comprehensive README.
+
+===== 3.0.0 - 29 April 1997 ====
+
+- new additions to Spin's functionality that motivates upping the
+  version number to 3.0:
+
+       1. a new BDD-like state compression option based on
+          the storage of reachable states in an automaton,
+          combined with a checkpoint/recovery option for long runs.
+          for the automata based compression, compiled -DMA=N
+               with N the maximum length of the statevector in bytes
+               expected (spin will complain if you guess too low)
+          for checkpointing, compile -DW_XPT
+               to get a checkpoint file written out every multiple
+               of one million states stored
+          for restarting a run from a checkpoint file, compile -DR_XPT
+
+       2. addition of "event trace" definitions. for a description
+          see Section 4 of the extended WhatsNew.ps
+
+       3. addition of a columnated simulation output mode
+          for raw spin that mimicks the view one could so
+          far only obtain with through the intermediacy of
+          xspin. to use, say:
+               spin -c spec (or spin -t -c spec)
+          there is one column per running process.  message send
+          or receive events that cannot be associated with a process
+          for any reason are printed in column zero.
+
+       4. addition of a Postscript output option to spin.
+          this can be used to create a postscript file for a message
+          flow of a simulation, without needing the intervention of
+          xspin (which can be slow).
+               spin -M spec
+          generates the message flow in file spec.ps
+          also supported is:
+               spin -t -M spec
+          to convert an error trail into postscript form.
+
+       5. addition of the ability in Xspin to automatically
+          track variable values -- by prefixing their declaration
+          in Promela with the keyword "show", e.g. "show byte cnt;"
+          also added: automatic tracking of the state changes in
+          the never claim, if present, during guided simulations
+          (i.e., when inspecting an error.trail produced by the
+          verifier)
+
+       6. addition of an option to convert LTL formula stored in files.
+
+       7. Xspin is now compatible with Windows95 and WindowsNT
+
+smaller, changes
+       - spin generates hints when the data-type of a variable is
+         over-declared (i.e., it will detect the use of integers for
+         storing booleans etc.)
+       - the spin -d output for structure variables now includes the
+         name of the structure declaration (as the 3rd field, which
+         was unused in this case) to make the listings unambiguous.
+         [change from Frank Weil]
+       - spin -t can now take an argument.  without an argument
+               spin -t spec opens spec.trail
+               spin -t4 opens spec4.trail
+         (multiple trails are generated with runtime option
+               pan -c0 -e)
+       - bugfix: local channels were not always restored correctly to
+         their previous state on the reverse move of a process deletion
+         in the verification (i.e., the deletion of the process to which
+         those channels were local).
+       - bugfix: stutter moves were only done in the 2nd dfs, to close
+         cycles. this has to be done in both 1st and 2nd, to avoid missing
+         the valid stutter extension of some finite behaviors
+       - process death is now a conditionally safe action -- this partly
+         reverses a decision made in version 2.8.5.
+         the condition for safety is: this is the youngest process and
+         there are fewer than the max nr of processes running.  this means
+         that the action cannot enable any blocked run statements, although
+         it may enable more process deaths (i.e., of processes that now
+         become youngest).
+         it does imply that a process dies as quickly as possible.  allowing
+         them to also linger merely creates articifial execution scenarios
+         where the number of active processes can grow without bound.
+         compatibility with 2.8.5-2.9.7 on this issue can be forced by
+         compiling pan.c with -DGLOB_ALPHA
+       - atomics inside atomics or dsteps are now accepted by the parser,
+         and ignored.
+       - there is now a Syntax-Check option in Xspin
+         [suggested by Klaus Havelund]
+       - true and false are now predefined constants
+
+Subsequent updates will appear in a new file: V3.Updates
This page took 0.032624 seconds and 4 git commands to generate.