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"