SCM(5) Local Manual SCM(5)

NAME

scmscm language

DESCRIPTION

The scm textual language was introduced in the Ph.D. thesis of Tristan Le Gall. An scm model contains the description of a system of communicating machines. This description is composed of two parts:

For model-checking purposes, the format also permits the specification of a set of bad configurations.

Header

  1. Start the description of a system of communicating machines and specify its name:

    scm ident ​:
  2. Specify the number of channels:

    nb_channels ​= integer ​;

    The set of channels is {0, ..., n-1} where n is the number of channels. By default, all channels are perfect.

  3. Tag some channels as lossy (optional):

    [lossy ​: integer [​, integer ...]]
  4. Declare the message alphabet as follows:

    parameters ​: [{int | real} ident [​= expr] ​; ...]

    The alphabet is the same for all channels. Each message holds a typed numerical value.

Automata

  1. Start the description of an automaton and specify its name:

    automaton ident ​:
  2. Declare the automaton's local variables (optional):

    [{int | real} ident [​= expr] ​; ...]
  3. Specify the automaton's initial states:

    initial ​: integer [​, integer ...]
  4. Declare the automaton's states together with outgoing transitions:

    state integer ​: [to integer ​: command ​; ...]

    where command is of the following form:

    when cond [​, integer {​! | ​?} ident] [with ident ​= expr [​, ident ​= expr ...]]

Semantics

The operational semantics of a system of communicating machines is the usual one: the automata move asynchronously according to their local transitions, and they communicate exclusively through the channels. Communication actions are ​! (send) and ​? (receive). Channels are fifo, unbounded, and initially empty. Note that channels need not be point-to-point, they are shared by all automata.

Bad Configurations

The description of the system of communicating machines is, optionally, followed by the specification of a set of bad configurations:

bad_states ​: ​( automaton ident ​: badlocal ... [with regexp] ​) ...

where badlocal is of the following form:

in integer ​: cond ...

The local constraints in a badlocal specification are disjuncted together. The badlocal specifications in a bad_states declaration are conjuncted together.

The symbol ​# is used to separate channels in regexp. Each word matched by regexp must contain exactly n-1 occurrences of ​# where n is the number of channels.

SEE ALSO

control(1), verify(1)
July 11, 2011 Linux 3.0.0-1-amd64