3

两个公式a1 == a + ba1 == b等价 if a == 0。我想a == 0用 Z3 python 找到这个必需的条件()。我写了下面的代码:

from z3 import *

def equivalence(F, G):
    s = Solver()
    s.add(Not(F == G))
    r = s.check()
    if r == unsat:
        print 'Equ'
        print s.model()
    else:
        print 'Not Equ'

a, b = BitVecs('a b', 32)

g = True
tmp = BitVec('tmp', 32)
g = And(g, tmp == a)
tmp1 = BitVec('tmp1', 32)
g = And(g, tmp1 == b)
tmp2 = BitVec('tmp2', 32)
g = And(g, tmp2 == (tmp1 + tmp))
a1 = BitVec('a1', 32) 
g = And(g, a1 == tmp2)

f = True
f = And(f, a1 == b)

equivalence(Exists([a], g), f)

但是,上面的代码总是"Not Equ"作为输出返回。那么显然我也无法将模型 ( a === 0) 作为"f""g"等价的条件。

关于代码哪里出错以及如何修复它的任何想法?非常感谢!

4

1 回答 1

0

帖子中的代码与所提出的问题不对应。在 smt-lib 邮件列表中提出并回答了类似的问题。

于 2013-06-22T18:05:42.413 回答