如何使用SPIN建模过渡系统

时间:2013-07-18 00:55:40

标签: model-checking spin transition-systems

我是新手。我想检查转换系统是否满足给定的LTL属性。但我不知道如何在promela中建立过渡系统的模型。 例如,下面显示的转换系统有两种状态,初始状态为s0。 如何检查是否满足LTL属性:<> q。有人知道如何在promela中描述这个问题吗?顺便说一句,如何在旋转中使用LTL的下一个运算符? transition system

1 个答案:

答案 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末尾的更多内容。