因此,假设我在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的任何其他功能可用于分区我的问题?
答案 0 :(得分:0)
所考虑的问题通常是可满足性问题,即目标是找到一个解决方案(模型)。满足eq1
的解(模型)不一定满足eq3
,因此您不能将问题减半。我们必须为eq1
找到所有解决方案(模型),以便我们可以用{(1}}替换x
解决方案。 (例如,这是在矩阵为对角线后高斯消除中发生的情况。)