如果我给 Z3 一个公式,比如 p | q,我希望 Z3 返回 p=true, q=don't care(或切换 p 和 q),但它似乎坚持为 p 和 q 分配值(即使我没有完成转通话时开启Eval()
)。除了对此感到惊讶之外,我的问题是如果 p 和 q 不是简单的道具怎么办。vars 但昂贵的表达式,我知道通常 p 或 q 都是正确的。有没有一种简单的方法可以让 Z3 返回一个“最小”模型,而不是浪费时间尝试同时满足 p 和 q?我已经尝试过MkITE
了,但这没有什么区别。还是我必须使用某种策略来执行此操作?
谢谢!PS。我想补充一点,我已关闭 AUTO_CONFIG,但 Z3 正在尝试为 or 的两个分支中的常量分配值:例如,在下面的代码段中,我希望它分配给 path2_2 和 path2_1 或 path2R_2 和 path2R_1 但不是两者
(or (and (select a!5 path2_2) a!6 (select a!5 path2_1) a!7)
(and (select a!5 path2R_2) a!8 (select a!5 path2R_1) a!9))