Z3带减法的ast_to_string()API

Z3带减法的ast_to_string()API,z3,Z3,问题很简单。 我使用C API接口在Z3中断言以下语句 (assert(>= (xA 1) (- (yB 0) period)))) 现在,有时,我需要检查输入了什么类型的断言,以及SatSolver中的结果。为此,我使用ast_to_string()API生成一个文本文件。此API将上述语句返回给我,作为- (assert(>= (xA 1) (+ (yB 0) (* -1 period)))) 当我将此文件馈送给Sat解算器时,它会向我抱怨错误- (错误“错误:第150行第5

问题很简单。 我使用C API接口在Z3中断言以下语句

(assert(>= (xA 1) (- (yB 0) period))))
现在,有时,我需要检查输入了什么类型的断言,以及SatSolver中的结果。为此,我使用ast_to_string()API生成一个文本文件。此API将上述语句返回给我,作为-

(assert(>= (xA 1) (+ (yB 0) (* -1 period))))
当我将此文件馈送给Sat解算器时,它会向我抱怨错误-

(错误“错误:第150行第56列:找不到id-1。”)

因此,我必须手动修复代码中的所有-1并运行sat解算器。 还有其他方法可以避免这种情况吗?

记住设置:

Z3_set_ast_print_mode(ctx,Z3_PRINT_SMTLIB2_COMPLIANT);

在使用
ast\u to\u string()
以使输出公式符合SMTLIB 2.0格式之前。

并不能真正解决问题。例如,我在输出中得到以下内容-
(assert(let((?x28(xA 1)))(>=?x28 0))
,因此它最终扼杀了将其打印到文件中的好处。最后,SMTLIB是一种机器可读的格式,而不是人类可读的格式。你所说的SatSolver是什么意思?为什么需要浏览文本文件?不能也从API调用它吗?