Z3替换(Java)

Z3替换(Java),z3,substitution,Z3,Substitution,我尝试用另一个变量y简单地替换一个变量x(如果重要,设置变量)。从post here()中,我认为replacement在Java中工作得很好。但是,我得到的表达式对象(打印时)与return相同。是否正确实施了替换,或者我犯了错误?下面是关于如何定义变量并在相关情况下调用替换方法的代码片段 EnumSort xSort = ctx.mkEnumSort(xs, ctx.mkSymbol("A"),ctx.mkSymbol("B")); SetSort xSet = ctx.mkSetSort

我尝试用另一个变量y简单地替换一个变量x(如果重要,设置变量)。从post here()中,我认为replacement在Java中工作得很好。但是,我得到的表达式对象(打印时)与return相同。是否正确实施了替换,或者我犯了错误?下面是关于如何定义变量并在相关情况下调用替换方法的代码片段

EnumSort xSort = ctx.mkEnumSort(xs, ctx.mkSymbol("A"),ctx.mkSymbol("B"));

SetSort xSet = ctx.mkSetSort(xSort);

Expr x = ctx.mkConst("x",xSet);

/*Construct the formula "formOld".....*/

Expr y = ctx.mkConst("y",x.getSort());

BoolExpr form_sub = (BoolExpr)formOld.substitute(x, y);
打印时formSub的公式似乎没有更改。无法从调试中找到任何提示


谢谢。

我尝试复制这个问题,但是替换对我来说很好。以下是我使用的代码:

Symbol xs = ctx.mkSymbol("xs");
EnumSort xSort = ctx.mkEnumSort(xs, ctx.mkSymbol("A"),ctx.mkSymbol("B"));
SetSort xSet = ctx.mkSetSort(xSort);
Expr x = ctx.mkConst("x",xSet);
Expr z = ctx.mkConst("z",xSet);            
Expr f_old = ctx.mkEq(x, z);

System.out.println("old: " + f_old);

Expr y = ctx.mkConst("y",x.getSort());
BoolExpr f_new = (BoolExpr)f_old.substitute(x, y);

System.out.println("new: " + f_new);
这段代码打印出来,完全符合预期:

old: (= x z)
new: (= y z)

您不是这样吗?

很抱歉回复太晚。不,这对我不起作用。也许我拥有的代码是旧的(大约在2月份获得,根据发行说明文件,python版本是4.3.2)。我将在回购中检查代码。谢谢