在 Z3 中使用 SMT 约束时获取合法范围信息的(次)最佳方法

2024-01-16

这个问题与我之前的问题相关

在 Z3 中使用 SMT 约束时是否可以获得合法的范围信息 https://stackoverflow.com/questions/53676016/is-it-possible-to-get-a-legit-range-info-when-using-a-smt-constraint-with-z3

因此,考虑到典型的 32 位向量等,“有效”查找最大范围信息似乎并不合适。但另一方面,我在想是否可以找到某些“次最大”范围信息,这有望变得更加有效。另一件事是我们可能想要确定"safe"保证,对于次最大范围内的所有元素,它们必须满足约束,但也可能存在一些其他解决方案来满足约束。

我目前正在探索是否model counting技术在这种情况下可能有意义。任何想法将不胜感激。谢谢。


一般情况

这不仅仅是效率问题。考虑一个有两个变量的问题a and b,和一个单一的约束:

a != b

范围是多少b? (最大还是其他?)

你可以说所有的价值观都是合法的。但这是错误的,因为显然选择a影响选择b。周围的变量越多,问题就会变得越复杂。我认为在这种情况下问题还没有得到很好的定义,因此寻找解决方案(有效或其他)没有多大意义。

单变量假设

话虽如此,我认为你can如果您假设系统中只有一个变量,请想出一个解决方案。 (或者,如果您将所有其他变量固定为一些预定义的常量。)如果您愿意走这条路,那么您可以实现二分搜索算法,通过简单地证明量化公式来找到合理大小的范围

Exists([b], And(b >= minBound, b <= maxBound, Not(constraints)))

一旦你得到unsat为此,你有你的范围。只要你得到sat,你可以调整你的minBound/maxBound在较小的范围内进行搜索。在最坏的情况下,这可能会变成线性行走,但您可以通过确保在每个步骤中显着减小大小来“减少”此搜索。这可能是整个搜索的一个参数,具体取决于您希望间隔有多大。必须在尝试找到最大范围和您想在搜索中花费多长时间之间进行选择。当然,如果削减太多,可能会错过一个很大的区间,但这就是效率的代价。

Example1(好的情况)有一个约束说b != 5。然后你的搜索会很快,并且根据你要去哪个分支,你会找到[0, 4] or [6, 255]假设8位字。

Example2(坏情况)有一个约束说b is even。然后你的搜索将表现出最坏情况的行为,如果你的“削减”大小是 1,你可能会迭代 255 次才能确定[0, 0];假设z3为您提供每次调用中的最大奇数。

我希望这能说明这一点。不过,总的来说,我认为您会更接近实际应用的“好案例”,即使您的缩减尺寸很小,您也很可能在几次迭代中收敛。当然,这完全取决于您的问题领域,但我希望它通常适用于软件分析。

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

