给出这个公式,
(p & (x < 0)) | (~p & (x > 0)).
如何在Z3中获得这两个“参数”模型:
{p=true, x<0}
{p=false, x>0}
当我将此SMTLIB程序提交给Z3时,
(declare-const p Bool)
(declare-const x Int)
(assert (or (and p (< x 0)) (and (not p) (> x 0))))
(check-sat)
(get-model)
(assert (or (not p) (not (= x -1))))
(check-sat)
(get-model)
(exit)
它给了我具体的模型(例如{p = true,x = -1},{p = true,x = -2},...)。
答案 0 :(得分:0)
你不能。
SMT 求解器不生成非具体模型;这不是他们的工作方式。你想要的本质上是某种形式的“简化”,虽然你可以使用 SMT 求解器来帮助你简化表达式,但你必须在上面构建一个工具来理解你想要的简化类型看。底线:作为一个人,您认为“简单”的内容与自动 SMT 求解器所认为的“简单”内容通常大不相同;并且由于缺乏任意理论的范式,你不能指望它们做得很好。
如果您追求的是这些类型的简化,您可能需要查看符号数学包,例如 sympy、Mathematica 等。