Z3 无法打印的解算器。模型()

Z3 无法打印的解算器。模型(),z3,z3py,Z3,Z3py,以下程序使用主git分支(commit 89c1785b)的最新版本Z3生成无法打印的Z3模型(即,print solver.model()引发异常): 产生: ForAll(x, Or(Not(a[x]), c[b[x]])) sat Traceback (most recent call last): File "z3bug.py", line 16, in <module> print solver.model() File "src/api/python/z3

以下程序使用主git分支(commit 89c1785b)的最新版本Z3生成无法打印的Z3模型(即,
print solver.model()
引发异常):

产生:

ForAll(x, Or(Not(a[x]), c[b[x]]))
sat
Traceback (most recent call last):
  File "z3bug.py", line 16, in <module>
    print solver.model()
  File "src/api/python/z3.py", line 5177, in __repr__
  File "src/api/python/z3printer.py", line 939, in obj_to_string
  File "src/api/python/z3printer.py", line 841, in __call__
  File "src/api/python/z3printer.py", line 831, in main
  File "src/api/python/z3printer.py", line 760, in pp_model
  File "src/api/python/z3printer.py", line 794, in pp_func_interp
  File "src/api/python/z3.py", line 5088, in else_value
  File "src/api/python/z3.py", line 818, in _to_expr_ref
  File "src/api/python/z3core.py", line 2307, in Z3_get_ast_kind
z3types.Z3Exception: 'invalid argument'
ForAll(x,或(不是(a[x]),c[b[x]]))
坐
回溯(最近一次呼叫最后一次):
文件“z3bug.py”,第16行,在
打印解算器.model()
文件“src/api/python/z3.py”,第5177行,在__
文件“src/api/python/z3printer.py”,第939行,obj_至_字符串
调用中第841行的文件“src/api/python/z3printer.py”__
文件“src/api/python/z3printer.py”,第831行,在main中
pp_模型中的文件“src/api/python/z3printer.py”,第760行
文件“src/api/python/z3printer.py”,第794行,pp_func_interp
文件“src/api/python/z3.py”,第5088行,在else_值中
文件“src/api/python/z3.py”,第818行,在
文件“src/api/python/z3core.py”,第2307行,Z3_get_ast_kind
z3types.Z3异常:“无效参数”
我也可以在在线z3py界面中重现相同的行为,在。稍多的调试表明,模型对
c
的赋值是
z3.FuncInterp
,在调用
else\u value()
时抛出“invalid argument”异常


这是Z3中的一个bug,还是我的期望不太正确?我的期望是,应该总是能够获得
FuncInterp
else\u值()
,因为否则它不是一个完整的函数,但也许这并不总是正确的?

这是Z3 Python打印机中的一个错误。我修复了bug,修复程序已经在COUPTEX中获得了。

要获得修复(现在),我们必须检索“正在进行的工作”(
unstable
)分支。该修复程序将在下一个正式版本的
master
分支中提供。要检索
不稳定的
分支,我们应该使用:

git clone https://git01.codeplex.com/z3 -b unstable
另一个选项是使用打印解算器.model().sexpr()。它将使用Z3内部打印机,而不是基于Python的打印机

关于
else\u value()
,其值可能不由Z3指定。它的意思是:它是一个“不在乎”。也就是说,可以使用任何解释来满足该公式。 我还修复了z3pythonapi在未指定
else\u值时返回
None
的问题

git clone https://git01.codeplex.com/z3 -b unstable