APIを使用してSMTLIB式を読んだとします。
context ctx;
...
expr F = to_expr(ctx, Z3_parse_smtlib2_file(ctx,argv[1],0,0,0,0,0,0));
式F
は、次の形式のアサーションの接続詞です。
(and (< (+ x y) 3)
(> (- x1 x2) 0)
(< (- x1 x2) 4)
(not (= (- x1 x2) 1))
(not (= (- x1 x2) 2))
(not (= (- x1 x2) 3)))
投稿から次のコードフラグメントを使用して、この接続詞から個々のアサーションを抽出したいと思います。unsatコアのz3 split句を使用して、unsatコアをもう一度見つけてみてください。
F = F.simplify();
for (unsigned i = 0; i < F.num_args(); i++) {
expr Ai = F.arg(i);
// ... Do something with Ai, just printing in this example.
std::cout << Ai << "\n";
}
を利用した後F.arg(i)
、元の句(< (+ x y) 3)
はに変更されました(not (<= 3 (+ x y)))
。これが私の
(not (<= 3 (+ x y)))
a)質問:条項をどのように配置でき(< (+ x y) 3)
ますか?
b)質問:<=
この場合、記号は以下を意味するのではなく、意味することを意味すると思います。私は正しいですか?
c)質問:句(not (<= 3 (+ x y)))
モデルがtrueまたはfalseであるため、次のような算術値を取得するにはどうすればよいx = 1, y = -1
ですか?
どんな提案にもとても感謝しています。どうもありがとうございます。