Z3不识别插入和无类型的Nil

时间:2016-10-24 16:44:11

标签: z3

在以下代码中,Z3在第1行中无法识别nil,直到xs被声明为List。怎么解决这个?在Z3 / SMT-LIB2中是否有import / include之类的构造?

(assert (= nil nil))          ; (error "line 1 column 12: unknown constant nil")
(declare-const xs (List Int))
(assert (= nil nil))          ; OK after declare-const List Int

从文件或使用z3 -in进行测试都会看到错误。

1 个答案:

答案 0 :(得分:1)

遗憾的是,这是SMT-Lib标准的一般缺点。将符号引入范围的唯一方法是通过set-logic声明,并修复这些逻辑的列表。当个体求解器(例如z3)实施新的决策程序时,他们必须以特别的方式引入符号。看来z3在声明中看到nil时只会将符号List带入范围;这至少可以说是错误的。

在讨论中出现了各种各样的情况,唉似乎没有任何人有足够的动力(包括我自己)提出具体的提案并制定出所有细节。请参阅此处,例如:http://www.cs.nyu.edu/pipermail/smt-lib/2015/000862.html,其中建议将固定逻辑声明转移到更多import样式规范。

所以,考虑到目前的状况,你几乎不会首先宣布List。希望SMTLib将在未来以更灵活的方式发展以支持新功能。