致力于 spin 和 promela

Working on spin and promela

首先,我总是遇到深度问题reached:0。我尝试了每一种可能性。其次,我想达到 ltl 公式中提到的那些状态。那么这个语法是否正确?

关于错误

Spin 清楚地解释了正在发生的事情:

VECTORSZ too small, recompile pan.c with -DVECTORSZ=N with N>1024;

aborting (at depth 0)

这就是你得到

的原因

State-vector 1024 byte, depth reached 0, errors: 1

所以我会尝试

gcc -DVECTORSZ=2048 -o pan pan.c

关于LTL公式

你有很多不必要的括号;你可以写得更简单:

<>( (m[7]==2) && (m[11]==1) && (m[20]==1) && (m[54]==1) & (m[57]==1) && (m[81]==1) )

所以你有一个相当大的数组 m,这解释了为什么你的 1024 字节的状态向量是不够的。比增加状态向量更好的解决方案是减小 m 的大小,如果您仍然可以检查 属性 您感兴趣的 m 以某种方式抽象。

你写你"want to reach those states mentioned in your ltl formula"。 ltl 公式针对每条路径进行检查,因此在每条路径上最终必须达到一个状态,其中逻辑合取的所有子句都必须成立。如果您想找到一条路径,使您的逻辑合取的所有子句都成立,请否定您的 ltl 公式,即 [](您的否定子句的析取),并查看(您的)反例路径以防万一这样的状态是可以达到的。