Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 使用Z3API解决LRA运行速度比在终端中使用z3慢_C_Z3_Smt - Fatal编程技术网

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

C 使用Z3API解决LRA运行速度比在终端中使用z3慢,c,z3,smt,C,Z3,Smt,我试图用Z3来解决一个随机的广义带包装问题(LRA),我在c程序中调用了Z3API,下面是代码 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 = ftel

我试图用Z3来解决一个随机的广义带包装问题(LRA),我在c程序中调用了Z3API,下面是代码

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);

我还尝试通过命令“z3 smttest”解决终端中的smttest问题。然而,在终端中,它比在c程序中调用api运行得更快。我想知道是否需要设置任何配置以使其在api模式下快速运行?(顺便说一下,z3在终端中的运行速度是调用api的两倍。)

函数“z3_assert_cnstr(ctx,fs);”不再可用,因此您必须使用非常旧的z3版本。使用“求解器”对象来声明表达式,并且还使用C++ API来提高可靠性。您可以为指定的逻辑(如“QF_LRA”)创建解算器,在这种情况下,初始设置必须适合该逻辑。默认情况下,Z3将在第一次检查sat之前通过分析断言的公式来自动找到良好的设置。

函数“Z3_assert_cnstr(ctx,fs);”不再可用,因此您必须使用非常旧的Z3版本。使用“求解器”对象来声明表达式,并且还使用C++ API来提高可靠性。您可以为指定的逻辑(如“QF_LRA”)创建解算器,在这种情况下,初始设置必须适合该逻辑。默认情况下,Z3将在第一次检查sat之前,通过分析断言的公式,尝试自动找到良好的设置。

非常感谢您的回答。我为“QF_LRA”逻辑创建了一个求解器,这个问题就解决了。非常感谢您的回答。我为“QF_LRA”逻辑创建了一个求解器,解决了这个问题。