为Z3开发新理论解算器的指南和/或最少工作示例

为Z3开发新理论解算器的指南和/或最少工作示例,z3,Z3,从StackExchange之前提出的许多问题中,我了解到该理论 该插件现在在Z34.x中已被弃用,人们现在希望它能编写自己的理论求解器并从头开始编译Z3 然而,我找不到任何指导方针和/或简单的工作示例来说明如何实现这些新的理论解算器。有没有我错过的地方已经有空?如果没有,是否有人编写了一个新的理论求解器来共享代码?目前还没有新理论的官方示例或文档。首先,您应该决定是否需要一个与smt内核中所有其他理论集成的实际理论,或者是否可以在一个策略中实现您的目标(这可能需要更少的编码工作) 我目前正在开

从StackExchange之前提出的许多问题中,我了解到该理论 该插件现在在Z34.x中已被弃用,人们现在希望它能编写自己的理论求解器并从头开始编译Z3


然而,我找不到任何指导方针和/或简单的工作示例来说明如何实现这些新的理论解算器。有没有我错过的地方已经有空?如果没有,是否有人编写了一个新的理论求解器来共享代码?

目前还没有新理论的官方示例或文档。首先,您应该决定是否需要一个与smt内核中所有其他理论集成的实际理论,或者是否可以在一个策略中实现您的目标(这可能需要更少的编码工作)


我目前正在开发一个浮点数理论插件,这是一个特别简单的理论,因为它只将浮点约束转换为位向量(然后是布尔值)。这一部分还不在主分支中,但您可以在的
fpaapi
分支中看到它(确保在网页上选择了正确的分支,否则您将只看到尚未实现的存根)。

我查看了z3c/C++/pythonapi上的理论、战术和所有文档。如果我是对的,我在代码中没有看到任何回调添加到Z3引擎的原因是,您的理论没有进行额外的推理。也就是说,位向量可以完全表示fpa,而fpa实际上是一个接口,使用户能够使用数字而不是位序列。然而,我对具有额外推理能力的理论感兴趣,比如尼古拉关于工程新理论的论文。有没有像这些理论那样简单的理论实现?如果没有,我会有更具体的问题。没错,理论fpa是一个特别简单的例子。我不知道还有其他类似的简单例子。但在高层次上,这里唯一缺少的是分配和最终检查。您必须决定在assign__eh中要做多少工作,以及在调用final_check时要完成多少工作。当然,您还可以查看所有其他的理论实现。src/smt/smt_theory.h包含带有大量注释的理论基类。