我试图理解为什么Z3解算器在满足以下不一致的表达式集时会返回“未知”。
In [1]: from z3 import *
In [2]: set_param(proof=True)
In [3]: s = Solver()
In [4]: p,q = Bools("p q")
In [5]: s.add(p)
In [6]: s.add(Not(q))
In [7]: s.add(Implies(p,q))
In [8]: s.check()
Out[8]: unknown
请注意,当不将证明参数设置为True时,我们不会得到“未知”
In [1]: from z3 import *
In [2]: s = Solver()
In [3]: p,q = Bools("p q")
In [4]: s.add(p)
In [5]: s.add(Not(q))
In [6]: s.add(Implies(p,q))
In [7]: s.check()
Out[7]: unsat
此外,即使设置了proof = True,我们在使用不同的不一致表达式集时也不会出现“未知”的情况。
In [1]: from z3 import *
In [2]: set_param(proof=True)
In [3]: s = Solver()
In [4]: x = Int('x')
In [5]: s.add(x==0)
In [6]: s.add(x>0)
In [7]: s.check()
Out[7]: unsat
当证明参数设置为True时,在句子逻辑中设置这组不一致的表达式有什么问题?