Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Z3 软约束是析取吗?_Z3 - Fatal编程技术网

Z3 软约束是析取吗?

Z3 软约束是析取吗?,z3,Z3,在Z3中,可以通过将实际约束p放置在其左侧为新布尔变量的蕴涵的右侧来实现,例如assert(=>b1p)。然后,可根据检查sat通过列出被视为正确的bs来“打开”约束,例如(检查sat b1) 问题:如果其保护变量b未包含在检查sat中,则此类约束p会发生什么情况?我假设Z3将b的值视为未知值,然后在implication/overb的值上分支-正确吗 背景:我问题的背景是我在增量模式下使用Z3(push/pop块),并且我通过(push)(assert(not p))(check sat)(p

在Z3中,可以通过将实际约束
p
放置在其左侧为新布尔变量的蕴涵的右侧来实现,例如
assert(=>b1p)
。然后,可根据
检查sat
通过列出被视为正确的
b
s来“打开”约束,例如
(检查sat b1)

问题:如果其保护变量
b
未包含在
检查sat中,则此类约束
p
会发生什么情况?我假设Z3将
b
的值视为未知值,然后在implication/over
b
的值上分支-正确吗

背景:我问题的背景是我在增量模式下使用Z3(
push
/
pop
块),并且我通过
(push)(assert(not p))(check sat)(pop)检查断言
p
;如果
检查sat
unsat
,则
P
保持不变。 我考虑改用软约束,即用
(声明常量b_I Int)(断言(=>b_I P))(检查sat b_I)替换每个这样的
push
/
pop
块。每个
b_i
只能使用一次。然而,如果Z3可能会在所有以前的
b_j
上分支,那么听起来似乎可能会让Z3慢一点——因此我的问题是


(注:我知道,这意味着软约束也可能会降低性能,因为某些优化可能不适用。)

是的,如果
b1
的值不固定,它将与任何其他布尔值一样处理