z3 const声明

时间:2012-09-16 16:23:39

标签: python z3

在Z3 Python中,1)x = Const("x",IntSort()) vs 2)x = Int("x")之间的区别是什么? is_const为两者返回true,它们都是ArithRef。我认为1)适合定义一个const,例如,x是3.14而2)是一个变量。

是否有正确的方法来创建一个像x = 3.14的常量变量(除了生成公式x == 3.14)

1 个答案:

答案 0 :(得分:3)

Const("x", IntSort())Int("x")之间没有区别。我们应该将Int("x")视为前者的语法糖。函数Const通常用于定义用户定义的排序的常量。例如:

S, (a, b, c) = EnumSort('S', ('a', 'b', 'c'))
x = Const("x", S)

在Z3中,我们对通用和存在变量使用术语“变量”。 Quantifier free formula不包含变量,只包含常量。在公式x + 1 > 0中,我们说x1是常量。我们说x是一个未解释的常量,1被解释为一个。也就是说,1的含义是固定的,但Z3可以自由地为x指定解释,以使公式可以满足。如果您只想创建解释常量3.14,则可以使用RealVal('3.14')。在以下示例中,x不是Z3表达式,而是指向Z3表达式3.14的Python变量。在构建Z3表达式/公式时,我们可以使用x作为3.14的简写。 Python变量z指向Z3表达式y。最后,z > x返回Z3表达式y > 3.14。 Z3Py初学者通常会将Python变量与Z3表达式混淆。差异很明显后,一切都开始变得有意义了。

x = RealVal('3.14')
z = Real('y')
print z > x