Z3理论插件分解成子问题

Z3理论插件分解成子问题,z3,Z3,有时(或多次)会发生问题太大以至于Z3解算器出现很多超时。在这种情况下,我认为将问题分成更小的子问题是有益的 我想特别问一下Z3中的理论插件 假设我有3个变量A、B和C。我给每一个都赋值。 假设由于我指定的一些约束,分配的值是A=0和B=1。现在,根据A和B的这些值,C使用另一组方程进行计算,这些方程可能没有编码为约束。在这种情况下,是否可以编写一个理论插件,该插件将说明当a和B分配了某些值时,然后回调到某些函数以返回C的值 我在示例目录中看到了一个理论示例,但对我来说不是很清楚。我还试着阅读文

有时(或多次)会发生问题太大以至于Z3解算器出现很多超时。在这种情况下,我认为将问题分成更小的子问题是有益的

我想特别问一下Z3中的
理论插件

假设我有3个变量
A、B和C
。我给每一个都赋值。 假设由于我指定的一些约束,分配的值是
A=0
B=1
。现在,根据
A和B
的这些值,
C
使用另一组方程进行计算,这些方程可能没有编码为约束。在这种情况下,是否可以编写一个理论插件,该插件将说明当
a和B
分配了某些值时,然后回调到某些函数以返回
C
的值


我在示例目录中看到了一个理论示例,但对我来说不是很清楚。我还试着阅读文档。

理论插件不是将问题分解为子问题的理想技术。当我们想要扩展Z3支持的理论集时,通常会定义一个理论插件。例如,假设我们想要包含一个可以对字符串进行推理的模块。此模块将提供新的解释符号,例如:
子字符串
包含
,等等。 描述集合+基数约束的决策过程。此程序作为Z3的理论插件实现

也就是说,理论插件目前已被弃用。Z3仍然支持它们,但它们与新的解算器API不兼容。要使用插件,我们必须使用旧的(不推荐使用的)API

以下是一些描述Z3中理论插件API当前状态的相关帖子: