我是新手。我想检查转换系统是否满足给定的LTL属性。但我不知道如何在promela中建立过渡系统的模型。 例如,下面显示的转换系统有两种状态,初始状态为s0。 如何检查是否满足LTL属性:<> q。有人知道如何在promela中描述这个问题吗?顺便说一句,如何在旋转中使用LTL的下一个运算符?
答案 0 :(得分:3)
您可以使用标签,原子块和gotos对自动机进行建模:
bool p, q;
init
{
s1:
atomic {
p = true;
q = false;
}
goto s2;
s2:
atomic {
p = false;
q = true;
}
}
要检查LTL属性,请将ltl eventually_q { <>q };
放在文件的末尾,然后使用-a
运行Spin和生成的可执行文件。
如果您放置一个不在最后的属性,例如ltl always_p { []p };
,您将收到消息end state in claim reached
,表明该属性已被违反。
关于next-operator:它与Spin默认使用的偏序减少算法相冲突。使用next-operator的属性必须是 stutter invariant ,否则必须禁用部分顺序减少。阅读this man page末尾的更多内容。