Z3/SMT:我什么时候应该选择推送/弹出来重置?

2024-01-21

我使用 Z3 来解决符号执行器产生的路径条件,该执行器以深度优先顺序探索状态空间,与 CUTE、DART 或(可能)SAGE 非常相似。我们正在尝试使用 Z3 的不同方式。在一种极端情况下,我们将每个查询发送到 Z3 并在之后立即(重置)它。另一方面,我们(推送)每个附加分支约束,并在回溯时(弹出)正确削弱路径条件所需的最小值。问题是,似乎没有一种策略在所有情况下都比其他策略更有效。推送似乎提供了最好的优势,但我们遇到了一些情况,在每次查询后重置 Z3 比推送/弹出快一个数量级以上。请注意,通信开销可以忽略不计:几乎所有时间都花在 check-sat 内。

有没有人有任何经验可以分享,或者关于 Z3 内部保存的状态的一些指示(引理等),这可以帮助澄清其行为?其他 SMT 求解器的行为又如何呢?


下一个版本(v4.3.2)将公开一个可能对您有用的功能。在 Z3 中,默认求解器结合了非增量求解器和增量求解器。什么时候push/pop被使用(或多个check使用 s 而不调用reset),Z3将使用增量求解器。在下一个版本中,我们可以为增量求解器提供超时。如果增量求解器在给定的超时时间内无法解决问题,Z3 将自动切换到非增量求解器。也许,如果您使用此功能,您将能够获得“两全其美”的好处。要获取下一个候选版本的源代码,您应该使用

git clone https://git01.codeplex.com/z3 -b rc

为了编译它,我们使用

cd z3
python scripts/mk_make.py
cd build
make

要设置增量求解器的超时,我们必须提供以下命令行选项:

 combined_solver.solver2_timeout=<time in milliseconds>

如果您使用的是编程 API,则可以使用新 API:

Z3_global_param_set(Z3_string param_id, Z3_string param_value)

请注意,下一个版本将有一个新的参数设置框架。它允许用户设置内部 Z3 模块的参数。

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

