假设我们有以下代码:
context c;
solver s(c);
expr x=c.bool_const("a");
expr y=c.bool_const("a");
expr z=c.bool_const("b");
s.add(x&&!y);
std::cout<<s.check();
s.reset();
s.add(x&&!z);
std::cout<<s.check();
上面代码的执行结果是'unsat sat';结果表明 z3 将 x 和 y 视为同一个变量。z3 是否通过名称来区分变量?如果我在不同的地方使用相同的变量,我可以编写如下代码:
context c;
solver(s);
function test1(){
s.add(c.bool_const("a"));
}
function test2(){
s.add(!c.bool_const("a"));
}
函数“test1”和“test2”是否操作同一个变量?