当我使用NuSMV工具验证我的CTL是否正确时,我遇到一个让我如此困惑的问题。
我的模特是
这是 NuSMV 代码:
MODULE main
VAR
state : {ROOT, A1, B1, C1, D1, F1, M1};
ASSIGN
init(state) := ROOT;
next(state) := case
state = ROOT : A1;
state = A1 : {B1, C1};
state = B1 : D1;
state = D1 : F1;
TRUE : state;
esac;
CTLSPEC
AG( state=A1 -> AX ( A [ state=B1 U ( state=D1 -> EX state=F1 ) ] ) );
CTLSPEC
AG( state=A1 -> AX ( A [ state=B1 U ( state=F1 -> EX state=C1 ) ] ) );
CTLSPEC
AG( state=A1 -> AX ( A [ state=M1 U ( state=F1 -> EX state=C1 ) ] ) );
我的CTL公式如下:
"AG( A1 -> AX ( A [ B1 U ( D1 -> EX ( F1) ) ] ) )"
"AG( A1 -> AX ( A [ B1 U ( F1 -> EX ( C1) ) ] ) )"
"AG( A1 -> AX ( A [ M1 U ( F1 -> EX ( C1) ) ] ) )"
NuSMV验证了上述三个公式,所有这些都证明是真的。
所以我的问题是为什么公式2和公式3结果是真的?
答案 0 :(得分:1)
这个问题已经过时了,但我认为仍然值得回答,因为这个问题可能会误导其他人。
M,s⊨对于所有路径(s,s2,s3,s4,...)s.t,a [φUψ] iff si Rt si + 1有一个州sj s.t.对于所有i
因此,对于要验证的属性,φ必须为真,直到ψ触发为止。
请注意,如果ψ立即触发,则φ的值不相关。
很容易看到所有三个公式都经过简单验证,因为ψ
在从true
和B1
开始的每个路径的第一个状态中都是C1
{1}}。
情况就是这样,因为ψ
是一种含义,在州B1
和C1
中有一个false
前提。
由于我们知道A [ ANYTHING U TRUE ]
已针对任何州进行验证,因此我们得出结论,所有三个属性都是可以满足的。