Общий ответ
Это предупреждение о том, что некоторые состояния недоступны из-за переходов, которые никогда не выполнялись.
Как правило, это не ошибка, но рекомендуется тщательно проверять недостижимые состояния для каждого подпрограмму, которую вы смоделировали, и убедитесь, что ни одна из них не будет достижима. т.е. в случае, если модель неверна. предполагаемое поведение.
Примечание. Вы можете использовать метку end: перед определенной строкой кода, чтобы отметить действительные завершающие состояния, чтобы избавиться от этих предупреждений, например, когда ваша процедура не завершается. Подробнее здесь.
Конкретный ответ
Я не могу воспроизвести ваш вывод. В частности, запустив
~$ spin -a file.pml
~$ gcc pan.c
~$ ./a.out -a
Я получаю следующий вывод, который отличается от вашего:
(Spin Version 6.4.3 -- 16 December 2014)
+ Partial Order Reduction
Full statespace search for:
never claim + (ltl_0)
assertion violations + (if within scope of claim)
acceptance cycles + (fairness disabled)
invalid end states - (disabled by never claim)
State-vector 64 byte, depth reached 47, errors: 0
41 states, stored (58 visited)
18 states, matched
76 transitions (= visited+matched)
0 atomic steps
hash conflicts: 0 (resolved)
Stats on memory usage (in Megabytes):
0.004 equivalent memory usage for states (stored*(State-vector + overhead))
0.288 actual memory usage for states
128.000 memory used for hash table (-w24)
0.534 memory used for DFS stack (-m10000)
128.730 total actual memory usage
unreached in proctype P
(0 of 29 states)
unreached in init
(0 of 3 states)
unreached in claim ltl_0
_spin_nvr.tmp:10, state 13, "-end-"
(1 of 13 states)
pan: elapsed time 0 seconds
В частности, мне не хватает предупреждений о недостигнутых состояниях в процессе monitor. Насколько я понимаю, судя по исходному коду, ни одно из полученных предупреждений не является проблематичным.
Либо вы используете версию Spin, отличную от моей, либо вы не включили в свой вопрос полный исходный код. В последнем случае не могли бы вы отредактировать свой вопрос и добавить код? Я обновлю свой ответ позже.
РЕДАКТИРОВАТЬ: в комментариях вы спрашиваете, что означает следующее сообщение: "недостигнуто требование ltl_0 _spin_nvr.tmp:10, состояние 13, "-end-"".
Если вы откроете файл _spin_nvr.tmp, вы увидите следующий фрагмент кода Promela, который соответствует автомату Бюхи, который принимает все и только выполнение, которое нарушает ваше свойство ltl []((wait -> ‹> (cs))).
never ltl_0 { /* !([] ((! ((P[1]@WAIT))) || (<> ((P[1]@CRITICAL))))) */
T0_init:
do
:: (! ((! ((P[1]@WAIT)))) && ! (((P[1]@CRITICAL)))) -> goto accept_S4
:: (1) -> goto T0_init
od;
accept_S4:
do
:: (! (((P[1]@CRITICAL)))) -> goto accept_S4
od;
}
Сообщение просто предупреждает вас, что выполнение этого кода никогда не достигнет последней закрывающей скобки } (состояние "-end-"), что означает, что процедура никогда не завершается.
person
Patrick Trentin
schedule
12.10.2016