Z3替补(Java)

时间:2014-04-18 17:42:51

标签: z3 substitution

我尝试用另一个变量y简单地替换变量x(如果重要的话设置变量)。从这里的帖子(Substitution in Z3 java),我认为替代品在Java中运行良好。但是我得到了相同的表达式对象(打印时)作为返回。替换是否正确实施或我犯了错误?下面是我如何定义变量的代码片段,并在相关的情况下调用替换方法。

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似乎没有变化。无法通过调试找到任何提示。

感谢。

1 个答案:

答案 0 :(得分:2)

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

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)

这不是你的情况吗?