Z3/SMT:我什么时候应该选择推送/弹出来重置? 的相关文章

  • 通过 Z3 C++ API 使用浮点运算

    我正在尝试使用 Z3 解决非线性实数问题 我需要 Z3 来生成多个解决方案 在问题域中 精度并不是关键问题 我只需要小数点后一位或两位小数 因此 我需要设置 Z3 不探索实数的所有搜索空间 以最大限度地减少找到多个解决方案的时间 我正在尝试
  • 如何在线使用Z3Py解决运算放大器的问题

    求下列电路中R的值 使用以下代码可以解决此问题 R V1 V2 Vo Reals R V1 V2 Vo I1 V1 R 50 I2 V2 R 10 g R I1 I2 print g equations Vo g print equatio
  • 有没有办法获取Z3中的默认上下文?

    我正在使用 z3py API 4 3 0 我可以轻松翻译一个表达expr从默认上下文到新上下文target ctx using expr translate target ctx 但是我如何从给定的上下文中进行翻译ctx进入默认的 Z3 上
  • 【无标题】SMT贴片加工过程中需要注意的事项

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

    对于正确的方法 Z3能否找到该方法验证条件的模型 我原以为不会 但这里有一个例子 该方法是正确的 但验证发现了一个模型 这是 Dafny 1 9 7 的情况 Malte 所说的是正确的 我发现它也得到了很好的解释 Dafny 是健全的 因为
  • Z3 Optimize 最大和最小功能背后的理论是什么?

    我写这封信是为了询问 Z3 Optimize 功能背后的理论 算法 特别是它的maximum and minimum功能 这对我来说似乎很神奇 它是某种二分搜索吗 它如何有效地计算出这里的最大 最小值 我试图搜索相关功能的源代码 例如 ex
  • 任意长度的通用位向量类型

    出于与此处描述相同的原因 用户定义的未解释函数 https stackoverflow com questions 7740556 equivalent of define fun in z3 api 我想定义我自己的未解释函数 bvred
  • 如何从 Z3 中的 Seq 类型中提取元素作为基本类型?

    如何将序列中的元素提取到基本类型 以便以下内容正常工作 define sort ISeq Seq Int define const x ISeq seq unit 5 define const y ISeq seq unit 6 asser
  • 如何将公式转换为析取范式?

    说给定一个公式 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 求解器中 MAxSMT 和用户定义成本函数的组合

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

    我有一些代码 我想在一些策略的帮助下检查它们 因为我有很多if then else声明 我要申请elim term ite tactic 我使用了以下策略 check sat using then simplify arith lhs tr
  • Z3 实数算术和数据类型理论整合得不太好

    这与我之前问过的问题有关Z3 SMT 2 0 与 Z3 py 实现 https stackoverflow com questions 13826217 z3 smt 2 0 vs z3 py implementation我实现了无穷大正实
  • 根据求解器的决定执行 get-model 或 unsat-core

    我想知道 SMT LIB 2 0 脚本中是否有可能访问求解器的最后一个可满足性决策 sat unsat 例如 以下代码 set option produce unsat cores true set option produce model
  • Z3 C API 在运行时更改超时

    是否可以使用 C API 在运行时更改求解器的超时值 为了设置超时 可以执行以下操作 Z3 config cfg Z3 mk config Z3 set param value cfg SOFT TIMEOUT 10000 set time
  • Z3统计中内存使用量的单位是什么?

    z3 统计中测量内存使用情况的单位是什么 是MB还是KB 记忆到底意味着什么 是执行期间的最大内存使用量还是所有分配的总和 它是执行期间最大堆大小的近似值 并通过 cmd context cpp 中的以下函数将其添加到统计对象中 void
  • 为什么 Z3 对于很小的搜索空间来说很慢?

    我正在尝试制作一个 Z3 程序 在 Python 中 它生成执行某些任务的布尔电路 例如 添加两个 n 位数字 但性能非常糟糕 以至于对整个解决方案空间进行强力搜索将导致快一点 这是我第一次使用 Z3 所以我可能会做一些影响我性能的事情 但
  • Z3 Java API 定义函数

    我需要您帮助使用 Z3 Java API 定义函数 我尝试解决这样的问题 与 z3 exe 进程一起工作正常 declare fun a Real declare fun b Real declare fun c Bool define f
  • 如何以跨系统的方式将进程仅绑定到物理核心?

    我在用着每次将线程数加倍的项目 https github com ConsenSys mythril pull 1372 files 您会增加 40 到 60 的开销 由于超线程将性能最多提高了 30 这意味着程序在超线程系统上的运行速度比
  • 如何解决 Z3 中的最小化约束?

    谁能告诉我如何通过 Z3py 实现最小化整数问题 如下所示 我如何定义所有语句 这里所有的变量都是int排序的 Z3中有没有专门的求解器可以解决此类问题 如果有的话 我该如何设置该解算器的配置 Thanks 以下是一些相关 类似的问题和答案
  • 通过 C/C++ API 对 Z3 中的 LIA 进行量词消除

    我想使用 Z3 通过 C C API 消除线性整数算术公式中的量词 考虑一个简单的例子 Exists x x 0 我尝试这样做 context ctx ctx set ELIM QUANTIFIERS true expr x ctx int

