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

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(使用前将#替换为@)

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

  • Z3统计:时间衡量什么?

    当使用 st 命令选项运行 Z3 3 1 时 我得到了奇怪的统计结果 如果按 Ctrl C Z3 会报告total time time 总时间 和 时间 衡量什么 这是一个错误 虽然很小 上面描述的差异 Thanks 这是 Z3 for L
  • Z3:int2bv 的异常

    declare const a Int declare const b Int declare const c BitVec 32 declare const d BitVec 32 assert b bv2int c assert c i
  • 如何以 smt2 格式示例获取 z3 求解器的多个解决方案?

    如何使用 smt2 格式的 z3 求解器生成位向量公式的多个模型 在为位向量实现 IDEA 代码时 它正在生成一个模型 如果存在 如何生成相同的所有可能模型 ex smt2 file set logic QF BV set info smt
  • 混合实数和位向量

    我有两个使用实数的 SMT2 Lib 脚本 它们在道德上是等效的 唯一的区别是 一个也使用位向量 而另一个则不使用 这是同时使用实数和位向量的版本 uses both reals and bit vectors set option pro
  • 表示 SMT-LIB 中的时间约束

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

    我想构造一个 SMT 公式 其中包含对整数线性算术和布尔变量的多个断言 以及对实际非线性算术和布尔变量的一些断言 对整数和实数的断言仅共享布尔变量 例如 请考虑以下公式 declare fun b Bool assert b true de
  • 使用 C++ API 进行数组选择和存储

    我正在使用 z3 v 4 1 我正在使用 C API 并尝试在上下文中添加一些数组约束 我在 C API 中没有看到选择和排序函数 我尝试混合使用 C 和 C API 在示例中array example1 如果我将上下文变量从Z3 Cont
  • 确定任意命题公式中变量的上/下界[关闭]

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

    我在当前使用 Z3 for Java 的项目中遇到了一些性能问题 基本上我当前的大多数限制都非常简单 例如 f x 2 f y lt 3 f x lt 5 我正在使用整个项目共享的静态上下文和解算器实例 public class Const
  • 从 z3 模型中仅提取一个值

    我正在寻找相当于 z3 源 API获取价值 例如 当我有以下查询时 我可以轻松指定我想要查看哪些值 declare const s1 String declare const s2 String assert 8 str len s1 as
  • 哪里可以找到 z3py 教程

    由于某些安全问题 rise4fun z3py 将在几周内不可用 我试图找到一些学习z3py的资源但徒劳无功 请推荐一些学习z3py的资源 我使用 Z3Py 教程源创建了一个 zip 文件 它基本上是一些 HTML 页面和一堆 python
  • 使用函数在 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
  • Z3Py 中最大值的模型不正确

    我想找到一个表达式的最大间隔e对于所有 x 都成立 编写这样的公式的方法应该是 Exists d ForAll x in d d e and ForAll x not in d d e 为了得到这样一个d 公式f在 Z3 中 看上面的 可能
  • Z3 Optimize 最大和最小功能背后的理论是什么?

    我写这封信是为了询问 Z3 Optimize 功能背后的理论 算法 特别是它的maximum and minimum功能 这对我来说似乎很神奇 它是某种二分搜索吗 它如何有效地计算出这里的最大 最小值 我试图搜索相关功能的源代码 例如 ex
  • 为什么0=0.5?

    我注意到 Z3 4 3 1 在处理 smt2 文件时出现一些奇怪的行为 If I do assert 0 0 5 就会得到满足 但是 如果我改变顺序并执行 assert 0 5 0 这是不能令人满意的 我对发生的情况的猜测是 如果第一个参数
  • 将 IR 转换为 Z3 公式?

    我在 IR 中有一些代码 并且该代码已经是 SSA 形式 现在我正在尝试将此代码转换为SMT公式 然后将其提供给Z3进行一些验证 我有一些疑问 有没有技术论文详细解释如何将SSA IR转换为SMT公式 我四处寻找 一无所获 对于那些计算指令
  • 如何将公式转换为析取范式?

    说给定一个公式 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
  • 根据求解器的决定执行 get-model 或 unsat-core

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

随机推荐