Z3:消除don';不关心变量

Z3:消除don';不关心变量,z3,smt,Z3,Smt,我有一个test.smt2文件: (set-logic QF_IDL) (declare-const a Int) (declare-const b Int) (declare-const c Int) (assert (or (< a 2) (< b 2 )) ) (check-sat) (get-model) (exit) 谢谢大家! 在对所提到问题的回答中给出的例子有点过时。一个Solver()将选择一个合适的策略来解决问题,现在看来它选择了一个不同的策略。我们仍然可以通过使

我有一个test.smt2文件:

(set-logic QF_IDL)
(declare-const a Int)
(declare-const b Int)
(declare-const c Int)
(assert (or (< a 2) (< b 2 )) )
(check-sat)
(get-model)
(exit)

谢谢大家!

在对所提到问题的回答中给出的例子有点过时。一个
Solver()
将选择一个合适的策略来解决问题,现在看来它选择了一个不同的策略。我们仍然可以通过使用
SimpleSolver()
(可能会造成严重的性能损失)来获得这种行为。下面是一个更新的示例:

from z3 import *

x, y = Bools('x y')
s = SimpleSolver()
s.set(auto_config=False,relevancy=2)
s.add(Or(x, y))
print s.check()
print s.model()

请注意,
(check sat)
命令将不会执行与
SimpleSolver()相同的策略。
;为了在解决SMT2文件时获得相同的行为,我们需要使用smt策略,即使用
(使用smt检查sat)
。在许多情况下,首先在问题上额外运行simplifier将是有益的,我们可以通过构建自定义策略来实现这一点,例如,
(使用sat检查(然后简化smt))

谢谢Christoph!我对Z3比较陌生,我想知道:1)在我的示例中,如何修改.smt2文件和我执行的命令,以获得结果(只有a=1,而不是(a=1,b=2))?2) smt.relevance的默认值是2吗?我执行的命令:z3 smt.relevancy=2也会有同样的效果吗?再次感谢!我会让您自己运行这些组合,但是是的,默认值是smt.relevancy=2,但情况似乎并非总是如此(参见旧示例),因此它可能会再次更改。在SMT2中,可通过(设置选项:名称值)命令或在命令行上设置选项。别忘了设置auto_config=false,如果你没有使用战术/解算器,那么相关性的参数是smt.relevancy,而不仅仅是relevancy。是的,我在原始帖子中列出的文件顶部添加了“(set option:smt.auto-config false)(set option:smt.relevancy 2)”,使用“z3 test.smt2”来执行程序,但它仍然给出了相同的结果(b=2,a=1)。无论如何,非常感谢您的回复,可能我误解了相关性。我使用的是Z34.3.2,我正在test.smt2中添加(set option:auto-config false)(set option:smt.auto-config false)(set option:smt.relevance 2)。基本上,我尝试了我能想到的任何组合,但Z3仍然给我结果(a=2,b=1),而不仅仅是(a=2)。事实上,我忘记了在游览Python之后我必须回到SMT2。我在答案中添加了一段关于这一点的内容,我希望这会有所帮助!
from z3 import *

x, y = Bools('x y')
s = SimpleSolver()
s.set(auto_config=False,relevancy=2)
s.add(Or(x, y))
print s.check()
print s.model()