在Z3中为BitVecExpr的特定位赋值

时间:2015-08-14 18:21:46

标签: z3 smt

这是我的verilog声明:

reg[2:0] a;            // Create register 'a' which is 3 bit.
assign a[1] = 1'b1;    // Assigning value to 1st bit of register 'a'.

我必须在Z3中实现上述声明。 对于使用BitVecExpr的verilog语句的第一行:

BitVecExpr a = ctx.mkBVConst("a",3);

我在实现第二行verilog语句时遇到了问题。 有谁知道如何在Z3中实现这个?

1 个答案:

答案 0 :(得分:1)

使用Z3,您无法修改变量。实际上Z3并不称之为变量,它是一个常数。

您需要创建一个与旧常量相关的新常量。例如,如果您想说y = x + 1这将是

var y = ctx.MkBVAdd(x, 1);

如果您想说x = x + 1,您需要为旧版x引入一个新名称:

var x2 = ctx.MkBVAdd(x1, 1);