https://git01.codeplex.com/z3 (89c1785b)ctx-solver-simplify
のマスター ブランチから Z3 の最新バージョンを使用して、z3.And() へのパラメーターの順序が重要であるように思われるから、かなり驚くべき動作が見られます。
#!/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のバグですか?