gpt4 book ai didi

z3 - 在某些条件下证明 2 个公式等价?

转载 作者:行者123 更新时间:2023-12-04 18:25:43 24 4
gpt4 key购买 nike

如果 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" 等效的条件,要么。

知道代码哪里错了,以及如何修复吗?非常感谢!

最佳答案

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

关于z3 - 在某些条件下证明 2 个公式等价?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17082592/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com