我從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