A special operator is provided for describing recurrences. Recurrences are circular or recursive systems of equations, and are the way that sequential systems are described in SMV.
If x is a signal, then next(x) is, intuitively, the ``next'' value of x. More precisely, the th value of next(x) is equal to the st value of x. Thus, for example, if
x = 0,1,2,3,...then
next(x) = 1,2,3,4,...
By assigning a value to the ``next'' value of a signal, we can define a sequential machine. For example, assuming x and y are boolean signals,
next(x) := y ^ x;defines a signal x which ``flips'' each time the signal y is true (the ^ operator stands for ``exclusive or''). By definition, the ``next'' value of x is equal to (y ^ x), which is equal to x if y is false and ~x if y is true. Note, however, that the above assignment does not tell us the initial value of x. Thus, we obtain a different sequence depending on whether x starts at 0 or 1. We can determine this initial value by assigning
init(x) := 0;
In this case, if we had
y = 0;1;0;1;...we would get
x = 0;0;1;1;0;0;1;1;...
On the other hand, if we assigned
init(x) := 1;we would obtain the sequence
x = 1;1;0;0;1;1;0;0;...
As another example, to declare a signal x that maintains a running sum of the values of a signal y, we would say
init(x) := 0; next(x) := x + y;