如何比较两个 LTL?

2024-06-27

如何比较两个 LTL 以确定其中一个是否可以相互矛盾?我问这个问题是因为我有一个分层状态机和描述每个状态下行为的 LTL。我需要知道本地零担是否可以与全局零担相矛盾。我在“功能规范和自动冲突检测”一文中看到,如果 L(f) 交集 L(g) 为空,则两个 LTL 属性 f 和 g 不一致。这正是以 f 为程序、 Øg 为属性的模型检验问题。谁能帮我这个?如何将 LTL f 转换为 SPIN/Promela 中的程序?

Thanks.


以下内容对我有用。 (警告:我没有在官方文档中看到这一点。这可能意味着还有其他更好的方法可以做到这一点。或者我没有仔细寻找。)

我们想检查是否[] <> p && [] <> q暗示<> (p && q)。 (它不是。)

写一个简单的流程P可以执行所有转换,并将声明写入 LTL 属性A.

bool p; bool q;

active proctype P () {
  do :: d_step { p = false; q = false } 
     :: d_step { p = false; q = true }  
     :: d_step { p = true; q = false } 
     :: d_step { p = true; q = true }  
  od
}

ltl A { (([] <> p) && ([] <> q)) -> <> (p && q) }

(编辑 2016 年 11 月 1 日:这可能不正确,因为由于隐藏的初始状态,我们可能会丢失一些转换,请参阅如何在 Spin 中创建未初始化的变量? https://stackoverflow.com/questions/40358915/how-to-make-a-non-initialised-variable-in-spin )

然后将其放入文件中check.pml, and

spin -a check.pml
cc     pan.c   -o pan
./pan -a -n
./pan -r check.pml.trail -v

显示了否定声明的模型(最终的周期性轨迹,其中p and q无限频繁地为真,但是p && q是从来没有)。

仔细检查:将权利要求中的结论更改为<> (p || q),则不存在反例,证明蕴涵成立。

就您而言,索赔是! (f && g)(它们永远不应该同时为真)。

可能有一些聪明的方法可以使琐碎过程的代码更小。

另外,第三个命令实际上是./pan -a -i -n (the -i找到一个最短的例子)但它给出了一个警告。而且它确实找到了更短的周期。

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

如何比较两个 LTL? 的相关文章

  • SPIN、VIBE 等 3D Human Pose Estimation 方法中的弱透视投影 (Weak Perspective Projection)

    弱透视投影 Weak Perspective Projection 弱透视投影假设焦距与物距足够大 xff0c 此时物体在 z z z 轴 光轴 上的变化可以忽略 SPIN VIBE 等 3D Human Pose Estimation 方
  • 自旋锁实现机理 spin_lock

    自旋锁的概念 自旋锁 xff08 spin lock xff09 是一种典型的对临界资源进行互斥访问的手段 xff0c 它是基于系统原子操作为基础 xff0c 自旋锁最多只能被一个可执行线程持有 xff0c 如果一个执行线程试图获得一个被已
  • 在 SPIN ltl 公式中使用 (U)ntil 运算符

    我试图了解如何在 ltl 公式中正确使用 Until 运算符 我发现this定义 如下 要清楚 Until AUB 如果存在 i 则为真 B is true in si si 1 si 2 for all j such that 0 j l
  • 无需模型检查即可实现符号执行

    我该如何实施symbolic execution for particular language不使用model checking and Finite State Machine FSM 例如not例如Java Path Finder 我
  • 我如何将这些更改为 NuSMV 模型中的 CTL SPEC?

    我需要帮助编写这些 CTL 我还不太明白如何以 NuSMV 格式编写 希望我的代码对您有意义 因为它是不完整的 atm 2 如果一个进程正在等待 它最终会到达其临界区 3 两个进程必须 轮流 进入临界区 4 一个进程有可能连续两次进入临界区
  • 现实世界中是否存在可证明的语言? (斯卡拉?)

    我被教导关于正式系统 http en wikipedia org wiki Formal system在大学时 但我很失望它们似乎没有在现实世界中使用 我喜欢这样的想法 能够知道某些代码 对象 函数等 是否有效 不是通过测试 而是通过pro
  • 对于给定的有限代表字符串列表,正则表达式的语法推理?

    我正在分析一个大型公共数据集 其中包含许多详细的人类可读字符串 这些字符串显然是由某些常规 在形式语言理论意义上 语法生成的 逐一查看这些字符串组以了解其中的模式并不太难 不幸的是 大约有 24 000 个独特的字符串被分为 33 个类别和
  • 泵送引理(常规语言)

    我需要一些帮助来解决泵引理问题 L a b c a L lt b L lt c L 这是我到目前为止得到的 y uvw is the string from the pumping lemma 我让 y abbc n n 是泵引理的长度 y
  • 如何在 Promela - SPIN 中将 LTL 转换为 Automato?

    如何将 LTL 转换为 PROMELA 中的自动机 我知道使用命令 SPIN f ltl x 可以将 LTL 转换为 never 声明 但我想要 LTL 的自动机而不是否定的自动机 如果我之前否定 LTL 以生成 never 声明 则这是正
  • Dafny 无法用高阶多态递归与线性迭代证明函数方法等价

    这条消息会有点长 但那是因为我想尽可能地解释它 在 Dafny 中 我遇到了下一个问题 给定一个数组 计算发生这种情况的长度为 k 的段的数量 该段左半部分的正数数量大于或等于右半部分 举个例子 假设线段只能是偶数 因此没有讨论一半是什么
  • 正则表达式中的顺序不重要吗?

    我正在查看此 stackoverflow 链接中提出的问题 奇数个 a 的正则表达式 https stackoverflow com questions 28902496 regular expression for odd number
  • 证明后继者对等式的替代性质

    我试图理解归纳类型 精益中的定理证明 第 7 章 https leanprover github io theorem proving in lean 07 Inductive Types html 我给自己设定了一个任务 证明自然数的后继
  • 是否可以将一位的位向量转换为 SMTLib2 中的布尔变量?

    我想要一个布尔变量来测试 例如 位向量的第三位是否为 0 位向量的理论允许提取 1 位作为位向量 但不是布尔类型 我想知道我是否可以出演这个角色 谢谢 更新 如果我的问题不清楚 我很抱歉 但 Nikolaj Bjorner 的答案是如何测试
  • PDA 接受包含 a 多于 b 的字符串语言

    制作一个 PDA 来识别以下语言 包含 a 多于 b 的字符串的语言 我已经在这个问题上挣扎了好几天了 我的心理似乎完全陷入了困境 任何人都可以为我如何解决这个问题提供一些指导或方向吗 你的 a多于b 的问题可以通过PDA解决 您所要做的就
  • 可疑地使用“else”与 i/o 结合,看到“;”靠近“如果”

    以下是导致此问题的代码 if fromProc 0 MSG SLEEP nempty proc2clk 0 gt proc2clk 0 fromProc 0 Woke up fromProc 0 MSG SLEEP fromProc 0 M
  • 所有可能的骑士在普罗梅拉的棋盘上移动

    是否有可能用马从初始位置 I J 绕过大小为 N N 的棋盘 并且只访问每个方格一次 define A True A I J false active proctype method bit I 4 bit J 3 bit K 1 bit
  • 设计 DFA 接受可被数字“n”整除的二进制字符串

    我需要学习如何设计一个 DFA 使得给定任何数字 n 它接受二进制字符串 0 1 其十进制等效数可被 n 整除 不同的 n 会有不同的 DFA 但是有人可以给出一个基本方法 我应该遵循该方法来处理任何数字 0 下面我写了一个答案n等于 5
  • 常规语法与上下文无关语法

    我正在为我的学习计算语言测试 有一个想法我无法理解 我明白常规语法更简单 不能包含歧义 但不能完成编程语言所需的许多任务 我也明白了上下文无关语法允许歧义 但允许一些编程语言必需的东西 例如回文 我遇到的困难是理解如何通过知道以下内容来得出
  • 在java中使用NuSMV作为模型检查器

    我正在尝试使用 NuSMV 作为 java 中的模型检查器 但是 我无法在网上找到相关的 JAR 库 我找到的唯一一个是在here http haschemi blogspot com 2011 03 access nusmv from j
  • 如何比较两个 LTL?

    如何比较两个 LTL 以确定其中一个是否可以相互矛盾 我问这个问题是因为我有一个分层状态机和描述每个状态下行为的 LTL 我需要知道本地零担是否可以与全局零担相矛盾 我在 功能规范和自动冲突检测 一文中看到 如果 L f 交集 L g 为空

随机推荐

  • 如果“dw”只删除单词的一部分,那么“daw”如何在 Vim 中删除单词?

    我是 Vim 用户 我想删除一个关键字 我总是使用 dw 来删除特定的关键字 但有时效果不佳 例如 我想删除示例程序中的 value123 ex public void function int valule123 当我将光标放在 2 上
  • 阻止 IE 两次加载动态包含的脚本

    我在杂项上添加了一些相关内容 网页通过添加
  • 文本区域值高度[重复]

    这个问题在这里已经有答案了 我有一个 textarea 其 css 高度设置为 85px 用户可能会在该文本区域内键入内容行 我想知道文本 值的高度 而不是文本区域本身 有没有办法检查内部文本的高度 包括换行符 我会将文本区域的内容复制到另
  • QTreeView绘制下降指示器

    我需要在 QTreeView 中通过拖放实现行移动 并显示行之间的放置指示器 我想知道是否有一种方法可以覆盖指示器绘制 因此它仅针对行之间的所有层次结构级别显示 而不是项目周围的矩形 该线必须与整行一样宽 而不是与一列一样宽 可以通过修改用
  • 大负数的指数

    如何在 Python 上计算 np exp 28000 等数字 答案大约是5E 12161 有人告诉我 由于双精度浮点格式 我只能计算 gt 1e 2048 的数字 Try mpmath http mpmath org 用于任意精度的浮点运
  • Edge TPU 编译器:错误:quantized_dimension 必须在 [0, 1) 范围内。是 3

    我正在尝试让 Mobilenetv2 模型 对我的数据重新训练最后一层 在 Google 边缘 TPU Coral 上运行 我已按照本教程进行操作https www tensorflow org lite performance post
  • 重载控制器动作

    几分钟前 当我尝试在我的一个控制器中重载操作时 我有点惊讶 I had public ActionResult Get return PartialView return all things I added public ActionRe
  • Django - 扩展另一个应用程序 ModelAdmin?

    有没有办法扩展另一个应用程序 ModelAdmin 我有一个使用 django contrib comments 提供的功能的项目 CommentsAdmin ModelAdmin 类具有 actions flag comments app
  • 如何使用 Node.js 异步服务多个 QBWC 客户端

    这个想法是使用 Node js 实现 QBWC Web 服务 它可以以异步方式服务多个传入请求 目前我正在研究qbws https github com johnballantyne qbws 这是 QuickBooks Desktop W
  • C++ 控制台键盘事件

    有什么方法可以获取 Windows 控制台中的关键事件吗 我需要一种无需 GUI 即可快速获取 keydown 和 keyup 事件的方法 我尝试过使用 getch 但它没有获取按键并等待按下某个键才返回 Use ReadConsoleIn
  • 如何禁用浏览器中文本区域字段的智能引号?

    我有一个在浏览器中运行的应用程序 用于比较字符串 使用 iOS11 字符串与引号进行比较失败 因为它默认启用智能引号 can t不相等can t 我知道可以在整个设备的 设置 下禁用智能引号 但我想在文本区域级别处理它 我以为我能够捕捉到按
  • 当我尝试连接本地主机时出现 ERR_SSL_PROTOCOL_ERROR

    我开始研究 Node js 并尝试将 ionic 应用程序与我创建的后端 NodeJS 应用程序连接 但出现此错误 OPTIONS https localhost 3000 插入 https localhost 3000 insert净 E
  • 如何在 Java 编程中使用 GPU

    我这些天都在使用 CUDAC 来访问 GPU 但现在我的导游要求我使用 Java 和 GPU 于是我在网上搜索发现Rootbeer是最好的选择 但我无法理解如何使用 Rootbeer 运行程序 可以有一个吗告诉我使用 Rootbeer 的步
  • 在C#中使用字符串调用变量

    我试图使用循环来编辑多个文本框的数据 但我无法弄清楚如何转换内容是我的框名称的字符串来访问每个框的文本元素 private void reset Click object sender EventArgs e string cell for
  • 为什么 eval 无法访问 with 语句下的作用域变量?

    Why你不能使用访问作用域变量吗eval在一个with陈述 例如 function obj with obj console log a prints out obj a eval console log a ReferenceError
  • Three.js使用framebuffer作为纹理

    我在 Three js 中使用 canvas 元素中的图像作为纹理 使用 JavaScript 在画布上执行图像操作 然后在纹理上调用 needUpdate 这可行 但速度相当慢 我想在片段着色器中执行图像计算 我发现了很多例子almost
  • 未找到源,但无法搜索部分或全部事件日志

    我收到以下异常 我已在注册表编辑中的事件日志上授予对 Asp net 帐户的完全控制权 SecurityException 未找到源 但部分或全部事件 无法搜索日志 无法访问的日志 安全 System Diagnostics EventLo
  • 任务 IsCanceled 为 false,而我已取消

    当我取消任务时 等待结果仍然为 IsCanceled 属性返回 true 似乎出了什么问题 请指教 这是代码 CancellationTokenSource cancelLationToken new CancellationTokenSo
  • 在javascript中执行函数队列

    我正在尝试创建一个包含多个函数的函数队列 创建后我想依次执行每个函数 但是这些函数内部有延迟指令 所以我想等待每个函数完成执行后再继续 我的尝试 var funqueue funqueue push function fun1 funque
  • 如何比较两个 LTL?

    如何比较两个 LTL 以确定其中一个是否可以相互矛盾 我问这个问题是因为我有一个分层状态机和描述每个状态下行为的 LTL 我需要知道本地零担是否可以与全局零担相矛盾 我在 功能规范和自动冲突检测 一文中看到 如果 L f 交集 L g 为空