我通過C API/JNA/Scala使用Z3與SMT2,似乎工作得很好。Z3 4.0 Z3_parse_smtlib2_string
我想嘗試增量式求解。所以剛開始我用Z3_parse_smtlib2_string翻譯一下:
(declare-fun x() Int)
(assert (>= x 0))
(check-sat)
(get-model)
然後我回來的Z3_ast,把它變成一個求解器通過Z3_solver_assert,與Z3_solver_check檢查,並通過恢復模型Z3_solver_get_model (如果檢查返回可滿足,在這個例子中就是這種情況)。到目前爲止沒有問題。
但是,當我想還斷言是這樣的:
(assert (= x 1))
我被卡住的地方Z3_parse_smtlib2_string被稱爲點,因爲它抱怨,x是一個未知的常數。如果我添加申報 - 樂趣到第二個片段我得到一個無效的參數錯誤。 這個變量不應該存在於環境中嗎?我是否需要設置其他參數Z3_parse_smtlib2_string?我怎樣才能從預先解析的公式中獲得這些結果?
也使用(set-option :global-decls true)沒有工作,因爲Z3告訴我,這個選項的值不能在初始化後修改。
有沒有人有線索如何解決這個問題?
無恥插件:你有沒有試過[https://github.com/psuter/ScalaZ3](https://github.com/psuter/ScalaZ3)? (披露:我是主要作者)。 – Philippe