3
如果要分析的程序的語義是作爲Horn子句給出的,則Z3現在支持求解歸納不變量(意味着期望的屬性)。Z3中的Horn子句
但z3.codeplex.com上的Z3源代碼的master
分支中的版本不支持此功能。由於Z3通過使用內插的PDR算法解決了這些Horn子句問題,因此我編譯爲interp
分支(d8b31773b809
),它支持(set-logic HORN)
。
據我所知,Horn-clause問題是用未知的謂詞來表示不變量,並且X×Y上的謂詞只是一個從X×Y到Bool的函數。到現在爲止還挺好。
我試過的第一個例子只是一個推斷for(int i=0; i<=10; i++)
循環的歸納不變量的問題。
(set-logic HORN)
(declare-fun inv (Int) Bool)
(assert (inv 0))
(assert (forall ((I Int)) (or (> I 10) (not (inv I)) (inv (+ I 1)))))
(check-sat)
到目前爲止好,得到了sat
。現在剛剛添加(assert (not (inv 15))
,我得到了unsat
。我然後嘗試
(set-logic HORN)
(declare-fun inv (Int) Bool)
(assert (inv 0))
(assert (not (inv 15)))
(check-sat)
並得到unsat
。
我在做什麼錯?
爲什麼它的價值,我得到'坐'使用Z3(承諾210bca8f456361f696152be909e33a4e8b58607f我相信) –