首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法打印的Solver.model()

无法打印的Solver.model()
EN

Stack Overflow用户
提问于 2012-12-18 06:30:38
回答 1查看 377关注 0票数 1

下面的程序使用来自主git分支的最新版本的Z3 (提交89c1785b)生成一个无法打印的Z3模型(即,print solver.model()抛出异常):

代码语言:javascript
复制
x = Int('x')
a = Array('a', IntSort(), BoolSort())
b = Array('b', IntSort(), BoolSort())
c = Array('c', BoolSort(), BoolSort())

e = ForAll(x, Or(Not(a[x]), c[b[x]]))
print e

solver = Solver()
solver.add(e)
c = solver.check()
print c
if c == sat:
    print solver.model()

产生:

代码语言:javascript
复制
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'

我也可以在http://rise4fun.com/Z3Py/lfQG的在线z3py界面中重现相同的行为。稍微多一点的调试表明,模型对c的赋值是一个z3.FuncInterp,当你在它上面调用else_value()时,它会抛出一个“无效参数”异常。

这是Z3中的一个错误,还是我的预期不太正确?我的期望是,应该总是可以获得FuncInterpelse_value(),否则它就不是一个完整的函数,但也许这并不总是正确的?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-12-18 07:23:27

这是Z3 Python打印机中的错误。我修复了这个bug,并且这个修复已经在codeplex上提供了。

http://z3.codeplex.com/SourceControl/changeset/f8014f54c18a

要获得修复(现在),我们必须检索"work-in-progress“(unstable)分支。该修复将在下一个正式版本中的master分支中提供。要检索unstable分支,我们应该使用:

代码语言:javascript
复制
git clone https://git01.codeplex.com/z3 -b unstable

另一种选择是使用print solver.model().sexpr()。它将使用Z3内部打印机,而不是基于Python的打印机。

关于else_value(),它的值不能由Z3指定。它的意思是:它是一个“无所谓”。也就是说,任何解释都可以用来满足公式。我还修复了Z3 Python API在未指定else_value时返回None的问题。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13923316

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档