public void TestBitVectorOps()
{
Context z3 = new Context();
var bv16 = z3.MkBitVecSort(16);
var c = (BitVecExpr)z3.MkConst("c",bv16);
var _3 = (BitVecExpr)z3.MkNumeral(3, bv16);
var _7 = (BitVecExpr)z3.MkNumeral(7, bv16);
var _1 = (BitVecExpr)z3.MkNumeral(1, bv16);
var c_and_7 = z3.MkBVAND(c, _7);
//((1 + (c & 7)) & 3)
var t = z3.MkBVAND(z3.MkBVAdd(_1, c_and_7), _3);
var s = t.Simplify(); //comes out as: (1 + (c & 3))
var t_neq_s = z3.MkNot(z3.MkEq(t, s));
var solv =z3.MkSolver();
solv.Assert(t_neq_s);
Assert.AreEqual(Status.UNSATISFIABLE, solv.Check());
}