如何在 Promela - SPIN 中将 LTL 转换为 Automato?

2024-02-23

如何将 LTL 转换为 PROMELA 中的自动机?我知道使用命令 SPIN -f "ltl x" 可以将 LTL 转换为 never 声明,但我想要 LTL 的自动机而不是否定的自动机。如果我之前否定 LTL 以生成 never 声明,则这是正确的。谁能帮我?


Spin生成Promela代码相当于布奇自动机哪个匹配零担运输公式,并将其封装成never block.

来自docs http://spinroot.com/spin/Man/never.html:

NAME从不 - 暂时声明的声明。

SYNTAX从不{序列}

描述never 声明可用于定义系统行为, 无论出于何种原因,都具有特殊的兴趣。这是最常用的 指定永远不应该发生的行为。索赔定义为 关于系统状态的一系列命题或布尔表达式 必须按照指定的行为顺序变为真 兴趣相匹配。

所以,if您想查看与给定匹配的代码零担运输公式,您只需输入:

~$ spin -f "LTL_FORMULA"

e.g.:

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

获取相同代码的另一种方法,以及该代码的图形表示布奇自动机, is to 点击此链接 http://www.lsv.ens-cachan.fr/~gastin/ltl2ba.


看着两个你的评论 and 这个其他 https://stackoverflow.com/questions/33484361/how-to-compare-two-ltls?rq=1你的问题,看来你想检查是否有两个零担运输公式 p and g相互矛盾,即模型是否确实如此满意的 p必然会违反g反之亦然。

这可能是理论上完成使用spin。然而,这个工具并没有简化代码布奇自动机因此很难处理它的输出。

