【问题标题】:Z3 Substitution (Java)Z3 替换 (Java)
【发布时间】:2014-04-18 17:42:50
【问题描述】:

我尝试用另一个变量 y 简单地替换一个变量 x(如果重要,请设置变量)。从这里的帖子 (Substitution in Z3 java),我认为替代品在 Java 中可以正常工作。但是,我得到与返回相同的表达式对象(打印时)。替换是否正确实施或我犯了错误?下面是关于我如何定义变量和调用替代方法的代码 sn-p,以防万一。

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 公式似乎没有改变。无法从调试中找到任何提示。

谢谢。

【问题讨论】:

    标签: z3 substitution


    【解决方案1】:

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

    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)。我将检查 repo 中的代码。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-14
    • 2012-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多