首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Z3 : z3接口支持的命名

Z3 : z3接口支持的命名
EN

Stack Overflow用户
提问于 2014-04-11 17:07:00
回答 1查看 197关注 0票数 1

我的问题是,我没有看到unsat_core使用api跟踪在整个块中提供的任何断言。

代码语言:javascript
复制
f = Z3_parse_smtlib2_string(c, "unsat_core_example1.smt2",0,0,0,0,0,0);
params p(c);
p.set(":unsat-core", true);
s.set(p);
// enabling unsat core tracking
expr r = to_expr(c, f);

unsat_core_example1.smt2:

代码语言:javascript
复制
(declare-fun p () Bool)
(declare-fun q () Bool)
(declare-fun r () Bool)
(declare-fun s () Bool)
(assert (! (or p q) :named a1))
(assert (! (implies r s) :named a2))
(assert (! (implies s (iff q r)) :named a3))
(assert (! (or r p) :named a4))
(assert (! (or r s) :named a5))
(assert (! (not (and r q)) :named a6))
(assert (! (not (and s p)) :named a7))

似乎没有处理注释:named,因为返回的unsat_core向量始终为空。

但是,如果我使用z3.exe并在中输入文件,情况就不是这样了。

知道原因是什么吗?

EN

回答 1

Stack Overflow用户

发布于 2014-04-12 00:08:11

Z3_parse_smtlib2_file函数并不支持所有的SMTLIB2,它实际上只是一个方便的函数;它的输出不能保证完全覆盖所有的语言(例如,它不能执行像check-sat或一些set-option命令这样的命令)。它也是作为以前的SMTLIB1解析器的扩展编写的,该解析器是在引入目标/战术/求解器架构之前很久编写的,因此并不是所有的信息都被带到这个新的架构中。

在这种情况下,断言名称确实保存在上下文中,但是Z3_parse_smtlib2_file不返回一组断言和名称;它返回一个未命名的表达式。为了准确地表示SMTLIB2基准,函数的签名必须进行重大更改。

在给定的示例中,被断言到求解器中的表达式是r,也就是说,我们的表达式类似于

代码语言:javascript
复制
s.add(r);

这实际上要求求解器断言未命名的断言名称,但是r中的表达式不支持“子名”。但是,我们仍然可以命名r本身,例如,通过调用

代码语言:javascript
复制
s.add(r, "top")

这导致了正确的unsat核心。

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

https://stackoverflow.com/questions/23008182

复制
相关文章

相似问题

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