如何使用 Spin 从命令行检查 Promela 代码
How to use Spin to check Promela code from the command line
我正在寻找如何在 Windows 10 命令行上使用 Spin 分析 train.pml 的输出。
如能帮助文件正确输出,我们将不胜感激。
先决条件: 在 Windows 10 上获得带有 gcc 的工作环境(例如 参见these instructions) or, alternatively, get a virtual environment with some GNU/Linux distribution. Also, correctly install Spin在目标系统中。
只有两种可能的方法:
选项A.:
~$ spin -a train.pml
~$ gcc pan.c -o verifier
~$ ./verifier -a -N c1
...
~$ ./verifier -a -N c8
...
选项B.:
~$ spin -search -ltl c1 train.pml
...
~$ spin -search -ltl c8 train.pml
...
目前,属性 c1, c5, c7, c8
在您的模型上 已验证,而 c2, c3, c4, c6
未验证.还有一些关于 未达到的最终状态 的抱怨。请检查后一种情况是否不违反您系统的规范(这可能是问题也可能不是问题),并且验证结果是否符合您的预期。
作为参考,这是您在验证 属性 c1
:
时应该获得的 正确输出 的示例
~$ spin -search -a -ltl c1 trail.pml
...
pan: ltl formula c1
(Spin Version 6.4.6 -- 2 December 2016)
+ Partial Order Reduction
Full statespace search for:
never claim + (c1)
assertion violations + (if within scope of claim)
acceptance cycles + (fairness disabled)
invalid end states - (disabled by never claim)
State-vector 152 byte, depth reached 4508, errors: 0
67919 states, stored (97586 visited)
170919 states, matched
268505 transitions (= visited+matched)
0 atomic steps
hash conflicts: 184 (resolved)
Stats on memory usage (in Megabytes):
11.659 equivalent memory usage for states (stored*(State-vector + overhead))
5.455 actual memory usage for states (compression: 46.78%)
state-vector as stored = 56 byte + 28 byte overhead
128.000 memory used for hash table (-w24)
0.534 memory used for DFS stack (-m10000)
133.905 total actual memory usage
unreached in proctype train
trail.pml:31, state 14, "-end-"
(1 of 14 states)
unreached in proctype gate
trail.pml:52, state 17, "-end-"
(1 of 17 states)
unreached in proctype queue
trail.pml:74, state 17, "-end-"
(1 of 17 states)
unreached in claim c1
_spin_nvr.tmp:10, state 13, "-end-"
(1 of 13 states)
pan: elapsed time 0.12 seconds
pan: rate 813216.67 states/second
我正在寻找如何在 Windows 10 命令行上使用 Spin 分析 train.pml 的输出。
如能帮助文件正确输出,我们将不胜感激。
先决条件: 在 Windows 10 上获得带有 gcc 的工作环境(例如 参见these instructions) or, alternatively, get a virtual environment with some GNU/Linux distribution. Also, correctly install Spin在目标系统中。
只有两种可能的方法:
选项A.:
~$ spin -a train.pml ~$ gcc pan.c -o verifier ~$ ./verifier -a -N c1 ... ~$ ./verifier -a -N c8 ...
选项B.:
~$ spin -search -ltl c1 train.pml ... ~$ spin -search -ltl c8 train.pml ...
目前,属性 c1, c5, c7, c8
在您的模型上 已验证,而 c2, c3, c4, c6
未验证.还有一些关于 未达到的最终状态 的抱怨。请检查后一种情况是否不违反您系统的规范(这可能是问题也可能不是问题),并且验证结果是否符合您的预期。
作为参考,这是您在验证 属性 c1
:
~$ spin -search -a -ltl c1 trail.pml
...
pan: ltl formula c1
(Spin Version 6.4.6 -- 2 December 2016)
+ Partial Order Reduction
Full statespace search for:
never claim + (c1)
assertion violations + (if within scope of claim)
acceptance cycles + (fairness disabled)
invalid end states - (disabled by never claim)
State-vector 152 byte, depth reached 4508, errors: 0
67919 states, stored (97586 visited)
170919 states, matched
268505 transitions (= visited+matched)
0 atomic steps
hash conflicts: 184 (resolved)
Stats on memory usage (in Megabytes):
11.659 equivalent memory usage for states (stored*(State-vector + overhead))
5.455 actual memory usage for states (compression: 46.78%)
state-vector as stored = 56 byte + 28 byte overhead
128.000 memory used for hash table (-w24)
0.534 memory used for DFS stack (-m10000)
133.905 total actual memory usage
unreached in proctype train
trail.pml:31, state 14, "-end-"
(1 of 14 states)
unreached in proctype gate
trail.pml:52, state 17, "-end-"
(1 of 17 states)
unreached in proctype queue
trail.pml:74, state 17, "-end-"
(1 of 17 states)
unreached in claim c1
_spin_nvr.tmp:10, state 13, "-end-"
(1 of 13 states)
pan: elapsed time 0.12 seconds
pan: rate 813216.67 states/second