我正在使用API中的Z3,我正在寻找一种调试约束的方法。我的代码编译,Z3运行我的约束,但我的约束有问题。我希望看看我给Z3确定哪些错误或遗漏的限制,但我不确定如何以一种非常易读的方式做到这一点。问题是使用像SMTLIB_DUMP_ASSERTIONS这样的工具不会在任何let绑定变量中提供有意义的名称。由于我有许多相同表达式的重用,几乎所有内容都与生成的变量绑定。
有没有办法转储输入约束的文件,其中let-bound变量有一个我已分配的名称?我并不特别关心格式是什么,但SMTLIB 1或2会很好。
答案 0 :(得分:1)
不,您无法提供名称以让Z3 AST打印机自动创建变量。
一种可能的解决方案是编写自己的AST打印机。在Z3发行版中,我们有一个示例应用程序examples/c/test_capi.c
。它包含功能:
void display_ast(Z3_context c, FILE * out, Z3_ast v)
它展示了如何实现简单的AST打印机。这个例子非常简单,但它是一个起点。