繁体   English   中英

如何使用 Z3 Python API 获得 SMTLIB 格式的求解器(问题)?

[英]How do I get a solver (problem) in an SMTLIB format using the Z3 Python API?

我想打印一个问题的 SMTLIB 字符串。 例如,将构建的问题保存到文件中,在其上运行其他求解器等。

我知道函数sexpr()to_smt2()但后者的行为方式出乎意料。 特别是它没有添加 function 定义。 在以下脚本之后:

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()返回

(define-funs-rec ( ( f ((x!1 Int)) Int)) ( (* x!1 5)))
(assert (= ((_ f 0) 2) 10))

缺少例如set-infocheck-sat命令。 to_smt2()另一方面返回

(set-info :status unknown)
(assert (= ((_ f 0) 2) 10)) 
(check-sat)

打印 set-info/check-sat,这是我所期望的,但不包括f的 function 定义。 如何获得包含定义等以及 check-sat/set-info 等命令的 SMTLIB2 字符串?

没有。 只需使用sexpr并自己添加额外的位。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM