【问题标题】:Prove 2 formulas equivalent under some conditions?在某些条件下证明 2 个公式等价?
【发布时间】:2013-06-13 08:31:08
【问题描述】:

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

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" 相等的条件。

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

【问题讨论】:

  • 也许下面的版本能解决你想要的:rise4fun.com/Z3Py/75E9
  • Nikolaj,这并没有真正做到我想要的,因为我也想在您的解决方案中找到“假设”。在我的代码中,您可以看到我打印出模型以找出可以使“f”和“g”等效的“a”的值。谢谢

标签: z3 z3py


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-07-03
    • 1970-01-01
    • 2011-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多