如何在不在 Windows 上时获取有关 z3 查询的见解

How to get insights about a z3 query when not on Windows

https://github.com/FStarLang/FStar/wiki/Profiling-Z3-queries 的 wiki 页面建议使用 Z3 Axiom Profiler;然而,Z3 Axiom Profiler 似乎只能在 Windows 上可靠地工作。

在没有 Z3 Axiom Profiler 的情况下,如何轻松获得最活跃的量词?

这个命令行调用对我来说工作得很好,只依赖于 z3 的 qi.profile 功能,并将最严重的违规者留在底部。

z3 smt.qi.profile=true queries-EverCrypt.Hash.Incremental-33.smt2 |& grep quantifier_instances | sort -t : -k 2 -n

(根据 Nik 的回答进行编辑以删除现在嵌入到 smt2 文件中的 z3 选项)

我已经能够通过 mono 在 Linux 上使用公理分析器,但它确实需要 许多 小时(它似乎挂起在此过程中需要很长时间,但它确实有效)。一旦完成分析,界面就会非常灵敏(尽管我建议远离 "File" 菜单下的一些选项,这些选项会导致它崩溃)。

由于我基本上需要将其放置一整夜以获取重要的痕迹,因此我在服务器上启动它并通过 xpra 使用 X 转发(这允许我断开连接并重新连接到服务器)。


如果问题纯粹是为了查找触发不当的查询,并且如果 fstar 使用提示可以更快地工作,那么我还有一个有用的脚本 fstar-profile-queries 我几个月前写的,可能是有用。它使用 qprofdiff 来查找有问题的查询,但以一种更好用的方式进行。

与乔纳森的回复相关:

自此提交后:https://github.com/FStarLang/FStar/commit/c4ce03c3709b44600d66b8c2ee55a0e1aa9f75a3

只需要 运行:

z3 smt.qi.profile=true queries-Foo.smt2

因为其他 F* 特定选项现在嵌入到 .smt2 文件中。