【发布时间】:2019-10-11 08:39:11
【问题描述】:
我正在使用 Z3 来解决我的角子句。在 Horn 子句的主体中,未解释的谓词应该是肯定的。但是,我需要否定一些未解释的谓词。
我见过一些例子,其中否定工作正常。例如 Z3 将返回 sat 用于以下示例:
(set-logic HORN)
(declare-fun inv (Int) Bool)
(assert (inv 0))
(assert (forall ((k Int)) (or (> k 10) (not (inv k)) (inv (+ k 1)))))
(check-sat)
但我的示例如下所示,其中 Z3 返回 unknown。
(set-logic HORN)
(declare-fun inv (Int ) Bool)
(declare-fun s ( Int ) Bool)
(assert (forall ((k Int) (pc Int))(=>(and (= pc 1)(= k 0)) (inv k ))))
(assert (forall ((k Int)(k_p Int)(pc Int)(pc_p Int))
(=>(and (inv k )(= pc 1)(= pc_p 2)(= k_p (+ k 1))(not (s pc ))(s pc_p ))
(inv k_p ))))
(check-sat)
我想知道是否有办法将我的子句重写为 Z3 的 Horn 子句片段。
【问题讨论】:
标签: z3 z3-fixedpoint