使用SPIN检查LTL模型

时间:2017-08-02 10:58:22

标签: logic formal-verification model-checking spin promela

我在看SPIN软件。我想用它来找到LTL理论的模型。所有的手册和教程都讨论了验证算法的属性,但我根本不感兴趣。我只是想找到一个LTL公式的模型(相应的Büchi自动机,我想),就像mace4或paradox模型检查器可以找到FOL公式的模型。我相信SPIN应该能够做到这一点,但我无法在文档中找到。有人可以指出任何有用的资源吗?

1 个答案:

答案 0 :(得分:2)

为了从 LTL 公式生成Buchi自动机,您可以使用ltl2ba工具。该工具可以提供Buchi自动机的图形表示或其的 Promela 代码版本,如下例所示:

~$ ./ltl2ba -f "([] q0) && (<> ! q0)"
never {    /* ([] q0) && (<> ! q0) */
T0_init:
    false;
}

你也可以使用旋转来生成Buchi Automaton的 Promela 版本,命令为:

~$ spin -f "LTL_FORMULA"

<强> e.g:

~$ spin -f "[] (q1 -> ! q0)" 
never  {    /* [] (q1 -> ! q0) */
accept_init:
T0_init:
    do
    :: (((! ((q0))) || (! ((q1))))) -> goto T0_init
    od;
}

然而,与 ltl2ba 相比, Spin 似乎在生成源代码时不会简化Buchi Automaton,有时难以解释其输出; 例如尝试运行spin -f "([] q0) && (<> ! q0)"并将输出自动机与使用 ltl2ba 获得的自动机进行比较。

修改

现在,您可以使用gltl2ba代替 ltl2ba 的网站,例如:

~$ gltl2ba.py -f "([] p0) || (<> p1)" -g

never { /* ([] p0) || (<> p1) */
T0_init:
    if
    :: (1) -> goto T0_S1
    :: (p1) -> goto accept_all
    :: (p0) -> goto accept_S2
    fi;
T0_S1:
    if
    :: (1) -> goto T0_S1
    :: (p1) -> goto accept_all
    fi;
accept_S2:
    if
    :: (p0) -> goto accept_S2
    fi;
accept_all:
    skip
}

生成以下图表:

enter image description here