Z3求解verilog赋值语句

Z3求解verilog赋值语句,z3,smt,Z3,Smt,我在z3(java api)中运行了以下代码: 我的问题是: 如何为d传递十六进制值?它只接受一个十进制值吗 是否有其他方法将位值传递给d 我看不出标题与问题的主体有什么关系,发布的与verilog相关的代码是如何分配的?实际上,上面z3的verilog代码是:分配c=a&b。都是8位,我想要输出为十进制11的c,现在不能尝试,但您是否尝试传递前缀为0x的十六进制数?SMT理论允许这样做,但我不确定mknumeric是否连接到正确的部分来实现这一点;但它对我不起作用。@ChristophWint

我在z3(java api)中运行了以下代码:

我的问题是:

  • 如何为
    d
    传递十六进制值?它只接受一个十进制值吗

  • 是否有其他方法将位值传递给
    d


  • 我看不出标题与问题的主体有什么关系,发布的与verilog相关的代码是如何分配的?实际上,上面z3的verilog代码是:分配c=a&b。都是8位,我想要输出为十进制11的c,现在不能尝试,但您是否尝试传递前缀为0x的十六进制数?SMT理论允许这样做,但我不确定mknumeric是否连接到正确的部分来实现这一点;但它对我不起作用。@ChristophWintersteiger,如果0x与mknumeric不起作用。那么根据你的说法,什么才是实现这一点的正确方法。我看不出标题与问题的主体有什么关系,发布的与verilog相关的代码是如何分配的?实际上,上面z3的verilog代码是:分配c=a&b。都是8位,我想要输出为十进制11的c,现在不能尝试,但您是否尝试传递前缀为0x的十六进制数?SMT理论允许这样做,但我不确定mknumeric是否连接到正确的部分来实现这一点;但它对我不起作用。@ChristophWintersteiger,如果0x与mknumeric不起作用。那么,根据您的看法,什么应该是实现这一点的正确方法。
    BitVecExpr a = ctx.mkBVConst("a",8);
    BitVecExpr b = ctx.mkBVConst("b",8);
    BitVecExpr c = ctx.mkBVConst("c",8);
    BitVecExpr d = (BitVecNum) ctx.mkNumeral("11",ctx.mkBitVecSort(8));
    Solver s = ctx.mkSolver();
    s.add(ctx.mkEq(c,ctx.mkBVXOR(a,b)));
    s.add(ctx.mkEq(c,d));   
    Model m = s.getModel();
    System.out.println("m.eval(a) " + m.eval(a,false)); /*m.eval(a) 0 */
    System.out.println("m.eval(b) " + m.eval(b,false));  /*m.eval(b) 11 */
    System.out.println("m.eval(c) " + m.eval(c,false));  /*m.eval(c) 11 */