gpt4 book ai didi

python - 在 z3 中声明有限排序

转载 作者:行者123 更新时间:2023-12-05 05:03:14 24 4
gpt4 key购买 nike

让我们假设我有一个有限集{e1, e2, e3}。我希望能够区分传递约束,以便处理这种行为:

from z3 import *

solver = Solver()
A = DeclareSort('A')
x = Const('x', A)
y = Const('y', A)
z = Const('z', A)
solver.add(x!=y)
solver.add(y!=z)
solver.add(x==z)

assert solver.check() != z3.sat

我发现解决它的唯一方法是用这个改变最后一个约束:

solver.add(ForAll([x,z],x==z))

这是建模的方式吗?有可用的有限排序吗?我是否需要添加声明元素彼此不同的所有约束?

一些说明: Maybe 不是我需要的变量,因为 {x == y, y == z, x == z } 显然是 sat,但我想要建模的行为更像是这样的 {x == 1, 2 == z, x == z } 显然是不满足的(假设某种有限排序,如 {1,2,3,4})。

最佳答案

我要找的是 EnumSort:

from z3 import *

solver = Solver()
S, (a, b, c) = EnumSort('round', ['a','b','c'])

x = Const("x", S)
z = Const("z", S)
solver.add(x==a)
solver.add(z==b)
solver.add(x==z)

assert solver.check() != z3.sat

关于python - 在 z3 中声明有限排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61799915/

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