【发布时间】:2021-11-30 20:22:36
【问题描述】:
假设我有一个 z3 表达式:
c = z3.Int("x")
Expr = (-c) / 2
是否可以使用 Z3 找到任何 C 以使表达式计算为整数?
例如,如果 c==1,则整个方程的计算结果应为 -0.5,因此不是整数。
我尝试使用提醒==0 方法对问题进行建模
>>> from z3 import *
>>> c = Int("c")
>>> s = Solver()
>>> s.add(((-c) %2)==0)
>>> s.check()
sat
这显然是不正确的。更改为 c = Real("c") 会出现异常:
>>> c = Real("c")
>>> s = Solver()
>>> s.add(((-c) %2)==0)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/lib/python3.9/site-packages/z3/z3.py", line 2539, in __mod__
_z3_assert(a.is_int(), "Z3 integer expression expected")
File "/usr/local/lib/python3.9/site-packages/z3/z3.py", line 112, in _z3_assert
raise Z3Exception(msg)
z3.z3types.Z3Exception: Z3 integer expression expected
【问题讨论】: