In Z3 Python, what's the diff between 1) x = Const("x",IntSort())
vs 2) x = Int("x")
? is_const returns true for both and they are both ArithRef. I would thought 1) would be appropriate for defining a const, e.g., x is 3.14 and 2) is to making a variable.
Is there a correct way to create a const variable like x = 3.14 (other than generating a formula x == 3.14)
There is no difference between Const("x", IntSort())
and Int("x")
. We should view Int("x")
as syntax sugar for the former. The function Const
is usually used to define constants of user defined sorts. Example:
S, (a, b, c) = EnumSort('S', ('a', 'b', 'c'))
x = Const("x", S)
In Z3, we use the term "variable" for universal and existential variables. Quantifier free formulas do not contain variables, only constants. In the formula, x + 1 > 0
, we say x
and 1
are constants. We say x
is a uninterpreted constant, and 1
is interpreted one. That is, the meaning of 1
is fixed, but Z3 is free to assign an interpretation for x
in order to make a formula satisfiable. If you just want to create the interpreted constant 3.14
, you can use RealVal('3.14')
. In the following example, x
is not a Z3 expression, but a Python variable that points to the Z3 expression 3.14
. We can use x
as shorthand for 3.14
when building Z3 expressions/formulas. The Python variable z
is pointing to the Z3 expression y
. Finally, z > x
returns the Z3 expression y > 3.14
. Z3Py beginners usually confuse Python variables with Z3 expressions. After the difference is clear, everything starts to make sense.
x = RealVal('3.14')
z = Real('y')
print z > x
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With