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 的参考资料 - 它是如何工作的[内部理论]? 的相关文章

  • 在 Windows 上安装 Z3 + Python

    我很难让 Z3 Python 前端在 Windows 7 上使用 Codeplex 的 Z3 版本 4 3 0 运行 作为 MSI 文件分发的旧版本 4 1 2 在我的 Windows 7 上运行良好 首先 我无法使用 codeplex 中
  • Z3 Java API 文档

    我已经安装了Z3 API for Java我正在尝试使用它 但找不到任何解释如何使用此 API 的文档 到目前为止我找到的唯一资源是源代码和示例程序 所以我想知道是否有人知道任何其他文档Z3 Java API 目前 Java API 没有单
  • 为什么已经弹出的范围会影响后续范围中的 check-sat 时间?

    一般问题 我已经注意到好几次了push pop已经弹出的范围似乎会影响check sat在后续范围的需要 也就是说 假设一个程序具有多个 可能任意嵌套 push pop 作用域 每个作用域都包含一个 check sat 命令 此外 假设第二
  • Z3中的parthood定义

    我试图在 Z3 中定义集合对 使用数组定义 之间的部分关系 在下面的代码中称为 C 我写了 3 个断言来定义自反性 传递性和反对称性 但 Z3 返回 未知 我不明白为什么 define sort Set Array Int Bool dec
  • 避免 Z3 中的量词

    我正在尝试 Z3 其中结合了算术 量词和等式的理论 这似乎不是很有效 事实上 在可能的情况下用所有实例化的基础实例替换量词似乎更有效 考虑以下示例 其中我对函数的唯一名称公理进行了编码f需要两个参数Obj并返回解释的排序S 该公理指出 每个
  • 从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中数组的理论:(1)模型很难理解,(2)不知道如何实现功能,(3)与序列的区别

    继发布于的问题之后Z3 Py 中的数组的表现力如何 一个例子 https stackoverflow com questions 73778513 how expressive can we be with arrays in z3py a
  • 哪里可以找到 z3py 教程

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

    我需要一个定理证明器来解决一些简单的线性算术问题 然而 即使是简单的问题我也无法让 Z3 工作 我知道它不完整 但是它应该能够处理这个简单的示例 assert forall t Int t 5 check sat 我不确定我是否忽略了某些事
  • 为什么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公式 我四处寻找 一无所获 对于那些计算指令
  • 在 SMTLIB v2 输入中使用 :pattern 不断获得“未知”结果

    我在 Z3 中使用 SMTLIBv2 输入格式和模式时遇到问题 通过以下输入 我不断得到 未知 结果 declare datatypes L L0 L1 declare fun path List L declare fun checkTr
  • 如何从 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 将数组的默认值设置为零

    我正在尝试求解数组表达式的模型 其中数组的默认值等于 0 例如 我正在尝试解决这个例子 但我总是得到未知的结果 declare const arr Array Int Int declare const arr2 Array Int Int
  • 如何估计在 z3 for SMT 中解决 SAT 部分所花费的时间?

    我已经使用探查器 gprof statshere http www ccs neu edu jaideep example2 stats包括调用图 并试图将所花费的时间分为两类 I SAT 求解部分 包括 纯 布尔传播和 纯 布尔冲突子句检
  • 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 C API 在运行时更改超时

    是否可以使用 C API 在运行时更改求解器的超时值 为了设置超时 可以执行以下操作 Z3 config cfg Z3 mk config Z3 set param value cfg SOFT TIMEOUT 10000 set time

随机推荐