我不确定,如果我的问题是正确的。
当我使用Z3时,我使用C-API生成Z3约束。由于这个设施,通过编写C程序自动生成约束变得非常容易。因此,当我想查看约束时,我使用C-API Z3_solver_get_assertions
来生成smt2
格式的约束。
现在,由于自动生成,限制线对我来说变化很大。当我想调试这些约束时,我总是必须找到具体约束的确切位置。这是一项有点乏味的任务。但是,我的问题是,我可以在Z3求解器中插入注释字符串,在我的断言之间,以便在我想转储约束时打印该字符串吗?
所以我想要的是这样的东西 -
Z3_Comment("Constraints of Type 1");
Z3_solver_assert(..)
..
..
Z3_solver_assert(..)
Z3_solver_assert(..)
Z3_solver_assert(..)
...
Z3_Comment("Constraints of Type 2");
Z3_solver_assert(..)
...
...
Z3_solver_assert(..)
Z3_solver_assert(..)
...
Z3_Comment("Constraints of Type 3");
Z3_solver_assert(..)
当我转储约束时,它应该打印 -
;; Constraints of Type 1
assert((..))
..
..
(assert(..))
(assert(..))
(assert(..))
...
;; Constraints of Type 2
(assert(..))
...
...
(assert(..))
(assert(..))
...
;; Constraints of Type 3
(assert(..))
也许我的问题太不真实了。
谢谢!
答案 0 :(得分:1)
Z3 API 不提供此功能。我认为最简单的解决方案是创建自己的数据结构来存储表达式+注释。您可以使用表达式/字符串的列表/数组来完成它。