z3 任何表达式从 int 到 float 的转换,反之亦然
z3 conversion from int to float and vice versa for any expression
表示 python 表达式,例如
float(x + 1 * 2) * 2 == 2
如何将其转换为 z3 表达式?使用明显的 ToReal(x + 1 * 2)
不起作用。
附带一提,我已经使用了 z3.ToReal
,但我连简单的例子都做不到,但是 ToInt
正在按预期工作。例如
from z3 import *
a = Int("a")
b = Real("b")
s = Solver()
s.add(ToReal(a) == 1.1)
s.check()
>>> unsat
s.reset()
s.add(ToInt(b) + 1.1 == 2)
s.check()
>>> sat
我不确定你为什么要说 it doesn't work
。它似乎按预期工作:
>>> from z3 import *
>>> x = Int('x')
>>> s = Solver()
>>> s.add(ToReal(x + 1 * 2) * 2 == 2)
>>> print(s.check())
sat
>>> print(s.model())
[x = -1]
确实对于整数值 x = -1
,您想要的相等性确实成立。
您必须更加清楚您的预期,以及 z3 做了(或没有!)做什么。
表示 python 表达式,例如
float(x + 1 * 2) * 2 == 2
如何将其转换为 z3 表达式?使用明显的 ToReal(x + 1 * 2)
不起作用。
附带一提,我已经使用了 z3.ToReal
,但我连简单的例子都做不到,但是 ToInt
正在按预期工作。例如
from z3 import *
a = Int("a")
b = Real("b")
s = Solver()
s.add(ToReal(a) == 1.1)
s.check()
>>> unsat
s.reset()
s.add(ToInt(b) + 1.1 == 2)
s.check()
>>> sat
我不确定你为什么要说 it doesn't work
。它似乎按预期工作:
>>> from z3 import *
>>> x = Int('x')
>>> s = Solver()
>>> s.add(ToReal(x + 1 * 2) * 2 == 2)
>>> print(s.check())
sat
>>> print(s.model())
[x = -1]
确实对于整数值 x = -1
,您想要的相等性确实成立。
您必须更加清楚您的预期,以及 z3 做了(或没有!)做什么。