在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)
答案 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
中,我们说x
和1
是常量。我们说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