gpt4 book ai didi

python - 代码使用 ForAll 产生错误结果,为什么?

转载 作者:太空宇宙 更新时间:2023-11-04 06:13:48 25 4
gpt4 key购买 nike

我正在尝试在 b 上使用 ForAll 量词,因此公式 a * b == b 与每个 b 会给我 a == 1 作为结果。我在下面的代码中实现了这个(Z3 python):

from z3 import *

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

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

s = Solver()
s.add(ForAll(b, f))

if s.check() == sat:
print 'a =', s.model()[a]
else:
print 'Unsat'

我希望 Z3 在输出中给我 a = 1,但我得到的是 Unsat。知道问题出在哪里吗?

(我怀疑我没有正确使用 ForAll,但不确定如何修复它)

最佳答案

你怎么看这个:

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

f = True
f = And(f, a1 == a * b)
g= True
g = And(f, a1 == b)

s = Solver()
s.add(ForAll(b, ForAll(a1,f == g)))

if s.check() == sat:
print 'a =', s.model()[a]
else:
print 'Unsat

输出:

a = 1

其他形式:

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

f = True
f = And(f, a1 == a * b)
g= True
g = And(g, a1 == b)

s = Solver()
s.add(ForAll(b, ForAll(a1,f == g)))

if s.check() == sat:
print 'a =', s.model()[a]
else:
print 'Unsat'

输出:

a = 1

关于python - 代码使用 ForAll 产生错误结果,为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17125545/

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