Python 使用z3Py证明两个表达式范围的等价性/差异性
我试图证明Python 使用z3Py证明两个表达式范围的等价性/差异性,python,z3,Python,Z3,我试图证明a和b范围的差异。这可以通过定位值1超出a范围的b赋值来实现 但是,上面的程序给出了意外的unsat。我想知道为什么以及是否有更有效的方法来实现这一目标。ForAll的意思是:所有的数字,即都存在(a,ForAll(b,a!=b))总是错误的,因为没有Int与所有Int不同,因此第三个断言本身是不可满足的。您需要类似于s.add(Exists(a),(Exists(b)和(Not(a>2),b>0щщ)) 另外,请注意,您使用了两种不同的a和b存在(a,…)不会对现有变量进行量化,但会
a
和b
范围的差异。这可以通过定位值1
超出a
范围的b
赋值来实现
但是,上面的程序给出了意外的
unsat
。我想知道为什么以及是否有更有效的方法来实现这一目标。ForAll
的意思是:所有的数字,即都存在(a,ForAll(b,a!=b))
总是错误的,因为没有Int
与所有Int
不同,因此第三个断言本身是不可满足的。您需要类似于s.add(Exists(a),(Exists(b)和(Not(a>2),b>0щщ))
另外,请注意,您使用了两种不同的
a
和b
<代码>存在(a,…)不会对现有变量进行量化,但会引入一个新变量,该变量会意外地与全局(存在的)a
,b
同名 感谢您对所有和存在的的澄清!虽然我认为你给出的命题不能证明它们的区别,但可能存在类似于的东西(tmp,而不是(tmp>2),tmp>0))
。
from z3 import *
s = Solver()
a, b = Ints("a b")
s.add(a > 2)
s.add(b > 0)
s.add(Or(Exists(a, ForAll(b, a != b)), Exists(b, ForAll(a, a != b))))
s.check() # print "unsat"