首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Z3中将当前逻辑上下文打印为SMT-LIB文件

在Z3中将当前逻辑上下文打印为SMT-LIB文件
EN

Stack Overflow用户
提问于 2019-07-18 08:02:17
回答 1查看 198关注 0票数 1

我正在尝试调试一个使用SMT的程序,我想知道是否有一种方法可以打印当前的逻辑上下文,无论是从Z3内部还是通过给Z3一个命令,希望就像它是在SMTlib文件中读取的一样。

This question from 7 years ago似乎表明有一种方法可以做到这一点,但我在API文档中找不到它。

我的部分动机是,我试图调试我的程序是否因为它创建了一个难以解决的SMT问题而变慢,或者是不是因为其他原因而变慢。能够以SMT-LIB文件的形式查看当前上下文,并在命令行上的Z3中运行它,这将使这一点变得更容易。

EN

回答 1

Stack Overflow用户

发布于 2019-07-18 10:58:07

不太清楚您所说的“逻辑上下文”是什么意思。如果您指的是用户为求解器提供的所有断言,则命令:

代码语言:javascript
复制
(get-assertions)

将以类似列表的S表达式的形式返回它;请参阅http://smtlib.cs.uiowa.edu/papers/smt-lib-reference-v2.6-r2017-07-18.pdf的4.2.4节

但这听起来对您的目的没有用;毕竟,它将精确地返回您自己断言的所有内容。

如果您正在寻找求解器创建的所有学习引理、内部断言等的转储;我担心在SMTLib中无法做到这一点。您甚至可能无法使用编程性API来实现这一点。(尽管需要检查这一点。)这只能通过实际修改z3本身的源代码(开源的),并添加相关的调试跟踪来实现。但是,这需要对z3的内部结构进行大量研究,除非您对z3代码库本身有深入的了解,否则不太可能有所帮助。

我发现运行z3 -v:10有时可以提供诊断信息;如果您看到它反复打印一些东西,这是一个很好的迹象,表明该区域出现了问题。但同样,它打印的内容和它的确切含义是猜测工作,除非您研究源代码本身。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57085441

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档