public static Z3IntExpr BV2Int(this Z3BVExpr expr1, Z3Context context) { var size = expr1.SortSize; var parts = new Z3IntExpr[size]; var zero = context.MkInt(0); var bvzero = context.MkBV(0, 1); for (uint i = 0; i < size; ++i) { parts[i] = (Z3IntExpr)expr1.Index(context, i).Eq(context, bvzero).Ite( context, zero, context.MkInt(BigInteger.Pow(2, (int)i).ToString())); } return((Z3IntExpr)context.MkAdd(parts)); }
public static Z3ArithExpr Add(this Z3ArithExpr expr1, Z3Context context, Z3ArithExpr expr2) { Contract.Requires(expr1 != null && expr2 != null); return(context.MkAdd(expr1, expr2)); }