次の例では、各仮定に対して単一のブール定数ではなく、 "(declare-const p(Int)Bool)"のような未解釈ブール関数を使用しようとしました。しかし、それは動作しません(コンパイルエラーを起こします)。ブール関数を前提として 'check-sat'をサポートしていませんか?
(set-option :produce-unsat-cores true)
(set-option :produce-models true)
(declare-fun p (Int) Bool)
;(declare-const p1 Bool)
;(declare-const p2 Bool)
; (declare-const p3 Bool)
;; We assert (=> p C) to track C using p
(declare-const x Int)
(declare-const y Int)
(assert (=> (p 1) (> x 10)))
;; An Boolean constant may track more than one formula
(assert (=> (p 1) (> y x)))
(assert (=> (p 2) (< y 5)))
(assert (=> (p 3) (> y 0)))
(check-sat (p 1) (p 2) (p 3))
(get-unsat-core)
出力
Z3(18, 16): ERROR: invalid check-sat command, 'not' expected, assumptions must be Boolean literals
Z3(19, 19): ERROR: unsat core is not available
私はそれがブール関数を使用する(サポートされていない)可能ではないことを理解しています。その背後に何らかの理由がありますか?それを行うには別の方法がありますか?
これらのリンクは壊れているようです。実際のコードを投稿できますか? –