z3上下文重置API

z3上下文重置API,z3,Z3,我想在z3中重置上下文,类似于我在yices中的操作:void yices\u reset(yices\u context ctx) z3是否有等效的命令?目前我使用的是Z3_del_上下文(ctx)但我不确定这是最有效的方法。我应该使用push/pop上下文命令,还是有其他方法?Z3_del_上下文(ctx)是一个选项。然而,在你的问题中,你提到了推送/弹出。因此,看起来您实际上只想重置断言集。如果是这样,我建议您开始使用Z3\u solver对象。我们可以在Z3_上下文对象中创建许多不同的Z

我想在z3中重置上下文,类似于我在yices中的操作:
void yices\u reset(yices\u context ctx)
z3是否有等效的命令?目前我使用的是
Z3_del_上下文(ctx)但我不确定这是最有效的方法。我应该使用push/pop上下文命令,还是有其他方法?

Z3_del_上下文(ctx)
是一个选项。然而,在你的问题中,你提到了推送/弹出。因此,看起来您实际上只想重置断言集。如果是这样,我建议您开始使用
Z3\u solver
对象。我们可以在
Z3_上下文
对象中创建许多不同的
Z3_解算器
对象。主要的优点是它们可以共享声明、公式、表达式等。BTW,Z3附带一个C++包装(<代码> Z3++。H<代码> >),这更容易使用它们的C API。这里是使用多个求解器对象的C++示例。顺便说一句,您可以同时使用多个解算器对象

context c;
expr x = c.int_const("x");
expr y = c.int_const("y");
{
   solver s(c);

   s.add(x >= 1);
   s.add(y < x + 3);
   std::cout << s.check() << "\n";

   model m = s.get_model();
   std::cout << m << "\n";
   // solver object c will be destroyed at this point
}
{
   // creating a new solver object
   solver s2(c);
   s2.add(x > y + 1);
   std::cout << s2.check() << "\n";
}
context c;
expr x=c.int_const(“x”);
expr y=c.int_const(“y”);
{
s(c);
s、 加(x>=1);
s、 加(yZ3\u del\u context(ctx)
是一个选项。但是,在您的问题中,您提到了push/pop。因此,似乎您实际上只想重置断言集。如果是这样,我建议您开始使用
Z3_solver
对象。我们可以在
Z3_上下文
对象中创建许多不同的
Z3_solver
对象。主要优势是它们可能会重新声明、公式、表达式等。B3,Z3附带一个C++包装(<代码> Z3++·h代码)>,使用C API更容易。这里是一个使用多个求解器对象的C++示例。BTW,可以同时使用多个求解器对象。
context c;
expr x = c.int_const("x");
expr y = c.int_const("y");
{
   solver s(c);

   s.add(x >= 1);
   s.add(y < x + 3);
   std::cout << s.check() << "\n";

   model m = s.get_model();
   std::cout << m << "\n";
   // solver object c will be destroyed at this point
}
{
   // creating a new solver object
   solver s2(c);
   s2.add(x > y + 1);
   std::cout << s2.check() << "\n";
}
context c;
expr x=c.int_const(“x”);
expr y=c.int_const(“y”);
{
s(c);
s、 加(x>=1);
s、 加(ystd::cout是否在解算器对象中重置以及在z3py中重置上下文?在解算器对象中重置以及在z3py中重置上下文?