NuSMV:如何排除可能的下一个状态

时间:2018-10-12 12:05:17

标签: model-checking nusmv

我想排除在特定条件下可能发生的下一种情况。 例如,我有:

token : array 1..2 of {0, 1, 2, 3, 4, 5, 6};
next(token[1]) := case
                 x : {1, 2, 3, 4, 5, 6};
                 TRUE : 0;
               esac;
next(token[2]) := case
                 x : {1, 2, 3, 4, 5, 6};
                 TRUE : 0;
               esac;
-- exclude state value 1 if !position1free
...

DEFINE position1free := token[1] != 1 & token[2] != 1;
...

所有值1..6相同。 否则,我必须做很多组合才能只返回空闲的职位。

有没有人知道这是否可行?

1 个答案:

答案 0 :(得分:1)

一种可能的方法是进一步限制状态空间

TRANS (!position1free) -> (next(token) != 1) ;

请注意,TRANS的无意使用可能会导致有限状态机没有初始状态,或者包含某些状态s_i而没有任何未来状态:

enter image description here

来源:nuXmv: Introduction