在Z3中插入注释字符串

时间:2013-10-23 12:42:38

标签: z3

我不确定,如果我的问题是正确的。

当我使用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(..))

也许我的问题太不真实了。

谢谢!

1 个答案:

答案 0 :(得分:1)

Z3 API 提供此功能。我认为最简单的解决方案是创建自己的数据结构来存储表达式+注释。您可以使用表达式/字符串的列表/数组来完成它。