软约束是否脱节?

时间:2015-03-20 11:46:41

标签: z3

在Z3中,soft constraints可以通过将实际约束P放在暗示的右侧来实现,该暗示的左侧是新的布尔变量,例如, assert (=> b1 P)。然后,可以通过列出被认为是真的check-satb“开启”约束,例如, (check-sat b1)

问题:如果这些约束P的保护变量b 包含在check-sat中,会发生什么?我假设Z3将b的值视为未知,然后在隐含/超过b的值上分支 - 这是正确的吗?

后台:我的问题的背景是我在增量模式下使用Z3(push / pop块),并检查断言P (push)(assert (not P))(check-sat)(pop);如果check-satunsat,则P成立。 我考虑过使用软约束,即用push替换每个pop / (declare-const b_i Int)(assert (=> b_i P))(check-sat b_i)块。每个b_i只能使用一次。但是,如果Z3可以覆盖所有先前的b_j,那么听起来好像这可能会使Z3相当缓慢 - 因此我的问题。

(P.S。:我知道this answer by Leo,它说软约束也可能会降低性能,因为某些优化可能不适用。)

1 个答案:

答案 0 :(得分:0)

是的,如果b1的值不固定,它将被视为与任何其他布尔值一样。