我使用不稳定分支中的Z3来试验Horn子句(commit 61385c8489b7fda11b518a67fe308ea3cfe28c3d)。我可以让Z3推断一些循环不变量,这很好。然而,通过以下简单示例,我对Z3的行为感到困惑。我在这里缺少什么?
示例1:
(set-logic HORN)
(declare-const C Int)
(assert (> C 2))
(check-sat)
(get-model)
我期待一个模型,但收到“未知”。
示例2:
(set-logic HORN)
(define-fun step ((I Int) (I1 Int)) Bool (= I1 (+ I 1)))
(define-fun post ((I1 Int)) Bool (= I1 10))
(declare-fun pre (Int) Bool)
(assert (forall ((I Int) (I1 Int)) (=> (and (pre I) (step I I1)) (post I1))))
(check-sat)
(get-model)
我希望有一个模型可以告诉我一些关于pre的信息(例如,它是假的,或者说它适用于9),但是接收
sat
(model )
感谢。
答案 0 :(得分:0)
我正在使用Z3(在线和本地)执行示例1,我正在获取
WARNING: unknown logic, ignoring set-logic command
sat
(model (define-fun C () Int 3) )
我正在使用mathsat(本地)执行示例2,我正在获取
sat
( (C 3) )
答案 1 :(得分:0)
我正在使用Z3(在线和本地)执行示例2,我正在获取
WARNING: unknown logic, ignoring set-logic command
sat
(model
(define-fun elem!0 () Int 0)
(define-fun elem!1 () Int 0)
(define-fun pre ((x!1 Int)) Bool false)
)