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