在 Z3 中使用 SMT 约束时获取合法范围信息的(次)最佳方法 的相关文章

  • 如何防止PCBA焊接中常见的假焊、虚焊缺陷?

    PCBA焊接加工 主要是指将PCB电路板与元器件经过焊锡工艺焊接起来的生产流程 在焊接加工过程中容易出现虚焊和假焊等焊接不良的情况 虚焊和假焊会严重影响产品的可靠性 产品的维修成本也会变高 PCBA焊接加工 中的虚焊和假焊缺陷问题有许多原因
  • 在 Z3 中定义带有约束的代数数据类型

    我看过一些在线材料 用于定义代数数据类型 例如 Z3 中的 IntList 我想知道如何定义具有逻辑约束的代数数据类型 例如 如何定义代表正整数的 PosSort SMT中的全部功能 在 SMT 中函数总是完整的 这提出了如何对部分函数 例
  • 使用函数在 z3 中创建列表

    我试图将这段伪代码转换为 SMT LIB 语言 但我卡住了 List function my fun int x list nil for i in 1 to x if some condition on i list concat i r
  • 【无标题】SMT贴片加工过程中需要注意的事项

    1 SMT贴片加工 技术员在产线上应佩戴好检验OK的防静电手环 金属片紧贴手腕并保持良好双手交替作业 插件前检查每个订单的电子元器件无错 混料 破损 变形 划伤等不良现象 2 电路板插件需要提前把电子物料准备好 注意电容极性方向须确认无误
  • 在 Z3 中使用 SMT 约束时获取合法范围信息的(次)最佳方法

    这个问题与我之前的问题相关 在 Z3 中使用 SMT 约束时是否可以获得合法的范围信息 https stackoverflow com questions 53676016 is it possible to get a legit ran
  • 正确 Dafny 方法的 Z3 模型

    对于正确的方法 Z3能否找到该方法验证条件的模型 我原以为不会 但这里有一个例子 该方法是正确的 但验证发现了一个模型 这是 Dafny 1 9 7 的情况 Malte 所说的是正确的 我发现它也得到了很好的解释 Dafny 是健全的 因为
  • 使用 Z3_solver_get_unsat_core 获取 unsat 核心

    假设这是非线性实数算术的约束集 例如 pred1 gt v2 x v0 x v1 y v0 y v2 y v0 y v1 x v0 x 0 pred2 gt v1 x v0 x v2 y v0 y v1 y v0 y v2 x v0 x 0
  • 在状态计算中“不断转动曲柄”的有效方法

    我有一个有状态的进程 被建模为i gt RWS r w s a 我想给它一个输入cmds i 目前我做的是批发 let play runGame theGame go where go finished go v n cmds do end
  • 如何将公式转换为析取范式?

    说给定一个公式 t1 gt 2 或 t2 gt 3 且 t3 gt 1 我希望得到它的析取范式 t1 gt 2 且 t3 gt 1 或 t2 gt 3 且 t3 gt 1 在Z3中如何实现这一点 Z3没有将公式转换为DNF的API或策略 然
  • Z3 支持非线性算术

    我知道 Z3 对非线性算术有一些支持 但想知道扩展到什么范围 是否可以指定支持和不支持 或可能超时 哪些类别的非线性算术 提前了解这些将帮助我尽早放弃我的任务 似乎不支持与电源相关的内容 如下所示 def pow2 x k Int k re
  • 将理论插件与求解器结合使用

    最新版本Z3 http z3 codeplex com解耦了以下概念Z3 context and Z3 solver The API http research microsoft com en us um redmond projects
  • Z3 求解器中 MAxSMT 和用户定义成本函数的组合

    我正在使用 Z3 来优化带有一些软约束 带有加权 MaxSMT 的成本函数 我很好奇 MaxSMT 和用户定义的成本函数如何交互 求解器是否最小化 MaxSMT 成本和目标函数两者 是否有优先级机制 我找不到这方面的任何文档 如果我遗漏了什
  • 目标没有战术支持

    我有一些代码 我想在一些策略的帮助下检查它们 因为我有很多if then else声明 我要申请elim term ite tactic 我使用了以下策略 check sat using then simplify arith lhs tr
  • 尝试在Python中使用Z3找到布尔公式的所有解决方案

    我是 Z3 的新手 正在尝试制作一个求解器 将每个可满足的解决方案返回到布尔公式 从其他 SO 帖子中记下笔记 我已经编写了我希望能起作用的代码 但事实并非如此 问题似乎是 通过添加以前的解决方案 我删除了一些变量 但它们又在后面的解决方案
  • Z3 SMT 求解器中的常数相等

    我正在使用 Microsoft 的 Z3 SMT 求解器 并且我正在尝试定义自定义类型的常量 默认情况下 这些常量似乎并不不平等 假设您有以下程序 declare sort S 0 declare const x S declare con
  • z3 中的函数声明

    在 z3 中是否可以声明一个以另一个函数作为参数的函数 例如 这个 declare fun foo Int Bool Int 似乎不太管用 谢谢 正如 Leonardo 提到的 SMT Lib 确实not允许高阶函数 这不仅仅是语法限制 使
  • Z3:执行矩阵运算

    我的情况 我正在开展一个项目 需要 证明正确性3D 矩阵变换 http rodrigo silveira com 3d programming transformation matrix tutorial UU65YicWsYZ涉及矩阵运算
  • Z3统计中内存使用量的单位是什么?

    z3 统计中测量内存使用情况的单位是什么 是MB还是KB 记忆到底意味着什么 是执行期间的最大内存使用量还是所有分配的总和 它是执行期间最大堆大小的近似值 并通过 cmd context cpp 中的以下函数将其添加到统计对象中 void
  • 使用SMT-LIB使用公式计算模块数量

    我不确定使用 SMT LIB 是否可以做到这一点 如果不可能 是否存在可以做到这一点的替代求解器 考虑方程 a lt 10 and a gt 5 b lt 5 and b gt 0 b lt c lt a with a b and c整数
  • 如何获取 Z3 上下文的所有可用配置设置的列表?

    net API 具有以下 Context 构造函数 Context Dictionary lt string string gt settings 如何获取所有可能设置的列表 具体来说 我对如何要求 Z3 生成 unsat 核心感兴趣 即相

随机推荐