为什么这个Z3查询失败了

时间:2015-03-10 00:54:08

标签: z3

我正在尝试使用Z3,更具体地说是使用muZ,但有些查询失败了,我不明白为什么。 例如,暗示的定义

(declare-rel imp (Bool Bool))
(declare-var post Bool)

(rule (imp false post))
(rule (=> (imp true post) post))

(query (imp true false) :print-certificate true)

给出错误(error "query failed: Illegal head. The head predicate needs to be uninterpreted and registered (as recursive) (= (:var 0) true)")

更大的示例,使用相同结构定义的许多参数按预期工作。此外,通过删除第二个规则,我收到错误ERROR: certificates are not supported for datalog,这使我怀疑由于某种原因,此问题被错误地解释为datalog,并且较大的问题被解释为fixedpoint s 。

是什么让这个查询失败?

1 个答案:

答案 0 :(得分:0)

格式表单规则通常假设规则在头部具有未解释的谓词。第二个规则在头部有一个绑定变量。

如果向数据记录规则添加非命题特征,例如算术, 定点引擎将寻求派遣了解这些功能的引擎。您可以通过指定(set-option:fixedpoint.engine' engine-name')来控制引擎,其中' engine-name'是数据记录/对偶/ pdr等。证书和答案的支持因引擎而异。