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 做了(或没有!)做什么。