我建议您下载LTL2BA(在以下link http://www.lsv.ens-cachan.fr/~gastin/ltl2ba/download.php) 反而。要进行设置,您只需解压tar.gz文件和类型make在控制台中。

让我们看一个使用示例:

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

Since [] q0 and <> ! q0相互矛盾,返回布奇自动机 is empty[注:通过empty我的意思是它不接受执行]。在这种情况下,代码从不{假; } is the 规范形式 of an empty 布奇自动机没有任何接受执行。


免责声明:将输出与从不{假}来决定是否布奇自动机是否为空,可能会导致spurious结果如果简化步骤无法改变一切empty自动机在规范形式.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Promela - SPIN 中将 LTL 转换为 Automato? 的相关文章

随机推荐

  • 为什么rvm需要登录shell?

    据我所知 rvm是一组bash脚本 为什么需要登录 shell 哪些仅存在于登录 shell 中的属性对于 rvm 是必需的 相关帖子 rvm 安装无法正常工作 RVM 不是一项功能 https stackoverflow com ques
  • Kafka 生产者超时异常

    我正在运行 Samza 流作业 将数据写入 Kafka 主题 Kafka 正在运行一个 3 节点集群 Samza 作业部署在纱线上 我们在容器日志中看到很多这样的异常 INFO 2018 10 16 11 14 19 410 U 2 151
  • 为什么这个类对象声明有效?

    假设我有一堂课 class Test public int x Test const Test obj x obj x 为什么 Test object name Test random name 运行并且不需要另一个对象作为参数 就像是Te
  • 何时在 golang 中使用劫持?

    我不明白为什么我们使用劫持 因为我可以直接在响应正文中写入一些内容 有人可以解释一下吗 func writeSome w http ResponseWriter r http Request fmt Fprintf w write some
  • 如何使用 JavaScript 检测 CSS 动画何时开始和结束?

    我习惯于使用 JavaScript 为元素添加动画 我发现使用 CSS3 更简单 使用 JavaScript 如何检测 CSS 动画何时开始和何时结束 有什么办法吗 将适当的事件绑定到元素 例如 el addEventListener an
  • 如何为将 Gmail 作为默认邮件处理程序的用户在新选项卡中打开 mailto 链接?

    在网页上 mailto 链接会打开默认的电子邮件客户端 现在 Chrome 提供了将 Gmail 设置为默认电子邮件客户端的功能 一些用户在同一窗口中打开了链接 从而使他们离开了单击链接的页面 他们不喜欢这样 我尝试将目标 blank添加到
  • 列表视图中每一行的背景

    我正在尝试定制一个ListView为每一行设置默认背景图像和突出显示的背景图像 但是 突出显示的背景图像影响单行 而默认背景图像影响整行ListView 但我需要它影响每一行 有人可以告诉我该怎么做吗 这是我的代码 布局 main xml
  • matplotlib imshow():如何制作动画?

    我发现了这个精彩的动画简短教程 http jakevdp github io blog 2012 08 18 matplotlib animation tutorial http jakevdp github io blog 2012 08
  • 将 MySQL 架构作为 CoreData 数据模型导入 Xcode

    我有一个现有的 MySQL 数据库 我想将架构导入 Xcode 并创建一个核心数据 http developer apple com macosx coredata html数据模型 有没有办法 工具 流程 来导入CREATE声明 这样我就
  • C++11 是否允许向量

    容器要求已从 C 03 更改为 C 11 虽然 C 03 具有全面的要求 例如向量的复制构造性和可分配性 但 C 11 定义了每个容器操作的细粒度要求 第 23 2 节 因此 您可以例如 只要您只执行某些不需要赋值的操作 构造和push b
  • 如何删除没有本地跟踪分支的远程分支?

    如何在没有本地跟踪分支的情况下删除所有远程分支 我有大约 30 个没有本地分支 已删除 的远程分支和 20 个跟踪到远程的本地分支 我找到了几篇关于如何做相反的事情的帖子 编辑 寻找一个单行来解决这个问题 这样我就不必手动一一删除这些分支
  • 404 Page Not Found 您请求的页面未找到。代码点火器[关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 我在 co
  • 从投影仪闪光灯执行外部 exe

    我们有一个从 AS3 编译的投影仪应用程序 exe 我们如何从投影仪启动另一个 外部 可执行文件 这是代码 它没有做任何可见的事情 Play ACQ Demo Acq addEventListener MouseEvent CLICK cl
  • JavaFX 媒体播放器不播放视频

    Using OpenJFX 11我正在使用媒体播放器在 Linux 系统上播放一些剪辑 其中一些显示 另一些则不显示 据我所知 编码的唯一区别是 未播放的视频包含音轨 这是的输出mediainfo对于播放的视频 General Comple
  • 通过 boost graph 将向量变量导出到图形

    我想导出一个存储字符串值序列的向量来增强图 点文件 最后四行可以解释问题 所需的帮助 我知道代码是错误的 但需要指导来解决这个问题 我想将向量 toponodedist2 存储到图形点文件 这里我想存储一个数组 向量 它将存储索引处的值序列
  • Angular 9 HttpErrorResponse 'JSON.Parse 错误',而响应正常

    为什么这会引发错误 deleteUser userId string this dataService deleteUser userId subscribe response string gt console log response
  • 如何在 Rust 中对向量的元素运行 for 循环并更改 for 循环内部和 for 循环外部的向量?

    我是新来的Rust 我需要在 for 循环之前创建一个向量 在其上运行 for 循环 更改 for 循环内的向量 然后在 for 循环之后更改向量 我尝试了以下代码并尝试使用不可变借用 但两者都不起作用 fn main let mut ve
  • Xcode 4.3 的 pngcrush 在哪里?

    有一个苹果定制版本pngcrush在 4 3 之前的每个 Xcode 版本中 我在 Xcode 4 3 中找不到它 它仍然可以作为独立的吗exe file 另一个相关问题 文件来自哪里Command Line Tools for Xcode
  • 没有访问修饰符的方法

    好吧 这让我很烦恼 我知道我在某处读过它 但谷歌没有帮助 未指定访问修饰符的方法的可访问性级别是多少 void Foo code 我想说internal但我不是100 确定 默认可访问性type is internal 但该类型的默认可访问
  • 如何在 Promela - SPIN 中将 LTL 转换为 Automato?

    如何将 LTL 转换为 PROMELA 中的自动机 我知道使用命令 SPIN f ltl x 可以将 LTL 转换为 never 声明 但我想要 LTL 的自动机而不是否定的自动机 如果我之前否定 LTL 以生成 never 声明 则这是正