更新z3变量或线性求解

时间:2016-03-07 22:36:47

标签: z3 z3py

我是Z3的新手,所以这可能是一个愚蠢的问题。我试图模拟程序的执行流程。现在通过手动z3执行此操作。也就是说,我最终试图模拟以下内容:

x = 1
x += 1

执行以下命令让我感到不满,我理解为什么。

x = z3.Int('x')
s.add(x == 1)
s.add(x == x + 1)

在小规模中,手动将x == 1更改为x == 2可能是合理的。我的问题是,有没有办法在z3中执行此操作,我不必返回并尝试修改我放入求解器的变量?这些方程式显然会比仅仅+1更加困难,并且试图手动完成该逻辑似乎容易出错并且不稳定。

编辑:根据建议调整我的程序以使用SSA后,它现在非常容易。我确实选择保留变量的多个版本,但这并没有变成额外的工作。

1 个答案:

答案 0 :(得分:0)

您可以重命名变量,使其处于SSA格式(https://en.wikipedia.org/wiki/Static_single_assignment_form)。 此外,您可能不需要为中间表达式引入名称。唯一的Z3变量应该是程序输入或类似的东西。

相关问题