--- /dev/null
+x: BITVECTOR(64);
+y, z : BITVECTOR(32);
+ASSERT(x = y @ z);
+QUERY(x[63:32] = y);
+
--- /dev/null
+(benchmark slice
+ :status unsat
+ :logic QF_BV
+ :extrafuns ((x BitVec[64]))
+ :extrafuns ((y BitVec[32]))
+ :extrafuns ((z BitVec[32]))
+ :assumption (= x (concat y z))
+ :formula (not (= (extract[63:32] x) y))
+)
--- /dev/null
+x: BITVECTOR(64);
+y, z : BITVECTOR(32);
+ASSERT(x = y @ z);
+QUERY(x[31:0] = z);
+
--- /dev/null
+(benchmark slice
+ :status unsat
+ :logic QF_BV
+ :extrafuns ((x BitVec[64]))
+ :extrafuns ((y BitVec[32]))
+ :extrafuns ((z BitVec[32]))
+ :assumption (= x (concat y z))
+ :formula (not (= (extract[31:0] x) z))
+)
--- /dev/null
+x1, x2: BITVECTOR(64);
+y, z : BITVECTOR(32);
+ASSERT(x1 = y @ z);
+ASSERT(x2[63:32] = y);
+ASSERT(x2[31:0] = z);
+QUERY(x1 = x2);
+
--- /dev/null
+(benchmark slice
+ :status unsat
+ :logic QF_BV
+ :extrafuns ((x1 BitVec[64]))
+ :extrafuns ((x2 BitVec[64]))
+ :extrafuns ((y BitVec[32]))
+ :extrafuns ((z BitVec[32]))
+ :assumption (= x1 (concat y z))
+ :assumption (= (extract[63:32] x2) y)
+ :assumption (= (extract[31:0] x2) z)
+ :formula (not (= x1 x2))
+)
--- /dev/null
+x1: BITVECTOR(64);
+x2: BITVECTOR(32);
+x3: BITVECTOR(16);
+x4: BITVECTOR(8);
+x5: BITVECTOR(4);
+x6: BITVECTOR(2);
+x7: BITVECTOR(1);
+ASSERT(x1 = x2 @ x2);
+ASSERT(x2 = x3 @ x3);
+ASSERT(x3 = x4 @ x4);
+ASSERT(x4 = x5 @ x5);
+ASSERT(x5 = x6 @ x6);
+ASSERT(x6 = x7 @ x7);
+QUERY(x1[0:0] = x7);
+
--- /dev/null
+(benchmark slice
+ :status unsat
+ :logic QF_BV
+ :extrafuns ((x1 BitVec[64]))
+ :extrafuns ((x2 BitVec[32]))
+ :extrafuns ((x3 BitVec[16]))
+ :extrafuns ((x4 BitVec[8]))
+ :extrafuns ((x5 BitVec[4]))
+ :extrafuns ((x6 BitVec[2]))
+ :extrafuns ((x7 BitVec[1]))
+ :assumption (= x1 (concat x2 x2))
+ :assumption (= x2 (concat x3 x3))
+ :assumption (= x3 (concat x4 x4))
+ :assumption (= x4 (concat x5 x5))
+ :assumption (= x5 (concat x6 x6))
+ :assumption (= x6 (concat x7 x7))
+ :formula (not (= (extract[0:0] x1) x7))
+)
--- /dev/null
+x1: BITVECTOR(64);
+x2: BITVECTOR(32);
+x3: BITVECTOR(16);
+x4: BITVECTOR(8);
+x5: BITVECTOR(4);
+x6: BITVECTOR(2);
+x7: BITVECTOR(1);
+ASSERT(x1 = x2 @ x2);
+ASSERT(x2 = x3 @ x3);
+ASSERT(x3 = x4 @ x4);
+ASSERT(x4 = x5 @ x5);
+ASSERT(x5 = x6 @ x6);
+ASSERT(x6 = x7 @ x7);
+QUERY(x1[63:63] = x7);
+
--- /dev/null
+(benchmark slice
+ :status unsat
+ :logic QF_BV
+ :extrafuns ((x1 BitVec[64]))
+ :extrafuns ((x2 BitVec[32]))
+ :extrafuns ((x3 BitVec[16]))
+ :extrafuns ((x4 BitVec[8]))
+ :extrafuns ((x5 BitVec[4]))
+ :extrafuns ((x6 BitVec[2]))
+ :extrafuns ((x7 BitVec[1]))
+ :assumption (= x1 (concat x2 x2))
+ :assumption (= x2 (concat x3 x3))
+ :assumption (= x3 (concat x4 x4))
+ :assumption (= x4 (concat x5 x5))
+ :assumption (= x5 (concat x6 x6))
+ :assumption (= x6 (concat x7 x7))
+ :formula (not (= (extract[63:63] x1) x7))
+)
--- /dev/null
+x1: BITVECTOR(64);
+x2: BITVECTOR(32);
+x3: BITVECTOR(16);
+x4: BITVECTOR(8);
+x5: BITVECTOR(4);
+x6: BITVECTOR(2);
+x7: BITVECTOR(1);
+ASSERT(x1 = x2 @ x2);
+ASSERT(x2 = x3 @ x3);
+ASSERT(x3 = x4 @ x4);
+ASSERT(x4 = x5 @ x5);
+ASSERT(x5 = x6 @ x6);
+ASSERT(x6 = x7 @ x7);
+QUERY(x1[63:63] = x1[0:0]);
+
--- /dev/null
+(benchmark slice
+ :status unsat
+ :logic QF_BV
+ :extrafuns ((x1 BitVec[64]))
+ :extrafuns ((x2 BitVec[32]))
+ :extrafuns ((x3 BitVec[16]))
+ :extrafuns ((x4 BitVec[8]))
+ :extrafuns ((x5 BitVec[4]))
+ :extrafuns ((x6 BitVec[2]))
+ :extrafuns ((x7 BitVec[1]))
+ :assumption (= x1 (concat x2 x2))
+ :assumption (= x2 (concat x3 x3))
+ :assumption (= x3 (concat x4 x4))
+ :assumption (= x4 (concat x5 x5))
+ :assumption (= x5 (concat x6 x6))
+ :assumption (= x6 (concat x7 x7))
+ :formula (not (= (extract[63:63] x1) (extract[0:0] x1)))
+)
--- /dev/null
+x: BITVECTOR(5);
+ASSERT(x[4:1] = x[3:0]);
+QUERY(x[4:4]=x[0:0]);
+
--- /dev/null
+(benchmark slice
+ :status unsat
+ :logic QF_BV
+ :extrafuns ((x BitVec[5]))
+ :assumption (= (extract[4:1] x) (extract[3:0] x))
+ :formula (not (= (extract[4:4] x) (extract[0:0] x)))
+)
--- /dev/null
+x: BITVECTOR(5);
+ASSERT(x[4:3] = x[1:0]);
+QUERY(x[4:4]=x[0:0]);
+
--- /dev/null
+(benchmark slice
+ :status sat
+ :logic QF_BV
+ :extrafuns ((x BitVec[5]))
+ :assumption (= (extract[4:3] x) (extract[1:0] x))
+ :formula (not (= (extract[4:4] x) (extract[0:0] x)))
+)
--- /dev/null
+x: BITVECTOR(6);
+ASSERT(x[5:2] = x[3:0]);
+QUERY(x[5:4]=x[1:0]);
+
--- /dev/null
+(benchmark slice
+ :status unsat
+ :logic QF_BV
+ :extrafuns ((x BitVec[6]))
+ :assumption (= (extract[5:2] x) (extract[3:0] x))
+ :formula (not (= (extract[5:4] x) (extract[1:0] x)))
+)
--- /dev/null
+x : BITVECTOR(8);
+ASSERT(x[3:0] = 0bin0000);
+ASSERT(x[7:4] = 0bin1111);
+QUERY(x = 0bin11110000);
+
--- /dev/null
+(benchmark slice
+ :status unsat
+ :logic QF_BV
+ :extrafuns ((x BitVec[8]))
+ :assumption (= (extract[3:0] x) bv0[4])
+ :assumption (= (extract[7:4] x) bv15[4])
+ :formula (not (= x bv240[8]))
+)
--- /dev/null
+x : BITVECTOR(8);
+ASSERT(x = 0bin01010101);
+QUERY(x[0:0]@x[2:2]@x[4:4]@x[6:6] = 0bin1111);
+
--- /dev/null
+(benchmark slice
+ :status unsat
+ :logic QF_BV
+ :extrafuns ((x BitVec[8]))
+ :assumption (= x bv85[8])
+ :formula (not (= (concat (concat (concat (extract[0:0] x) (extract[2:2] x)) (extract[4:4] x)) (extract[6:6] x)) bv15[4]))
+)
--- /dev/null
+x, y: BITVECTOR(8);
+z1, z2: BITVECTOR(4);
+ASSERT(x = 0bin01010101);
+ASSERT(y = 0bin10101010);
+ASSERT(z1 = x[0:0]@x[2:2]@x[4:4]@x[6:6]);
+ASSERT(z2 = y[7:7]@y[5:5]@y[3:3]@y[1:1]);
+QUERY(z1 = z2);
+
--- /dev/null
+(benchmark slice
+ :status unsat
+ :logic QF_BV
+ :extrafuns ((x BitVec[8]))
+ :extrafuns ((y BitVec[8]))
+ :extrafuns ((z1 BitVec[4]))
+ :extrafuns ((z2 BitVec[4]))
+ :assumption (= x bv85[8])
+ :assumption (= y bv170[8])
+ :assumption (= z1 (concat (concat (concat (extract[0:0] x) (extract[2:2] x)) (extract[4:4] x)) (extract[6:6] x)))
+ :assumption (= z2 (concat (concat (concat (extract[7:7] y) (extract[5:5] y)) (extract[3:3] y)) (extract[1:1] y)))
+ :formula (not (= z1 z2))
+)
--- /dev/null
+x, y: BITVECTOR(8);
+z1, z2: BITVECTOR(4);
+ASSERT(z1 = x[0:0]@x[2:2]@x[4:4]@x[6:6]);
+ASSERT(z2 = y[7:7]@y[5:5]@y[3:3]@y[1:1]);
+ASSERT(x = 0bin01010101);
+ASSERT(y = 0bin10101010);
+QUERY(z1 = z2);
+
--- /dev/null
+(benchmark slice
+ :status unsat
+ :logic QF_BV
+ :extrafuns ((x BitVec[8]))
+ :extrafuns ((y BitVec[8]))
+ :extrafuns ((z1 BitVec[4]))
+ :extrafuns ((z2 BitVec[4]))
+ :assumption (= z1 (concat (concat (concat (extract[0:0] x) (extract[2:2] x)) (extract[4:4] x)) (extract[6:6] x)))
+ :assumption (= z2 (concat (concat (concat (extract[7:7] y) (extract[5:5] y)) (extract[3:3] y)) (extract[1:1] y)))
+ :assumption (= x bv85[8])
+ :assumption (= y bv170[8])
+ :formula (not (= z1 z2))
+)
--- /dev/null
+x: BITVECTOR(16);
+ASSERT(x[15:1] = x[14:0]);
+ASSERT(x[0:0] = 0bin0);
+QUERY(x = 0bin0000000000000000);
+
--- /dev/null
+(benchmark slice
+ :status unsat
+ :logic QF_BV
+ :extrafuns ((x BitVec[16]))
+ :assumption (= (extract[15:1] x) (extract[14:0] x))
+ :assumption (= (extract[0:0] x) bv0[1])
+ :formula (not (= x bv0[16]))
+)
--- /dev/null
+x: BITVECTOR(16);
+ASSERT(x[15:15] = 0bin1);
+ASSERT(x[15:1] = x[14:0]);
+QUERY(x = 0bin1111111111111111);
+
--- /dev/null
+(benchmark slice
+ :status unsat
+ :logic QF_BV
+ :extrafuns ((x BitVec[16]))
+ :assumption (= (extract[15:15] x) bv1[1])
+ :assumption (= (extract[15:1] x) (extract[14:0] x))
+ :formula (not (= x bv65535[16]))
+)
--- /dev/null
+x: BITVECTOR(16);
+ASSERT(x[15:15] = 0bin1);
+ASSERT(x[15:2] = x[13:0]);
+QUERY(x = 0bin1111111111111111);
+
--- /dev/null
+(benchmark slice
+ :status sat
+ :logic QF_BV
+ :extrafuns ((x BitVec[16]))
+ :assumption (= (extract[15:15] x) bv1[1])
+ :assumption (= (extract[15:2] x) (extract[13:0] x))
+ :formula (not (= x bv65535[16]))
+)
--- /dev/null
+x: BITVECTOR(16);
+y: BITVECTOR(12);
+ASSERT(y = x[11:0]);
+ASSERT(y = x[15:4]);
+ASSERT(y[3:1] = y[2:0]);
+ASSERT(x[0:0] = 0bin1);
+QUERY(x = 0bin1111111111111111);
+
--- /dev/null
+(benchmark slice
+ :status unsat
+ :logic QF_BV
+ :extrafuns ((x BitVec[16]))
+ :extrafuns ((y BitVec[12]))
+ :assumption (= y (extract[11:0] x))
+ :assumption (= y (extract[15:4] x))
+ :assumption (= (extract[3:1] y) (extract[2:0] y))
+ :assumption (= (extract[0:0] x) bv1[1])
+ :formula (not (= x bv65535[16]))
+)
--- /dev/null
+x: BITVECTOR(16);
+y: BITVECTOR(12);
+ASSERT(x[0:0] = 0bin1);
+ASSERT(y = x[11:0]);
+ASSERT(y = x[15:4]);
+ASSERT(y[3:1] = y[2:0]);
+QUERY(x = 0bin1111111111111111);
+
--- /dev/null
+(benchmark slice
+ :status unsat
+ :logic QF_BV
+ :extrafuns ((x BitVec[16]))
+ :extrafuns ((y BitVec[12]))
+ :assumption (= (extract[0:0] x) bv1[1])
+ :assumption (= y (extract[11:0] x))
+ :assumption (= y (extract[15:4] x))
+ :assumption (= (extract[3:1] y) (extract[2:0] y))
+ :formula (not (= x bv65535[16]))
+)
--- /dev/null
+x: BITVECTOR(16);
+y: BITVECTOR(12);
+ASSERT(y = x[11:0]);
+ASSERT(y = x[15:4]);
+ASSERT(y[3:2] = y[1:0]);
+ASSERT(x[1:0] = 0bin01);
+QUERY(x = 0bin0101010101010101);
+
--- /dev/null
+(benchmark slice
+ :status unsat
+ :logic QF_BV
+ :extrafuns ((x BitVec[16]))
+ :extrafuns ((y BitVec[12]))
+ :assumption (= y (extract[11:0] x))
+ :assumption (= y (extract[15:4] x))
+ :assumption (= (extract[3:2] y) (extract[1:0] y))
+ :assumption (= (extract[1:0] x) bv1[2])
+ :formula (not (= x bv21845[16]))
+)