Z3 重播“a”的最佳方式是什么;会议“;

Z3 重播“a”的最佳方式是什么;会议“;,z3,Z3,在第一阶段,我收集了一个约束列表。然后,我想将这个“会话”(session)存储在一个文件中,即除了所有相关变量之外的所有约束,这样我就可以在第二阶段读回约束并断言它们,甚至在断言之前否定其中的一些约束 将这样的“会话”存储在文件中并将其读回的最佳方式(快速可靠)是什么?Z3_parse_smtlib2_file()API是正确的方法吗?我已经尝试了Z3_open_log()API,但没有找到读取由Z3_open_log()生成的日志文件的API。那么z3_log_replay()呢。这个API

在第一阶段,我收集了一个约束列表。然后,我想将这个“会话”(session)存储在一个文件中,即除了所有相关变量之外的所有约束,这样我就可以在第二阶段读回约束并断言它们,甚至在断言之前否定其中的一些约束

将这样的“会话”存储在文件中并将其读回的最佳方式(快速可靠)是什么?Z3_parse_smtlib2_file()API是正确的方法吗?我已经尝试了Z3_open_log()API,但没有找到读取由Z3_open_log()生成的日志文件的API。那么z3_log_replay()呢。这个API似乎还没有公开

提前谢谢


AG

由Z3_open_log()创建的日志文件可以通过命令行选项/log myfile与Z3.exe(独立解释器,而不是lib)一起重放。到今天为止,我还没有在Z3库中看到任何允许这种重播的API。目前,我已经了解到重播被视为调试分析

但是,您可以破解该库(只需在z3_replayer.h中公开z3_replayer类)并使用它来回放任何日志文件,这非常简单。下面给出了我的小可行性证明的源代码,据我所知,它运行良好。我认为能够做到这一点是非常好的,因为有时我需要为了调试目的重播会话。能够从一个文件中重播它是件好事,而不是从我的整个程序中重播,因为我的程序有点重

欢迎任何反馈。我还想知道这个功能是否可以集成到lib中

AG

#包括
#包括
#包括“api/z3_replayer.h”
int main(int argc,char*argv[])
{
const char*filename=argv[1];
std::ifstream-in(文件名);
如果(in.bad()| in.fail()){

std::cerr由Z3_open_log()创建的日志文件可以通过命令行选项/log myfile用Z3.exe(独立解释器,而不是lib)重放。到今天为止,我还没有在Z3库中看到任何允许这种重放的API。目前,我已经理解重放被视为用于调试分析

但是,您可以破解该库(只需在z3_replayer.h中公开z3_replayer类)并用它来重放任何日志文件,这是很容易的。下面给出了我的小可行性证明的源代码,据我所知,它工作得很好。我认为能够做到这一点非常好,因为有时我需要重放一个会话以进行调试。能够从一个文件而不是从我的整个程序中重放它是很好的m有点重

任何反馈都是非常欢迎的。我也很想知道这个功能是否可以集成到lib中

AG

#包括
#包括
#包括“api/z3_replayer.h”
int main(int argc,char*argv[])
{
const char*filename=argv[1];
std::ifstream-in(文件名);
如果(in.bad()| in.fail()){

你是对的,重播被认为是用于调试分析。你的破解应该可以正常工作。我们最终计划提供序列化Z3对象的功能。日志基础结构对此并不理想(例如,假设我们只想存储我们构建的许多表达式中的一个)。此外,该日志不仅是Z3状态的快照,而且是为到达
S
而执行的所有操作的日志。一年后,该移动是否已完成(序列化Z3对象)?不,此功能还不可用。您是对的,重播被视为用于调试分析。您的破解应该可以正常工作。我们最终计划提供序列化Z3对象的功能。日志基础结构对此并不理想(例如,假设我们只想存储我们构建的许多表达式中的一个)。此外,该日志不仅是Z3状态的快照,而且是为到达
S
而执行的所有操作的日志。一年后,此移动是否已完成(序列化Z3对象)?不,此功能尚不可用。
#include <fstream>
#include <iostream>
#include "api/z3_replayer.h"


int main(int argc, char * argv[])
{
   const char * filename = argv[1];
   std::ifstream in(filename);
   if (in.bad() || in.fail()) {
       std::cerr << "Error: failed to open file: " << filename << "\n";
       exit(EXIT_FAILURE);
}
    z3_replayer r(in);
    r.parse();

    Z3_context ctx = reinterpret_cast<Z3_context>(r.get_obj(0));

    check(ctx,Z3_L_TRUE); // this function is taken from the c examples 

    return 0;
}