.NETAPIで作成された既存のZ34.1コンテキストがあり、多くの関数宣言、ソート宣言、仮定がアサートされています。
このコンテキストで既存のすべての宣言を使用してSMT-LIB2文字列を解析する最もクリーンな方法は何ですか?具体的には、コンテキスト内のすべての宣言を繰り返す方法はありますか?宣言にアクセスできるようにするメソッドがContextに表示されませんでした。
現在、私は次のことを行っています。
Context z3 = new Context();
// ... declare sorts, add declarations (parsing other input files), add assertions, to z3 context
List<FuncDecl> decls = new List<FuncDecl>();
List<Symbol> names = new List<Symbol>();
string pstr; // smtlib2 string to be parsed populated elsewhere
// ... populate decls and names by iterating over my internal data structures with references to these declarations
BoolExpr prop = z3.ParseSMTLIB2String(pstr, null, null, names.ToArray(), decls.ToArray());
これらすべての宣言とシンボル名をz3コンテキスト自体から取得する方法はありますか?それらはすべて、z3オブジェクトですでに宣言されています。内部データ構造を反復処理するよりも、この方法で実行したいと思います。
私はそれを見逃したかもしれませんが、APIでこれを行うことができるものは何も見つかりませんでした。Solver.Assertionsを介して利用できるアサートされた数式の配列に似たものをイメージしています。