控制Z3的解决策略

时间:2016-11-02 22:05:21

标签: z3 smt equation-solving

因此,假设我在Z3中有一个很大的问题需要解决,如果我尝试一次解决它,那将花费太多时间。所以我将这个问题分成几部分并单独解决。 作为玩具示例,我们假设我的复杂问题是解决这3个方程:

eq1: x>5
eq2: y<6
eq3: x+y = 10

所以我的问题是,例如,是否可以先解决eq1和eq2。然后使用结果解决eq3。

assert eq1
assert eq2

(check-sat)

assert eq3
(check-sat)
(get-model)

似乎有效,但我不确定它在性能上是否有意义? 增量解决可能会帮助我吗?或者是否有z3的任何其他功能可用于分区我的问题?

1 个答案:

答案 0 :(得分:0)

所考虑的问题通常是可满足性问题,即目标是找到一个解决方案(模型)。满足eq1的解(模型)不一定满足eq3,因此您不能将问题减半。我们必须为eq1找到所有解决方案(模型),以便我们可以用{(1}}替换x解决方案。 (例如,这是在矩阵为对角线后高斯消除中发生的情况。)