Promela Reference -- Skip(1)



Meta Terms


skip - shorthand for a dummy, nill statement.


The keyword skip is a meta-term that is translated by the Spin lexical analyzer into the Boolean constant 1 , i.e., into true . This means that skip could be used as part of an expression. It's intended use is, however, stand-alone, as if it were a statement. In this case, the skip is interpreted as a condition statement (see condition(4)). This condition statement is always executable, and has no effect, other than to change the control-state of the process that executes it.

There are few cases where a skip statement is needed to satisfy syntax requirements. A common use is to make it possible to place a label at the end of a statement sequence , to allow a goto jump (see goto(3)) to that point. Because only statements can be prefixed by a label, we must use a dummy skip statement as a place-holder:

proctype A()


L0:	if

	:: cond1 -> goto L1	/* jump to the end of the sequence */

	:: else -> skip		/* the "-> skip" is redundant here */



L1:	skip


One is tempted to use also a skip statement after the else guard in the first selection structure above, to indicate that processing is to continue at the control state that immediately follows the selection construct. This is harmless, but redundant. The above selection could be written more tersely as:
L0:	if

	:: cond1 -> goto L1

	:: else


Because Promela is an asynchronous language, the skip is never needed to introduce delay in process executions. In Promela there is by definition an arbitrary, and unknowable, delay in between any two statements in a proctype body. If control reaches a statement, and that statement is and remains executable, the only thing known is that the statement will be executed within a finite period of time. This corresponds to Dijkstra's finite progress assumption for concurrent systems, and it respects the rule that no assumptions may be made about the relative execution speeds of asynchronous processes. The only possible exception to this rule may be to influence the outcome of random simulations by using redundant skip statements.

The opposite of skip would be the condition statement (0) , which would never be executable. Early versions of Spin indeed contained the keyword halt with this interpretation. Newer versions of Spin, however, do not. In cases where a halt might be needed, often an assert(4) statement is more effective, e.g., assert(false) , or assert(0) .

The skip short-hand is an equivalent of true , and halt , if it existed, would be the equivalent of false .

false(1), true(1), assert(4), condition(4), else(5).

Spin Online References
Promela Manual Index
Promela Grammar
Spin HomePage
(Page Updated: 16 December 1997)