在以下示例中,我嘗試使用「(declare-const p(Int)Bool)」等未解釋的布爾函數,而不是每個假設的單個布爾常量。但它不起作用(它給編譯錯誤)。不支持布爾函數作爲假設嗎?
(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
我所知,這是不可能的(不支持)使用布爾函數。這背後有什麼理由嗎?有沒有不同的方式來做到這一點?
這些鏈接看起來不對。你能發佈實際的代碼嗎? – 2017-06-19 14:54:20