我正在尝试使用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 。
是什么让这个查询失败?
答案 0 :(得分:0)
格式表单规则通常假设规则在头部具有未解释的谓词。第二个规则在头部有一个绑定变量。
如果向数据记录规则添加非命题特征,例如算术, 定点引擎将寻求派遣了解这些功能的引擎。您可以通过指定(set-option:fixedpoint.engine' engine-name')来控制引擎,其中' engine-name'是数据记录/对偶/ pdr等。证书和答案的支持因引擎而异。