使用 z3 api 解决 LRA 运行速度比在终端中使用 z3 慢

Using z3 api to solve LRA runs slower than use z3 in terminal

我正在尝试使用 Z3 解决随机广义条带包装问题 (LRA),我在 C 程序中调用 Z3 api,这是代码。

Z3_context ctx;
Z3_ast fs;
LOG_MSG("smt2parser_example");
FILE *fp = fopen("smttest","r");  
if(fp == NULL)  
{
    perror("fopen()");
    return;
}
int file_size;
fseek(fp,0,SEEK_END);
file_size = ftell( fp );

char *tmp;
fseek( fp , 0 , SEEK_SET);
tmp =  (char *)malloc( (file_size+1) * sizeof( char ) );
tmp[file_size]='[=11=]';
fread( tmp , file_size , sizeof(char) , fp);

ctx = mk_context();
fs  = Z3_parse_smtlib2_string(ctx, tmp, 0, 0, 0, 0, 0, 0);
Z3_assert_cnstr(ctx, fs);

Z3_model m      = 0;

Z3_check(ctx);

Z3_del_context(ctx);

我也尝试通过命令 "z3 smttest" 解决终端中的 smttest。但是,在终端中,它比在 c 程序中调用 api 快 运行s。我想知道是否需要设置任何配置才能使其在 api 模式下快速 运行?(顺便说一句,z3 运行s 在终端中比调用 [=17 快两倍=].)

功能"Z3_assert_cnstr(ctx, fs);"不再可用,所以您使用的Z3一定是很旧的版本。使用 "solver" 对象断言表达式,还使用 ​​C++ API 来提高可靠性。您可以为指定逻辑创建求解器,例如 "QF_LRA",在这种情况下,初始设置将强制适用于该逻辑。默认情况下,Z3 将尝试通过在第一次检查之前分析断言的公式来自动找到好的设置。