45 lines
No EOL
960 B
Promela
45 lines
No EOL
960 B
Promela
#define N 10
|
|
#define LENGTH 3
|
|
#define R 2
|
|
|
|
int to_reverse[LENGTH]; // array to reverse
|
|
int reversed[LENGTH]; // array where the reverse is stored
|
|
|
|
// ThreadedReverser implementation
|
|
proctype ThreadedReverser(int from; int to) {
|
|
int k;
|
|
for (k: from .. to) {
|
|
reversed[LENGTH - k - 1] = to_reverse[k];
|
|
}
|
|
}
|
|
|
|
init {
|
|
// array initialization
|
|
{
|
|
int i;
|
|
for (i in to_reverse) {
|
|
int value;
|
|
select(value: 0 .. R);
|
|
to_reverse[i] = value;
|
|
}
|
|
}
|
|
|
|
// ParallelReverser implementation
|
|
int n;
|
|
int s = LENGTH / N;
|
|
for (n: 0 .. N) {
|
|
int from = n * s;
|
|
int to;
|
|
if
|
|
:: (n == N - 1) -> to = LENGTH;
|
|
:: else -> to = n * s + s;
|
|
fi
|
|
run ThreadedReverser(from, to);
|
|
}
|
|
}
|
|
|
|
// ltl syntax: https://spinroot.com/spin/Man/ltl.html
|
|
ltl test {
|
|
eventually (false) implies true
|
|
// eventually (a > b) implies len(q) == 0
|
|
} |