1
Z3的答案爲「未知」時,給出了使用量詞在陣列驗證碼:量詞和數組在Z3
(declare-const ia Int)
(declare-const ib Int)
(declare-const la Int)
(declare-const lb Int)
(declare-const A (Array Int Int))
(declare-const a (Array Int Int))
(declare-const b (Array Int Int))
(assert
(exists
((ia_1 Int) (ia_2 Int) (ib_1 Int) (la_0 Int) (lb_0 Int) (A_0 (Array Int Int)) (a_0 (Array Int Int)) (b_0 (Array Int Int)))
(and (= ia ia_2) (= ib ib_1) (= la la_0) (= lb lb_0) (= A A_0) (= a a_0) (= b b_0) (= ia_1 0) (= ib_1 0) (< ia_1 la_0) (< ib_1 lb_0) (< (select a_0 ia_1) (select b_0 ib_1)) (= ia_2 (+ ia_1 1)))))
(assert
(not
(exists
((ia_1 Int) (ib_1 Int) (la_0 Int) (lb_0 Int) (A_0 (Array Int Int)) (a_0 (Array Int Int)) (b_0 (Array Int Int)))
(and (= ia ia_1) (= ib ib_1) (= la la_0) (= lb lb_0) (= A A_0) (= a a_0) (= b b_0) (= ib_1 0)))))
(check-sat)
有沒有一種方法,以獲得正確的答案在這種情況下(「不飽和度」)?
編輯:如果向第二個連接添加例如約束(= ia_1 0)
,則Z3正確回答「sat」。
雖然,我想我可能通過不傳播一對夫婦的否定來加強它! –
感謝您的回答,但正如您所提到的,您的重寫不等同於OP的第二個斷言中的否定。另外,我的答案仍然是「未知」答案。 – roo
另外,我的意思是「正確的答案」,因爲可以證明OP中兩個斷言的連接是不合適的,而不是Z3工作不正常。 – roo