Z3现在具有基于圆柱代数分解的非线性实数算法的可满足性引擎。
有没有办法获得量词消除的结果,而不仅仅是可满足性测试?
以下不起作用:
from z3 import *
b,c,x = Reals('b c x')
f = Exists(x, b*x+c==0);
print Tactic('qe')(f).as_expr();
我想得到类似Or的东西(b!= 0,And(b == 0,c == 0))。
感谢。
答案 0 :(得分:0)
Z3还没有完整的非线性QE。 存在非常部分的非线性QE,其在低阶多项式上使用虚拟替换。 您可以在此示例中使用它:
from z3 import *
b,c,x = Reals('b c x')
f = Exists(x, b*x+c==0);
tac = Tactic('qe')
tac = With(tac, qe_nonlinear=True)
print tac.param_descrs()
print tac(f).as_expr();