我正在使用 API 中的 Z3,并且正在寻找一种方法来调试我的约束。我的代码编译并且 Z3 在我的约束上运行,但是我的约束有问题。我希望查看我给 Z3 的约束以确定什么是错误或缺失的,但我不确定如何以一种非常易读的方式执行此操作。问题是使用 SMTLIB_DUMP_ASSERTIONS 之类的工具不会在任何 let 绑定变量中提供有意义的名称。由于我多次重复使用相同的表达式,因此几乎所有内容都与生成的变量绑定。
有没有办法转储输入约束的文件,其中让绑定变量具有我指定的名称?我并不特别关心格式是什么,但 SMTLIB 1 或 2 会很好。