Z3 的参考资料 - 它是如何工作的[内部理论]?

2024-02-04

我有兴趣阅读 Z3 背后的内部理论。具体来说,我想了解 Z3 SMT 求解器的工作原理,以及它如何找到不正确模型的反例。我希望能够手动计算出一些非常简单的示例的跟踪。

然而,所有 Z3 参考文献似乎都是如何在其中编码;或对其算法的非常高级的描述。我无法找到所使用算法的描述。这些信息不是微软没有公开的吗?

谁能引用任何参考文献(论文/书籍)来全面了解 Z3 的理论+工作?


我个人的观点是,最好的参考文献是 Kroening 和 Strichman 的决策程序 https://rads.stackoverflow.com/amzn/click/com/3662570653书。 (确保获得第二版,因为它有很好的更新!)它涵盖了几乎所有感兴趣的主题,并且有一定深度,并且后面有许多参考资料供您跟进。这本书还有一个网站http://www.decision-procedures.org http://www.decision-procedures.org包括额外的阅读材料、幻灯片和项目想法。

该领域的另一本有趣的书是 Bradley 和 Manna 的计算微积分 https://rads.stackoverflow.com/amzn/click/com/3642093477。虽然本书并非专门针对 SAT/SMT,但它涵盖了许多类似的主题以及这些想法如何在程序验证领域发挥作用。另请参阅http://theory.stanford.edu/~arbrad/pivc/index.html http://theory.stanford.edu/%7Earbrad/pivc/index.html相关软件/工具。

当然,这两本书都不是专门针对 z3 的,因此您在其中找不到有关 z3 本身如何构建的任何详细信息。对于 z3 编程及其背后的一些理论,“教程”论文 https://theory.stanford.edu/%7Enikolaj/programmingz3.htmlBjørner、de Moura、Nachmanson 和 Wintersteiger 的著作非常值得一读。

一旦您阅读完这些内容,我建议您根据您的兴趣阅读开发人员的个别论文:

  • 比约纳:https://www.microsoft.com/en-us/research/people/nbjorner/publications/ https://www.microsoft.com/en-us/research/people/nbjorner/publications/

  • 德莫拉:https://www.microsoft.com/en-us/research/people/leonardo/publications/ https://www.microsoft.com/en-us/research/people/leonardo/publications/

  • 温特施泰格:https://www.microsoft.com/en-us/research/people/cwinter/publications/ https://www.microsoft.com/en-us/research/people/cwinter/publications/

  • 纳赫曼森:https://www.microsoft.com/en-us/research/people/levnach/publications/ https://www.microsoft.com/en-us/research/people/levnach/publications/

当然,互联网上有大量资源、许多论文、演示文稿、幻灯片等。您可以直接在这个论坛中直接提出具体问题,或者对于真正的 z3 内部具体问题,您可以使用他们的讨论论坛 https://github.com/Z3Prover/z3/discussions.

Note关于克罗宁和斯特里奇曼的书版本之间的差异,作者们是这么说的:

本书的第一版被全球范围内的课程采用为教科书。它于 2008 年发布,当时现在称为 SMT 的领域还处于起步阶段,还没有现在拥有的标准术语和规范算法;第二版反映了这些变化。提出了DPLL(T)框架。它还用现代 SAT 启发法扩展了 SAT 章节,并包括关于增量可满足性和相关约束满足问题 (CSP) 的新部分。关于量词的章节得到了扩展,添加了关于使用电子匹配进行一般量化的新部分和关于有效命题推理 (EPR) 的部分。该书还包括关于 SMT 在工业软件工程和计算生物学中应用的新章节,分别由 Nikolaj Bjørner 和 Leonardo de Moura 以及 Hillel Kugler 合着。

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

