gpt4 book ai didi

python - 如何区分 bool 和 z3 表达式?

转载 作者:行者123 更新时间:2023-12-01 00:07:21 24 4
gpt4 key购买 nike

我从 Python 的输入文件中读取 z3 表达式。然后在我的代码中,我对它们调用 __deepcopy__()

问题在于,有时输入的 z3 表达式为 TrueFalse,那么 Python 就会感到困惑,认为它们是 bool 并拒绝调用 __deepcopy__() 。错误信息是

AttributeError:“bool”对象没有属性“__deepcopy__”

在这种情况下如何区分 bool 和 z3 表达式?

最佳答案

您可以使用 isinstance(e, ExprRef) 添加显式测试您的表达式是否为 Z3 表达式。请注意 Python bool 值 (b > 7) 和 Z3 bool 值 (simplify(And(a > 7, b > 7))False 之间的区别)。

from z3 import Int, simplify, And, ExprRef

a = Int('a')
b = 3
expr = [a + 3,
a < 7,
And(a < 7, a > 2),
And(a < 7, b > 7),
simplify(And(a > 7, b > 7)),
b > 7,
True]

expr_copy = [e.__deepcopy__() if isinstance(e, ExprRef) else e for e in expr]
print(expr_copy)
for e in expr:
print(f'Is "{e}" a Z3 expression? {isinstance(e, ExprRef)}')

输出:

[a + 3, a < 7, And(a < 7, a > 2), And(a < 7, False), False, False, True]
Is "a + 3" a Z3 expression? True
Is "a < 7" a Z3 expression? True
Is "And(a < 7, a > 2)" a Z3 expression? True
Is "And(a < 7, False)" a Z3 expression? True
Is "False" a Z3 expression? True
Is "False" a Z3 expression? False
Is "True" a Z3 expression? False

关于python - 如何区分 bool 和 z3 表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59875908/

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