将理论插件与求解器结合使用

2024-03-15

最新版本Z3 http://z3.codeplex.com解耦了以下概念Z3_context and Z3_solver. The API http://research.microsoft.com/en-us/um/redmond/projects/z3/group__capi.html主要反映了这些变化;例如push在上下文中已弃用,并重新指定为将求解器作为额外参数。

然而,理论界面尚未更新。理论仍然是根据上下文创建的,据我所知,理论从未明确附加到求解器。

人们可能会认为从上下文创建的理论将始终附加到从上下文创建的所有求解器,但根据我们的经验,情况似乎并非如此。相反,用户定义的理论似乎完全被忽略了。

组合的具体状态如何Z3_solvers with Z3_theorys ?


理论插件很久以前就被引入了(2.8版本),从那时起Z3已经发生了很大的变化。 它们在 Z3 4.x 中被视为已弃用。它们仍然可以与旧 API 一起使用,但不能与新功能一起使用,特别是与 Z3 解算器对象一起使用(Z3_solver).

在当前的 Z3 中,我们有许多不同的求解器。最旧的一个(在文件夹中实现src/smt) 叫做smt::context。理论插件实际上是这个旧求解器的扩展。 我们说smt::context是一个通用求解器,因为它支持许多理论和量词。 实际上,在 Z3 4.3.1 中,它是唯一可用的通用求解器。 然而,我认为它基于过时的架构,不足以满足我们为 Z3 规划的新功能。我的计划是将来用基于所描述的架构的求解器替换它here http://research.microsoft.com/en-us/um/people/leonardo/files/mcsat.pdf。 此外,我们并没有真正致力于smt::context不再了。我们本质上只是维护它并修复错误。

在我们发布 Z3 源代码后,我想不再需要理论插件支持,因为用户可以在 Z3 代码库中添加他们的扩展。然而,这种观点过于简单化,因为它阻止了用户用不同的编程语言编写扩展。 因此,当前的计划是最终为新求解器提供理论插件,最终将在 Z3 中提供。目标是拥有一个 API,例如:

  Z3_solver Z3_mk_mcsat_solver(Z3_context ctx, Z3_mcsat_ext ext);

该 API 将使用给定的扩展创建一个新的求解器对象ext.

同时,我们还可以使用以下函数扩展 API:

  Z3_solver Z3_mk_smt_solver(Z3_context ctx, Z3_theory t);

这将创建一个新的求解器对象smt::context使用给定的理论插件。 这个解决方案在概念上很简单,但需要大量的“管道”才能实现。 我们必须调整Z3_theory对象,修复了一些限制,这些限制阻止理论插件与创建对象副本的功能一起使用smt::context (e.g., MBQI)等。如果有人对这个界面非常感兴趣,我会在上面投入周期(注:我们的理论插件只有少数用户)。我对此并不是很兴奋,因为计划最终会取代smt::context.

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

将理论插件与求解器结合使用 的相关文章

  • 表示 SMT-LIB 中的时间约束

    我试图在 SMT LIB 中表示时间约束 以检查它们的可满足性 我正在寻找有关我所采取的方向的反馈 我对 SMT LIB 比较陌生 非常感谢您的意见 我所面临的限制是事件的时间和持续时间 例如 考虑以自然语言给出的以下约束 约翰在 13 0
  • Z3 Solver Java API:意外行为

    通过向求解器添加条件 我想使用 solver check 检查是否存在解 因此 我创建了一个简单的示例来寻找 t1 的解决方案 我知道 t1 有一个解 即 t1 0 然而 求解器的状态不是 SATISFIABLE public static
  • 确定任意命题公式中变量的上/下界[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 给定一个任意命题公式 PHI 某些变量的线性约束 确定每个变量的 近似 上限和下限的最佳方法是什么 有些变量可能是无界的 在这种情况下 算
  • 从Z3能得到最终的CNF公式吗?

    这是我的简单编码 我想得到包含所有这些约束的最终布尔 CNF Z3 解算器中是否有任何选项可以获得最终的布尔 CNF x Int x y Int y c1 And x gt 1 x lt 10 c2 And y gt 1 y lt 10 c
  • Z3 返回型号不可用

    如果可能的话 我想要对我的代码有第二意见 问题的约束条件是 a b c d e f是非零整数 s1 a b c and s2 d e f 是集合 The sum s1 i s2 j for i j 0 2必须是一个完美的正方形 我不明白为什
  • 如何让 z3 返回多个 unsat 核心、多个令人满意的作业

    我正在研究一个研究工具的一个组件 我有兴趣检索 对于 QF LRA 多个 最少或其他 UNSAT核心以及 多项 SAT 作业 我检查了论坛以获取有关此主题的早期讨论 例如 在逻辑 QF LRA 上使用 z3 时如何获得不同的 unsat 核
  • Z3 量词支持

    我需要一个定理证明器来解决一些简单的线性算术问题 然而 即使是简单的问题我也无法让 Z3 工作 我知道它不完整 但是它应该能够处理这个简单的示例 assert forall t Int t 5 check sat 我不确定我是否忽略了某些事
  • z3 中如何定义 Int 排序(SMT-LIB 2.0 Ints 理论)和动态声明排序?

    这是我使用 z3 执行的 SMT LIB 2 0 基准测试 set logic AUFLIA declare sort PZ 0 declare fun MS Int PZ Bool assert forall x Int exists X
  • 在 Mac OS X 上构建 z3

    我正在尝试建立Z3 http z3 codeplex com releases view 95640在 Mac OS X 上 按照 README 文件 我刚刚执行了 autoconf configure make 收到错误 omp h 文件
  • 如何从 Z3 中的 Seq 类型中提取元素作为基本类型?

    如何将序列中的元素提取到基本类型 以便以下内容正常工作 define sort ISeq Seq Int define const x ISeq seq unit 5 define const y ISeq seq unit 6 asser
  • 使用 Z3 SMT 解决谓词演算问题

    我想使用 Z3 来解决最自然地用原子 符号 集合 谓词和一阶逻辑表达的问题 例如 伪代码 A a1 a2 a3 A is a set B b1 b2 b3 C c1 c2 c3 def p a A b B c C gt Bool p is
  • 了解 z3 模型

    Z3Py 片段 x Int x fun Function fun IntSort IntSort IntSort phi ForAll x fun x x x print phi solve phi 永久链接 http rise4fun c
  • 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我实现了无穷大正实
  • Z3:检查模型是否唯一

    Z3 有没有办法证明 表明给定模型是唯一的并且不存在其他解决方案 一个小例子来演示 declare const a1 Int declare const a2 Int declare const a3 Int declare const b
  • 为什么 Z3 对于很小的搜索空间来说很慢?

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

    是否有增量 SMT 求解器或用于某些增量 SMT 求解器的 API 我可以在其中增量添加约束 在其中我可以通过某个标签 名称唯一地标识每个约束 我想唯一地标识约束的原因是这样我可以稍后通过指定标签 名称来删除它们 需要放弃约束是因为我之前的
  • Z3 python对待x**2与x*x不同?

    看来Z3 Python接口不喜欢 运算符 它可以处理x x但不能处理x 2 如下例所示 gt gt gt x y x y Reals x y gt gt gt z3 prove Implies x 6 0 x 2 36 0 failed t
  • 如何使用 Z3 SMT-LIB 证明 Frobenius 代数中的定理

    我们在弗罗贝尼乌斯代数中证明以下定理 使用以下代码进行证明 Frobenius algebra object A mu eta delta epsilon declare sort A declare sort AA declare sor

随机推荐