随机推荐

  • 在 C++ 中设置差异

    如果我知道一个集合是另一个集合的子集 并且我想找出差异 那么最有效的方法是什么 前任 伪代码 gt set
  • 对于生成 1..n 范围内的 N 个唯一随机数,以下哪种算法在性能和顺序方面更好?

    1 取一个包含 n 个元素的数组 1 2 3 n 使用任意随机洗牌数组的标准算法对数组进行洗牌 修改后的数组的前 N 个元素就是您要查找的内容 2 只需使用Random Next 循环并检查它是否已经存在于Dictionary 直到我们有
  • 未显示数据库中的 JSF bean

    我有以下豆 import java util List import javax faces bean RequestScoped import javax annotations ManagedBean import javax pers
  • 我怎样才能用承诺重写这个?

    我正在为 T 恤网站构建内容抓取器 目标是仅通过一个硬编码的 url 进入网站 http shirts4mike com 然后 我将找到每件 T 恤的所有产品页面 然后创建一个包含其详细信息的对象 然后将其添加到数组中 当数组填满 T 恤时
  • 关于图形工具中嵌套块模型的基本问题

    非常简短地提出两到三个基本问题minimize nested blockmodel dl https graph tool skewed de static doc inference html graph tool inference m
  • C# 的跨平台嵌入式数据库/键值存储 [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找一种快速 可嵌入的键 值存储 其具有键集合上的游标语义 或简单的可嵌入数据库 可以在 NET
  • 小端和大端

    我必须编写一个例程来在两种表示形式之间进行转换 但我有点困惑 如果我有一个内存为 32 位字的架构 我必须存储字 0xA15D23B1 使用 Big endian 时 内存在 23 之后的 5D 之后变为 A1 最后变为 B1 使用 Lit
  • bootstrap.yml 未加载 Spring Boot 2

    我遇到了与此类似的问题thread https stackoverflow com questions 48300174 my application does not read bootstrap yml why is that 尚未解决
  • 递归泛型

    有没有办法使此方法适当通用并消除警告 p Sort a collection by a certain value in its entries This value is retrieved using the given code va
  • Angular 5 路由:空路径内的空路径

    我正在使用 Angular 5 尝试将空路径子路由加载到空路径父布局路由中 FullLayoutComponent 始终会加载 而 WhyUsComponent 组件会在我访问 localhost 4200 why us 时加载 但是当我访
  • 从移动应用程序向 Android Wear 发送数据延迟 [重复]

    这个问题在这里已经有答案了 我正在尝试在设置应用程序和表盘之间同步数据 但运气不佳 我尝试使用 googleApiClient 与侦听器 onDataChanged 和 DataMaps 但穿戴设备接收数据有很大的延迟 我说的是从手机发送到
  • 如何在常量正确性下实现 strtol ?

    根据http www cplusplus com reference cstdlib strtol http www cplusplus com reference cstdlib strtol 该函数的签名为long int strtol
  • 如何根据角色获取用户?

    如何从 MembershipUserCollection 中检索 客户 角色的用户 Roles GetUsersInRole返回一个string 角色中的用户名 如果你真的想要MembershipUser对象 您可以使用 var list
  • R plm 与 Fixst 包 - 结果不同?

    我试图理解为什么 R 包 plm and fixest 当我使用异方差稳健标准误差 HC1 和状态固定效应估计面板模型时 给我不同的标准误差 有人给我提示吗 这是代码 library AER For the Fatality Dataset
  • setup.cfg Python 项目的单源包版本

    对于具有以下功能的传统 Python 项目setup py 有多种方法可以确保版本字符串不必在整个代码库中重复 看PyPA 的 单一来源包版本 指南 https packaging python org guides single sour
  • “in”关键字有什么用?

    在 Haskell 中 为什么不在 do 块内使用 in 和 let 而必须以其他方式使用 例如 在下面有些人为的示例中 afunc Int gt Int afunc a let x 9 in a x amfunc IO Int gt IO
  • 如何从左向右推送具有滑动效果的ViewController?动画名称必填

    EDIT 下面这个 gif 的动画名称是什么 从右到左 下面这个gif 从左到右 的补充动画的动画名称是什么 NOTE 我不想继续下去 我想用该动画推送视图 EDIT 2 当我谈论动画名称时 有些人会感到困惑 然而 这里是一个有效的动画名称
  • 流定义

    我正在阅读 Java I O 流 但我对与它们相关的正确定义感到困惑 有人说流是一种传输数据的传送带 其他人说流是流或 数据序列 其他人说流是 连接到输入或输出 来源 那么正确的定义是什么 流是一个概念 但没有那么严格 只有一个描述是正确的
  • Bookdown 按照 _bookdown.yml 中指定的章节顺序停止

    Bookdown 将按字母顺序对章节进行排序 除非之后指定订单rmd files in the bookdown yml file https bookdown org yihui bookdown usage html 这在过去对我来说效
  • Z3/SMT:我什么时候应该选择推送/弹出来重置?

    我使用 Z3 来解决符号执行器产生的路径条件 该执行器以深度优先顺序探索状态空间 与 CUTE DART 或 可能 SAGE 非常相似 我们正在尝试使用 Z3 的不同方式 在一种极端情况下 我们将每个查询发送到 Z3 并在之后立即 重置 它