parsesmtlib2string を使用してテストを実装しようとすると、エラーが発生しました。
println("Hello World!");
var smtlib2String = ""
smtlib2String += "(declare-fun x () bool)" + "\n"
smtlib2String += "(declare-fun y () bool)" + "\n"
smtlib2String += "(assert (= x y))" + "\n"
smtlib2String += "(assert (= x true))" + "\n"
// smtlib2String += "(check-sat)" + "\n"
// smtlib2String += "(model)" + "\n"
smtlib2String += "(exit)" + "\n"
val cfg = new Z3Config
val z3 = new Z3Context(cfg)
z3.parseSMTLIB2String(smtlib2String)
「Check-sat」のコメントを外すと、「unknown」と表示されます。「モデル」のコメントを外すと、「サポートされていません」と表示されます。
Z3 3.2 で F# を使用すると Term が返されますが、Scala では戻り値の型は Unit です。Z3-C API を調べましたが、ist の使用方法に関する適切な例が見つかりませんでした。
では、smtlib2string を使用してモデルを取得する最良の方法は何でしょうか?
ところで: Scala^Z3 を使用して Z3AST をビルドすると問題なく動作し、.checkAndGetModel() を使用してモデルを取得できます。上記の SMT-LIB2 コードは、F# .NET parsesmtlib2string メソッドで正常に動作します。
「getSMTLIBFormulas、getSMTLIBAssumptions、getSMTLIBDecls、getSMTLIBSorts」のいずれかを使用すると、「エラー: パーサー (データ) が利用できません」というメッセージが表示されます。
「getSMTLIBError.size」を使用すると「0」になります。