[英]How to get the declaration from a Z3 smtlib2 formula?
我想使用C ++ API使用Z3進行增量求解。
2012年已經有一些關於此的舊問題:
Z3 4.0 Z3_parse_smtlib2_string
Z3 4.3.1 C-API parse_smtlib2_string:從哪里獲取聲明?
我想知道新的Z3版本4.4.2是否有解決方案。
基本上我想做的是這樣的:
char *decl = "(declare-const p0 Bool)";
char *assert = "(assert(= p0 true))";
Z3_ast ast = Z3_parse_smtlib2_string(ctx, (Z3_string)decl, 0, 0, 0, 0, 0, 0);
z3::expr eq1(ctx, ast);
solver.add(eq1);
//extract declarations from the solver, ctx or ast
...
//Parse the assert with the previous declarations
Z3_ast ast = Z3_parse_smtlib2_string(ctx, (Z3_string)assert, 0, 0, 0, num_decls, symbols, decl_list);
z3::expr eq2(ctx, ast);
solver.add(eq2);
solver.check();
但是我不知道如何獲取聲明。 我嘗試使用Z3_get_smtlib_num_decls,但它僅與smtlib1一起使用,而不與smtlib2一起使用。
有沒有辦法檢索聲明? 將來會實現Z3_get_smtlib2_num_decls函數嗎?
感謝您的時間。
就像Nikolaj在Z3 4.3.1中所說的那樣, C-API parse_smtlib2_string:從哪里獲取聲明? ,則必須遍歷表達式(斷言)以收集聲明。 tptp示例的鏈接已斷開,但該文件隨附Z3作為examples/tptp/tptp5.cpp
(請參見collect_decls
函數)。
另請參閱: 顯示從SMT-LIB2文件解析的聲明
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.