1

我不确定我的问题是否正确。

当我使用 Z3 时,我使用 C-API 生成 Z3 约束。由于这个功能,通过编写 C 程序自动生成约束变得非常容易。因此,当我想查看约束时,我使用 C-APIZ3_solver_get_assertionssmt2格式生成约束。

现在,由于自动生成,约束线对我来说变化很大。当我想调试这些约束时,我总是必须找到特定约束的确切位置。这是一个有点乏味的任务。但是,我的问题是,我可以在 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(..))

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

谢谢 !

4

1 回答 1

1

Z3 API 不提供此功能。我认为最简单的解决方案是创建自己的数据结构来存储表达式+评论。您可以通过使用表达式/字符串的列表/数组来做到这一点。

于 2013-10-24T15:42:51.537 回答