다음 프로그램 (89c1785b 커밋) 마스터 자식 지점에서 Z3의 최신 버전을 사용하여 인쇄 할 수없는 Z3 모델 (즉이 print solver.model()
예외를 throw) 생성인쇄 불가능 Solver.model()
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()
는 생산 : 나는 또한 http://rise4fun.com/Z3Py/lfQG에서 온라인 z3py 인터페이스에 동일한 동작을 재현 할 수
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'
. 약간 더 많은 디버깅을하면 else_value()
을 호출 할 때 c
에 대한 모델의 할당이 z3.FuncInterp
이고 '잘못된 인수'예외가 발생합니다.
Z3의 버그입니까? 내 기대치가 맞지 않습니까? 내 기대는 else_value()
이 FuncInterp
인 경우 항상 가능해야한다는 것이 었습니다. 그렇지 않으면 완전한 기능이 아니기 때문에 항상 올바른 것은 아닙니다.