Z3 的参考资料 - 它是如何工作的[内部理论]? 的相关文章

  • 混合实数和位向量

    我有两个使用实数的 SMT2 Lib 脚本 它们在道德上是等效的 唯一的区别是 一个也使用位向量 而另一个则不使用 这是同时使用实数和位向量的版本 uses both reals and bit vectors set option pro
  • Z3 Java API 文档

    我已经安装了Z3 API for Java我正在尝试使用它 但找不到任何解释如何使用此 API 的文档 到目前为止我找到的唯一资源是源代码和示例程序 所以我想知道是否有人知道任何其他文档Z3 Java API 目前 Java API 没有单
  • 在 Z3-Python 中,执行模型搜索时出现“builtin_function_or_method' object is not iterable”

    我正在探索在 Z3 Python 中执行 SAT 求解的快速方法 为此 我尝试模仿第 5 1 章的结果https theory stanford edu nikolaj programmingz3 html sec blocking eva
  • SMT 中的混合理论

    我想构造一个 SMT 公式 其中包含对整数线性算术和布尔变量的多个断言 以及对实际非线性算术和布尔变量的一些断言 对整数和实数的断言仅共享布尔变量 例如 请考虑以下公式 declare fun b Bool assert b true de
  • z3在处理非线性实数运算时能否始终给出结果

    我有一个问题需要解决一组非线性多项式约束 在处理非线性实数算术时 z3 能否始终给出结果 sat 或 unsat 结果也还好吗 是的 假设 1 资源可用 并且 2 您仅使用实际约束 以便nlsat使用了策略 正如我上次检查的那样 它没有与其
  • 如何在线使用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
  • 哪里可以找到 z3py 教程

    由于某些安全问题 rise4fun z3py 将在几周内不可用 我试图找到一些学习z3py的资源但徒劳无功 请推荐一些学习z3py的资源 我使用 Z3Py 教程源创建了一个 zip 文件 它基本上是一些 HTML 页面和一堆 python
  • 在 Mac OS X 上构建 z3

    我正在尝试建立Z3 http z3 codeplex com releases view 95640在 Mac OS X 上 按照 README 文件 我刚刚执行了 autoconf configure make 收到错误 omp h 文件
  • 为什么0=0.5?

    我注意到 Z3 4 3 1 在处理 smt2 文件时出现一些奇怪的行为 If I do assert 0 0 5 就会得到满足 但是 如果我改变顺序并执行 assert 0 5 0 这是不能令人满意的 我对发生的情况的猜测是 如果第一个参数
  • z3 中使用哪些技术来处理非线性整数实数问题?

    以下是 a 的 z3 统计数据problem http www ccs neu edu home jaideep example smt2在非线性整数实数片段中 我的许多问题与此类似 add rows 11062574 added eqs
  • 将 IR 转换为 Z3 公式?

    我在 IR 中有一些代码 并且该代码已经是 SSA 形式 现在我正在尝试将此代码转换为SMT公式 然后将其提供给Z3进行一些验证 我有一些疑问 有没有技术论文详细解释如何将SSA IR转换为SMT公式 我四处寻找 一无所获 对于那些计算指令
  • 如何从 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 支持非线性算术

    我知道 Z3 对非线性算术有一些支持 但想知道扩展到什么范围 是否可以指定支持和不支持 或可能超时 哪些类别的非线性算术 提前了解这些将帮助我尽早放弃我的任务 似乎不支持与电源相关的内容 如下所示 def pow2 x k Int k re
  • 如何估计在 z3 for SMT 中解决 SAT 部分所花费的时间?

    我已经使用探查器 gprof statshere http www ccs neu edu jaideep example2 stats包括调用图 并试图将所花费的时间分为两类 I SAT 求解部分 包括 纯 布尔传播和 纯 布尔冲突子句检
  • 为什么 Z3 在这个简单的输入上返回“未知”?

    这是输入 set option auto config false set option mbqi false declare sort T6 declare sort T7 declare fun set23 T7 T7 Bool ass
  • Z3统计中内存使用量的单位是什么?

    z3 统计中测量内存使用情况的单位是什么 是MB还是KB 记忆到底意味着什么 是执行期间的最大内存使用量还是所有分配的总和 它是执行期间最大堆大小的近似值 并通过 cmd context cpp 中的以下函数将其添加到统计对象中 void
  • 如何以跨系统的方式将进程仅绑定到物理核心?

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

    谁能告诉我如何通过 Z3py 实现最小化整数问题 如下所示 我如何定义所有语句 这里所有的变量都是int排序的 Z3中有没有专门的求解器可以解决此类问题 如果有的话 我该如何设置该解算器的配置 Thanks 以下是一些相关 类似的问题和答案
  • 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

随机推荐