如何使用 Z 3 Python API 获得 SMT LIB 格式的求解器(问题)?
How do I get a solver (problem) in an SMTLIB format using the Z3 Python API?
我想打印问题的 SMTLIB 字符串。例如,将构建的问题保存到文件,运行 其他求解器等
我知道 sexpr()
和 to_smt2()
函数,但后者的行为方式出乎意料。特别是它不添加函数定义。在以下脚本之后:
solv = z3.Solver()
n = z3.Int("n")
f = z3.RecFunction("f", [z3.IntSort(), z3.IntSort()])
z3.RecAddDefinition(f, n, n * 5 )
solv.add(f(2) == 10)
现在sexpr()
returns
(define-funs-rec ( ( f ((x!1 Int)) Int)) ( (* x!1 5)))
(assert (= ((_ f 0) 2) 10))
缺少例如 set-info
和 check-sat
命令。 to_smt2()
另一方面 returns
(set-info :status unknown)
(assert (= ((_ f 0) 2) 10))
(check-sat)
打印 set-info/check-sat 这是我所期望的,但不包括 f
的函数定义。如何获得包含定义等以及 check-sat/set-info 等命令的 SMTLIB2 字符串?
没有。只需使用 sexpr
并自己添加额外的位即可。
我想打印问题的 SMTLIB 字符串。例如,将构建的问题保存到文件,运行 其他求解器等
我知道 sexpr()
和 to_smt2()
函数,但后者的行为方式出乎意料。特别是它不添加函数定义。在以下脚本之后:
solv = z3.Solver()
n = z3.Int("n")
f = z3.RecFunction("f", [z3.IntSort(), z3.IntSort()])
z3.RecAddDefinition(f, n, n * 5 )
solv.add(f(2) == 10)
现在sexpr()
returns
(define-funs-rec ( ( f ((x!1 Int)) Int)) ( (* x!1 5)))
(assert (= ((_ f 0) 2) 10))
缺少例如 set-info
和 check-sat
命令。 to_smt2()
另一方面 returns
(set-info :status unknown)
(assert (= ((_ f 0) 2) 10))
(check-sat)
打印 set-info/check-sat 这是我所期望的,但不包括 f
的函数定义。如何获得包含定义等以及 check-sat/set-info 等命令的 SMTLIB2 字符串?
没有。只需使用 sexpr
并自己添加额外的位即可。