如何在PROMELA中将LTL转换为自动机?我知道使用命令SPIN -f" ltl x"有可能将LTL转变为永不索赔,但我想要LTL的自动机而不是否定。这是正确的如果我之前否定LTL产生永不索赔。谁能帮我?
答案 0 :(得分:1)
Spin 生成与 Buchi Automaton 相当的 Promela 代码,该代码与 LTL公式相匹配,并包围它进入从不块。
来自docs:
NAME never - 宣布暂时声明。
语法从不{sequence}
描述永不声明可用于定义系统行为, 无论出于何种原因,都特别感兴趣。它是最常用的 指定永远不会发生的行为。该声明被定义为 系统状态上的一系列命题或布尔表达式 必须在为行为指定的序列中变为真 兴趣相匹配。
因此,如果您希望查看与给定 LTL公式匹配的代码,您只需输入:
~$ spin -f "LTL_FORMULA"
<强> e.g:强>
~$ spin -f "[] (q1 -> ! q0)"
never { /* [] (q1 -> ! q0) */
accept_init:
T0_init:
do
:: (((! ((q0))) || (! ((q1))))) -> goto T0_init
od;
}
获取相同代码的另一种方法,以及 Buchi Automaton 的图形表示,是follow this link。
查看你的评论和this other你的问题,看来你想检查两个 LTL公式 p 和 g 相互矛盾,也就是说满足 p 的模型是否必然会违反 g 强>反之亦然。
理论上 可以使用 spin 来完成。但是,此工具不会简化 Buchi Automaton 的代码,因此难以处理其输出。
我建议您下载 LTL2BA (在以下link)。要进行设置,只需解压缩 tar.gz 文件并在控制台中输入 make 即可。
让我们看一个用法示例:
~$ ./ltl2ba -f "([] q0) && (<> ! q0)"
never { /* ([] q0) && (<> ! q0) */
T0_init:
false;
}
由于[] q0
和<> ! q0
相互矛盾,返回的 Buchi自动机 为空 [nb:by empty 我的意思是它没有接受执行]。在这种情况下,代码永远不会{false; 是空 Buchi Automaton 的规范形式,没有任何接受执行。
免责声明:将输出与 never {false} 进行比较以确定 Buchi Automaton 是否为空,可能会导致简化步骤无法以规范形式转换所有空自动机,则会产生