Я пытаюсь использовать Z3 для решения случайной обобщенной задачи упаковки полос (LRA) и вызываю Z3 api в программе c, вот код.
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]='\0';
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);
Я также пытаюсь решить smttest в терминале командой «z3 smttest». Однако в терминале он работает быстрее, чем вызов api в программе c. Интересно, есть ли какая-либо конфигурация, которую мне нужно установить, чтобы она работала быстро в режиме API? (Кстати, z3 работает в терминале в два раза быстрее, чем вызов API.)