读取Z3文件

读取Z3文件,z3,Z3,我的程序使用z3_open_log()创建所有z3交互的日志。然后在另一个程序中,我用Z3_parse_Z3_file()读回它。它让我联想到对输入的所有断言。假设我有两个断言:a1和a2。然后通过解析z3文件,我得到(和a1 a2) 我想测试(而不是a1)a2)。如果我只得到两个断言的结合,而不是一对断言,我怎么能做到这一点呢?我在API中找不到任何允许我导航到AST的函数,查看它是否是连接并对其进行迭代 如果这不是我应该走的路,你会推荐哪条路 提前感谢, AG.正如上面评论中所描述的,您可以

我的程序使用z3_open_log()创建所有z3交互的日志。然后在另一个程序中,我用Z3_parse_Z3_file()读回它。它让我联想到对输入的所有断言。假设我有两个断言:a1和a2。然后通过解析z3文件,我得到(和a1 a2)

我想测试(而不是a1)a2)。如果我只得到两个断言的结合,而不是一对断言,我怎么能做到这一点呢?我在API中找不到任何允许我导航到AST的函数,查看它是否是连接并对其进行迭代

如果这不是我应该走的路,你会推荐哪条路

提前感谢,


AG.

正如上面评论中所描述的,您可以使用API遍历Z3 AST。 话虽如此,我有几点意见

日志记录用于调试目的。它们主要用于报告有问题的痕迹。我们在Z34.0中有一个新的日志记录机制。它记录了所有API,并允许我们忠实地再现宿主应用程序和Z3之间的交互

Z3 4.0中不推荐使用Z3低级和简化格式。Z3对它们的支持仍然有限

Z3 4具有新的C、C++、.NET和Python API。C API是向后兼容的,但我将几个过程标记为已弃用。使用新的API遍历和操作AST要容易得多。Python API已经在线提供。以下是一个例子:

下面是另一个示例,它构建
(和a1a2)
,提取每个子级,并构建
(和(不是a1)a2)

以下教程介绍了新的Z3 API:


Z3 4.0即将发布。

正如上面评论中所述,您可以使用API遍历Z3 AST。 话虽如此,我有几点意见

日志记录用于调试目的。它们主要用于报告有问题的痕迹。我们在Z34.0中有一个新的日志记录机制。它记录了所有API,并允许我们忠实地再现宿主应用程序和Z3之间的交互

Z3 4.0中不推荐使用Z3低级和简化格式。Z3对它们的支持仍然有限

Z3 4具有新的C、C++、.NET和Python API。C API是向后兼容的,但我将几个过程标记为已弃用。使用新的API遍历和操作AST要容易得多。Python API已经在线提供。以下是一个例子:

下面是另一个示例,它构建
(和a1a2)
,提取每个子级,并构建
(和(不是a1)a2)

以下教程介绍了新的Z3 API:


Z3 4.0即将发布。

您可以使用API轻松浏览Z3 AST。下面是一个示例,您可以使用API轻松浏览Z3 AST。下面是一个例子,再次感谢您的反馈(感谢您的Pad)。如果我必须学习一门新的语言,我会尝试OCaml,尤其是对于这种功能性的东西。你要停止OCaml兼容性吗?不,OCAMLAPI仍然受支持,但它只是C API上的一个薄层。我们计划在将来有一个更好的OCAMLAPI,但在下一个版本中不会出现这种情况。拥有Python API的主要动机是:接触新的用户群;Python非常受科学家欢迎,一些计算机代数系统都有Python接口。当然,Python也非常适合编写脚本,我们基本上可以使用Z3Py而不是SMT2.0。我不是Python的超级粉丝,但我不得不说,Python在我身上成长了:-)这种语言非常适合“粘合”东西。再次感谢您的反馈(谢谢Pad)。如果我必须学习一门新的语言,我会尝试OCaml,尤其是对于这种功能性的东西。你要停止OCaml兼容性吗?不,OCAMLAPI仍然受支持,但它只是C API上的一个薄层。我们计划在将来有一个更好的OCAMLAPI,但在下一个版本中不会出现这种情况。拥有Python API的主要动机是:接触新的用户群;Python非常受科学家欢迎,一些计算机代数系统都有Python接口。当然,Python也非常适合编写脚本,我们基本上可以使用Z3Py而不是SMT2.0。我不是Python的超级粉丝,但我不得不说,Python在我的身上成长起来了:-)这种语言真的很好,可以将东西“粘合”在一起。