两个boolexpr是否相等

时间:2012-09-05 13:59:27

标签: z3

鉴于两个boolexpr b1,b2 说

b1=x1>=4&&x2>=5
b2=x2>=5&&x1>=4

我们可以使用.net API为Z3知道b1和b2是否实际上是相同的约束? )(意味着b1和b2允许的x1和x2的值相同)

1 个答案:

答案 0 :(得分:3)

是。你想要证明b1等于b2,你可以通过显示b1 == b2的否定来做到这一点是不可满足的。这是一个示例,说明如何在Z3Py中执行此操作,并且您可以在.NET API中使用基本相同的步骤:http://rise4fun.com/Z3Py/M4R1

x1, x2 = Reals('x1 x2')

b1=And(x1>=4, x2>=5)
b2=And(x2>=5, x1>=4)

s = Solver()
proposition = b1 == b2 # assertion is whether b1 and b2 are equal
s.add(Not(proposition))
# proposition proved if negation of proposition is unsat
print s.check() # unsat 

b1=And(x1>=3, x2>=5) # note difference
b2=And(x2>=5, x1>=4)
s = Solver()
proposition = b1 == b2
s.add(Not(proposition))
print s.check() # sat