我有一个关于nuXmv解决方案的问题。我有一个简单的图形,其中初始状态是s1,s1有两个弧,一个通向s2,另一个通向s3。从s2和s3开始,有一个弧线通向s1。这是nuXmv中描述情境的程序。
debugElement
我不明白nuXmv在初始状态s1中是如何知道公式是假的。它没有给出基于循环的反例,只是在s1中它根据s1表示公式是错误的。 我的解释是,如果没有正义假设,nuXmv会立即假设其中一条路径永远不会被执行。但它不应该以循环为例吗?如果我只离开" CTLSPEC AF p;" nuXmv返回一个循环作为反例。那么为什么选择" AF p& AF w"它只显示状态s1作为反例?
MODULE main
VAR
s : {s1, s2, s3};
p : boolean;
q : boolean;
w : boolean;
ASSIGN
init(s) := {s1};
next(s) := case
s = s1 : {s2, s3};
s = s2 : s1;
s = s3 : s1;
esac;
p := case
s = s2 : TRUE;
TRUE : FALSE;
esac;
q := case
s = s1 : TRUE;
TRUE : FALSE;
esac;
w := case
s = s3 : TRUE;
TRUE : FALSE;
esac;
CTLSPEC (AF p) & (AF w);
CTLSPEC AG (AF p) & AG (AF w);