我从ctx-solver-simplify
看到了相当令人惊讶的行为,其中使用来自https://git01.codeplex.com/z3(89c1785b)主分支的最新Z3版本的参数顺序到z3.And()似乎很重要):ctx-solver-simplify中的非对称行为
#!/usr/bin/python
import z3
a, b = z3.Bools('a b')
p = z3.Not(a)
q = z3.Or(a, b)
for e in z3.And(p, q), z3.And(q, p):
print e, '->', z3.Tactic('ctx-solver-simplify')(e)
生产:
And(Not(a), Or(a, b)) -> [[Not(a), Or(a, b)]]
And(Or(a, b), Not(a)) -> [[b, Not(a)]]
这是在Z3的错误吗?
谢谢!如果我想生成一个公式的简洁易读的版本,并且计算时间不那么重要,那么我是否可以在Z3中调用API或策略来“更加努力”来简化表达式?或者我需要修改ctx_solver_simplify_tactic.cpp /写我自己的战术? – user1861926
事实上,'propagate-values'对我有很大帮助 - 再次感谢! – user1861926