我需要根据一些布尔标志重新初始化一个实际变量,如下所示。
除了更改location_next
的真值之外,我想用另一个值重新初始化x_next
。我怎么能这样做?
location, location_next = Bools('location location_next')
x, x_next = Reals('x x_next')
...
location_next == If(And(Not(location), x_next >= 12),
True,
If(And(location, x_next <= 0), False, location))
答案 0 :(得分:3)
函数If
(在Z3 API中)也可用于创建非布尔表达式。
我们必须为每个If(c, t1, t2)
,c
排序布尔值,t1
和t2
具有相同的排序(类型)S
。在这种情况下,If(c, t1, t2)
将生成排序S
的Z3表达式。这是一个小例子:
x, y = Reals('x y')
print If(x > 0, x + 1, y - 1)
以下是上述示例的链接:http://rise4fun.com/Z3Py/V4e
在以下示例中,当x_next
为x+1
且location
等于{时,我们有一个公式,False
等于x >= 12
{1}} x-1
和location
时的{1}},否则等于True
。
x <= 0