在Z3 Python API中使用布尔If重新初始化实变量

在Z3 Python API中使用布尔If重新初始化实变量,python,z3,Python,Z3,我需要根据一些布尔标志重新初始化一个实变量,如下所示。 除了更改location\u next的真值之外,我还想用另一个值重新初始化x\u next。我该怎么做 location, location_next = Bools('location location_next') x, x_next = Reals('x x_next') ... location_next == If(And(Not(location), x_next >= 12),

我需要根据一些布尔标志重新初始化一个实变量,如下所示。 除了更改
location\u next
的真值之外,我还想用另一个值重新初始化
x\u 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))
location,location\u next=Bools('location\u next')
x、 x_next=Reals('x_next')
...
位置_next==If(和(非位置),x _next>=12),
是的,

If(And)(location,x_next函数
If
(在z3api中)也可用于创建非布尔表达式。 我们必须知道,对于每个
If(c,t1,t2)
c
具有排序布尔值,
t1
t2
具有相同的排序(类型)
S
。在这种情况下,
If(c,t1,t2)
is将生成排序
S
的Z3表达式。下面是一个小示例:

x, y = Reals('x y')
print If(x > 0, x + 1, y - 1)
以下是与上述示例的链接:

在下面的示例中,我们有一个公式,当
location
False
x>=12
时,
x\u next
等于
x+1
,当
location
True
x=12时,
x>,
x+1,

If(And)(location,x函数
If
(在z3api中)也可用于创建非布尔表达式。 我们必须知道,对于每个
If(c,t1,t2)
c
具有排序布尔值,
t1
t2
具有相同的排序(类型)
S
。在这种情况下,
If(c,t1,t2)
is将生成排序
S
的Z3表达式。下面是一个小示例:

x, y = Reals('x y')
print If(x > 0, x + 1, y - 1)
以下是与上述示例的链接:

在下面的示例中,我们有一个公式,当
location
False
x>=12
时,
x\u next
等于
x+1
,当
location
True
x=12时,
x>,
x+1,

如果(及(地点,x@Maulworn:对于那些想知道的人来说,微软研究院的定理证明程序是存在的。Z3自带了自己的Python绑定。这里有一个在线教程,描述了Z3 Python API:嗨,leo,thanx,谢谢你昨天的帮助。在我们昨天的对话中,我必须补充一点。我需要更新t下一步,他将根据相同的条件对x_的位置和值进行重新初始化。既然If是布尔值,那么如何在那里增加一个真正的算术约束???@Maulworn:对于那些想知道的人,微软研究院的定理证明器是存在的。Z3自带了自己的Python绑定。下面是一个描述Z3 Py的在线教程thon API:你好,leo,thanx,谢谢你昨天的帮助。在我们昨天的对话中,我必须做一个补充。我需要更新x_next的位置,并根据相同的条件重新初始化x_next的值。因为如果是布尔值,如何增加那里的实际算术约束??