2
Z3のC++インターフェイスを使って校正を有効にするにはどうすればよいですか?私は次のように設定しようとしました:プロダクトプルーフをtrueにしましたが、そのラインのコメントを外すと、プルーフ()を呼び出すラインのコメントを外す前に、ソリューションに推測を追加しようとするとクラッシュしました。例えば、C++ファイル内の関数に基づいて:z3 C++インターフェイスでプルーフを有効にするにはどうすればよいですか?
void prove_example2(std::ostream& os) {
os << "prove_example2\n";
context c;
solver s(c);
params p(c);
//p.set(":produce-proofs", true);
s.set(p);
expr x = c.int_const("x");
expr y = c.int_const("y");
expr z = c.int_const("z");
sort I = c.int_sort();
func_decl g = function("g", I, I);
expr conjecture1 = implies(g(g(x) - g(y)) != g(z) && x + z <= y && y <= x,
z < 0);
s.add(!conjecture1);
os << "conjecture 1:\n" << conjecture1 << "\n";
if (s.check() == unsat) {
os << "proved" << "\n";
// Needs setup before calling
//os << s.proof() << "\n";
}
else
os << "failed to prove" << "\n";
}
このように見えますが、証明を取得した後に証明パラメータを再度オフにすることを忘れないでください。そうしないと、明示的にプルーフを取得していないサブユニットテストがクラッシュします。 – dewtell
(小規模で可読な)テストケースを共有する場合は、これらのクラッシュを確認してください。 –
こんにちは、クリストファー。以前のテスト(demorgan、ここで私は証明書をunsatの場合はダンプしていました)から証明パラメータを残したとき、分布のexample.cppファイルに基づいてクラッシュする単体テストはnonlinear_example1です。私が変換した他のものは、これまでのところbitvector_example2を通してokと思われ、パラメータをオフに戻すとクラッシュが消えます。ですから、これはnonlinear_example1のautoconfigとの特定の競合であると推測しており、そのサンプルファイルで試すことができます。私たちはビルドシステムの下にこれを持っています、あるいは私はオリジナルdistrで自分自身でそれを試してみるでしょう。 – dewtell