当proof = True时,Z3 Prover(Python绑定)无法确定否定的Modus Ponens

时间:2019-03-16 01:59:26

标签: python z3 proof z3py

我试图理解为什么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时,在句子逻辑中设置这组不一致的表达式有什么问题?

0 个答案:

没有答案