簡體   English   中英

如何從Z3 smtlib2公式獲取聲明?

[英]How to get the declaration from a Z3 smtlib2 formula?

我想使用C ++ API使用Z3進行增量求解。

2012年已經有一些關於此的舊問題:

Z3 4.0 Z3_parse_smtlib2_string

Z3 4.0:獲取完整的模型

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM